From 0dfd727222e5bc9fb7f6b1325b016d6d24dd1957 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 05:33:39 +0900 Subject: [PATCH 01/99] change: use enum for popup mode --- helpers/ui.py | 70 ++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 32 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index 9508760..cb5542d 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -19,7 +19,7 @@ gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib, Gdk, GObject, Pango from enum import Enum -# 5.5.0 +# 5.6.0 app_name = "DZGUI" start_time = 0 @@ -297,25 +297,25 @@ def process_shell_return_code(transient_parent, msg, code, original_input): #TODO: add logger output to each case 0: # success with notice popup - spawn_dialog(transient_parent, msg, "NOTIFY") + spawn_dialog(transient_parent, msg, Popup.NOTIFY) case 1: # error with notice popup if msg == "": msg = "Something went wrong" - spawn_dialog(transient_parent, msg, "NOTIFY") + spawn_dialog(transient_parent, msg, Popup.NOTIFY) case 2: # warn and recurse (e.g. validation failed) - spawn_dialog(transient_parent, msg, "NOTIFY") + spawn_dialog(transient_parent, msg, Popup.NOTIFY) treeview = transient_parent.grid.scrollable_treelist.treeview process_tree_option(original_input, treeview) case 4: # for BM only - spawn_dialog(transient_parent, msg, "NOTIFY") + spawn_dialog(transient_parent, msg, Popup.NOTIFY) treeview = transient_parent.grid.scrollable_treelist.treeview process_tree_option(["Options", "Change Battlemetrics API key"], treeview) case 5: # for steam only - spawn_dialog(transient_parent, msg, "NOTIFY") + spawn_dialog(transient_parent, msg, Popup.NOTIFY) treeview = transient_parent.grid.scrollable_treelist.treeview process_tree_option(["Options", "Change Steam API key"], treeview) case 6: @@ -330,17 +330,17 @@ def process_shell_return_code(transient_parent, msg, code, original_input): config_vals.append(i) tooltip = format_metadata(col) transient_parent.grid.update_statusbar(tooltip) - spawn_dialog(transient_parent, msg, "NOTIFY") + spawn_dialog(transient_parent, msg, Popup.NOTIFY) return case 100: # final handoff before launch - final_conf = spawn_dialog(transient_parent, msg, "CONFIRM") + final_conf = spawn_dialog(transient_parent, msg, Popup.CONFIRM) treeview = transient_parent.grid.scrollable_treelist.treeview if final_conf == 1 or final_conf is None: return process_tree_option(["Handshake", ""], treeview) case 255: - spawn_dialog(transient_parent, "Update complete. Please close DZGUI and restart.", "NOTIFY") + spawn_dialog(transient_parent, "Update complete. Please close DZGUI and restart.", Popup.NOTIFY) Gtk.main_quit() @@ -369,7 +369,7 @@ def process_tree_option(input, treeview): proc = call_out(transient_parent, subproc, args) GLib.idle_add(_load) if bool is True: - wait_dialog = GenericDialog(transient_parent, msg, "WAIT") + wait_dialog = GenericDialog(transient_parent, msg, Popup.WAIT) wait_dialog.show_all() thread = threading.Thread(target=_background, args=(subproc, args, wait_dialog)) thread.start() @@ -432,7 +432,7 @@ def process_tree_option(input, treeview): link_label = "Open Battlemetrics API page" prompt = "Enter new API key" - user_entry = EntryDialog(transient_parent, prompt, "ENTRY", link_label) + user_entry = EntryDialog(transient_parent, prompt, Popup.ENTRY, link_label) res = user_entry.get_input() if res is None: logger.info("User aborted entry dialog") @@ -711,7 +711,7 @@ class TreeView(Gtk.TreeView): iter = self.get_current_iter() server_store.remove(iter) msg = proc.stdout - res = spawn_dialog(parent, msg, "NOTIFY") + res = spawn_dialog(parent, msg, Popup.NOTIFY) case "Remove from history": record = "%s:%s" %(self.get_column_at_index(7), self.get_column_at_index(8)) call_out(parent, context_menu_label, record) @@ -734,16 +734,16 @@ class TreeView(Gtk.TreeView): conf_msg = "Really delete the mod '%s'?" %(value) success_msg = "Successfully deleted the mod '%s'." %(value) fail_msg = "An error occurred during deletion. Aborting." - res = spawn_dialog(parent, conf_msg, "CONFIRM") + res = spawn_dialog(parent, conf_msg, Popup.CONFIRM) symlink = self.get_column_at_index(1) dir = self.get_column_at_index(2) if res == 0: proc = call_out(parent, "delete", symlink, dir) if proc.returncode == 0: - spawn_dialog(parent, success_msg, "NOTIFY") + spawn_dialog(parent, success_msg, Popup.NOTIFY) self._update_quad_column("List installed mods") else: - spawn_dialog(parent, fail_msg, "NOTIFY") + spawn_dialog(parent, fail_msg, Popup.NOTIFY) case "Open in Steam Workshop": record = self.get_column_at_index(2) call_out(parent, "open_workshop_page", record) @@ -805,7 +805,7 @@ class TreeView(Gtk.TreeView): diff = now - then cooldown = 30 - math.floor(diff) if ((start_time > 0) and (now - then) < 30): - spawn_dialog(parent, "Global refresh cooldown not met. Wait %s second(s)." %(str(cooldown)), "NOTIFY") + spawn_dialog(parent, "Global refresh cooldown not met. Wait %s second(s)." %(str(cooldown)), Popup.NOTIFY) return start_time = now @@ -935,7 +935,7 @@ class TreeView(Gtk.TreeView): wait_dialog.destroy() parent = self.get_outer_window() - wait_dialog = GenericDialog(parent, "Refreshing player count", "WAIT") + wait_dialog = GenericDialog(parent, "Refreshing player count", Popup.WAIT) wait_dialog.show_all() select = self.get_selection() sels = select.get_selected_rows() @@ -971,7 +971,7 @@ class TreeView(Gtk.TreeView): No servers returned. Possible network issue or API key on cooldown? Return to the main menu, wait 60s, and try again. If this issue persists, your API key may be defunct.""" - spawn_dialog(self.get_outer_window(), textwrap.dedent(api_warn_msg), "NOTIFY") + spawn_dialog(self.get_outer_window(), textwrap.dedent(api_warn_msg), Popup.NOTIFY) grid = self.get_outer_grid() right_panel = grid.right_panel @@ -1097,7 +1097,7 @@ class TreeView(Gtk.TreeView): return mode = mode + ":" + port - wait_dialog = GenericDialog(transient_parent, "Fetching server metadata", "WAIT") + wait_dialog = GenericDialog(transient_parent, "Fetching server metadata", Popup.WAIT) wait_dialog.show_all() thread = threading.Thread(target=self._background, args=(wait_dialog, mode)) thread.start() @@ -1153,12 +1153,12 @@ class TreeView(Gtk.TreeView): data = call_out(self, "show_log") res = parse_log_rows(data) if res == 1: - spawn_dialog(self.get_outer_window(), "Failed to load log file, possibly corrupted", "NOTIFY") + spawn_dialog(self.get_outer_window(), "Failed to load log file, possibly corrupted", Popup.NOTIFY) return transient_parent = self.get_outer_window() - wait_dialog = GenericDialog(transient_parent, "Checking mods", "WAIT") + wait_dialog = GenericDialog(transient_parent, "Checking mods", Popup.WAIT) wait_dialog.show_all() thread = threading.Thread(target=self._background_quad, args=(wait_dialog, mode)) thread.start() @@ -1181,7 +1181,7 @@ class TreeView(Gtk.TreeView): qport = self.get_column_at_index(8) record = "%s:%s" %(addr, str(qport)) - wait_dialog = GenericDialog(transient_parent, "Querying server and aligning mods", "WAIT") + wait_dialog = GenericDialog(transient_parent, "Querying server and aligning mods", Popup.WAIT) wait_dialog.show_all() thread = threading.Thread(target=self._background_connection, args=(wait_dialog, record)) thread.start() @@ -1205,7 +1205,7 @@ class TreeView(Gtk.TreeView): if chosen_row == "Server browser": cooldown = call_out(self, "test_cooldown", "", "") if cooldown.returncode == 1: - spawn_dialog(self.get_outer_window(), cooldown.stdout, "NOTIFY") + spawn_dialog(self.get_outer_window(), cooldown.stdout, Popup.NOTIFY) return 1 for check in checks: toggle_signal(filters_vbox, check, '_on_check_toggle', False) @@ -1323,7 +1323,7 @@ def filter_servers(transient_parent, filters_vbox, treeview, context): toggle_signal(filters_vbox, filters_vbox, '_on_button_release', False) toggle_signal(filters_vbox, filters_vbox.maps_combo, '_on_map_changed', False) - dialog = GenericDialog(transient_parent, "Filtering results", "WAIT") + dialog = GenericDialog(transient_parent, "Filtering results", Popup.WAIT) dialog.show_all() server_store.clear() @@ -1343,6 +1343,12 @@ class Port(Enum): DEFAULT = 1 CUSTOM = 2 +class Popup(Enum): + WAIT = 1 + NOTIFY = 2 + CONFIRM = 3 + ENTRY = 4 + class GenericDialog(Gtk.MessageDialog): def __init__(self, parent, text, mode): @@ -1351,19 +1357,19 @@ class GenericDialog(Gtk.MessageDialog): return True match mode: - case "WAIT": + case Popup.WAIT: dialog_type = Gtk.MessageType.INFO button_type = Gtk.ButtonsType.NONE header_text = "Please wait" - case "NOTIFY": + case Popup.NOTIFY: dialog_type = Gtk.MessageType.INFO button_type = Gtk.ButtonsType.OK header_text = "Notice" - case "CONFIRM": + case Popup.CONFIRM: dialog_type = Gtk.MessageType.QUESTION button_type = Gtk.ButtonsType.OK_CANCEL header_text = "Confirmation" - case "ENTRY": + case Popup.ENTRY: dialog_type = Gtk.MessageType.QUESTION button_type = Gtk.ButtonsType.OK_CANCEL header_text = "User input required" @@ -1384,7 +1390,7 @@ class GenericDialog(Gtk.MessageDialog): modal=True, ) - if mode == "WAIT": + if mode == Popup.WAIT: dialogBox = self.get_content_area() spinner = Gtk.Spinner() dialogBox.pack_end(spinner, False, False, 0) @@ -1598,7 +1604,7 @@ class PingDialog(GenericDialog): dialogBox = self.get_content_area() self.set_default_response(Gtk.ResponseType.OK) self.set_size_request(500, 200) - wait_dialog = GenericDialog(parent, "Checking ping", "WAIT") + wait_dialog = GenericDialog(parent, "Checking ping", Popup.WAIT) wait_dialog.show_all() thread = threading.Thread(target=self._background, args=(wait_dialog, parent, record)) thread.start() @@ -1642,7 +1648,7 @@ class ModDialog(GenericDialog): column.set_sort_column_id(i) dialogBox.pack_end(self.scrollable, True, True, 0) - wait_dialog = GenericDialog(parent, "Fetching modlist", "WAIT") + wait_dialog = GenericDialog(parent, "Fetching modlist", Popup.WAIT) wait_dialog.show_all() thread = threading.Thread(target=self._background, args=(wait_dialog, parent, record)) thread.start() @@ -1651,7 +1657,7 @@ class ModDialog(GenericDialog): def _load(): dialog.destroy() if data.returncode == 1: - spawn_dialog(parent, "Server has no mods installed or is unsupported in this mode", "NOTIFY") + spawn_dialog(parent, "Server has no mods installed or is unsupported in this mode", Popup.NOTIFY) return self.show_all() self.set_markup("Modlist (%s mods)" %(mod_count)) From 031df3a62f931cc71e9dbf6a73ab41c6f976afc6 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 05:35:50 +0900 Subject: [PATCH 02/99] fix: batch MSQ queries --- helpers/funcs | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/helpers/funcs b/helpers/funcs index b69640f..b0c57d7 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -o pipefail -version=5.5.0 +version=5.6.0 #CONSTANTS aid=221100 @@ -38,6 +38,7 @@ lock_file="$state_path/$prefix.lock" #CACHE cache_dir="$HOME/.cache/$app_name" _cache_servers="$cache_dir/$prefix.servers" +_cache_temp="$cache_dir/$prefix.temp" _cache_my_servers="$cache_dir/$prefix.my_servers" _cache_history="$cache_dir/$prefix.history" _cache_launch="$cache_dir/$prefix.launch_mods" @@ -380,9 +381,30 @@ get_dist(){ fi } get_remote_servers(){ - local limit=20000 - local url="https://api.steampowered.com/IGameServersService/GetServerList/v1/?filter=\appid\221100&limit=$limit&key=$steam_api" - curl -Ls "$url" | jq -r '.response.servers' + params=( + "\\nor\1\map\chernarusplus\\nor\1\map\sakhal" + "\map\chernarusplus\empty\1" + "\map\chernarusplus\noplayers\1" + "\map\\sakhal" + ) + local limit=10000 + local url="https://api.steampowered.com/IGameServersService/GetServerList/v1/?" + + _fetch(){ + local param="$1" + curl -LsG "$url" \ + -d filter="\appid\221100${param}" \ + -d limit=$limit \ + -d key=$steam_api \ + | jq -M -r '.response.servers' + + } + + for ((i=0; i <${#params[@]}; i++ )); do + _fetch "${params[$i]}" > $_cache_temp.${i} + done + + jq -n '[ [inputs]|add ].[]' $_cache_temp.* && rm $_cache_temp.* } get_unique_maps(){ shift From 1eed01623a97637e9e8369fcbfa52f4854c71270 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 05:53:44 +0900 Subject: [PATCH 03/99] chore: clarify timeout message --- helpers/funcs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/funcs b/helpers/funcs index b0c57d7..59c3718 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -671,7 +671,7 @@ test_ping(){ local qport="$2" local res res=$(ping -c1 -4 -W0.5 $1 | grep time= | awk -F= '{print $4}') - [[ ! $? -eq 0 ]] && res="Unreachable" + [[ ! $? -eq 0 ]] && res="Timed out" printf "%s" "$res" } show_server_modlist(){ From 50d6bdf74f44ba2a912dc088abe505bf4109cf3f Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 06:19:37 +0900 Subject: [PATCH 04/99] feat: add pluralize func --- helpers/ui.py | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index cb5542d..ae27bd4 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -169,6 +169,14 @@ status_tooltip = { "Hall of fame ⧉": "A list of significant contributors and testers", } +def pluralize(plural, count): + suffix = plural[-2:] + if suffix == "es": + base = plural[:-2] + return f"%s{'es'[:2*count^2]}" %(base) + else: + base = plural[:-1] + return f"%s{'s'[:count^1]}" %(base) def format_ping(ping): ms = " | Ping: %s" %(ping) @@ -997,7 +1005,8 @@ class TreeView(Gtk.TreeView): self.set_model(mod_store) self.grab_focus() size = locale.format_string('%.3f', total_size, grouping=True) - grid.update_statusbar("Found %s mods taking up %s MiB" %(f'{total_mods:n}', size)) + pretty = pluralize("mods", total_mods) + grid.update_statusbar(f"Found {total_mods:n} {pretty} taking up {size} MiB") toggle_signal(self, self, '_on_keypress', True) grid = self.get_outer_grid() @@ -1286,16 +1295,10 @@ def format_metadata(row_sel): return prefix -def format_tooltip(sum, hits): - if hits == 1: - hit_suffix = "match" - else: - hit_suffix = "matches" - if sum == 1: - player_suffix = "player" - else: - player_suffix = "players" - tooltip = "Found %s %s with %s %s" %(f'{hits:n}', hit_suffix, f'{sum:n}', player_suffix) +def format_tooltip(players, hits): + hits_pretty = pluralize("matches", hits) + players_pretty = pluralize("players", players) + tooltip = f"Found {hits:n} {hits_pretty} with {players:n} {players_pretty}" return tooltip From 365b455b3c4c3595d4db280575af8d1c9a4e7022 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:34:05 +0900 Subject: [PATCH 05/99] feat: bulk mod deletion --- helpers/ui.py | 166 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 150 insertions(+), 16 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index ae27bd4..99d8102 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -48,12 +48,14 @@ default_tooltip = "Select a row to see its detailed description" server_tooltip = [None, None] user_path = os.path.expanduser('~') +cache_path = '%s/.cache/dzgui' %(user_path) state_path = '%s/.local/state/dzgui' %(user_path) helpers_path = '%s/.local/share/dzgui/helpers' %(user_path) log_path = '%s/logs' %(state_path) changelog_path = '%s/CHANGELOG.md' %(state_path) geometry_path = '%s/dzg.cols.json' %(state_path) funcs = '%s/funcs' %(helpers_path) +mods_temp_file = '%s/dzg.mods_temp' %(cache_path) logger = logging.getLogger(__name__) log_file = '%s/DZGUI_DEBUG.log' %(log_path) @@ -169,6 +171,32 @@ status_tooltip = { "Hall of fame ⧉": "A list of significant contributors and testers", } +def relative_widget(child): + # get target widget relative to source widget + # chiefly used for transient modals and parent member functions + # when calling non-adjacent widgets + # positions are relative to grid members + grid = child.get_parent().get_parent() + treeview = grid.scrollable_treelist.treeview + outer = grid.get_parent() + + widgets = { + 'grid': grid, + 'treeview': treeview, + 'outer': outer + } + + supported = [ + "ModSelectionPanel", + "ButtonBox", + "TreeView" + ] + + if child.__class__.__name__ not in supported: + raise Exception("Unsupported child widget") + + return widgets + def pluralize(plural, count): suffix = plural[-2:] if suffix == "es": @@ -571,10 +599,17 @@ class ButtonBox(Gtk.Box): def _update_single_column(self, context): logger.info("Returning from multi-column view to monocolumn view for the context '%s'" %(context)) - treeview = self.get_treeview() + widgets = relative_widget(self) + + # only applicable when returning from mod list + grid = widgets["grid"] + grid.right_panel.remove(grid.sel_panel) right_panel = self.get_parent() right_panel.set_filter_visibility(False) + treeview = widgets["treeview"] + treeview.set_selection_mode(Gtk.SelectionMode.SINGLE) + """Block maps combo when returning to main menu""" toggle_signal(right_panel.filters_vbox, right_panel.filters_vbox.maps_combo, '_on_map_changed', False) right_panel.filters_vbox.keyword_entry.set_text("") @@ -749,14 +784,30 @@ class TreeView(Gtk.TreeView): proc = call_out(parent, "delete", symlink, dir) if proc.returncode == 0: spawn_dialog(parent, success_msg, Popup.NOTIFY) - self._update_quad_column("List installed mods") + self.update_quad_column("List installed mods") else: spawn_dialog(parent, fail_msg, Popup.NOTIFY) case "Open in Steam Workshop": record = self.get_column_at_index(2) call_out(parent, "open_workshop_page", record) + def toggle_selection(self, bool): + l = len(mod_store) + match bool: + case True: + for i in range (0, l): + path = Gtk.TreePath(i) + it = mod_store.get_iter(path) + self.get_selection().select_path(path) + case False: + for i in range (0, l): + path = Gtk.TreePath(i) + it = mod_store.get_iter(path) + self.get_selection().unselect_path(path) + def _on_button_release(self, widget, event): + if event.type is Gdk.EventType.BUTTON_RELEASE and event.button != 3: + return try: pathinfo = self.get_path_at_pos(event.x, event.y) if pathinfo is None: @@ -766,8 +817,6 @@ class TreeView(Gtk.TreeView): except AttributeError: pass - if event.type is Gdk.EventType.BUTTON_RELEASE and event.button != 3: - return context = self.get_first_col() self.menu = Gtk.Menu() @@ -861,8 +910,6 @@ class TreeView(Gtk.TreeView): self.emit("on_distcalc_started") self.current_proc = CalcDist(self, addr, self.queue, cache) self.current_proc.start() - elif None: - return else: tooltip = format_metadata(row_sel) grid.update_statusbar(tooltip) @@ -1004,16 +1051,28 @@ class TreeView(Gtk.TreeView): dialog.destroy() self.set_model(mod_store) self.grab_focus() - size = locale.format_string('%.3f', total_size, grouping=True) - pretty = pluralize("mods", total_mods) - grid.update_statusbar(f"Found {total_mods:n} {pretty} taking up {size} MiB") + if abort is False: + size = locale.format_string('%.3f', total_size, grouping=True) + pretty = pluralize("mods", total_mods) + grid.update_statusbar(f"Found {total_mods:n} {pretty} taking up {size} MiB") + #2024-11-12 + toggle_signal(self, self.selected_row, '_on_tree_selection_changed', True) toggle_signal(self, self, '_on_keypress', True) grid = self.get_outer_grid() right_panel = grid.right_panel + abort = False right_panel.set_filter_visibility(False) data = call_out(self, "list_mods", mode) + + # suppress errors if no mods available on system + if data.returncode == 1: + abort = True + GLib.idle_add(load) + spawn_dialog(self.get_outer_window(), data.stdout, Popup.NOTIFY) + return 1 + result = parse_mod_rows(data) total_size = result[0] total_mods = result[1] @@ -1091,6 +1150,8 @@ class TreeView(Gtk.TreeView): selected_map.clear() selected_map.append("Map=All maps") + self.set_selection_mode(Gtk.SelectionMode.SINGLE) + for check in checks: toggle_signal(self.get_outer_grid().right_panel.filters_vbox, check, '_on_check_toggle', True) toggle_signal(self, self, '_on_keypress', True) @@ -1130,8 +1191,12 @@ class TreeView(Gtk.TreeView): cell.set_property('text', formatted) return - def _update_quad_column(self, mode): - # toggle_signal(self, self.selected_row, '_on_tree_selection_changed', False) + def set_selection_mode(self, mode): + sel = self.get_selection() + sel.set_mode(mode) + + def update_quad_column(self, mode): + toggle_signal(self, self.selected_row, '_on_tree_selection_changed', False) for column in self.get_columns(): self.remove_column(column) @@ -1141,6 +1206,10 @@ class TreeView(Gtk.TreeView): if mode == "List installed mods": cols = mod_cols self.set_model(mod_store) + # attach button panel + grid = self.get_parent().get_parent() + grid.right_panel.pack_start(grid.sel_panel, False, False, 0) + grid.show_all() else: cols = log_cols self.set_model(log_store) @@ -1152,12 +1221,10 @@ class TreeView(Gtk.TreeView): if i == 3: column.set_cell_data_func(renderer, self._format_float, func_data=None) column.set_sort_column_id(i) - #if (column_title == "Name"): - # column.set_fixed_width(600) self.append_column(column) if mode == "List installed mods": - pass + self.set_selection_mode(Gtk.SelectionMode.MULTIPLE) else: data = call_out(self, "show_log") res = parse_log_rows(data) @@ -1236,7 +1303,7 @@ class TreeView(Gtk.TreeView): self.grab_focus() elif chosen_row == "List installed mods" or chosen_row == "Show debug log": toggle_signal(self, self.selected_row, '_on_tree_selection_changed', False) - self._update_quad_column(chosen_row) + self.update_quad_column(chosen_row) toggle_signal(self, self.selected_row, '_on_tree_selection_changed', True) elif any(map(context.__contains__, valid_contexts)): # implies activated row on any server list subcontext @@ -1747,7 +1814,7 @@ class Grid(Gtk.Grid): self.scrollable_treelist.set_vexpand(True) self.right_panel = RightPanel(is_steam_deck) - + self.sel_panel = ModSelectionPanel() self.bar = Gtk.Statusbar() self.scrollable_treelist.treeview.connect("on_distcalc_started", self._on_calclat_started) @@ -1853,6 +1920,73 @@ class App(Gtk.Application): self.win.halt_proc_and_quit(self, None) +class ModSelectionPanel(Gtk.Box): + def __init__(self): + super().__init__(spacing=6) + self.set_orientation(Gtk.Orientation.VERTICAL) + + labels = [ + "Select all", + "Unselect all", + "Delete selected" + ] + + for l in labels: + button = Gtk.Button(label=l) + button.set_margin_start(10) + button.set_margin_end(10) + button.connect("clicked", self._on_button_clicked) + self.pack_start(button, False, True, 0) + + def _on_button_clicked(self, button): + label = button.get_label() + widgets = relative_widget(self) + parent = widgets["outer"] + treeview = widgets["treeview"] + match label: + case "Select all": + treeview.toggle_selection(True) + case "Unselect all": + treeview.toggle_selection(False) + case "Delete selected": + (model, pathlist) = treeview.get_selection().get_selected_rows() + ct = len(pathlist) + if ct < 1: + return + + self._iterate_mod_deletion(model, pathlist, ct) + + def _iterate_mod_deletion(self, model, pathlist, ct): + # hedge against large number of arguments + widgets = relative_widget(self) + parent = widgets["outer"] + treeview = widgets["treeview"] + + pretty = pluralize("mods", ct) + conf_msg = f"You are going to delete {ct} {pretty}. Proceed?" + success_msg = f"Successfully deleted {ct} {pretty}." + fail_msg = "An error occurred during deletion. Aborting." + + res = spawn_dialog(parent, conf_msg, Popup.CONFIRM) + if res != 0: + return + + mods = [] + for i in pathlist: + it = model.get_iter(i) + symlink = model.get_value(it, 1) + path = model.get_value(it, 2) + concat = symlink + " " + path + "\n" + mods.append(concat) + with open(mods_temp_file, "w") as outfile: + outfile.writelines(mods) + proc = call_out(parent, "delete") + if proc.returncode == 0: + spawn_dialog(parent, success_msg, Popup.NOTIFY) + treeview.update_quad_column("List installed mods") + else: + spawn_dialog(parent, fail_msg, Popup.NOTIFY) + class FilterPanel(Gtk.Box): def __init__(self): super().__init__(spacing=6) From fbc500066f4558958f4a189df0a5eedc6d60a328 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:34:25 +0900 Subject: [PATCH 06/99] fix: focus first row --- helpers/ui.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/helpers/ui.py b/helpers/ui.py index 99d8102..1b55aa9 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -969,6 +969,11 @@ class TreeView(Gtk.TreeView): else: return False + def _focus_first_row(self): + path = Gtk.TreePath(0) + it = mod_store.get_iter(path) + self.get_selection().select_path(path) + def get_column_at_index(self, index): select = self.get_selection() sels = select.get_selected_rows() @@ -1058,6 +1063,7 @@ class TreeView(Gtk.TreeView): #2024-11-12 toggle_signal(self, self.selected_row, '_on_tree_selection_changed', True) toggle_signal(self, self, '_on_keypress', True) + self._focus_first_row() grid = self.get_outer_grid() right_panel = grid.right_panel From c254de2aec6f8c4dd2fbbb6174b951984d301bf0 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:42:01 +0900 Subject: [PATCH 07/99] chore: add comments --- helpers/ui.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index 1b55aa9..16cd43e 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -172,10 +172,11 @@ status_tooltip = { } def relative_widget(child): - # get target widget relative to source widget - # chiefly used for transient modals and parent member functions - # when calling non-adjacent widgets - # positions are relative to grid members + # returns collection of outer widgets relative to source widget + # chiefly used for transient modals and accessing non-adjacent widget methods + # positions are always relative to grid sub-children + # containers and nested buttons should never need to call this function directly + grid = child.get_parent().get_parent() treeview = grid.scrollable_treelist.treeview outer = grid.get_parent() @@ -187,9 +188,9 @@ def relative_widget(child): } supported = [ - "ModSelectionPanel", - "ButtonBox", - "TreeView" + "ModSelectionPanel", # Grid < RightPanel < ModSelectionPanel + "ButtonBox", # Grid < RightPanel < ButtonBox + "TreeView" # Grid < ScrollableTree < TreeView ] if child.__class__.__name__ not in supported: @@ -590,6 +591,7 @@ class ButtonBox(Gtk.Box): button.set_size_request(10, 10) else: button.set_size_request(50,50) + #TODO: explore a more intuitive way of highlighting the active context button.set_opacity(0.6) self.buttons.append(button) button.connect("clicked", self._on_selection_button_clicked) From d6d8dde2aad09d0e2aa01cabeffa87b6b4f45599 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:43:23 +0900 Subject: [PATCH 08/99] feat: iterate mod deletion --- helpers/funcs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/helpers/funcs b/helpers/funcs index 59c3718..9c42da7 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -38,6 +38,7 @@ lock_file="$state_path/$prefix.lock" #CACHE cache_dir="$HOME/.cache/$app_name" _cache_servers="$cache_dir/$prefix.servers" +_cache_mods_temp="$cache_dir/$prefix.mods_temp" _cache_temp="$cache_dir/$prefix.temp" _cache_my_servers="$cache_dir/$prefix.my_servers" _cache_history="$cache_dir/$prefix.history" @@ -580,12 +581,23 @@ parse_server_json(){ } delete_local_mod(){ shift - local symlink="$1" - local dir="$2" - [[ ! -d $workshop_dir/$dir ]] && return 1 - [[ ! -L $game_dir/$symlink ]] && return 1 - #SC2115 - rm -rf "${workshop_dir:?}/$dir" && unlink "$game_dir/$symlink" || return 1 + if [[ -z $1 ]]; then + # use multi mode + readarray -t symlinks < <(awk '{print $1}' $_cache_mods_temp) + readarray -t ids < <(awk '{print $2}' $_cache_mods_temp) + rm "$_cache_mods_temp" + else + local symlink="$1" + local dir="$2" + readarray -t symlinks <<< "$symlink" + readarray -t ids <<< "$dir" + fi + for ((i=0; i<${#symlinks[@]}; i++)); do + [[ ! -d $workshop_dir/${ids[$i]} ]] && return 1 + [[ ! -L $game_dir/${symlinks[$i]} ]] && return 1 + #SC2115 + rm -rf "${workshop_dir:?}/${ids[$i]}" && unlink "$game_dir/${symlinks[$i]}" || return 1 + done } test_cooldown(){ [[ ! -f $_cache_cooldown ]] && return 0 From 2087f4ffa8d4797d563ca5c5989a241db311460b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 13 Nov 2024 09:52:49 +0900 Subject: [PATCH 09/99] chore: update changelog --- CHANGELOG.md | 10 ++++++++++ dzgui.sh | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0982e75..45f0ba0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [5.6.0-beta.1] 2024-11-12 +### Added +- Bulk delete mods (via 'List installed mods' list). Not compatible with Manual Mod install mode +### Fixed +- Fix for server list truncation causing some servers to not appear in results +- Suppress signal emission when switching menu contexts +- Focus first row when opening mods list +### Changed +- Clarify some error messages and normalize text formatting + ## [5.5.0-beta.5] 2024-11-03 ### Changed - Use updated A2S_RULES logic diff --git a/dzgui.sh b/dzgui.sh index 5a0bac8..3330fc8 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.5.0-beta.5 +version=5.6.0-beta.1 #CONSTANTS aid=221100 @@ -569,10 +569,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="dd7aa34df1d374739127cca3033a3f67" + ["ui.py"]="680ff0e4071681f26409fa3592a41e46" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="d8ae2662fbc3c62bdb5a51dec1935705" + ["funcs"]="fa5eb43c454e6bf2903e94884fe64644" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" From 732bc918a76faae2a21c6a134a17c6dcd15ba4eb Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 16 Nov 2024 07:42:52 +0900 Subject: [PATCH 10/99] fix: align local mod signatures --- dzgui.sh | 17 +++++++++++++++-- helpers/funcs | 12 +++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 3330fc8..5af16f5 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.1 +version=5.6.0-beta.2 #CONSTANTS aid=221100 @@ -572,7 +572,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="680ff0e4071681f26409fa3592a41e46" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="fa5eb43c454e6bf2903e94884fe64644" + ["funcs"]="acd5d85b27141082b25e07138f8b5b54" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" @@ -862,6 +862,18 @@ legacy_cols(){ < $cols_file jq '.cols += { "Queue": 120 }' > $cols_file.new && mv $cols_file.new $cols_file } +stale_mod_signatures(){ + local workshop_dir="$steam_path/steamapps/workshop/content/$aid" + if [[ -d $workshop_dir ]]; then + readarray -t old_mod_ids < <(awk -F, '{print $1}' $versions_file) + for ((i=0; i<${#old_mod_ids[@]}; ++i)); do + if [[ ! -d $workshop_dir/${old_mod_ids[$i]} ]]; then + "$HOME/.local/share/$app_name/helpers/funcs" "align_local" "${old_mod_ids[$i]}" + fi + done + fi + +} initial_setup(){ setup_dirs setup_state_files @@ -882,6 +894,7 @@ initial_setup(){ steam_deps migrate_files stale_symlinks + stale_mod_signatures local_latlon is_steam_running is_dzg_downloading diff --git a/helpers/funcs b/helpers/funcs index 9c42da7..0375292 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -117,6 +117,7 @@ declare -A funcs=( ["start_cooldown"]="start_cooldown" ["list_mods"]="list_mods" ["delete"]="delete_local_mod" +["align_local"]="align_versions_file" ["show_server_modlist"]="show_server_modlist" ["test_ping"]="test_ping" ["is_in_favs"]="is_in_favs" @@ -339,7 +340,7 @@ list_mods(){ fi } installed_mods(){ - ls -1 "$workshop_dir" + find "$workshop_dir" -maxdepth 1 -mindepth 1 -printf "%f\n" } local_latlon(){ local url="http://ip-api.com/json/$local_ip" @@ -579,6 +580,14 @@ parse_server_json(){ "\(.addr|split(":")[1])" ' | sort -k1 } +align_versions_file(){ + shift + local mod="$1" + [[ ! -f $versions_file ]] && return + < "$versions_file" awk -F, -v var="$mod" '$1 != var' > $versions_file.new && + mv $versions_file.new $versions_file + logger INFO "Removed local signatures for the mod '$mod'" +} delete_local_mod(){ shift if [[ -z $1 ]]; then @@ -597,6 +606,7 @@ delete_local_mod(){ [[ ! -L $game_dir/${symlinks[$i]} ]] && return 1 #SC2115 rm -rf "${workshop_dir:?}/${ids[$i]}" && unlink "$game_dir/${symlinks[$i]}" || return 1 + align_versions_file "align" "${ids[$i]}" done } test_cooldown(){ From 32a43cd7875c51227fef6a75b4a772f063c6d58b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 16 Nov 2024 11:37:02 +0900 Subject: [PATCH 11/99] chore: update changelog --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45f0ba0..daeff58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.2] 2024-11-15 +### Fixed +- Clean up local mod signatures from versions file when deleting mods + ## [5.6.0-beta.1] 2024-11-12 ### Added - Bulk delete mods (via 'List installed mods' list). Not compatible with Manual Mod install mode From 8b9f751ff1852713dc9da9edf45e27e36b94045d Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:49:59 +0900 Subject: [PATCH 12/99] fix: error handling for no local mods --- CHANGELOG.md | 8 +++++ dzgui.sh | 8 +++-- helpers/funcs | 57 ++++++++++++++++++++++++---------- helpers/ui.py | 85 ++++++++++++++++++++++++++++++++------------------- 4 files changed, 108 insertions(+), 50 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index daeff58..cd3f24c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [5.6.0-beta.3] 2024-11-18 +### Fixed +- Improved handling for cases where there are no locally installed mods +- Set up mod symlinks at boot, rather than only on server connect +- Prevent context menus from opening when table is empty +- When reloading table in-place, prevent duplicate panel elements from being added if already present +- Clean up signal emission + ## [5.6.0-beta.2] 2024-11-15 ### Fixed - Clean up local mod signatures from versions file when deleting mods diff --git a/dzgui.sh b/dzgui.sh index 5af16f5..7f1ab2f 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -569,10 +569,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="680ff0e4071681f26409fa3592a41e46" + ["ui.py"]="4663cdda7bf91a0c594103d6f4382f15" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="acd5d85b27141082b25e07138f8b5b54" + ["funcs"]="5eae515ea2cac2ab38212a529415e86b" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" @@ -874,6 +874,9 @@ stale_mod_signatures(){ fi } +create_new_links(){ + "$HOME/.local/share/$app_name/helpers/funcs" "update_symlinks" +} initial_setup(){ setup_dirs setup_state_files @@ -895,6 +898,7 @@ initial_setup(){ migrate_files stale_symlinks stale_mod_signatures + create_new_links local_latlon is_steam_running is_dzg_downloading diff --git a/helpers/funcs b/helpers/funcs index 0375292..09037f6 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -116,7 +116,7 @@ declare -A funcs=( ["query_config"]="query_config" ["start_cooldown"]="start_cooldown" ["list_mods"]="list_mods" -["delete"]="delete_local_mod" +["Delete selected mods"]="delete_local_mod" ["align_local"]="align_versions_file" ["show_server_modlist"]="show_server_modlist" ["test_ping"]="test_ping" @@ -131,6 +131,7 @@ declare -A funcs=( ["Handshake"]="final_handshake" ["get_player_count"]="get_player_count" ["lan_scan"]="lan_scan" +["update_symlinks"]="update_symlinks" ) lan_scan(){ @@ -588,19 +589,34 @@ align_versions_file(){ mv $versions_file.new $versions_file logger INFO "Removed local signatures for the mod '$mod'" } +pluralize(){ + local plural="$1" + local count="$2" + local mod + local suffix + local base + local ct + local s + + if [[ "${plural: -2}" == "es" ]]; then + base="${plural::-2}" + suffix="${plural: -2}" + ct=$((count^2)) + [[ $ct -ne 3 ]] && s="$suffix" + else + base="${plural::-1}" + suffix="${plural: -1}" + ct=$((count^1)) + [[ $ct -gt 0 ]] && s="$suffix" + fi + + printf "%s%s" "$base" "$s" +} delete_local_mod(){ shift - if [[ -z $1 ]]; then - # use multi mode - readarray -t symlinks < <(awk '{print $1}' $_cache_mods_temp) - readarray -t ids < <(awk '{print $2}' $_cache_mods_temp) - rm "$_cache_mods_temp" - else - local symlink="$1" - local dir="$2" - readarray -t symlinks <<< "$symlink" - readarray -t ids <<< "$dir" - fi + readarray -t symlinks < <(awk '{print $1}' $_cache_mods_temp) + readarray -t ids < <(awk '{print $2}' $_cache_mods_temp) + rm "$_cache_mods_temp" for ((i=0; i<${#symlinks[@]}; i++)); do [[ ! -d $workshop_dir/${ids[$i]} ]] && return 1 [[ ! -L $game_dir/${symlinks[$i]} ]] && return 1 @@ -608,16 +624,17 @@ delete_local_mod(){ rm -rf "${workshop_dir:?}/${ids[$i]}" && unlink "$game_dir/${symlinks[$i]}" || return 1 align_versions_file "align" "${ids[$i]}" done + printf "Successfully deleted %s %s." "${#symlinks[@]}" "$(pluralize "mods" ${#symlinks[@]})" + return 95 } test_cooldown(){ [[ ! -f $_cache_cooldown ]] && return 0 local old_time=$(< $_cache_cooldown) local cur_time=$(date +%s) local delta=$(($cur_time - $old_time)) - local suffix="seconds" if [[ $delta -lt 60 ]]; then local remains=$((60 - $delta)) - [[ $remains -eq 1 ]] && suffix="second" + local suffix=$(pluralize "seconds" $remains) printf "Global API cooldown in effect. Please wait %s %s." "$remains" "$suffix" exit 1 fi @@ -1104,7 +1121,11 @@ legacy_symlinks(){ unlink "$d" fi done - for d in "$workshop_dir"/*; do + readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d) + [[ ${#mod_dirs[@]} -eq 0 ]] && return + for d in "${mod_dirs[@]}"; do + # suppress errors if mods are downloading at boot + [[ ! -f "$d/meta.cpp" ]] && continue local id=$(awk -F"= " '/publishedid/ {print $2}' "$d"/meta.cpp | awk -F\; '{print $1}') local encoded_id=$(echo "$id" | awk '{printf("%c",$1)}' | base64 | sed 's/\//_/g; s/=//g; s/+/]/g') if [[ -h "$game_dir/@$encoded_id" ]]; then @@ -1113,7 +1134,11 @@ legacy_symlinks(){ done } symlinks(){ - for d in "$workshop_dir"/*; do + readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d) + [[ ${#mod_dirs[@]} -eq 0 ]] && return + for d in "${mod_dirs[@]}"; do + # suppress errors if mods are downloading at boot + [[ ! -f "$d/meta.cpp" ]] && continue id=$(awk -F"= " '/publishedid/ {print $2}' "$d"/meta.cpp | awk -F\; '{print $1}') encoded_id=$(encode "$id") link="@$encoded_id" diff --git a/helpers/ui.py b/helpers/ui.py index 16cd43e..a6ba4ea 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -330,8 +330,8 @@ def spawn_dialog(transient_parent, msg, mode): def process_shell_return_code(transient_parent, msg, code, original_input): + logger.info("Processing return code '%s' for the input '%s', returned message '%s'" %(code, original_input, msg)) match code: - #TODO: add logger output to each case 0: # success with notice popup spawn_dialog(transient_parent, msg, Popup.NOTIFY) @@ -369,6 +369,13 @@ def process_shell_return_code(transient_parent, msg, code, original_input): transient_parent.grid.update_statusbar(tooltip) spawn_dialog(transient_parent, msg, Popup.NOTIFY) return + case 95: + # reload mods list + spawn_dialog(transient_parent, msg, Popup.NOTIFY) + treeview = transient_parent.grid.scrollable_treelist.treeview + # re-block this signal before redrawing table contents + toggle_signal(treeview, treeview, '_on_keypress', False) + treeview.update_quad_column("List installed mods") case 100: # final handoff before launch final_conf = spawn_dialog(transient_parent, msg, Popup.CONFIRM) @@ -427,6 +434,8 @@ def process_tree_option(input, treeview): else: # non-blocking subprocess subprocess.Popen(['/usr/bin/env', 'bash', funcs, "Open link", command]) + case "Delete selected mods": + call_on_thread(True, context, "Deleting mods", command) case "Handshake": call_on_thread(True, context, "Waiting for DayZ", command) case _: @@ -605,7 +614,9 @@ class ButtonBox(Gtk.Box): # only applicable when returning from mod list grid = widgets["grid"] - grid.right_panel.remove(grid.sel_panel) + grid_last_child = grid.right_panel.get_children()[-1] + if isinstance(grid_last_child, ModSelectionPanel): + grid.right_panel.remove(grid.sel_panel) right_panel = self.get_parent() right_panel.set_filter_visibility(False) @@ -780,15 +791,15 @@ class TreeView(Gtk.TreeView): success_msg = "Successfully deleted the mod '%s'." %(value) fail_msg = "An error occurred during deletion. Aborting." res = spawn_dialog(parent, conf_msg, Popup.CONFIRM) - symlink = self.get_column_at_index(1) - dir = self.get_column_at_index(2) if res == 0: - proc = call_out(parent, "delete", symlink, dir) - if proc.returncode == 0: - spawn_dialog(parent, success_msg, Popup.NOTIFY) - self.update_quad_column("List installed mods") - else: - spawn_dialog(parent, fail_msg, Popup.NOTIFY) + mods = [] + symlink = self.get_column_at_index(1) + dir = self.get_column_at_index(2) + concat = symlink + " " + dir + "\n" + mods.append(concat) + with open(mods_temp_file, "w") as outfile: + outfile.writelines(mods) + process_tree_option(["Delete selected mods", ""], self) case "Open in Steam Workshop": record = self.get_column_at_index(2) call_out(parent, "open_workshop_page", record) @@ -851,6 +862,11 @@ class TreeView(Gtk.TreeView): self.menu.show_all() if event.type is Gdk.EventType.KEY_PRESS and event.keyval is Gdk.KEY_l: + sel = self.get_selection() + sels = sel.get_selected_rows() + (model, pathlist) = sels + if len(pathlist) < 1: + return self.menu.popup_at_widget(widget, Gdk.Gravity.CENTER, Gdk.Gravity.WEST) else: self.menu.popup_at_pointer(event) @@ -973,8 +989,11 @@ class TreeView(Gtk.TreeView): def _focus_first_row(self): path = Gtk.TreePath(0) - it = mod_store.get_iter(path) - self.get_selection().select_path(path) + try: + it = mod_store.get_iter(path) + self.get_selection().select_path(path) + except ValueError: + pass def get_column_at_index(self, index): select = self.get_selection() @@ -1056,31 +1075,42 @@ class TreeView(Gtk.TreeView): def _background_quad(self, dialog, mode): def load(): dialog.destroy() + # detach button panel if store is empty + if isinstance(panel_last_child, ModSelectionPanel): + if total_mods == 0: + right_panel.remove(grid.sel_panel) + grid.show_all() + right_panel.set_filter_visibility(False) self.set_model(mod_store) self.grab_focus() - if abort is False: - size = locale.format_string('%.3f', total_size, grouping=True) - pretty = pluralize("mods", total_mods) - grid.update_statusbar(f"Found {total_mods:n} {pretty} taking up {size} MiB") + size = locale.format_string('%.3f', total_size, grouping=True) + pretty = pluralize("mods", total_mods) + grid.update_statusbar(f"Found {total_mods:n} {pretty} taking up {size} MiB") #2024-11-12 toggle_signal(self, self.selected_row, '_on_tree_selection_changed', True) toggle_signal(self, self, '_on_keypress', True) self._focus_first_row() + if total_mods == 0: + spawn_dialog(self.get_outer_window(), data.stdout, Popup.NOTIFY) - grid = self.get_outer_grid() + widgets = relative_widget(self) + grid = widgets["grid"] right_panel = grid.right_panel - - abort = False - right_panel.set_filter_visibility(False) data = call_out(self, "list_mods", mode) + panel_last_child = right_panel.get_children()[-1] # suppress errors if no mods available on system if data.returncode == 1: - abort = True + total_mods = 0 + total_size = 0 GLib.idle_add(load) - spawn_dialog(self.get_outer_window(), data.stdout, Popup.NOTIFY) return 1 + # attach button panel only if missing (prevents duplication when reloading in-place) + if not isinstance(panel_last_child, ModSelectionPanel): + right_panel.pack_start(grid.sel_panel, False, False, 0) + grid.show_all() + right_panel.set_filter_visibility(False) result = parse_mod_rows(data) total_size = result[0] total_mods = result[1] @@ -1214,10 +1244,6 @@ class TreeView(Gtk.TreeView): if mode == "List installed mods": cols = mod_cols self.set_model(mod_store) - # attach button panel - grid = self.get_parent().get_parent() - grid.right_panel.pack_start(grid.sel_panel, False, False, 0) - grid.show_all() else: cols = log_cols self.set_model(log_store) @@ -1988,12 +2014,7 @@ class ModSelectionPanel(Gtk.Box): mods.append(concat) with open(mods_temp_file, "w") as outfile: outfile.writelines(mods) - proc = call_out(parent, "delete") - if proc.returncode == 0: - spawn_dialog(parent, success_msg, Popup.NOTIFY) - treeview.update_quad_column("List installed mods") - else: - spawn_dialog(parent, fail_msg, Popup.NOTIFY) + process_tree_option(["Delete selected mods", ""], treeview) class FilterPanel(Gtk.Box): def __init__(self): From 651b50ade2df8c8c05d7f8b20fc4177022499165 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:51:43 +0900 Subject: [PATCH 13/99] chore: unify time delta methods --- dzgui.sh | 2 +- helpers/ui.py | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 7f1ab2f..d95bb3a 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -569,7 +569,7 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="4663cdda7bf91a0c594103d6f4382f15" + ["ui.py"]="353e6fcb8d2c674a3720c0ab8a2b3fd6" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["funcs"]="5eae515ea2cac2ab38212a529415e86b" diff --git a/helpers/ui.py b/helpers/ui.py index a6ba4ea..6ef843d 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -12,7 +12,6 @@ import subprocess import sys import textwrap import threading -import time locale.setlocale(locale.LC_ALL, '') gi.require_version("Gtk", "3.0") @@ -22,7 +21,6 @@ from enum import Enum # 5.6.0 app_name = "DZGUI" -start_time = 0 cache = {} config_vals = [] @@ -874,15 +872,11 @@ class TreeView(Gtk.TreeView): def refresh_player_count(self): parent = self.get_outer_window() - global start_time - then = start_time - now = time.monotonic() - diff = now - then - cooldown = 30 - math.floor(diff) - if ((start_time > 0) and (now - then) < 30): - spawn_dialog(parent, "Global refresh cooldown not met. Wait %s second(s)." %(str(cooldown)), Popup.NOTIFY) - return - start_time = now + cooldown = call_out(self, "test_cooldown", "", "") + if cooldown.returncode == 1: + spawn_dialog(self.get_outer_window(), cooldown.stdout, Popup.NOTIFY) + return 1 + call_out(self, "start_cooldown", "", "") thread = threading.Thread(target=self._background_player_count, args=()) thread.start() From 3e9c5a96d90833ddea05a0d78090a2f24673270a Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 19 Nov 2024 21:51:59 +0900 Subject: [PATCH 14/99] chore: bump version --- dzgui.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dzgui.sh b/dzgui.sh index d95bb3a..2f3ea7a 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.2 +version=5.6.0-beta.3 #CONSTANTS aid=221100 From 9fdc123e2c11e28f1fcc985e5ca80ac8db4e7094 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:28:36 +0900 Subject: [PATCH 15/99] feat: header bar --- CHANGELOG.md | 10 + dzgui.sh | 8 +- helpers/funcs | 7 +- helpers/ui.py | 876 +++++++++++++++++++++++++++++++++++--------------- 4 files changed, 642 insertions(+), 259 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cd3f24c..fe598b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Changelog +## [5.6.0-beta.4] 2024-11-20 +### Added +- Application header bar and controls +- Menu context subtitle in header bar +### Changed +- Refactor control flow for more robust contextual parsing +- Stop sending modal dialog hints to outer window +### Fixed +- Favorite server message not updating correctly + ## [5.6.0-beta.3] 2024-11-18 ### Fixed - Improved handling for cases where there are no locally installed mods diff --git a/dzgui.sh b/dzgui.sh index 2f3ea7a..454b930 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.3 +version=5.6.0-beta.4 #CONSTANTS aid=221100 @@ -569,10 +569,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="353e6fcb8d2c674a3720c0ab8a2b3fd6" + ["ui.py"]="27ef5c9b811011521c81985ee2b32bb4" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="5eae515ea2cac2ab38212a529415e86b" + ["funcs"]="75afe0be7e73af2fb6a7e423b5ac9159" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" @@ -886,7 +886,7 @@ initial_setup(){ watcher_deps check_architecture test_connection - fetch_helpers > >(pdialog "Checking helper files") +# fetch_helpers > >(pdialog "Checking helper files") varcheck source "$config_file" lock diff --git a/helpers/funcs b/helpers/funcs index 09037f6..6ebacfd 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -115,19 +115,19 @@ declare -A funcs=( ["test_cooldown"]="test_cooldown" ["query_config"]="query_config" ["start_cooldown"]="start_cooldown" -["list_mods"]="list_mods" +["List installed mods"]="list_mods" ["Delete selected mods"]="delete_local_mod" ["align_local"]="align_versions_file" ["show_server_modlist"]="show_server_modlist" ["test_ping"]="test_ping" ["is_in_favs"]="is_in_favs" ["show_log"]="show_log" -["gen_log"]="generate_log" +["Output system info to log file"]="generate_log" ["open_workshop_page"]="open_workshop_page" ["Add to my servers"]="update_favs_from_table" ["Remove from my servers"]="update_favs_from_table" ["Remove from history"]="remove_from_history" -["force_update"]="force_update" +["Force update local mods"]="force_update" ["Handshake"]="final_handshake" ["get_player_count"]="get_player_count" ["lan_scan"]="lan_scan" @@ -236,6 +236,7 @@ add_record(){ fav_label=$(<<< "$res" jq -r '.[].name') fav_server="$record" update_config + echo "Updated favorite server to '$fav_server' ($fav_label)" return 90 ;; "Add server by ID") diff --git a/helpers/ui.py b/helpers/ui.py index 6ef843d..123962f 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -21,7 +21,6 @@ from enum import Enum # 5.6.0 app_name = "DZGUI" - cache = {} config_vals = [] stored_keys = [] @@ -86,41 +85,6 @@ log_cols = [ "Traceback", "Message" ] -connect = [ - ("Server browser",), - ("My saved servers",), - ("Quick-connect to favorite server",), - ("Recent servers",), - ("Connect by IP",), - ("Connect by ID",), - ("Scan LAN servers",) -] -manage = [ - ("Add server by IP",), - ("Add server by ID",), - ("Change favorite server",), -] -options = [ - ("List installed mods",), - ("Toggle release branch",), - ("Toggle mod install mode",), - ("Toggle Steam/Flatpak",), - ("Toggle DZGUI fullscreen boot",), - ("Change player name",), - ("Change Steam API key",), - ("Change Battlemetrics API key",), - ("Force update local mods",), - ("Output system info to log file",) -] -help = [ - ("View changelog",), - ("Show debug log",), - ("Help file ⧉",), - ("Report a bug ⧉",), - ("Forum ⧉",), - ("Sponsor ⧉",), - ("Hall of fame ⧉",), -] filters = { "1PP": True, "3PP": True, @@ -132,42 +96,338 @@ filters = { "Non-ASCII": False, "Duplicate": False } -side_buttons = [ - "Main menu", - "Manage", - "Options", - "Help", - "Exit" -] -status_tooltip = { - "Server browser": "Used to browse the global server list", - "My saved servers": "Browse your saved servers. Unreachable/offline servers will be excluded", - "Quick-connect to favorite server": "Connect to your favorite server", - "Recent servers": "Shows the last 10 servers you connected to (includes attempts)", - "Connect by IP": "Connect to a server by IP", - "Connect by ID": "Connect to a server by Battlemetrics ID", - "Scan LAN servers": "Search for servers on your local network", - "Add server by IP": "Add a server by IP", - "Add server by ID": "Add a server by Battlemetrics ID", - "Change favorite server": "Update your quick-connect server", - "List installed mods": "Browse a list of locally-installed mods", - "Toggle release branch": "Switch between stable and testing branches", - "Toggle mod install mode": "Switch between manual and auto mod installation", - "Toggle Steam/Flatpak": "Switch the preferred client to use for launching DayZ", - "Toggle DZGUI fullscreen boot": "Whether to start DZGUI as a maximized window (desktop only)", - "Change player name": "Update your in-game name (required by some servers)", - "Change Steam API key": "Can be used if you revoked an old API key", - "Change Battlemetrics API key": "Can be used if you revoked an old API key", - "Force update local mods": "Synchronize the signatures of all local mods with remote versions (experimental)", - "Output system info to log file": "Generates a system log for troubleshooting", - "View changelog": "Opens the DZGUI changelog in a dialog window", - "Show debug log": "Read the DZGUI log generated since startup", - "Help file ⧉": "Opens the DZGUI documentation in a browser", - "Report a bug ⧉": "Opens the DZGUI issue tracker in a browser", - "Forum ⧉": "Opens the DZGUI discussion forum in a browser", - "Sponsor ⧉": "Sponsor the developer of DZGUI", - "Hall of fame ⧉": "A list of significant contributors and testers", -} + + +class EnumWithAttrs(Enum): + + def __new__(cls, *args, **kwds): + value = len(cls.__members__) + 1 + obj = object.__new__(cls) + obj._value_ = value + return obj + def __init__(self, a): + self.dict = a + + +class RowType(EnumWithAttrs): + @classmethod + def str2rowtype(cls, str): + for member in cls: + if str == member.dict["label"]: + return member + return RowType.DYNAMIC + + DYNAMIC = { + "label": None, + "tooltip": None, + } + HANDSHAKE = { + "label": "Handshake", + "tooltip": None, + "wait_msg": "Waiting for DayZ" + } + DELETE_SELECTED = { + "label": "Delete selected mods", + "tooltip": None, + "wait_msg": "Deleting mods" + } + SERVER_BROWSER = { + "label": "Server browser", + "tooltip": "Used to browse the global server list", + } + SAVED_SERVERS = { + "label": "My saved servers", + "tooltip": "Browse your saved servers. Unreachable/offline servers will be excluded", + } + QUICK_CONNECT = { + "label": "Quick-connect to favorite server", + "tooltip": "Connect to your favorite server", + "wait_msg": "Working", + "default": "unset", + "alt": None, + "val": "fav_label" + } + RECENT_SERVERS = { + "label": "Recent servers", + "tooltip": "Shows the last to servers you connected to (includes attempts)", + } + CONN_BY_IP = { + "label": "Connect by IP", + "tooltip": "Connect to a server by IP", + "prompt": "Enter IP in IP:Queryport format (e.g. 192.168.1.1:27016)", + "link_label": None, + } + CONN_BY_ID = { + "label": "Connect by ID", + "tooltip": "Connect to a server by Battlemetrics ID", + "prompt": "Enter server ID", + "link_label": "Open Battlemetrics", + } + SCAN_LAN = { + "label": "Scan LAN servers", + "tooltip": "Search for servers on your local network" + } + ADD_BY_IP = { + "label": "Add server by IP", + "tooltip": "Add a server by IP", + "prompt": "Enter IP in IP:Queryport format (e.g. 192.168.1.1:27016)", + "link_label": None, + } + ADD_BY_ID = { + "label": "Add server by ID", + "tooltip": "Add a server by Battlemetrics ID", + "prompt": "Enter server ID", + "link_label": "Open Battlemetrics", + } + CHNG_FAV = { + "label": "Change favorite server", + "tooltip": "Update your quick-connect server", + "prompt": "Enter IP in IP:Queryport format (e.g. 192.168.1.1:27016)", + "link_label": None, + "alt": None, + "default": "unset", + "val": "fav_label" + } + LIST_MODS = { + "label": "List installed mods", + "tooltip": "Browse a list of locally-installed mods", + "quad_label": "Mods" + } + TGL_BRANCH = { + "label": "Toggle release branch", + "tooltip": "Switch between stable and testing branches", + "default": None, + "val": "branch" + } + TGL_INSTALL = { + "label": "Toggle mod install mode", + "tooltip": "Switch between manual and auto mod installation", + "default": "manual", + "alt": "auto", + "val": "auto_install" + } + TGL_STEAM = { + "label": "Toggle Steam/Flatpak", + "tooltip": "Switch the preferred client to use for launching DayZ", + "alt": None, + "default": None, + "val": "preferred_client" + } + TGL_FULLSCREEN = { + "label": "Toggle DZGUI fullscreen boot", + "tooltip": "Whether to start DZGUI as a maximized window (desktop only)", + "alt": "true", + "default": "false", + "val": "fullscreen" + } + CHNG_PLAYER = { + "label": "Change player name", + "tooltip": "Update your in-game name (required by some servers)", + "prompt": "Enter new nickname", + "link_label": None, + "alt": None, + "default": None, + "val": "name" + } + CHNG_STEAM_API = { + "label": "Change Steam API key", + "tooltip": "Can be used if you revoked an old API key", + "prompt": "Enter new API key", + "link_label": "Open Steam API page", + } + CHNG_BM_API = { + "label": "Change Battlemetrics API key", + "tooltip": "Can be used if you revoked an old API key", + "link_label": "Open Battlemetrics API page", + "prompt": "Enter new API key", + } + FORCE_UPDATE = { + "label": "Force update local mods", + "tooltip": "Synchronize the signatures of all local mods with remote versions (experimental)", + "wait_msg": "Updating mods" + } + DUMP_LOG = { + "label": "Output system info to log file", + "tooltip": "Dump diagnostic data for troubleshooting", + "wait_msg": "Generating log" + } + CHANGELOG = { + "label": "View changelog", + "tooltip": "Opens the DZGUI changelog in a dialog window" + } + SHOW_LOG = { + "label": "Show debug log", + "tooltip": "Read the DZGUI log generated since startup", + "quad_label": "Debug log" + } + DOCS = { + "label": "Help file ⧉", + "tooltip": "Opens the DZGUI documentation in a browser" + } + BUGS = { + "label": "Report a bug ⧉", + "tooltip": "Opens the DZGUI issue tracker in a browser" + } + FORUM = { + "label": "Forum ⧉", + "tooltip": "Opens the DZGUI discussion forum in a browser" + } + SPONSOR = { + "label": "Sponsor ⧉", + "tooltip": "Sponsor the developer of DZGUI" + } + HOF = { + "label": "Hall of fame ⧉", + "tooltip": "A list of significant contributors and testers" + } + + +class WindowContext(EnumWithAttrs): + @classmethod + def row2con(cls, row): + m = None + for member in cls: + if row in member.dict["rows"]: + m = member + elif row in member.dict["called_by"]: + m = member + else: + continue + return m + + + MAIN_MENU = { + "label": "", + "rows": [ + RowType.SERVER_BROWSER, + RowType.SAVED_SERVERS, + RowType.QUICK_CONNECT, + RowType.RECENT_SERVERS, + RowType.CONN_BY_IP, + RowType.CONN_BY_ID, + RowType.SCAN_LAN + ], + "called_by": [] + } + MANAGE = { + "label": "Manage", + "rows": [ + RowType.ADD_BY_IP, + RowType.ADD_BY_ID, + RowType.CHNG_FAV + ], + "called_by": [] + } + OPTIONS = { + "label": "Options", + "rows":[ + RowType.LIST_MODS, + RowType.TGL_BRANCH, + RowType.TGL_INSTALL, + RowType.TGL_STEAM, + RowType.TGL_FULLSCREEN, + RowType.CHNG_PLAYER, + RowType.CHNG_STEAM_API, + RowType.CHNG_BM_API, + RowType.FORCE_UPDATE, + RowType.DUMP_LOG + ], + "called_by": [] + } + HELP = { + "label": "Help", + "rows":[ + RowType.CHANGELOG, + RowType.SHOW_LOG, + RowType.DOCS, + RowType.BUGS, + RowType.FORUM, + RowType.SPONSOR, + RowType.HOF + ], + "called_by": [] + } + # inner server contexts + TABLE_API = { + "label": "", + "rows": [], + "called_by": [ + RowType.SERVER_BROWSER + ], + } + TABLE_SERVER = { + "label": "", + "rows": [], + "called_by": [ + RowType.SAVED_SERVERS, + RowType.RECENT_SERVERS, + RowType.SCAN_LAN + ], + } + TABLE_MODS = { + "label": "", + "rows": [], + "called_by": [ + RowType.LIST_MODS, + ], + } + TABLE_LOG = { + "label": "", + "rows": [], + "called_by": [ + RowType.SHOW_LOG + ], + } + + +class WidgetType(Enum): + OUTER_WIN = 1 + TREEVIEW = 2 + GRID = 3 + RIGHT_PANEL = 4 + MOD_PANEL = 5 + FILTER_PANEL = 6 + + +class Port(Enum): + DEFAULT = 1 + CUSTOM = 2 + + +class Popup(Enum): + WAIT = 1 + NOTIFY = 2 + CONFIRM = 3 + ENTRY = 4 + + +class ButtonType(EnumWithAttrs): + MAIN_MENU = {"label": "Main menu", + "opens": WindowContext.MAIN_MENU + } + MANAGE = {"label": "Manage", + "opens": WindowContext.MANAGE + } + OPTIONS = {"label": "Options", + "opens": WindowContext.OPTIONS + } + HELP = {"label": "Help", + "opens": WindowContext.HELP + } + EXIT = {"label": "Exit", + "opens": None + } + + +class EnumeratedButton(Gtk.Button): + @GObject.Property + def button_type(self): + return self._button_type + + @button_type.setter + def button_type(self, value): + self._button_type = value + def relative_widget(child): # returns collection of outer widgets relative to source widget @@ -196,6 +456,7 @@ def relative_widget(child): return widgets + def pluralize(plural, count): suffix = plural[-2:] if suffix == "es": @@ -205,10 +466,12 @@ def pluralize(plural, count): base = plural[:-1] return f"%s{'s'[:count^1]}" %(base) + def format_ping(ping): ms = " | Ping: %s" %(ping) return ms + def format_distance(distance): if distance == "Unknown": distance = "| Distance: %s" %(distance) @@ -237,6 +500,7 @@ def parse_modlist_rows(data): modlist_store.append(row) return hits + def parse_log_rows(data): lines = data.stdout.splitlines() reader = csv.reader(lines, delimiter=delimiter) @@ -247,6 +511,7 @@ def parse_log_rows(data): for row in rows: log_store.append(row) + def parse_mod_rows(data): # GTK pads trailing zeroes on floats # https://stackoverflow.com/questions/26827434/gtk-cellrenderertext-with-format @@ -347,12 +612,13 @@ def process_shell_return_code(transient_parent, msg, code, original_input): # for BM only spawn_dialog(transient_parent, msg, Popup.NOTIFY) treeview = transient_parent.grid.scrollable_treelist.treeview - process_tree_option(["Options", "Change Battlemetrics API key"], treeview) + process_tree_option([treeview.view, RowType.CHNG_BM_API], treeview) case 5: # for steam only + # deprecated, Steam is mandatory now spawn_dialog(transient_parent, msg, Popup.NOTIFY) treeview = transient_parent.grid.scrollable_treelist.treeview - process_tree_option(["Options", "Change Steam API key"], treeview) + process_tree_option([treeview.view, RowType.CHNG_STEAM_API], treeview) case 6: # return silently pass @@ -373,14 +639,14 @@ def process_shell_return_code(transient_parent, msg, code, original_input): treeview = transient_parent.grid.scrollable_treelist.treeview # re-block this signal before redrawing table contents toggle_signal(treeview, treeview, '_on_keypress', False) - treeview.update_quad_column("List installed mods") + treeview.update_quad_column(RowType.LIST_MODS) case 100: # final handoff before launch final_conf = spawn_dialog(transient_parent, msg, Popup.CONFIRM) treeview = transient_parent.grid.scrollable_treelist.treeview if final_conf == 1 or final_conf is None: return - process_tree_option(["Handshake", ""], treeview) + process_tree_option([treeview.view, RowType.HANDSHAKE], treeview) case 255: spawn_dialog(transient_parent, "Update complete. Please close DZGUI and restart.", Popup.NOTIFY) Gtk.main_quit() @@ -389,22 +655,22 @@ def process_shell_return_code(transient_parent, msg, code, original_input): def process_tree_option(input, treeview): context = input[0] command = input[1] + cmd_string = command.dict["label"] logger.info("Parsing tree option '%s' for the context '%s'" %(command, context)) - transient_parent = treeview.get_outer_window() - toggle_contexts = [ - "Toggle mod install mode", - "Toggle release branch", - "Toggle Steam/Flatpak", - "Toggle DZGUI fullscreen boot" - ] + widgets = relative_widget(treeview) + transient_parent = widgets["outer"] + grid = widgets["grid"] def call_on_thread(bool, subproc, msg, args): def _background(subproc, args, dialog): def _load(): wait_dialog.destroy() out = proc.stdout.splitlines() - msg = out[-1] + try: + msg = out[-1] + except: + msg = '' rc = proc.returncode logger.info("Subprocess returned code %s with message '%s'" %(rc, msg)) process_shell_return_code(transient_parent, msg, rc, input) @@ -423,68 +689,82 @@ def process_tree_option(input, treeview): msg = out[-1] process_shell_return_code(transient_parent, msg, rc, input) - match context: - case "Help": - if command == "View changelog": - diag = ChangelogDialog(transient_parent, '', "Changelog -- content can be scrolled") + # help pages + if context == WindowContext.HELP: + match command: + case RowType.CHANGELOG: + diag = ChangelogDialog(transient_parent) diag.run() diag.destroy() - else: - # non-blocking subprocess - subprocess.Popen(['/usr/bin/env', 'bash', funcs, "Open link", command]) - case "Delete selected mods": - call_on_thread(True, context, "Deleting mods", command) - case "Handshake": - call_on_thread(True, context, "Waiting for DayZ", command) - case _: - if command == "Output system info to log file": - call_on_thread(True, "gen_log", "Generating log", "") - elif command == "Force update local mods": - call_on_thread(True, "force_update", "Updating mods", "") - elif command == "Quick-connect to favorite server": - call_on_thread(True, command, "Working", "") - elif command in toggle_contexts: - if command == "Toggle release branch": - call_on_thread(False, "toggle", "Updating DZGUI branch", command) - else: - proc = call_out(transient_parent, "toggle", command) - grid = treeview.get_parent().get_parent() - grid.update_right_statusbar() - tooltip = format_metadata(command) - transient_parent.grid.update_statusbar(tooltip) - else: - # This branch is only used by interactive dialogs - match command: - case "Connect by IP" | "Add server by IP" | "Change favorite server": - flag = True - link_label = "" - prompt = "Enter IP in IP:Queryport format (e.g. 192.168.1.1:27016)" - case "Connect by ID" | "Add server by ID": - flag = True - link_label = "Open Battlemetrics" - prompt = "Enter server ID" - case "Change player name": - flag = False - link_label = "" - prompt = "Enter new nickname" - case "Change Steam API key": - flag = True - link_label = "Open Steam API page" - prompt = "Enter new API key" - case "Change Battlemetrics API key": - flag = True - link_label = "Open Battlemetrics API page" - prompt = "Enter new API key" + case _: + base_cmd = "Open link" + arg_string = cmd_string + subprocess.Popen(['/usr/bin/env', 'bash', funcs, base_cmd, arg_string]) + pass + return - user_entry = EntryDialog(transient_parent, prompt, Popup.ENTRY, link_label) - res = user_entry.get_input() - if res is None: - logger.info("User aborted entry dialog") - return - logger.info("User entered: '%s'" %(res)) + # config metadata toggles + toggle_commands = [ + RowType.TGL_INSTALL, + RowType.TGL_BRANCH, + RowType.TGL_STEAM, + RowType.TGL_FULLSCREEN + ] - call_on_thread(flag, command, "Working", res) + if command in toggle_commands: + match command: + case RowType.TGL_BRANCH: + wait_msg = "Updating DZGUI branch" + call_on_thread(False, "toggle", wait_msg, cmd_string) + case _: + proc = call_out(transient_parent, "toggle", cmd_string) + grid.update_right_statusbar() + tooltip = format_metadata(command.dict["label"]) + transient_parent.grid.update_statusbar(tooltip) + return + # entry dialogs + interactive_commands = [ + RowType.CONN_BY_IP, + RowType.CONN_BY_ID, + RowType.ADD_BY_IP, + RowType.ADD_BY_ID, + RowType.CHNG_FAV, + RowType.CHNG_PLAYER, + RowType.CHNG_STEAM_API, + RowType.CHNG_BM_API + ] + + if command in interactive_commands: + prompt = command.dict["prompt"] + flag = True + link_label = command.dict["link_label"] + wait_msg = "Working" + + user_entry = EntryDialog(transient_parent, prompt, Popup.ENTRY, link_label) + res = user_entry.get_input() + + if res is None: + logger.info("User aborted entry dialog") + return + logger.info("User entered: '%s'" %(res)) + + if command == RowType.CHNG_PLAYER: flag = False + call_on_thread(flag, cmd_string, wait_msg, res) + return + + # standalone commands + misc_commands = [ + RowType.DELETE_SELECTED, + RowType.HANDSHAKE, + RowType.DUMP_LOG, + RowType.FORCE_UPDATE, + RowType.QUICK_CONNECT + ] + if command in misc_commands: + wait_msg = command.dict["wait_msg"] + call_on_thread(True, cmd_string, wait_msg, '') + return def reinit_checks(): toggled_checks.clear() @@ -498,18 +778,30 @@ def reinit_checks(): class OuterWindow(Gtk.Window): + @GObject.Property + def widget_type(self): + return self._widget_type + + @widget_type.setter + def widget_type(self, value): + self._widget_type = value + def __init__(self, is_steam_deck, is_game_mode): super().__init__(title=app_name) - self.connect("delete-event", self.halt_proc_and_quit) - # Deprecated in GTK 4.0 - self.set_border_width(10) - self.set_type_hint(Gdk.WindowTypeHint.DIALOG) + self.hb = AppHeaderBar() + # steam deck taskbar may occlude elements + if is_steam_deck is False: + self.set_titlebar(self.hb) + + self.set_property("widget_type", WidgetType.OUTER_WIN) + + self.connect("delete-event", self.halt_proc_and_quit) + self.set_border_width(10) + + #app > win > grid > scrollable > treeview [row/server/mod store] + #app > win > grid > vbox > buttonbox > filterpanel > combo [map store] - """ - app > win > grid > scrollable > treeview [row/server/mod store] - app > win > grid > vbox > buttonbox > filterpanel > combo [map store] - """ self.grid = Grid(is_steam_deck) self.add(self.grid) if is_game_mode is True: @@ -521,6 +813,7 @@ class OuterWindow(Gtk.Window): # Hide FilterPanel on main menu self.show_all() self.grid.right_panel.set_filter_visibility(False) + self.grid.sel_panel.set_visible(False) self.grid.scrollable_treelist.treeview.grab_focus() def halt_proc_and_quit(self, window, event): @@ -592,8 +885,11 @@ class ButtonBox(Gtk.Box): set_surrounding_margins(self, 10) self.buttons = list() - for side_button in side_buttons: - button = Gtk.Button(label=side_button) + self.is_steam_deck = is_steam_deck + + for side_button in ButtonType: + button = EnumeratedButton(label=side_button.dict["label"]) + button.set_property("button_type", side_button) if is_steam_deck is True: button.set_size_request(10, 10) else: @@ -614,14 +910,14 @@ class ButtonBox(Gtk.Box): grid = widgets["grid"] grid_last_child = grid.right_panel.get_children()[-1] if isinstance(grid_last_child, ModSelectionPanel): - grid.right_panel.remove(grid.sel_panel) + grid.sel_panel.set_visible(False) right_panel = self.get_parent() right_panel.set_filter_visibility(False) treeview = widgets["treeview"] treeview.set_selection_mode(Gtk.SelectionMode.SINGLE) - """Block maps combo when returning to main menu""" + # Block maps combo when returning to main menu toggle_signal(right_panel.filters_vbox, right_panel.filters_vbox.maps_combo, '_on_map_changed', False) right_panel.filters_vbox.keyword_entry.set_text("") keyword_filter.clear() @@ -630,38 +926,49 @@ class ButtonBox(Gtk.Box): for column in treeview.get_columns(): treeview.remove_column(column) - for i, column_title in enumerate([context]): + # used as a convenience for Steam Deck if it has no titlebar + for i, column_title in enumerate([context.dict["label"]]): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) treeview.append_column(column) - self._populate(context) + + if self.is_steam_deck is False: + treeview.set_headers_visible(False) + + self._populate(context.dict["opens"]) toggle_signal(treeview, treeview, '_on_keypress', False) treeview.set_model(row_store) treeview.grab_focus() def _populate(self, context): - match context: - case 'Manage': array_context = manage - case 'Main menu': array_context = connect - case 'Options': array_context = options - case 'Help': array_context = help - row_store.clear() - status = array_context[0][0] - treeview = self.get_treeview() - grid = self.get_parent().get_parent() + widgets = relative_widget(self) + treeview = widgets["treeview"] + grid = widgets["grid"] + window = widgets["outer"] - for items in array_context: - row_store.append(list(items)) - grid.update_statusbar(status_tooltip[status]) + # set global window context + treeview.view = context + + row_store.clear() + array = context.dict["rows"] + + window.hb.set_subtitle(context.dict["label"]) + + for item in array: + label = item.dict["label"] + tooltip = item.dict["tooltip"] + t = (label, ) + row_store.append(t) + grid.update_statusbar(tooltip) treeview.grab_focus() def _on_selection_button_clicked(self, button): treeview = self.get_treeview() toggle_signal(treeview, treeview.selected_row, '_on_tree_selection_changed', False) - context = button.get_label() + context = button.get_property("button_type") logger.info("User clicked '%s'" %(context)) - if context == "Exit": + if context == ButtonType.EXIT: logger.info("Normal user exit") Gtk.main_quit() return @@ -676,9 +983,10 @@ class ButtonBox(Gtk.Box): button.set_opacity(1.0) for col in cols: - col.set_title(context) + col.set_title(context.dict["label"]) - self._populate(context) + # get destination WindowContext enum from button + self._populate(context.dict["opens"]) toggle_signal(treeview, treeview.selected_row, '_on_tree_selection_changed', True) @@ -714,10 +1022,20 @@ class CalcDist(multiprocessing.Process): class TreeView(Gtk.TreeView): __gsignals__ = {"on_distcalc_started": (GObject.SignalFlags.RUN_FIRST, None, ())} + @GObject.Property + def widget_type(self): + return self._widget_type + + @widget_type.setter + def widget_type(self, value): + self._widget_type = value def __init__(self, is_steam_deck): super().__init__() + self.set_property("widget_type", WidgetType.TREEVIEW) + self.view = WindowContext.MAIN_MENU + self.queue = multiprocessing.Queue() self.current_proc = None @@ -726,8 +1044,10 @@ class TreeView(Gtk.TreeView): self.set_search_column(-1) # Populate model with initial context - for rows in connect: - row_store.append(list(rows)) + for row in WindowContext.MAIN_MENU.dict["rows"]: + label = row.dict["label"] + t = (label,) + row_store.append(t) self.set_model(row_store) for i, column_title in enumerate( @@ -737,6 +1057,8 @@ class TreeView(Gtk.TreeView): column = Gtk.TreeViewColumn(column_title, renderer, text=i) self.append_column(column) + if is_steam_deck is False: + self.set_headers_visible(False) self.connect("row-activated", self._on_row_activated) self.connect("key-press-event", self._on_keypress) self.connect("key-press-event", self._on_keypress_main_menu) @@ -751,6 +1073,7 @@ class TreeView(Gtk.TreeView): self.current_proc.terminate() def _on_menu_click(self, menu_item): + #TODO: context menus use old stringwise parsing parent = self.get_outer_window() context = self.get_first_col() value = self.get_column_at_index(0) @@ -797,7 +1120,7 @@ class TreeView(Gtk.TreeView): mods.append(concat) with open(mods_temp_file, "w") as outfile: outfile.writelines(mods) - process_tree_option(["Delete selected mods", ""], self) + process_tree_option([self.view, RowType.DELETE_SELECTED], self) case "Open in Steam Workshop": record = self.get_column_at_index(2) call_out(parent, "open_workshop_page", record) @@ -832,12 +1155,19 @@ class TreeView(Gtk.TreeView): self.menu = Gtk.Menu() mod_context_items = ["Open in Steam Workshop", "Delete mod"] - subcontext_items = {"Server browser": ["Add to my servers", "Copy IP to clipboard", "Show server-side mods", "Refresh player count"], - "My saved servers": ["Remove from my servers", "Copy IP to clipboard", "Show server-side mods", "Refresh player count"], - "Recent servers": ["Add to my servers", "Remove from history", "Copy IP to clipboard", "Show server-side mods", "Refresh player count"], + subcontext_items = { + "Server browser": + ["Add to my servers", "Copy IP to clipboard", "Show server-side mods", "Refresh player count"], + "My saved servers": + ["Remove from my servers", "Copy IP to clipboard", "Show server-side mods", "Refresh player count"], + "Recent servers": + ["Add to my servers", "Remove from history", "Copy IP to clipboard", "Show server-side mods", "Refresh player count"], } # submenu hierarchy https://stackoverflow.com/questions/52847909/how-to-add-a-sub-menu-to-a-gtk-menu - if context == "Mod": + + if self.view == WindowContext.TABLE_LOG: + return + if self.view == WindowContext.TABLE_MODS: items = mod_context_items subcontext = "List installed mods" elif "Name" in context: @@ -908,7 +1238,7 @@ class TreeView(Gtk.TreeView): if self.current_proc and self.current_proc.is_alive(): self.current_proc.terminate() - if "Name" in context: + if self.view == WindowContext.TABLE_API or self.view == WindowContext.TABLE_SERVER: addr = self.get_column_at_index(7) if addr is None: return @@ -1067,20 +1397,24 @@ class TreeView(Gtk.TreeView): GLib.idle_add(loadTable) def _background_quad(self, dialog, mode): + # currently only used by list mods method def load(): dialog.destroy() - # detach button panel if store is empty + # suppress button panel if store is empty if isinstance(panel_last_child, ModSelectionPanel): if total_mods == 0: - right_panel.remove(grid.sel_panel) + # nb. do not forcibly remove previously added widgets + grid.sel_panel.set_visible(False) grid.show_all() right_panel.set_filter_visibility(False) + + grid.sel_panel.set_visible(True) self.set_model(mod_store) self.grab_focus() size = locale.format_string('%.3f', total_size, grouping=True) pretty = pluralize("mods", total_mods) grid.update_statusbar(f"Found {total_mods:n} {pretty} taking up {size} MiB") - #2024-11-12 + toggle_signal(self, self.selected_row, '_on_tree_selection_changed', True) toggle_signal(self, self, '_on_keypress', True) self._focus_first_row() @@ -1090,7 +1424,7 @@ class TreeView(Gtk.TreeView): widgets = relative_widget(self) grid = widgets["grid"] right_panel = grid.right_panel - data = call_out(self, "list_mods", mode) + data = call_out(self, mode.dict["label"], '') panel_last_child = right_panel.get_children()[-1] # suppress errors if no mods available on system @@ -1100,11 +1434,9 @@ class TreeView(Gtk.TreeView): GLib.idle_add(load) return 1 - # attach button panel only if missing (prevents duplication when reloading in-place) + # show button panel missing (prevents duplication when reloading in-place) if not isinstance(panel_last_child, ModSelectionPanel): - right_panel.pack_start(grid.sel_panel, False, False, 0) - grid.show_all() - right_panel.set_filter_visibility(False) + grid.sel_panel.set_visible(True) result = parse_mod_rows(data) total_size = result[0] total_mods = result[1] @@ -1121,6 +1453,7 @@ class TreeView(Gtk.TreeView): title = col.get_title() size = col.get_width() + # steam deck column title workaround if "Name" in title: title = "Name" @@ -1140,6 +1473,8 @@ class TreeView(Gtk.TreeView): def _update_multi_column(self, mode): # Local server lists may have different filter toggles from remote list # FIXME: tree selection updates twice here. attach signal later + self.set_headers_visible(True) + toggle_signal(self, self.selected_row, '_on_tree_selection_changed', False) for column in self.get_columns(): self.remove_column(column) @@ -1175,8 +1510,14 @@ class TreeView(Gtk.TreeView): self.append_column(column) - self.update_first_col(mode) - transient_parent = self.get_outer_window() + self.update_first_col(mode.dict["label"]) + + widgets = relative_widget(self) + grid = widgets["grid"] + window = widgets["outer"] + window.hb.set_subtitle(mode.dict["label"]) + + transient_parent = window # Reset map selection selected_map.clear() @@ -1188,20 +1529,21 @@ class TreeView(Gtk.TreeView): toggle_signal(self.get_outer_grid().right_panel.filters_vbox, check, '_on_check_toggle', True) toggle_signal(self, self, '_on_keypress', True) - if mode == "Scan LAN servers": + string = mode.dict["label"] + if mode == RowType.SCAN_LAN: lan_dialog = LanButtonDialog(self.get_outer_window()) port = lan_dialog.get_selected_port() if port is None: grid = self.get_outer_grid() right_panel = grid.right_panel vbox = right_panel.button_vbox - vbox._update_single_column("Main menu") + vbox._update_single_column(ButtonType.MAIN_MENU) return - mode = mode + ":" + port + string = string + ":" + port wait_dialog = GenericDialog(transient_parent, "Fetching server metadata", Popup.WAIT) wait_dialog.show_all() - thread = threading.Thread(target=self._background, args=(wait_dialog, mode)) + thread = threading.Thread(target=self._background, args=(wait_dialog, string)) thread.start() def update_first_col(self, title): @@ -1232,10 +1574,11 @@ class TreeView(Gtk.TreeView): for column in self.get_columns(): self.remove_column(column) + self.set_headers_visible(True) mod_store.clear() log_store.clear() - if mode == "List installed mods": + if mode == RowType.LIST_MODS: cols = mod_cols self.set_model(mod_store) else: @@ -1245,24 +1588,33 @@ class TreeView(Gtk.TreeView): for i, column_title in enumerate(cols): renderer = Gtk.CellRendererText() column = Gtk.TreeViewColumn(column_title, renderer, text=i) - if mode == "List installed mods": + if mode == RowType.LIST_MODS: if i == 3: column.set_cell_data_func(renderer, self._format_float, func_data=None) column.set_sort_column_id(i) self.append_column(column) - if mode == "List installed mods": + widgets = relative_widget(self) + grid = widgets["grid"] + window = widgets["outer"] + try: + window.hb.set_subtitle(mode.dict["quad_label"]) + except KeyError: + window.hb.set_subtitle(mode.dict["label"]) + + if mode == RowType.LIST_MODS: self.set_selection_mode(Gtk.SelectionMode.MULTIPLE) else: + # short circuit and jump to debug log data = call_out(self, "show_log") res = parse_log_rows(data) + toggle_signal(self, self, '_on_keypress', True) if res == 1: spawn_dialog(self.get_outer_window(), "Failed to load log file, possibly corrupted", Popup.NOTIFY) return - transient_parent = self.get_outer_window() - wait_dialog = GenericDialog(transient_parent, "Checking mods", Popup.WAIT) + wait_dialog = GenericDialog(window, "Checking mods", Popup.WAIT) wait_dialog.show_all() thread = threading.Thread(target=self._background_quad, args=(wait_dialog, mode)) thread.start() @@ -1293,23 +1645,58 @@ class TreeView(Gtk.TreeView): def _on_row_activated(self, treeview, tree_iter, col): context = self.get_first_col() chosen_row = self.get_column_at_index(0) - output = context, chosen_row - if context == "Mod" or context == "Timestamp": + + # recycled from ModDialog + if self.view == WindowContext.TABLE_MODS: + select = treeview.get_selection() + sels = select.get_selected_rows() + (model, pathlist) = sels + if len(pathlist) < 1: + return + path = pathlist[0] + tree_iter = model.get_iter(path) + mod_id = model.get_value(tree_iter, 2) + base_cmd = "open_workshop_page" + subprocess.Popen(['/usr/bin/env', 'bash', funcs, base_cmd, mod_id]) return + + dynamic_contexts = [ + WindowContext.TABLE_LOG, + WindowContext.TABLE_SERVER, + WindowContext.TABLE_API + ] + + # if already in table, the row selection is arbitrary + if self.view in dynamic_contexts: + cr = RowType.DYNAMIC + else: + cr = RowType.str2rowtype(chosen_row) + wc = WindowContext.row2con(cr) + self.view = wc + + output = self.view, cr logger.info("User selected '%s' for the context '%s'" %(chosen_row, context)) + if self.view == WindowContext.TABLE_LOG and cr == RowType.DYNAMIC: + return + outer = self.get_outer_window() right_panel = outer.grid.right_panel filters_vbox = right_panel.filters_vbox - valid_contexts = ["Server browser", "My saved servers", "Recent servers", "Scan LAN servers"] - if chosen_row in valid_contexts: - # server contexts share the same model type + server_contexts = [ + RowType.SCAN_LAN, + RowType.SERVER_BROWSER, + RowType.RECENT_SERVERS, + RowType.SAVED_SERVERS + ] - if chosen_row == "Server browser": + # server contexts share the same model type + if cr in server_contexts: + if cr == RowType.SERVER_BROWSER: cooldown = call_out(self, "test_cooldown", "", "") if cooldown.returncode == 1: - spawn_dialog(self.get_outer_window(), cooldown.stdout, Popup.NOTIFY) + spawn_dialog(outer, cooldown.stdout, Popup.NOTIFY) return 1 for check in checks: toggle_signal(filters_vbox, check, '_on_check_toggle', False) @@ -1320,7 +1707,7 @@ class TreeView(Gtk.TreeView): if check.get_label() not in toggled_checks: toggled_checks.append(check.get_label()) check.set_active(True) - self._update_multi_column(chosen_row) + self._update_multi_column(cr) map_store.clear() map_store.append(["All maps"]) @@ -1329,12 +1716,13 @@ class TreeView(Gtk.TreeView): toggle_signal(filters_vbox, filters_vbox.maps_combo, '_on_map_changed', True) toggle_signal(self, self.selected_row, '_on_tree_selection_changed', True) self.grab_focus() - elif chosen_row == "List installed mods" or chosen_row == "Show debug log": + return + + if self.view == WindowContext.TABLE_MODS or self.view == WindowContext.TABLE_LOG: toggle_signal(self, self.selected_row, '_on_tree_selection_changed', False) - self.update_quad_column(chosen_row) + self.update_quad_column(cr) toggle_signal(self, self.selected_row, '_on_tree_selection_changed', True) - elif any(map(context.__contains__, valid_contexts)): - # implies activated row on any server list subcontext + elif self.view == WindowContext.TABLE_SERVER or self.view == WindowContext.TABLE_API: self._attempt_connection() else: # implies any other non-server option selected from main menu @@ -1342,7 +1730,10 @@ class TreeView(Gtk.TreeView): def format_metadata(row_sel): - prefix = status_tooltip[row_sel] + for i in RowType: + if i.dict["label"] == row_sel: + row = i + prefix = i.dict["tooltip"] vals = { "branch": config_vals[0], "debug": config_vals[1], @@ -1352,38 +1743,19 @@ def format_metadata(row_sel): "preferred_client": config_vals[5], "fullscreen": config_vals[6] } - match row_sel: - case "Quick-connect to favorite server" | "Change favorite server": - default = "unset" - val = "fav_label" - case "Change player name": - val = "name" - case "Toggle mod install mode": - default = "manual" - alt = "auto" - val = "auto_install" - case "Toggle debug mode": - default = "normal" - alt = "debug" - val = "debug" - case "Toggle release branch": - val = "branch" - case "Toggle Steam/Flatpak": - val = "preferred_client" - case "Toggle DZGUI fullscreen boot": - default = "false" - alt = "true" - val = "fullscreen" - case _: - return prefix - + try: + alt = row.dict["alt"] + default = row.dict["default"] + val = row.dict["val"] + except KeyError: + return prefix try: cur_val = vals[val] if cur_val == "": - return "%s | Current: %s" %(prefix, default) + return "%s | Current: '%s'" %(prefix, default) # TODO: migrate to human readable config values elif cur_val == "1": - return "%s | Current: %s" %(prefix, alt) + return "%s | Current: '%s'" %(prefix, alt) else: return "%s | Current: '%s'" %(prefix, cur_val) except KeyError: @@ -1433,19 +1805,9 @@ class AppHeaderBar(Gtk.HeaderBar): def __init__(self): super().__init__() self.props.title = app_name - self.set_decoration_layout("menu:minimize,maximize,close") + self.set_decoration_layout(":minimize,maximize,close") self.set_show_close_button(True) -class Port(Enum): - # Contains enums for LanButtonDialog ports - DEFAULT = 1 - CUSTOM = 2 - -class Popup(Enum): - WAIT = 1 - NOTIFY = 2 - CONFIRM = 3 - ENTRY = 4 class GenericDialog(Gtk.MessageDialog): def __init__(self, parent, text, mode): @@ -1564,6 +1926,7 @@ class LanButtonDialog(Gtk.Window): def get_active_button(): return self.buttonBox.active_button + class LanDialog(Gtk.MessageDialog): # Custom dialog class that performs integer validation and blocks input if invalid port # Returns None if user cancels the dialog @@ -1637,8 +2000,11 @@ class LanDialog(Gtk.MessageDialog): return True return False -def ChangelogDialog(parent, text, mode): +def ChangelogDialog(parent): + + text = '' + mode = "Changelog -- content can be scrolled" dialog = GenericDialog(parent, text, mode) dialogBox = dialog.get_content_area() dialog.set_default_response(Gtk.ResponseType.OK) @@ -1722,6 +2088,7 @@ class PingDialog(GenericDialog): data = call_out(parent, "test_ping", ip, qport) GLib.idle_add(_load) + class ModDialog(GenericDialog): def __init__(self, parent, text, mode, record): super().__init__(parent, text, mode) @@ -1784,6 +2151,7 @@ class ModDialog(GenericDialog): mod_id = model.get_value(tree_iter, 1) subprocess.Popen(['/usr/bin/env', 'bash', funcs, "open_workshop_page", mod_id]) + class EntryDialog(GenericDialog): def __init__(self, parent, text, mode, link): super().__init__(parent, text, mode) @@ -1803,7 +2171,7 @@ class EntryDialog(GenericDialog): self.userEntry.set_activates_default(True) self.dialogBox.pack_start(self.userEntry, False, False, 0) - if link != "": + if link is not None: button = Gtk.Button(label=link) button.set_margin_start(60) button.set_margin_end(60) @@ -1843,6 +2211,8 @@ class Grid(Gtk.Grid): self.right_panel = RightPanel(is_steam_deck) self.sel_panel = ModSelectionPanel() + self.right_panel.pack_start(self.sel_panel, False, False, 0) + self.show_all() self.bar = Gtk.Statusbar() self.scrollable_treelist.treeview.connect("on_distcalc_started", self._on_calclat_started) @@ -2008,7 +2378,8 @@ class ModSelectionPanel(Gtk.Box): mods.append(concat) with open(mods_temp_file, "w") as outfile: outfile.writelines(mods) - process_tree_option(["Delete selected mods", ""], treeview) + process_tree_option([treeview.view, RowType.DELETE_SELECTED], treeview) + class FilterPanel(Gtk.Box): def __init__(self): @@ -2189,6 +2560,7 @@ class FilterPanel(Gtk.Box): filter_servers(transient_parent, self, treeview, context) self.maps_entry.set_text(selection) + def main(): def usage(): From fbb133eeb2f12383725d85125c6ccb02f0ddcd89 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:34:47 +0900 Subject: [PATCH 16/99] chore: uncomment --- dzgui.sh | 4 ++-- helpers/ui.py | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 454b930..f13c3d2 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -569,7 +569,7 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="27ef5c9b811011521c81985ee2b32bb4" + ["ui.py"]="b58e0d80cb3e1b927e66866a3911a860" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["funcs"]="75afe0be7e73af2fb6a7e423b5ac9159" @@ -886,7 +886,7 @@ initial_setup(){ watcher_deps check_architecture test_connection -# fetch_helpers > >(pdialog "Checking helper files") + fetch_helpers > >(pdialog "Checking helper files") varcheck source "$config_file" lock diff --git a/helpers/ui.py b/helpers/ui.py index 123962f..114c898 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1228,11 +1228,13 @@ class TreeView(Gtk.TreeView): return index def _on_tree_selection_changed(self, selection): + # no statusbar queue on quad tables + if self.view == WindowContext.TABLE_MODS or context == "Timestamp": + return + grid = self.get_outer_grid() context = self.get_first_col() row_sel = self.get_column_at_index(0) - if context == "Mod" or context == "Timestamp": - return logger.info("Tree selection for context '%s' changed to '%s'" %(context, row_sel)) if self.current_proc and self.current_proc.is_alive(): From e9cd4572330d2c8e5bdb786eeaa7136342af8e6a Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 21 Nov 2024 19:06:01 +0900 Subject: [PATCH 17/99] fix: set window context earlier --- dzgui.sh | 2 +- helpers/ui.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index f13c3d2..b53700e 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -569,7 +569,7 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="b58e0d80cb3e1b927e66866a3911a860" + ["ui.py"]="549b0415af9ccad6a882b640615b9a22" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["funcs"]="75afe0be7e73af2fb6a7e423b5ac9159" diff --git a/helpers/ui.py b/helpers/ui.py index 114c898..1bc315d 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1229,13 +1229,13 @@ class TreeView(Gtk.TreeView): def _on_tree_selection_changed(self, selection): # no statusbar queue on quad tables - if self.view == WindowContext.TABLE_MODS or context == "Timestamp": - return grid = self.get_outer_grid() context = self.get_first_col() row_sel = self.get_column_at_index(0) logger.info("Tree selection for context '%s' changed to '%s'" %(context, row_sel)) + if self.view == WindowContext.TABLE_MODS or context == "Timestamp": + return if self.current_proc and self.current_proc.is_alive(): self.current_proc.terminate() From 08af994361d6dec73a6eaa5e78699196c2c16391 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 21 Nov 2024 23:40:17 +0900 Subject: [PATCH 18/99] feat: highlight stale mods (#162) --- CHANGELOG.md | 6 ++++ dzgui.sh | 6 ++-- helpers/funcs | 16 +++++++++++ helpers/ui.py | 78 +++++++++++++++++++++++++++++++++++++++++++-------- 4 files changed, 92 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe598b9..b979cc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [5.6.0-beta.5] 2024-11-21 +### Added +- Highlight stale mods in mods list +### Fixed +- Duplicate dialog title on Steam Deck + ## [5.6.0-beta.4] 2024-11-20 ### Added - Application header bar and controls diff --git a/dzgui.sh b/dzgui.sh index b53700e..1b41411 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.4 +version=5.6.0-beta.5 #CONSTANTS aid=221100 @@ -569,10 +569,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="549b0415af9ccad6a882b640615b9a22" + ["ui.py"]="15fd3fc32e96db8345c5a3ac8564ecc2" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="75afe0be7e73af2fb6a7e423b5ac9159" + ["funcs"]="d1f0d32e3ad34a34d561305ffa597e79" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 6ebacfd..4642378 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -39,6 +39,7 @@ lock_file="$state_path/$prefix.lock" cache_dir="$HOME/.cache/$app_name" _cache_servers="$cache_dir/$prefix.servers" _cache_mods_temp="$cache_dir/$prefix.mods_temp" +_cache_stale_mods_temp="$cache_dir/$prefix.stale_mods_temp" _cache_temp="$cache_dir/$prefix.temp" _cache_my_servers="$cache_dir/$prefix.my_servers" _cache_history="$cache_dir/$prefix.history" @@ -95,6 +96,7 @@ else fi declare -A funcs=( +["Highlight stale"]="find_stale_mods" ["My servers"]="dump_servers" ["Change player name"]="update_config_val" ["Change Steam API key"]="update_config_val" @@ -144,6 +146,20 @@ lan_scan(){ printf "%s\n" "$res" fi } +find_stale_mods(){ + local res + local mods=() + > $_cache_stale_mods_temp + for i in "${ip_list[@]}"; do + local ip=$(<<< "$i" awk -F: '{print $1}') + local qport=$(<<< "$i" awk -F: '{print $3}') + res=$(a2s $ip $qport rules) + if [[ -n $res ]]; then + printf "%s\n" "$res" >> $_cache_stale_mods_temp + fi + done + return 99 +} get_player_count(){ shift local res diff --git a/helpers/ui.py b/helpers/ui.py index 1bc315d..1270ace 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -34,8 +34,8 @@ checks = list() map_store = Gtk.ListStore(str) row_store = Gtk.ListStore(str) modlist_store = Gtk.ListStore(str, str, str) -#cf. mod_cols -mod_store = Gtk.ListStore(str, str, str, float) +#cf. mod_cols, last column holds hex color +mod_store = Gtk.ListStore(str, str, str, float, str) #cf. log_cols log_store = Gtk.ListStore(str, str, str, str) #cf. browser_cols @@ -53,6 +53,7 @@ changelog_path = '%s/CHANGELOG.md' %(state_path) geometry_path = '%s/dzg.cols.json' %(state_path) funcs = '%s/funcs' %(helpers_path) mods_temp_file = '%s/dzg.mods_temp' %(cache_path) +stale_mods_temp_file = '%s/dzg.stale_mods_temp' %(cache_path) logger = logging.getLogger(__name__) log_file = '%s/DZGUI_DEBUG.log' %(log_path) @@ -77,7 +78,8 @@ mod_cols = [ "Mod", "Symlink", "Dir", - "Size (MiB)" + "Size (MiB)", + "Color" ] log_cols = [ "Timestamp", @@ -121,6 +123,11 @@ class RowType(EnumWithAttrs): "label": None, "tooltip": None, } + HIGHLIGHT = { + "label": "Highlight stale", + "tooltip": None, + "wait_msg": "Looking for stale mods" + } HANDSHAKE = { "label": "Handshake", "tooltip": None, @@ -519,8 +526,9 @@ def parse_mod_rows(data): lines = data.stdout.splitlines() hits = len(lines) reader = csv.reader(lines, delimiter=delimiter) + # Nonetype inherits default GTK color try: - rows = [[row[0], row[1], row[2], locale.atof(row[3], func=float)] for row in reader if row] + rows = [[row[0], row[1], row[2], locale.atof(row[3], func=float), None] for row in reader if row] except IndexError: return 1 for row in rows: @@ -640,6 +648,10 @@ def process_shell_return_code(transient_parent, msg, code, original_input): # re-block this signal before redrawing table contents toggle_signal(treeview, treeview, '_on_keypress', False) treeview.update_quad_column(RowType.LIST_MODS) + case 99: + # highlight stale mods + panel = transient_parent.grid.sel_panel + panel.colorize_cells(msg, True) case 100: # final handoff before launch final_conf = spawn_dialog(transient_parent, msg, Popup.CONFIRM) @@ -690,6 +702,10 @@ def process_tree_option(input, treeview): process_shell_return_code(transient_parent, msg, rc, input) # help pages + if context == WindowContext.TABLE_MODS and command == RowType.HIGHLIGHT: + wait_msg = command.dict["wait_msg"] + call_on_thread(True, cmd_string, wait_msg, '') + return if context == WindowContext.HELP: match command: case RowType.CHANGELOG: @@ -1589,12 +1605,14 @@ class TreeView(Gtk.TreeView): for i, column_title in enumerate(cols): renderer = Gtk.CellRendererText() - column = Gtk.TreeViewColumn(column_title, renderer, text=i) + column = Gtk.TreeViewColumn(column_title, renderer, text=i, foreground=4) if mode == RowType.LIST_MODS: if i == 3: column.set_cell_data_func(renderer, self._format_float, func_data=None) column.set_sort_column_id(i) - self.append_column(column) + # hidden color property column + if i != 4: + self.append_column(column) widgets = relative_widget(self) grid = widgets["grid"] @@ -1848,7 +1866,7 @@ class GenericDialog(Gtk.MessageDialog): text=header_text, secondary_text=textwrap.fill(text, 50), buttons=button_type, - title=app_name, + title="DZGUI - Dialog", modal=True, ) @@ -1939,7 +1957,7 @@ class LanDialog(Gtk.MessageDialog): buttons=Gtk.ButtonsType.OK_CANCEL, text=text, secondary_text="Select the query port", - title=app_name, + title="DZGUI - Dialog", modal=True, ) @@ -2328,9 +2346,12 @@ class ModSelectionPanel(Gtk.Box): labels = [ "Select all", "Unselect all", - "Delete selected" + "Delete selected", + "Highlight stale" ] + self.active_button = None + for l in labels: button = Gtk.Button(label=l) button.set_margin_start(10) @@ -2339,22 +2360,57 @@ class ModSelectionPanel(Gtk.Box): self.pack_start(button, False, True, 0) def _on_button_clicked(self, button): + self.active_button = button label = button.get_label() widgets = relative_widget(self) parent = widgets["outer"] treeview = widgets["treeview"] + (model, pathlist) = treeview.get_selection().get_selected_rows() match label: case "Select all": treeview.toggle_selection(True) case "Unselect all": treeview.toggle_selection(False) case "Delete selected": - (model, pathlist) = treeview.get_selection().get_selected_rows() ct = len(pathlist) if ct < 1: return - self._iterate_mod_deletion(model, pathlist, ct) + case "Highlight stale": + process_tree_option([treeview.view, RowType.HIGHLIGHT], treeview) + case "Unhighlight stale": + self.colorize_cells(None, False) + + def colorize_cells(self, mods, bool): + def _colorize(path, color): + mod_store[path][4] = color + + widgets = relative_widget(self) + parent = widgets["outer"] + treeview = widgets["treeview"] + (model, pathlist) = treeview.get_selection().get_selected_rows() + + if bool is False: + default = None + for i in range (0, len(mod_store)): + path = Gtk.TreePath(i) + it = mod_store.get_iter(path) + _colorize(path, None) + self.active_button.set_label("Highlight stale") + return + + with open(stale_mods_temp_file, "r") as infile: + lines = [line.rstrip('\n') for line in infile] + + for i in range (0, len(mod_store)): + red = "#FF0000" + path = Gtk.TreePath(i) + it = mod_store.get_iter(path) + if model.get_value(it, 2) not in lines: + _colorize(path, red) + treeview.toggle_selection(False) + self.active_button.set_label("Unhighlight stale") + def _iterate_mod_deletion(self, model, pathlist, ct): # hedge against large number of arguments From 6e375d3f241695c57f3055a382ea97bb5217f5cd Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 21 Nov 2024 23:58:38 +0900 Subject: [PATCH 19/99] fix: drop unused parameter --- helpers/funcs | 1 + helpers/ui.py | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/helpers/funcs b/helpers/funcs index 4642378..6f2404d 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -158,6 +158,7 @@ find_stale_mods(){ printf "%s\n" "$res" >> $_cache_stale_mods_temp fi done + printf "" return 99 } get_player_count(){ diff --git a/helpers/ui.py b/helpers/ui.py index 1270ace..5753fa8 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -651,7 +651,7 @@ def process_shell_return_code(transient_parent, msg, code, original_input): case 99: # highlight stale mods panel = transient_parent.grid.sel_panel - panel.colorize_cells(msg, True) + panel.colorize_cells(True) case 100: # final handoff before launch final_conf = spawn_dialog(transient_parent, msg, Popup.CONFIRM) @@ -2379,9 +2379,9 @@ class ModSelectionPanel(Gtk.Box): case "Highlight stale": process_tree_option([treeview.view, RowType.HIGHLIGHT], treeview) case "Unhighlight stale": - self.colorize_cells(None, False) + self.colorize_cells(False) - def colorize_cells(self, mods, bool): + def colorize_cells(self, bool): def _colorize(path, color): mod_store[path][4] = color From 885c3bc7e78f79392ce1ad561d75596be0253424 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 21 Nov 2024 23:58:47 +0900 Subject: [PATCH 20/99] chore: update checksums --- dzgui.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 1b41411..b7291d1 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -569,10 +569,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="15fd3fc32e96db8345c5a3ac8564ecc2" + ["ui.py"]="a5896c88510e8b4b2f1fec06aed0c96a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="d1f0d32e3ad34a34d561305ffa597e79" + ["funcs"]="9a0ad94df22e24fe41e93a689de7d03e" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" From e28a75cfd93e43b2c16cffe836db204b4a727bf9 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 28 Nov 2024 17:43:03 +0900 Subject: [PATCH 21/99] fix: installed mods race condition (#167) --- CHANGELOG.md | 4 ++++ dzgui.sh | 4 ++-- helpers/ui.py | 25 +++++++++++++------------ 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b979cc0..bf502c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.6] 2024-11-28 +### Fixed +- Race condition when checking for installed mods + ## [5.6.0-beta.5] 2024-11-21 ### Added - Highlight stale mods in mods list diff --git a/dzgui.sh b/dzgui.sh index b7291d1..f5f2dd1 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.5 +version=5.6.0-beta.6 #CONSTANTS aid=221100 @@ -569,7 +569,7 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="a5896c88510e8b4b2f1fec06aed0c96a" + ["ui.py"]="1c6e5b996eccd891a3e56930e28246da" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["funcs"]="9a0ad94df22e24fe41e93a689de7d03e" diff --git a/helpers/ui.py b/helpers/ui.py index 5753fa8..779ac15 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1421,12 +1421,12 @@ class TreeView(Gtk.TreeView): # suppress button panel if store is empty if isinstance(panel_last_child, ModSelectionPanel): if total_mods == 0: - # nb. do not forcibly remove previously added widgets + # do not forcibly remove previously added widgets when reloading in-place grid.sel_panel.set_visible(False) - grid.show_all() right_panel.set_filter_visibility(False) + else: + grid.sel_panel.set_visible(True) - grid.sel_panel.set_visible(True) self.set_model(mod_store) self.grab_focus() size = locale.format_string('%.3f', total_size, grouping=True) @@ -1437,6 +1437,7 @@ class TreeView(Gtk.TreeView): toggle_signal(self, self, '_on_keypress', True) self._focus_first_row() if total_mods == 0: + logger.info("Nothing to do, spawning notice dialog") spawn_dialog(self.get_outer_window(), data.stdout, Popup.NOTIFY) widgets = relative_widget(self) @@ -1447,18 +1448,18 @@ class TreeView(Gtk.TreeView): # suppress errors if no mods available on system if data.returncode == 1: + logger.info("Failed to find mods on local system") total_mods = 0 total_size = 0 GLib.idle_add(load) - return 1 - - # show button panel missing (prevents duplication when reloading in-place) - if not isinstance(panel_last_child, ModSelectionPanel): - grid.sel_panel.set_visible(True) - result = parse_mod_rows(data) - total_size = result[0] - total_mods = result[1] - GLib.idle_add(load) + else: + # show button panel missing (prevents duplication when reloading in-place) + if not isinstance(panel_last_child, ModSelectionPanel): + grid.sel_panel.set_visible(True) + result = parse_mod_rows(data) + total_size = result[0] + total_mods = result[1] + GLib.idle_add(load) def _on_col_width_changed(self, col, width): From 94f9ac52c513cb7ccf4a38380c75ed9acb628df3 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 28 Nov 2024 22:37:15 +0900 Subject: [PATCH 22/99] chore: add logging --- CHANGELOG.md | 4 ++++ dzgui.sh | 2 +- helpers/ui.py | 3 +++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf502c6..9878f31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.7] 2024-11-28 +### Changed +- Add additional logging when fetching installed mods + ## [5.6.0-beta.6] 2024-11-28 ### Fixed - Race condition when checking for installed mods diff --git a/dzgui.sh b/dzgui.sh index f5f2dd1..de06cac 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.6 +version=5.6.0-beta.7 #CONSTANTS aid=221100 diff --git a/helpers/ui.py b/helpers/ui.py index 779ac15..af1b553 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1459,6 +1459,9 @@ class TreeView(Gtk.TreeView): result = parse_mod_rows(data) total_size = result[0] total_mods = result[1] + logger.info("Found mods on local system") + logger.info("Total mod size: %s" %(total_size)) + logger.info("Total mod count: %s" %(total_mods)) GLib.idle_add(load) def _on_col_width_changed(self, col, width): From d5162d6d9e06f5b3f0f151dc242812050d5ae86b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 28 Nov 2024 23:25:28 +0900 Subject: [PATCH 23/99] fix: normalize user locale (#168) --- CHANGELOG.md | 4 ++++ dzgui.sh | 4 ++-- helpers/funcs | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9878f31..5a47dd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.8] 2024-11-28 +### Fixed +- Normalize user locale when parsing floats + ## [5.6.0-beta.7] 2024-11-28 ### Changed - Add additional logging when fetching installed mods diff --git a/dzgui.sh b/dzgui.sh index de06cac..abe92bf 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.7 +version=5.6.0-beta.8 #CONSTANTS aid=221100 @@ -572,7 +572,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="1c6e5b996eccd891a3e56930e28246da" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="9a0ad94df22e24fe41e93a689de7d03e" + ["funcs"]="20f25bd68cad369696a5b7ab8d8c543d" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 6f2404d..8f213ba 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -354,7 +354,7 @@ list_mods(){ base_dir=$(basename $(readlink -f $game_dir/$symlink)) size=$(du -s "$(readlink -f "$game_dir/$symlink")" | awk '{print $1}') size=$(python3 -c "n=($size/1024) +.005; print(round(n,4))") - printf "%s$sep%s$sep%s$sep%3.3f\n" "$name" "$symlink" "$base_dir" "$size" + LC_ALL=C printf "%s$sep%s$sep%s$sep%3.3f\n" "$name" "$symlink" "$base_dir" "$size" done | sort -k1 fi } From c3c8872faddd70a8406ca546b5c8e5eff693b5ec Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:09:19 +0900 Subject: [PATCH 24/99] fix: backport hotfix (#168) --- CHANGELOG.md | 4 ++++ dzgui.sh | 4 ++-- helpers/funcs | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ba51df..b7156b8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.5.1] 2024-12-03 +### Fixed +- Support localized decimal separators when parsing installed mod sizes + ## [5.5.0] 2024-11-10 ### Added - Support servers running DLC content (fixes Frostline servers) diff --git a/dzgui.sh b/dzgui.sh index b9409e0..15dd451 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.5.0 +version=5.5.1 #CONSTANTS aid=221100 @@ -572,7 +572,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="dd7aa34df1d374739127cca3033a3f67" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="d8ae2662fbc3c62bdb5a51dec1935705" + ["funcs"]="ad4d7b4bf2e8ef0ac7637183876dbec6" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index b69640f..69b66c8 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -332,7 +332,7 @@ list_mods(){ base_dir=$(basename $(readlink -f $game_dir/$symlink)) size=$(du -s "$(readlink -f "$game_dir/$symlink")" | awk '{print $1}') size=$(python3 -c "n=($size/1024) +.005; print(round(n,4))") - printf "%s$sep%s$sep%s$sep%3.3f\n" "$name" "$symlink" "$base_dir" "$size" + LC_NUMERIC=C printf "%s$sep%s$sep%s$sep%3.3f\n" "$name" "$symlink" "$base_dir" "$size" done | sort -k1 fi } From a94859a1572194343759b0866bf6c7314808ac43 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 3 Dec 2024 20:12:18 +0900 Subject: [PATCH 25/99] change: use LC_NUMERIC --- CHANGELOG.md | 4 ++++ dzgui.sh | 4 ++-- helpers/funcs | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a47dd6..b52b56a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.9] 2024-12-03 +### Fixed +- Normalize user locale when parsing floats + ## [5.6.0-beta.8] 2024-11-28 ### Fixed - Normalize user locale when parsing floats diff --git a/dzgui.sh b/dzgui.sh index abe92bf..5ac52ad 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.8 +version=5.6.0-beta.9 #CONSTANTS aid=221100 @@ -572,7 +572,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="1c6e5b996eccd891a3e56930e28246da" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="20f25bd68cad369696a5b7ab8d8c543d" + ["funcs"]="d98d8626a1d61b2d5947b53155a14928" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 8f213ba..f8f0c2f 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -354,7 +354,7 @@ list_mods(){ base_dir=$(basename $(readlink -f $game_dir/$symlink)) size=$(du -s "$(readlink -f "$game_dir/$symlink")" | awk '{print $1}') size=$(python3 -c "n=($size/1024) +.005; print(round(n,4))") - LC_ALL=C printf "%s$sep%s$sep%s$sep%3.3f\n" "$name" "$symlink" "$base_dir" "$size" + LC_NUMERIC=C printf "%s$sep%s$sep%s$sep%3.3f\n" "$name" "$symlink" "$base_dir" "$size" done | sort -k1 fi } From 6b669e5c2144399a3d393d93e954ab45493acba3 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 3 Dec 2024 21:41:54 +0900 Subject: [PATCH 26/99] fix: reset window context on cooldown --- helpers/ui.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/helpers/ui.py b/helpers/ui.py index af1b553..9b51720 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1721,6 +1721,8 @@ class TreeView(Gtk.TreeView): cooldown = call_out(self, "test_cooldown", "", "") if cooldown.returncode == 1: spawn_dialog(outer, cooldown.stdout, Popup.NOTIFY) + # reset context to main menu if navigation was blocked + self.view = WindowContext.MAIN_MENU return 1 for check in checks: toggle_signal(filters_vbox, check, '_on_check_toggle', False) From 0fdc132873dfcd85eda3e3d58d29b059f80ba23e Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:03:04 +0900 Subject: [PATCH 27/99] fix: array syntax --- helpers/funcs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helpers/funcs b/helpers/funcs index f8f0c2f..d538109 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -930,7 +930,7 @@ remove_from_favs(){ break fi done - if [[ ${#ip_list} -gt 0 ]]; then + if [[ ${#ip_list[@]} -gt 0 ]]; then readarray -t ip_list < <(printf "%s\n" "${ip_list[@]}") fi update_config @@ -938,6 +938,7 @@ remove_from_favs(){ local cache="$(< "$_cache_my_servers")" <<< "$cache" grep -v -P "$r$" > $_cache_my_servers logger INFO "Removed the record $record from saved servers" + echo "Removed $record from saved servers" return 90 } update_favs_from_table(){ From ac3055ce39f2d777dfcf2b53d7b21a02e5f226fe Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:04:00 +0900 Subject: [PATCH 28/99] fix: non blocking workshop open --- helpers/funcs | 2 +- helpers/ui.py | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/helpers/funcs b/helpers/funcs index d538109..8d4faec 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1020,7 +1020,7 @@ open_workshop_page(){ shift local id="$1" local workshop_uri="steam://url/CommunityFilePage/$id" - $steam_cmd "$workshop_uri" $id + $steam_cmd "$workshop_uri" $id & } open_link(){ shift diff --git a/helpers/ui.py b/helpers/ui.py index 9b51720..e64caee 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1139,7 +1139,8 @@ class TreeView(Gtk.TreeView): process_tree_option([self.view, RowType.DELETE_SELECTED], self) case "Open in Steam Workshop": record = self.get_column_at_index(2) - call_out(parent, "open_workshop_page", record) + base_cmd = "open_workshop_page" + subprocess.Popen(['/usr/bin/env', 'bash', funcs, base_cmd, record]) def toggle_selection(self, bool): l = len(mod_store) From ef3fffca47a179dbf87d664fdb1a511be79b1311 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:04:29 +0900 Subject: [PATCH 29/99] change: use printf --- helpers/funcs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/funcs b/helpers/funcs index 8d4faec..5df388a 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -343,7 +343,7 @@ list_mods(){ local base_dir local size if [[ -z $(installed_mods) ]] || [[ -z $(find $workshop_dir -maxdepth 2 -name "*.cpp" | grep .cpp) ]]; then - echo "No mods currently installed or incorrect path set." + printf "No mods currently installed or incorrect path set." logger WARN "Found no locally installed mods" return 1 else From eaa6c1154323c417af7d8ba02e6b4714509247a8 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:06:46 +0900 Subject: [PATCH 30/99] fix: typo --- helpers/ui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/ui.py b/helpers/ui.py index e64caee..fa57d14 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -156,7 +156,7 @@ class RowType(EnumWithAttrs): } RECENT_SERVERS = { "label": "Recent servers", - "tooltip": "Shows the last to servers you connected to (includes attempts)", + "tooltip": "Shows the last 10 servers you connected to (includes attempts)", } CONN_BY_IP = { "label": "Connect by IP", From a4f076fbdb6ab12485246df7f73d931d4c3cc0e9 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:07:16 +0900 Subject: [PATCH 31/99] chore: clarify comments --- helpers/ui.py | 1 + 1 file changed, 1 insertion(+) diff --git a/helpers/ui.py b/helpers/ui.py index fa57d14..ff5a1ac 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1090,6 +1090,7 @@ class TreeView(Gtk.TreeView): def _on_menu_click(self, menu_item): #TODO: context menus use old stringwise parsing + # use enumerated contexts parent = self.get_outer_window() context = self.get_first_col() value = self.get_column_at_index(0) From 5619d55840e1bbeb563006c642e36a780d99e377 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:09:25 +0900 Subject: [PATCH 32/99] fix: update statusbar when removing rows --- helpers/ui.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index ff5a1ac..a573d80 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1261,8 +1261,11 @@ class TreeView(Gtk.TreeView): if self.view == WindowContext.TABLE_API or self.view == WindowContext.TABLE_SERVER: addr = self.get_column_at_index(7) if addr is None: + server_tooltip[0] = format_tooltip() + grid.update_statusbar(server_tooltip[0]) return if addr in cache: + server_tooltip[0] = format_tooltip() dist = format_distance(cache[addr][0]) ping = format_ping(cache[addr][1]) @@ -1390,7 +1393,7 @@ class TreeView(Gtk.TreeView): self.grab_focus() for column in self.get_columns(): column.connect("notify::width", self._on_col_width_changed) - if hits == 0: + if len(server_store) == 0: call_out(self, "start_cooldown", "", "") api_warn_msg = """\ No servers returned. Possible network issue or API key on cooldown? @@ -1405,10 +1408,8 @@ class TreeView(Gtk.TreeView): data = call_out(self, "dump_servers", mode, *filters) toggle_signal(self, self.selected_row, '_on_tree_selection_changed', False) - row_metadata = parse_server_rows(data) - sum = row_metadata[0] - hits = row_metadata[1] - server_tooltip[0] = format_tooltip(sum, hits) + parse_server_rows(data) + server_tooltip[0] = format_tooltip() grid.update_statusbar(server_tooltip[0]) map_data = call_out(self, "get_unique_maps", mode) @@ -1790,7 +1791,11 @@ def format_metadata(row_sel): return prefix -def format_tooltip(players, hits): +def format_tooltip(): + hits = len(server_store) + players = 0 + for row in server_store: + players+= row[4] hits_pretty = pluralize("matches", hits) players_pretty = pluralize("players", players) tooltip = f"Found {hits:n} {hits_pretty} with {players:n} {players_pretty}" @@ -1800,10 +1805,8 @@ def format_tooltip(players, hits): def filter_servers(transient_parent, filters_vbox, treeview, context): def filter(dialog): def clear_and_destroy(): - row_metadata = parse_server_rows(data) - sum = row_metadata[0] - hits = row_metadata[1] - server_tooltip[0] = format_tooltip(sum, hits) + parse_server_rows(data) + server_tooltip[0] = format_tooltip() transient_parent.grid.update_statusbar(server_tooltip[0]) toggle_signal(treeview, treeview.selected_row, '_on_tree_selection_changed', True) @@ -2279,6 +2282,7 @@ class Grid(Gtk.Grid): self.scrollable_treelist.treeview.terminate_process() def _on_calclat_started(self, treeview): + server_tooltip[0] = format_tooltip() server_tooltip[1] = server_tooltip[0] + "| Distance: calculating..." self.update_statusbar(server_tooltip[1]) From 75e247b83156da8b59ef8936cc54bc93a20ec504 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:10:08 +0900 Subject: [PATCH 33/99] fix: remove return values from parse_server_rows() --- helpers/ui.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index a573d80..7dea8e5 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -539,19 +539,14 @@ def parse_mod_rows(data): def parse_server_rows(data): - sum = 0 lines = data.stdout.splitlines() reader = csv.reader(lines, delimiter=delimiter) - hits = len(lines) try: rows = [[row[0], row[1], row[2], row[3], int(row[4]), int(row[5]), int(row[6]), row[7], int(row[8])] for row in reader if row] except IndexError: return 1 for row in rows: server_store.append(row) - players = int(row[4]) - sum += players - return [sum, hits] def query_config(widget, key=""): From 43a639005f3fcb3b88ccf8d99e0dd1621179ade6 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:10:31 +0900 Subject: [PATCH 34/99] chore: move comments --- helpers/ui.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpers/ui.py b/helpers/ui.py index 7dea8e5..7d42ae2 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -2420,7 +2420,6 @@ class ModSelectionPanel(Gtk.Box): def _iterate_mod_deletion(self, model, pathlist, ct): - # hedge against large number of arguments widgets = relative_widget(self) parent = widgets["outer"] treeview = widgets["treeview"] @@ -2441,6 +2440,7 @@ class ModSelectionPanel(Gtk.Box): path = model.get_value(it, 2) concat = symlink + " " + path + "\n" mods.append(concat) + # hedge against large number of arguments passed to shell with open(mods_temp_file, "w") as outfile: outfile.writelines(mods) process_tree_option([treeview.view, RowType.DELETE_SELECTED], treeview) From 13c6813c8e0d9fe9a1ab8cdb3eee7c78b4bf7919 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:11:39 +0900 Subject: [PATCH 35/99] feat: resolve ip when saving records --- helpers/ui.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index 7d42ae2..652ea92 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -123,6 +123,11 @@ class RowType(EnumWithAttrs): "label": None, "tooltip": None, } + RESOLVE_IP = { + "label": "Resolve IP", + "tooltip": None, + "wait_msg": "Resolving remote IP" + } HIGHLIGHT = { "label": "Highlight stale", "tooltip": None, @@ -696,6 +701,11 @@ def process_tree_option(input, treeview): msg = out[-1] process_shell_return_code(transient_parent, msg, rc, input) + if command == RowType.RESOLVE_IP: + record = "%s:%s" %(treeview.get_column_at_index(7), treeview.get_column_at_index(8)) + wait_msg = command.dict["wait_msg"] + call_on_thread(True, cmd_string, wait_msg, record) + return # help pages if context == WindowContext.TABLE_MODS and command == RowType.HIGHLIGHT: wait_msg = command.dict["wait_msg"] @@ -1095,12 +1105,10 @@ class TreeView(Gtk.TreeView): match context_menu_label: case "Add to my servers" | "Remove from my servers": record = "%s:%s" %(self.get_column_at_index(7), self.get_column_at_index(8)) - proc = call_out(parent, context_menu_label, record) + process_tree_option([self.view, RowType.RESOLVE_IP], self) if context == "Name (My saved servers)": iter = self.get_current_iter() server_store.remove(iter) - msg = proc.stdout - res = spawn_dialog(parent, msg, Popup.NOTIFY) case "Remove from history": record = "%s:%s" %(self.get_column_at_index(7), self.get_column_at_index(8)) call_out(parent, context_menu_label, record) From a46c2e17abf16132768ca47723358ee19b1c87ff Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:12:20 +0900 Subject: [PATCH 36/99] chore: remove unused values --- helpers/ui.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index 652ea92..cd61034 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1152,12 +1152,10 @@ class TreeView(Gtk.TreeView): case True: for i in range (0, l): path = Gtk.TreePath(i) - it = mod_store.get_iter(path) self.get_selection().select_path(path) case False: for i in range (0, l): path = Gtk.TreePath(i) - it = mod_store.get_iter(path) self.get_selection().unselect_path(path) def _on_button_release(self, widget, event): From 6d332f613e3f254773b7318119f52950b461c603 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:13:29 +0900 Subject: [PATCH 37/99] chore: guard clause --- helpers/ui.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/helpers/ui.py b/helpers/ui.py index cd61034..7d1f81e 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1132,15 +1132,16 @@ class TreeView(Gtk.TreeView): success_msg = "Successfully deleted the mod '%s'." %(value) fail_msg = "An error occurred during deletion. Aborting." res = spawn_dialog(parent, conf_msg, Popup.CONFIRM) - if res == 0: - mods = [] - symlink = self.get_column_at_index(1) - dir = self.get_column_at_index(2) - concat = symlink + " " + dir + "\n" - mods.append(concat) - with open(mods_temp_file, "w") as outfile: - outfile.writelines(mods) - process_tree_option([self.view, RowType.DELETE_SELECTED], self) + if res != 0: + return + mods = [] + symlink = self.get_column_at_index(1) + dir = self.get_column_at_index(2) + concat = symlink + " " + dir + "\n" + mods.append(concat) + with open(mods_temp_file, "w") as outfile: + outfile.writelines(mods) + process_tree_option([self.view, RowType.DELETE_SELECTED], self) case "Open in Steam Workshop": record = self.get_column_at_index(2) base_cmd = "open_workshop_page" From 336b9882820057093ef40c9e90e3ef0e1f342ffc Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:15:45 +0900 Subject: [PATCH 38/99] fix: untoggle highlight button (#169, 170) --- helpers/ui.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/helpers/ui.py b/helpers/ui.py index 7d1f81e..0747b7a 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -642,16 +642,35 @@ def process_shell_return_code(transient_parent, msg, code, original_input): spawn_dialog(transient_parent, msg, Popup.NOTIFY) return case 95: - # reload mods list + # successful mod deletion spawn_dialog(transient_parent, msg, Popup.NOTIFY) treeview = transient_parent.grid.scrollable_treelist.treeview + grid = treeview.get_parent().get_parent() + (model, pathlist) = treeview.get_selection().get_selected_rows() + for p in reversed(pathlist): + it = model.get_iter(p) + model.remove(it) + total_size = 0 + total_mods = len(model) + for row in model: + total_size += row[3] + size = locale.format_string('%.3f', total_size, grouping=True) + pretty = pluralize("mods", total_mods) + grid.update_statusbar(f"Found {total_mods:n} {pretty} taking up {size} MiB") + # untoggle selection for visibility of other stale rows + treeview.toggle_selection(False) + case 96: + # unsuccessful mod deletion + spawn_dialog(transient_parent, msg, Popup.NOTIFY) # re-block this signal before redrawing table contents + treeview = transient_parent.grid.scrollable_treelist.treeview toggle_signal(treeview, treeview, '_on_keypress', False) treeview.update_quad_column(RowType.LIST_MODS) case 99: # highlight stale mods panel = transient_parent.grid.sel_panel panel.colorize_cells(True) + panel.toggle_select_stale_button(True) case 100: # final handoff before launch final_conf = spawn_dialog(transient_parent, msg, Popup.CONFIRM) @@ -1431,6 +1450,7 @@ class TreeView(Gtk.TreeView): right_panel.set_filter_visibility(False) else: grid.sel_panel.set_visible(True) + grid.sel_panel.initialize() self.set_model(mod_store) self.grab_focus() @@ -2373,6 +2393,19 @@ class ModSelectionPanel(Gtk.Box): button.connect("clicked", self._on_button_clicked) self.pack_start(button, False, True, 0) + + def initialize(self): + l = len(self.get_children()) + last = self.get_children()[l-1] + last_label = last.get_label() + for i in self.get_children(): + match i.get_label(): + case "Select stale": + i.destroy() + case "Unhighlight stale": + i.set_label("Highlight stale") + + def _on_button_clicked(self, button): self.active_button = button label = button.get_label() @@ -2394,6 +2427,22 @@ class ModSelectionPanel(Gtk.Box): process_tree_option([treeview.view, RowType.HIGHLIGHT], treeview) case "Unhighlight stale": self.colorize_cells(False) + self._remove_last_button() + case "Select stale": + for i in range (0, len(mod_store)): + if mod_store[i][4] == "#FF0000": + path = Gtk.TreePath(i) + treeview.get_selection().select_path(path) + + + def toggle_select_stale_button(self, bool): + if bool is True: + button = Gtk.Button(label="Select stale") + button.set_margin_start(10) + button.set_margin_end(10) + button.connect("clicked", self._on_button_clicked) + self.pack_start(button, False, True, 0) + self.show_all() def colorize_cells(self, bool): def _colorize(path, color): From 8fdc29d47df45c8099b3d3149db934dd62c49911 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 5 Dec 2024 08:23:51 +0900 Subject: [PATCH 39/99] chore: bump version --- CHANGELOG.md | 8 ++++++++ dzgui.sh | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b52b56a..45c7290 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [5.6.0-beta.10] 2024-12-04 +### Fixed +- Untoggle highlight button when repopulating mod list +- Resolve remote IP when saving records for game servers with multiple hosts +- Update statusbar when removing servers from list/repopulating +### Added: +- "Select stale" button to bulk select mods marked as obsolete + ## [5.6.0-beta.9] 2024-12-03 ### Fixed - Normalize user locale when parsing floats diff --git a/dzgui.sh b/dzgui.sh index 5ac52ad..766915b 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.9 +version=5.6.0-beta.10 #CONSTANTS aid=221100 @@ -569,10 +569,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="1c6e5b996eccd891a3e56930e28246da" + ["ui.py"]="3b90cd522e52131e7ae396671e1c1ad2" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="d98d8626a1d61b2d5947b53155a14928" + ["funcs"]="62f6b3fb2dcb56a78b7642c0f0aa7abe" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" From 8dc9ad3313860d0d6d56d374157bfd0f0f4e1113 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sat, 7 Dec 2024 14:02:50 +0900 Subject: [PATCH 40/99] fix: add missing function definition --- CHANGELOG.md | 4 ++++ dzgui.sh | 4 ++-- helpers/ui.py | 9 +++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 45c7290..3288630 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.11] 2024-12-07 +### Fixed +- Add missing function definition + ## [5.6.0-beta.10] 2024-12-04 ### Fixed - Untoggle highlight button when repopulating mod list diff --git a/dzgui.sh b/dzgui.sh index 766915b..2a8d4e2 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.10 +version=5.6.0-beta.11 #CONSTANTS aid=221100 @@ -569,7 +569,7 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="3b90cd522e52131e7ae396671e1c1ad2" + ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["funcs"]="62f6b3fb2dcb56a78b7642c0f0aa7abe" diff --git a/helpers/ui.py b/helpers/ui.py index 0747b7a..b5f01c0 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -2435,6 +2435,15 @@ class ModSelectionPanel(Gtk.Box): treeview.get_selection().select_path(path) + def _remove_last_button(self): + children = self.get_children() + l = len(children) + tip = children[l-1] + label = tip.get_label() + if label == "Select stale": + tip.destroy() + + def toggle_select_stale_button(self, bool): if bool is True: button = Gtk.Button(label="Select stale") From eaf9d5ad3ee7b7a418fb5d6228a85ce35bcb9508 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:54:44 +0900 Subject: [PATCH 41/99] fix: change remote URLs --- README.md | 7 ++----- dzgui.sh | 16 ++++++++-------- helpers/funcs | 6 +++--- 3 files changed, 13 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 5732eb9..dae89ad 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,6 @@ ## What this is -DZGUI is a GUI version of [DZTUI](https://github.com/aclist/dztui/tree/dztui) for Linux. - -Note: development of DZTUI has stopped and has been replaced with DZGUI. - -DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. This overcomes certain limitations in the Linux client and helps prepare the game to launch by doing the following: +DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. This overcomes certain limitations in the Linux client and +helps prepare the game to launch by doing the following: 1. Search for and display server metadata in a table (server name, player count, ping, current gametime, distance, IP) 2. Add/delete/manage favorite servers by IP or ID diff --git a/dzgui.sh b/dzgui.sh index 2a8d4e2..8885bc9 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -56,11 +56,11 @@ func_helper="$helpers_path/funcs" #URLS author="aclist" -repo="dztui" -url_prefix="https://raw.githubusercontent.com/$author/$repo" +repo="dzgui" +url_prefix="https://codeberg.org/$author/$repo/raw/branch" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" -releases_url="https://github.com/$author/$repo/releases/download/browser" +releases_url="https://codeberg.org/$author/$repo/releases/download/browser" km_helper_url="$releases_url/latlon" geo_file_url="$releases_url/ips.csv.gz" @@ -373,7 +373,7 @@ dl_changelog(){ local mdbranch [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - local md="https://raw.githubusercontent.com/$author/dztui/${mdbranch}/CHANGELOG.md" + local md="https://codeberg.org/$author/dzgui/raw/branch/${mdbranch}/CHANGELOG.md" curl -Ls "$md" > "$state_path/CHANGELOG.md" } test_display_mode(){ @@ -535,7 +535,7 @@ fetch_dzq(){ return 0 fi local sha=3088bbfb147b77bc7b6a9425581b439889ff3f7f - local author="aclist" + local author="yepoleb" local repo="dayzquery" local url="https://raw.githubusercontent.com/$author/$repo/$sha/dayzquery.py" curl -Ls "$url" > "$file" @@ -572,11 +572,11 @@ fetch_helpers_by_sum(){ ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="62f6b3fb2dcb56a78b7642c0f0aa7abe" + ["funcs"]="0cbec29142f4fcb03b2bd8367fe365e4" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" - local repo="dztui" + local repo="dzgui" local realbranch local file local sum @@ -596,7 +596,7 @@ fetch_helpers_by_sum(){ file="$i" sum="${sums[$i]}" full_path="$helpers_path/$file" - url="https://raw.githubusercontent.com/$author/$repo/$realbranch/helpers/$file" + url="https://codeberg.org/$author/$repo/raw/branch/$realbranch/helpers/$file" if [[ -f "$full_path" ]] && [[ $(get_hash "$full_path") == $sum ]]; then logger INFO "$file is current" else diff --git a/helpers/funcs b/helpers/funcs index 5df388a..e8745f6 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -72,10 +72,10 @@ author="aclist" repo="dztui" gh_prefix="https://github.com" issues_url="$gh_prefix/$author/$repo/issues" -url_prefix="https://raw.githubusercontent.com/$author/$repo" +url_prefix="https://codeberg.org/$author/$repo/branch" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" -releases_url="$gh_prefix/$author/$repo/releases/download/browser" +releases_url="https://codeberg.org/$author/$repo/releases/download/browser" km_helper_url="$releases_url/latlon" db_file="$releases_url/ips.csv.gz" sums_url="$stable_url/helpers/sums.md5" @@ -852,7 +852,7 @@ dl_changelog(){ local file="CHANGELOG.md" [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - local md="https://raw.githubusercontent.com/$author/$repo/${mdbranch}/$file" + local md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/$file" curl -Ls "$md" > "$state_path/$file" } toggle(){ From f503c89c2b2fac160dd37cf23615b65d7d7f3a69 Mon Sep 17 00:00:00 2001 From: aclist <aclist@noreply.codeberg.org> Date: Thu, 12 Dec 2024 00:58:56 +0000 Subject: [PATCH 42/99] fix: line wrapping --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index dae89ad..8290e55 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,5 @@ ## What this is -DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. This overcomes certain limitations in the Linux client and -helps prepare the game to launch by doing the following: +DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. This overcomes certain limitations in the Linux client and helps prepare the game to launch by doing the following: 1. Search for and display server metadata in a table (server name, player count, ping, current gametime, distance, IP) 2. Add/delete/manage favorite servers by IP or ID From 1da2e7292820ffb28ad900c0d9212b75ec0f206d Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 10:27:38 +0900 Subject: [PATCH 43/99] fix: update installscript --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index a56422e..1e07a07 100644 --- a/install.sh +++ b/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -curl "https://raw.githubusercontent.com/aclist/dztui/dzgui/dzgui.sh" > dzgui.sh +curl "https://codeberg.org/aclist/dzgui/raw/branch/dzgui/dzgui.sh" > dzgui.sh chmod +x dzgui.sh xdg_file="$HOME/.local/share/applications/dzgui.desktop" share="$HOME/.local/share/dzgui" From 0197e0f92103f70a2855dc8aa2f6f7a31f7d19f6 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:08:07 +0900 Subject: [PATCH 44/99] fix: conditional remote url logic --- dzgui.sh | 60 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 46 insertions(+), 14 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 8885bc9..45f5663 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -54,16 +54,18 @@ km_helper="$helpers_path/latlon" sums_path="$helpers_path/sums.md5" func_helper="$helpers_path/funcs" -#URLS +#REMOTE +remote_host=gh author="aclist" -repo="dzgui" -url_prefix="https://codeberg.org/$author/$repo/raw/branch" +repo="dztui" +url_prefix="https://raw.githubusercontent.com/$author/$repo" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" -releases_url="https://codeberg.org/$author/$repo/releases/download/browser" +releases_url="https://github.com/$author/$repo/releases/download/browser" km_helper_url="$releases_url/latlon" geo_file_url="$releases_url/ips.csv.gz" + set_im_module(){ #TODO: drop pending SteamOS changes pgrep -a gamescope | grep -q "generate-drm-mode" @@ -312,13 +314,14 @@ check_unmerged(){ check_version(){ local version_url=$(format_version_url) local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') + #2024-12-12: do not clobber local version if unreachable + [[ -z $upstream ]] && return logger INFO "Local branch: '$branch', local version: $version" if [[ $branch == "stable" ]]; then version_url="$stable_url/dzgui.sh" elif [[ $branch == "testing" ]]; then version_url="$testing_url/dzgui.sh" fi - local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') [[ ! -f "$freedesktop_path/$app_name.desktop" ]] && freedesktop_dirs if [[ $version == $upstream ]]; then logger INFO "Local version is same as upstream" @@ -371,9 +374,14 @@ prompt_dl(){ } dl_changelog(){ local mdbranch + local md [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - local md="https://codeberg.org/$author/dzgui/raw/branch/${mdbranch}/CHANGELOG.md" + if [[ $remote_host == "gh" ]]; then + md="https://raw.githubusercontent.com/$author/$repo/${mdbranch}/CHANGELOG.md" + else + md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/CHANGELOG.md" + fi curl -Ls "$md" > "$state_path/CHANGELOG.md" } test_display_mode(){ @@ -596,7 +604,13 @@ fetch_helpers_by_sum(){ file="$i" sum="${sums[$i]}" full_path="$helpers_path/$file" - url="https://codeberg.org/$author/$repo/raw/branch/$realbranch/helpers/$file" + + if [[ $remote_host == "gh" ]]; then + url="https://raw.githubusercontent.com/$author/$repo/$realbranch/helpers/$file" + else + url="https://codeberg.org/$author/$repo/raw/branch/$realbranch/helpers/$file" + fi + if [[ -f "$full_path" ]] && [[ $(get_hash "$full_path") == $sum ]]; then logger INFO "$file is current" else @@ -845,14 +859,32 @@ is_steam_running(){ return 0 fi } +get_response_code(){ + local url="$1" + curl -Ls -I -o /dev/null -w "%{http_code}" "$url" +} test_connection(){ - ping -c1 -4 github.com 1>/dev/null 2>&1 - if [[ ! $? -eq 0 ]]; then - raise_error_and_quit "No connection could be established to the remote server (github.com)." - fi - ping -c1 -4 api.steampowered.com 1>/dev/null 2>&1 - if [[ ! $? -eq 0 ]]; then - raise_error_and_quit "No connection could be established to the remote server (steampowered.com)." + source "$config_file" + declare -A hr + local res1 + local res2 + local str="No connection could be established to the remote server" + hr=( + ["steampowered.com"]="https://api.steampowered.com/IGameServersService/GetServerList/v1/?key=$steam_api" + ["github.com"]="https://github.com/$author" + ["codeberg.org"]="https://codeberg.org/$author" + ) + res=$(get_response_code "${hr["github.com"]}") + [[ $res -ne 200 ]] && remote_host=cb + res=$(get_response_code "${hr["codeberg.org"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" + # steam API is mandatory + res=$(get_response_code "${hr["steampowered.com"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str ${hr["steampowered.com"]}" + + if [[ $remote_host == "cb" ]]; then + url_prefix="https://codeberg.org/$author/$repo/raw/branch" + releases_url="https://codeberg.org/$author/$repo/releases/download/browser" fi } legacy_cols(){ From a079d554bcdb5a44d9a6aa6c7a333a7fcac173fa Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:13:48 +0900 Subject: [PATCH 45/99] chore: bump version --- dzgui.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dzgui.sh b/dzgui.sh index 45f5663..1cbd63e 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.11 +version=5.6.0-beta.12 #CONSTANTS aid=221100 From 7c5bd76e8f73831500056634dc34d8fcc08561ec Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:16:46 +0900 Subject: [PATCH 46/99] fix: test connection control flow --- dzgui.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 1cbd63e..3067c93 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -874,14 +874,18 @@ test_connection(){ ["github.com"]="https://github.com/$author" ["codeberg.org"]="https://codeberg.org/$author" ) - res=$(get_response_code "${hr["github.com"]}") - [[ $res -ne 200 ]] && remote_host=cb - res=$(get_response_code "${hr["codeberg.org"]}") - [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" # steam API is mandatory res=$(get_response_code "${hr["steampowered.com"]}") [[ $res -ne 200 ]] && raise_error_and_quit "$str ${hr["steampowered.com"]}" + res=$(get_response_code "${hr["github.com"]}") + if [[ $res -ne 200 ]]; then + logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" + remote_host=cb + res=$(get_response_code "${hr["codeberg.org"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" + fi + if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" From ea0d94a2fcf24bf5f35febeeb7853f301b67c395 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:25:39 +0900 Subject: [PATCH 47/99] fix: interpolate old vars --- dzgui.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/dzgui.sh b/dzgui.sh index 3067c93..fca682b 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -889,6 +889,11 @@ test_connection(){ if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" + # 2024-12-12: interpolate variables again + stable_url="$url_prefix/dzgui" + testing_url="$url_prefix/testing" + km_helper_url="$releases_url/latlon" + geo_file_url="$releases_url/ips.csv.gz" fi } legacy_cols(){ From 4b95033c1978398cd565c152a64717138cb8dc92 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:31:32 +0900 Subject: [PATCH 48/99] chore: add comments --- dzgui.sh | 2 +- helpers/funcs | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/dzgui.sh b/dzgui.sh index fca682b..13bb058 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -580,7 +580,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="0cbec29142f4fcb03b2bd8367fe365e4" + ["funcs"]="bdf2b0d71622de2a5762005290879b3d" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index e8745f6..42cdd49 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -70,6 +70,8 @@ game_dir="$steam_path/steamapps/common/DayZ" #URLS author="aclist" repo="dztui" +#TODO: this is hardcoded +#2024-12-12 gh_prefix="https://github.com" issues_url="$gh_prefix/$author/$repo/issues" url_prefix="https://codeberg.org/$author/$repo/branch" From 1be68e7be3cf2835db15bfbfce8efc145b5d23a6 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:38:16 +0900 Subject: [PATCH 49/99] fix: enable redirects --- dzgui.sh | 2 +- install.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 13bb058..855aaf9 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.12 +version=5.6.0-beta.13 #CONSTANTS aid=221100 diff --git a/install.sh b/install.sh index 1e07a07..22ec6ab 100644 --- a/install.sh +++ b/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -curl "https://codeberg.org/aclist/dzgui/raw/branch/dzgui/dzgui.sh" > dzgui.sh +curl -L "https://codeberg.org/aclist/dzgui/raw/branch/dzgui/dzgui.sh" > dzgui.sh chmod +x dzgui.sh xdg_file="$HOME/.local/share/applications/dzgui.desktop" share="$HOME/.local/share/dzgui" From 12b1c392dfc912779847e64a9dd032db3a2558ed Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:50:18 +0900 Subject: [PATCH 50/99] fix: initial setup --- dzgui.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 855aaf9..aa02198 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.13 +version=5.6.0-beta.14 #CONSTANTS aid=221100 @@ -874,9 +874,11 @@ test_connection(){ ["github.com"]="https://github.com/$author" ["codeberg.org"]="https://codeberg.org/$author" ) - # steam API is mandatory - res=$(get_response_code "${hr["steampowered.com"]}") - [[ $res -ne 200 ]] && raise_error_and_quit "$str ${hr["steampowered.com"]}" + # steam API is mandatory, except on initial setup + if [[ -n $steam_api ]]; then + res=$(get_response_code "${hr["steampowered.com"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str ("steampowered.com")" + fi res=$(get_response_code "${hr["github.com"]}") if [[ $res -ne 200 ]]; then @@ -885,7 +887,6 @@ test_connection(){ res=$(get_response_code "${hr["codeberg.org"]}") [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" fi - if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" From bc9178d2de8747278abb435e12c0335172c887cb Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 11:56:10 +0900 Subject: [PATCH 51/99] fix: triage hotfix from testing --- dzgui.sh | 72 ++++++++++++++++++++++++++++++++++++++++----------- helpers/funcs | 8 +++--- 2 files changed, 62 insertions(+), 18 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 15dd451..3580adc 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.5.1 +version=5.5.2 #CONSTANTS aid=221100 @@ -54,7 +54,8 @@ km_helper="$helpers_path/latlon" sums_path="$helpers_path/sums.md5" func_helper="$helpers_path/funcs" -#URLS +#REMOTE +remote_host=gh author="aclist" repo="dztui" url_prefix="https://raw.githubusercontent.com/$author/$repo" @@ -64,6 +65,7 @@ releases_url="https://github.com/$author/$repo/releases/download/browser" km_helper_url="$releases_url/latlon" geo_file_url="$releases_url/ips.csv.gz" + set_im_module(){ #TODO: drop pending SteamOS changes pgrep -a gamescope | grep -q "generate-drm-mode" @@ -312,13 +314,14 @@ check_unmerged(){ check_version(){ local version_url=$(format_version_url) local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') + #2024-12-12: do not clobber local version if unreachable + [[ -z $upstream ]] && return logger INFO "Local branch: '$branch', local version: $version" if [[ $branch == "stable" ]]; then version_url="$stable_url/dzgui.sh" elif [[ $branch == "testing" ]]; then version_url="$testing_url/dzgui.sh" fi - local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') [[ ! -f "$freedesktop_path/$app_name.desktop" ]] && freedesktop_dirs if [[ $version == $upstream ]]; then logger INFO "Local version is same as upstream" @@ -371,9 +374,14 @@ prompt_dl(){ } dl_changelog(){ local mdbranch + local md [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - local md="https://raw.githubusercontent.com/$author/dztui/${mdbranch}/CHANGELOG.md" + if [[ $remote_host == "gh" ]]; then + md="https://raw.githubusercontent.com/$author/$repo/${mdbranch}/CHANGELOG.md" + else + md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/CHANGELOG.md" + fi curl -Ls "$md" > "$state_path/CHANGELOG.md" } test_display_mode(){ @@ -535,7 +543,7 @@ fetch_dzq(){ return 0 fi local sha=3088bbfb147b77bc7b6a9425581b439889ff3f7f - local author="aclist" + local author="yepoleb" local repo="dayzquery" local url="https://raw.githubusercontent.com/$author/$repo/$sha/dayzquery.py" curl -Ls "$url" > "$file" @@ -569,14 +577,14 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="dd7aa34df1d374739127cca3033a3f67" + ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="ad4d7b4bf2e8ef0ac7637183876dbec6" + ["funcs"]="9c844298c5f112c0a2482dce3110ab70" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" - local repo="dztui" + local repo="dzgui" local realbranch local file local sum @@ -596,7 +604,13 @@ fetch_helpers_by_sum(){ file="$i" sum="${sums[$i]}" full_path="$helpers_path/$file" - url="https://raw.githubusercontent.com/$author/$repo/$realbranch/helpers/$file" + + if [[ $remote_host == "gh" ]]; then + url="https://raw.githubusercontent.com/$author/$repo/$realbranch/helpers/$file" + else + url="https://codeberg.org/$author/$repo/raw/branch/$realbranch/helpers/$file" + fi + if [[ -f "$full_path" ]] && [[ $(get_hash "$full_path") == $sum ]]; then logger INFO "$file is current" else @@ -845,14 +859,42 @@ is_steam_running(){ return 0 fi } +get_response_code(){ + local url="$1" + curl -Ls -I -o /dev/null -w "%{http_code}" "$url" +} test_connection(){ - ping -c1 -4 github.com 1>/dev/null 2>&1 - if [[ ! $? -eq 0 ]]; then - raise_error_and_quit "No connection could be established to the remote server (github.com)." + source "$config_file" + declare -A hr + local res1 + local res2 + local str="No connection could be established to the remote server" + hr=( + ["steampowered.com"]="https://api.steampowered.com/IGameServersService/GetServerList/v1/?key=$steam_api" + ["github.com"]="https://github.com/$author" + ["codeberg.org"]="https://codeberg.org/$author" + ) + # steam API is mandatory, except on initial setup + if [[ -n $steam_api ]]; then + res=$(get_response_code "${hr["steampowered.com"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str ("steampowered.com")" fi - ping -c1 -4 api.steampowered.com 1>/dev/null 2>&1 - if [[ ! $? -eq 0 ]]; then - raise_error_and_quit "No connection could be established to the remote server (steampowered.com)." + + res=$(get_response_code "${hr["github.com"]}") + if [[ $res -ne 200 ]]; then + logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" + remote_host=cb + res=$(get_response_code "${hr["codeberg.org"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" + fi + if [[ $remote_host == "cb" ]]; then + url_prefix="https://codeberg.org/$author/$repo/raw/branch" + releases_url="https://codeberg.org/$author/$repo/releases/download/browser" + # 2024-12-12: interpolate variables again + stable_url="$url_prefix/dzgui" + testing_url="$url_prefix/testing" + km_helper_url="$releases_url/latlon" + geo_file_url="$releases_url/ips.csv.gz" fi } legacy_cols(){ diff --git a/helpers/funcs b/helpers/funcs index 69b66c8..539a6d5 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -67,12 +67,14 @@ game_dir="$steam_path/steamapps/common/DayZ" #URLS author="aclist" repo="dztui" +#TODO: this is hardcoded +#2024-12-12 gh_prefix="https://github.com" issues_url="$gh_prefix/$author/$repo/issues" -url_prefix="https://raw.githubusercontent.com/$author/$repo" +url_prefix="https://codeberg.org/$author/$repo/branch" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" -releases_url="$gh_prefix/$author/$repo/releases/download/browser" +releases_url="https://codeberg.org/$author/$repo/releases/download/browser" km_helper_url="$releases_url/latlon" db_file="$releases_url/ips.csv.gz" sums_url="$stable_url/helpers/sums.md5" @@ -773,7 +775,7 @@ dl_changelog(){ local file="CHANGELOG.md" [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - local md="https://raw.githubusercontent.com/$author/$repo/${mdbranch}/$file" + local md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/$file" curl -Ls "$md" > "$state_path/$file" } toggle(){ From 62e6da2abb9c3edb8479e5ab6d803a3662c45116 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:08:57 +0900 Subject: [PATCH 52/99] fix: url syntax --- dzgui.sh | 4 ++-- helpers/funcs | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) mode change 100755 => 100644 dzgui.sh diff --git a/dzgui.sh b/dzgui.sh old mode 100755 new mode 100644 index aa02198..82a97d2 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.14 +version=5.6.0-beta.15 #CONSTANTS aid=221100 @@ -580,7 +580,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="bdf2b0d71622de2a5762005290879b3d" + ["funcs"]="bfe629ed9481627317b49a8f9c6fad24" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 42cdd49..8e06c1a 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -74,7 +74,7 @@ repo="dztui" #2024-12-12 gh_prefix="https://github.com" issues_url="$gh_prefix/$author/$repo/issues" -url_prefix="https://codeberg.org/$author/$repo/branch" +url_prefix="https://codeberg.org/$author/$repo/raw/branch" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" @@ -854,6 +854,8 @@ dl_changelog(){ local file="CHANGELOG.md" [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" + #TODO: this is hardcoded + #2024-12-12 local md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/$file" curl -Ls "$md" > "$state_path/$file" } From d71110d0a113d133d2ccdd42f3683c330ce59ee2 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:10:04 +0900 Subject: [PATCH 53/99] fix: url syntax --- dzgui.sh | 2 +- helpers/funcs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 3580adc..144f874 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -580,7 +580,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="9c844298c5f112c0a2482dce3110ab70" + ["funcs"]="8aa9eac96c21a3aabbf73c44b643523b" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 539a6d5..2f5875d 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -71,7 +71,7 @@ repo="dztui" #2024-12-12 gh_prefix="https://github.com" issues_url="$gh_prefix/$author/$repo/issues" -url_prefix="https://codeberg.org/$author/$repo/branch" +url_prefix="https://codeberg.org/$author/$repo/raw/branch" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" From 32b424da5cfa9955e98d840a5813e0d61cbe0a8a Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 12:25:26 +0900 Subject: [PATCH 54/99] fix: update installscript --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index a56422e..22ec6ab 100644 --- a/install.sh +++ b/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -curl "https://raw.githubusercontent.com/aclist/dztui/dzgui/dzgui.sh" > dzgui.sh +curl -L "https://codeberg.org/aclist/dzgui/raw/branch/dzgui/dzgui.sh" > dzgui.sh chmod +x dzgui.sh xdg_file="$HOME/.local/share/applications/dzgui.desktop" share="$HOME/.local/share/dzgui" From baeaeb1b6401123f118dc40355f91fc15b2d5501 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 17:57:27 +0900 Subject: [PATCH 55/99] docs: update README --- README.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/README.md b/README.md index 5732eb9..8290e55 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,4 @@ ## What this is -DZGUI is a GUI version of [DZTUI](https://github.com/aclist/dztui/tree/dztui) for Linux. - -Note: development of DZTUI has stopped and has been replaced with DZGUI. - DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. This overcomes certain limitations in the Linux client and helps prepare the game to launch by doing the following: 1. Search for and display server metadata in a table (server name, player count, ping, current gametime, distance, IP) From c5785d185796b8b066d28d3fe9af2420484abed7 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:31:58 +0900 Subject: [PATCH 56/99] docs: update docs link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8290e55..d6cf770 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Other options include the ability to connect by IP or ID or set a favorite serv ## Setup and usage -Refer to the [manual](https://aclist.github.io/dzgui/dzgui.html) for installation and setup instructions, a feature-by-feature breakdown, and Steam integration tutorials. +Refer to the [manual](https://aclist.codeberg.page) for installation and setup instructions, a feature-by-feature breakdown, and Steam integration tutorials.  From 8ea62434ee0e0fdbcd68a65124ddf75f415ee306 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 12 Dec 2024 18:32:44 +0900 Subject: [PATCH 57/99] docs: update docs link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8290e55..d6cf770 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Other options include the ability to connect by IP or ID or set a favorite serv ## Setup and usage -Refer to the [manual](https://aclist.github.io/dzgui/dzgui.html) for installation and setup instructions, a feature-by-feature breakdown, and Steam integration tutorials. +Refer to the [manual](https://aclist.codeberg.page) for installation and setup instructions, a feature-by-feature breakdown, and Steam integration tutorials.  From cbecf569ad217a26de24e3c8272947ad484b399e Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:40:46 +0900 Subject: [PATCH 58/99] fix: add fallbacks and remote resource checks --- CHANGELOG.md | 6 ++++++ dzgui.sh | 28 ++++++++++++++++++---------- helpers/funcs | 47 ++++++++++++++++++++++++++++++++++++----------- 3 files changed, 60 insertions(+), 21 deletions(-) mode change 100644 => 100755 dzgui.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index 3288630..6d02bc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [5.6.0-beta.16] 2024-12-13 +### Fixed +- Add remote resource health checks before downloading updates +### Added +- Add fallback repository + ## [5.6.0-beta.11] 2024-12-07 ### Fixed - Add missing function definition diff --git a/dzgui.sh b/dzgui.sh old mode 100644 new mode 100755 index 82a97d2..6f5f8d1 --- a/dzgui.sh +++ b/dzgui.sh @@ -314,8 +314,8 @@ check_unmerged(){ check_version(){ local version_url=$(format_version_url) local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') - #2024-12-12: do not clobber local version if unreachable - [[ -z $upstream ]] && return + local res=$(get_response_code "$version_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$version_url'" logger INFO "Local branch: '$branch', local version: $version" if [[ $branch == "stable" ]]; then version_url="$stable_url/dzgui.sh" @@ -377,11 +377,7 @@ dl_changelog(){ local md [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - if [[ $remote_host == "gh" ]]; then - md="https://raw.githubusercontent.com/$author/$repo/${mdbranch}/CHANGELOG.md" - else - md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/CHANGELOG.md" - fi + local md="$url_prefix/${mdbranch}/$file" curl -Ls "$md" > "$state_path/CHANGELOG.md" } test_display_mode(){ @@ -523,6 +519,7 @@ get_hash(){ md5sum "$1" | awk '{print $1}' } fetch_a2s(){ + # this file is currently monolithic [[ -d $helpers_path/a2s ]] && { logger INFO "A2S helper is current"; return 0; } local sha=c7590ffa9a6d0c6912e17ceeab15b832a1090640 local author="yepoleb" @@ -530,6 +527,8 @@ fetch_a2s(){ local url="https://github.com/$author/$repo/tarball/$sha" local prefix="${author^}-$repo-${sha:0:7}" local file="$prefix.tar.gz" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$file'" curl -Ls "$url" > "$helpers_path/$file" tar xf "$helpers_path/$file" -C "$helpers_path" "$prefix/a2s" --strip=1 rm "$helpers_path/$file" @@ -546,6 +545,8 @@ fetch_dzq(){ local author="yepoleb" local repo="dayzquery" local url="https://raw.githubusercontent.com/$author/$repo/$sha/dayzquery.py" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: 'dayzquery.py'" curl -Ls "$url" > "$file" logger INFO "Updated DZQ to sha '$sha'" } @@ -580,11 +581,11 @@ fetch_helpers_by_sum(){ ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="bfe629ed9481627317b49a8f9c6fad24" + ["funcs"]="2a27ab36d5f8071fe53bf8dfd3b8d88d" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" - local repo="dzgui" + local repo="dztui" local realbranch local file local sum @@ -615,6 +616,8 @@ fetch_helpers_by_sum(){ logger INFO "$file is current" else logger WARN "File '$full_path' checksum != '$sum'" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$url'" curl -Ls "$url" > "$full_path" if [[ ! $? -eq 0 ]]; then raise_error_and_quit "Failed to fetch the file '$file'. Possible timeout?" @@ -635,11 +638,15 @@ fetch_geo_file(){ local km_sum="b038fdb8f655798207bd28de3a004706" local gzip="$helpers_path/ips.csv.gz" if [[ ! -f $geo_file ]] || [[ $(get_hash $geo_file) != $geo_sum ]]; then + local res=$(get_response_code "$geo_file_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$geo_file_url'" curl -Ls "$geo_file_url" > "$gzip" #force overwrite gunzip -f "$gzip" fi if [[ ! -f $km_helper ]] || [[ $(get_hash $km_helper) != $km_sum ]]; then + local res=$(get_response_code "$km_helper_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$km_helper_url'" curl -Ls "$km_helper_url" > "$km_helper" chmod +x "$km_helper" fi @@ -887,10 +894,11 @@ test_connection(){ res=$(get_response_code "${hr["codeberg.org"]}") [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" fi + logger INFO "Set remote host to '${hr["codeberg.org"]}'" + remote_host=cb if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" - # 2024-12-12: interpolate variables again stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" km_helper_url="$releases_url/latlon" diff --git a/helpers/funcs b/helpers/funcs index 8e06c1a..3681c01 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -70,18 +70,12 @@ game_dir="$steam_path/steamapps/common/DayZ" #URLS author="aclist" repo="dztui" -#TODO: this is hardcoded -#2024-12-12 gh_prefix="https://github.com" issues_url="$gh_prefix/$author/$repo/issues" -url_prefix="https://codeberg.org/$author/$repo/raw/branch" +url_prefix="https://raw.githubusercontent.com/$author/$repo" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" -releases_url="https://codeberg.org/$author/$repo/releases/download/browser" -km_helper_url="$releases_url/latlon" -db_file="$releases_url/ips.csv.gz" -sums_url="$stable_url/helpers/sums.md5" -#TODO: move adoc to index +releases_url="$gh_prefix/$author/$repo/releases/download/browser" help_url="https://$author.github.io/dzgui/dzgui" forum_url="$gh_prefix/$author/$repo/discussions" sponsor_url="$gh_prefix/sponsors/$author" @@ -829,7 +823,40 @@ format_version_url(){ esac echo "$version_url" } +get_response_code(){ + local url="$1" + curl -Ls -I -o /dev/null -w "%{http_code}" "$url" +} +test_connection(){ + source "$config_file" + declare -A hr + local res1 + local res2 + local str="No connection could be established to the remote server" + hr=( + ["github.com"]="https://github.com/$author" + ["codeberg.org"]="https://codeberg.org/$author" + ) + res=$(get_response_code "${hr["github.com"]}") + if [[ $res -ne 200 ]]; then + logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" + remote_host=cb + res=$(get_response_code "${hr["codeberg.org"]}") + if [[ $res -ne 200 ]]; then + printf "Failed to fetch new version. Rolling back" + return 1 + fi + fi + logger INFO "Set remote host to '${hr["codeberg.org"]}'" + if [[ $remote_host == "cb" ]]; then + url_prefix="https://codeberg.org/$author/$repo/raw/branch" + releases_url="https://codeberg.org/$author/$repo/releases/download/browser" + stable_url="$url_prefix/dzgui" + testing_url="$url_prefix/testing" + fi +} download_new_version(){ + test_connection local version_url="$(format_version_url)" mv "$src_path" "$src_path.old" curl -Ls "$version_url" > "$src_path" @@ -854,9 +881,7 @@ dl_changelog(){ local file="CHANGELOG.md" [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - #TODO: this is hardcoded - #2024-12-12 - local md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/$file" + local md="$url_prefix/${mdbranch}/$file" curl -Ls "$md" > "$state_path/$file" } toggle(){ From d4d0593927678da56e797191af2e4f23618e45a1 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:49:39 +0900 Subject: [PATCH 59/99] fix: add fallback logic to installscript --- install.sh | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) mode change 100644 => 100755 install.sh diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 index 22ec6ab..13f96cc --- a/install.sh +++ b/install.sh @@ -1,8 +1,41 @@ #!/usr/bin/env bash -curl -L "https://codeberg.org/aclist/dzgui/raw/branch/dzgui/dzgui.sh" > dzgui.sh -chmod +x dzgui.sh -xdg_file="$HOME/.local/share/applications/dzgui.desktop" -share="$HOME/.local/share/dzgui" -[[ -f $xdg_file ]] && rm $xdg_file -[[ -d $share ]] && rm -rf "$share" -./dzgui.sh +get_response_code(){ + local url="$1" + curl -Ls -I -o /dev/null -w "%{http_code}" "$url" +} +abort(){ + printf "Remote resource not available. Try again later.\n" + exit 1 +} +fetch(){ + local file="dzgui.sh" + local author="aclist" + local repo="dztui" + local branch="dzgui" + local url + local res + gh_url="https://raw.githubusercontent.com/$author/$repo/$branch/$file" + cb_url="https://codeberg.org/$author/$repo/raw/branch/$branch/$file" + + url="$gh_url" + printf "Checking the remote resource at '%s'\n" "$url" + res=$(get_response_code "$url") + if [[ $res -ne 200 ]]; then + url="$cb_url" + printf "Checking the remote resource at '%s'\n" "$url" + res=$(get_response_code "$url") + if [[ $res -ne 200 ]]; then + abort + fi + fi + + curl -L "$url" > dzgui.sh + chmod +x dzgui.sh + xdg_file="$HOME/.local/share/applications/dzgui.desktop" + share="$HOME/.local/share/dzgui" + [[ -f $xdg_file ]] && rm $xdg_file + [[ -d $share ]] && rm -rf "$share" + ./dzgui.sh +} + +fetch From 5d6cbaa1a5c8b7e79de64d9ad6fb720c97df89e4 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:51:31 +0900 Subject: [PATCH 60/99] chore: bump version --- dzgui.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dzgui.sh b/dzgui.sh index 6f5f8d1..b5af209 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.15 +version=5.6.0-beta.16 #CONSTANTS aid=221100 From 4da78d33f350dc8fd364c0c285d7fd4acd2f2616 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 13 Dec 2024 09:58:44 +0900 Subject: [PATCH 61/99] fix: clean up URLs --- dzgui.sh | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index b5af209..a92e175 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -606,11 +606,7 @@ fetch_helpers_by_sum(){ sum="${sums[$i]}" full_path="$helpers_path/$file" - if [[ $remote_host == "gh" ]]; then - url="https://raw.githubusercontent.com/$author/$repo/$realbranch/helpers/$file" - else - url="https://codeberg.org/$author/$repo/raw/branch/$realbranch/helpers/$file" - fi + url="${url_prefix}/$realbranch/helpers/$file" if [[ -f "$full_path" ]] && [[ $(get_hash "$full_path") == $sum ]]; then logger INFO "$file is current" @@ -895,7 +891,6 @@ test_connection(){ [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" fi logger INFO "Set remote host to '${hr["codeberg.org"]}'" - remote_host=cb if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" From 3fce2cc3ad710781029453da458d60ae6d45b9fe Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:18:56 +0900 Subject: [PATCH 62/99] fix: return codes --- dzgui.sh | 2 +- helpers/funcs | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index a92e175..07c06f8 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -581,7 +581,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="2a27ab36d5f8071fe53bf8dfd3b8d88d" + ["funcs"]="10c7d9cb9fbb792626ec9e7a4a788ba5" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 3681c01..82ab6ce 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -843,7 +843,6 @@ test_connection(){ remote_host=cb res=$(get_response_code "${hr["codeberg.org"]}") if [[ $res -ne 200 ]]; then - printf "Failed to fetch new version. Rolling back" return 1 fi fi @@ -857,6 +856,12 @@ test_connection(){ } download_new_version(){ test_connection + rc=$? + if [[ $rc -eq 1 ]]; then + printf "Remote resource unavailable. Aborting" + logger WARN "Remote resource unavailable" + return 1 + fi local version_url="$(format_version_url)" mv "$src_path" "$src_path.old" curl -Ls "$version_url" > "$src_path" @@ -896,6 +901,7 @@ toggle(){ fi update_config download_new_version + [[ $? -eq 1 ]] && return 1 return 255 ;; Toggle[[:space:]]mod[[:space:]]install[[:space:]]mode) From 6b48ee127ddee2ad4844345122b749172de696a4 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:45:39 +0900 Subject: [PATCH 63/99] chore: backports into stable --- CHANGELOG.md | 6 ++++++ dzgui.sh | 37 ++++++++++++++++++----------------- helpers/funcs | 53 +++++++++++++++++++++++++++++++++++++++++---------- install.sh | 47 ++++++++++++++++++++++++++++++++++++++------- 4 files changed, 109 insertions(+), 34 deletions(-) mode change 100644 => 100755 install.sh diff --git a/CHANGELOG.md b/CHANGELOG.md index b7156b8..67c7234 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [5.5.3] 2024-12-13 +### Fixed +- Add remote resource health checks before downloading updates +### Added +- Add fallback repository + ## [5.5.1] 2024-12-03 ### Fixed - Support localized decimal separators when parsing installed mod sizes diff --git a/dzgui.sh b/dzgui.sh index 144f874..a9afd95 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.5.2 +version=5.5.3 #CONSTANTS aid=221100 @@ -314,8 +314,8 @@ check_unmerged(){ check_version(){ local version_url=$(format_version_url) local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') - #2024-12-12: do not clobber local version if unreachable - [[ -z $upstream ]] && return + local res=$(get_response_code "$version_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$version_url'" logger INFO "Local branch: '$branch', local version: $version" if [[ $branch == "stable" ]]; then version_url="$stable_url/dzgui.sh" @@ -377,11 +377,7 @@ dl_changelog(){ local md [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - if [[ $remote_host == "gh" ]]; then - md="https://raw.githubusercontent.com/$author/$repo/${mdbranch}/CHANGELOG.md" - else - md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/CHANGELOG.md" - fi + local md="$url_prefix/${mdbranch}/$file" curl -Ls "$md" > "$state_path/CHANGELOG.md" } test_display_mode(){ @@ -523,6 +519,7 @@ get_hash(){ md5sum "$1" | awk '{print $1}' } fetch_a2s(){ + # this file is currently monolithic [[ -d $helpers_path/a2s ]] && { logger INFO "A2S helper is current"; return 0; } local sha=c7590ffa9a6d0c6912e17ceeab15b832a1090640 local author="yepoleb" @@ -530,6 +527,8 @@ fetch_a2s(){ local url="https://github.com/$author/$repo/tarball/$sha" local prefix="${author^}-$repo-${sha:0:7}" local file="$prefix.tar.gz" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$file'" curl -Ls "$url" > "$helpers_path/$file" tar xf "$helpers_path/$file" -C "$helpers_path" "$prefix/a2s" --strip=1 rm "$helpers_path/$file" @@ -546,6 +545,8 @@ fetch_dzq(){ local author="yepoleb" local repo="dayzquery" local url="https://raw.githubusercontent.com/$author/$repo/$sha/dayzquery.py" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: 'dayzquery.py'" curl -Ls "$url" > "$file" logger INFO "Updated DZQ to sha '$sha'" } @@ -577,14 +578,14 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="be3da1e542d14105f4358dd38901e25a" + ["ui.py"]="dd7aa34df1d374739127cca3033a3f67" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="8aa9eac96c21a3aabbf73c44b643523b" + ["funcs"]="6d985948a3b9b71017c4e0c5f7f55fe0" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" - local repo="dzgui" + local repo="dztui" local realbranch local file local sum @@ -605,16 +606,14 @@ fetch_helpers_by_sum(){ sum="${sums[$i]}" full_path="$helpers_path/$file" - if [[ $remote_host == "gh" ]]; then - url="https://raw.githubusercontent.com/$author/$repo/$realbranch/helpers/$file" - else - url="https://codeberg.org/$author/$repo/raw/branch/$realbranch/helpers/$file" - fi + url="${url_prefix}/$realbranch/helpers/$file" if [[ -f "$full_path" ]] && [[ $(get_hash "$full_path") == $sum ]]; then logger INFO "$file is current" else logger WARN "File '$full_path' checksum != '$sum'" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$url'" curl -Ls "$url" > "$full_path" if [[ ! $? -eq 0 ]]; then raise_error_and_quit "Failed to fetch the file '$file'. Possible timeout?" @@ -635,11 +634,15 @@ fetch_geo_file(){ local km_sum="b038fdb8f655798207bd28de3a004706" local gzip="$helpers_path/ips.csv.gz" if [[ ! -f $geo_file ]] || [[ $(get_hash $geo_file) != $geo_sum ]]; then + local res=$(get_response_code "$geo_file_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$geo_file_url'" curl -Ls "$geo_file_url" > "$gzip" #force overwrite gunzip -f "$gzip" fi if [[ ! -f $km_helper ]] || [[ $(get_hash $km_helper) != $km_sum ]]; then + local res=$(get_response_code "$km_helper_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$km_helper_url'" curl -Ls "$km_helper_url" > "$km_helper" chmod +x "$km_helper" fi @@ -887,10 +890,10 @@ test_connection(){ res=$(get_response_code "${hr["codeberg.org"]}") [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" fi + logger INFO "Set remote host to '${hr["codeberg.org"]}'" if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" - # 2024-12-12: interpolate variables again stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" km_helper_url="$releases_url/latlon" diff --git a/helpers/funcs b/helpers/funcs index 2f5875d..e8b9322 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -67,18 +67,12 @@ game_dir="$steam_path/steamapps/common/DayZ" #URLS author="aclist" repo="dztui" -#TODO: this is hardcoded -#2024-12-12 gh_prefix="https://github.com" issues_url="$gh_prefix/$author/$repo/issues" -url_prefix="https://codeberg.org/$author/$repo/raw/branch" +url_prefix="https://raw.githubusercontent.com/$author/$repo" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" -releases_url="https://codeberg.org/$author/$repo/releases/download/browser" -km_helper_url="$releases_url/latlon" -db_file="$releases_url/ips.csv.gz" -sums_url="$stable_url/helpers/sums.md5" -#TODO: move adoc to index +releases_url="$gh_prefix/$author/$repo/releases/download/browser" help_url="https://$author.github.io/dzgui/dzgui" forum_url="$gh_prefix/$author/$repo/discussions" sponsor_url="$gh_prefix/sponsors/$author" @@ -750,7 +744,45 @@ format_version_url(){ esac echo "$version_url" } +get_response_code(){ + local url="$1" + curl -Ls -I -o /dev/null -w "%{http_code}" "$url" +} +test_connection(){ + source "$config_file" + declare -A hr + local res1 + local res2 + local str="No connection could be established to the remote server" + hr=( + ["github.com"]="https://github.com/$author" + ["codeberg.org"]="https://codeberg.org/$author" + ) + res=$(get_response_code "${hr["github.com"]}") + if [[ $res -ne 200 ]]; then + logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" + remote_host=cb + res=$(get_response_code "${hr["codeberg.org"]}") + if [[ $res -ne 200 ]]; then + return 1 + fi + fi + logger INFO "Set remote host to '${hr["codeberg.org"]}'" + if [[ $remote_host == "cb" ]]; then + url_prefix="https://codeberg.org/$author/$repo/raw/branch" + releases_url="https://codeberg.org/$author/$repo/releases/download/browser" + stable_url="$url_prefix/dzgui" + testing_url="$url_prefix/testing" + fi +} download_new_version(){ + test_connection + rc=$? + if [[ $rc -eq 1 ]]; then + printf "Remote resource unavailable. Aborting" + logger WARN "Remote resource unavailable" + return 1 + fi local version_url="$(format_version_url)" mv "$src_path" "$src_path.old" curl -Ls "$version_url" > "$src_path" @@ -775,7 +807,7 @@ dl_changelog(){ local file="CHANGELOG.md" [[ $branch == "stable" ]] && mdbranch="dzgui" [[ $branch == "testing" ]] && mdbranch="testing" - local md="https://codeberg.org/$author/$repo/raw/branch/${mdbranch}/$file" + local md="$url_prefix/${mdbranch}/$file" curl -Ls "$md" > "$state_path/$file" } toggle(){ @@ -790,6 +822,7 @@ toggle(){ fi update_config download_new_version + [[ $? -eq 1 ]] && return 1 return 255 ;; Toggle[[:space:]]mod[[:space:]]install[[:space:]]mode) @@ -853,7 +886,7 @@ remove_from_favs(){ break fi done - if [[ ${#ip_list} -gt 0 ]]; then + if [[ ${#ip_list[@]} -gt 0 ]]; then readarray -t ip_list < <(printf "%s\n" "${ip_list[@]}") fi update_config diff --git a/install.sh b/install.sh old mode 100644 new mode 100755 index 22ec6ab..13f96cc --- a/install.sh +++ b/install.sh @@ -1,8 +1,41 @@ #!/usr/bin/env bash -curl -L "https://codeberg.org/aclist/dzgui/raw/branch/dzgui/dzgui.sh" > dzgui.sh -chmod +x dzgui.sh -xdg_file="$HOME/.local/share/applications/dzgui.desktop" -share="$HOME/.local/share/dzgui" -[[ -f $xdg_file ]] && rm $xdg_file -[[ -d $share ]] && rm -rf "$share" -./dzgui.sh +get_response_code(){ + local url="$1" + curl -Ls -I -o /dev/null -w "%{http_code}" "$url" +} +abort(){ + printf "Remote resource not available. Try again later.\n" + exit 1 +} +fetch(){ + local file="dzgui.sh" + local author="aclist" + local repo="dztui" + local branch="dzgui" + local url + local res + gh_url="https://raw.githubusercontent.com/$author/$repo/$branch/$file" + cb_url="https://codeberg.org/$author/$repo/raw/branch/$branch/$file" + + url="$gh_url" + printf "Checking the remote resource at '%s'\n" "$url" + res=$(get_response_code "$url") + if [[ $res -ne 200 ]]; then + url="$cb_url" + printf "Checking the remote resource at '%s'\n" "$url" + res=$(get_response_code "$url") + if [[ $res -ne 200 ]]; then + abort + fi + fi + + curl -L "$url" > dzgui.sh + chmod +x dzgui.sh + xdg_file="$HOME/.local/share/applications/dzgui.desktop" + share="$HOME/.local/share/dzgui" + [[ -f $xdg_file ]] && rm $xdg_file + [[ -d $share ]] && rm -rf "$share" + ./dzgui.sh +} + +fetch From e6b5e40bb2bc5e30288f01e6922488de5001290d Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 15 Dec 2024 08:57:25 +0900 Subject: [PATCH 64/99] chore: add logging --- CHANGELOG.md | 4 ++++ dzgui.sh | 6 +++--- helpers/funcs | 6 ++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d02bc4..8caec7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.17] 2024-12-14 +### Added +- Additional logging + ## [5.6.0-beta.16] 2024-12-13 ### Fixed - Add remote resource health checks before downloading updates diff --git a/dzgui.sh b/dzgui.sh index 07c06f8..86c478e 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.16 +version=5.6.0-beta.17 #CONSTANTS aid=221100 @@ -483,7 +483,7 @@ stale_symlinks(){ local game_dir="$steam_path/steamapps/common/DayZ" for l in $(find "$game_dir" -xtype l); do logger DEBUG "Updating stale symlink '$l'" - unlink $l + unlink "$l" done } local_latlon(){ @@ -581,7 +581,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="be3da1e542d14105f4358dd38901e25a" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="10c7d9cb9fbb792626ec9e7a4a788ba5" + ["funcs"]="37897aa36bc2fb6286cee02c8bb07258" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 82ab6ce..22c6d44 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1170,19 +1170,24 @@ compare(){ echo "$diff" } legacy_symlinks(){ + logger INFO "Removing legacy symlinks" for d in "$game_dir"/*; do if [[ $d =~ @[0-9]+-.+ ]]; then + logger INFO "Unlinking $d" unlink "$d" fi done readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d) + logger INFO "Read local mods into array with length: ${#mod_dirs[@]}" [[ ${#mod_dirs[@]} -eq 0 ]] && return + logger INFO "Removing legacy encoding format" for d in "${mod_dirs[@]}"; do # suppress errors if mods are downloading at boot [[ ! -f "$d/meta.cpp" ]] && continue local id=$(awk -F"= " '/publishedid/ {print $2}' "$d"/meta.cpp | awk -F\; '{print $1}') local encoded_id=$(echo "$id" | awk '{printf("%c",$1)}' | base64 | sed 's/\//_/g; s/=//g; s/+/]/g') if [[ -h "$game_dir/@$encoded_id" ]]; then + logger INFO "Unlinking $game_dir/@$encoded_id" unlink "$game_dir/@$encoded_id" fi done @@ -1190,6 +1195,7 @@ legacy_symlinks(){ symlinks(){ readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d) [[ ${#mod_dirs[@]} -eq 0 ]] && return + logger INFO "Generating symlinks in new format" for d in "${mod_dirs[@]}"; do # suppress errors if mods are downloading at boot [[ ! -f "$d/meta.cpp" ]] && continue From 4d3d9bf0bb09f9ecb2af5fe46ee7ecfe5205bbbc Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 15 Dec 2024 09:08:35 +0900 Subject: [PATCH 65/99] feat: open workshop subscriptions --- CHANGELOG.md | 4 ++++ dzgui.sh | 4 ++-- helpers/funcs | 21 ++++++++++++++++++ helpers/ui.py | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8caec7d..71c19b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.0-beta.18] 2024-12-14 +### Added +- Open Steam workshop subscriptions + ## [5.6.0-beta.17] 2024-12-14 ### Added - Additional logging diff --git a/dzgui.sh b/dzgui.sh index 86c478e..ff58bfe 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -578,10 +578,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="be3da1e542d14105f4358dd38901e25a" + ["ui.py"]="24d0525e71c0725a1487926fae7330e4" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="37897aa36bc2fb6286cee02c8bb07258" + ["funcs"]="4c1480fcfae15c4bc1c02a337d1de488" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 22c6d44..1bf3d1a 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -104,6 +104,7 @@ declare -A funcs=( ["Connect by IP"]="validate_and_connect" ["Connect by ID"]="validate_and_connect" ["Connect from table"]="connect_from_table" +["find_id"]="find_id" ["toggle"]="toggle" ["Open link"]="open_link" ["filter"]="dump_servers" @@ -121,6 +122,7 @@ declare -A funcs=( ["is_in_favs"]="is_in_favs" ["show_log"]="show_log" ["Output system info to log file"]="generate_log" +["open_user_workshop"]="open_user_workshop" ["open_workshop_page"]="open_workshop_page" ["Add to my servers"]="update_favs_from_table" ["Remove from my servers"]="update_favs_from_table" @@ -332,6 +334,19 @@ is_in_favs(){ done return 1 } +find_id(){ + local file="$default_steam_path/config/loginusers.vdf" + [[ ! -f $file ]] && return 1 + local res=$(python3 $HOME/.local/share/dzgui/helpers/vdf2json.py \ + -i "$file" | jq -r '.users + |to_entries[] + |select(.value.MostRecent=="1") + |.key' + ) + [[ -z $res ]] && return 1 + printf "%s" "$res" + return 0 +} list_mods(){ local symlink local sep @@ -1051,6 +1066,12 @@ update_config_val(){ show_log(){ < "$debug_log" sed 's/Keyword␞/Keyword/' } +open_user_workshop(){ + shift + local id="$1" + url="https://steamcommunity.com/profiles/$id/myworkshopfiles/?appid=$aid&browsefilter=mysubscriptions" + $steam_cmd steam://openurl/$url & +} open_workshop_page(){ shift local id="$1" diff --git a/helpers/ui.py b/helpers/ui.py index b5f01c0..d741ee0 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -215,6 +215,7 @@ class RowType(EnumWithAttrs): "label": "Toggle mod install mode", "tooltip": "Switch between manual and auto mod installation", "default": "manual", + "link_label": "Open Steam Workshop", "alt": "auto", "val": "auto_install" } @@ -756,6 +757,29 @@ def process_tree_option(input, treeview): case RowType.TGL_BRANCH: wait_msg = "Updating DZGUI branch" call_on_thread(False, "toggle", wait_msg, cmd_string) + case RowType.TGL_INSTALL: + if query_config(None, "auto_install")[0] == "1": + proc = call_out(transient_parent, "toggle", cmd_string) + grid.update_right_statusbar() + tooltip = format_metadata(command.dict["label"]) + transient_parent.grid.update_statusbar(tooltip) + return + # manual -> auto mode + proc = call_out(transient_parent, "find_id", "") + if proc.returncode == 1: + link=None + uid=None + else: + link=command.dict["link_label"] + uid=proc.stdout + manual_sub_msg = """\ + When switching from MANUAL to AUTO mod install mode, + DZGUI will manage mod installation and deletion for you. + To prevent conflicts with Steam Workshop subscriptions and old mods from being downloaded + when Steam updates, you should unsubscribe from any existing Workshop mods you manually subscribed to. + Open your Profile > Workshop Items and select 'Unsubscribe from all' + on the right-hand side, then click OK below to enable AUTO mod install mode.""" + LinkDialog(transient_parent, textwrap.dedent(manual_sub_msg), Popup.NOTIFY, link, command, uid) case _: proc = call_out(transient_parent, "toggle", cmd_string) grid.update_right_statusbar() @@ -2205,6 +2229,43 @@ class ModDialog(GenericDialog): subprocess.Popen(['/usr/bin/env', 'bash', funcs, "open_workshop_page", mod_id]) +class LinkDialog(GenericDialog): + def __init__(self, parent, text, mode, link, command, uid=None): + super().__init__(parent, text, mode) + + self.dialog = GenericDialog(parent, text, mode) + self.dialogBox = self.dialog.get_content_area() + self.dialog.set_default_response(Gtk.ResponseType.OK) + self.dialog.set_size_request(500, 0) + + if link is not None: + button = Gtk.Button(label=link) + button.set_margin_start(60) + button.set_margin_end(60) + button.connect("clicked", self._on_button_clicked, uid) + self.dialogBox.pack_end(button, False, False, 0) + + self.dialog.show_all() + self.dialog.connect("response", self._on_dialog_response, parent, command) + + def _on_button_clicked(self, button, uid): + label = button.get_label() + subprocess.Popen(['/usr/bin/env', 'bash', funcs, "open_user_workshop", uid]) + + def _on_dialog_response(self, dialog, resp, parent, command): + match resp: + case Gtk.ResponseType.DELETE_EVENT: + return + case Gtk.ResponseType.OK: + self.dialog.destroy() + proc = call_out(parent, "toggle", command.dict["label"]) + parent.grid.update_right_statusbar() + tooltip = format_metadata(command.dict["label"]) + parent.grid.update_statusbar(tooltip) + + + + class EntryDialog(GenericDialog): def __init__(self, parent, text, mode, link): super().__init__(parent, text, mode) From 34b3d3bc8cec5b20e66273f17c5ba11ff68afa9e Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 16 Dec 2024 14:49:55 +0900 Subject: [PATCH 66/99] chore: drop unused var --- dzgui.sh | 2 +- helpers/ui.py | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index ff58bfe..a7aabc6 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -578,7 +578,7 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="24d0525e71c0725a1487926fae7330e4" + ["ui.py"]="0e3845ef150ee9863f9160c62dbb24f9" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["funcs"]="4c1480fcfae15c4bc1c02a337d1de488" diff --git a/helpers/ui.py b/helpers/ui.py index d741ee0..793d552 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -2249,7 +2249,6 @@ class LinkDialog(GenericDialog): self.dialog.connect("response", self._on_dialog_response, parent, command) def _on_button_clicked(self, button, uid): - label = button.get_label() subprocess.Popen(['/usr/bin/env', 'bash', funcs, "open_user_workshop", uid]) def _on_dialog_response(self, dialog, resp, parent, command): From 6e3746e9b499390ab21b072de0896b9d24a4e072 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 16 Dec 2024 15:21:57 +0900 Subject: [PATCH 67/99] fix: abort path discovery --- CHANGELOG.md | 5 +++++ dzgui.sh | 6 +++--- helpers/funcs | 12 ++++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 71c19b2..56e0f91 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,11 @@ ## [5.6.0-beta.18] 2024-12-14 ### Added - Open Steam workshop subscriptions +### Fixed +- Empty dialog popups if user manually deletes local mods while application is running +- Abort DayZ path discovery if VDF if Steam files are not synched +### Changed +- Admonish user to restart Steam in error dialog if DayZ path could not be found ## [5.6.0-beta.17] 2024-12-14 ### Added diff --git a/dzgui.sh b/dzgui.sh index a7aabc6..05d9cee 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -581,7 +581,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="0e3845ef150ee9863f9160c62dbb24f9" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="4c1480fcfae15c4bc1c02a337d1de488" + ["funcs"]="a9745fa5cc2f007bddf0d30032845fbd" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" @@ -747,7 +747,7 @@ find_library_folder(){ local search_path="$1" steam_path="$(python3 "$helpers_path/vdf2json.py" -i "$1/steamapps/libraryfolders.vdf" \ | jq -r '.libraryfolders[]|select(.apps|has("221100")).path')" - if [[ ! $? -eq 0 ]]; then + if [[ ! $? -eq 0 ]] || [[ -z $steam_path ]]; then logger WARN "Failed to parse Steam path using '$search_path'" return 1 fi @@ -800,7 +800,7 @@ create_config(){ find_library_folder "$default_steam_path" if [[ -z $steam_path ]]; then logger raise_error "Steam path was empty" - zenity --question --text="DayZ not found or not installed at the Steam library given." --ok-label="Choose path manually" --cancel-label="Exit" + zenity --question --text="DayZ not found or not installed at the Steam library given. NOTE: if you recently installed DayZ or moved its location, you MUST restart Steam first for these changes to synch." --ok-label="Choose path manually" --cancel-label="Exit" if [[ $? -eq 0 ]]; then logger INFO "User selected file picker" file_picker diff --git a/helpers/funcs b/helpers/funcs index 1bf3d1a..88bc082 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -353,12 +353,13 @@ list_mods(){ local name local base_dir local size + local mods if [[ -z $(installed_mods) ]] || [[ -z $(find $workshop_dir -maxdepth 2 -name "*.cpp" | grep .cpp) ]]; then printf "No mods currently installed or incorrect path set." logger WARN "Found no locally installed mods" return 1 else - for dir in $(find $game_dir/* -maxdepth 1 -type l); do + mods=$(for dir in $(find $game_dir/* -maxdepth 1 -type l); do symlink=$(basename $dir) sep="␞" name=$(awk -F\" '/name/ {print $2}' "${dir}/meta.cpp") @@ -366,7 +367,14 @@ list_mods(){ size=$(du -s "$(readlink -f "$game_dir/$symlink")" | awk '{print $1}') size=$(python3 -c "n=($size/1024) +.005; print(round(n,4))") LC_NUMERIC=C printf "%s$sep%s$sep%s$sep%3.3f\n" "$name" "$symlink" "$base_dir" "$size" - done | sort -k1 + done | sort -k1) + # user may have manually pruned mods out-of-band + # handle directory detritus but no actual mods + if [[ -z $mods ]]; then + printf "No mods currently installed or incorrect path set." + return 1 + fi + echo "$mods" fi } installed_mods(){ From c73120295ac42eb0c0efa950c1ccfe7f2336d695 Mon Sep 17 00:00:00 2001 From: jiriks74 <jiri@stefka.eu> Date: Mon, 9 Dec 2024 14:56:51 +0100 Subject: [PATCH 68/99] fix(checks): Check `vm.max_map_count` using `cat` This solves multiple issues: - We don't need `sudo` to check the value anymore - Some systems may not have `sysctl` available - IDK about desktops, but my Debian server doesn't have this command (for whatever reason) --- dzgui.sh | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 2a8d4e2..c02fa2f 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -402,13 +402,20 @@ check_architecture(){ } check_map_count(){ [[ $is_steam_deck -gt 0 ]] && return 0 - local count=1048576 + local map_count_file="/proc/sys/vm/max_map_count" + local min_count=1048576 local conf_file="/etc/sysctl.d/dayz.conf" - if [[ -f $conf_file ]]; then - logger DEBUG "System map count is already $count or higher" + local current_count + if [[ ! -f ${map_count_file} ]]; then + logger WARN "File '${map_count_file}' doesn't exist!" + return 1 + fi + current_count=$(cat ${map_count_file}) + if [[ $current_count -ge $min_count ]]; then + logger DEBUG "System map count is set to ${current_count}" return 0 fi - qdialog "sudo password required to check system vm map count." "OK" "Cancel" + qdialog "sudo password required to set system vm map count." "OK" "Cancel" if [[ $? -eq 0 ]]; then local pass logger INFO "Prompting user for sudo escalation" @@ -417,13 +424,11 @@ check_map_count(){ logger WARN "User aborted password prompt" return 1 fi - local ct=$(sudo -S <<< "$pass" sh -c "sysctl -q vm.max_map_count | awk -F'= ' '{print \$2}'") - logger DEBUG "Old map count is $ct" - local new_ct - [[ $ct -lt $count ]] && ct=$count - sudo -S <<< "$pass" sh -c "echo 'vm.max_map_count=$ct' > $conf_file" + logger DEBUG "Old map count is $current_count" + [[ $current_count -lt $min_count ]] && current_count=$min_count + sudo -S <<< "$pass" sh -c "echo 'vm.max_map_count=${current_count}' > $conf_file" sudo sysctl -p "$conf_file" - logger DEBUG "Updated map count to $count" + logger DEBUG "Updated map count to $min_count" else logger WARN "User aborted map count prompt" return 1 From a18d68776f0f45cbd999e1a23a518d37e58a2dfa Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 18 Dec 2024 17:26:31 +0900 Subject: [PATCH 69/99] chore: add logging --- CHANGELOG.md | 3 ++- dzgui.sh | 4 ++-- helpers/funcs | 7 +++++-- helpers/ui.py | 2 -- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56e0f91..0aaa350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,8 @@ ## [5.6.0-beta.18] 2024-12-14 ### Added -- Open Steam workshop subscriptions +- Open Steam workshop subscriptions dialog +- Additional logging ### Fixed - Empty dialog popups if user manually deletes local mods while application is running - Abort DayZ path discovery if VDF if Steam files are not synched diff --git a/dzgui.sh b/dzgui.sh index 05d9cee..ce0e203 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -578,10 +578,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="0e3845ef150ee9863f9160c62dbb24f9" + ["ui.py"]="99544ccef6060125509c4b689a808a15" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="a9745fa5cc2f007bddf0d30032845fbd" + ["funcs"]="98261fdba4323f77c6dd610c1efc4d11" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 88bc082..576b5c3 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1202,7 +1202,7 @@ legacy_symlinks(){ logger INFO "Removing legacy symlinks" for d in "$game_dir"/*; do if [[ $d =~ @[0-9]+-.+ ]]; then - logger INFO "Unlinking $d" + logger INFO "Unlinking '$d'" unlink "$d" fi done @@ -1212,11 +1212,14 @@ legacy_symlinks(){ logger INFO "Removing legacy encoding format" for d in "${mod_dirs[@]}"; do # suppress errors if mods are downloading at boot + logger INFO "Testing directory '$d'" [[ ! -f "$d/meta.cpp" ]] && continue local id=$(awk -F"= " '/publishedid/ {print $2}' "$d"/meta.cpp | awk -F\; '{print $1}') + logger INFO "Given id is '$id'" local encoded_id=$(echo "$id" | awk '{printf("%c",$1)}' | base64 | sed 's/\//_/g; s/=//g; s/+/]/g') + logger INFO "Resolved id is '$encoded_id'" if [[ -h "$game_dir/@$encoded_id" ]]; then - logger INFO "Unlinking $game_dir/@$encoded_id" + logger INFO "Unlinking '$game_dir/@$encoded_id'" unlink "$game_dir/@$encoded_id" fi done diff --git a/helpers/ui.py b/helpers/ui.py index 793d552..38abd1b 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -2263,8 +2263,6 @@ class LinkDialog(GenericDialog): parent.grid.update_statusbar(tooltip) - - class EntryDialog(GenericDialog): def __init__(self, parent, text, mode, link): super().__init__(parent, text, mode) From 99d964bf449bbee524d67cbe719350b6929b8a2a Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 18 Dec 2024 18:22:41 +0900 Subject: [PATCH 70/99] chore: bump version --- CHANGELOG.md | 1 + dzgui.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0aaa350..ea3c173 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Fixed - Empty dialog popups if user manually deletes local mods while application is running - Abort DayZ path discovery if VDF if Steam files are not synched +- Avoid sudo escalation if system map count is sufficient (jiriks74) ### Changed - Admonish user to restart Steam in error dialog if DayZ path could not be found diff --git a/dzgui.sh b/dzgui.sh index 15da90a..8136155 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.17 +version=5.6.0-beta.18 #CONSTANTS aid=221100 From 4a953164122a3e55f51679ea82d1d404adf85502 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 18 Dec 2024 20:55:01 +0900 Subject: [PATCH 71/99] feat: redact usernames --- helpers/funcs | 1 + 1 file changed, 1 insertion(+) diff --git a/helpers/funcs b/helpers/funcs index 576b5c3..99bc569 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -739,6 +739,7 @@ logger(){ local self="${BASH_SOURCE[0]}" local caller="${FUNCNAME[1]}" local line="${BASH_LINENO[0]}" + self="$(<<< "$self" sed 's@\(/[^/]*/\)\([^/]*\)\(.*\)@\1REDACTED\3@g')" printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" >> "$debug_log" } test_ping(){ From 9b2ec79aa57ac41c9d5fa52b238b2d0c44b8fc97 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 18 Dec 2024 20:56:14 +0900 Subject: [PATCH 72/99] feat: redact usernames --- dzgui.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/dzgui.sh b/dzgui.sh index 8136155..0dd1df3 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -83,6 +83,7 @@ logger(){ local self="${BASH_SOURCE[0]}" local caller="${FUNCNAME[1]}" local line="${BASH_LINENO[0]}" + self="$(<<< "$self" sed 's@\(/[^/]*/\)\([^/]*\)\(.*\)@\1REDACTED\3@g')" printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" >> "$debug_log" } setup_dirs(){ From bdea37ddc447860c084c2a725ed0f258766b9ef5 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 18 Dec 2024 20:57:09 +0900 Subject: [PATCH 73/99] chore: cleanup --- helpers/funcs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/helpers/funcs b/helpers/funcs index 99bc569..8450450 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -337,8 +337,9 @@ is_in_favs(){ find_id(){ local file="$default_steam_path/config/loginusers.vdf" [[ ! -f $file ]] && return 1 - local res=$(python3 $HOME/.local/share/dzgui/helpers/vdf2json.py \ - -i "$file" | jq -r '.users + local res=$(python3 "$helpers_path/vdf2json.py" \ + -i "$file" \ + | jq -r '.users |to_entries[] |select(.value.MostRecent=="1") |.key' From 973e2dc100a5a82d803c735478285fcfe6732497 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 19 Dec 2024 10:21:44 +0900 Subject: [PATCH 74/99] fix: shorten symlink check time --- CHANGELOG.md | 6 ++++++ dzgui.sh | 4 ++-- helpers/funcs | 39 ++++++++++++++++----------------------- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ea3c173..ecfc1b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## [5.6.0-beta.19] 2024-12-18 +### Added +- Redact usernames in log files +### Fixed +- More performant symlink traversal when checking for legacy links + ## [5.6.0-beta.18] 2024-12-14 ### Added - Open Steam workshop subscriptions dialog diff --git a/dzgui.sh b/dzgui.sh index 0dd1df3..ac2de14 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.18 +version=5.6.0-beta.19 #CONSTANTS aid=221100 @@ -587,7 +587,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="99544ccef6060125509c4b689a808a15" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="98261fdba4323f77c6dd610c1efc4d11" + ["funcs"]="05f104fcdf27222f04046d41ec48d692" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 8450450..5989793 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1202,29 +1202,22 @@ compare(){ } legacy_symlinks(){ logger INFO "Removing legacy symlinks" - for d in "$game_dir"/*; do - if [[ $d =~ @[0-9]+-.+ ]]; then - logger INFO "Unlinking '$d'" - unlink "$d" - fi - done - readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d) - logger INFO "Read local mods into array with length: ${#mod_dirs[@]}" - [[ ${#mod_dirs[@]} -eq 0 ]] && return - logger INFO "Removing legacy encoding format" - for d in "${mod_dirs[@]}"; do - # suppress errors if mods are downloading at boot - logger INFO "Testing directory '$d'" - [[ ! -f "$d/meta.cpp" ]] && continue - local id=$(awk -F"= " '/publishedid/ {print $2}' "$d"/meta.cpp | awk -F\; '{print $1}') - logger INFO "Given id is '$id'" - local encoded_id=$(echo "$id" | awk '{printf("%c",$1)}' | base64 | sed 's/\//_/g; s/=//g; s/+/]/g') - logger INFO "Resolved id is '$encoded_id'" - if [[ -h "$game_dir/@$encoded_id" ]]; then - logger INFO "Unlinking '$game_dir/@$encoded_id'" - unlink "$game_dir/@$encoded_id" - fi - done + + readarray -t stale_mod_dirs1 < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type l -name '@?*-*') + logger INFO "Read local mods into array 1 with length: ${#stale_mod_dirs[@]}" + if [[ ${#stale_mod_dirs1} -ne 0 ]]; then + for d in "${stale_mod_dirs1[@]}"; do + unlink "$game_dir/$d" + done + fi + + readarray -t stale_mod_dirs2 < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type l -name '@??') + logger INFO "Read local mods into array 2 with length: ${#stale_mod_dirs[@]}" + if [[ ${#stale_mod_dirs2} -eq 0 ]]; then + for d in "${stale_mod_dirs2[@]}"; do + unlink "$game_dir/$d" + done + fi } symlinks(){ readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d) From 4e968e63e54cc333f399a74131a02d4b61343288 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 23 Dec 2024 20:58:21 +0900 Subject: [PATCH 75/99] fix: more performant link traversal --- CHANGELOG.md | 8 ++++++ dzgui.sh | 9 ++++-- helpers/funcs | 79 ++++++++++++++++++++++++++++++++++++++++----------- 3 files changed, 77 insertions(+), 19 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ecfc1b3..14a1345 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [5.6.0-beta.20] 2024-12-23 +### Added +- Output real and resolved mod ids to logs (temporary) +- Added -steam launch parameter +### Fixed +- Only iterate on missing symlinks +- Move logging up + ## [5.6.0-beta.19] 2024-12-18 ### Added - Redact usernames in log files diff --git a/dzgui.sh b/dzgui.sh index ac2de14..0d62f18 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.19 +version=5.6.0-beta.20 #CONSTANTS aid=221100 @@ -587,7 +587,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="99544ccef6060125509c4b689a808a15" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="05f104fcdf27222f04046d41ec48d692" + ["funcs"]="6371f34f2040de5df82bc9064ad4d26d" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" @@ -893,10 +893,10 @@ test_connection(){ if [[ $res -ne 200 ]]; then logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" remote_host=cb + logger INFO "Set remote host to '${hr["codeberg.org"]}'" res=$(get_response_code "${hr["codeberg.org"]}") [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" fi - logger INFO "Set remote host to '${hr["codeberg.org"]}'" if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" @@ -1004,6 +1004,9 @@ main(){ uninstall && exit 0 fi + if [[ $1 == "--steam" ]] || [[ $1 == "-s" ]]; then + export STEAM_LAUNCH=1 + fi set_im_module diff --git a/helpers/funcs b/helpers/funcs index 5989793..79e0953 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -29,6 +29,8 @@ prefix="dzg" log_path="$state_path/logs" debug_log="$log_path/DZGUI_DEBUG.log" system_log="$log_path/DZGUI_SYSTEM.log" +mod_log="$log_path/DZGUI_MODIDS.log" +meta_log="$log_path/DZGUI_META.log" #STATE FILES history_file="$state_path/$prefix.history" @@ -866,12 +868,12 @@ test_connection(){ if [[ $res -ne 200 ]]; then logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" remote_host=cb + logger INFO "Set remote host to '${hr["codeberg.org"]}'" res=$(get_response_code "${hr["codeberg.org"]}") if [[ $res -ne 200 ]]; then return 1 fi fi - logger INFO "Set remote host to '${hr["codeberg.org"]}'" if [[ $remote_host == "cb" ]]; then url_prefix="https://codeberg.org/$author/$repo/raw/branch" releases_url="https://codeberg.org/$author/$repo/releases/download/browser" @@ -1165,6 +1167,12 @@ $(print_ip_list | sed 's/"//g') Mods: $(list_mods | sed 's/^/\t/g') DOC + #2024-12-13 + find $workshop_dir -mindepth 1 -maxdepth 1 -type d | awk -F/ '{print $NF}' | sort > $mod_log + find $workshop_dir -mindepth 1 -name meta.cpp | while read -r line; do + cat "$line" | awk '/publishedid/ {print $3}' | sed 's/;//g;s/\r//g' + done | sort > $meta_log + #END printf "Wrote system log to %s" "$system_log" return 0 } @@ -1220,22 +1228,61 @@ legacy_symlinks(){ fi } symlinks(){ - readarray -t mod_dirs < <(find "$workshop_dir" -maxdepth 1 -mindepth 1 -type d) - [[ ${#mod_dirs[@]} -eq 0 ]] && return - logger INFO "Generating symlinks in new format" - for d in "${mod_dirs[@]}"; do - # suppress errors if mods are downloading at boot - [[ ! -f "$d/meta.cpp" ]] && continue - id=$(awk -F"= " '/publishedid/ {print $2}' "$d"/meta.cpp | awk -F\; '{print $1}') - encoded_id=$(encode "$id") - link="@$encoded_id" - if [[ -h "$game_dir/$link" ]]; then - logger INFO "Symlink already exists: '$link' for mod '$id'" - continue + _merge(){ + comm -23 <(printf "%s\n" "${mods[@]}" | sort) <(printf "%s\n" "${targets[@]}" | sort) + } + _pulse(){ + zenity --pulsate --progress --auto-close --no-cancel --title="DZGUI" + } + _create_links(){ + local arr=("$@") + local encoded_id + local link + local mod + for ((i=0; i<${#arr[@]}; i++)); do + encoded_id=$(encode "${arr[$i]}") + link="@$encoded_id" + mod="${arr[$i]}" + logger INFO "Creating link '$game_dir/$link' for '$workshop_dir/$mod'" + [[ $STEAM_LAUNCH -eq 1 ]] && echo "# Creating mod link $((i+1))/${#arr[@]}" + ln -s "$workshop_dir/$mod" "$game_dir/$link" + done + } + + readarray -t mods < <(find $workshop_dir -mindepth 1 -name meta.cpp | awk -F/ 'NF=NF-1{print $NF}') + readarray -t links < <(find $game_dir -type l) + + if [[ ${#mods[@]} -eq 0 ]]; then + logger INFO "No mods present, aborting" + return + fi + + if [[ ${#links[@]} -eq 0 ]]; then + logger INFO "No symlinks present in '$game_dir', creating them" + if [[ $STEAM_LAUNCH -eq 1 ]]; then + _create_links "${mods[@]}" > >(_pulse) + else + _create_links "${mods[@]}" fi - ln -fs "$d" "$game_dir/$link" - logger INFO "Created symlink '$link' for mod '$id'" - done + return + fi + + readarray -t targets < <(printf "%s\n" "${links[@]}" | xargs readlink -f | awk -F/ '{print $NF}') + readarray -t hits < <(_merge) + + if [[ ${#hits[@]} -eq 0 ]]; then + logger INFO "Symlinks are up to date, skipping" + return + + fi + + # update missing targets + logger INFO "Found ${#hits[@]} unlinked mods" + if [[ $STEAM_LAUNCH -eq 1 ]]; then + _create_links "${hits[@]}" > >(_pulse) + else + _create_links "${hits[@]}" + fi } update_history(){ local record="$1" From 3cd99911a61edfe51da64bc9ec1e62b2ffa30b5b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 23 Dec 2024 21:00:18 +0900 Subject: [PATCH 76/99] chore: remove stray line --- dzgui.sh | 2 +- helpers/funcs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 0d62f18..a6181ac 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -587,7 +587,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="99544ccef6060125509c4b689a808a15" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="6371f34f2040de5df82bc9064ad4d26d" + ["funcs"]="16caf08919f25b44340ed37de7c4265c" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 79e0953..95c0a3f 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1273,7 +1273,6 @@ symlinks(){ if [[ ${#hits[@]} -eq 0 ]]; then logger INFO "Symlinks are up to date, skipping" return - fi # update missing targets From 3b5960cb16dffea6d7a19c4b01ebb3f8d6cdb902 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 23 Dec 2024 21:38:15 +0900 Subject: [PATCH 77/99] fix: enclose paths --- dzgui.sh | 2 +- helpers/funcs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index a6181ac..2d3b184 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -587,7 +587,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="99544ccef6060125509c4b689a808a15" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="16caf08919f25b44340ed37de7c4265c" + ["funcs"]="5d69e8e3d7c3b3c499354b0b939ce76b" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 95c0a3f..ea965b3 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -1168,10 +1168,10 @@ $(print_ip_list | sed 's/"//g') $(list_mods | sed 's/^/\t/g') DOC #2024-12-13 - find $workshop_dir -mindepth 1 -maxdepth 1 -type d | awk -F/ '{print $NF}' | sort > $mod_log + find $workshop_dir -mindepth 1 -maxdepth 1 -type d | awk -F/ '{print $NF}' | sort > "$mod_log" find $workshop_dir -mindepth 1 -name meta.cpp | while read -r line; do cat "$line" | awk '/publishedid/ {print $3}' | sed 's/;//g;s/\r//g' - done | sort > $meta_log + done | sort > "$meta_log" #END printf "Wrote system log to %s" "$system_log" return 0 From e5f7391b8965011dd90bbb0f843c727790b5a04b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 25 Dec 2024 14:20:36 +0900 Subject: [PATCH 78/99] chore: add YAML file --- .github/workflows/mirror.yml | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 .github/workflows/mirror.yml diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml new file mode 100644 index 0000000..6826de7 --- /dev/null +++ b/.github/workflows/mirror.yml @@ -0,0 +1,23 @@ +name: Mirror to Codeberg + +on: + push: + branches: + - main + - dzgui + - testing + - release/5.6.0-beta.20 + workflow_dispatch: + +jobs: + mirror-to-codeberg: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: pixta-dev/repository-mirroring-action@v1 + if: ${{ vars.GIT_REMOTE != '' }} + with: + target_repo_url: ${{ vars.GIT_REMOTE }} + ssh_private_key: ${{ secrets.GIT_SSH_PRIVATE_KEY }} From 8c33a1b371699a1898bd72e1e20097d6c7cea66b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 25 Dec 2024 14:21:24 +0900 Subject: [PATCH 79/99] chore: drop branch logic --- .github/workflows/mirror.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml index 6826de7..b4cf79b 100644 --- a/.github/workflows/mirror.yml +++ b/.github/workflows/mirror.yml @@ -2,11 +2,6 @@ name: Mirror to Codeberg on: push: - branches: - - main - - dzgui - - testing - - release/5.6.0-beta.20 workflow_dispatch: jobs: From 8817a5db23c61d8d8ce58950fe2ca5fb2686ee74 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Wed, 25 Dec 2024 14:22:39 +0900 Subject: [PATCH 80/99] chore: add YAML file --- .github/workflows/mirror.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/mirror.yml diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml new file mode 100644 index 0000000..b4cf79b --- /dev/null +++ b/.github/workflows/mirror.yml @@ -0,0 +1,18 @@ +name: Mirror to Codeberg + +on: + push: + workflow_dispatch: + +jobs: + mirror-to-codeberg: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: pixta-dev/repository-mirroring-action@v1 + if: ${{ vars.GIT_REMOTE != '' }} + with: + target_repo_url: ${{ vars.GIT_REMOTE }} + ssh_private_key: ${{ secrets.GIT_SSH_PRIVATE_KEY }} From 2158635e64eb58039622ec54dfb778d8274191ef Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:04:12 +0900 Subject: [PATCH 81/99] chore: add gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6e92f57 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tags From 5da4d16ed8fa5f2ff9cbcb945195f0835f257f80 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:23:38 +0900 Subject: [PATCH 82/99] feat: add tooltips --- CHANGELOG.md | 15 ++++++++++++ README.md | 17 ++++++++------ dzgui.sh | 6 ++--- helpers/funcs | 23 ++++++++----------- helpers/ui.py | 63 +++++++++++++++++++++++++++++++-------------------- 5 files changed, 76 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14a1345..620e8f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Changelog +## [5.6.0-beta.21] 2024-01-06 +### Added +- Add in-app documentation link to Codeberg mirror +- Hover tooltips to most buttons +### Fixed +- Prevent ArrowUp/ArrowDown input when inside keyword field +### Changed +- Update forum URL +- Reword Help section links to include destination +- Update README.md +### Dropped +- Removed temporary mod ID output in debug logs +- Removed Hall of Fame section from button links, moved inside documentation +- Remove unused imports + ## [5.6.0-beta.20] 2024-12-23 ### Added - Output real and resolved mod ids to logs (temporary) diff --git a/README.md b/README.md index d6cf770..93f8559 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,19 @@ ## What this is -DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. This overcomes certain limitations in the Linux client and helps prepare the game to launch by doing the following: +DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. -1. Search for and display server metadata in a table (server name, player count, ping, current gametime, distance, IP) +This overcomes certain limitations in the Linux client and helps prepare the game to launch by providing the following: + +1. Search for and display server metadata in a table (server name, player count, ping, queue size, current gametime, distance, IP) 2. Add/delete/manage favorite servers by IP or ID -3. Find and prepare mods being requested by the server (choose from manual or automatic installation) -4. Concatenate launch options to pass to Steam - -Other options include the ability to connect by IP or ID or set a favorite server. +3. Quick-connect to favorite/recent servers +4. Find and prepare mods being requested by servers (choose from manual or automatic installation) +5. Bulk delete/update local mods +6. Concatenate launch options to pass to Steam +7. Connect to mod-enabled LAN servers ## Setup and usage -Refer to the [manual](https://aclist.codeberg.page) for installation and setup instructions, a feature-by-feature breakdown, and Steam integration tutorials. +Refer to the [manual](https://aclist.codeberg.page) for installation and setup instructions.  diff --git a/dzgui.sh b/dzgui.sh index 2d3b184..e9e2a12 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.20 +version=5.6.0-beta.21 #CONSTANTS aid=221100 @@ -584,10 +584,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="99544ccef6060125509c4b689a808a15" + ["ui.py"]="a2f9134c9b415a2be1d54a7e91065ee0" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="5d69e8e3d7c3b3c499354b0b939ce76b" + ["funcs"]="b928622aa16e966a5098df02bce6dc3b" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index ea965b3..b669fc5 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -79,7 +79,8 @@ stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" releases_url="$gh_prefix/$author/$repo/releases/download/browser" help_url="https://$author.github.io/dzgui/dzgui" -forum_url="$gh_prefix/$author/$repo/discussions" +help_url2="https://$author.codeberg.page" +forum_url="https://old.reddit.com/r/dzgui" sponsor_url="$gh_prefix/sponsors/$author" battlemetrics_server_url="https://www.battlemetrics.com/servers/dayz" steam_api_url="https://steamcommunity.com/dev/apikey" @@ -1104,21 +1105,21 @@ open_link(){ "Open Battlemetrics API page") url="$battlemetrics_api_url" ;; - "Help file ⧉") + "Documentation/help files (GitHub) ⧉") url="$help_url" ;; - "Report a bug ⧉") + "Documentation/help files (Codeberg mirror) ⧉") + url="$help_url2" + ;; + "Report a bug (GitHub) ⧉") url="$issues_url" ;; - "Forum ⧉") + "DZGUI Subreddit ⧉") url="$forum_url" ;; - "Sponsor ⧉") + "Sponsor (GitHub) ⧉") url="$sponsor_url" ;; - "Hall of fame ⧉") - url="${help_url}#_hall_of_fame" - ;; esac #if [[ $is_steam_deck -eq 1 ]]; then @@ -1167,12 +1168,6 @@ $(print_ip_list | sed 's/"//g') Mods: $(list_mods | sed 's/^/\t/g') DOC - #2024-12-13 - find $workshop_dir -mindepth 1 -maxdepth 1 -type d | awk -F/ '{print $NF}' | sort > "$mod_log" - find $workshop_dir -mindepth 1 -name meta.cpp | while read -r line; do - cat "$line" | awk '/publishedid/ {print $3}' | sed 's/;//g;s/\r//g' - done | sort > "$meta_log" - #END printf "Wrote system log to %s" "$system_log" return 0 } diff --git a/helpers/ui.py b/helpers/ui.py index 38abd1b..02fe315 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1,22 +1,21 @@ import csv -import gi import json import locale import logging -import math import multiprocessing import os -import re import signal import subprocess import sys import textwrap import threading +from enum import Enum locale.setlocale(locale.LC_ALL, '') + +import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib, Gdk, GObject, Pango -from enum import Enum # 5.6.0 app_name = "DZGUI" @@ -274,25 +273,25 @@ class RowType(EnumWithAttrs): "quad_label": "Debug log" } DOCS = { - "label": "Help file ⧉", + "label": "Documentation/help files (GitHub) ⧉", + "tooltip": "Opens the DZGUI documentation in a browser" + } + DOCS_FALLBACK = { + "label": "Documentation/help files (Codeberg mirror) ⧉", "tooltip": "Opens the DZGUI documentation in a browser" } BUGS = { - "label": "Report a bug ⧉", + "label": "Report a bug (GitHub) ⧉", "tooltip": "Opens the DZGUI issue tracker in a browser" } FORUM = { - "label": "Forum ⧉", + "label": "DZGUI Subreddit ⧉", "tooltip": "Opens the DZGUI discussion forum in a browser" } SPONSOR = { - "label": "Sponsor ⧉", + "label": "Sponsor (GitHub) ⧉", "tooltip": "Sponsor the developer of DZGUI" } - HOF = { - "label": "Hall of fame ⧉", - "tooltip": "A list of significant contributors and testers" - } class WindowContext(EnumWithAttrs): @@ -353,10 +352,10 @@ class WindowContext(EnumWithAttrs): RowType.CHANGELOG, RowType.SHOW_LOG, RowType.DOCS, + RowType.DOCS_FALLBACK, RowType.BUGS, RowType.FORUM, RowType.SPONSOR, - RowType.HOF ], "called_by": [] } @@ -416,19 +415,24 @@ class Popup(Enum): class ButtonType(EnumWithAttrs): MAIN_MENU = {"label": "Main menu", - "opens": WindowContext.MAIN_MENU + "opens": WindowContext.MAIN_MENU, + "tooltip": "Search for and connect to servers" } MANAGE = {"label": "Manage", - "opens": WindowContext.MANAGE + "opens": WindowContext.MANAGE, + "tooltip": "Manage/add to saved servers" } OPTIONS = {"label": "Options", - "opens": WindowContext.OPTIONS + "opens": WindowContext.OPTIONS, + "tooltip": "Change settings, list local mods and\nother advanced options" } HELP = {"label": "Help", - "opens": WindowContext.HELP + "opens": WindowContext.HELP, + "tooltip": "Links to documentation" } EXIT = {"label": "Exit", - "opens": None + "opens": None, + "tooltip": "Quits the application" } @@ -906,12 +910,15 @@ class RightPanel(Gtk.Box): self.pack_start(self.filters_vbox, False, False, 0) self.debug_toggle = Gtk.ToggleButton(label="Debug mode") + self.debug_toggle.set_tooltip_text("Used to perform a dry run without\nactually connecting to a server") + if query_config(None, "debug")[0] == '1': self.debug_toggle.set_active(True) self.debug_toggle.connect("toggled", self._on_button_toggled, "Toggle debug mode") set_surrounding_margins(self.debug_toggle, 10) self.question_button = Gtk.Button(label="?") + self.question_button.set_tooltip_text("Opens the keybindings dialog") self.question_button.set_margin_top(10) self.question_button.set_margin_start(50) self.question_button.set_margin_end(50) @@ -954,6 +961,8 @@ class ButtonBox(Gtk.Box): for side_button in ButtonType: button = EnumeratedButton(label=side_button.dict["label"]) button.set_property("button_type", side_button) + button.set_tooltip_text(side_button.dict["tooltip"]) + if is_steam_deck is True: button.set_size_request(10, 10) else: @@ -2436,16 +2445,17 @@ class ModSelectionPanel(Gtk.Box): self.set_orientation(Gtk.Orientation.VERTICAL) labels = [ - "Select all", - "Unselect all", - "Delete selected", - "Highlight stale" + ["label": "Select all", "tooltip": "Bulk selects all mods"], + ["label": "Unselect all", "tooltip": "Bulk unselects all mods"], + ["label": "Delete selected", "tooltip": "Deletes selected mods from the system"], + ["label": "Highlight stale", "tooltip": "Shows locally-installed mods\nwhich are not used by any server\nin your Saved Servers"] ] self.active_button = None for l in labels: - button = Gtk.Button(label=l) + button = Gtk.Button(label=l["label"]) + button.set_tooltip_text(l["tooltip"]) button.set_margin_start(10) button.set_margin_end(10) button.connect("clicked", self._on_button_clicked) @@ -2505,6 +2515,7 @@ class ModSelectionPanel(Gtk.Box): def toggle_select_stale_button(self, bool): if bool is True: button = Gtk.Button(label="Select stale") + button.set_tooltip_text("Bulk selects all currently highlighted mods") button.set_margin_start(10) button.set_margin_end(10) button.connect("clicked", self._on_button_clicked) @@ -2521,7 +2532,6 @@ class ModSelectionPanel(Gtk.Box): (model, pathlist) = treeview.get_selection().get_selected_rows() if bool is False: - default = None for i in range (0, len(mod_store)): path = Gtk.TreePath(i) it = mod_store.get_iter(path) @@ -2540,6 +2550,7 @@ class ModSelectionPanel(Gtk.Box): _colorize(path, red) treeview.toggle_selection(False) self.active_button.set_label("Unhighlight stale") + self.active_button.set_tooltip_text("Clears highlights and reverts\nthe table to a default state") def _iterate_mod_deletion(self, model, pathlist, ct): @@ -2667,6 +2678,10 @@ class FilterPanel(Gtk.Box): match event.keyval: case Gdk.KEY_Escape: GLib.idle_add(self.restore_focus_to_treeview) + case Gdk.KEY_Up: + return True + case Gdk.KEY_Down: + return True case _: return False From 2b4649ac6e81d15b60e774ed6745b33c094998fd Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:08:48 +0900 Subject: [PATCH 83/99] chore: drop docs --- docs/custom.css | 427 ------------------------ docs/dark.css | 120 ------- docs/dzgui.adoc | 608 ----------------------------------- docs/dzgui_dark.adoc | 608 ----------------------------------- docs/kb.adoc | 28 -- docs/kb_dark.adoc | 28 -- docs/kb_sections/dzg001.adoc | 11 - docs/kb_sections/dzg002.adoc | 5 - docs/kb_sections/dzg003.adoc | 7 - docs/kb_sections/dzg004.adoc | 7 - docs/kb_sections/dzg005.adoc | 7 - docs/kb_sections/dzg006.adoc | 11 - docs/kb_sections/dzg007.adoc | 17 - docs/kb_sections/dzg008.adoc | 7 - docs/kb_sections/dzg009.adoc | 5 - 15 files changed, 1896 deletions(-) delete mode 100644 docs/custom.css delete mode 100644 docs/dark.css delete mode 100644 docs/dzgui.adoc delete mode 100644 docs/dzgui_dark.adoc delete mode 100644 docs/kb.adoc delete mode 100644 docs/kb_dark.adoc delete mode 100644 docs/kb_sections/dzg001.adoc delete mode 100644 docs/kb_sections/dzg002.adoc delete mode 100644 docs/kb_sections/dzg003.adoc delete mode 100644 docs/kb_sections/dzg004.adoc delete mode 100644 docs/kb_sections/dzg005.adoc delete mode 100644 docs/kb_sections/dzg006.adoc delete mode 100644 docs/kb_sections/dzg007.adoc delete mode 100644 docs/kb_sections/dzg008.adoc delete mode 100644 docs/kb_sections/dzg009.adoc diff --git a/docs/custom.css b/docs/custom.css deleted file mode 100644 index d1f3eff..0000000 --- a/docs/custom.css +++ /dev/null @@ -1,427 +0,0 @@ -/*! Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ -/* Uncomment the following line when using as a custom stylesheet */ -/* @import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"; */ -html{font-family:sans-serif;-webkit-text-size-adjust:100%} -h1, h2, h3, #toctitle, .sidebarblock > .content > .title, h4, h5, h6 {color: #8a1414 !important} -a{background:none} -a:focus{outline:thin dotted} -a:active,a:hover{outline:0} -h1{font-size:2em;margin:.67em 0} -b,strong{font-weight:bold} -abbr{font-size:.9em} -abbr[title]{cursor:help;border-bottom:1px dotted #dddddf;text-decoration:none} -dfn{font-style:italic} -hr{height:0} -mark{background:#ff0;color:#000} -code,kbd,pre,samp{font-family:monospace;font-size:1em} -pre{white-space:pre-wrap} -q{quotes:"\201C" "\201D" "\2018" "\2019"} -small{font-size:80%} -sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} -sup{top:-.5em} -sub{bottom:-.25em} -img{border:0} -svg:not(:root){overflow:hidden} -figure{margin:0} -audio,video{display:inline-block} -audio:not([controls]){display:none;height:0} -fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} -legend{border:0;padding:0} -button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} -button,input{line-height:normal} -button,select{text-transform:none} -button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer} -button[disabled],html input[disabled]{cursor:default} -input[type=checkbox],input[type=radio]{padding:0} -button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} -textarea{overflow:auto;vertical-align:top} -table{border-collapse:collapse;border-spacing:0} -*,::before,::after{box-sizing:border-box} -html,body{font-size:100%} -body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;line-height:1;position:relative;cursor:auto;-moz-tab-size:4;-o-tab-size:4;tab-size:4;word-wrap:anywhere;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} -a:hover{cursor:pointer} -img,object,embed{max-width:100%;height:auto} -object,embed{height:100%} -img{-ms-interpolation-mode:bicubic} -.left{float:left!important} -.right{float:right!important} -.text-left{text-align:left!important} -.text-right{text-align:right!important} -.text-center{text-align:center!important} -.text-justify{text-align:justify!important} -.hide{display:none} -img,object,svg{display:inline-block;vertical-align:middle} -textarea{height:auto;min-height:50px} -select{width:100%} -.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} -div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0} -a{color:#2156a5;text-decoration:underline;line-height:inherit} -a:hover,a:focus{color:#1d4b8f} -a img{border:0} -p{line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} -p aside{font-size:.875em;line-height:1.35;font-style:italic} -h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} -h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} -h1{font-size:2.125em} -h2{font-size:1.6875em} -h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} -h4,h5{font-size:1.125em} -h6{font-size:1em} -hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em} -em,i{font-style:italic;line-height:inherit} -strong,b{font-weight:bold;line-height:inherit} -small{font-size:60%;line-height:inherit} -code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} -ul,ol,dl{line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} -ul,ol{margin-left:1.5em} -ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0} -ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} -ul.square{list-style-type:square} -ul.circle{list-style-type:circle} -ul.disc{list-style-type:disc} -ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} -dl dt{margin-bottom:.3125em;font-weight:bold} -dl dd{margin-bottom:1.25em} -blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} -blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} -@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} -h1{font-size:2.75em} -h2{font-size:2.3125em} -h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} -h4{font-size:1.4375em}} -table{background:#fff;margin-bottom:1.25em;border:1px solid #dedede;word-wrap:normal} -table thead,table tfoot{background:#f7f8f7} -table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} -table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} -table tr.even,table tr.alt{background:#f8f8f7} -table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{line-height:1.6} -h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} -h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} -.center{margin-left:auto;margin-right:auto} -.stretch{width:100%} -.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} -.clearfix::after,.float-group::after{clear:both} -:not(pre).nobreak{word-wrap:normal} -:not(pre).nowrap{white-space:nowrap} -:not(pre).pre-wrap{white-space:pre-wrap} -:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed} -pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed} -pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit} -pre>code{display:block} -pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal} -em em{font-style:normal} -strong strong{font-weight:400} -.keyseq{color:rgba(51,51,51,.8)} -kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;border-radius:3px;box-shadow:0 1px 0 rgba(0,0,0,.2),inset 0 0 0 .1em #fff;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} -.keyseq kbd:first-child{margin-left:0} -.keyseq kbd:last-child{margin-right:0} -.menuseq,.menuref{color:#000} -.menuseq b:not(.caret),.menuref{font-weight:inherit} -.menuseq{word-spacing:-.02em} -.menuseq b.caret{font-size:1.25em;line-height:.8} -.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} -b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} -b.button::before{content:"[";padding:0 3px 0 2px} -b.button::after{content:"]";padding:0 2px 0 3px} -p a>code:hover{color:rgba(0,0,0,.9)} -#header,#content,#footnotes,#footer{width:100%;margin:0 auto;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} -#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} -#header::after,#content::after,#footnotes::after,#footer::after{clear:both} -#content{margin-top:1.25em} -#content::before{content:none} -#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} -#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} -#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px} -#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:flex;flex-flow:row wrap} -#header .details span:first-child{margin-left:-.125em} -#header .details span.email a{color:rgba(0,0,0,.85)} -#header .details br{display:none} -#header .details br+span::before{content:"\00a0\2013\00a0"} -#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} -#header .details br+span#revremark::before{content:"\00a0|\00a0"} -#header #revnumber{text-transform:capitalize} -#header #revnumber::after{content:"\00a0"} -#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} -#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em} -#toc>ul{margin-left:.125em} -#toc ul.sectlevel0>li>a{font-style:italic} -#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} -#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} -#toc li{line-height:1.3334;margin-top:.3334em} -#toc a{text-decoration:none} -#toc a:active{text-decoration:underline} -#toctitle{color:#7a2518;font-size:1.2em} -@media screen and (min-width:768px){#toctitle{font-size:1.375em} -body.toc2{padding-left:15em;padding-right:0} -#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} -#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} -#toc.toc2>ul{font-size:.9em;margin-bottom:0} -#toc.toc2 ul ul{margin-left:0;padding-left:1em} -#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} -body.toc2.toc-right{padding-left:0;padding-right:15em} -body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}} -@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} -#toc.toc2{width:20em} -#toc.toc2 #toctitle{font-size:1.375em} -#toc.toc2>ul{font-size:.95em} -#toc.toc2 ul ul{padding-left:1.25em} -body.toc2.toc-right{padding-left:0;padding-right:20em}} -#content #toc{border:1px solid #e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;border-radius:4px} -#content #toc>:first-child{margin-top:0} -#content #toc>:last-child{margin-bottom:0} -#footer{max-width:none;background:rgba(0,0,0,.8);padding:1.25em} -#footer-text{color:hsla(0,0%,100%,.8);line-height:1.44} -#content{margin-bottom:.625em} -.sect1{padding-bottom:.625em} -@media screen and (min-width:768px){#content{margin-bottom:1.25em} -.sect1{padding-bottom:1.25em}} -.sect1:last-child{padding-bottom:0} -.sect1+.sect1{border-top:1px solid #e7e7e9} -#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} -#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} -#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} -#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} -#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} -details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} -details{margin-left:1.25rem} -details>summary{cursor:pointer;display:block;position:relative;line-height:1.6;margin-bottom:.625rem;outline:none;-webkit-tap-highlight-color:transparent} -details>summary::-webkit-details-marker{display:none} -details>summary::before{content:"";border:solid transparent;border-left:solid;border-width:.3em 0 .3em .5em;position:absolute;top:.5em;left:-1.25rem;transform:translateX(15%)} -details[open]>summary::before{border:solid transparent;border-top:solid;border-width:.5em .3em 0;transform:translateY(15%)} -details>summary::after{content:"";width:1.25rem;height:1em;position:absolute;top:.3em;left:-1.25rem} -.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} -table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} -.paragraph.lead>p,#preamble>.sectionbody>[class=paragraph]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} -.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} -.admonitionblock>table td.icon{text-align:center;width:80px} -.admonitionblock>table td.icon img{max-width:none} -.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} -.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6);word-wrap:anywhere} -.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} -.exampleblock>.content{border:1px solid #e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;border-radius:4px} -.exampleblock>.content>:first-child{margin-top:0} -.exampleblock>.content>:last-child{margin-bottom:0} -.sidebarblock{border:1px solid #dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;border-radius:4px} -.sidebarblock>:first-child{margin-top:0} -.sidebarblock>:last-child{margin-bottom:0} -.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} -.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} -.literalblock pre,.listingblock>.content>pre{border-radius:4px;overflow-x:auto;padding:1em;font-size:.8125em} -@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}} -@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}} -.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class=highlight],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8} -.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)} -.listingblock>.content{position:relative} -.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5} -.listingblock:hover code[data-lang]::before{display:block} -.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5} -.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} -.listingblock pre.highlightjs{padding:0} -.listingblock pre.highlightjs>code{padding:1em;border-radius:4px} -.listingblock pre.prettyprint{border-width:0} -.prettyprint{background:#f7f7f8} -pre.prettyprint .linenums{line-height:1.45;margin-left:2em} -pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0} -pre.prettyprint li code[data-lang]::before{opacity:1} -pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none} -table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none} -table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal} -table.linenotable td.code{padding-left:.75em} -table.linenotable td.linenos,pre.pygments .linenos{border-right:1px solid;opacity:.35;padding-right:.5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} -pre.pygments span.linenos{display:inline-block;margin-right:.75em} -.quoteblock{margin:0 1em 1.25em 1.5em;display:table} -.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em} -.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} -.quoteblock blockquote{margin:0;padding:0;border:0} -.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} -.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} -.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right} -.verseblock{margin:0 1em 1.25em} -.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans-serif;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} -.verseblock pre strong{font-weight:400} -.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} -.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} -.quoteblock .attribution br,.verseblock .attribution br{display:none} -.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} -.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none} -.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0} -.quoteblock.abstract{margin:0 1em 1.25em;display:block} -.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} -.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf} -.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0} -.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem} -.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;font-size:.85rem;text-align:left;margin-right:0} -p.tableblock:last-child{margin-bottom:0} -td.tableblock>.content{margin-bottom:1.25em;word-wrap:anywhere} -td.tableblock>.content>:last-child{margin-bottom:-1.25em} -table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} -table.grid-all>*>tr>*{border-width:1px} -table.grid-cols>*>tr>*{border-width:0 1px} -table.grid-rows>*>tr>*{border-width:1px 0} -table.frame-all{border-width:1px} -table.frame-ends{border-width:1px 0} -table.frame-sides{border-width:0 1px} -table.frame-none>colgroup+*>:first-child>*,table.frame-sides>colgroup+*>:first-child>*{border-top-width:0} -table.frame-none>:last-child>:last-child>*,table.frame-sides>:last-child>:last-child>*{border-bottom-width:0} -table.frame-none>*>tr>:first-child,table.frame-ends>*>tr>:first-child{border-left-width:0} -table.frame-none>*>tr>:last-child,table.frame-ends>*>tr>:last-child{border-right-width:0} -table.stripes-all>*>tr,table.stripes-odd>*>tr:nth-of-type(odd),table.stripes-even>*>tr:nth-of-type(even),table.stripes-hover>*>tr:hover{background:#f8f8f7} -th.halign-left,td.halign-left{text-align:left} -th.halign-right,td.halign-right{text-align:right} -th.halign-center,td.halign-center{text-align:center} -th.valign-top,td.valign-top{vertical-align:top} -th.valign-bottom,td.valign-bottom{vertical-align:bottom} -th.valign-middle,td.valign-middle{vertical-align:middle} -table thead th,table tfoot th{font-weight:bold} -tbody tr th{background:#f7f8f7} -tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} -p.tableblock>code:only-child{background:none;padding:0} -p.tableblock{font-size:1em} -ol{margin-left:1.75em} -ul li ol{margin-left:1.5em} -dl dd{margin-left:1.125em} -dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} -li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} -ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} -ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} -ul.unstyled,ol.unstyled{margin-left:0} -li>p:empty:only-child::before{content:"";display:inline-block} -ul.checklist>li>p:first-child{margin-left:-1em} -ul.checklist>li>p:first-child>.fa-square-o:first-child,ul.checklist>li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} -ul.checklist>li>p:first-child>input[type=checkbox]:first-child{margin-right:.25em} -ul.inline{display:flex;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} -ul.inline>li{margin-left:1.25em} -.unstyled dl dt{font-weight:400;font-style:normal} -ol.arabic{list-style-type:decimal} -ol.decimal{list-style-type:decimal-leading-zero} -ol.loweralpha{list-style-type:lower-alpha} -ol.upperalpha{list-style-type:upper-alpha} -ol.lowerroman{list-style-type:lower-roman} -ol.upperroman{list-style-type:upper-roman} -ol.lowergreek{list-style-type:lower-greek} -.hdlist>table,.colist>table{border:0;background:none} -.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} -td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} -td.hdlist1{font-weight:bold;padding-bottom:1.25em} -td.hdlist2{word-wrap:anywhere} -.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} -.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} -.colist td:not([class]):first-child img{max-width:none} -.colist td:not([class]):last-child{padding:.25em 0} -.thumb,.th{line-height:0;display:inline-block;border:4px solid #fff;box-shadow:0 0 0 1px #ddd} -.imageblock.left{margin:.25em .625em 1.25em 0} -.imageblock.right{margin:.25em 0 1.25em .625em} -.imageblock>.title{margin-bottom:0} -.imageblock.thumb,.imageblock.th{border-width:6px} -.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} -.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} -.image.left{margin-right:.625em} -.image.right{margin-left:.625em} -a.image{text-decoration:none;display:inline-block} -a.image object{pointer-events:none} -sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} -sup.footnote a,sup.footnoteref a{text-decoration:none} -sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} -#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} -#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} -#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} -#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} -#footnotes .footnote:last-of-type{margin-bottom:0} -#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} -div.unbreakable{page-break-inside:avoid} -.big{font-size:larger} -.small{font-size:smaller} -.underline{text-decoration:underline} -.overline{text-decoration:overline} -.line-through{text-decoration:line-through} -.aqua{color:#00bfbf} -.aqua-background{background:#00fafa} -.black{color:#000} -.black-background{background:#000} -.blue{color:#0000bf} -.blue-background{background:#0000fa} -.fuchsia{color:#bf00bf} -.fuchsia-background{background:#fa00fa} -.gray{color:#606060} -.gray-background{background:#7d7d7d} -.green{color:#006000} -.green-background{background:#007d00} -.lime{color:#00bf00} -.lime-background{background:#00fa00} -.maroon{color:#600000} -.maroon-background{background:#7d0000} -.navy{color:#000060} -.navy-background{background:#00007d} -.olive{color:#606000} -.olive-background{background:#7d7d00} -.purple{color:#600060} -.purple-background{background:#7d007d} -.red{color:#bf0000} -.red-background{background:#fa0000} -.silver{color:#909090} -.silver-background{background:#bcbcbc} -.teal{color:#006060} -.teal-background{background:#007d7d} -.white{color:#bfbfbf} -.white-background{background:#fafafa} -.yellow{color:#bfbf00} -.yellow-background{background:#fafa00} -span.icon>.fa{cursor:default} -a span.icon>.fa{cursor:inherit} -.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} -.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} -.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} -.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} -.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} -.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} -.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);border-radius:50%;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} -.conum[data-value] *{color:#fff!important} -.conum[data-value]+b{display:none} -.conum[data-value]::after{content:attr(data-value)} -pre .conum[data-value]{position:relative;top:-.125em} -b.conum *{color:inherit!important} -.conum:not([data-value]):empty{display:none} -dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} -h1,h2,p,td.content,span.alt,summary{letter-spacing:-.01em} -p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} -p,blockquote,dt,td.content,span.alt,summary{font-size:1.0625rem} -p{margin-bottom:1.25rem} -.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} -.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;box-shadow:0 1px 4px #e0e0dc} -.print-only{display:none!important} -@page{margin:1.25cm .75cm} -@media print{*{box-shadow:none!important;text-shadow:none!important} -html{font-size:80%} -a{color:inherit!important;text-decoration:underline!important} -a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} -a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} -abbr[title]{border-bottom:1px dotted} -abbr[title]::after{content:" (" attr(title) ")"} -pre,blockquote,tr,img,object,svg{page-break-inside:avoid} -thead{display:table-header-group} -svg{max-width:100%} -p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} -h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} -#header,#content,#footnotes,#footer{max-width:none} -#toc,.sidebarblock,.exampleblock>.content{background:none!important} -#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important} -body.book #header{text-align:center} -body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} -body.book #header .details{border:0!important;display:block;padding:0!important} -body.book #header .details span:first-child{margin-left:0!important} -body.book #header .details br{display:block} -body.book #header .details br+span::before{content:none!important} -body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} -body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} -.listingblock code[data-lang]::before{display:block} -#footer{padding:0 .9375em} -.hide-on-print{display:none!important} -.print-only{display:block!important} -.hide-for-print{display:none!important} -.show-for-print{display:inherit!important}} -@media amzn-kf8,print{#header>h1:first-child{margin-top:1.25rem} -.sect1{padding:0!important} -.sect1+.sect1{border:0} -#footer{background:none} -#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} -@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} diff --git a/docs/dark.css b/docs/dark.css deleted file mode 100644 index 698689a..0000000 --- a/docs/dark.css +++ /dev/null @@ -1,120 +0,0 @@ -/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ - -@import url(//fonts.googleapis.com/css?family=Noto+Sans); -@import url(https://cdn.jsdelivr.net/gh/asciidoctor/asciidoctor@2.0/data/stylesheets/asciidoctor-default.css); /* Default asciidoc style framework - important */ - -/* CUSTOMISATIONS */ -/* Change the values in root for quick customisation. If you want even more fine grain... venture further. */ -:root{ ---maincolor:#222222; ---primarycolor:#aaa; ---secondarycolor:#aaa; ---tertiarycolor:#aaa; ---sidebarbackground:#222222; ---linkcolor:#ecc89e; ---linkcoloralternate:#cbcbcb; ---white:#777777; ---codebg:#111; ---codefg:#ffffff; ---linkhover:#eb862f; -} - -/* Text styles */ - -body{font-family: "Noto Sans",sans-serif;background-color: var(--maincolor);color:var(--white);} - -h1{color:var(--primarycolor) !important;font-family:"Noto Sans",sans-serif;} -h2,h3,h4,h5,h6{color:var(--secondarycolor) !important;font-family:"Noto Sans",sans-serif;} -.title{color:var(--white) !important;font-family:"Noto Sans",sans-serif;font-style: normal; font-weight: normal;} -p{font-family: "Noto Sans",sans-serif ! important} -#toc.toc2 a:link{color:var(--linkcolor);} -#toc.toc2 {border-right: 1px solid #8e8e96} -blockquote{color:var(--tertiarycolor) !important} -.quoteblock{color:var(--white)} -code{color:var(--codefg);background-color: var(--codebg) !important} -td.tableblock{border:0 solid #a9a9a9} - - -/* Table styles */ -th{background-color: var(--maincolor);color:var(--primarycolor) !important;} -td{background-color: var(--maincolor);color: var(--primarycolor) !important} - - -#toc.toc2{background-color:var(--sidebarbackground);} -#toctitle{color:var(--white);} - -/* Responsiveness fixes */ -video { - max-width: 100%; -} - -@media all and (max-width: 600px) { - table { - width: 55vw!important; - font-size: 3vw; - } -} - -.exampleblock > .content { - background-color: var(--maincolor); -} - -a { - color: var(--linkcolor); -} - -a:hover,#toc.toc2 a:hover{ - color: var(--linkhover); -} -.admonitionblock td.icon .icon-tip::before { - text-shadow: none; - color: var(--white); -} -.admonitionblock td.icon .icon-note::before { - color: var(--tertiarycolor); -} -.admonitionblock td.icon .icon-important::before { - color: var(--linkcolor); -} -/*.admonitionblock td.icon .icon-caution::before { - color: var(--linkcoloralternate); -}*/ -.admonitionblock td.icon .icon-warning::before { - color: var(--primarycolor); -} - -#preamble > .sectionbody > .paragraph:first-of-type p { - color: var(--white); -} - -.quoteblock blockquote::before { - color: var(--primarycolor); -} -.quoteblock .attribution cite, .verseblock .attribution cite { - color: var(--white); -} -.verseblock pre { - color: var(--white); -} -.quoteblock blockquote, .quoteblock blockquote p { - color: var(--white); -} - -.sidebarblock { - background: var(--sidebarbackground); -} -.literalblock pre, .listingblock pre:not(.highlight), .listingblock pre[class="highlight"], .listingblock pre[class^="highlight "], .listingblock pre.CodeRay, .listingblock pre.prettyprint { - background: var(--codebg); - color: var(--white); -} - -.literalblock pre, .listingblock>.content>pre:not(.highlight), .listingblock>.content>pre[class=highlight], .listingblock>.content>pre[class^="highlight "] { - background: var(--codebg); -} - -#header .details { - color: var(--white); -} -#header .details span.email a { - color: var(--linkcoloralternate); -} diff --git a/docs/dzgui.adoc b/docs/dzgui.adoc deleted file mode 100644 index e059491..0000000 --- a/docs/dzgui.adoc +++ /dev/null @@ -1,608 +0,0 @@ -:nofooter: -:toc: left -:stylesheet: custom.css - -= DZGUI documentation (v5.x.x) -DayZ server browser and mod manager for Linux | Last updated: {d} - -Click https://aclist.github.io/dzgui/dzgui_dark.html[here] for dark mode - -Looking for the DZGUI Knowledge Base? Click https://aclist.github.io/dzgui/kb.html[here] - -== What this is -A GUI version of https://github.com/aclist/dztui[DZTUI] for Linux. -Used to list official and community server details and quick connect to preferred servers -by staging mods and concatenating launch options automatically. - -Development on DZTUI (terminal client) has stopped at this time. -Instead, DZGUI brings numerous functionality and security improvements and is intended to be a more user-friendly, -turnkey solution for graphical desktop environments, and can also be used on the Steam Deck or similar devices. - -== Setup -=== Dependencies -If not already installed, the below can be found in your system's package manager. - -If any dependencies are missing when the application starts, it will warn you, so you need not take any preemptive measures here. - -All dependencies are installed out of the box on Steam Deck. - -- `curl` -- `jq` -- `zenity` -- `steam` -- `wmctrl` or `xdotool` -- `PyGObject` (`python-gobject`) - - -[NOTE] -If you are using a self-compiled version of jq (e.g. gentoo), it must be configured with support for oniguruma (this is the default setting on most distributions). - -=== Preparation -==== Step 1: Download DZGUI and make it executable - -**Automatic method: generic OS** - -Invoke the command below from a terminal: - -``` -curl -s "https://raw.githubusercontent.com/aclist/dztui/dzgui/install.sh" | bash -``` -**Automatic method: nix-based systems (contributed by lelgenio)** - -Follow the instructions at https://github.com/lelgenio/dzgui-nix to ingest the package and dependencies -into your system using flakes. - -**Manual method** - -``` -git clone https://github.com/aclist/dztui.git -chmod +x dzgui.sh -./dzgui.sh -``` - -==== Step 2: update the vm.max_map_count value - -On most modern distributions, it will seldom be necessary to update this value anymore, since it is set to a sufficiently large number for performance-intensive applications. - -**Automatic method:** - -This is handled automatically by DZGUI if you just choose to run the application out of the box. -You will be prompted for your sudo password in order to check whether the system map count is too small. -This is a one-time check that will not be triggered again once the map count is updated. - -[NOTE] -If you are using a Steam Deck, this step is not necessary. - -The process writes the count to the file `/etc/sysctl.d/dayz.conf`. - -If the system map count was lower than the threshold, it is updated to `1048576`. -If the system map count was already higher, that value is interpolated into this file for redundancy purposes and to avoid sudo escalation on subsequent launches of the application. - -[NOTE] -If, for reasons unrelated to DayZ, you choose at a later time to raise your system map count higher than it originally was and -you find that the count is not sticking, check for the presence of the `dayz.conf` file to see if it is taking precedence and delete it accordingly. - -If you used the automatic method, you can skip to <<Step 3: Prepare a Steam account with a DayZ license, Step 3>> below. - -**Manual method:** - -If you wish to update this value yourself without intervention from DZGUI, you have two options: - - -Invoke the command below for an **ephemeral change**. Note that if changing the map count on a one-time basis, it will revert to the old value after the system is rebooted. - - -``` -sudo sysctl -w vm.max_map_count=1048576 -``` - -Invoke the command below for a **persistent change**: -``` -echo 'vm.max_map_count=1048576' | sudo tee /etc/sysctl.d/dayz.conf -``` - -==== Step 3: Prepare a Steam account with a DayZ license -Enable a Proton version ≥ `6.8` (or use Proton Experimental) in the `Compatibility` field of the game's right-click options. As of this writing, any recent version of Proton should work, and it is encouraged to use the most recent one. - -=== API key & server IDs - -==== Steam Web API key (required) -1. Register for a https://steamcommunity.com/dev/apikey[Steam Web API key] (free) using your Steam account. You will be asked for a unique URL for your app when registering. -2. Since this key is for a personal use application and does not actually call back anywhere, set a generic local identifier here like "127.0.0.1" or some other name that is meaningful to you. -3. Once configured, you can insert this key in the app when launching it for the first time. - -[NOTE] -If you are confused about this requirement, please refer to DZGUI Knowledge Base article https://aclist.github.io/dzgui/kb.html#DZG-007[DZG-007] for additional information. - -==== BattleMetrics API key (optional) - -This key is optional. Using this key in conjunction with the above allows you to also connect to and query servers by numerical ID instead of by IP. See <<Manage > Add server by ID, Add server by ID>>. - -1. Register for an API key at https://www.battlemetrics.com/account/register?after=%2Fdevelopers[BattleMetrics] (free). -2. From the **Personal Access Tokens** area, Select **New Token**. -3. Give the token any name in the field at the top. -4. Leave all options **unchecked** and scroll to the bottom, select **Create Token**. -5. Once configured, you can insert this key in the app when launching it for the first time (optional), or later on when using the connect/query by ID methods in the app for the first time. - -=== First-time launch - -It is always advised to have Steam running in the background. DZGUI is meant to run "on top of" Steam, and will warn you if Steam appears to not be running. - -DZGUI can be launched one of two ways. - -**From a terminal:** - -``` -./dzgui.sh -``` - -Launching from a terminal may give more verbose information in the event of a crash, and can be a good way of troubleshooting problems. - -**From the shortcut shipped with the application**: - -If you are using a desktop environment (DE) based on the Freedesktop specification, shortcuts will be installed for you. - -- One shortcut is located under the "Games" category of your system's applications list. -- The other is accessed via the "DZGUI" desktop icon (Steam Deck only) - -After launching the app, follow the menu prompts onscreen. You will be asked to provide the following: - -- Player name (a handle name that identifies your character; required by some servers) -- Steam API key (required) -- BM API key (optional) - -==== Steam path discovery - -DZGUI will now attempt to locate your default Steam installation and DayZ path. You *must* have DayZ installed in your Steam library in order to proceed. (It can be installed to any drive of your choosing.) - -If DZGUI cannot find Steam or cannot find DayZ installed at the detected Steam path, it will prompt you to manually specify the path to your Steam installation. - -Specify the root, top-level entry point to Steam, not DayZ. E.g., - -`/media/mydrive/Steam`, not `/media/mydrive/Steam/steamapps/common/DayZ` - -If your Steam installation is in a hidden folder but the file picker dialog does not show hidden folders, ensure that your GTK settings are set to show hidden files. - -For GTK 2, update the file `$HOME/.config/gtk-2.0/gtkfilechooser.ini` to contain this line: - -`ShowHidden=true` - -For GTK 3, invoke the command: - -`gsettings set org.gtk.Settings.FileChooser show-hidden true` - -=== Steam integration & artwork - -==== Adding DZGUI as a third-party app - -DZGUI can be added to Steam as a "non-Steam game" in order to facilitate integration with Steam Deck or desktop environments. - -1. Launch Steam in the "Large" (default) view. - -[NOTE] -Steam Deck: you must switch to "Desktop Mode" and launch Steam from the desktop. Steam Deck's Game Mode view has limited support for configuration of custom games. - -[start=2] -2. Select **Add a Game** > **Add a Non-Steam Game** from the lower left-hand corner of the Steam client. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/01.png[01,500] - -[start=3] -3. Navigate to `$HOME/.local/share/applications/` and select `dzgui.desktop` -4. Select **Add Selected Programs** to add a shortcut to DZGUI. - -==== Artwork - -DZGUI also ships with Steam cover artwork. It is located under: - -``` -$HOME/.local/share/dzgui -``` - -The artwork consists of five parts: - -[%autowidth] -|=== -|Name|Description - -|Hero|a large horizontal banner used on the app's details page, and on landscape-orientation covers in the Recent Games section -|Icon|a square icon used for the tree/list view of the Steam library -|Grid|a vertical "box art" cover used on Steam library pages -|Logo|a transparent icon used to remove Steam's default app text -|dzgui|used by freedesktop shortcut to generate a desktop icon; not intended for manual use by the user -|=== - -===== Updating the artwork - -1. From the main library view, navigate to the app's details page and right-click the blank image header at the top. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/03.png[03,700] - -[start=2] -2. Select **Set Custom Background** -3. Select to display **All Files** from the File type dropdown -4. Navigate to the artwork path described above and select `hero.png`. -5. Next, right-click the image background and select **Set Custom Logo**. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/04.png[04,700] - -[start=5] -5. Navigate to the same path and select `logo.png`. Notice that this removes the redundant app name that occluded the image. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/05.png[05,700] - -[start=6] -6. Next, navigate to your Library index (looks like a bookshelf of cover art) and find the DZGUI app. - -[start=7] -7. Right-click its cover and select **Manage** > **Set custom artwork**. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/06.png[06,700] - -[start=8] -8. Navigate to the same path and select `grid.png`. The final result: - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/07.png[07,700] - -[start=9] -9. Right-click the DZGUI entry and select Properties to open the properties dialog. Next to the **Shortcut** field, you will see a small square box which represents the game's icon. Click this to open a file explorer and select `icon.png` from the path above. This will add a small icon to the list view. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/08.png[08,700] - -[start=10] -10. After you launch DZGUI for the first time, you should return to the library view and select the Recent Games dropdown on the right-hand side. Steam shows a collection of box art based on categories like "Play Next", "Recent Games", etc. Look for a downward-pointing caret icon and click it, then select the "Recent Games" category. If DZGUI was the last item played, it will be shown with a landscape, rather than portrait, orientation cover, which is initially blank. To customize this cover, right click it and select `Manage > Set custom artwork`, then select the `hero.png` image again for this area. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/09.png[09,700] - -==== Controller layout - -A controller layout for Steam Deck is available in the Steam community layouts section. Search for "DZGUI Official Config" to download it. This layout provides modal layers intended to facilitate interaction with the DZGUI interface, but does not attempt to customize in-game DayZ controls in a detailed fashion. - -Long-press the View button and Select button (☰) to toggle D-pad navigation. This creates an additional layer that lets you navigate through menus using the D-pad and A/B to respectively confirm selections and go back. Remember to toggle this layer off again after launching your game to revert back to the master layer. - - -=== Updating the app -If DZGUI detects a new upstream version, it will prompt you to download it automatically. -It backs up the original version before fetching the new one, then updates your config file with your existing values. Once finished, it will ask you to relaunch the app. - -If you decline to upgrade to the new version, DZGUI will continue to the main menu with the current version. - -[NOTE] -New versions may include changes to bugs that could prevent you from playing on certain servers. -Upgrading is always advised. - -If you experience a problem or need to restore the prior version of DZGUI and/or your configs, -it is enough to simply replace the new version with the old one and relaunch the app. -The file can be found at: - -``` -<path to script>/<script name>.old -``` -E.g., if DZGUI is named `dzgui.sh`, in the path `$HOME/bin`, the backup will be located at -``` -$HOME/bin/dzgui.sh.old -``` -If launching DZGUI via its system shortcut, the backup file will be located under the path: - -``` -$HOME/.local/share/dzgui -``` - -Similarly, a backup config file will be located at: -``` -$HOME/.config/dztui/dztuirc.old - -``` - -=== Locale support - -For internationalization purposes, DZGUI will inherit the default locale setting on the system when displaying numbers. This is used for thousands separators in long numbers and decimal separators in fractional numbers. - -If you wish to use a specific regional numbering preference while retaining a different base system language (e.g., English language with German-style numbering), pass the desired locale as a variable before launching DZGUI: - -``` -LC_ALL=de_DE.UTF-8 ./dzgui.sh -``` - -If you intend to use this frequently, you could wrap the above in a script or alias. - -== Uninstallation - -To uninstall DZGUI and its associated files, invoke `./dzgui.sh` with the `-u` or `--uninstall` flag. - -Follow the prompts to choose from full uninstall (removes the application and all user-defined configuration files) or partial install (removes the application, but keeps user-defined configuration files). - -If you intend to reinstall DZGUI again, keeping your configuration files is recommended. - -== Basic usage -Select from among the <<Menu contexts and options>> below. - -Connecting to a server consists of fetching metadata for the server you are searching for. - -DZGUI will check the server's modset against your local mods. If you are missing any, -it will prompt you to download them through the Steam Workshop. - -[NOTE] -You must be logged into Steam for mod changes to take effect. -It can take some time for the mods to download and update. - -Once all of the mods are downloaded and staged, DZGUI will notify you that it is ready to connect. -The app hands the launch parameters to Steam, after which point DZGUI is not involved in the operation of DayZ. - -== Menu contexts and options - -The main view displays a series of contexts, visualized as buttons, on the right-hand side. You can click these to navigate between different areas. - -A footer at the bottom of the application lists an explanatory tooltip for the currently focused option. In the case of server browsing contexts, this tooltip will be updated to show the distance in kilometers to the server and an estimated ping (round-trip latency). - -The right-hand side of the footer displays the branch of DZGUI you are using (stable/testing), the mod install mode (normal/auto), and the version number. For example, if you are on the stable branch, using the default install mode, and using DZGUI v5.0.0, the footer will read: - -`STABLE | NORMAL | DZGUI 5.0.0` - -=== Main menu - -The main menu context is the central entry point to server navigation, letting you browse the list of publicly available servers, check your list of favorited servers, connect to recent servers, et cetera. - -==== Main menu > Server browser -The server browser retrieves and lists all publicly broadcasting servers (including official ones) in a table. -These servers can be filtered by various parameters in order to display a more granular result. - -After you select a server from the list and choose to connect, the application continues to the mod validation step. - -For details on interacting with server browsing contexts, which are uniform across different menus, refer to <<Server table and filters>>. - -==== Main menu > My saved servers -Prints metadata for the servers saved in your servers list. Servers can be added via the <<Manage>> context or via the <<Contextual options>> of server table views. - -For details on interacting with server browsing contexts, which are uniform across different menus, refer to <<Server table and filters>>. - -==== Main menu > Quick connect to favorite server -Bypasses the server list and quick-connects to a single favorite server specified in advance using the <<Manage > Add (change) favorite server, Add (change) favorite server>> option. - -==== Main menu > Recent servers -This feature queries the history file for the last 10 servers connected to by any means -(server browser, favorite servers, connect-by-IP, etc.), and presents them in a table. - -For details on interacting with server browsing contexts, which are uniform across different menus, refer to <<Server table and filters>>. - -==== Main menu > Connect by IP -Provide the IP and query port in `<IP>:<PORT>` format. Depending on the mod installation method you have selected, DZGUI will proceed to stage and download mods and prompt you before connecting. - -==== Main menu > Connect by ID -Requires a <<API key & server IDs, BM API key>>. Use the https://www.battlemetrics.com/servers/dayz[BattleMetrics site] to find servers of interest (proximity, player count, rules, etc.) - -Each server has a unique ID. This is the string of numbers at the end of the URL. Copy these IDs. -For example, in the URL https://www.battlemetrics.com/servers/dayz/8039514, the ID is `8039514`. - -Enter the ID of a server to have it translated to an IP. After this step, the process continues as though you were connecting by IP. - -=== Manage -==== Manage > Add server by IP -Add a server to your saved servers list by IP. - -Provide the IP and query port in `<IP>:<PORT>` format. - -Servers you add will be saved and listed when using the <<Main menu > My saved servers, My saved servers>> option. - -==== Manage > Add server by ID -Requires a <<API key & server IDs, BM API key>>. Use the https://www.battlemetrics.com/servers/dayz[BattleMetrics site] to find servers of interest (proximity, player count, rules, etc.) - -Each server has a unique ID. This is the string of numbers at the end of the URL. Copy these IDs. -For example, in the URL https://www.battlemetrics.com/servers/dayz/8039514, the ID is `8039514`. - -Servers you add will be saved and listed when using the <<Main menu > My saved servers, My saved servers>> option. - -==== Manage > Add (change) favorite server -Prompts you to add/change a favorite server (limit one). The name of the server will be updated in the footer of the app when focused on the <<Main menu > Quick connect to favorite server, Quick connect to favorite server>> option in the <<Main menu>> context. If a favorite server is already enabled, this option switches to "Change favorite server." - -=== Options - -The options context is chiefly used to toggle settings, update API keys, or perform changes to mods. - -==== Options > List installed mods -Prints a scrollable dialog containing all locally-installed mods and their corresponding symlink IDs and directory names. - -If you right-click on an entry in the list, you have the option of opening the Workshop page for the mod in Steam or deleting the local mod. - -==== Options > Toggle release branch -Used to toggle the branch to fetch DZGUI from between `stable` and `testing`. - -The app ships with the stable branch enabled, with the testing branch being used to elaborate various experimental features. - -==== Options > Toggle mod install mode -This feature is experimental. It attempts to queue the mods requested for download automatically, rather than prompting the user to subscribe to each one. - -[NOTE] -When using auto mod installation, DZGUI will track the latest version of your installed mods and periodically synchronize their signatures next time you attempt to connect to a server. This means that if you satisfy the mods needed for a server, but updates to other mods you already have are found, an update will be triggered until all of your local mods are refreshed. Provided you tend to keep auto mod install on, these updates should be atomic and ensure that mods are always up to date. - -==== Options > Toggle Steam/Flatpak -This feature should be used if there are concurrent installations of Steam on the local system. Toggle between using Steam or Flatpak Steam to launch DayZ. - -==== Options > Change player name -Used to change the in-game player name that is broadcast when on servers. - -==== Options > Change Steam API key -Used to change or update the Steam API key; can be used if the old key needs to be revoked and updated with a new one. - -==== Options > Change Battlemetrics API key -Identical to the option above, only for Battlemetrics. - -==== Options > Force update local mods -Attempts to update the signatures of all local mods and synchronize them with the latest versions available on Steam Workshop. This option should be used when <<Options > Toggle mod install mode, Toggle mod install mode>> is set to AUTO. - -This can be used in the event of mod corruption or linkage errors. - -==== Output system info to log file -Writes a list of your current settings and system configuration to a local file that can be pasted into bug reports. This process may take some time. - -The file is written to `$HOME/.local/state/dzgui/logs/DZGUI_SYSTEM.log` - -=== Help - -The help context chiefly opens external documentation and support pages in the system-defined web browser or internal dialog. - -==== Options > View changelog -Prints the entire changelog up to the current version in-app. - -==== Options > Show debug log -Prints the DZGUI log file generated since the last session in a tabled format in-app. - -==== Help > Help file -Uses xdg-open to open this documentation in the system browser. - -==== Help > Report a bug -Uses xdg-open to open the https://github.com/aclist/dztui/issues[bug tracker] in the system browser. - -==== Help > Forum -Uses xdg-open to open the https://github.com/aclist/dztui/discussions[discussion forum] in the system browser. - -==== Help > Sponsor -Uses xdg-open to open the https://github.com/sponsors/aclist[sponsor page], where you can help fund development, in the system browser. - -==== Help > Hall of fame -Uses xdg-open to open the https://aclist.github.io/dzgui/dzgui#_hall_of_fame[Hall of Fame], which recognizes those who actively contributed to the betterment of the application through bug reports and suggestions, in the system browser. - -=== Exit - -Exits the DZGUI application. - -=== Keybindings - -The "?" button opens a dialog that provides additional information about keybindings and navigation throughout the application. - -[NOTE] -Due to size constraints, this button is not currently available on Steam Deck. - -== Server table and filters - -=== Table metadata - -[%autowidth] -All server browser contexts (<<Main menu > My saved servers, My saved servers>>, <<Main menu > Server browser, Server browser>>, <<Main menu > Recent servers, Recent servers>>) share the same table layout. - -The table lists servers in columnar fashion according to: - -- **Name**: the server name and the menu context you are currently on -- **Map**: the map name -- **Perspective**: first-person (1PP) or third-person (3PP) -- **Gametime**: in-game time on the 24-hour clock -- **Players**: total players currently in-game -- **Maximum**: total players the server supports -- **Queue**: total players in the waiting queue (for full servers) -- **Address**: the address in IP:Port format -- **Qport**: the query port of the listening server - -Columns are width-adjustable, and the positions they are set to will be saved and persist across sessions. The saved column width is used uniformly across server browsing contexts. - -=== Contextual options - -When in a server browsing context, right click on any server in the list to expose a series of contextual options. These are: - -* **Add to (Remove from) saved servers**: add or remove the server to/from your saved servers list -* **Copy IP to clipboard**: copy the game server IP to the system clipboard -* **Show server-side mods**: opens a dialog with details about the name, Workshop ID, and local installation status of mods on the server. Select a mod to open its Workshop page in Steam -* **Refresh player count**: refresh the player count for this server in-place in the table. Useful if some time has passed since you loaded the list and you want to see if the queue is open - -=== Filters -The filter panel on the right-hand side of the table allows you to search by keyword, map type, and toggle different filters. These filters can be combined. - -==== Keyword search - -A text entry field where you can search for hits in any column of the table by partial string match. The field does not support regex, but does support basic backslash escapes for special characters, e.g., `\[My string\]`. - -Clear the keyword search and submit again to remove any keyword filter. - -==== Map search -Opens a combobox that lets you filter the table by specific map. - -A variety of navigation bindings for interacting with the table and toggling filters can be found via the <<Keybindings>> dialog. - -==== Toggle filters - -A series of filters that restrict the results by game parameters. Also toggleable via the number keys. - -[%autowidth] -|=== -|Filter|Usage - -|1PP|Include servers in first-person perspective -|3PP|Include servers in third-person perspective -|Day|Include servers with gametime between 0600 and 1659 -|Night|Include servers with gametime between 1700 and 0559 -|Empty|Include servers with 0 current players -|Full|Include servers at maximum capacity -|Low pop|Include servers with a current player count < 30% of the allowable capacity -|Non-ASCII titles|Include servers with special symbols, Unicode, or text in the title. -Note: unticking this filter will also exclude CJK languages, Cyrillic, and other special character sets -|Duplicate|Include servers with duplicated server titles (there may be large numbers of misconfigured or generic servers with the same boilerplate title) -|=== - -[NOTE] -It is possible to filter the list to 0 results if you combine or exclude logically opposed filter pairs, such as excluding both 'Day' and 'Night' servers, effectively restricting the list to no possible servers. If you expect to see results but do not, double-check your filters (and keywords) to make sure your search is not too restrictive. - -== Debug mode - -Debug mode can be enabled via the button toggle on the right panel. When debug mode is enabled, any attempt to connect to a server will function as before, excluding the final connection step. DZGUI will attempt to synchronize and download mods and then print a dialog showing what options would have actually been run when connecting to the server. - -This can be used to diagnose problems and test functionality without actually launching the game. - -== Troubleshooting/FAQ - -Please refer to the https://aclist.github.io/dzgui/kb.html[DZGUI Knowledge Base] for common issues. - -== Reference - -=== Config file key/value pairs -The config file is located at `$HOME/.config/dztui/dztuirc`. - -Under normal usage, these values are populated and toggled automatically in-app. Deprecated keys are not listed. - -[%autowidth] -|=== -|Key|Value - -|`api_key`|an optional BattleMetrics API key generated at BattleMetrics. See <<API key & server IDs>> -|`auto_install`|permissible values are 0, 1, and 2. These are set internally depending on if the user enabled auto mod installation -|`branch`|by default, set to `stable`; set to `testing` to fetch the testing branch -|`debug`|by default, unset; when set to `1`, the launch options that would have been run are printed as a dry-run, instead of actually connecting (used for troubleshooting and submitting bug reports) -|`default_steam_path`|the path to the default Steam client installation -|`ip_list`|an array of server addresses; each record is a concatenation of the IP/GamePort/Queryport -|`fav_server`|a single server to quick-connect to; a concatenation of the IP/Gameport/Queryport -|`fav_label`|the human-readable name of the fav server set above -|`name`|a custom "handle" name used to identify the player on a server (required by some servers) -|`preferred_client`|whether the user prefers native Steam or Flatpak. This value is only set if concurrent versions of Steam are found on the system -|`src_path`|the path to where DZGUI is currently being stored -|`staging_dir`|a directory used to stage changes between updates -|`steam_path`|the path to Steam detected/set during first-time setup -|`steam_api`|the Steam API key. See <<API key & server IDs>> -|=== - -=== Hall of fame - -This section recognizes users who have gone above and beyond in submitting useful bug reports that helped in tracking down critical issues -or resulted in the elaboration of important features. This list is not exhaustive, and any missing parties are errors of omission, but this does -not diminish the gratitude I have for their contributions. - -.bongjutsu - -Consistently one of the first to report emergent bugs and provides clear, detailed ways of replicating the issue. - -.dj3hac -Provided extensive debug information that was instrumental in solving issues with Flatpak Steam. - -.jiriks74 -Gives highly relevant information about edge cases, particularly as they concern the Steam beta client, Wayland, desktop environments, and experimental features. - -.MatheusLasserr -Consistently provides constructive, straightforward suggestions about UI and readability improvements. - -.scandalouss -Tracked down several highly obscure but key bugs in the early development of the application that were breaking discovery of mods. - -.StevelDusa -Played a critical role in the elaboration of many of the features we now take for granted by being an early beta tester who not only reported bugs, but -helped workshop and brainstorm various ideas that turned into QOL features. - -.Thoughtduck216 -Contributed extensive beta testing of Steam Deck builds and provided ongoing troubleshooting for Steam Deck users - diff --git a/docs/dzgui_dark.adoc b/docs/dzgui_dark.adoc deleted file mode 100644 index 967ffa5..0000000 --- a/docs/dzgui_dark.adoc +++ /dev/null @@ -1,608 +0,0 @@ -:nofooter: -:toc: left -:stylesheet: dark.css - -= DZGUI documentation (v5.x.x) -DayZ server browser and mod manager for Linux | Last updated: {d} - -Click https://aclist.github.io/dzgui/dzgui.html[here] for light mode - -Looking for the DZGUI Knowledge Base? Click https://aclist.github.io/dzgui/kb_dark.html[here] - -== What this is -A GUI version of https://github.com/aclist/dztui[DZTUI] for Linux. -Used to list official and community server details and quick connect to preferred servers -by staging mods and concatenating launch options automatically. - -Development on DZTUI (terminal client) has stopped at this time. -Instead, DZGUI brings numerous functionality and security improvements and is intended to be a more user-friendly, -turnkey solution for graphical desktop environments, and can also be used on the Steam Deck or similar devices. - -== Setup -=== Dependencies -If not already installed, the below can be found in your system's package manager. - -If any dependencies are missing when the application starts, it will warn you, so you need not take any preemptive measures here. - -All dependencies are installed out of the box on Steam Deck. - -- `curl` -- `jq` -- `zenity` -- `steam` -- `wmctrl` or `xdotool` -- `PyGObject` (`python-gobject`) - - -[NOTE] -If you are using a self-compiled version of jq (e.g. gentoo), it must be configured with support for oniguruma (this is the default setting on most distributions). - -=== Preparation -==== Step 1: Download DZGUI and make it executable - -**Automatic method: generic OS** - -Invoke the command below from a terminal: - -``` -curl -s "https://raw.githubusercontent.com/aclist/dztui/dzgui/install.sh" | bash -``` -**Automatic method: nix-based systems (contributed by lelgenio)** - -Follow the instructions at https://github.com/lelgenio/dzgui-nix to ingest the package and dependencies -into your system using flakes. - -**Manual method** - -``` -git clone https://github.com/aclist/dztui.git -chmod +x dzgui.sh -./dzgui.sh -``` - -==== Step 2: update the vm.max_map_count value - -On most modern distributions, it will seldom be necessary to update this value anymore, since it is set to a sufficiently large number for performance-intensive applications. - -**Automatic method:** - -This is handled automatically by DZGUI if you just choose to run the application out of the box. -You will be prompted for your sudo password in order to check whether the system map count is too small. -This is a one-time check that will not be triggered again once the map count is updated. - -[NOTE] -If you are using a Steam Deck, this step is not necessary. - -The process writes the count to the file `/etc/sysctl.d/dayz.conf`. - -If the system map count was lower than the threshold, it is updated to `1048576`. -If the system map count was already higher, that value is interpolated into this file for redundancy purposes and to avoid sudo escalation on subsequent launches of the application. - -[NOTE] -If, for reasons unrelated to DayZ, you choose at a later time to raise your system map count higher than it originally was and -you find that the count is not sticking, check for the presence of the `dayz.conf` file to see if it is taking precedence and delete it accordingly. - -If you used the automatic method, you can skip to <<Step 3: Prepare a Steam account with a DayZ license, Step 3>> below. - -**Manual method:** - -If you wish to update this value yourself without intervention from DZGUI, you have two options: - - -Invoke the command below for an **ephemeral change**. Note that if changing the map count on a one-time basis, it will revert to the old value after the system is rebooted. - - -``` -sudo sysctl -w vm.max_map_count=1048576 -``` - -Invoke the command below for a **persistent change**: -``` -echo 'vm.max_map_count=1048576' | sudo tee /etc/sysctl.d/dayz.conf -``` - -==== Step 3: Prepare a Steam account with a DayZ license -Enable a Proton version ≥ `6.8` (or use Proton Experimental) in the `Compatibility` field of the game's right-click options. As of this writing, any recent version of Proton should work, and it is encouraged to use the most recent one. - -=== API key & server IDs - -==== Steam Web API key (required) -1. Register for a https://steamcommunity.com/dev/apikey[Steam Web API key] (free) using your Steam account. You will be asked for a unique URL for your app when registering. -2. Since this key is for a personal use application and does not actually call back anywhere, set a generic local identifier here like "127.0.0.1" or some other name that is meaningful to you. -3. Once configured, you can insert this key in the app when launching it for the first time. - -[NOTE] -If you are confused about this requirement, please refer to DZGUI Knowledge Base article https://aclist.github.io/dzgui/kb.html#DZG-007[DZG-007] for additional information. - -==== BattleMetrics API key (optional) - -This key is optional. Using this key in conjunction with the above allows you to also connect to and query servers by numerical ID instead of by IP. See <<Manage > Add server by ID, Add server by ID>>. - -1. Register for an API key at https://www.battlemetrics.com/account/register?after=%2Fdevelopers[BattleMetrics] (free). -2. From the **Personal Access Tokens** area, Select **New Token**. -3. Give the token any name in the field at the top. -4. Leave all options **unchecked** and scroll to the bottom, select **Create Token**. -5. Once configured, you can insert this key in the app when launching it for the first time (optional), or later on when using the connect/query by ID methods in the app for the first time. - -=== First-time launch - -It is always advised to have Steam running in the background. DZGUI is meant to run "on top of" Steam, and will warn you if Steam appears to not be running. - -DZGUI can be launched one of two ways. - -**From a terminal:** - -``` -./dzgui.sh -``` - -Launching from a terminal may give more verbose information in the event of a crash, and can be a good way of troubleshooting problems. - -**From the shortcut shipped with the application**: - -If you are using a desktop environment (DE) based on the Freedesktop specification, shortcuts will be installed for you. - -- One shortcut is located under the "Games" category of your system's applications list. -- The other is accessed via the "DZGUI" desktop icon (Steam Deck only) - -After launching the app, follow the menu prompts onscreen. You will be asked to provide the following: - -- Player name (a handle name that identifies your character; required by some servers) -- Steam API key (required) -- BM API key (optional) - -==== Steam path discovery - -DZGUI will now attempt to locate your default Steam installation and DayZ path. You *must* have DayZ installed in your Steam library in order to proceed. (It can be installed to any drive of your choosing.) - -If DZGUI cannot find Steam or cannot find DayZ installed at the detected Steam path, it will prompt you to manually specify the path to your Steam installation. - -Specify the root, top-level entry point to Steam, not DayZ. E.g., - -`/media/mydrive/Steam`, not `/media/mydrive/Steam/steamapps/common/DayZ` - -If your Steam installation is in a hidden folder but the file picker dialog does not show hidden folders, ensure that your GTK settings are set to show hidden files. - -For GTK 2, update the file `$HOME/.config/gtk-2.0/gtkfilechooser.ini` to contain this line: - -`ShowHidden=true` - -For GTK 3, invoke the command: - -`gsettings set org.gtk.Settings.FileChooser show-hidden true` - -=== Steam integration & artwork - -==== Adding DZGUI as a third-party app - -DZGUI can be added to Steam as a "non-Steam game" in order to facilitate integration with Steam Deck or desktop environments. - -1. Launch Steam in the "Large" (default) view. - -[NOTE] -Steam Deck: you must switch to "Desktop Mode" and launch Steam from the desktop. Steam Deck's Game Mode view has limited support for configuration of custom games. - -[start=2] -2. Select **Add a Game** > **Add a Non-Steam Game** from the lower left-hand corner of the Steam client. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/01.png[01,500] - -[start=3] -3. Navigate to `$HOME/.local/share/applications/` and select `dzgui.desktop` -4. Select **Add Selected Programs** to add a shortcut to DZGUI. - -==== Artwork - -DZGUI also ships with Steam cover artwork. It is located under: - -``` -$HOME/.local/share/dzgui -``` - -The artwork consists of five parts: - -[%autowidth] -|=== -|Name|Description - -|Hero|a large horizontal banner used on the app's details page, and on landscape-orientation covers in the Recent Games section -|Icon|a square icon used for the tree/list view of the Steam library -|Grid|a vertical "box art" cover used on Steam library pages -|Logo|a transparent icon used to remove Steam's default app text -|dzgui|used by freedesktop shortcut to generate a desktop icon; not intended for manual use by the user -|=== - -===== Updating the artwork - -1. From the main library view, navigate to the app's details page and right-click the blank image header at the top. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/03.png[03,700] - -[start=2] -2. Select **Set Custom Background** -3. Select to display **All Files** from the File type dropdown -4. Navigate to the artwork path described above and select `hero.png`. -5. Next, right-click the image background and select **Set Custom Logo**. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/04.png[04,700] - -[start=5] -5. Navigate to the same path and select `logo.png`. Notice that this removes the redundant app name that occluded the image. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/05.png[05,700] - -[start=6] -6. Next, navigate to your Library index (looks like a bookshelf of cover art) and find the DZGUI app. - -[start=7] -7. Right-click its cover and select **Manage** > **Set custom artwork**. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/06.png[06,700] - -[start=8] -8. Navigate to the same path and select `grid.png`. The final result: - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/07.png[07,700] - -[start=9] -9. Right-click the DZGUI entry and select Properties to open the properties dialog. Next to the **Shortcut** field, you will see a small square box which represents the game's icon. Click this to open a file explorer and select `icon.png` from the path above. This will add a small icon to the list view. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/08.png[08,700] - -[start=10] -10. After you launch DZGUI for the first time, you should return to the library view and select the Recent Games dropdown on the right-hand side. Steam shows a collection of box art based on categories like "Play Next", "Recent Games", etc. Look for a downward-pointing caret icon and click it, then select the "Recent Games" category. If DZGUI was the last item played, it will be shown with a landscape, rather than portrait, orientation cover, which is initially blank. To customize this cover, right click it and select `Manage > Set custom artwork`, then select the `hero.png` image again for this area. - -image::https://github.com/aclist/dztui/raw/dzgui/images/tutorial/09.png[09,700] - -==== Controller layout - -A controller layout for Steam Deck is available in the Steam community layouts section. Search for "DZGUI Official Config" to download it. This layout provides modal layers intended to facilitate interaction with the DZGUI interface, but does not attempt to customize in-game DayZ controls in a detailed fashion. - -Long-press the View button and Select button (☰) to toggle D-pad navigation. This creates an additional layer that lets you navigate through menus using the D-pad and A/B to respectively confirm selections and go back. Remember to toggle this layer off again after launching your game to revert back to the master layer. - - -=== Updating the app -If DZGUI detects a new upstream version, it will prompt you to download it automatically. -It backs up the original version before fetching the new one, then updates your config file with your existing values. Once finished, it will ask you to relaunch the app. - -If you decline to upgrade to the new version, DZGUI will continue to the main menu with the current version. - -[NOTE] -New versions may include changes to bugs that could prevent you from playing on certain servers. -Upgrading is always advised. - -If you experience a problem or need to restore the prior version of DZGUI and/or your configs, -it is enough to simply replace the new version with the old one and relaunch the app. -The file can be found at: - -``` -<path to script>/<script name>.old -``` -E.g., if DZGUI is named `dzgui.sh`, in the path `$HOME/bin`, the backup will be located at -``` -$HOME/bin/dzgui.sh.old -``` -If launching DZGUI via its system shortcut, the backup file will be located under the path: - -``` -$HOME/.local/share/dzgui -``` - -Similarly, a backup config file will be located at: -``` -$HOME/.config/dztui/dztuirc.old - -``` - -=== Locale support - -For internationalization purposes, DZGUI will inherit the default locale setting on the system when displaying numbers. This is used for thousands separators in long numbers and decimal separators in fractional numbers. - -If you wish to use a specific regional numbering preference while retaining a different base system language (e.g., English language with German-style numbering), pass the desired locale as a variable before launching DZGUI: - -``` -LC_ALL=de_DE.UTF-8 ./dzgui.sh -``` - -If you intend to use this frequently, you could wrap the above in a script or alias. - -== Uninstallation - -To uninstall DZGUI and its associated files, invoke `./dzgui.sh` with the `-u` or `--uninstall` flag. - -Follow the prompts to choose from full uninstall (removes the application and all user-defined configuration files) or partial install (removes the application, but keeps user-defined configuration files). - -If you intend to reinstall DZGUI again, keeping your configuration files is recommended. - -== Basic usage -Select from among the <<Menu contexts and options>> below. - -Connecting to a server consists of fetching metadata for the server you are searching for. - -DZGUI will check the server's modset against your local mods. If you are missing any, -it will prompt you to download them through the Steam Workshop. - -[NOTE] -You must be logged into Steam for mod changes to take effect. -It can take some time for the mods to download and update. - -Once all of the mods are downloaded and staged, DZGUI will notify you that it is ready to connect. -The app hands the launch parameters to Steam, after which point DZGUI is not involved in the operation of DayZ. - -== Menu contexts and options - -The main view displays a series of contexts, visualized as buttons, on the right-hand side. You can click these to navigate between different areas. - -A footer at the bottom of the application lists an explanatory tooltip for the currently focused option. In the case of server browsing contexts, this tooltip will be updated to show the distance in kilometers to the server and an estimated ping (round-trip latency). - -The right-hand side of the footer displays the branch of DZGUI you are using (stable/testing), the mod install mode (normal/auto), and the version number. For example, if you are on the stable branch, using the default install mode, and using DZGUI v5.0.0, the footer will read: - -`STABLE | NORMAL | DZGUI 5.0.0` - -=== Main menu - -The main menu context is the central entry point to server navigation, letting you browse the list of publicly available servers, check your list of favorited servers, connect to recent servers, et cetera. - -==== Main menu > Server browser -The server browser retrieves and lists all publicly broadcasting servers (including official ones) in a table. -These servers can be filtered by various parameters in order to display a more granular result. - -After you select a server from the list and choose to connect, the application continues to the mod validation step. - -For details on interacting with server browsing contexts, which are uniform across different menus, refer to <<Server table and filters>>. - -==== Main menu > My saved servers -Prints metadata for the servers saved in your servers list. Servers can be added via the <<Manage>> context or via the <<Contextual options>> of server table views. - -For details on interacting with server browsing contexts, which are uniform across different menus, refer to <<Server table and filters>>. - -==== Main menu > Quick connect to favorite server -Bypasses the server list and quick-connects to a single favorite server specified in advance using the <<Manage > Add (change) favorite server, Add (change) favorite server>> option. - -==== Main menu > Recent servers -This feature queries the history file for the last 10 servers connected to by any means -(server browser, favorite servers, connect-by-IP, etc.), and presents them in a table. - -For details on interacting with server browsing contexts, which are uniform across different menus, refer to <<Server table and filters>>. - -==== Main menu > Connect by IP -Provide the IP and query port in `<IP>:<PORT>` format. Depending on the mod installation method you have selected, DZGUI will proceed to stage and download mods and prompt you before connecting. - -==== Main menu > Connect by ID -Requires a <<API key & server IDs, BM API key>>. Use the https://www.battlemetrics.com/servers/dayz[BattleMetrics site] to find servers of interest (proximity, player count, rules, etc.) - -Each server has a unique ID. This is the string of numbers at the end of the URL. Copy these IDs. -For example, in the URL https://www.battlemetrics.com/servers/dayz/8039514, the ID is `8039514`. - -Enter the ID of a server to have it translated to an IP. After this step, the process continues as though you were connecting by IP. - -=== Manage -==== Manage > Add server by IP -Add a server to your saved servers list by IP. - -Provide the IP and query port in `<IP>:<PORT>` format. - -Servers you add will be saved and listed when using the <<Main menu > My saved servers, My saved servers>> option. - -==== Manage > Add server by ID -Requires a <<API key & server IDs, BM API key>>. Use the https://www.battlemetrics.com/servers/dayz[BattleMetrics site] to find servers of interest (proximity, player count, rules, etc.) - -Each server has a unique ID. This is the string of numbers at the end of the URL. Copy these IDs. -For example, in the URL https://www.battlemetrics.com/servers/dayz/8039514, the ID is `8039514`. - -Servers you add will be saved and listed when using the <<Main menu > My saved servers, My saved servers>> option. - -==== Manage > Add (change) favorite server -Prompts you to add/change a favorite server (limit one). The name of the server will be updated in the footer of the app when focused on the <<Main menu > Quick connect to favorite server, Quick connect to favorite server>> option in the <<Main menu>> context. If a favorite server is already enabled, this option switches to "Change favorite server." - -=== Options - -The options context is chiefly used to toggle settings, update API keys, or perform changes to mods. - -==== Options > List installed mods -Prints a scrollable dialog containing all locally-installed mods and their corresponding symlink IDs and directory names. - -If you right-click on an entry in the list, you have the option of opening the Workshop page for the mod in Steam or deleting the local mod. - -==== Options > Toggle release branch -Used to toggle the branch to fetch DZGUI from between `stable` and `testing`. - -The app ships with the stable branch enabled, with the testing branch being used to elaborate various experimental features. - -==== Options > Toggle mod install mode -This feature is experimental. It attempts to queue the mods requested for download automatically, rather than prompting the user to subscribe to each one. - -[NOTE] -When using auto mod installation, DZGUI will track the latest version of your installed mods and periodically synchronize their signatures next time you attempt to connect to a server. This means that if you satisfy the mods needed for a server, but updates to other mods you already have are found, an update will be triggered until all of your local mods are refreshed. Provided you tend to keep auto mod install on, these updates should be atomic and ensure that mods are always up to date. - -==== Options > Toggle Steam/Flatpak -This feature should be used if there are concurrent installations of Steam on the local system. Toggle between using Steam or Flatpak Steam to launch DayZ. - -==== Options > Change player name -Used to change the in-game player name that is broadcast when on servers. - -==== Options > Change Steam API key -Used to change or update the Steam API key; can be used if the old key needs to be revoked and updated with a new one. - -==== Options > Change Battlemetrics API key -Identical to the option above, only for Battlemetrics. - -==== Options > Force update local mods -Attempts to update the signatures of all local mods and synchronize them with the latest versions available on Steam Workshop. This option should be used when <<Options > Toggle mod install mode, Toggle mod install mode>> is set to AUTO. - -This can be used in the event of mod corruption or linkage errors. - -==== Output system info to log file -Writes a list of your current settings and system configuration to a local file that can be pasted into bug reports. This process may take some time. - -The file is written to `$HOME/.local/state/dzgui/logs/DZGUI_SYSTEM.log` - -=== Help - -The help context chiefly opens external documentation and support pages in the system-defined web browser or internal dialog. - -==== Options > View changelog -Prints the entire changelog up to the current version in-app. - -==== Options > Show debug log -Prints the DZGUI log file generated since the last session in a tabled format in-app. - -==== Help > Help file -Uses xdg-open to open this documentation in the system browser. - -==== Help > Report a bug -Uses xdg-open to open the https://github.com/aclist/dztui/issues[bug tracker] in the system browser. - -==== Help > Forum -Uses xdg-open to open the https://github.com/aclist/dztui/discussions[discussion forum] in the system browser. - -==== Help > Sponsor -Uses xdg-open to open the https://github.com/sponsors/aclist[sponsor page], where you can help fund development, in the system browser. - -==== Help > Hall of fame -Uses xdg-open to open the https://aclist.github.io/dzgui/dzgui#_hall_of_fame[Hall of Fame], which recognizes those who actively contributed to the betterment of the application through bug reports and suggestions, in the system browser. - -=== Exit - -Exits the DZGUI application. - -=== Keybindings - -The "?" button opens a dialog that provides additional information about keybindings and navigation throughout the application. - -[NOTE] -Due to size constraints, this button is not currently available on Steam Deck. - -== Server table and filters - -=== Table metadata - -[%autowidth] -All server browser contexts (<<Main menu > My saved servers, My saved servers>>, <<Main menu > Server browser, Server browser>>, <<Main menu > Recent servers, Recent servers>>) share the same table layout. - -The table lists servers in columnar fashion according to: - -- **Name**: the server name and the menu context you are currently on -- **Map**: the map name -- **Perspective**: first-person (1PP) or third-person (3PP) -- **Gametime**: in-game time on the 24-hour clock -- **Players**: total players currently in-game -- **Maximum**: total players the server supports -- **Queue**: total players in the waiting queue (for full servers) -- **Address**: the address in IP:Port format -- **Qport**: the query port of the listening server - -Columns are width-adjustable, and the positions they are set to will be saved and persist across sessions. The saved column width is used uniformly across server browsing contexts. - -=== Contextual options - -When in a server browsing context, right click on any server in the list to expose a series of contextual options. These are: - -* **Add to (Remove from) saved servers**: add or remove the server to/from your saved servers list -* **Copy IP to clipboard**: copy the game server IP to the system clipboard -* **Show server-side mods**: opens a dialog with details about the name, Workshop ID, and local installation status of mods on the server. Select a mod to open its Workshop page in Steam -* **Refresh player count**: refresh the player count for this server in-place in the table. Useful if some time has passed since you loaded the list and you want to see if the queue is open - -=== Filters -The filter panel on the right-hand side of the table allows you to search by keyword, map type, and toggle different filters. These filters can be combined. - -==== Keyword search - -A text entry field where you can search for hits in any column of the table by partial string match. The field does not support regex, but does support basic backslash escapes for special characters, e.g., `\[My string\]`. - -Clear the keyword search and submit again to remove any keyword filter. - -==== Map search -Opens a combobox that lets you filter the table by specific map. - -A variety of navigation bindings for interacting with the table and toggling filters can be found via the <<Keybindings>> dialog. - -==== Toggle filters - -A series of filters that restrict the results by game parameters. Also toggleable via the number keys. - -[%autowidth] -|=== -|Filter|Usage - -|1PP|Include servers in first-person perspective -|3PP|Include servers in third-person perspective -|Day|Include servers with gametime between 0600 and 1659 -|Night|Include servers with gametime between 1700 and 0559 -|Empty|Include servers with 0 current players -|Full|Include servers at maximum capacity -|Low pop|Include servers with a current player count < 30% of the allowable capacity -|Non-ASCII titles|Include servers with special symbols, Unicode, or text in the title. -Note: unticking this filter will also exclude CJK languages, Cyrillic, and other special character sets -|Duplicate|Include servers with duplicated server titles (there may be large numbers of misconfigured or generic servers with the same boilerplate title) -|=== - -[NOTE] -It is possible to filter the list to 0 results if you combine or exclude logically opposed filter pairs, such as excluding both 'Day' and 'Night' servers, effectively restricting the list to no possible servers. If you expect to see results but do not, double-check your filters (and keywords) to make sure your search is not too restrictive. - -== Debug mode - -Debug mode can be enabled via the button toggle on the right panel. When debug mode is enabled, any attempt to connect to a server will function as before, excluding the final connection step. DZGUI will attempt to synchronize and download mods and then print a dialog showing what options would have actually been run when connecting to the server. - -This can be used to diagnose problems and test functionality without actually launching the game. - -== Troubleshooting/FAQ - -Please refer to the https://aclist.github.io/dzgui/kb.html[DZGUI Knowledge Base] for common issues. - -== Reference - -=== Config file key/value pairs -The config file is located at `$HOME/.config/dztui/dztuirc`. - -Under normal usage, these values are populated and toggled automatically in-app. Deprecated keys are not listed. - -[%autowidth] -|=== -|Key|Value - -|`api_key`|an optional BattleMetrics API key generated at BattleMetrics. See <<API key & server IDs>> -|`auto_install`|permissible values are 0, 1, and 2. These are set internally depending on if the user enabled auto mod installation -|`branch`|by default, set to `stable`; set to `testing` to fetch the testing branch -|`debug`|by default, unset; when set to `1`, the launch options that would have been run are printed as a dry-run, instead of actually connecting (used for troubleshooting and submitting bug reports) -|`default_steam_path`|the path to the default Steam client installation -|`ip_list`|an array of server addresses; each record is a concatenation of the IP/GamePort/Queryport -|`fav_server`|a single server to quick-connect to; a concatenation of the IP/Gameport/Queryport -|`fav_label`|the human-readable name of the fav server set above -|`name`|a custom "handle" name used to identify the player on a server (required by some servers) -|`preferred_client`|whether the user prefers native Steam or Flatpak. This value is only set if concurrent versions of Steam are found on the system -|`src_path`|the path to where DZGUI is currently being stored -|`staging_dir`|a directory used to stage changes between updates -|`steam_path`|the path to Steam detected/set during first-time setup -|`steam_api`|the Steam API key. See <<API key & server IDs>> -|=== - -=== Hall of fame - -This section recognizes users who have gone above and beyond in submitting useful bug reports that helped in tracking down critical issues -or resulted in the elaboration of important features. This list is not exhaustive, and any missing parties are errors of omission, but this does -not diminish the gratitude I have for their contributions. - -.bongjutsu - -Consistently one of the first to report emergent bugs and provides clear, detailed ways of replicating the issue. - -.dj3hac -Provided extensive debug information that was instrumental in solving issues with Flatpak Steam. - -.jiriks74 -Gives highly relevant information about edge cases, particularly as they concern the Steam beta client, Wayland, desktop environments, and experimental features. - -.MatheusLasserr -Consistently provides constructive, straightforward suggestions about UI and readability improvements. - -.scandalouss -Tracked down several highly obscure but key bugs in the early development of the application that were breaking discovery of mods. - -.StevelDusa -Played a critical role in the elaboration of many of the features we now take for granted by being an early beta tester who not only reported bugs, but -helped workshop and brainstorm various ideas that turned into QOL features. - -.Thoughtduck216 -Contributed extensive beta testing of Steam Deck builds and provided ongoing troubleshooting for Steam Deck users - diff --git a/docs/kb.adoc b/docs/kb.adoc deleted file mode 100644 index 8cb54d8..0000000 --- a/docs/kb.adoc +++ /dev/null @@ -1,28 +0,0 @@ -:nofooter: -:toc: left -:stylesheet: custom.css - -= DZGUI Knowledge Base (v5.x.x) -FAQs for DZGUI - -Click https://aclist.github.io/dzgui/kb_dark.html[here] for dark mode - -Looking for the main DZGUI documentation? Click https://aclist.github.io/dzgui/dzgui.html[here] - -include::kb_sections/dzg001.adoc[] - -include::kb_sections/dzg002.adoc[] - -include::kb_sections/dzg003.adoc[] - -include::kb_sections/dzg004.adoc[] - -include::kb_sections/dzg005.adoc[] - -include::kb_sections/dzg006.adoc[] - -include::kb_sections/dzg007.adoc[] - -include::kb_sections/dzg008.adoc[] - -include::kb_sections/dzg009.adoc[] diff --git a/docs/kb_dark.adoc b/docs/kb_dark.adoc deleted file mode 100644 index 0b023c1..0000000 --- a/docs/kb_dark.adoc +++ /dev/null @@ -1,28 +0,0 @@ -:nofooter: -:toc: left -:stylesheet: dark.css - -= DZGUI Knowledge Base (v5.x.x) -FAQs for DZGUI - -Click https://aclist.github.io/dzgui/kb.html[here] for light mode - -Looking for the main DZGUI documentation? Click https://aclist.github.io/dzgui/dzgui_dark.html[here] - -include::kb_sections/dzg001.adoc[] - -include::kb_sections/dzg002.adoc[] - -include::kb_sections/dzg003.adoc[] - -include::kb_sections/dzg004.adoc[] - -include::kb_sections/dzg005.adoc[] - -include::kb_sections/dzg006.adoc[] - -include::kb_sections/dzg007.adoc[] - -include::kb_sections/dzg008.adoc[] - -include::kb_sections/dzg009.adoc[] diff --git a/docs/kb_sections/dzg001.adoc b/docs/kb_sections/dzg001.adoc deleted file mode 100644 index c9a8ff5..0000000 --- a/docs/kb_sections/dzg001.adoc +++ /dev/null @@ -1,11 +0,0 @@ -[[DZG-001, DZG-001]] -== DZG-001: Periodically getting dropped from servers, or servers appear unreachable -Last updated: {d} - -It is a longstanding issue in DayZ that the game opens a large number of connections when querying servers and/or while connected to servers. This can result in excess traffic on the user's PC which, depending on how much headroom your network has, can lead to getting dropped, unresponsiveness, or a timeout. - -If you are on Wi-Fi, try switching to a wired connection and see if the problem resolves itself. If it does, your wireless router settings do not have enough headroom for max simultaneous connections. Use a wired connection, or update your network settings to a more permissive setup. - -Bohemia has acknowledged this issue going back 10+ years and stated that DayZ has a heavy impact on the network, but there is as yet no proposed solution on the DayZ side. - -This issue is frequently seen on Steam Deck, due to the tendency for users to use it in an untethered Wi-Fi setup. diff --git a/docs/kb_sections/dzg002.adoc b/docs/kb_sections/dzg002.adoc deleted file mode 100644 index ca5fb6c..0000000 --- a/docs/kb_sections/dzg002.adoc +++ /dev/null @@ -1,5 +0,0 @@ -[[DZG-002,DZG-002]] -== DZG-002: Some servers appear locked in the official DayZ client, and are unreachable in DZGUI -Last updated: {d} - -This is a variant of <<DZG-001>>. diff --git a/docs/kb_sections/dzg003.adoc b/docs/kb_sections/dzg003.adoc deleted file mode 100644 index 4a81d3c..0000000 --- a/docs/kb_sections/dzg003.adoc +++ /dev/null @@ -1,7 +0,0 @@ -[[DZG-003, DZG-003]] -== DZG-003: On Steam Deck, DayZ becomes unresponsive/sluggish over time -Last updated: {d} - -When DayZ is open for 1+ hours, a gradual loss in performance and FPS may occur on the Steam Deck. - -A solution that seems to work for most users is to install https://github.com/CryoByte33/steam-deck-utilities[Cryo Utilities], a third-party performance management application. diff --git a/docs/kb_sections/dzg004.adoc b/docs/kb_sections/dzg004.adoc deleted file mode 100644 index 25f7d7d..0000000 --- a/docs/kb_sections/dzg004.adoc +++ /dev/null @@ -1,7 +0,0 @@ -[[DZG-004, DZG-004]] -== DZG-004: On Steam Deck, some mods in the Workshop show a black screen when DZGUI attempts to open them -Last updated: {d} - -This is a bug in the Steam client that is being tracked at Valve's Steam for Linux issue tracker https://github.com/ValveSoftware/steam-for-linux/issues/9598[here]. - -To resolve this issue, manually intervene in the Steam client by selecting a different context (e.g., Store, Library), waiting for it to load, then navigating back to the Workshop context. This should clear the blockage and allow the contents to render. diff --git a/docs/kb_sections/dzg005.adoc b/docs/kb_sections/dzg005.adoc deleted file mode 100644 index b254f7a..0000000 --- a/docs/kb_sections/dzg005.adoc +++ /dev/null @@ -1,7 +0,0 @@ -[[DZG-005,DZG-005]] -== DZG-005: Rendering problems with objects in the Winter Chernarus v2 mod -Last updated: {d} - -This mod has LOD (level of detail) bugs that may cause objects near the player, such as leaves, to render incorrectly, or cause distant trees to pop in abruptly. This is an acknowledged issue with the mod itself, not with DayZ or DZGUI. - -There is no user-side fix for this issue; it is a problem solely on the mod side. diff --git a/docs/kb_sections/dzg006.adoc b/docs/kb_sections/dzg006.adoc deleted file mode 100644 index 97fa788..0000000 --- a/docs/kb_sections/dzg006.adoc +++ /dev/null @@ -1,11 +0,0 @@ -[[DZG-006,DZG-006]] -== DZG-006: After moving DayZ to another drive, DZGUI fails to locate it on initial setup -Last updated: {d} - -If you recently moved the location of DayZ using Steam's internal dialogs, it may take some time for this information to update internally on Steam's side. - -Steam stores the location of installed games in a unified file, and DZGUI checks this file during initial setup to determine where Steam claims DayZ is installed. - -If you recently moved DayZ to a different drive or partition but did not restart Steam, this information may be out of date, causing Steam to report the wrong location. - -Try restarting the Steam client and starting the DZGUI initial setup again. diff --git a/docs/kb_sections/dzg007.adoc b/docs/kb_sections/dzg007.adoc deleted file mode 100644 index af549b9..0000000 --- a/docs/kb_sections/dzg007.adoc +++ /dev/null @@ -1,17 +0,0 @@ -[[DZG-007,DZG-007]] -== DZG-007: Why do I need a Steam Web API key? Is it safe? -Last updated: {d} - -In order to provide a server browser showing a searchable list of all available servers, DZGUI utilizes the Steam Web API. - -Actual connections and queries to individual servers are performed directly between the computer and the DayZ server. - -DZGUI gets its server information directly from the most authoritative source: Steam. It does this by letting the user be solely in control of their own API key and the application in an authenticated way. Users explicitly get permission to use a Web API key instead of scraping DayZ server info from third-party sites. - -Everything that happens between DZGUI and the Steam Web API endpoint takes place solely on the user's computer, using a GET request (fetch server list), and no information gets sent back to the developer. DZGUI does not scrape third party DayZ APIs without permission. - -There is some misconception that a Steam Web API key could be used to gain information about a user's account or control their account. Not only is this not possible, but the Web API key is used solely by the user on their own computer and is protected by Steam Guard. - -A Steam Web API key is the most strict way of getting authentic, reliable, and consistent server information in a zero-trust model. - -You are responsible for the creation, storage, management, and revocation of your Web API key. diff --git a/docs/kb_sections/dzg008.adoc b/docs/kb_sections/dzg008.adoc deleted file mode 100644 index e35dc2e..0000000 --- a/docs/kb_sections/dzg008.adoc +++ /dev/null @@ -1,7 +0,0 @@ -[[DZG-008,DZG-008]] -== DZG-008: DZGUI server browser stops working, and Steam API key is seemingly malformed -Last updated: {d} - -In order to use a Steam API key, you will have to enable Steam Guard (2FA) protection on your account. If you previously generated an API key and enabled Steam Guard, but then disabled Steam Guard for some other reason, this will also disable any prior API keys you had. - -If, after setting up DZGUI, you inadvertently turned off Steam Guard for some reason, check to see if your API key has been disabled, and reapply Steam Guard accordingly. diff --git a/docs/kb_sections/dzg009.adoc b/docs/kb_sections/dzg009.adoc deleted file mode 100644 index 87c63f0..0000000 --- a/docs/kb_sections/dzg009.adoc +++ /dev/null @@ -1,5 +0,0 @@ -[[DZG-009,DZG-009]] -== DZG-009: Livonia map is missing from maps dropdown in DZGUI -Last updated: {d} - -The Livonia map was iterated off of a map used for the Arma 3 Contact DLC, and is internally called Enoch. Servers running the Livonia map thus use the internal name. Search for Enoch in the list. From adb921dc9303bd64c5b73b1111f20ee569be565f Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:09:18 +0900 Subject: [PATCH 84/99] chore: update changelog --- CHANGELOG.md | 2 ++ README.md | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 620e8f9..e175b50 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ - Update forum URL - Reword Help section links to include destination - Update README.md +- Update IP database to 2025-01 +- Reduce IP database size by 50% ### Dropped - Removed temporary mod ID output in debug logs - Removed Hall of Fame section from button links, moved inside documentation diff --git a/README.md b/README.md index 93f8559..6c131a4 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,11 @@ This overcomes certain limitations in the Linux client and helps prepare the gam ## Setup and usage -Refer to the [manual](https://aclist.codeberg.page) for installation and setup instructions. +Refer to the documentation for installation and setup instructions: + +- [GitHub](https://aclist.github.io/dzgui/dzgui.html) +- [Mirror (Codeberg)](https://aclist.codeberg.page) +  From 2d7ab3aec6188b7985f3a0df8e7931a567bd5976 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:16:21 +0900 Subject: [PATCH 85/99] docs: update readme --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6c131a4..553e72e 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ ## What this is DZGUI allows you to connect to both official and modded/community DayZ servers on Linux and provides a graphical interface for doing so. -This overcomes certain limitations in the Linux client and helps prepare the game to launch by providing the following: +This overcomes certain limitations in the Linux client and helps prepare the game to launch by providing features like: -1. Search for and display server metadata in a table (server name, player count, ping, queue size, current gametime, distance, IP) -2. Add/delete/manage favorite servers by IP or ID -3. Quick-connect to favorite/recent servers -4. Find and prepare mods being requested by servers (choose from manual or automatic installation) -5. Bulk delete/update local mods -6. Concatenate launch options to pass to Steam -7. Connect to mod-enabled LAN servers +- Search for and display server metadata in a table (server name, player count, ping, queue size, current gametime, distance, IP) +- Add/delete/manage favorite servers by IP or ID +- Quick-connect to favorite/recent servers +- Find and prepare mods being requested by servers (choose from manual or automatic installation) +- Bulk delete/update local mods +- Concatenate launch options to pass to Steam +- Connect to mod-enabled LAN servers ## Setup and usage @@ -19,7 +19,7 @@ Refer to the documentation for installation and setup instructions: - [Mirror (Codeberg)](https://aclist.codeberg.page) - + ## Attribution From c9c8337c3b76e7ac1322d66725a19c8892fad65f Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 6 Jan 2025 22:58:01 +0900 Subject: [PATCH 86/99] chore: update image --- images/example.png | Bin 477676 -> 133344 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/example.png b/images/example.png index 07360ac20547305f0003f1f99623f7525e988ddd..2ddcf5e9dae9da6daff9cb62dec81d67fe1649ee 100644 GIT binary patch literal 133344 zcmeFY^;erg*EWi~v;>Mnp)KxO2+$TS?(R^ELui2DE(MAecPsA2g1dWh2#{h$L$L-( zfkU6?ea|`HTIWwVKV{ZEnfso(*4}$&u6^w&4K)Q~0vZA|G&Ewx_p(}OXxK0`G|b<4 zn2%5BbXAxhf8J=Q=*STe5U{YYaBy(Y(a{MA2yk<A3kwV97Zk?D#rgaD>Fevilac@4 z(CFysxV^J;c6K%}Fu1U=NTHnzbZv2q>%ikNo<~CqLQ|A|r{lGHY#L>?%|=9TJrPU% z@X%1n8hp}tpaS$*b$>SLl5`CxkB@wPd9;+kBojeIE%0IF|8M*c2oj+xNi+{b-Dj?U zX&<`&ZvHg@>HGW#9=}eB^wvt7|F&Dpa0QW3g;f6;WzIp0i}Vgc{R7djm1s}uAD$2S z5)7~fG~_>oZycy6{QnKSfA@bho{(`7Jd-oMrLk;vAu>1L;gL$+USX2S)gN-mV3J7| zNFBI&YaUABmZUYimds^p_WkPH@X(sdLsHnO+F1fqU_vh}l1Nk8MD#tA>~z-q99<PZ z@2jL{V<ry9xsS1f#edfo83cAn1)LBv5l<Xy9nWhphKnwyiYY$lHgkKQI_a>2%nR2m zL^pG`9_RKvw3U<^W3NlRDXfhmROIPcYASmb?awwNypd_RRBJU!<wQbh+P_a)?je#h zt9$-P=V_{5idNza^!SfVC;jWOpD<MoF!e{}M<h0r6>%3Y+dsm>$ZFj*k-+4D0abtN z0lL!AS61SLn=LvkUp&I|MjZ#tC?JaujWLXP(vewCZSOvHL<q{mg_7Pp{m;z#z<Iw+ z@cSrRYP=(gC0)a==W3PUT~Oy(fZOe4IXXfnAmSh9c)a26%`T2ZG#OhGqgG?htH-@C ziZkSve=i0kHfph8UMAP<-={wGv6Oh&#IzT=c0`SqX}EbC<HIOpVvZb|6s-Ys3AL$; zJEARTzXlinttZ2Z<CUQ+i|{V9m9XiMQN{;MqqyN0-daOH5q0B4H%g<ZL@J~!%0BaA zeC@xB%w$sW-{Hg$%zJh#Ir>6r5`{TeT1YFfBO~xijBI;}w&lbj@WyCwZTuhFpE$ee z(YCv2W~6qMZPbiOEd2>#DT<Ee!hZZ<Mv?#8PVy6Qyh8vjY$2re{<N-D{XZVNqpF!h z*zLCIvbV&GffRL_?y9NGF%P?;nDE!y-n<sQj}6@3%zAJNPriv=voC6=4MyFqbuDHG zAw<(~|A8=)aGJ7G(^P|o+}sF=X<Z{@NiyrWdsS)E)u~VSU;Fpn3M7uGw>Uy{2cYgv ztM<RX5ncM9v975iZWS9Hu^#NMU9kH=H;-l5aQDO78$gkFnpOm#q&WBEB!(Z<-roH= z5jEd<fc>R?bbtqCoq=BdpY-ZHVu28=$iM14Bx9Sc4||jLe8@+C(@vU}AAa35_j(_E zP-Ju)DAuJG-P0NP%QiL5xm<F+PjfS;;q3I+eLLnwt!wwq`TeiGO$&s~z3o<bJa2ES zQ^}L><GFPkGkN>;_j~XL94PAe^EU16NfCh`z)5PRbTpCYbx5E|Dd-a@bf46l`6hEg zKqf*W9*gmdRhWnvXUHErKaERcxi&yHdh#}Yn?m<Nd+E_U<?ncSYE;d(2PGfI=eWKz zj_28@Q>zI~k&i~V6Ud?j@B;87SDqkQOw8VPQOc3$Q2D(aVS%Qyx-BxGcU#t+UP##c zMD=X!c3{Ob`mN6>W8L1igGD}!7<LW)3l)GUW}MuV3o+jyplMXtAz$n7rYD_nAtyu< z2GsgCWm&w$z=K3~)&H9>Kjy|Ox<l43ps`E@Y~<h4<E4|=u~h~5p@2IQ>djb@OfNrN zNL!0L2#JAEetx~g@DXVrwJ}$Tr$7v1JpUk&j!JmQC@Z7*!XLKdz)uV-8V{~MQ_2v8 zDo|L0aiQBc?>7q}UgNx%FFWhuOa!)%&dd7Gum4WVdK>;yLsMs*m@23C;&ZbQd3pwb zUbvz|CPmXmpVSlyrZ<MY_-7vHP6B$5p3xl@g??mIr<o!Z%jFi8Ncml%tu%Fck%CsD z@IVpASM|*^3F}qH+gR47FhDoZ{C^i@`zd=Scv~ECa_oE6c(}Q+p8qoYF(4{OO#Xkx z&;K)`-b615koQZ(KMX%?Kb$>WKOEiXbp^FnDjv!GKhG-f_2Y3NRRF>Nx)GsVAU>E8 z{-20#&S8#*_~(_6-l0GK2=C+8cuqRD-RsZrKY!r<pWZiY{r?-}{kXyA5q}?K!%x+E zW7Ds%+~n`%o|b!gAiB!_ln@q0#rI^K;vBMKLxg+o9=JDyO1cvRX<%to3kysEnti-P z4ne52V3Y;o0erJ52)Xls2lykpO8(T)JtqP^2!Qf<(IFQJG`@SEALws3Ls9V`5#~C+ zp{)<Hpzg5NqvO^;3&XldZGQs$=xOssfd|bS$fUrYe}!8=>`g`Q>6h(ln7`KDrn&E} z_E~lY%3SDtjhyt~ivw-Ik;95Neh_Y~Uj^IzVeyM}9)x*Y46E%RVd~qwsN^?vu>xwn z+y|m1CB2MVXDjX+!w+3gNI<N_B#hBl>u!z1;jLiAjF$WF8*ql7?Ma4ubAzM?;EjQF zZK%V3A4Nyn0PAjh@U3F+-7E0YikK@})~SBvF~-BIn|u;Yr@SAC@+(f6dp&m<?Fyid zY3=<f89Ic5j&shu?=yZxzt<)T2#&AnJ=J;NPeu7Ab!gF}$&0!2p>!T;cCwDIF*u!= zKLslnyjAI}!%GD}#iI97^wa91Ez2W^EzpA^3xfdT*yUym-B-6#0o3YEv48eE(|lZ! z<bf$}*?&7*>tP|j-OI@d=CALcKleUldAA476#3@%W=>=Bngnqh8y#3BbZu?pz^=)w zt082$RInWt!29IutZ>NYM;WMQm;R3)NuODG9W18t$Yx0`${N3bRW8Tc>jj4;f~YsU z9S5QGwK}sok8I8P`5|{`;=Gw((Vw^y%GPe6((gYmu12n`eqt5jU#FZA^Ho5q?98LJ zcNu2OVhpd&MB6@n{g2HcffMURb<{AA5h?BN3g){>F<ihtX_f`3sPpMrM<McyfE}9` z8Pba6Qn>MSr7U6hB*8klrC=TJlNe8P!cBWGw_Ko(GTu<yiJ<mY$d47tr7v)Gz|R00 zID$x9v*ylhqk5~m3UfUJ$YgGjYDq%z!NZOnuxs@yL`#VP(~)6T*(c0H<n3lYB=dA# zH)RNhE)@JcGm!o;;yrsp39{noj-AAg2SfBM`^#@n#OG!of{f={Jvkc}c#_>pT)SWH z34gHktv4z|bsTkkZ{<$hyzR;9{9`I84268*?>G!v==Oih>x%BVpdAqi@i;b0^@d{- zK_|~+cPH~{pf8>r9+W*1N*l0U_^6<AwSJ$n@w@HY<x(ih4;Lo5Eq<RaMexEQs5Upy zc98yb<0p<CTTkcg=Kx-~cf8RDe-~?UpVXq?#4zK8Hd80p;m@hW!qUtk9W?Wa&rfHl zC=6DcexC;>O~E8d7s{S#2-b4kS8@ph!KGB&k0*=FAK26*xD>L~g7N%W<@wY&yP{m4 ziK>E^Z(T|f+S{1nB(aD3FW(P4uoQI8p#F%}8<rf@onl{k>HxvWY&mquLiM|Bg9g?` zFlyWadanxBv_*(EwY0qLVd<N3O2sdghhb3me+|e8UBY*5>TA`ab3(YD&X!AJDs?*- z#nKCX8~V#|TspspHgU?b<N7(%tPq9dL%tOTgtyMw#icMfXRql7wK>{hZfa;Pd9UCa z<-c5Uw_!G$62}UPtFkG3Pc-xat;Zez-56eMt~}$@-vrW;KZ1MY;&^5C81*<AWcnSb zrR<yjc8^cN@WsnDee%Lla^*5QejWK&o%$qMzG3(hJoN9$vlxQFRrs*e3xKHjJ0hXC z!*=8&ONQ$SiEPg{e91M_fra0WBiNcRYmoQyr((jU@$7NM!R>HfN^)eRtDFZPWXHu8 z!6e{&;)nC}6JEq57j<`0D=^-h582)n*_=juPXH|%d97ebiy)<eDwBMZHCLERZ~rY+ zo`VUyD(@8qDGZOP-l)xygYsT;@sxPcgO_TbTzc>5u67OY@$gOP#*e!3ax3fDWaLZX zl*J~NlbPCRp%3j8+n;qtWyKKHA27>=!9`jW7pyJ{xvu3qhTitB41_)uRF(NA&=UP2 zZxOy_l2GP$Ugq05wXsELsb?r&;rG$L_#7WdS2j|x;Z(Dx}09Oker17<?XkFcH- zMA*z00EA0;3BeH{%2pb%Ef5``W>E49MTc%zwp5kmqaG`@W$?XD?~>T8Y}{Bg#|fb_ zm^CT+DgEoRpBmTkb9py~XNdS5&%J<_Kg(3pPd0ia-^V3y_I9Rxbp_0v#WMFXE@)mq zgH4wALO`b;pIB#k)7$4SN*7ADcOf#@t~<0ncMM=#VT+B$6FwCVsFW@yg!*SruYYiT zl9*Qe(z5agp0BY)W%QxGjHrVW<^i3|T$xsy1Lp8oHj^rA280to6h?gV?iu0tVq)pQ zXrZDC3r!%$#_&glYcjFw)HB)pXY0vB{6XB#ipnC9#4<NEfDAWpLz>^8eqbgo%&5GA zBr2x^<JtL}Lf>X?_@c}4=Z2La{bX{s_glmy1$g}XdB8^8FIxL6SsG3v0Y|T;Hv!`} z#seci1E*o9i)Q9hMI=`A?RR^rt-ox#?^wY4xZpQgHfBQCW~_cEs-V2KrskA?o*#tr z%>c%pY6x4N2{>$tOu-pEL8a&*b8T9m=}Huu0YVt0@VSfl^$Wz?rVR{;C8A1_$^oaD z#p+{>LhKmQ%i4TGu;(u6yC8(d=;=iIb0Xad(jS$9Vo*X+Ap=nF9_g}@c<BcMHvx^% zSJJE)c98KHAQ&Y-Dv1kT%J*A_2_v68#yMrsQZ`Mr$^!$e-Ur2CMK1!ecX77(8M4v< zR;v=3JRdb(T^H^Kf`6@E;3-)9F*UL7{SIy23<0)u{$>EViXfMLxYQo*n-g(1zm&9i zoR=7u1k3EdIx}pdhTog*@i<oc1@Z7I(7x%RKMWncnF~84%Pg2aM)pZXUzk>3hFl4W z!V%l{KhY{9e$KK@Ys+2orZX4*vb;<VwiLpJ#xDruB>}*;m7ca`mbKSTQ{Y(A)Hw(0 z)*fLJ=fjCkd+AVF$`Vu7>#tEk7Pk^5$0pAzM`=;!kK<&Si01-#VAo6VE;^t1PyCSH zoT49l8wEI}3j&f5zJb^Ldo2TpFY1Y5>|7>-$R9jE|EzBNGb)@gsduT?Z(u@(_923h z2|?|rgEL%8Cnw<0H1Sa_)>|H@JiYO3<*g)#NBH9=kiDjQ?V-INPR#@%%~5+@lTm5X z0t6QmcI}i%)0di64gxlZcZ7QzUn>3IC^R&mi&Gh3G*s1|i6QZM;#xvcU37sX=3~9E zCf9L|^j2i_F9(mjoHL)=Z2j@NffD-)eq;^)_nkKMwEeKe@Iz@lniktkvJVuDk|~=X z5&k*8)`;voeR#lr=YSh2ED*5Z-8Au?Zlbf6J}_e$2Z7#wKLAs$mF!$%Sd-eaZ<-*6 zLPC+K3|~&>rT37BHqq-EF2g4AQC9)v%nJti{qBTmDn47pF1%raJg3JrRaitY-!go; z_R@FwSua<=7=uPk=Oq?`Y13(O&e^OvHYt2?M3yo)I>4M@wDP+YR1P$vEXEIsn8&d) zIr~xhi}VzDAJ$=oP>5AljbY*AomSnnGG1eq|IDR~?$7wTnOn5}B&tInqs@QpwiC9G z7l-48kBHn*rUOEGaiNthMFOaS5A8ElLdCi9wpzSojvqd<-$IsQ$kjRDlc?hI$%!r; zNYrw7UaR)4uZ&Y_A>4aXS)H*qe%y(4tlONR^;Cl%e*f0nKi5~=V`DoaF~zT!L44)U z;=R@1wT&l5D7WIkxjS_3EP{hJx^lN4zOk>>*7j2Gkk0O?r{toR7XlM*&<Wdbr(8?E zIml>p_w6u7ApMc{4`NnU3hx3{RY0GZW&7SJWh1ly{`CC}?eH6hwAh2T&(klo{KFa? zZ`k8f>+YdGf)#f<BWu-Fbku=sC+3pR)WStdhyEn40*z+G7=1gOfa0I>U008t`+PqM zZ~M}oT(!hYTgEJK`ay{+65soOySWhPxig)(3-72rE(+xJ4_He4bbII8^=6L=DL1^i zdAF4~3sei&aZZ^(718s58}6bO-cdp6`=Ubh(~@sq!a8p3ms>}UUwaY|s@NT*d3}XK zE`eCjo%+Nb?@Pb+`%B79vWUUEq;nL8pESsIw994bxFP%3R93On=k!gtTwf=JgugZ# zn6Pdl7_ZynnR7&9jJ(H#^$jKx1<z>COGSpX6Cha?9xAYM`vFPO_x<@d^b`I!CJnUk zdmDIw88>FkH7V+}eft6To={!4ZyEW}72VBc&*EouACQ*NJ)(1+>E8Wi4=e}rC%78! zF)gtnn)b-9k^1vH<kSYCF#3?)t)39Zc#lM?!<t8U%cmjoRJ_rDB#S`{o5-Dm{w5^1 z(s`>ER3aQ`)<tS-9oQQ-w*Y61I@xpuzhPv*!@TF&%nQr=H{RWMO`qk!|7o<JRNvjp zi`vobd)11x_+R^#4!_zwBLkO8e_O+A#xk!*(-#5x?KB%#x6|lI0GRR5(Ie;e_wCA= zR<}Zlkz-F<2N~2lr&;Tg6UPiz!Lq>U^d?pD?8jt)@@$IzfumTHkN&r55XVl@hs<9G z_w>Tk7ZA?j$E#gHjUPG8+2h(u85?TrDA`Hv7X~3utK%mmyW8TLx~&&M+g{_|c6+r= z=z)8w<E01c{?Ig$XY;8X+78iCV^?J)a{0%(wfRxOw4<@c7j)@_jh!l@^4qYsl@!Yt zKM$+aTqimy7WW}_deib{R4>C{2Xal>0V)EuKzW-O$ct$y!XMoig8@$IE0DM`z@6xn zPc&){Y*cN_d*aV&44jeS?Ok;4!au)0w-oydi5@;474=)AqwZU>&e}d3q~rapu5{Ch zyBV|HOm!L1+Fjvm;v=Tl_p>}Vv*<IZ;I!db4u<I(<>z53W>aH&qr&Q31GIha=Robl zStn!elPIb65(6-u0&Q&a6(8c%SIKltGtUJ2oZ&@L)>t18=QQ%EN~D1zBlV+sH@EL2 z3^QH)p1>r7FSi`fz{9BAnXDS>_Fm<Q!}K=P<k0>ijWyb}F~)<zIQb%(mC7pt=uw9h zC$zg4ru*K7*FHt*UFq&m+=6+dYrnSVj3qgGqJ|PO{gk%GXkyQv4aKl8D9!@+sob(< z-}{Me4Li|7BfqZxq#ezr{M|KMbu~WDff$`5L;qUOHhfSwx0MK>6f3_Lv1#pb1xf^4 zn4U$rysRZMdv8|x787b!j$o&Pv)xrGZXFDQBnB^3g~EygHY4Y^#w2`x`f4imvTeF5 z$?uE0N+}dRVYAvc2@B}W;aUFk^#ji&|JgyEcxyK!&ftP+lTGhpH-c3oF1dU8a&XJ! z)4a^5_%MhT#r&Hiw>hk??4&hqcU_YtRZ4~iYEz#Aw)m&SSM6-;I;#>U3dUhu@-76Z zcY<ngbmFi(;AQGea%kqurV>3(FW~@kSX5(Hu{aLWUgRm>B%H+huNL>(tmK7<0mw>; zB>`i=Zi$Ktb)blj{M`Y+kC<F{KB^gu#^D!|Siw6U)2rfkWQI?#4UsG<Z&Cj8P>piY zMzlVIW%lcxF-HoPMvtxXO&Q_`oDWe@ixBF%!qwiLFO)kSQPX61N9rd9+W!(`op!}Y z&XNJWkIXqYsxA)b|D=R(?p9Emkh{9`WZa`DQ-$^*+uVLYo{xrI<@Re+(ZJkitT#{N zr6uSzB_xYqK6ou)#}H}Ld40yneLY7($xZtW`sLgHNgI<wy;kA-z~uF>)hY5%{dx<v zKukZvb$Q-@e+9O*))95QK~aA>>M;$(fzcC(&*^1$RdKR2P_BGr{EX;wIpWpQsj0?< zy<iW?<s!Fjpp+{<Z@W1Xxwkn)I~nuQgmikz;#X^QI}UjoDj92kGAw@K(1xUQPYHgW zPh72*^_@AiPlUU;u<E9)>}_p8dMm(kp%o_xmHduQ97<{M!NCE}fQATLA0m7C#Fb0- z5ToFR6dl<<VJf$r?0F@lB+Z?uVSu+Y^qa_Eyr=V7w(R%T3Fo&<1Urk8%lPn`zk5yi zN8+NOr4~41sfkOg91CGJ5aeOow4Pq*J;2h>Ux8urT7FjPE2WrsKzIooIx<?Y<T6=A z%8r(nvg~v=g4f-8RA($gL^Y}^%HT@=xv8EQJIqxmu2*Ar#^THQckhx@vT428Ak;m1 z^p~v<NyLLGbpz3uYHa+7Sv$WL&96ec)zk?rTGk=%AtHy|eEWp&af$=wwVu2m=wbPd z9nv0=D+!JXYQKLxQy$BO_pCR*t9>^8O#FKyn}gGbr*m4ggpOT2EQH*rMRY2JXroDO zr;D`^%!ZI8T;i`Ym&H>NZE}YaEyE|x)12iJy_2%@Z{x76U1{fgdMOf^X+Wm3>(;9J zA?*dp(vBrHY^3bZ2X9CR6nXHt8h?;1IPAaH1avb}y{2%$55mPI&o{V;2Aqa>*y&*N zs0g1CyzyDjA`Jy%zq5|S+xfGwmv9<{`V{2*0o0Q5GC`WGz+4=f#fpPOP2|Wk6z3iY zGzo`fbKqd<>Nn!FXv*dFm<F>MFQQXG`$#b6Gk{fmHpUwkh{|;f==0o092zVw<37A- zFNuS<&%Ya2YYM4w%;Wb+$g|N2+?5HC7w_P!FnePlVq5j=>584-tcAL24-8u}Vj=LS zRp;NF!p(>`k)7Na?)VrnP_S`jVGxuG3#NW&83QoK{z0i5ZJSg4T~p_|gxY7|tQJ$x zBJM)2VQr#&U*>sb6(BxLAUDVHE~VKl6$7DVlV^#T)uZt)s4URpIi`!@S$<!fGiRjg z#^yiWZ&wjs#%vysZ9h_{Ur1Bt|IGI0-4j~t-bU3|stIkrZxZrd%B-Dlzw@9$be6Vz zBtK4qtnEz1*ca(ylnk9!C+~eJpxWKpwOEi5S-2EL&RYfl>GOtL)B5Y)4_3drXFi;S zNJZf+c(01;K3V+!N&7`H&nxOtEsDX9rKDlFC98Uxj_FcF2%q2_>ZAffVf90c$Kz>C zloh^iX0K^_`$A>}Qk@Wi%m6lV$+z5LU=oH-_Yw2X#5=8MHH4zDJ{>}7E%upr;@(|v z^ukJ`_|8=K)Mh8pl=?(CBpsA5QrTXO{(5Dc7xi1kyNF@FI_maf3tY7@M<2J%;@vVK z*`rQ=$7ULCU_M2OhVY84*`<fAr}kAXYf0<8lNYM*=aBzQr;f1@VOSzL$gylb_&n)n zntR_<8$pczBo0n8`spIOsh){_m07S5)>XHL85`d_Uk7qKi;CS;2E489W57htA(!_x z`>QY{Lrl=RL%9#YW2On(VQwDcvGQqHb;%!Ifb%N(c0py~Ep|Ar{XAD2sgO`s4x#SX z2FCP5!P#KuLOk-T1wb&W>O=n3b4>>;P<$QKCfT*P<3Ni%6d0?0d?>|8tPj5WX#^6T z1)OHK7fO_bVZ5K17}&zdXl=x|t9qd(FaDvLu=>os(m8)92QPp>^_9H0JLhx7&cbIM zw{D<P9HYA5gS<VJ*@ui7?QR1OR(~F;lBixAnd5WA-n(6g43U?nbF$&0XPR>oRFS4m z3c_E|@lEgyl_h#Qhu}*zRE2m}7DQ`$Tg##%5W<fNbvHO*R&l%hzqX*f7r{|h;<))E zSYpvP9J;}UpWWYBTxE9{@5Q-4dGUgvE(JCp8lPWExPa`nKxazV!f!W>pb@$-NEz2# zN#P6z;!cM!gkXdW62QCOVE@#oju8i!)}ZCE2;^jQeq9E_yD01n>4+^`^Ci~-jl<Yw z-Ui-dzSA(<bl|UarNp6^gl&xzoloR!`t<hIOe*!Fw@XX&>9G)+>^P8b!abhBXdFC% z182C)w<(8p&I3~`JtA7DJmysn37i4bLnJ<1(;05YK`c!szCAMZ3LV)IPx^*C0;A&@ z%$BIV?>pz1^;jfsHr25iS!S|`aGbM@AXAB6i^plIk@lY>9Bo#6%6CW2p}+>5nlkRu zO2#Y=T_Lj>ykuKtOx`{=v-Xw@-+>>BG?QPKZCYB7VCMd6puk=j>o<`fZ%1uNw{sL+ zSeWyI#20444sepXI3UzDYd)zYH=Ug_*Z@%)szwY`<Y<RIvgC8WKO5=zVI#I~1_huf zd?+T!78Q6<s=SGg9D?anjW64i7KoA7eE3#+9r7Wlhn`PmfgS=X#j;8TsBxmf-tj|Q zT8(B%sF|RXqv_R>gAn4*vFo*-9HFoKoHXy>vRC~m&F(eL=~;guf%RItFK4tX>`4v6 zyj7l;XFzHAQf!=8Lc(ZPenejrFG)L?Mtuvep&ehyXMVv%@H?W__wZ8c6TDz5cZf{> z5?gyYqWfE9ZtyZ32mIQJtaJnK*!0~bIe&AbnLu9Ud;0k%xKshu;qR3ONI}~Q)Ljw- z*i(~{chsy+R~T>lLm-vzTO1)x9Gk9Hty&+uJH$z`%X0U#IDv*?>V{MzdVd6wNBq$9 zW6iUBT^L1SeLd<aw_#T+#SYzEg|Vu<rG4d;U?i~!_M%GlR>?sT#J>DU-N(JP>MW*G zEhc+e%@@mJS>}1@=iJh&-qj#!5-<qkw|~Dr>IjOruPzU67w^dd<ySRj*{F>=zTb34 z+%1z)0Awy)GG2BdhK{W87ELBuL8aq~wz`yZl4hA+(oLd_;j(BjRYMuUku&Yi$?&!z zdRRlUy{-gnCao6ik;oaaZBS`{{*hXUpt&0Hks4(4m}P9~UViEs1k@YPk6-8Dt^0y* zdVr3YuhAexg9PFrvE`A`hSWI7ACF-YNZb(P?tU8i6<?6*IrX~;r&m}P%hfK#Fz@;b za^~_Dk2p48_|urqzD!lB3~1mbCC__(0)WZCNa5FJxR+_BsFam#pxQb;Ne|{ABAxFF ziKZ%2@AYjcX{H^j>F`nGP%4|i?Y(>X@xjr|ve87W25B&H<Mub;@g8D>h*rmczJo9J z!Gi8C+pBI;&cG&hriTX&RO;p}xdJn88lJTJqmsj_1IYp=@Cjs(RHd}rAg~Tx2$gyy z`SkFi+CcpVZ(>BU9}Qjj(kP%q`pX=D>q^a&);BZ`zGQH<7kfI7B!xA)m9`l31QCL~ zYX{KG$~#zB3p7_Nc}LwZ0%EnpW3rgQq>^u8v+VeQNEQxgQ?0GpO$+y6P*$EDoPwhL zx%?!pi*`^lv&n5Jeu{%2qp<IjC<j1`{@C%A*fxoP^l_p6Y6M5*>aErT?Sc@sC&B8s z&xJ6Q(SCn-L=!<yzZi2Z4n~=!8gSM97)cq*lx~24VYaeo%K__)j;bmSt0a$G-_3x} zdYHo_vHC41=@ia`iNb&JbZ}B#6%fBnVU4OcYthc=#zod9x!NL_oy*%!VkXNgcd#Rq z*2osy>JwQml3x;MPgmL)l%+K4GI?%#dRC>Pd;Gj-rUFo<PEX|AZ<eL?Fth#8GFT;B z?BzCy4l#eUGph11zSj=;or-2<*iZ9~G47deIN&ul{#KQ$-F1QxCH!7pT*w$YLfbaX zCO9I<*{Y+^i)-_(1X;qGh~uBqCnkYSq3ylo5ql)Tv1#*+zoYx~Cvws}v5&`l9&$?) za(Y#GO!54feusCFe<JRf(x9Y4KEL?6&G!ECGXW>V1ie4$GvNx#iJbST`~kKIi390f zcq<KCUcC$Y!j4xHQ7wA$>|&T(L*SeJ0W)qO;a%m~2yXETjDG;~&3YF1^(}$M%bFFh zNoJW)zH+5nL4LQdk`!S5<l$seecLVv*05xe76%6c!SlCvPdui22rVt<z1%=A7I}+a zX&;?YaR^p$mFUj9XKw;~?ph{HlZy$=AQv()k(I4-a{1lm@UZspk?bCz;kF(<*8t4y zr+ihv=quJaq%0GO7aOeuqqAHxfFjJ683b$oJw^OfMQ?a4LU964;8K=J>OBEzsT;f5 z5{Ha>D`=r&3eEg8brkJsBv~jfN|G#~O$waqX8JNtpZhg4;qqS4O=`*{yP}K6vJv0- zbAzSaEy4GwN@5r*Ykth`nnYKQNz2F6+l^;EPwK4FdPBH%@Gk~4d0*#>E5TStu=#15 zCME~64?ImDLZC%E^=V3?pi-l;WoGGuE(^pwA&6Tj3zgh#MMxnlD_mv37Z%iP<pmq0 zZDo@aJcz44#i8fmt4ZAj_N-H~nf^4z&x|h{oB~UI*eN`D$5&|T0EWQS>S_x)$7E!G zmZkJ_-799SU0y{One=_IfowCUs_>7i%#2AJ6-&&s1<4qyVwM|yUOJ(WbGYqQRe7KU zbwip}8vE)So#AoZ3CnlYb=2*y??_TLfiE}X7+({oeqGyC#z6GJc2$DB!pJidyXfD% zeaAssHEF;Z`~vO!izoQy2C?S7+6u9fe|6Sz)-JR`?%uZV@ES!>{EXZdPlG>YKLNJ% zV}a6M!0#UXwc9_14UB2I4|#6`&W~0J{oiybIs?nYs(s#?5czBh$A1U=zOz3?LpWdH z?rM?{B!Dr#NE*I3?p25>B7KQVcUws~G#b7;LdOMn=0uv~QKlBn!##BR=P|Z_3|;9- zqI+ybEj9O((2ezC_b*t~xva4AVDeDLi-QBC#n!G7$@LD|B;{`{Zz4n6Kd}wiB?4j_ z_-;e=c~S6(?{=q3DwI5jM9nS1kGBqv=VhC^2f5Hjia5r%G6dB@Hm<U`lu}r-YBX>{ zF`FD&75D1G^T>F{>+T?w<X%k{AZQ)Z_ibM2s^P2&!Gm!-`R77|W4-1l{fZshUL1Gy z+&#g%J=4K*uW2@m3QDxNofLCV!)WRz@6Ym1msBgL*nA$@a`w>3ngS?%dB&=a>1P?} zi&XCMb8ho~*Cbs4d;iRb|5D(`cY_N$qxd5_kn&VH+(i%XPa!PSK2hZ)#DVgXea_*~ zg){ZV7^yO+yhpSSMwVL2+L#Ibl5zEARpsXsCZB2E@QQCZR|<cRty+r*yj093R<{Di zz9Fcc^%qo~&0gqx>N+g7n`$!XzP)Xm@g;OR6lucfa+_{jlA9|Zd~eL6(|h6x7B3OU zg>H^e=KPW>byh~Y-gp?-O3X-_i@4LBYg&RB1$JU={^dPTGFY6_n`P-wc-Fnjq#t=_ z$-+7&R6Brw=YjQ+V@zu0?OrJ;<Dvh}!?;Q)wxczB<A#g%s98vTln&_q6Q?kRwvgW7 zP{RY%_a0?Zk2<uK@7ueLexecGOyl4FqlFqth#w_MznB|S-nv&`c@#WR3+ym`dd|WX zI(_Zx9d+_Qf``0;zi<Cnx%PaMcwU|0ze0%}+i?iy6*vTCz%BSFDPrV#?3>0%JP?6J zPd8E>{uYbfl{TMzIWd<BDD)H6c*73uZfrd*)i{ga{bPiZpr02$`4w@cfGl;%-@?<& z>F$a<cSWWRWyU`-JNDK+^kc9233W@l_8nb6{nOEnxAv{Se<r5z_1MS2Uw@oE=<bEr zqi$GMO5?#>YKbayM=^}#^gKW)Q@}v=2Im3xry^nfS0|INQT*UJ!V|I5{X!^@`rp$F zkjGQgr;9Pk8xj6ld22X+jalXTW5Ma9BUi%bSd}(kSVy-kWUzUib84|Mmr`?i!qxme zE*HlHHR&=A>D+tf*zWJeHxa$(qSH)N)3_Ivun@|`x!X5fZb)pVpM%<L8AVR4%@uXP z3$3ptf6zgkrCR%jGS4mX??rxJ*mG#{C`q}47RT&DHs9U5cX+P}{i^kvx49_Hf5|Ah z!X4$ct7BG%<~>I@tLf(pV&oq1N#w-I#{L`il=#z=w(lUdVuKpRHCk_E;aFKL_&{zN z_m3@#iMOtsHyhN%Dlx06hx-R#(HrXNH#QnKbz6BDR2N1Xd|bSqv|+VciD4dMA-`ds zBGP*z&vOz~-sr7nIFGCaldd(_tPKST7w>&1URvZH9IOGku1gBpw`~0+P`#pUFAqkl zWS`@GNgr#Lk=wKQsSxzSKrF1|{492>-otSt9@655)VUT-@CZVgydp$3BtgTR<BHVb zQnjEg^i2ic4oZ7P9>%+xs@Kt=Z0%utQ&P#t#8t~D%Oy+DQSkR*8lwPQi(f|kjZ#Ve znfX*q$LLLz<RougN1suCFzf*KOh+npb~OHaU-q?7R{#4U<@)B6Nw1W=9J%b5_c>*$ znAo^0TAw1i=ev)Pn`s^#&I8{x`j1Ox1`Pi4*;gLvy6_Q||7fBf#qRp7`%!Mp&d?Ew z3MdHk5t^G;YWzfAmE8Pu%N*GYsW~nl1Or0m(hvdAZi2winNpm<4js$L8QVe6FYH|m zF!O7T@L>nQGA)@&U%hcMc5VUY-}lolu?}J#t0{cbtyLLWmVMqESP1P6frM91#~Mk4 zu4c3q-_dXjhh$4~=5_N$SfdBA+E?}r?QkJpXUUowewsD1U3H{zH8f8gBte>KRvQ1B z(2J30tO0qwIa$(}5Kl(V!WLP{sMq09#eD#dU4KGALYBbSKQ-F}uq%An&sQ8%0PLsB z^#UD3#gwkJJLdJnv#(p&F`?;8Y)9n9CRPop_)t!Cr0{bIV6Xnqssq*NDJ}Qhfc|ca zoft+k@-r;ZY4OaMUxp@+&Q{qMaPj5Q-?G(O^$Kh>P#Qsxy64C(V&H>qKz*gDmt|4* zGcTj;LUTq)s^C=}gW0%;$(%(0T=f<fr`GB>P3{J@C0W-WM!eV%sErM;rr4nQH`P`0 zAA~KY`zGItffM&+lv<fIx;E-6!ra|(&S@8KlBO#<7j6v1qDGh=?ezko<AwQ(S$Kmo zx46BhE&a5UpLy4v6SZd^%amRDmrlM`?#W{!Lsd}VQt$da4K`?5-MtTphTJpuQM&rQ zum<}W1=&X^w3iscW5a)D`;c|{1o^(qp@<Zo4-87u0$RIrx1mPxS*M*v;WgAa+(Yz9 z%C|%B{t$!JLH8_h2IuPa=`ZqetY=GE<>W7)OAH!n$?o_#J+dvk@(o8X-?o|5%1Wd^ zZZ_KvoR=x%CA8ElZm${KTddP*_qv+Tnf=p5jely&b1fv9N;%EzGHD{v5nVc-T5^<1 z5#!G*A_|@J<1kgHy-b!)+MsbE-7k~P3UkLl;s^PciN9_Q0leB);%2M^)S<XIggqNX zms03IAPKxbC&by=6$VecLhE%4zEAgm<p^#sZF`uo*kR!~I%$F<s&&LGrP&iD%PXaH zI+e;g4{f$sP&ai>YH#hx1^!-69l!9kjpb<od|Y0Xp<r0J)8Xm;_-Dq}0ZCfm^qBio z+pBq(8szznCA?LXPDi1KCe+uuY;yY-v&FVPOB*XF9xJ8&2*)#w_UySJWFUMP+J^<h zFLOz6FDwNx$q&74HGoE3rl8TX#IN>9*1CoO3kr5~-zSL(fKS2Pq7&;Fa?~(u!|Lkl z8v!Wi5SfgscmeozFtDSch3S@XFRm(Bz$3&uftH6C^NPauRC#ac*AkqMB?xzKV^Nnd zU8x`T5;XuzBS8Sp7)5kWX60x&<)E|ocGfSnoK_+^Bo<uef7-NZEK`bB{B-YR(TBzl zUG*?@X1VGb=fuGi>?@zXAK4hdPdjlccT&E2TOmZpEXr7+ZAyXC&?Uu!V6uJNc%j9r zf^SZo;uW$sn8F`>EfKrJBjDaciYop{UEPn^q!_h%l{sF_0}3<fIhdk=*Ti~Nnc96p zH%M<~J&zTj&S}4Zg##;!#nR1}X_GpXt{Fe<vFmT1ooDpk(UOq(+JJ3c+mF$GJ&fwU z)E3}&S|Zkc>-%J|5E*C(SO{nv>4%FUgj3WS7z@;*xGXFOveI3oD|>-_<gx9E-d(cW ze;H1W0Jsy7M8z&BN`B0@*FU5M*>aLO7L~pq$El5}Wz~sl<+ULmsO=A{|2gkVg@H_< zZ+9;lDoj_%?)4XIs}=++uxM8p4>c4HSoo%X{mLC7OAN!bkbb(Ve9w)3z(4R5*$@^Z zI@)D}=<I;oWaFKw*{@Kx80(|nZ3|g~2gX97HBVo}PEdXp=pXe?CpZ7)!-5!Ul3%*` zCJj!BE6lAwW?GEJD6DXVyHLRbt9O?!6Bk&9eq29iYu=Mnm*nnQm-sRG49Q?JXjz>5 zWoxh1@dv}}k-eM5t96F1hnM=HKp6|d%uDD^f%;KX;_vjVuK}v0OFi@q3rkh--vLsw zk&x+q4SBz^eu5b@4_baHXeH}J6eetQ7)CwPt4U`;TCG3cMCOu?;sl8j5zxa_nY|88 z`6Z2C8+3*Oj|BxKDx2{ay3~q7flo=BPn;rx$p|U|OuHrygR)8`C0%__eJang@O9hd z7F_U{&ZfAbn|w%FFS8z)qGbt#eU^r4(m+<}=W{42LUiH|4N32e4HFAgE@h$lX}SM~ zSAgYr6mt@`Qf=>gUQZ`Kva>@+t%vSoHePyfr|IAK%Hy#NZnmL1TD-r&YQ|^|+v4Jq zI?zn%KWrjhJn*Rr|E76vwvtu}1k@5?576H~rO?XNDi^#gv)>u~oo3y1v{1-gQmi?c zR9k$0EON_HCTKfaV^gh9UC)S%n77bo{B1&n;1K=C3}sOlq|~M;XURv~EsK6M*%?+I zYGjX;7lc|%oMN&8;C4YMR61}%AVX(;o*3iOvO&dc+`S*>i_P|z1ypJVWq>p21#}wj z3uM{69eSi5EwTnfTYaSur8ZZ3JFRr^O%F?4hv79HkT3};+0$|d|I?q-@Ghfa!hO7` z;G&j~8OD2Re(qp2h{)~JM`_Ka-uGYB8|5j|P;6ve1g|q<gl0m(UnFKW^=k%UnxQS? z(sR6f`I+})jX~;DQ0=3FHK!FNvJ$gvk^0%WMS&oj2am@eOQk(UQE%LWoW(Iy4+ApM z^<<wA>ZtxiIcI7BEQkx`4ZdZi9po8L_xgy?cK>d)ziwrPX7l0)!eo!3P`qMpm^<}g zg8t7T)ydd`LVr9RyRs%~VNj!{zV!_m3^QH?jEUsb-xF;hDnAicq`Zw4)8TM_bKsN& zoN%Exwjj1Mhn-X^Ju6O;7N^1m2eN{H>3%W3!!Bw9<FjEC3gMl7n-YO!Od0d(js&5l zIzm8@zdkFs6>oI(U}G>=9cym)JkV;-UR-%k`2uVT#`+OaF9<<L$~hru;${P_!M3c2 zI;VAIDx!c2-gKY}*}VmVb~9*_9`k83ZZDyIPIpslyOfh(r;$8RL{Zt(s|2vrTBm~v z=}?6{`MsL94*K;dapH)3wB7<$XFC;{<)RMqVsD3TjaO|)59Xmjc`I~GMxj&y)cUvV zHl4J=M})iSi3l=WzwFgqPiJmA5NyTufJ#u6<4-*<0zZNRqD|_RWonE?#{tmzB~s?N zEP&k@nnTpb`g<flkMWU>(d~LLpZMRWTXk|@1kV_0RmAVUpWLhYWbSG^m9+AM*XuF0 z=5`#Pu5srB>TWRln2Q%YUaM7#|3??YGeq345*Iwo?Ld%Q18^Qdqsdp$U&KMQJ!=yU z&q?s{5fB~2MR79WNwIO|YP`x#Y@b{Q?dzN-^${_ZA5I+M-&oGOJ9l26vgjBp)#J5e zucTZ)gRv)LWC5K<=F8eA{ZkcHF|>S=GVjq5$xj2*B@wl$On2iAnID@Qx5b-mr$r#- z{bP=h#K22^0(<SIT3d)$;T8pdm^!y__&FaqG8BIy%GVSo57wqA|3za@c@(+&oCTeH z4Mq#b<>7R4_wR*?c^8BNCxpql+qyEO%AJSWXu@+NA9dq#SdJ?!usbxNLJ13KAUYzR zT**~OXA;K|KbZ-%)NALO)8yz;P}QKNPKp@N#!%0(c=yTGCk>zLMNg=s^hv~pim8Yt zcEQX5p*6E87rVn3nQ!QyO%sO7eF9UyOB56e=q4U{J&ID06FGP`MwTAC&U|lMu&u3( z@n16+L>hAGQ5z|Yw7)t9oTgfUhW(5}O#7$}Ra!4~KTC9#Bmx&(DSeiP7L~1sDymZx z)qFU7_ZMurYFJAg1lgqIG5x+OudTEW%pJD*!sFKY_=;00V&_{5dX+(?e=Qh@XH%Zx zg#t~d>jhqf5a+zk`SmiN&GYEge@|`KK>x`9=emU-y$Gidu&E^r9oy(Qra#FnRd+k; zyH#_ta-ZQ!tZcqaJcU{Btp2#H12J1*jBX)$&UQ6d>!$(6m4R<U^@!v8k#>Fvm++r? zr;?=!NniePkPmyV6MIwrHJmdYNMtlGj1FVhserbvv_i8tUFT=my$PCzb|3TAyTaaf z#s&qr-;U}!+`5ec&(5@N=2=C@XQ+4zPJ+Y?%ok(Qp4kW5l!0aJ*iRH~9kz73>SHCL zTa`PkAqK&><;`q{6IViq#rlHUMd%2~?iI;G>^@|OhVSp*?g?L>cI9GQT_P;HiAuTu zAnv$jf(Vjnm)UzVZwvNo&{VD~kgIbx)BqfPwoz3zPM>o=^9Z3%!x@nGMD^siYi#z- zpKpl0z=f(8UzQYk17>vw{yz9bIy4E~4rvcev59+YH;@(h+84-k{azD^lq}I9FI8Q( z-Q$VPQxMJeQM})}ZX32z3s^h59Zr476qvY`+^c)@?m5pZrqQ8h`7z1Ggg@u!=+xVe zrTZATzoeQU6^80YkL*iHQ!QSmfp{p;e7bU}<8Hac)Bhbobm=*pR%d<5KzsVlb?}I= zK^^(0H7P#YF~jihms{o&KK#V~+{u<aN;<ed2*#<7lnY2Gvg+T6IQ|A^91jv2%I18` zU@R06{GRgHY8GL~l*b!75ItF}YDvavP#<3y3Y?Z3ZKTJk|K66{lVjVqs~Zu%aYG6U z#0Bebos#+z7;{fJBs!u*1{AX~3L{voS3PID(%iqUf4=kZIOccuCEvAK5as$&=9sCb zo-4D&4LZz7ITk5q_K`8%vM-+x#-xkOj9Ye1NByX2>P+)ByCr_9eMR_vRO_nH?vs>p z$*$p9r1)5gDb&B6755n-y*fYRPsUgEu;eQt<ayy!ufU|S_u~PxbAu2<HyyUDd1hOq zrv1GaO;EM5!fT>xz1lfxb=7RL!OoyTnvboa)_FSziqe6#8Zf%m8i0bEqz222;qOgf zj{L0$=4;I;7n(R{jBng=3+>9rBX!~QeJO#?)Mc&q9+hWuB43pU8E@<tYPVaj=MzWO zgHVOo?mq`_%`uUIgMc}FSRgO!-o1i1?xQ3S`Owm6e;%V`oh|t{FsX&a&Ogl$1BTL~ z?W}FRf%M$viA~?F|5`Bh&27IaodQ2prB^<d-X)NZn1{B<EuLe1q|c5aEk<m18|^(j zzcu<xZRh#9-i3TPfj6xi2O<N{y@`Q{M6;7Tue!Rg_TM5joiF8_Ci%zLFrJftDp!tS zlG$JlBt{ItBzeDm;lYGikBB`Xh@@(muIt+dBnK4m_C6V3il|ACFGAJ*w^9aoS8zfS znD6}zgq-qSwx<jH>3sE)C;b)B1gxpx=f)^HL;BxZ8OG#kJ|vvJbI;#mZwjOaCkZ3H z24pPEJ-qb^YQwDqB7c_s4<$u9W}EJdR-rJ=XvB?$2-^ty1QYZN58$5xbjOEX^2@uv zQCa_=LNwB`(sUq`Sau*k^w&qQTSl*Bzs7dQmAGIgCd}<)Dk`Q}_&;TNkA;~UkC{32 z6&}Z+b_f#z*cI+_9Sscjwb;9-jM@5sy{$b?LX!a05-__*gaExPk4?7``YicE@|n^- z7U;hvd4HX5$iYjq06AMwq#O&-mSj&2%Fu8nkVdl;P~!Tt-;wG6e%-J1_R(}PY$&d6 z&h-6<RHib>hHrmM&u{#rGwuhhe_2iB_E$vmX5RSqNlT!)u(ken(ujv}0j@sPxy?Cp z!nFIkL%77Ty4~A!TaN`aoYpNCx%a3`eeX(_Vg&=LB^I}w(*3m#xuiY2Kj7sksm#_U zxk)xL1Z>=Q)~XguPrZIflJ92X@oVNA4IdWRh!OgrX;#es$I~rZY<SN=GGZJC&T^c7 zAzpl5|08Dqs}NG)iMxRn$t@l%zm9@gg2VJ8NxY6HKbLLkq;cdiPa`^eA9hL{lVa2n z17Y-e%*)mr$?u-T?l~)o2csObMKrswnkf}N^LI)?WVgfA&mIJKP`hoJGk;Dcjmu1a zqG#){*B%pOuX6ditELqkIr4j&4*p`Ys?{RmXIkCkfST+*2PP{|gGHaQ2c%#8HiZiD zhyy<#8qiT_v=;fr7S+XLUZmL6t~4zv#xQsjRS~q>M>+n&f`FDt0jFTky2*!Xzc=7O zN+_WJf;aDc{u~k7?n&zl=>pSL5sW?tAcodD7AZ^w&u+p}1!Z^Zgjq2Woy1DD#MI)p zC@p+VZ?|b@=0|Q4Ve9XwvttXB=Gw2jYV>`qv<jBrzDI(9>FXwSYp-(ftZ#VLfF^J> zv4lu^tFoDsZ%&ismKWvttU{l&a$jc0#*_<(y^IsRq73r=y>as!xqMF#uQB683Trd; zB=Dv5L~f5!qC@hE9m;|lv}S=zL-qwaKCwMH49}1&Cnwl(9?J_)Ls9o6u~i*}cx+F; zVNGaA7>Px8u$ypui#dew%1SYcS;Q+iT`7uB9riBeWJBl<FgO)Wgx<VIugmKElF%5L z#o0zHrPE6=g+DmC(MAUCKehCEQ2fhC;W_1`#9txedYCw7t-1AJT#xLF=~<t5ug{Vs zP?7j6rNf*;LR`Re2BE4@MMJXdPOB~c>^cS|&}&<g)@9~7Aw&t=2R@#f9CI?93cJRS zQwE_*cd65T*|DdXS@o3-lOlLKjg--#+WKR+s_V|&E`^B{QOPyNEnh$RW(}(}MGHry z19dIP_G(svW6Q}79&{Qe+T0%WtigeKVbUqtmzsci!z3&(!*8ps605ZhK8;6-rYXM` zXq8vBa^mC|K7iu!J;}XBE}&Ub(%cI~>h(kju;Jh%4X`3rfi_|E(UXc!Z+a>aZ!T#s ztj9(qf!iDl!C`VLbH&*s*^|fvt2ZZGo`84BCh0FS(c})+F#q0KyW@xu*~t4$BmyEm zuHae}P+aGFyjYIH?ElgVTJrCu;VlW8NLyos_DHsUbbAqjkpAZO^sI3YNfoygI%+%^ zByKOW{_b+}LHufLz=sNUlVjo_6vf>4LKe2I6v*G_Q}v0&TU*7b9H;O55*Am%Hyj%h z+QgfgT3Z!g&69pNks3i?qh+_|*l&EGa79urXF+HK0MxKTz4}B-AeU6ESK)O}j!(9@ zAT;Z{<itKtCoa>sH9sTep)IuOhN?KjNY=rwF|G?V+?DYk60>hK`u51b1}I7>b(jD| zDM73fbxo7BpEvh#5MAwx;Ue&^7Z@3K@85U2Dmpf-5P<?2!3xAIE^>*P^`cw#dH^WO z|5NBywtdQ!6=0hwMfyQG$G2E*ahR%N`TZl`h<pa0I<?4GPGQFpYHqbI`&CoFM|?ww z@4Vc&BwH3GZmJbp*DLI15@VE^I3O!AxTI@WH9m*g`$YY-$!>5P(imjkaD&F@fEm9Z zO#E}|$M~4jpqRr$JPoWIj~N5hVys$Yg}`&0{JoZ)sCj8SO^5)c-RBps#IXIl-G=61 z!_sgN#|i6-Gv7qVnc+3!5pS_zV8w7~gdS6`ZL7{G8q)U@q=_im@4Wn*EL+F3dWTs% z-;=8`A09guhw0UY9!cvRJz?ReG~Kn~<{&4@CNv1O!Cd<IXaDNpc3oC=q)eBI5vl*Y z?1tX_<}-}8qq{cqkZ?UTn47;XVs&8*yiL(e^raRXMjVPtJ~G;<|LRFe9}?<3<I0Es z5i5k35q~T6@j9kVon_U+RY~P%*uY~`^6pFbNbS`wyyjCAX`Xs#ax3o~H`LY&pf~cu zt5>4-nLIWX)*lAl9(uJsnO8Li704!%h6#mqUrdPl<ZQbj)YV=zh7n%V@5u<eIc|hy zpb9@fChLJgz>*<VjNeB%h;PDm4U$HZkuXaCAm7R;w309EIvMp=py8kxqvWgHjP_G_ zP5LaZzDTKg2ylTPy!9UP#saLbr20Hs0!=5nUUV!3i5s;Hi%R_-K?C}~n0m{gw!*eu z8+Ui7K=I;Mio3hJy9Fo&DQ*Rd7PkV$ol+pUyB3!~gL^0%igo9CpZD9}{>Ly0Ga0hh zy024?YpjSQVKb_B>4F2LhXy<(XA}=jYnln^svv`#!!kWO8$TR`^$D=4_)sZ=wWcng zCEMa$A|Of{C3l0!;LAzQ{H`1abwmwVmkHV<-NnjiC^+7U4)f8h<x6<i)uu}Z27vWb z)z-VA0sjAV81N5YlYDX<Of{l~+sic}$*xn!lY5xpUoBz{`dk(5EhcDw>I{Dn#6o}G zctW_Pa*U;PmBVnU8%%07m=za+XQ%ZKx<!;=Ici2JL&nBzH}lII2LLkkCc)rR+RILs z0~fqGdEYDciU5n5j}Jzwu0jSc1DPItBc9Hd`E#_nqAzp)mW>`5Qp+YAb1kB)ELq1Z z6Q1Afv&}_u)WkXa15#RpKur6d*#m{L+jZN&2?6MFDc-!WOEOo5s)ncz>aI?LmT#84 zK>bfmX7GNoP;!T^)rB0+(#u$92SvJi6&0S4hyQ3@M+or6Rcr1@b}oz-q?dB&{PXl@ zY;5O@MvgYFK89@-!^sp>l7~DhxOg<{#xGy#Hv!{{B<QX*J`SEH(2pf?#vL_@8Z@je zBu)CqZbhkCr(@~SietFhFkx+nWROwlGx;>SbP)K<q6aMTL_009+({IBgjHivSQ=}! z+D4MD{jCe(Yg?Y9YuK%J?RodYDjKvl7tm-3gexj>Zp*)2gkj239(##)vUi*EHK=L~ z7WwaST}F1tPf&g1_?PtIqqWa7i4CX@uuOP}U6;F0TT>?&pU2KQ)aBBs2<FT<!hw>n zcl}PUIP77=NlPn}AX>;K6u*eB*%Wr)c!$r;V9C=J>MV11ISE-gq(dS9Smj}hzb7$4 zo>h5`$0dVNH?62Z`I=tJ7;c1aEm_a@atC>h>`-D{kuT_<?U{SOBeNqbtcLMvCCZsu zJfgN-Vxwj|xD*<jowDO}7-D}7z&G9AFXWNA|0$0p(@t&0`;*4UD9E75l~MJDvYPbS z05sbRQ6b&%JKy~NoABFOIZ3TUk4q-qz6+^*%r@ueeA2V|_~&E49|^vr3cvUvX=-of zi5g}cuxccKzPptei3x*OuxrSF892<7bplfJNVR!>T;YC<;xNC?Ov-8rH7@^n-ft^k zEqGb7Nq7@D@<|lbcRO6h8!{4>)xddlDYjEQe68iTz_#pF`?{yNwZZwA^|PwWD(+J& zcqyS1*lbab7GS31MEahVk0IMHSf>_$rQvbta!R3R8tT;`nSD(DEhXiIP^J&VtdR8Z zuqZSar^g&%xwbm>elBEOi^%WjxtKwY?mtc}+@&3Y6D`h$GvMxTujPNs(eSgWPswnJ z!vFgVc;S66>%W!b|3EJ&uUihJ)r%5BBt>Tn{>lCiiv#WpJ5Ax`oO;nfLSo)&HO>A{ zA3rqboZzu;Ep)8!?0?4r`h6~h5Ec`-V*@9cz#V5BI2(lbKOl?esB7Z>mnW?ln(Hie z`Za_`x=+zN@Op+Oys}gDWtsnyWN$lc?dxpl`63Pf{*-<AQ&&z`#xJEwgQAs2%OJa! z-Lt8_OXKN6-{VJ@h|ZoG4SbiA*5?oLkD%AyhIesH6r_ponNRp=Q(VdpSu!`sLWbe# zBE1RB013K~BZr$NCL$gj(N7SPaWTyJp7U2ju74bwuS@NGelNX%%leK`dN1tjNqtHF z9g)wz1&V7!m&;*azx7yZRv!=G0Qxw2+@XAF#<15Y3AyWlUk?H%3S2q6Pzm}AwG`|1 zEXD{h@x`QD|5a@Pd7fyq&1BY){)z?}rLqXC7y6XTl(0z$-F_>zN7wi8gHQf`Q<{nF zYXD7+V*Mf?_|s_P%Xf{7xLIH!N8cu+_UtyhY(YZ<{jY=raTsUxobSIgdyqcSM?fQ6 zl56X0#CW;DNUqS`uHi13j!6xEuN{xijw___VWWhWJSR<GvLRKF8Em=mMD0@k1trjn zz98|-P}a%f5As>PP{1l$s}YI455|ZF{CG10Mh<S<o(vX}|C^LD-zOuxhY@Voi4Ikz zaVz59C*|wCKwjwUEvEu;b`2!?&J?|{^?%=NB*mkcqWqq*X?XuAzfJ@IUI_WU-Sq=j z?Baq%4!JD{GQ~Owmk?n2`c!DZnOO|EdioE}X8nb#F**_rCwEK;unCI;vSZ<W_~`l< z1;lBj#$guOlFUKs0BP!Kz`sqUUCBGmQ%N%lK=2yj?Z^y4*>g47s<d_H|4Z7@RaczW zDKC@$!!l<wI5K)QXe0t!@%i_lv_`;IP$bu2+&`{{*Fo-zRC+|8C2TO}t}SV!rR(8} zCpxGvrDN!KYix`Dh+UyDUOLZKLrDitaFQ2ww-y%2t%Gi-LH(Skahoq*ELq~5y&mvH z*ku!E^#OOx=Fj|0-4CVt+%B`0<Umg1F6)AGvcp#8wIKS7Tzye7z3m?ej0}R7Lt-9v zPT1!Be_YEYh$eKkob8}9l*J&74L#!FcZ+&kIb!`13DmNIx@&F1?Ft)eO3CGhgJ1)j zBLR5TB+mY0L?ko7X!+i^uF<8V;7twaK>vh@eRB9b{+M*5f!=S$XQ2fPu-fH)YEKj# z7wyiX5fov&f<}re63miuVe@JZDKLr2gB%#KvtTPXS#SlJnCB>`aF^5%<g0v|v3!e? zO0xg6@>(V)`dMoy4@w_|ou^d)8``5Yo~NAjy~2fM*F&a5NWBn8cX$!SN<C{M6nG_8 zZ@A<U{v?*uWeambi5kWZG1-YI2ng7MSa6zxFp`JWxGbvc<;pkK>WJRrkZu1WbB%Uu zMVl`C?R^Avmaib(?@Z{3sWDnA$dSZNkh>dR_BC1OX`daQ)Kf2R{K_S$9>>#A*uit2 zt+!0t)Bxc!n%j!t>GFwn)=iuwU&nkC{o<$LP!7)yVSC49vX$a96N}_9rD19cI7~bg z&5wddh^yW|CTB@R#hb7wXjCg&I~{uN2V$i|wefI{m{ik<q$;0D`jnF|knp_>`$Hmq zfu36R`a31O{lGwe6eyn#VI>=%CGTK1iVN1dPsF?N0KeGNsL8Ut-D+)sglSn?Mu~mb z%I9IunzyrJnWzSxDE*T9Tr^9$SYc&nkD(&LyS$@VAT@<%d;`G;?C^tzV^h`@h5IfV zw>;wrSx0(^??ynhe+)9SzbxTm40k=>uzZ!T>9VF2H#sS9LV=EEHpT`s4fjEQiJ~(e zqVhjVaJFQqVq@t%z)ZpWDtB4M6%F+J>)%Y1(NT)<x(${~Uc6GNS)xC>tZEts2t0)M ze-~2I1totO`8S^uTj6`ENh<ATUC;)HqC+3SuD&h0dNJkU4zX!wQizPdmQ@i;vJpX| zkNA&NtAbDaqN&8bR!cut*!vGkS%nw?DR0pVlf&ss<Zt^!TcgC>IbBO7ZCnE1!WFf7 zg5vjDds1h_3+g7<Zj-jRBJgwFj=*=tLo9Fca4{Q`;@1Jz(bvKb;!4JgMU37$TM5R6 z3NF%AKVHfpq+im1i)rGd0jJL59Ixo?UDy;@cL?S_#7?%6FmEJaAL%z{#lBCLWy$Qi zr*3R~RUcIuNL`Ehn=KoRZUrZFLV}rBkww%W3^Oy1jsME96EIjfM&TPAT_|Y=iKMAo zeyZ|O7>KLMTiEL_Ec{8N^ce>#Ph6p1m%0%f9z4RvW94*JyuH`?6P<gj*p#E4lVsOY z@QpWk#)2_V&9sNjppWrR|0Q#VznCDMcF;F2k?I0zer^P0ax{3W0=SerHd<|zs5+#~ z5i?&f6n>{gd`zsE`sXqa(}UDv9Azmmj}f9j{aYVh$DQJ<Ir>YSUQx_%lLuNVn^qu6 z3xAOQ>00>mAipmXuuI*ygpLZL2uVh(SlgH(1i^FDXiKs3<m&9PtqzuHhyf71LaH=j z0$oj306Nu`8%FA1#3Tn&Z=wAR&si)*MEePb+5&AGC<)WkxkWW<n&B+5A~r5K{<NeZ zi`chv0Bct|Rj^otkV;L8_c`18goldhD5p4v5xX|WA*X=XcUiaQh7z1vft_RL%onN| zkdufq(#p-2st$5z3HVScE}sxuACw-CCf+tEBiw)u(!&c<wH<Nbh^GepYhCGBg>?=0 zbNPuIkk~YqNWRLNjbfMaX=_-c*?e#<6-0G~%<c`G^@sd$>z#(j2~>&hy8G6Y?qe+G zlMoO{9{b!*rSDG4@^7i=n)HCZ*ECs`u`BPXg!(<0LelvP!n<Ov{1-CdAvB@oj~J#~ zmiF0|qOXAefNEIzPXdT|9WN)T@<P66vMx6n-+|B%Iwzt7l9jYr0*+9?ly#f$^YW^8 zY^o4PectIam2k#m=IHaW0-Wp;onkfnmDtkegS9cz7!kgKXZWcxwOaVz=ny#~`KQ}W ztBtD`P^d@>z+S1YbJ)-?B!9U#iD>$wf#NoZI|YDofB4vUq^aMPm>|P)+LpkIz{6e^ z5<1j)Ru!ug_Jo9lpC<yP?FhjAoF<ZTCPzx{lNhzm%u_Cq00k{ysBTasBNY~!-O|YW zFN{d}C-xzDK%w-Uw{qoh)<i{lG)47cpJM+OhHqtaP73`SC{?R0!(U4sG^@7T_dM%g zDAh5D{eG8I!%|1k!@K%Ccd1Hr2IOm+$0EhF7%VWLy{)6ZL9NDoq(*%vvehUGGn4j4 zYV|7c+|UEDL$@{6^X0&ny;Hs4U$P*~6+gg^>gg-abRktsf?2Mw1)tGYS{0&DRIq47 zS2ihHL@IAZYt~0>=+*Nq9@IU$jW$d0Zjyq51~RMY8I+T%P7FeR4yY(s0`LN}DTA9k zqlrJz&*<87KsKmHVYFa_FpXAmD5S_{$rAz%<c*Bxk3XIcY46ZG<ap}`ILbxg+c7q| z`eA}R^Zm_V6*o5GHxs={1u8slsyI+YyMKP$*|LMQF7ev-s)$aHcp!TC7xWeps_$(L z4Kz#Jm4!gXKz6;!aVGHtTbGdJX7tLpKmZRdIHp5OJpWJ0a+q!URZr-Qp-*y(Z+iXA z#x%dN=)qn?m55{R1>@Rn?aQY(N;-jMiHbo|lkdKFUA^K!+cxJ(sj=Q|f&(Kda`l}- z*g;LzbG>Xx_^yt$1FvY{7UoF06CR$Sa3-JzNb{DU78;T8=>X*PvFjSS|Ao{Sy)vi$ z&d6fu%dW%b-oiAavuEQ#p{cYDb!@()FA{8|X8^21{(TFKIJA_64LYI)M`V+bMTxcY z7IP>Oz_aU;<s-z+PSo3oP+ZLLN6}zm%Wo|De_L~Jjy(q~ZbvbFv!nTwd(F9!?|J32 z@Sxbt{s#(jW3IUfVyHG~bOpRhi37@Vm`E?;bAjl<=|6PSg^~Lz2ESGP$ZGWFAewxS zLLo(}tufgi>~95tQ-ON$%OPqZYg)X%9m2g>WXw+PK&ou41(|JoFGScKR!5GM^=E;! z!Ez1UD3keQJ1MDExu#!{hr|b3Oe*Jzdg<QJ<F=R|{DT4L6U=OkKEiCs(=N2XyZ#Z? zWqbG$$NBTxbiX&ti7Fw{Rew`ePwC_L9X$wLJ^2?P%E5sA<xuH&;4t&ryB3s7fiHr& zX!VlLMCO07qh<tnfoiDo$URnWg@OXErytmTottkF&2A~dq&y78RBLO}xLZgdGen?z z6Y=kc9aNC75@;gDna#LsU|Q{J4H<lcMKlAEEKgwQRY19)2E#HDv7Y^H0baF_c|C(z z71jggQaQm^ES!PUpe@5iHWQo#K{&fCQdRQ~KKw6zXE<?02a0nhe$qSx^YJOCVlWk< zv1=|%E9sQ!necgS4TMB$<oj$5NDv1ac2nto*LV7e2^xn;>YSV~jn2W<5)rtSjitG- z(PIs5`lWLy1{!*m{eXC=NvbMQR!!Zb^g`H}RU*4&Zl$j|g}##4r25_wniP}AC2<d; zt4hxz^{1*Z-||1h@;!=A3z*SW<}Gn<5I;vIQ=`SiG~=KLk)+?wSuRYR>Y8C<fT&9+ z1&engZN7@U$2EvLWNsFnf1mp%>yP~gXToXRx9HMmA<&uo$UPB_4)CZDmNf`mIU=Av z;ZNE-X7oe4pc{~Ci2jBEZ8Vx%%9tGeD9{m!N;EuPrxB|vB)XRBl^bm7fKMDDwv(>r z&`K<XN3}r&ni6vhtBmUUF*3Nsb>6{}*iOo*?sox6rpzcq0mth%;$(0|=9i~3+Bkr6 zSA}eXnHUK1-#@ByP{>=8XOT)Kfp5ia)l;h)9sjT<OOrQ4sG|rq*?1nqT4xLC>hyV) zHO#o|3J+{%<2#t}QZPTbHM{dROxw|tSNpV!Ci|6FZn#p;N`1yrUG}MN0BsHQxUazP ztcGu8f}EfvoYz^0aB0Mq%;gxOX@@_H$U)7{mw_5&&HN#Jd)7nWinP`t-S=)Q@!v;| zdYWE5aI?th58N3$K33peJZBoZ5DH(@12;Lsrn$)WpzqEzqA6RsNp7URq&u;mqTp)X zofM_r12s$2?I>zgF1xP8dC}F9dy^;E(lTHVa%Wm!io_>?UO(br*@q6iq>6F^C|#yw zcI1vJ4Za}w;)Y9o7=zh9P+Ny#9cq3aq!y1D*3Tg8g1E?AG|Prumy@|JYz%~!5}O(5 zADVDyCJGn}6(O~0E>N#nCl$F~QiP6;i*@&Qks%tRejJ&4?;LK~9y-DATK?M|W7n!X z#^4SkQoWwNPpi3FMOf(<dfM};e!~~+l6sP|{m04t^?=I2V2?Sb0lt-vDN9|=meTxL zl($Q215Lth6apJ8SkVhZ3J{MkZOV#|uDNU`>N%AAtTsUrJLU=LgI{Tmvg{O^ZRlE} zTHlc!Fz)LfY;L=9o7g(vx~5#Ul!B7kwQudl=iZ7MWuV`>n<p?hEV*CJYWNgl6NvIE z$0t!VFlgzhw2Hpndc^cA*oL!H>WB(z40Sp|O7uVD7e<2KaSD}3=?82&Ykbyg$VDN= z<vRGVhv{yadA8T7zn#RI9kg7~_FGKEnKbgg^Rv7n`X~j@BW*QiiT7u`)`WzKYoUe; zt*9;*M?8PLU@;ldehXyqU*T89A|GZ*Wn5F`p;GwM)D5^YFmI$AQ;q$bMJ>yg)aGN4 z!@oqQ2fLzu#8-_JEgwa0tDwJl^zob7e>A>kS^wqg-o~FUbZoud^SzYv{$OgP;Tx<n zy=gI$;!I*CRsOd?$+C2v``dy#@F3U;%B8rRUXh(eHLJt<?FG_gn5-8}1hf|;rSov$ z<x&a-6{j#qxk{!lsv3Bzou)$Q_KqC1w0Y=GN3PgAe*aUoO+J;w`}0W+GuF*DH%LZ9 zukWcuFO_vzVoQJN`9Utjte$g5q3c`p>fQ4X--42oo+OL67Ir-92bT%Q38~5UZTB%B z4#O6XO@qnz(?$lssww(82Laa{heez1@CSwtSKF2#0NrCOsJYKX@#bav#pIx*#pN>1 zcv}j*EW9O@Nzf6t<i6^QAuRG`C^_y^2mI#2Gjlk5PmcJ98UTBr5;b}NuT%AHzhdM+ z{TaU1{I!F8qkjd3_(h&P|K@fOfV<BkaPwI#-xk1_9;dPus9tFXpZXmsUrP(c`f1%5 zfxZ9sA+K^dPq3-DQ9K~LG-Tn8H!YBO|L=C(e*Ej??<lby5I&zZEe;~cL!gp!i3Xy% z#?uEET#d;tpS2KRJMkx+2b)Q1a0Myx8WS*vXYe@YPZmeJ_dwO-M+wmcXc|#Gh=CTp z-n`-?!2T;=4IKzT8iX{dqWd>yt!x6l{?x;~x`rQ&oMv(I|4ZrBhI@c7IlP13wnwHg zx3R6Klz#{S`u~CSN}2fsR==f<LtfebxAGv#wi@1*)?)Wc`+r};jRb7&cou+2!daJa zX)JC^2=Z$De_#F|0er|Ex^tOKk#HF>W8O}FEJv;NA7Smw{{U(%*vs#GgfFK4Zp^@3 zqzqjCY0p$wy5Oa0@oe|rFjm}~N@bP*-qZsGnWK8omTK<Mm3)IIKObn?Pa~P^uFrlJ z{J8n?#xqQH?NlKb%;Mle?z!-{%y!p6qFb2WyB4N;9|S&oHkU~uy!)}cks@X!Mfqzv zR}`t6Hxssx71vYw_M4m`&yds)pP%)sjqR0apuV^c>dO!)RKxB@A@9WWCWLSfhTP`5 zQwkoAo0xTwycgzERr+?Ylk+zbdI^pW>R!Rq7yRS}>?o0S{Kra^h4m-8QVzn}5^$fo z7{q?77deXvyWJHu8vgPRDVZ<hYXo6{Gk|12hAEY7qSO>geX23Li5UbM8{2_o{Cg$A z7knG@x4QjkEND5Rd86m);Xe4}Pdy!wRE9Dxu4u~|^3}#g2xNt;<kwj{8j!m=54Xr@ zc71d^<4ARSD_|l8yG+%DW5-Yp2NO>$aY1xfrKm5@AJU1+e!xFkR0pwVf|hN@RmO1k zCgbWuh8xds?{gsA^VVp2V3W5SUM4N&87=sR<>-y3e-wK3UZI02e&v|Y-#^-w%#_SO z1zt3`K1}3SL<Qe0?HEdeKMm=0PI{c7NzrY|eZ4NA^Z#8fi_M_e`x&DW4t?}&=CLGo zyJ`Cwj8tOon=P=K^fHe!Y(wKzJiXg(0#?<2T_yFD6+8e&*&&<D)U5MtCowg%W&~JV zpZ^Z_(=KxLj-nR+)kcyZb^h32#7CC!^+Va0#|=|HihwD{OY$tCv-BLnv!tG6TdlgD zGat4syJ&;INR`PLr_THYL&`(T+y&BO8+q467ltET+80VS99IB(2+fz%vCFYq;&92v zPybwVrKL$)KpCIiEdDZ<_~G~~bac%uzW5~pTrZ|^@W02ViVZbdCb-Oeod+X>*Ci^e zGkdn6m+y!XS!84QE0(oP*&d+7<0xIELz1F9^$M9nj5eBn0H?4*#AI6E>hljmo+^}} z!n4p@{+$67SfMgqPa<eF`eg{fj7}|Y2mM1w@q*=x-!0j!Z~{<tS(r>Vzy#;B_SRJ~ zluO6YP7*v0v!Nwf4|Tug=)v)d%8-6wF3=G_R~whQs7`eqw1L6P6=JuRtxRLA1yY*d z9q&f(%GU+{(9!?n#{a=u;s3c09P$tGaB}m#9y#^;6L+;t9*+KeeaiKl_9k1cVxrt# zVN|TxYvr=+TjXBy%7;)Z-9A#}P(q&R34K@T@a&3f&CYm@X3lZ!=nbG3KY<Y<6c4&R zoJK+enU0pq3$SwN`<>t#=9LN#;%l;+D&493fqZz~ef&B(Fb3oWiZo9t`=cG@mJ);Z zP(nbnB*XcCR@H<MdbG!h&Aq7Z6$Vy#5rH6-1H4H1L;mct--JIxOm>C@6uY>2zp)dl zKjW}?-e5XJC@gJOA`HK?)%rW)mzH6E&Pi7YArdPf6OtB}CJWe){QA*8RT1I*ceUv0 z*>vFxI6m=0cLcZmw;#Lq?!ZsSPQB7_vGQRyO~C>YAeX}&$t~kfpgk=PSf|cqR4=e+ zMc~?xQL`8U+S}yCY95|g;QXCOWfP({5}@{^pL{l2`WZ6G(J8yy9FgAxfX@JIbkO!X zBS7`n=dLFqf3IC*D{-OlP7dz9t)my@Xnk#-GP_tef`s9s981F^QXPeR?EsgJ7|kKV zr}f4^BeMG%JbGN@Z;PxMzCAu_uVYHoNc<G|zRrwaU>hfoCB)?G@0EHU<ZE(|cDaO@ zqs6HjCIPB7nhuHZwGBvDW&XS&cpIr@hA!2LHanJo<l+(zXzU;wV1y&%91A-di{&vA zscJpBV@bQ-pn{_O0mfTdKz}J!h^Mq7<cSCFF**UzDa;IsIE0VE1@kHWCl1I!KJqJ& zP)(6#^X)AQe5mzcgwaPJBzrv)>l72l+5lJ`OAw*Oyc!ai0sZ9uBMK+e)52@tf69e5 zBY}q=*>vw*N}4Gm+E^O&^#<p~R$b%SBXAl<bekJL_CSKt&o~><xz$cJU6dU?`~>qn z@sYsa-_MqF=ftYDW#HqO=6!X&FHxmp+@rgb28g)jqSCT^BFpZ=V+>3fcRad<<ijWz z@!1;Yz8h-02*C1Sbwbql3x$jR3Um81J;0j}Y1N(;@Dwfo0b`am85(Tl7#Un*e*1_* z!>F!&Dm{HfdV?}eE9s;&m}lBRHsyj0giH5C;&1JKZh*5}&~4<3!y{Qzn>-faG33bj zc<U8H*}VJY$XqzQ(>Cj4cbfog#GVlxorwL_GsnT%e)hFo3^cZ(9&Xy-!x$j@ajRcq z3XGT{$U-Rt2oeg|p#&Rjy!(;4GY=O||4fG*6QR;sC$RvI1`vd_bgx5Z{cCT1@?Uak zGK;Jntx-oVQHvH-wMZ$biu6Ecixh{ppA#Fh(0TNIBe-Th6^fP!pL2IvkOL~keTI|} zNFUUY1wF&yRdb$<*w_A#Ro-n&2>D&BziztG_~QQbBkgY^zt^mh@gDlJT47M#w;&K3 zdWs_+#?wSP=zHnsQdyLl_q*g{%2jH;&kZb8p>Mx^QW7X?EgQ7eZ}H81o2SHr1R&MS z6_oJ8Ex@-=81pycns%D@wVbaB&8kpA&$FKvmYC`Nu5SRk^TP2}ThyQ^P$DN74gX#U z0ep5fiwUk~Mh&V5uYuXAa`xi)o#;wxf9MRm@v|P%O|8)U>qdmm5Q`%*C^&oH^w0HK zLjm2hz5Xf&6;{)bPVO|rr}gjvB9NYxJ{1VaEV7AJd9h%6G(2#AQ5V%EylL1T7aaJi zHo-rIKqPo&FK4VboBM&+)!Mgj*6t_!p?V+E+3*1POw~gpl_2{oAwXmhTz&b4exfrX z&YkKHAsUGx4)@+9@m>mH(IpwcNnx#LxU^QzPcwVK@#kzgC%X5BnbTQbm;?#fL69pd ze=bgeoxA%3lAMDW<-pZMV;n0FRhNo>V}HoRIBzQp<qSMSCF0xuzNTn$!+K{dp(Fqq zi0YY)X)x{GQLg+;M3OksSOTNcrMm$xaC|P}b|5<3Hk6^84zcyc>^WTd0ncHJmm{L+ zvEp=wgHfOpleVq2;1`az>sheO?6TRkgwO`7;h*ejTH+dp66%fjn>pQHor2`Ok;0b5 zgFkq3#W;=JoJru(`^MI7exSm%#5hSmvFatNLo1Hor(87~3ps0KZxlY(*n@2IRaGIr zEAaFHxLVJO&t%%)L^l=>-o~zUUd7iCsaoTVTIwGY{@{aejt$4rj#%e~iC~Hyr&5SF zM9!$#e0Y_edSB4Jm>O)<8JCd?g@np5_t$pvPj^)_@uXGZXO$3U(Ik4?o+f^`j1qG& zR+#i~f`$PXE~W7QGh7!3YMH%c+JrZEdn)!z*t&BxQC73xB4(JUd3R@s@4>-5)rEGE zWWul;F<kIWXPf`hp=Q@iVeAz@pPE;f$~1qe5iYoTN~<%WByPYW_6uu%a7L?e(?;GF z0h6%GzsbYd_5u~ogAK;D2DRa3?|5Alz!(lc8d5J$HnBNK$HLXAoYIAo!1~8X24s<H z%PJx`m6X<7G(s%j$`zB3-xnqV>CH)Pnpgdw@PEFZMj6BJv1?70elX4ocY9#cLBttY zAtETHCqJCsiz1sSL4DP<g{S?CmfKb)luuz;?jw7=TA4=4zF)oHNaqprlAUF&qPhfq z;{dH}fm$pfFY<r-zO10%W?TX@Hc=Jt76q@u3jp!G%s-s~5EmB67(cn(mlE6}Dv*{j z7Ce5y3q-=kO7!5oO-7sQ7efGIEni>L1bKXj=xRdILF75}sPMU^OX{%mkaJukgx5>H z5uuYp^mU6f_Dx#-B&7|@+W!a+x*clHb<OC+MTFEjGgu-G%tyk_z#&Kj`x{FxJ!D<3 zT8E0>c28N7j}h-7C}L#uo=Ap&g7Et!D*riu@n_>ff*zy&;^H`;?Y4o6ONndPpaYG6 zlM3nLvk0eQr3%jn=l+Oa=C76~=^Yt`oFEquorZ7wh8-E82eoPkeIFb&OO>q~$`d?f zdvWdX45^(}+byM7DxZESUy!KyJdcz?aV*Kj=3qHQq486A{igvr<|fl6gVF?X+g!cQ zR-{;)<er}%Cr-tJVc-97%&peJUtw+6B$Te+u|js7v*nXCv3WH>K@|Li&XwJkT25+N zRIo;~<YvBxI!Y<wAs-rSkCu*Bxytd^^@dHB2_9f<1@ri85Gu4gM1@t+#U!d)?T&7R zw%tUj)Gp$}*zlMdsChZH%%3mU=IZ=~?##U#h4J~Th8PZXjU&<z>RHbnd}ad}@CBEB zx?Z;v!Yr}#r?B5xcF3`#05|6yQ{oC_Fy~8T8aY8Ty3$)(7S#@Wvr<Ri4W0e15{$AC zq1VI9-C!{g>M`O|u0<?CduLPh6`!Gp`s2@55_l~MF2<<n5VI$U;CbtzNmC!&#^42L zQ&i8+O+{0jXWD_RtvI&iqCXBEew>h1i=i6zBzHCM4)SJT{$)T_fLTtkxTiRhwiVe` zyKNkY$&g~UZI==9=Fq!sTo04y<SFzpxyOnbh}7@9-z~;#BdWGZJ=zkN)*eP?^5ks4 zPVJx9U|98x2bC|5;)P#?-Es!9%MSQU-AFJ6vWi-`3|_;vm~oJd1npiVz4@Ve|BFf; z;f;*Af!plKotqW*z#p5xfz(ylE{o35H$QHEnwerkP{8c`(}>ho_Ki@NxSH8a5nb19 zt+@J35+eWcHcEJ@N8*6H;<Jw`I%w+EtPW190sl3Q#5p%RaaFzOl#MWQ^=$qVYfE8I zbout6d|YsC)6j^ogd^sUri?9!?xi#8DMswWWx`<rArA!9^6r-_hxTF52PvMfN)wi# z9ho-EmWW5VaFQ5TMQL!v{K&Zx({nLXH~F<@!8LwhRmK0uRO}yG@ULd)=|>qE4qZmv z*ERZESL)-%&!O;twvxg9+$K}<Mv9|(K#wIk)SkTL+NE8(YO%zG3cnz7Y0T}DS^vx7 zQp4&7&S7Y9r-{}<Vquuz!`|J`r!Bo8hmdh}-XjP8RM(Jv?Vj^se7}^l5kgZfm+T!X zP*1TJe`WCG=DMu~{(a?sP@N$Rb^4{owWKd>y!6&m$4X>Y=Vj?9S$k;7W=2$PO|l(G z7k?W5$SzpYA*XxCYFc`KTV!+i`9Sl|*O&i^BM`F~e&YUb?gU?auIKEW66{5?kKgDA z_*a-5qn2got$iinhFwHb*{6Fi%>IOB7c#37gFitn8lV`waYiEL&GC;zDy(xA4>1T? z`kP9Ymz3FI=i}e58+^aeG1J3<nYGl`K?(Q8y?;8dnDEsZd+<C;HZROV@(0t^kd2g~ zLF{vV&c5On&R?Iun2^_(BX}78nliAi<uijEbP@s9=<wh55zPO8{N?}s>7_{A{XZ*l z;IZ^1oc|RS{uTcxX7b;~67=s>C5XUx2Kko%UzB{@e)l6GNaRh}G=eoROzyQi<<ZOE zv=3I;w>|Q5a`F50+nO|div@Z7WZ>A8R;kaIBm6X`+i&PlI2QKsml*z?#`D)!*rIQl zo$CEi8VFXHTPgdu>#N3Z_4_V`^=#^gv^_Vqe;4x&iAqwG@bvjy0*pN3X;=J7|HgC7 zhBjqBj0V(a&h=dmgHN+@&F<%=*k|#!)h8FPTa|2O&yvk(n&}xw#lkI0;NR4AvhlxV zVsZzK0^iVyy~%jS+Pi^fWdnQz%34c{qR0M#JwifF6ybnmV#*sc<?@hEgb_VS5QnSV zhvTrY_HQL$U}LuP3~u{tYtI}tbbFg=Jtj(CK~BP#bqBz455G|L492_p8i!;zk^9bo zoHv^GmO5n>*+@hL!-ZuX=iLgVH?8PY8f>(8pHr=r$FDeEj*nzGumpdWo$V1U`19Ha zpH^sUDyg_OP+txTK^joOt?gf~1Y;|-=4ShUK0la1Uei0qumVTS3<AFSIyoHNt!Ey- z&T7)wN_2f&>a9C7^^%PS#_7HPgCd$4jaBHrPOlG`n|K)0T-^DFdDR1x{wh6@LsY4R zSJ+tocdehNP*qE|W-<M5hddXZ)7P^ARy@*`P1}h|4CqIUNgw&i<%iQ{IwYrpxlkTq zmWRG#n#TL2qs%aa&M=}7$#?$@_r+mq`xPIgSU9pf8{Sul!KP2X&(ggeT_*Lb@JY-c z@$SwW^SLX{A+hbeUb@R+n|R-8%5;G*Hb<+8w^I8lL#v}HdxklK6t#}Fy_KorQ)mL6 zDKI3@C(|f<0#VM^<N~=r1alibAR>J6nBrgz9~stFl(TYI9y<(-3^pwUa*Dqj%0)J} z)-b!<(t+b6NiRdzXB{)m08Zkh-)_#|U1{?o0WbclOr_{wTC8uMgv35YbuMtm7s}*l zY=1n*c<XM4J^}Bsn{g!6m*(xIFG@581y+?giEMCIo@k~lf>oL?m4fc*QlXS_QPzbm zE|AxiznORq&67{Al@msARwfEatKs2X#P#|dh8^0C<ASri{=EQ)>(9(UQBJ?-a0h;6 z^wPR04Hm8l#cDs*RT)Z{$|~iCkN3LKL!H@FE5mQBYSYj@srugu_ruUoE<m`c#B7R3 z%!1|;&kRf>nB&J#d92DttI@gvdh25M##xToDnY-6lT!VA0pFBp7ZlXjv4|&5E%h0* zLwPyf(|SStoKKF2p2yfp2v<3<+|Eskk1S;)jVsjsob=23CKNfW?`>nkI`T~h*(66H zzIe!-rz9;lf*9hG*tscwDeaJk4kn9!umkTX3t5o8Baip-0I~!zPQEr0Gfh0s(#dsg zfg~=$H_!nUzEgNK<ve4rW@=Z(;q$xxWuoq&laav?N||>;pP~tw+3<)4=J6AnGf9GX z-vZFbqU4m>Ka^FL_liau;6U{=OcKbYx^Iooe_>IQqYq@Hz;~Mn*R1i6_4dzTt&Zm* z^O=93yeG{-(hWz^BkQgl7hf%3sQh47mV9D?1X~*vxh|TxwYPk4>7PgX<ky*=#xfy| ztyS|C$yy{hLT*q1^c1RZ9V}rU5r1}(xs~|!vHZeD5gk{_>QBk!0j5VvRq6ssBy=sY zKSZ+@QPv`hG$xnG^M@z)sX))^C37k7Zcw~hUDF0ibWwtI+xs2&*%jwwPHxbn-ovs7 zdLB0!BG8o+0T_}yV<DF9J3c@NQlkDj0jCN8Z&joQD`msb4xubU!S69!J(Q=BS^HUc zaB&M&^GNWs>sPo<=JkcGK1b1^!Hg3@Cs9m>;ZI3otS2AH{Ov33nkl06jLR~<)a$Wh zQS|bT{>sOJio1X3E3s+8!SE0FR_v#BFL1UjA6~=ZDJM1;a8ebCDZ=f;qVpj587`)P z9KJ>K1apKB?yefi)|OFK_6Y@4I59Mzwp_1>uh6kv)8E)wHikyF{W_R_OtD{8twv+9 zduPR`39W`#;LfpW94UG5%tB_;rt;*RJ4)XchqbcjIcA9}9Ap=X@<1d9SbNf>8K+<6 zKjS=?59e5eBL9hLdA+-)!qtARKVU1%B&yk)Owlv>1uD^{|DvDOnzP{=PgjP1f2K>U zzu)sE*pI_IbtV)|1znTs+H%<Ts0Rlsz=whc^e%a&;G;Mt)=8;r|FePN1TFKJn(m~k znCkBtbTfbb@--)TL?K8ORS2l{9X}O8sZ&7k;>LDxxCu8r$Emfc*3DHS@^*M0&fu>c z-tiU~ormu_S##*9?H~ZxM`aEWW?plTQeezcf(hk5elrufA(@t#r@$xk-QCaa|BTUw zPlx>POR%7D5$`j$|IKiY3xWpnIzgvf@+g>C;=D{q)2yVc64O9fwW$rE&3PX8Xu_mr zbzxf$eGUDvbs=AL371?q{JRSpjP#zyla3b5&Uh+NGe!79Bw#Nmt(4R4*iDr~u9Q<R z214$_1PfRrL-6onyBK*J^szWay0ImU8JyuA#GK4HW8G$osUKsAsoPF>Xg8WLElcin z1GTH0hdd|s^MX$eOay!~5TN-^M%NI|BE>Aq6GltM4xjT5QgO*FG$_sTq>h4~HoG4& zpfaGE!t_nkqShbehN@5T5IqL%z!5(Ueas6Xrxl|9@%-bTAM_a{4zy2X%pP~y^(PBv z^tsuvaVA8?RWL2^mCJ3%)^$hC3&+K3zE;zLzp2K5LYQ$@cGk&&b8u~-j}g-rLHO+o zP-*1>17*7V@QeUQV+(XBPD<$0xZuRMw`j(8RXygvJ!l43x@!|;FlC89vli_{?Q}0S zq?+~@c0E`n5>WK4tkjR!V$lvQ!&m<p$^_Z+B^UZ_zJnAsdya;9ZcW1)voLoFb9$8R z+<&0mOV`gAqk>lD-!bSlwz1ghphss72>zplmjd0PG9?bwKcVq*89{r?_~P6Snf7F} zFXM-6@8onaCG7q!-*gJ)#*f?f_x(i%=X!_$jHF#Xd0f$fx7=|0BZONM!taMj3(n;v z07WtS8s`y-sVwAub55qJ@Fxg*o}(RH7-OwjQGp{izwofD_&Z4TMPmjkz^n{UQJC*) zZfQ`%#j;T*)6%I?4GZi)S;TY}u;~91xX_7T^&Eo~IiDv`{*IRZ+#eB4hSNm#QbK^` z?W2zEnCgXq-T$&bDJ)2Yuf5kMFGN^v_S<$15YxbuD9ttaT@o`(gbf+q#|H|NdHd-e zZTD}TLtYu&I!s1pI<qlRZwHy5eunrLo_N{HPYgB;!1>`-Ky>{zQ|IxOLly2k)mw=2 zfhvGCDJnS71!t?|=^&jNWF=t3iE+`ENAo-b-*7NAkXJ>e74&RN%sRf$1)_E~LWcEn zzjR_6*g%c{z}W$Sd-!1um=laLaVwwit~xBdgKGI8n8M161YCI0pUf&<gYh>HO2!wp zWum=Cmkhrko#dkV9{IUrH%6GaJ!Z;F4d;DfPN{)g_j;ef+19OC0zl<;7G0}^G*kI= zh^DbPT+>=n6!uXU1Nj0|WNN%Qo3(yr#K(;&Zsef*eshKpB0>YXR#=R`pnOLxL|l@B zzlrk5T~%eiQ31ZxX{X35-9D-^Qk62rNA-*<_;diA_I(u0*PY9@9*foV_V{6ezt;py zev2R0s!(2K&+MB!5K`Zr9*&@c#BfSh(~`kC-Q1CJjs;L^?|-2;oYKBDS>*dPhwEy; zFU!t2Xh~p9pyt#EW$xzE@UiHp4e{i(tC5%qo5}6aa>5Nvai-$8nH~HpT>r-3G0M{7 z$l}T%y09ZIKHH<tBO)u0r8B1jdw{kDlVr%Bq0exBkt$Sz3@ql`S3v}CJ!L`AndAq( zs3h;3Zg4?2=}p5)$vnFT7p^(+9dju9VyBiE(Dfg3A5FOSXv_yT>7BAVoP59C8it7? ziDe@|waF+@1C~StKxUsskf0oEKcK?Ech>04Z<+1Pa@WA+ri?3eA78Pf^2sXmalwf6 z{F#Fi*As`DkXao%M@r%5j{sH;zQOxtH$WxC<G|DLz;L6#aP$EOdRxQ<U`<X@$P~Z- z8c!Qt#*&lc58%mnUZsXKyj^$qt@OkrqkOw@QuIijFQ$mss%>1hRSR}PZrx9KqzZ}a zfP-wsgMS`L5F~X(sbg52+ArkQ*#WW#K3~=gT1W0WtI>iB!-Kc6(8)wc@u2xB)r{S5 z*+u(%vai$t<cE@lg8PMl^7*S00j%zm$R-%_CgrOv0<WxEWsV$Jb1~NT0z?3A{$Vyf zZiGo{1YT(55QZt`I;<TQwYj;<9Ji|z5PUB={C?X^azq9WB<vm-{Ia*Ky_&ILSpDna zI=nm;#XxXlRwt+HPLR$2O0Pr;*;nZX4P>W^cS}t$4bCH2{PS}U2U|q7V{V%BbUE)w zMF?Rz3p8$2;v$nV)PPj+;u+Zx6%jVyZ$bQV9(@GuL8?A$XL3xfup=?PyfMpWs3Tmg z4@)eLt;0D5PkQ-H2^I()P0JElKE!}I(i~};Dg%Ew!q52mloDK-<qfAf`W1TizkCi? zv&Alyzo>@)H5<T~KA~ex;=3Nbqc4lcFCK^60<6NoBq8)p)W`#hEHpK7bh<zd?F-1P z96P0z9Z_pz?Y#Mz8ZuBJ9xEjB83o!@Z--|-f(PXd=BCvIeaSa*ByGWA88;v(1`F*M z$|~3_<LMuk$>S4#tr=A{V3&2opq*Ma<VJ%zSW)<txF3+`t2bN-YYx)F^x-Zt_jDmE zhO%#%H~Qq+;@X>MByjfZ1}F#x92kc^tz+y5#0BxpVuJRV0!kfv>$4^vt~y5ewFbZ* z80((*M&%WGXR6P&hZIB%F;SS5QTj-V&}9@bDPQ55zA7z5vp&LwjYa=SxUXTo7B>f( z!?D8wDu3F%EpJ#`Fi@BmRBBX3L=8%eM@>PQ4l1q20HFiK`}k+)sbe^bI;|$<3ur1m zcGo40jOZ>By>0A>dx&!O>NV8_rtGPtZa#25lH%h0;Io!pW}MR83KwIhc3^X)Ou3f( zb#=paSLp{u$`_;>5fl6{5@P@9gmO&&K7YE$0V-HBiROw@%BuA#)>*r}h^<r*-l)dJ zGS9~5D*;74G5XQq9VU;nADH|nU$qgB^~cX0DKR(w*VKDMj*4;Li%c_G+m;&@xow6I z-<O)S?{T2`{<Eq~iqmd(W`ZHM-y+IACFQhCRJc)KpLs9*lrT`sh%7|edDs;K=eb#G z7Svmh8&yEOK->|gkwOK76>FM&M^6uE&e22;9#(f$XOF6FakjJhYPc9G;FSs{09URg zybdeFpK39eTW$068QAPwILVM2Zexm>vq-bxtRz0g`VnjpF)dd)Ppw#gNIW%<XHHuZ zQa2yUsC=VcQn9J0JJkLCea_8(eKk604x4A_E!+A)p~kx@^$4bp&&ux(sBH8a>6non zhFpsx9fFAQ-|{|1j|UQSd(G%Bl`pYj8cB<rlvL4>qh_%nfn6w!!PC|KrSltxSli*j z18?n8iXBawjB5)&s`aEh^q~8S{P?PdRYo!Suq4nRdoWV+q&rSW>Q`)Yo!-$)lAhOg z8lm05hOFGXYx{lj1k(G*t;xeD_uP@veX34qLXV0oakXzn5bj)%pl6hBf?4r;3Ao$% zN70US`OKyLbgM{Uu1+hdz<h_FRdEJWt9-zu1*VGdm-$SXjWrX>qFgg8JgZv0bSLY+ z8hTM}FVuw*Vuj6f-cxf%a5$SVhFk43#V>Qu;diL%L9ZoRO}yYD2KSTK=iAz9{i}NA zA76f2Apu`bzK8XNwSE~udb8e;UO1HoES@Ko{K*(}g!J9DUoY)FvgPE%FH_HZCE|Ns znQot3|KRcg&L3S$D{Qu`B%xZ}t73H?l{sI~_?KFHWa~5+#ljVZQ{Mo1)c8tidL!i> zx9Q})tl2v}(-bVvGzYx#)-@wjAEK(9+=vI1IOPt<6&NN2XsB53m^qb`j*x95)8%a0 z_H=@HHHm+ZNOEA7I)O;Fitz)vKoY-5plRMCm`URvv*xNw`X$U`-!V~oNknx#Sevc` z-uRq&Xa36RAE#pv#r5kj3jZt{b6=^Qs;awWyYzHNR@8~hL+9Y$!iG##ZRUPj$8ae_ zI9I)1OQH&o9h+FZcPgc;SH4lv(#bR$K|$^DA!j!tty~B=qH8nF$Q-s3dRJ_SODAy0 zYl4Vb(38y-balIA$r|CiYI#tKQ+#vJJ9Vt2Oak~<1~1A>#XH_)Q>>04u(!Exa`V08 z{-k(OQUlB{)@__^UJeSZ{vC9JW*P>3Dq2y(nWSZkrt5*GwTFvJ86Jzj_L(3&=STTz z5Vn+VBQJ7oXW5OQmcrJ|7~b_#(q(K+$=I}%2jxDJ9n%R~?wowihi`r)-(;^2&h<XT zQ&XDzd#2mdGk>Z|iy5Tz`H7k<P6Y9^fuvmr`cE%AJYua#Z@9vt=)lf8HrsQts!@JO zWY_(`R$jDhL5n$PD<U`h=%8Q{oh&0r`M6W4F~8Vqcrkxs>v--AOpgQ|J;Ij#8=C)g z`S$IRMTh6_Th56hSYq#<_4dT8cdC>L4Q@-8-GzIg)ui3usfY`)IpR>Wr7k&bsKQ~9 zyge3t$v0019CF+H7F=lyZG1b3WWxP{44UlBIi_<e^{t_1m!3Z2N*~Y9{d!iw%s|TX zcIf)AoXx+2+9G8bqpucY1zgm-ZY}La05_%{IYKXrug47Za4uuVfDfDtR|kC8T0EDq zLHi;B-^UlB_x9sL@K_MiVQ2(?$M31umr*GVhHpZ?bHW*L9S**T)@wqX#vZ<wb{~BT z0j37u;S1Ld#WQgZUn@Qh|Cg<y#li|O`ke%sL;YVa>(OL<NB)7!FIv2o|AlJ6rZB-m zv(BNKI)`Ti|69p37ZreEYhngu<TRqg=vz${ErR(W%SSl9t*S3CwX0Trj|wVq8tquZ zzk;~3%XBAuDDcl=;ql$N(ENLqvk#d$kzE1JpuVt*`q$5}c{5C}_sj8pqI9Pc<#n&G z%P=YUl4GOKRFK!K?w=hkSO0+NRyzq37oYoo_dPYxW^zR@+Gu!4B1yfQrM{55ogof> z4pV(CAr1`5EE3t?8tTS<9vNb}P&%fY81T!#^*HIaz&jLHw@MirnFU^NI(<K*f&Dxc zK}uN%Pt{C#!3rzij`6Hf1~>c?@wxeIY!wn%d&-k|@&f_p6QsQ^UPEB{bFHWCQnBjN zd?~5}j?b+f58Vm%ZE_M*etFyMPMv(EoBMkPm?t@_xO6`^>%=m~Ab*g*DUzQ=8s<f# zvoNXlSaBci9eDD~G4QtM_EiX^XAUHyZ_&VHE{)O<{y4(Ft}6dal$-FYZWk*M#{sPf zeZ!C4WKb*9J953pvDC82<nRH(p0%<NX%6?>Vb|ItS+A>PDczi}XrY*`-o|_BE+P0Q z3E1hRcb$3SGNT86H0MP7t@=DZoL}QtcpGG1;cn)s;m>}>#tyRQ5vyDc2=-WDmv$t( zn$+(lDlGZ8TE0F|E^g#*npm!lfDn$LA}^!A%2kaNg?1DaCB|Xl-J{GgTh9x(aOr)W zoM`=mpFjgf5J}O1yit)UO%CWoPDupuv*I%)cw`P$+-qw6D*%50(^foUY_|FjF>?Zw zA?UC6uGKIl=vT~9J?!LLCpNV4YZU|%xlp!drBt6J;MV2o0}?F%OshfzvFyN6H(ifH zvN+PaEVr)?n`Ewiip?|za{`?3;{Yqs9|-BoYqCTvjNt34XY9raE!DTinINwmwO&zO zSW1oG>G7e-Y6XRU#p7(m70Xx1f$Yn6H;6Ls<sI6%tyw>shj?oqYsIz3ep;OT(CW_b zCr)BlK8P}}io{*^$!)>Yb)yQM1s8N3^}aEHbSy10;(BgrabyI^aCn;8d|8BZi@!!b zanjcqx-3X4&c;hvaJH&1?%;%?!~ChaeGk^W111C`=1?lQ?LNrnxaE=NJh2x@*kc+* zMnCBwr`Y7~5K40GIr^Oi0H(#dQ%{{ms7F{OXxM&<1OPC1|D{?`-%-40xb`?Ps<>C^ zxA>IbwnX836Z;8seH!}{O!u{79!##`pn(IW3=czwmbLAkPJcdQ<yzf|?#z6*H7(SR zln&Zd>Q?z-d)NSB%?iSLKThHlp0>qw!Bg1so)!Xaomja1`Q)Bea(Ql|`lD0*v`QTj z=4;)9B09kZU)Kox&}B)YTF}GHM4Uzt8k;Zi_3W|9ZsMb{8t{)DDwy=?OAc$-0p-8^ zj~b0=JjU6PT|W5&#*{lEB4bJ&>vpUTdX`&4dfaIr5^%n`6&en55*r~J^+o;*YCqHq z6<o!>wLRqyEhkN9q5I74Nl>Ik25)Lh_W87+kNHv_rxD|2GJiM|Z)Sb}BWCse?*WN5 zKdyC(KF^pfFxM^;<@gSl#A#OQAB?5|uHn(z%4GT%-Ue9e>a>;$OdWzJGK;eHB@wXY z?IZ7nc{)7u(LB+`YN2c=Qp3dGN#lcFQW*&!!QM2<2jv>?UDFgaR5!m00oe2^haa=N zyG<?cgxGyMON3x3wg?qfe14vj-9gJ{UT~=oHZ(*2s`S^bj}ufA{H)m#EzN8SCZP?{ zjZiajl~k3?a?jtB=7UeBn5Q|Ap7fr;d1Lmr{a+A+BBe;?M08NgwcWGYvf^J}Yv_1y zt8La!o&OnGkLp_S#{eBm(O;P)d}~dB56;71MfC?Hrd3OGIii_}&*d^tAH40*mcECJ z?T`z|H=!^a+}9f3Gx*}N-|y%;ZO)X4aZX-KqpwF-fn|A4mi%@VOXrUM(Hj((>_vpE zVh~CDDD*gM7fv*^*8|Yi?@XKm@b^v{b?>>RxBB%w%97JJB$EbliU$TZeTwhhYe5_= zIHvVcFm>72L%rmFiBa`T#O#t0N2;k0K`3+pP6=BPtV#mka-+g%b61~;rg`So0gLDD z|HIZ<2DQ0H?HYG0QXE=}Q(Q~1LUDI@D;_jxvEs!Yic{R(-HN*g8YqNf!CiW?_x`>! zb7sy@U=k)X@0;XV>%OncfzN4233%>kx$8d7e;$YkQjp&%5$G3M=+9yMP%T-?GHLJ* zRhpX~E1odjzd$Tz=O&6jx<BW+z5^FeTvrw|I_0x3$QnO?Sf2)+j4oC>ljOWH!e@-$ zUixh}!fjngpRfZ8ysb0XLHN%4b<}v~{4UQNkpeZKR9fHWMw>z)j<i+)ir0I3rNYjO zYpte$id)6RS#u{jT)wH}Ujf%#+V$ttmFymTR5o5MjCxX2a@cBQ1=_U^)eg9_p{7lm zm}r5tQq3>j3zHhB02QS*Z>Tq6dvpxbkeZSXm18MSU;4HqSXQ!vP2#rrp&F&u+GHp% zESEFtzyQb;HWAlxpF57eX3bS5i|&T%zS3h81aN&Fc#*%_T{NFTBquTTJu-$^xIktO z2PT-swHfmGKMP3E8hH38Ohg&tjfza0@HvB_<UIsW@lj-Mb-eHWyI3Pf7y~ozK8z>< zH1IB_5G(kdA%5k@tb+%o{B0Jiuff@kUnLIh%KY*TX38|xtn1qcr4oe-IoRGLC9vh6 zlkC9Zu-H_~$Z~6e&mo9ce40tN#a<zv5xKdxQg-?iob}A`?$~sQ1v?*?>o@Ok0#3U0 zG^8kAYmNbF0Ab&8J<GyC==RMCYMW*z3-mVD<GT}#D+IYLHNBx}>|qEsq`?uQBA+IY zjs{{y0&Fa`@ki%<zPayVith_3cvFU7&7jh_*}rKcY5SzcOM+Mj=Ae4#xne%UDp-ZE z5B4TGpT1%M`q;5@_A-PX-VT|x@AiQc8}D`XX{9%nE8Une=Zvs{zmD$I>Be{pPLbL! z*9$)M*WU9)=|d@iy^CuCC^ixnX6K}G)lJ`JF$_<b4|KJJ4+_nJoX4R(MR4|seM&0n z$i3$#Me}HazF^~|67sJNox9gTV#)7+1+?INRCN6`6RgbWolb^Ehdep-j)&bQvppXj zJ%01ijcz7QNN7%M3XP(ooIJIG{L5%vwHF<bVXQz%fa$GfwtRr=rjcO9^kI1thO?gX zJ3^Gxag<=3k&PDT3@gMA?mh>jwbcj{V!;4c_UIg^nRZW%k+)87E{CEvo;rg%H<*b{ z-$VVvrWrHaitGO1wj=_wBO$%0u!q-R%sa^|M+0$QkbMXygJDK{WAD<mIJDv73NeTR zf+t}EpT4LVHE7hU+oHy=R<M5sC(E8HiI9~JK(MTUD_`D~?>J?!Cb{ALCK@fPUbJ^i zQ>4+BJ2K{4l`Qk~F-Hkf6W!}NGmx(stt-?hTM3*^0<kl|u_@!>@&{$VBck3Ynsm=U zW_&8ZRAV3Mc;(a{O=OA#qal$xyw(HmH)E3q1CnW5Xv3)7);b2^=oqY}JhLBFEmJv! zlo#V;k@i1cAj5Y)|59Q-i-ZZJ=zW#Gd7*<s5=h<%z)xnojCDe2_CX%XWjj{QV55z9 z^`U;mKqi#hqYgrMTVMf4m!P5Vu&s>m*GUA@$HVN*XC2M!1)(^HWyFv&=(WzeA{Wl~ z_L$wLeWavs`nr~ae}=LO&pj<|zYKs84L?O`Vlvn%sPT2tFwD26n)dq=#Twm{+GMt7 z_-*Mi*K@*)_{CNrpeo_Ax*8{(v<rHWV3K~OmaVCp6lmI&&fO_ITb1)SU`LiBn`PFm zax(+EaCc0DZ=16LZM7PLS`9`f3=JzTXrLUQL)1x8N5cC-@RObLX8q{dpzYlYj~}(T z3YmV{G*7D4A@*6>A@3Uo-=ocikj~#fP<wku-e2A)%&J<E85JYG3Ur9+?a&YZ85LSC zfet;(2t2ta{61mV?Gz@C2=0a3Y+EcWwsa^wB77Qbf$8ljXfVtN%sL@%Q119!Y64(s zmWI;#H8zlGHmnQ{hMne;g67_Q;uUsI+v=I8rj2A#*WN12EFXpL@-@8yI^1e&jwPve zjR2ZQj3Yjh>Z+<rS>j1~6CL4=h|1}aR_fLdj-hXKxIxks<eX7wYW5ulvtNsCSvH9G zG`0U8)!Emb%%Pmbb=S3ps^Cx1%Y{+<CR%JHGws3W0FCWgw(0zHr{u#o(e2p)h{+Kr z9!VPAiyNF*SfZrR55X&%G7*R$B*dW<!dp1H3mzCFoNYEwNO+Vn;^)07JLo`tSqbU1 zs8NajP@1|jDP|+7Jvzatg{jk)vNE!v);Avl0`60c%6-kw)M#J94zk|y{JgIt1gC$1 zjoEq6$?)A>9dnf7<I}B*HL&%yXJdO_2H+cSY`goyP%#Dq+^5{=atHq~`dQXTRhy=7 zAbNS{hJHKQ%v@=`8`Y!()Xr7gYtpnw!6Kl7TH^ytt&So2-V&?J?V2?e$Sb245+#id zyR*?wc8N}|de$R~+N&x3%Ta<Efb&QB@+h*0tLS#NEAdHiJx!FRkUYd>`~nvmcin@{ zWx}Or<KTDU1)UDS#MQ(H?r*6S9iVVeyr;5kY#$A6FWN=;pmMFI?)07sxUX<#;U4(M z0K`6gWZkUfaELFi5|KD;<uNrx@XirtaPgjkY}w-#z3C)af2J<_>nMnnebt}6F4Usr z=rX4Yi`j|`<hVDuxM1a7Mh}T=$gHbM1`wVl5?Iuxw=l1_R$t6x0UYswf05lem(!fW znumQuW{BKJ?a6hEGwqV$0$jJ2cBbq)#0vH>s5ZBB3#(bP5;~|O_d9!mrW(arjT1L1 zbSxX`F4ixyZs`-@5Sc3)XblZs!tW#zv9~UWF|;<v3iT_#`IMfNgEh?fP81PD;i<c( z#LX^g3x7dhKMZQ{C=bL?x|)SZOyi}7`o^@YIy&wDFiDibsPj1$0I}%HYw5+z5a~?l z#gI>5+GpxcZl;7EDvdW(jXC^W0Jt+vr*&2D|46{f#w&hpC8=%RthBB>!PlfwCj3Pk z6_dZh#01bbqve(>VLV|^&PxCIrq78%CGz?j5;vgMU|^%TuFLw3L>uw_!zE+a?T80^ z+rpm;p?O>ipBg=ioBWHp%q*vX{n!2C44Ejb+1OYa6s)yksjRbU92%j6!$XR#NHY0X z;jfX&abqw!%1Ai6Nk;yGy@pMRUT~<s_lS!UYjmPqQhqx*76ut_sR0Zq1o>zh8pNLC z&Fx$j21M`6B3v>E8EK(j53-e5Vz0Ge6kM~MT+bBs<>s&ZB1v|8=$TXw8KF)$CCg$~ zYA2v_=<UbJzrooNQJT?z+d^-sxRPdx<yvSXa(<4C5-jJbMulOXaTB%z;*8nN!@cNw zY1b@HQGqybcy$`_%oBp3G;JOU>Qv%ELxhzw_D@ZuDOK*H#pQ5ns7jv5&2FRTdVFq| zbngE3Ll>XuPZNzEgf!I|^$XFoW<ZH4|K8$q`zb(-r1oUA@~ynHpU=5ICU)xYuRFsU z%vv1AB^xgv(+EusqZAp{TC3w|S;k>-F~)K5cv=kEdZD6bu%gxBwXe2!8Jn}MRwupz z8}fPe2h(@6RTxf|0TqrOd#q-gl2QdS1H*CdvS;CGz8{Nrb;b(v`H%l$6bnw~jPZWD z5odjHNm4G>BaKq@T?a8%*v<2vem+*V5Z*c=qPKsgdC;X4BQko+gwoWMuo3_I(d4!w zAa7WQCTm%xHdpP^BQB4<KLvpSQ~jBm-+|sH>zXgmtL%oj*~9$JN4q^HI3MvFjSHq0 z`wu81LpQ?E`^Hii9gE+mlg8Kc>ff1B{C5MAm_M+w|2#B<DJpVDD0j8k<|VgI`pLXn zH=&?H_@e$1SZ(){&fYW4AP2wiliQv4k~=`&$F)yEq2`CZbK*?=z()7bQWs@UFC^i& zR5JnPdo*IFh1Wl7!HIyWJpA8`B3dGW`ZTSsZ7e^n3tac6yU(+w2IFHEltUffz+ocI zsV0(D|8|isgAPuQj)+d9yKMLxd~_Xq1LIzvSypG#+5@(^J_TyUHCj8z6y;&vlQMMj zb}hs-T%C9G#O+gGh$kSzPAy=ntgI$q=*_zPzT|#ziG0cUdRBjQDz}p(==o(=B^NHu z{wGDoBtA;Ca7}gP969pbtbM*Pn0Cqv52k%-F+zu(jNSbnaMO<9{-=^h`tb@rOsYvb zf|F^eB&d)?8ef!vy2$@Bpo;c*;D%b!p@(;GZZ3)ciVdBj{7=2E5&oBmKxP{l731^) zgOO>2Zl1WJ_rH`UocnwuG}t;o&%Ej9nJtm~SADe7wO!TZ{~pP+8|p^hM&xdrcg5IQ zR&>cVF?9U>ZxrOk{ofj$)tGTR4mhgaHmM935rEjW3f?5)X#3v;+_*Kwxyy6wF<%+D zHNbwUigs)6PWvypYN9VE1D=lN7B<8edie<v`*%VHf3avVG@^?4i9-HQqZyBYcw0Nw zYuQwL^v>_5+C*{W^R8DE;?f*dY((PjX9f2ArY98F<?rIRDDC1uc6U^Xc{tAHxr1Cy zihr=nwu@GLtq~EdLS0IFDf9=_C_QS{YSimSt-m@ZgmRQR9vvfDcEEE=PhusfwlK5> z%<XtX@Vi_dd(0F6v;^(3i$fDsVZZpsGzS_#vB1c&^M2h(yHc^gsR@Tdv`Ymx69bJ# z@uK7!VNm{A@b|4yX;&&y4WP2p{b_s~oNRAM(bKnaHaKLIamK>+zD!R3l*B*9r4otS zNap%?`GRPKE-LVkvBa`9L}gM`qKux`Vg&)zvgB{j6WFX|hMpgIRX+hs7j#(HkF`<m zWi?$7V4Y?6niC1zd_GCAC3Ssr4f~^dSFBkq3=FC1$f^%LKIzA6h}{@EP++!|^;~z7 zXH$orL^sZBm!)*FZ8E5b=&DfuxL!|iVW7*6QE3)*4*PAEs=kzFjFdMn7|D5&k&p)_ zF1&ZzJ{_Wh4&3qZS`AnBb)TvYv&xy^|Af%wcy8~*d9kWW0wYFiwa@hL7#Si0EA52Q zter2pnS9ekD+W}-Mr^)a-GO0>UPJ*l_)gDLUSv;0gQIq|$`zz5_emmR4`G~yHSdsa z-Hp%tFJz6IqublJR9^i$N(djj2ot3qH@=qid7&RSyyG=`=XcM@ub5l_rRpf%jF3}0 z!ctWNYS0PMVKRP~_ca&T-*P>?@^h07(At{cmpUXQd^IVlEZ}%%phYvZxxK1xx?8|+ zz;c37`uTP4Pl48=(Z$L>7nO){pJ+yIMs@TwI)G}PgLyRWOg^<Y=LeFD8dOGjsv%AN z*1xO)j$+Wb09K|HDF=_N4Z|XK3*(lwR@xzI9@@)t)}lFhn>=SZ!!>U)z@q4%-f<hg zH;#=%Y8;Wqn%`b*cHE|{HI6?f%6U+Fm=e1T7co)e$E>k3Ryod-m+lA>t}i1x!LW=8 zb^mUnn^r^rL6UbC^|zep*{idB8z|m9GM;MaAIiP^BH#>Od^51I6be5Hzv%=J2S$F~ zS)1CjN*21sj(RIbA_k%L+VoKVg_K->SJNf8TBNdd;V5Wt45N_st_?FzV{bO<Z!K#g zQULVHAWUMSoOP1qRs<Q#3%7-pCSCkdSGu%B*fSFxSlYpD-sOigVjmP<m8I9_;T^HS z*-@ik6-u)rvmKHN!If*NVvp+k(EuRQEsMLLgdhf3b<y!qrEZPQK{*Vm@U5P*C+=0I zj^w>|4dspk@zwY==)kwnn~IeJyXJB9^I-zzPfvD+10AL_HGOqm{X_a!{q`&F>_!o8 z#$e06C0S-g&kj*$XAjGe%}qxyuVRrs%Wv~3>;7eg!34Aw_^2T2Z2YCN;pZxJ%RD*! z?AzDW9F6+?dCTcoh=A*mOSik6ZUeZnS9=5%qJrXL0bBuol3!BDAeh{`mredal$qgY z5@ldEwrEVk={V`SUKNM`NBherJL4zTT;1H@cGCT0EaLb%wQO8INaK~0vXE3Msd#W_ z2?cYbKIVdTN|SKX@&hB|E2CHDMFULvaj#&d?*MkSYh>+srYCy33fDr{M+hJaB%8%8 zJ^M=%$t5Y=uOkX<hhN9H@^>tUzhOS-8*Ka$Gv4pO0;cs;)BHk!p)h$w9kDLQ(tsA3 z5n)QIaH4p1Sjs-KmbTv=cEr@CAb+SG<1E5?aM)~L_n_ra8A{MrpYhs}g>Es7w1!7* zi=iUQ#~Q!*sHl(Ht|UA_IVNSEF{$pg0+;6xU~d;`T~KGeVF*hcI?%kj+i-67lUL2R zkMt(7{{rN6Z+<I@Gg3#^617Q{D_3t(1+;7^usSe&iDwF$b>CE5cWNH~-lC&UhOP9O zJoo`ZFe}09CmjEjUb7&<hSni)={XEhnc1&<-3zZ~lVT)lkSCuLV})CrD{JX$MVW`* zx?~z`3&?m%3o^BHKvdYdqkYT9UYq*%!S~gFavx_kNRc_=q;BP@$&n&JV7ci5X+x;r zmJ{sFDmD1GeeH#R1&6@58PqZOBH7Z&N-+Xu*-JeOZh*#Lo%5AjUJhu{0Rc^q?BBIT zG+Q4{8V64eW_Md}_Em<q|4Lq|w62Qke>JIbS<EfamopW5Kk^sOaEo&FcVE0JZ?I=@ zTaM5n`*=FJiP`1{6VwR;r16}4wh%xy6wQI?Rq*d0e$f{NQ$BLZ;ANIi-@3MI1X??= z8kWmVZx_kbbrC>|Thn0v#lcKyumGIz65bzxWhebEpm!*vpUhvE7wr~b@8quxoEnXq z4B}VSROUi6wIdpkIGEq-=O)Cx>|K6X$N-efO=E^O*=0q_+|Z@5o(*AA6~v8~(~laj z&>6q;h}y~!Wg%re`WJs!G*?mmqL9(s0%&71X_;kPHouyx+%A9X*LUvX2<r*;Gn8b7 z(A;C%Trm(ub|Hb@yK|&hiBVqo&7rpeCfjDq>=cc3A5dU=MAA5-f>1b+hs`;v%X^#; zSjz;Re#b|2eACbJi9i~w-KlpqNdO<V4`{2T2II!dwBjx%U3h4J;$DhbX;1!B{lqFh z4DI2Aax75R54LQk?{K;6Hdja&X=(!#n)pZ0a5wZP8Ef(2d3cb{#O!Q#A2pu@QxL#K zHdAfdZ^pMOaz5>@8_k__!7e$oKS-WMpZy&~WxW1OW|?%7`t{=h4lD&ps{4cNeO;Kb zluC%aR7F+GbPim3!-h4%1@{9%gWC=fKt{UJYzc>~OL7nwwY@amiDJSf6w8evmtM-b zd;v{lP`gDOE-`*``lKj@CDG500ZETJiazNyVw28f;$f0jzD{<fn1EG#^3}3QUv+6Y zJHY!Seb$e-d**MO^sSO&`vd4^b(4R;O3q?7T^zRmMvcry3<-1US+I*Z{Et1$2F>jP zd0s9yLLtl3;Ml3e=w`}!)rwqQn8v<==+7R?r8zE9OU^Ys*rMhtfe53D3tVelEx9$t z^XD~BEE%&`G*7MFsx=KKns)LgyirE0O73|b(mwcl276|&qoxvnHZ8J)PKJa{{l$nt z0{2sg(OH@Pk(AsiI`t7VY&}g<0jZY|Os>zTgQUzWuWS*}`&rntWM^<b^avW>J;e+a zd4)O+cQ6%7tygmtD=t59ZbGMvyfl*6J{-T3V`Qvrw{f?9MpTUtrfEnX*J3JG)$%p5 zWm70TJ4Cp><pw#bv72aqoG)dIZO?9~{@U><e5*-45m$P@gr{w!_uLc;@ZvDLbU+4C z%wxOn<KosJfPD<PP2Q&w<Pz42d1&q=aB!<HnXy<|!m4YIuLhthRmnB*J4G$2y5q3k zCvlzS8!2kGqIHBlbJ?lAts}uh-xcQ07IRZA+O2@){)Vtf{ovSF`<_WLq1uLxYdBrx z6m@@RujI0gx}wY<q`tz<u$sW9p=3^2kUz6{Q*#}Ke5fGsrf<l=wvVOySbJ+3V{bhg zowUFd8T@w=%q=KI=cRH;z;82jrkG6z%uKd>9YBRG4T>YRG(C#HE$<z+d@73@CGpXh z_KD>Deb+2HJNC-KKQ1-Fl)j9jaV($gI^TmWpqxk@ucnhgU)#W#e34loKGJu{9@m9W z>q(||tp<x$ZZelJu~rRb;b+rln_o_w7hklIQutC-b1H9mhWb(?w8WZ*fu1I$dhnyn z+LBYEh6}-5Q-k;?PYa6aPXjqOXyS`!8UcbK;v{W<mx&gpzKQutTX>`Xh2c$E)wb_3 zc^gl4UO}cS5L>`U3oHRrJ(7zr`^{a(sR3Eim%OhY!HeA>F|U$B-_jfZFryp-&j&yC z$o&C$VZhI2{V(wE&7}aS<L_~he0;z^Ceak0%ah4xIORq!=ht`4{O?p<ykxh3)wRHa z-0)6}X9F_hvb0z!^CcYQ`w^a?Kfbs@_J5qKTn-m0hc{@J@bBF|e1tYe-=hI(b2Gw? zSO!xBc8~VZ`0_6D?(u-MVp{(KX@~z`0V!NEdWrBaR@U*}Isc2w|AIM;{)5~`O#OqW z6*v69$lL!9;kGmQLB9X_mo;pG@9#}rxn1s(OK#G}$)jGksMXlz_<vs0QJo2YuiI_E zU%eLTzjqbxH|4)*vNH5Or+}R+es6W3YUJT{-37au&j$ioaPI9cHYJ|F|5G11dR7|) z6mFhGnIBq4Jlp-26el|ULQM6h@9Hu_rjn(4nNtCeB}Ix27o%;PcaON=cOA@gso9ak zw=(@w^r>Y-*;7MYyT{L`C;1CWqke<n`d@IUXAQIWD{3)MvkwQs-x;ER6RmCQ*7m@S z^DV^@-ALMiG+<P(11as~Mmeexv6U)M(qkXeKw^G6s?F~A)vXKPjdZ_K);{%=3RB03 z#p~9a!Y%^1ygKX!zH=Rb(qKPXmNrJ8*>(G$9h}swY07yEb(`kwKp_*P++fca8g}&0 zJNDwWBJLH*^E7XTr9K(K@kKMH7oQFyM!iLvQB<_}g}HN81)4XMdxhKB*i0qc-6`PR zWvp{?kHnY2_AwurE=Jz|ODiGaQK|vYVTE_|=e8gYTDQRm^-MRo*-)sz@>$74M-B(V zS9!u8mi%dr=ev3uTZmQx(+5qSlfg1nKkc5e@^j+0rtbWYNVWM*ooRV)S|3#i%Z(-- zC7q_4Ke3s9e<2=ksMGyP5S240^sG4he3a?88r^7T9B)(H1$Ry!%U<BXz8F^*MTn!o zi1H}(VI8bop321e-DqIU>2mdw9V(0LmDD6GRWz?6lqxn6I0f+?n_)xbY87UzGL`fe zGU#052bemL4^n{)2EqBYsx@j(j$uc`YaI_iCD<o!gdhe@rh<29S>uOB)o$!+l2l+> zwWnhK`=o*G*9ihbeEPL#9}AUt=!p`ID;ss2as&x`^mRGhcJ|rQy`a2Stvq%SEi>ko za=?>i);N^+0i26q9FApHs=Qwn+2<F&4<ha^&(d`aLn(B)q%Wwzz`dxStku*{$7;4| zMK++Gx8Y0S%n%x>k&Mh}WLkeD`fHE33lQer$xwD0&EFEwX6p-2ultOT8e=x7AO`wh zl#0)GD8Kem$Gh+C@bmFfAB3RT`T}D<5qKo%ZJ)l|7ic3|9cfFSuh};+d%aFY^=L;8 z(YwWg<;HhB5w*FW&!UUmx}5_BVvAWc+Ni;vs<yXceXX=hha3bfwn(>QsT`z}F(JQ> z>P^K-M6^Y7Pw{!&N#DKBwR7nf<dzF25%e<{^~~9hk{@jlo&J-cyFu0a!K<lMNrs=| zhC?V3Y9f$65FNhbT3M+plu=0U@EM8|Ukv4yD*1)wM?sutl$TalGNgj5UP6xQe}Ol) z<;Cl_O)SNHNZ%)zEVSeJv%ut=G6+a@;{!BxVtgygj{rJ3?uGNu{LA2s%Y(*wGA3<& z8BOf^U#T*~C@?bQ8U!Cuor@+_;<H3ivFDGEO&7DZ<;2u%sFEI%gO;yRXIULVLu9R3 zD}y+NtR75%v|KPPbt7E4Q8Vd0p*>Yg#EOZU%10SiyD}>a29~a1Yi~Vsp^hKiw<Yp; zkeYm|7N2`G5n2e|4|Dvtfk+@P=83Sy=m?l=R+)r~4SDKt&sRYm7RJ4meTFN8asAei zTiJeeVt?+Xf@SLWj46#@s8QqRE7zKQ(<mxb<mK~GaH!aJU=jX)7UT5MgMbQL*G9p$ z(csQ#bHp~bn^C1bgwZYkh_}3sK0Uyn#QZoKO=LR^km(<MsSnupmEw@dCrgG;LEpy9 zbngIsAAdmW(~i;&WHUAz_`QD0D|KH*68GiQ`G=sNbrTxVN<sRu`!>(lVsXJzEYn2R z*VEP=N0vYinTNgF##R4kdvZF2kKgC*PbEuS)tHxTz3Ula()l&#$!fmxWOUn({uvI- zl3|e9$GNuH2egXN%#oH)9l)sdc4Om`0<yjw)`r`cdOb2MeailXhds~a1ip|fhs*(; z<eB>M>#k4x$gzalyGOyY#EUDV29Oj(4>&sW(~xTUTatX{jCM`U5-yjF&d~monMrEc z`u0v6scKY-Bg_6L1c`O8pw7@=rb6-j4inm6Y=EuIwt<W3G68UzY&B#>r&$pa0;-lQ zjx5{3z-@=zQb@{2YT8MqH0XG5ydYf0_Djkm7~1QzWjuD3T}eP|hyi0d<!@uKz^>{s zB_{HF><sY8$ZxF9TnpqOPl(BiDckox=(X@^mEb^;4uy#+Z%}3@z^#ebV=wbe%O<QH zU+`!yrVmTF|GO{G2haFD*2dIrLLgH;3lf-`n+&_f00V~OnxUak$FRLJgLu0#8Q?G- zMXD!fHfTnSt{*l<on?g+T*gAefUQV>PSAwG;T*ET2LduN%K7UPy+Jz@Fk|yGtN}#C z)Z-4Mk7Vv18Z?=qq1y48vzTM5{@JPZmMN`xb3^26%-zNo1W25!@f!fkYYNb%$tjOH zSJ$=sdGOv3fmzIt!H@9*x6*?{L_WlQ!%})C#oosrNFWtcdaa^F8Z&O0ke;ReQDDW4 z;^(F;tS{Sm-_+1ido}utSnoP+x*@tkV;s!h9CQ^4Z%}KC!;#SBS|K#o=qkP|Xn2Y5 zKpku8xB|DtksAJyPk~y~5EHCyE65GCbGH1T!uIwWf1ysvj|W1a?2e=dWw2jnw($XC z$jy(S`W0XbHMo7Kv|}!#c8N2EWq_b}pR>O~w=9gt_11AdQrfhRIEgQFWs@)4?>)<> z<jR;}2xnR<Gv}8m^le&X*ddKO=bP7S`i3UKa2RJ&^AM7rXR4flM~d=>gpBr)zXi-| zVA3Ito5K<IHD&)pX3=o#PlZUOG9DYP=qksza;<86!npHXsgk1Th|Fefyr4tb3Wowg zC=Dic<V1dI%~`PudA^HYW#5CV4Q!iwG6#)AMxurUe;c7AhZI7?<<PQb>KUdB8t?UA zX4=F_-KbElFVhGJ&M4Ko4M{&rapAbbg}`p;Bm-5QUZJXH<=@xBxgJQcFV#bcTX{4& zyh|LDJj{IY5^4eX#_X3!;0+vMZlprg<4j%?{>--7SskcNtvM{YRFd@?zPH0L``4Nx z+y+0A7C<x8ZMcog7}Pb5;XoG@Hcp$^la8X!{Q3FDM<3v?vPTYq8_Xq1r5UxMx3hJK z(T;rA+-pX49Q)Y)&oxt<@VGkvm<K5sdv+63MwM5I9|v~G-{znnu<hKp*<0XWeC{kb zp~nYA0*#QZ_Td51L-Sur+d))T@S)RerOSrdommKDX0ZOg64go3Pc3<HD~T?6rfTx% z{sUv1>LM!l60q7kAFZ}eG{pb`mK>E)^zAFoTrK{!(qD4;DO8h$xrUR&TM_jX&{mW} z=Xtcu-S%kmDH;G^O<g)lho|QQcA~QI-+QY6V>S8X@tf~$0&z&s<a;+=6!01&0VtG{ z0mV}N1=bRSLsK%Qk>HR4KvNPsYJRHVnz*afxYs~RF;m&#M}gCMyDo5K7!aCgJ6Z1D zH#wPW%_J*15Y;uspa`5~s}0YD0uY8fD1j@U41G-YWZ0^;9Z24P<smQ8?a1b()r1G% z7B1G`OF>3pCjDLo1qJXNd!YPJ8%D<P%uWZTgoq{#`sG#~tgM!Y1Ne<L7G~+!4<1ar zDh9N*GGuX;5lKeS1w3@AmT6SRUTztkO!r>+NNV%d)ZEQZQouq0(Dj5FpK1*eP(QW% zP;!}VYrFXMS9|Bz5$*v6kW}GdfEhAcI-DZ%G6`l0q~Il}TRA6#A>8&2=Z6@J+oXg< zfzVmulFt?bc(FjtP4;z9PijnmfM5*Vlw`(LJiyy%f7|c&r4=};On;C?41!K85`UJc zJ8V&sX=ucE#@Lt(^8WJt$Ai0dx;3=ws22fTPo<De2{oyVFiXuB*~K^rBy8)ofC-Es z#2^)<V{(;f{`$;U4p2IIZF7aNupn8aRjAE<3Q_S8&W_Yh8Ct;QULtaj&(Mn1W4F|u z=|pXdYZ`RBw2@OE!Z4i8Y1d59YT_<~b3XfW=vIZ>vJFBo!+a^}MtPzgCO55oMTwRt zr&PY6-NN;!TePxWU^J^=jXuwKZIvuepR-V4BfIdc%WpTWzq=*;`w@JRFL|xTO*={L z0T+Vcy5pCv<-k|Ji_G4?uyV8dWlq(9F)|>ANpSaR+<%#!LyY=p3q-peoxk}ph-*Vh zH(X5zjbM43xF4Tb=r%_uwZM191BGXn7VT#h>ZX5x^p$z`EYS&=Q;D1gH-1~;1)|IS z?w0w&Q|k>BX~b`P1AIe229I2&@w##;SJohaGSx(RK^mWX)-nKrZ0Y2iy>MZj0V}R7 zj=8pc*i|O8ZNZ$Jo#I>b`26~4Wa;o6EFA(w5YUEVs5ne_W)_Zl{F7k5TcF6{OnLe` z;hG1&S?#h3-Kq>ABKqUOj8UHL4T9nwA&A2J1->}NcEk3WTI)2T;U__qb#*hH-H$Zx zw;SUCEz+D-UzWA@32?bfxg>wFH!RzlbwBOk*CP4;;M~Efw2vc#vR{DDVRRd0pL9~x zEnv~)?Wg?pzEtcj_1pNMvZFmum`TO(G%9Gp?_&f7$rWq)URt}j9tybN*2q0mCL;Gb zgCdkfxtFo9&akWo5wuq?#t%d;)OwJO1<F-U_-e1rWdLNB?l7g;_|2%zxPX`wj{P@| zgE1C*mjnQvLzWGpp6$e)Ye-M=_z?ddfv|gguD7YYI0o312ekGyoE;?+AQR7zy$og0 zJGyhsWZAHq^Q-uCKq=bznX}P)?q}r_gKaMv<DQVsr#VB82gfQ5hc~eyv+}EPEm?w9 zdtO7B9iMkpiDh+!QcGw92oD}ukaVo^{W9?>SnOpxG2BO=XbHL7#fqmN3z#CNMCA(U zSJ=NkPUhSm7UuI^D3H{C<WJxUbF^Wyop|%E-?Xvlob9V3q>Qr)KQSa;wx7*t)cx)4 zk=CWgS@&ugx!Q70!GjEUt3?LS2Jf$IGUY@yFgpVs=?UJm6S?<R7^1RtDq0Ll>#S#E z`UwB4VdL%CPL!y|KSEvy#?7%eHDBWwcWAAW=1so4lz8^Vj*th~T(IXlN{wRU(&txV zk*aIYk10>UmLN5})53kxa>s`RP?|fdw4-k@Qx|vAN3Oraxyt=~Q%9>Fy%W9Ky@Qmu z4+<YQO}U<zZioYy9)9fDZT<G`FthskU0Ae$VPrv(FxWmS$)RL)DKBg8ULn$@tb!DX zf4-bmsoH8-I1Sm7zSdCN|GYFm@ACS`7n~M%#+gjnwXE*6bn9B;;U9q<)jDSyQe8xn zIxPYW_QRL`(qB6dbAJD&JFr_SHLYNSF1g8PJj}X2uPz8pUH6~<aKfwNdK|8aKWy_& z4$=9N7qJe0&xJTTi7@UC4Y*zPcCtdG|6=5QI4Lyqd}`fr<PyJ@kGOsK>x(@UetbT* zX8ZovNxiicAD8@s-wkmww`Z#gv`AX><;foS7bMD^6Gsqm)N?<jc`oFoHCmd39l*nF z9rTz`n~uJHDrL=es~Y*RVE)EJ%jdE@S$j`*O}9sLQfh_>o`>)G4{a1U376}<?M?6B zi0}{n?^k~Z|3!%Y#s6n0p#lFtPXAy)?gPjEOB<X0`_tM#Q-b3EyQci-kt}cl7M$LZ zkjD<!_P}Qw|2ZqawEfSsT24OW170?A?^<&;EbZX=e{nUhA)}J}4|~mQeYTD5fv?Xw zBqo2M7IeAyZhR`r8Dvp&5e?huEG7NBwJFppyZyvgXyV_~!)rCRAcwBBl~k5@E`E)* znfI;zNEdJ|?j?|hnYT4U8~TOP6xz^myV9y*4H0q<JdE8)T6iYA`4uy;{TnpCSE}eJ z%h@%(hU$4ob05dCdxCeeKNh<1G7I@drS|v34K-(8D{Qg2H@ltEqINohGXIyVgP-gB zl;Bde^j|L1{Rc-XyLcTT>c4syl7eXn&`UO2samGas0)zuw3WpDbhKbT(ZGQzRrZhb z+|5#<skin~FK2V`{GqqJTATZ7xmQ~Jb+4b%YirrKcT4(cSn3TUYyRp3s!TQQ$q7VP zGlV*S&q5FM>v>j4Nwnj5$_gd@ATPSfd*9bYVI1|euX8p%W!a3#b#$#27)8KhbqQsk zIRF<c-d=mnOgRf%>tct6x*uyvUv?O7RwagZ@fguf;J{4ewqCF0k8Zzh#30`8v4cNd zKE5yZtk(8d?p4JA?~iZ0fS%eX*+!jy9rp6}*9JWrI@4mb*m_4+c(S=>u9jaMPHG8E zYkuV|c%y1JA$SB9sZg%G%X4&6p@wjnJYI=%y2|~`hKQ}iZlYDxMN3JxYQI}a%o-K; zdnsmK5y=`#m$eb#q>d*M@~_DbYs4eg##ErPs(mr<`$2u=CbZ*hah&GMZ?cE>d%Ui= zO--qi$F6czzeG1?T#JwN!;#usC*bln{egBrK&jeoM4)-98w+Ozn{F>g9-dn@G*r4^ zct!#KMT5Sq6D4bhE9B-IDQBSRF&gevDS2MfzbS!|o4A%)ITbtnv0(ZEtnNm9B*dhm zRDCAwMTN#i?!fABZWrJCiq)c~7N=u2(p{ka`bc1ZuRSkPA4<DmDdOBZO9l?eu$7Iq zU7w%KJuA_O#Y_`UfrCY#SuXr(!T3<T()y>)4ADTpnm^CT;CK(Eqzou=1OXO2afV+e zLKRW;m3Fu2g;RRmdj=&Gp#3KJu^nmYpKeV#rC?)t3{9_(a#1zU;1tc_g{x>GXaa|` zt3SD=ls(~#s~C$08pwFuI>_Hz4<l}4F$=1+%OW;CWl~{&v%%nevs%7To95xYhDv{R zlU(4T<6maKi2Z#fe5p{Mw&z2cG*-!A!8#l(3}5QcdufNeH-EQh_;L^>OoE^8du$Uw zqPduicH_J1lTuIf28$zJP)j8U&7mB5ERF(QBxuf%1)J*+)R6K?NSXNKrAl}7?M6bO zak=P1c34@~2*%r2roWaYL6PkM2WA=i(C%xs;wjFUzMFxbGq}+r8xeNgd>`Hpa`r_6 zc}BFedC}mGR*!qLzKXV=S&G$XTs274^abJK?36QpRa21m8a&jY$AC=d{2|Jzm*x-W z372A=M&Sifr1xzXBs-GpmI+Vl1_36%Vp$0KX~K1x6%8AfGv9HhRPS~%z-zBa`I>mz zIuALKci9F*`kZhWd{p8+5~`7~EY_)~0$Hp6l&!ra6{~v1fXyD2owGXAwHP=SkVGWl z?dm#WY{%L3rYtyCUe(Oq7Jm$-=Hr3Z_e}+Qf@Y2d!F@!F#R0;PhR!{5KG$Yd$L9P* z<Am>J_kx`f>g6n1V<hDEqTd~k_Yo}5SBYK45;P?0A>C$%6!~&2b+D+5>}b~u>GHm6 zJ2Y}sQ7A7mtu~%3AlNDiPr(H@2Ul)}^&5A?CGY;;L0{0_Z98$Kl$oOn-Pm=3Z&X+g z;N2F5EiC);o#j62L7cV>8z57cN1O6q190VTbKNURXJjH5Q{nyhWKKVwbfYTdUr!W3 zCSmk=C=$#wXEow*uwNA0L=D`WoUVl%>Q^RUggT}h-b_mN3Uj{7=fl&q2|L*$=VGvt z#&gHLnlZ}AT#tXYCj6{cYJwtEV?Py4={5l*jJU+=`b*M=9cND+_3g#R_XyT~x6=6f zp_SKerVqT0)z)x0r3FP%)ruxks^)z<9y^OXlp>|ekG3B|mmHXyA&U0fDJb}b2V5bV z>-*ME7jA%nroBAN4_Ii;u%`N;`3q8p9*llySJ=X@nk5rLV?Ow%P5`c1e0+WOO^TK` zdBl|fX(L%0?RC&2vHOocj9hb!^TQD+-paJ|1Cjea%$$4i{Jn?<XV{-(dqxY;Jr0by zhWzQ>hy;kPkJ=1T{0jm|xgJf(q{NN;dluXJnDqPv{7ww+M0NjBB{R*6Bam#ekiH5w zZ!N3i;A>PuYEzx7y)GaksRPW)7PiT=D~H!k^RvPIE-RNY2>0W49r>}`0K(SOcmis( z#J5=iQyM|-p@4Y8(uTRRw(;-LrkhG+8orq1damWt&JLTwmbBJWnBNXi+Z?=yCO#k- ztm0k;v@Or|>M)at)qUF4nLJ%q6-R~VAsL<Zzjox3)j>IuHu(B-yaf=2MG=5`;Eq@Q z=AnGPX1l?Eq|iYEYZnsg6(PuP%Y^y|?NZy6%9bZbD8DVe7N|hk`D27iRtoQWb6aG5 zq}UEf+BQH2F_9-=E@d?<mDO|&J)6M{LwKF9WueoVXH<v>-y+`K@Ux)h8Ujmq3ajjL zH|Uh;;a89}KHSSWl9P2(z*ErC!PGGR-jBRhNiDR|(I~ab=IT?H@C7F_ND*U$No$3e zG*gW|o?D2oK&kP_Jv!U=n#A1^8OS6$b4VxA!&7CPABB&0%V3HH1GtyUn9njBVMr_e zV65i)c{-VM6c$}QEAeHe+c_ZGNSCwE*qT<3F5?5jQ}uP{+fhGKco!004rh<G<B1JH zo;<!LX`5grvIqKq2sc86MHRf3s7vv+fk|K#id%&BeP!j(@aR306WqR3X*74T;Hlvn z85$DK-$w&0+Cw-L9hZsPES17PWZJz0%bq0Ce8}?&eu|wk9!$Ta%>)Rcg_&`+wtU?G z_WtcpI9>A7Bqs6v-|x>*HvtqF-|Dv^MTmZmFd4?3wzT~YuX(3N^|xE4HYW#&bA4K} zFr(>;!quTeUk-)Cr=#oa>n{66M``#QdSQSe`6u>%%$uZ^J%Y$lB0)^PuU%HukW}-N zq(m?7iCx)j>zX<6G`!GMP%6V6%*o$(vmCYwg(V0o1!R6+*<u=5kL=cqFy*;@kJ#@H zx9F0IbU8R6e!!*dt_re<Sjp<{;@m_Q4E6Jyy{diQq(S%`XebhAI7M(}HTisPPu_Ik zQ`tM7wMGn&MMq#Z2&os=h5A{-;7iNl$?jl3NO-7(l7T8i{*Aa3Jj)8>sU&h|f-p?N zQ|f-`AW3`rh{07Rt#s2AtW~h}2e_f^C)u`5^EWMK)lQBHoh=L4n@u?}Ttem};$>rC z#811Od4MA<Bc*6#2yA{{`U>r!d?XTj&|<*M@>`T>XbW3-QnWJIcgya96^e(Lc6=EZ zesobV4E0H%BlLMmOOZ$eFSYDCE9co(j~kONzpa{bN0RI~`S?3K=o-;XIQ{E#X6Nca zNt0V|3MC!$9IuJvNKs&aC^NxF@qlatr<hO^?prV2Ngh6`sSjmxU2N$2g0X$pM^O>a zjGyaq1RuHjL_@GCd`vP#Xo^kVSQ>lpGBu<}L_%yRC?Wd`@Vdj6`xaLJZ%%72H9DZ~ zw+To02=?#exny?=da~b75kMkiEpGP7M2LpAu)6jY!X=zg9M44nnP%d!rA|?G+AHAb zMT&j_lbYVOUQ906uZQS%%jXYF5mII<D#5CMZcEWNCYojj!8{;Xk=##aN<AljxMYXF zKzJkwhpRvUTI14h{3Dg;^eYSoQBg+hGx4!U$mHN3x6j;%zt>~)aL4E~emb0h^91ZF zSpr|Rz577)dh;YXw95cmkR%_$q~8sf>?D_bq<5(_tem-%>^AMmhYp09dnW#1&@##_ zEvM0xob|F_y2;{b;l6$ShAD?>G8jWoC%B#`A=pEusKB5~MOuuUBl3d+CuA7oI;;I1 zj`@igg`{yI?87M8AB8t$aUov0oTxSrtao@Ylp`Cv8T3O$F63lu41_1f48apdXSL51 zGuIrydqiTV0*vcx#_zwf;4oW6s=1o5CkyQ4FSAgL)I=>c1p}6(-a0FYh&wNJHsnn5 ztj`;^I8RqO9<?+Wq|u-(t?EutL3#)b*1z?+pOe39Y<J`sO`kO0gY(=ZL&;irzv%8D z^rGI{xHD-atSogjog?LTPEyZ=(ERD}4a~5H0}xWM6`c2;4&P^|66(BYz5nAnPhO8F z{;sW+N5_wm>*p}?c22u)%{(U}C@1OCtJ3ve7#Lxaq-TjeJT(zoXMjfV7TchofpcTX z!(1<+y!x-e4>v!5rB~{qsy$Vtp474Jg91Utvh)GUdT6BPYwyQiy_KR*_}Kk<CtC0M zJ9mfC&0Awr-ph5U%CX208jPoWJP@b;q)xSH{Hy&<mwMxdn`B&OtL(%jx!&~CFLdbX zSO1Ua)6=LaqL#188c+XF=VrBA`V4hk3_$hDjOs0N{#+iCzGo9eoe-l^bz;#Enr<{= zjFQ~z7%%jK_t`?!^7^}Nxb~W%J3{`e$EaZ4D$vmpxRMW|Caqbm1PBjtsw|^Ae&c~s zx=NY_L_tL7yp8{n@I<NUQejYj!~(B87|V=079YbgDBul^+c2q;FMUHHB(v=gxrD5w z(`G*pJ~wKbYvS#(5T_dgOV-;{N|A3(M*J8>ym-_)e^+UAM^A04+mam($K1gpE30MP ze!V#Q8jHy_y=tz~yPwc(vlua{YpY~8aPswuG9rJirOZgn@9<|3uSE?e^*Hx8!6v39 z!t-*V&s$J&_h5;ox!qkdJe+iinQwv6YTa<H1&>Fd+j|%+sxtu&0_3M7{Iczy$r!gM zM`(WA1yi)e=)0%H5bFa&&=!0SNh5oI3%aC_W@njG-{kDw>rT9HV+0J_;KZ9Zk6;lO zI~iC7LaknN+sq`-btyMFv1>Mt7(Ru`Xt;Ow2P<8Pr4hCq^KA$X8m)}98#@AY4sh4{ zgfnyB92*;_iJIL5IH6n<PXoTgX+1sW9{6N_1fe3$N`5?xG<{EK?z+7OcLwhj{Azp^ zyqP!|bf=gwl7{5*ZYY_9eS8GgCg9raop8athUf>|#^I+s%+T_c$n|&Gw4z3T?Bz3^ z*Xt^+OG8PaPvdoI$st8aG`ce2a87K;9%W(62qpUpJT7P%DW7I+<v11RX)62*6NBGB zfHvM7aX1H&8hn5{;IhdP?Zd$JI1{`krYG7h`>QPG%oqJuAc~cGFu67j5qyX~b8Gi< zi_y<I$jjLKZFMoVKfob-!=zZ!d7|<>pj7f@<09v>=de}0Hht7?k92%Nc`?ugwlXmh zN_V;ncD)>VFD1vJN(-M@Q-_m0q)GKojd&Po_-ip-dSV8Nanb7yy$=-}ena%!|La!* zlOFqJQ5e=^Ye4DER(5ONKQRT%l}%hY5<u9;p?MM!W<Z%2JF+vz+lC%`gtht6<<Wx@ zi02N--CyG7>bykXdWHODRv4?=v`w%eD0dV3GPtLio00OcdVU3;PxxTnBfB$w$NTuR zWyw1Tpfe%iU0!rLkq)Hni~EtRhc(Ffl>Z=0jJAqQ1avVMCwKpw!Bhfg5a9R-`yj#; zHxi?*le;_!JKx>A^yMzC7EFI43K8+k(1K6lR=2Ra&NP-s#-ul=bEDj9+Z)yI%7347 zdHio$yo+z*`{~KP+=XfLch#&9J=85(muJSgf**RZ>Sj=mivq+*9|Ri(Lg9Q>c!ooE zkHP(K{-3+-b~U2VUJE4W|9u*NLa-%o*Ds=sg<7Do(Ep^#W%n*8pPlXm&MB;@{+-K6 zi7``i{q@3LA+1WvX1v^kh&lc@k#R$SUPiz8{%?xJ5O3%SmeR%Wz|ivFT;^>c;U)4O zWya%ai(SR7D*LyoTyYJKEPw$Q?saBs=fko6m1k!}YDcW%$x7|FUBvPpu~e54H*2-S z>B1{bk^L;S2}967P-h~rX-(SP+X#YRLXT6$pbp#b1E=^t<QLxw7qs{9?ekt}Hc4*6 zD2GR__WKmyd}61~x@WP7_rY;{4cU&;_j+UD_n<vivNIej#hwY8G0hqW&~2P?CSXn{ z3hgmI7Mc9OT0~)@IBa`!o23GYo!v_4{tIVDfVe><s|)*6iIHfPBA&ZMOMyoi`JGw= zm}kTa<gzZ$e6RLd(<7h1O1)`AUWM$<NRhirwg*dY3!S1z4<5X%H`H#hH^+pFiVUa^ zcNjx=A}>JYPI}ft#)4x59ZM1Xoq8>vox5$`sHV6G7^$uXejwPVA2_Nb8qX&F$4g#q zE=oqo_S;?2?lf2<TU7UtMY{kI?*0H5YgtzwJPi(YPW$LPHS6An+7a1{%ovYG;2)yU z@3jl@hrZm!n)u|$c=vwWhi`#-CR#Ozo>v1Jh103taM1ZRBCHkkE15W5632lb1;(-4 zu=dlD#p+S6hagz6*IQh1?2Kvb0MB}J=+PzGhdrIFx~-^<5Uic=%sG-fu9(x9yWk{9 zd%{3tklM^msL&T`Es^0CZdr+x=Z51MyHmTL-j!Gxp;9*dx~u;<Sv%Av@ZVA0uk!+| z+r}>;_-;pQL`k0gPCtFnKqQWC;i`gOKi#mW1-ARYqLXyWYRzYnh$0D|&K)=&FjfSI zTi$K^sFCDQKfPe0kVtDwLUP;Z_mJ?Ky%-Hk112?&7=>zNLyuZ~So2v0a*s%BaP-I# zU|IMIOL18o-Opc23w8)eb6+4fs><-QY2ZmpON2Uzy28aol*E4<jl`+Mxn$RVO_Z0V zrE_HXJIk^O7A&iqDu&4J$BA~_nF&^B^x_f23*Hh6K!OL6L#=avM9sL6HUC0)=K~jU z&l?wlT%|Mu+BU*fehP*^B<_LhOFR=qRq(H5vOhI0mA)R0EZni&H))61A>BsFC|EOK zh0Qe79N$Iv&`bIE(qHv!o<?hzHLLx?;cROzIpjMWPJAKxs$`&Y8{zbV`886bTweBJ zLR-rCp&g2&ZNfsy4>MAzV5<Ri(6IS!8+O-w<Q)pW#(TpJ-%56N>Yw1?mec<3KE6u} zC?nK`C%1!EBT|E+rYiT5&||F&+mcP_`s4TLCnvV&u9FE%9r{Jp{tk*Ya47E`eKr#- z5UR<#54u#4GI%SxkF;>Aj_OWFRf-L0lOh8%u%IwRchsjtUQUj{w$I^Zr>6TV@W4Rr z3JO_Cfr%v1kH5IVU%tNk-1L|163up;&wKiq=Y#pTz0X>y*3Hs-y6BIcEF`~=c=lt_ zw9f)2_$6IrzYXKWR!I79_1ye@SE9Bw*C$p(8BoHXp~WlH@4l*2@u6MiS`luk%gZ7* z266M8hqPMQTVKT>l|4bA<Y4ScW}C)d)`Q6i##fE17Vfv}Z^#iqhaZ+@@h-irf+^jb zgW5T9?9Mh#nDXZUD@0EwS8m*GngPYBzRUVXNVV~ZAY}rCi!NjH>p5<~nQ-b#R-DC& zcF>`1_9J`SsDR^a9ABcz^&x7T_~K7Ur`1a=33Q_WdCxvGh`fp<u8!1RIXGXhG1S!t zUb6h`@)qR~NZnY`{6v?57fd`!WuxP@NSW_>_5Qk_yoH+_e-@js1Fzp@TBM~O&!=^a zOSg4d>YCVIa>^;u7nW(5YLJykA6{1|8)0b)KexJwEhpjPH}}sR1f#(t&hXIoUwCM{ ztx^RC_VYrb-*IUjspm#$t>4&k7RXAWb9vPFEPhk-soqr!vxaL2t)Kqy-|E^*O5+yZ zWTjo9%+jr#Rhh`_!q0Iu@n|5`Fey!kThsD%WKAFT_Rz<-0m~#5ab~McY2_Rv1AZhp z$`yaHz{-TN$>V(KUv+G$T>755^#gmK@W6QitvK8u2aE;GaemzDKYF?l=TaG-r7?;z zMTfuIuJV*X+KBIw+mGe5$w)OYpLUK{5i{wGoI(drr6R_B*M={IKEFdaKPXPkF@IZ1 zAKr|At6m8?ptveVf<ab#Qn55saNWf|Yqm}X<a2<<nx^Q`R2#+mbgI)BPi$D5CDZ>( zWcC}oY`^klISiHMxh?9?VWiN({S$?64f~xqNqzfA*q)FtdnWV6(<86)O}G)ZgSQ~W zxoTJGRr8RALrl72{btflD<bHbu|xc?*lkZ6ck^Gz`VSib2rS^{!yi=e0t!0qmGf;j zqoite9L-%7D!9BPlGqLjbay+qD9e7FcfqaS4^OU30c2BCrtrW~1uM`7E>JHjsH#@? zEQAdh@qu!3-9m+S<FJr8lFnk6(IOHsBnyMk=vr}idOacJJf7Q=k3Rg_wmksLX3bw( zab0{1#kMiNf!H)6gLJ>IN(~qgX!V*!2KXIg!cHw=C_7pW`H0A9699Yi;f)O&VDIev zFF_MFIk~N6|A(xvjB2A>!^Pd*DW!OEcZcHc?yf1NxI=L$4#iyy#X@m+cN!qL2Q4X3 z;O0BuIqTlF?jKgj?ChD$n#}CyedJx(r)drvrp~Y^k*cD;M<#OpF4q5S@`a=|fxy$C zL5iK8(nt`DQ#G9??{E&DX(4f@N~REOl|TI)4PCS@6O8rc(cv7{Iab<cbA-jh4u_HI z(!QrQ(ghPUO|;O60%-l7rv9W-!Tec+q`LehMb%6S{1Tq+s>AL%{$uXs+3)HZM7E5S z-n=arHwdf3Bk?>+yDr#x<FQ)KLLD@st5oqdyuzRt8;HA&0rJQWm{?yPe_mDog7c{E z>XC?FTVbflUk}6!H18MBJVe9_vC$$vcWoSk1j=4UFNi-$_femH`plA^EBlEF@G2lf zd{9-Of2dw6;yi<GFhw1IB)!DrDOi7SOv#T&`qqB3Y3G|<E{{i4%dq^pd=IdP>PccA zhrRB;KILoQcSNWboC8+IUgmZDNOOuLaQjG*n;H`md9+sRidweN9&-U;vL`vGQ!aD_ zpf$WpV;TN-XX@vk%sN+4Q<ytllNmeiEUBj<V+#23rzB=leu?MqRNV7&<+r2h+^AX2 zwc^9!6g6hew37srKKr!4%%Fz~?;BaLx*a;MIXigEjEA#SWb5m&mF?DJ5~5=kOq=fU zNAstLVGA}BFobd^Za{x*26P~Wei^sU?JJ>geTD_W;9qyWZBj~9+@eug<XxFBmY&mj zUsa;k-Ts4rR88$%7@U;GQ#U@svMeFopNpXNwbWYVb78>#M!a}N@&*U%Je9Z1a#06f zgH4}QHvSP!3^`~$QE*)b^N!YIi9yw&NkPJnExLk4`MZb@Cd8XJEN(fmiQ1=nr0~Fm z8~Ur$?oBrRNeY1PPEGNVCs(Q**}CEFxjK1AMySWuoM%7Vx!3;hlqmymX8K^CURW@j zJT)4=*ASq2$``+3AUGAng5IhOCt#W#;)t@wC%nq+Oi<zM$$;tHvd*kOZb?sr9Z@jS zB$$)@&R%UC_zt{d*O)l54}6Ff&Dyns22sQAG|t0!v#2CXRMYs#bCi(~i`@jOJ<#2q zu{M(OoqUQ@`mA~A7`u5lvM=WZe+fe%<k2hYN7m&OXmt6F5F1b*bK8Gk^0ry)P}~_h z@x)1}x!2MCoEK}%@of!wL9+#%AZ$>XUIAx(v)YRKX!q`=+sRMiNz+4Af<^u^&FwY7 zmNgkOAZ^#Y=l1f<wJPsRyJUlVlxaWps>$`q2|EyX&$Itzbuuc1?FHFk+3ac`fcPgI zOkbP$VTrK+xoh@0eQzJvU^3r(LUtboB%7u(+y<s`ZQ(zdH_*R2OR(_g6G*{K(wy6K zmK3ZuR<DZIWqZBs9Bj9QRDQc@FR}JN7B1CM?_d)ILzF)NnE;3oR*m`!ZEY3efL8=M zzx>Adq5%f0#cs6=0OklLkka6@S5fr(fi0x+ucOxXpTi2B7qbo&-_07=`CkzM{J^ig zyF3%{d5(NZ9SWbC7>;()(j`|zS3B*<HYejQW+jXLCs<&6Ufjn3!Jm^x1U&?JqFOi% zTRBIk@LLD4bzud55N$b>?9>Sk@FFXILiq(_F0u$g8o~$Zh3p34V5PML@eEI7h>?$H zJ2q)yrherHZOpD}1MOO4fJGbF-E_n9Y5YIKbtG5=JV%#XS2p-M1pCYgfr?ap@w|Xh zY8?Ne)XrIUiVK)R@!8Z<(g$`byeDQe#esX~Uh<9lwSIXWdp8uOE)mGf@!CLHo1!cU zznq;sXh-4HbGnYY@WJ2@L|=Xj!Ly1hn6AdT&*u}Db;_T%bW6ZhVT<;k?!IT(>G^j` zK;fl5qphGDA|wiSLx)Azs17rpXEyoddIl-ydE&2E65RYh!)uY3$tOJBjlWAi+`kuU ztQEi)@v`hq3j7t8R49N2t?zpVu>)Y|@2_Wv@X#H6YOSWc#3z*z>IZ#rFc0*fBa4}2 z>NE4`e_s4&TH_-crH0;d+(Fu)4Qqj0Qa_UCqwha?y`I)}_!RB<f)WFHUn}fq2vbqx zgo|)GkzUDv;2rt#@Uw4H(*(2mdKmaqF5V0dA?D?tWR=R`sC7m%!ApW?mgxt(Sl!gG zv<CpaTbcf^J+pbKtCGW@voJw~5Kd2+wg~@Tjlg}DTd9X`Z+=-{N1v5}1C9D3(5(f7 zWY)eJr;s4SPFU7x((5V=;h^lwW}>u|C~E!}u;<Fhfd7?tEbN`VLoFmiMy*DllDOfu z3ccbhzu<@l4c9|=Rm$21k9)E*0C6$X1SE8LcOqJ@ADj6-4hmXL8e0UXT`G-Y8+QCC zi-=7whWIY!-^+dg7SkSwA?RBhI`yo|2Sk%zj4%JD%)ZVS=}GO1omLoL1@w<V60$<( z1DBaN!$IS}z!DOLu=rwsoqS`ey(L#=*WkgmudZ(ss4J8N$RDcnw)^BC$2Xjl;h^sK z(GmodFIEv&tmD&voBrT`64}ev2Lz`tRGO?j#_S8h+Lglj9#HVNSC^pc@=1TkqOi%s zX(GCg{v*)OHI%~WqH-~8S!qitBI~m6pW>FI$t18M9ai~KE;F5-kP=Z&Fdy`xFGtfI z)fZc%zda)1j~$Df4rYeSVx)lXVs$c=2yxp2fpTm0RrTA94z;p=&#jGj6*`pNGlxGq zsW6s8=sm)pJjtiiazs^0lQx79PKAuh)k2AHzT8AK)mYWIzMs}S!2s%9SiVrx*SXyb z6R74jci<X26@~EKS`#7|x3F%S*_&Hqzq?z{szEMvJx<ugt11SvuC^FV;Lp?&gJhd^ zB&wg_2Ylc>1%oCqQ3rj7R|GzO*I7wu3RiCyr8EVL5WUWmRl9};6k<_0;a@6n4@XPX zWv`bq8g3wGW~<gMmeyfeJ(&{JO0FrO%Jx&JwKGJpDRC6!<~&T<+R{fe{=|Y*!)nk! zUA?TaxX6@w<~e0>)`nqS(V7Cp;xf)>G3N!z<`x4vh<tmHmOl2jxKyRnhKeS1lhd8V zndp^3JX+?1=sVZ!?~#=3<)M?jcEG=*ubU4RC!DCzvrQgXG)gE0%Q~1!wkEFm_n4J( zU>}=+2^px9+Jw7YwbXU+BdamlVX67NH#>_!;hG%zbn)0G1u@wCgmcPuRjOIMZ6W4r zK6Y(^$3wdw8|96*-C&{@3N#Vj(!fzlvij)=S#QMt{tIohuyFQl)B|q~Lyeve_32FW zNaQJ(c3Nn_ek|WI?{ujZnMRu8B+a^18!|h8;?IVqzny7_XE~WQxzp!n&iK3mjdd?T zf-wqk1J!OQy5}0g5%yx1z7^9~AsbP-y}D*A-T+2D0M<NKv4)?IppE$bji@eK%6h{g z{`0i$^orK-p%4aezx=&!Qcg}MY7>aLAydq*X}`wt9SsT%LQnkM*lje(KL`boOlP1! z$>oaZWW^zDemoil_l>51q9RoE(L}JEpu(CrVQb;f=?~Zswwj@^Ga!-Gq;N64vvW<4 zp@?xNJ!sWomzirVEV}<;OmPAYB<m8^Z|3Z451C@XDbab|mf;iji^&r@CXD&brzKq@ zyQb{6d@!8fx0%*?22llAnPf!2sxGUPN{B7o;ecm!lRekXop0BJ_7`vnshQvQnPJys zAwfv_%TU8RwO#vkxB*;1?lxg^)3Kl;^qS^p$El-I3K5{7i)8D0SM*wc&~x;pE3SSA zAs@5pxR0u%HFd_(aSeYih0&P|t>DraxWQ9x?>_u@F~1f}!x;Rg%8Lw8ka!Zpk0U01 zB$2_x?MvuMsxqpS<c^&-{Lay_I<KqZXA+?HEwg4Eqk6)0uAy&%qqYhpW5gE4cDUGl zC<xwHQdr!BlbY-LhAd03I--Iuzpq<<Hs%Y=A=t=3yL|9c$RPDx<oV=Nu3SQc8id3; zsChA;W=NrjFH5buMuhTQMHC_GZyh?Uj5G&UEo+bH#P{@2>)l48kF}~D*Gv|o!uN%P zk~uc|?Z?%GiVEuL)WWhG;i0;Gh2~<ad)xh+Z5tK-XualrK~@q2vB^ZaOKk6+v(fwK zGAzgE#44~mG>y`cM?394T2xHSn-4+dNE1NHE^$7&jgQZ+MK2ZL;6aei3?BooGYT|P zYXNQx)=L^p?gB)GxLfY-Rob#=7O%~os`FYLy^jzD!FoYrC<o&(=-63rNqw;HR#ZU- zCd>V~<nlEUyB?3Z|MQAltbL@>@g{lXvTyZtnZ@&>-%Kf)*E9wW8mw_T23eA3YtzE8 z7@BLefdo5q1V#cEb#VYvv(b?1fad9^uQbjK0k{y)d0rsl7rxwNDmy#nzWgjs(8n+K zfhfMYUehjCqX`tXMJ_x*+QrSt4jobsq_d0g&AbkFe@?B*(2n-qfa){Tq3BX?-cH^j zkWSMf64aN+SFnms{WnjooiQP`IkOr*&;rduhZ@$@)iRf~HGve*m(ONYp{_yC2xP;` zjt)Fx2PQ|Or1?28Okc_;T6od(3czy#3F)x}r>Otpc%Rxyu(1Jc(DVAlXMLChiby;K zGtanwcWYq+ZElU7I@l14m|*$)R#R)Ae&ajpB9id;gAkc}bDYr*n`+q%oO7Cv5;iZ0 zP~4K=4pM{Yva~r+BZb&(KwVoo$znN+d&kZ>HUq?m>W#b2Ea-McBR*;{bikKr&@}U< z(1i9o*2i`{(*v~pPMt!T^$=1R5E7*r=E{H}fKidwBIjjG$UctSn3!ztWB4J)?h^gy z9YeFQ&Qh;E0w{PU;O$8NXXY88-^Pe@pmRN4r0U;@{`{YQKkXse<*BqGu<yps%S7Pm zYYEA0r>?>V%CgHY*K^i<^fX`tCL{Vv82OLd2Eh9A>DSVg;mXiABEfOW5s5%iNy9@s z3-vR~u*_wvU-8>bWBO)CTacljsDNx1KTpwspFcia^##p^pTZ2Bakux_pG^A9c!9WZ zUPe1KQTIwG?2%tHfQHW!IZtLCo9s5&jPdAPs@s8dj?3_(pekc{h)u4sCND6LPgsnP zGFtt8p6M<-FyMGq1ZZQ(#n?h{Y^SDMZSa#5c^Z{fw!Zkq&Xe{;erU`FK1_6`3cG#> zrKmWgH1GN~A5UB+qkby?urufEDz3x9nP`M_iaNlyNp{}F^|UlD&aEWWk?d%b2ff(Z zNqoWPHP|x->R27(yL`snX-D&ZfPucH&+(Ix7xqCkypfVl<k?XI(|2xe;GS#6IBJcZ zE=P6YZ2~ScXTs`XBe}E#gn}$I2%<|8_TlFY`Ch^M%NB+Dc>m7(oFm8&%&f+64bCUk zgX|78jl&n3LkVkAIkza^Nut0(PjY3oYM*>jVlj`Gd|dA3>T=yDbiL3&Qiup0Q&>S> zv-Rt`ljjmkv4L6{*VmDL?DFzk(wt=;L-w1g{bn)IGg}ozTtB58=CZUiB-?+67y~D? zd+ia$+1h1V(>M&K@)h8{IhtpJKIoK-yqEB%CZKdgLyP{>gmdYMR<4z35ZGgat{Q=W zvrv8wYwzCtH<vkLXfchERaKIeo7DD<D_;^84=WU8lC*9<4i09~p)aQCbhj4Ou0pK* zr0VZ*DDjyO?_D<j$d2l}w|Myh71~UFT*X9*>Kc9kXLq9gsz%}XQ>KEc=N{7&5Irs2 zps<GohJBNc6CX}x;Po=X=N+=6<~3FkiJbbkN$_l@*j!^qZp3RE`;=Hb9cj(jGq}4m zG392TxC!<v{gxvutd3>o@69j1-Fst(F&VZ8#!Uk#bRa>~-wf~qjWzAY@rCz<iI->l zjs}{SSV4+jxci&|-^=tBFM#TZ#%RWBt}9GE!f$TfNxkJ0_Xv|N(-XXgp=3rMAOBt- zNyd7smQ)w(wE#njicC}RzX23qlAIighM7@M)5KBOI(o76MNk@VQc4w8#}9D=H7yad z?!o>kfyr<)z^nBy=GP*aJaR78#ZBP3uj%B%6Bo#ihO;QA9vG0-cA1*6m%U8xlrh06 zI{uKf?KPZs0h(pn23T}A@O=+ht0|@jDZZ1z9;)U!NP*wm?wV$coc~wv&IA2rT`}nu zxtNu5HFrnymx$>rtGN5A=YHlJpD#6Wu15;&1sO}9ai5>7$%kJTCM1H0&z>eM6GQg( zB^#XnSmFe8Mr<73G`5u5V1Yttv`yn`Z-H}vN)ac8?l_I(g4{j3skt~<q$`9y0@<WJ z%KtsyN`?xZBtjGz{&=wV6VMFN@szv-NFH!$H5Gt^CsrqM__igkU+ec<hCWUt6Xegz zqE-fWyK?cqJpNvIjh`L4WQzC?WYbpP3Z5Xem7n@^W|x`-;ocij`d0r*Lar3CXTOsE zwHh`j41GOB)TNMH2;5+D^k?$mWv(n3vyq^ZUX@3O(1J7$ga1KCu15F(WN4;&-;9+> z13oZWC`Cc)((@Zmdy>SH>DhnL;maE~TMqD6#Ysm0X4F!4hrzdSx6J<h#vXCfU;obY z?S{z+KdtY%wR@r0$(ggnz`)50!Uo(^zX_oR&2IAi1MzUPh<VUKle*eD6&pSfd(-Ry ztm@AwP`JU!R}tX9aPeX1$6Lm*fPsTo9e=+LYlxwy+ss(FbMx#L2jKKyr25aX$Q->W zuf6;{&os&o07%%xCvdLVXzcgmLYM%Ob{V&s1v<ecbzjCYYpS{0w&y!2QJ{ZaEnnYy z_S!>~r?dF#w-q|l98aEHBb@m4B|-|ut`_BE235s|lCzgP@j;lQg}+Ar9D_Iom#|IR zX_`c?{D0C9{!~AZ<(w63!E3m(p}hZ^NN#uk@H6-~^a&&=0(}+y2g;44*@B?oA51I_ zsJngE<+yz)g1GvpqkqY^hdAH()jw)vttIiyRG2+K#iM;JI*jh8E5R;7SGEbPLSOEH zcX8hEqsd0t{oRd7Mf99%b)lnVROB6C2!HY+|D`JO>^-TE3z>Xas(m|&@|5;7qe^7% zP3sE!`}3LaBQz^0ydD}=FWWp&6BSh*mPOm&WK3<=aZg>XqyZIS?6wppKL$NOl?_38 zYXj;Z7U@t1)%{9_2H$)9XiDlOVwg_6;3?u?DZ&bIdI)Q$9OCQ$R(+E;giTKHD7DDi z+_WXDT17*?0#swb2oe$4?~Ys%eTFBvcsF7Lh`N>;X1P>KZZ+u5P`04XG+39haJO!Y zpc25i1Ddk)ZnN`lDC1S?oJx2<OTt4<C~Gnm<}r9}(x^R4Fcor~F|)W8vs<liD@Ho5 zchQzJ*faXYmsZq0Upq=Hf0KYEz|EpXf@TWd<fzDLHJ-E$p!Hf~&^kQ=9B|T<LNZ1L z_ulMl{=@7Nfz?Mvoz;3$Lu-Px<YWRqOYUZaQA{jymaBq^woS{5w=bm1BG#_LJnvKC z^Zp8Dq;-F!w8zCuQwIJyL7Nm3xnIz4Km&?OntChsy`gsPIW|`HZ9&1Q`Bd9z^~Bmo zZRKX5_<PJi#$A`c)cR<cZ2O8G693mfUo=m{CapC-%=J_sJJZH874=@tYLv*BGrNPb z?pCLLK}W;$wW&nLc^c-46o_q-t!@Nnl(^{q0-GQ@@k+ERBN>BA4IP!k)(FLCH`dOD z;o6E%E$7h`(y^k9pPvlQiJ_ZsNR~P38^c@$XrPS*QixmRV>r`^KM~x2hM@uQT)hoX zq|h>Tc_IX@gZ|JBp!|r@Po6u~8B_|NQ?Iit(X=+JM2;BzQzN7wQF$K9)Lk+bX8v2e zuF@mu0d~)s1g#5sX>KBPIZe;4Wp_OECD<P`207he+3hofB`AEtpJs{Q4rjVm4a{7~ z^`(u6eVNCr(EYjzY~SblP6!Q6T6e28{`D;hn9HKZjsS|1qbNyhGt4?gZL@L8R)YxW z#^@9M($q^vg3dQ$>%|V@MdD+xR8-(uAFXL&@zTCkjBYKv82~thq?2E|6eoQjQOQk$ z^L4XFT>qIT6K&mHHv$)}n>|dqO}jY8G4}n?Ady6+Ru{kogazL>Bik~aBM;{}24AQs zsdlNlwSHhK|8BaW-WLR`x*uU!0V0tH4V8zM-Zvv^*&|#NM2Bq>3l;1Ck?;D%>PJQf zvYO5oc|jJXw9aFGBiZp!bj@?G_ABA7$0bpkV=!KNl^s<R%yBy&W8~1oh5)HXVm#qf zMAy6@U~U$ZP@wnvY`FJzLZup}e3X<!XxWNv8g<QqpmmoCYGzb2I1*#bF{PFAZ(4Du z_VjFwHci6V16v53FVQU)M6;mAl`<j0#>vNg%~M`^r4anG7bQd(q5#p>EnUh8oN>aC zasx6keAC3H3pjPy<p9r2bsJKU5NT}A<4-4bRI)@R<4L4BySW#osO&{M{80&5Gp2(T z3Y!Xwns52E;PGlr7p%Cc$yS7vS%2-n1~3C_LH*C!@b})xkQ~j*nctZCf#0b8+M?}x z%l|yq@&agKH*yPi-^n>!zJ>IU*~>iIQzAh0jW+Ys>@leD5;{cE;^tlGn@+pHaicb6 zVgz4Fu47D~iw2$vEYZg55(6UFh0))6Y*#GCZ*nLh7bDI|`vGrzAfIJ_-}Df_q<>*R zRxRvfD~$J<Qm)%Wn!>seVt+`ra?^gGt+n&^D>JtLu*jX^ISoSh8Te6!pO&x}`j&(3 ze6I8MbQ~l(2Ac1VsWw9bjTe6}GCk#Ms8tR=q&d}{{2RC)Cc4DAhCghABLJSk<R~W? z-~llCwjP5Nw^A}y9UyLlpmJ(*=zKj#-&gsN_ae~If>JzB-?@%aJya>|Ud=(A-<R#5 z%wt8k>g4&#Z+eYUa!n*Z93?%F5khQ|l+1XcslMLI9eC-Seq>x33!gd_p|+6Aj9;5P zSvxXcV9luo>k1MP(U(Vnp#kpbNuT#@VW%o|B+dtt-+`D#tj=J;?Ms1-!b}{!E{+{% ze;V91=itoUW=+(#f9+20tx2i@PO7AZqjomBx@_os?thyty|)~?X|23>MMOYQ@i9!_ zk}OHM&<O|2g@aRx!Dra&?+|>1WO?U^mEd_0>vVu;B}oaNrx-yOUfV4O4wVr=YAqNZ z<XF&|KlS`QC%}h;c<abKzaCkhHutxLmHrBh-1%D9+7)vGJ5X~XuZr~UWlR9AS+ztb z@sPn`L3foMSYl<|&Ll2*8Fjl4#B?*K3<uPy66jQTSN!wawuXU^vcxTXJX2_=^6<mL z)E9i#cZ%f9VfOVI8=c|^0?Ak^aW3lRarJ(k>)zgVj;27pN$Ha<Ug#P=3gvA{9tFnO z=pm2j3{J!me{ovJD?fmV1zkrc&?!?R%plOW%ZzbcH?MpLd%M=8oDdXJM`lpL;?xn` z*FMFRTs;w^Nd{UMCrw8Fz3X}kp;tSvIAtTz?N}blB%o#8KSO=n^AuN~vUnG^tog3O za<;jUzrJE^G@_FaoXu!X`^NJKYtE71oT42n`zdACin>xPM`wIl3r9r8U$I5jhlcMX z7O(04Ay)yZG+AgT@kgcj(lZ=Vi^hfK9%I-u31*+`mlIY62A3{SmY&>>1)pl#+J*pN zLWUQBJa)9RU)Osk_3?hJ=E*ga$nfR?B%@dj{)8p2DyO;1U9CQA+*{_0$iUqbDak69 zUJKk}4v`vRg;d;c9?veRD0L{~eU5yBfr+$v_b*N-R@Bv*C)GoYSJz?4@*lj`e#YeP z$eeyYo>n8o!p_1GKVQ?3#3UK-YYoxcIGs&fBv@pTR7L|OTYWmB{#Y3(Re-&;O$eHO zf-Rdgr?g<JOBUJ`2gKik$k2a=j>a}Ap4h^ug6Erm%NVelI8OQ~MZC~KdguRr3sxp~ zn1nUt&I|u9Q&7kbTgYCbLyp{Y{;i?o@R9ln1WHo=Z$as~ZpjE!Xus}--_N4lFoiw+ zyA};@bL9fqym>-CrfF{Gn9Dl<1`YcbUh4615@Y<oB_yg59dFNhzuB)9XP0%yY(A%9 zg*~P~rJZe5Xj(_1_XLZi2_!5)1q&i^Mkh$gKlKIG<l8kv-m$X(4bS;FsJ*23ZPYAl zl!wJ5j5Tqylb=EcP4acm)R1Oxp#UifbL~6@ZQN#u??c?%r;gmQ#!s#*X>Yxv<0ap+ zQhDSZc??lGwmq!-2_L*F>W{ti3~~E@=aIXif(kv(<23*`z`~Px&Q^JSsXy!%x?f>R z|7=LwK@2jK_l>u-@1PaA&z4PDlchqOq>6F@24{zy_R$SHf~{<m@qLHn{mMJfXH-U* zW5@hxY*8L*mj7a-YxNxSe~!YXzjpD@*AaTk4EXbj#;8STETSWl*??%7%Ym1yW7eIE zC`BtUIXHdQax^%*Tj`BB@;3(FqbjB*rcj-Cg7@`30`iuJ)<)J{7Sb%VJ~mnHA(F-{ z^5w7xF-Q20$YpXWU0myox%QrEgVygj^q9n6mD1Inl(YGczPYP8AT2Xp%%E%Jc4pfG zk%R@~My-WMXD<%`_h%7jy?pfp$2d7Ry-+~EUB4Pkr>S1O;Rq9b7cTSMZyQYhgFEwP z{tj;blC_x>14{n<3y-~9AzNkY?%Jb+1~_0yTDNdbOXsT;;+~vdE$A~l$b4}2B9l*M znSWwnQN~lk<_a4xHcbe0=a~NV6&8o`mD$E*wx-|3mEO2dd_V-2<V8wGlpcSc?^O@B z2K*^_=Soi#W6Vj#qjb*jZiRt4=qgJ%%yn#&Sc$EH=XX8nCse4)fo@uFaa=p*!;i#x zwHo`L29pNEQT_zP?PE2TUAArm3*)#xrx}uXbDJ&;6B8HvLV{=X2q{*Tw;4n%-j<*I zLcTC>Yi?xmWr^0T{w66Yf5Bm;awZCjPB#&;j4nlhbuGxH6-1U}V}lf#Nb*t!QkN~_ zc5{^_7ij=~1KRwdSqeJ=HWplTKcsJ`XGjsCL+!n*Sy@@I)Ovws5zZ=ts4V1V`@(Ls zLs+0sw)RZJ->snsDfv+v5Z}YLz~_9Ba(m0QLBDnktB%JelEWABksPfk#P?!q{6}3~ z@204$sxRc;Oz2Zr2Si>YBxe$oqp6%^)M4H1obg#`qY+}EPZe15lg@WXIwSIvM+6$~ z*yVTl?t$q={ATHktGL~7qAi1e2*cEt;sISn<@Vk)GDRaQIYYKpmF-qSJrAKs&e;)V zL<?6b+-u8JViml+K%G2=n*0hpe6nab1Ob6ns#FGyh{<?!aCV1~wd`Z{``eW)h2lQf zuL>yC;gnWNEVfYn3mQ~NVbgtuX^Gqb#n(#PQUX*&L=C_e?OU;)*O;2J>>rvW%O)Qp z8JNAr$I$R8y7^R`Gf-_~AEhU=c}lzpN&V8T=hZpZPExAFyZ}yucLq)$GdCDj1s;|2 zkt6iLG|M?;2kda;YOL<Xw@9yzoj)BQ36Sr%`XAsVR6Wi%sPyQb?}kOT2p?u6p6aoe zts=WsWRlLQoV5vG;4EQ;d((5i6@i4avmF?7#y_`<!u>h*Z!}dm16r{(&qG&as3JGz zrRgPO1w&_e0HV3ZI9DciJ+{BH$rG9-WQl45E`Z(9mdl5{KZwJ%s300quan$<a80nR z8keKtK>@5Ti?UOG#^}?MK<8{jc7p>XHRRgMo2WLGVzL_woz7<Sgi^iRmm!oTqvNZd zca8c?dw5SoYE_B6{H9@fw{IldND<bWxh{3Ege9tqp{1W#iE~t5_$$^3HqazCCnexa zMcJc~IoutyY4kHHZHb~CArSR(={yuet{nAflxjR5rOnOeO;+oOA1U|nI8C$tVS``U zVu3QQN&H}plw$F>p(%3~B*>UbE{!eCN81P~YkQBwBmBe=Cpv4rE4&>A&IwW1MN!Kx z<)ELi;N={a#Y+Z#<yzs9XlF+OFQ>tx#{~{P)iv!S?d~PsJA`MazB*d!VE(FUUVEo` zHrtzUXV!#^0TA|O3|0w15DPN2SBQNv+f;mtLdIXA?bF4so7}OYtcj!pt>@mrNsBs# z8;PuLi49KctD&fct0Fnp^Dl29TUe?&z;paLmT`b7d0O!>(1_}rf}7}GZy85^Ri^)o za|+aftTQx>v-G+Lg!c_cfHlyh11DYg0LsYVA=X{_1LnD?$cow2Kc`u&ApW=z8vAWh z&!c@WZ#1s&eL+g^!vcmQMM>VCa*?s0e)@RuB0|B*@VSkp8OD?t-WB61q9-cM^|hB_ zy8fzmc{m~Ug99pZ8%vm@Ei9kb;wJvoY@!oju-ClICB(>XW>hQRW;O8d%OWXTVB4AB zH5Y{7GcH(OOc^c#7n|Y~QJ~pHieXV=$(6L)QdRI@hQT<K=dQ9D-oJ%B1+`QGxw~cT zf0URT`G71INjy%|i8Ru(YDSW{klfsga62Ye<`d*(mf}z=4UswcFf%fcTEy==HS_S} zAR=)T^T_h0`8m#G(YE1rDJtUf9t7W@?%90%M&r?s*pO|hp5S&>gUNS@`HE<nLN-%$ z3x7YO=>UQr+<&0+<rRdBE=IBpi2Sg`OIcJyzcf_Ci;Nnhk+GMm6+ZlW$UiL(bQzEa zivS()hGk{|w+@FhgUOtHvXm%Nr&tg~wYq+g5j&wSs&D>AT{s#R1pBf30&I~-r+Jrn zF|y?V2_u7IKq@A3;bgShopa`vc}TFmiU?Q>jL=NgtW_Yzy=rQmYg{fy0?s)owfPK_ z>FHuK(Jt)LnrBVTk5OWShCZWes=%dFmjb9I2b(i_?xIW>0F#Mt`M2R}oZXGsLlok& zc6Vg#Sm3wKa&FsjmruB1m|w9Sev$Ev_<k<Sf%$B4MRW;CDIQO*6(57uEuG<5DZDn2 z!3}EpG*us05g<gA^U`rl?|NJCoWHg*hNNhJ@bOek6M+NG%V;~9>zsAeMa$!6h58+B zSV)?nXm8YK-M{Bi!d{n=KGr%dIYQ#B=A+b~YXCEA<0`<A!Ueh>ND_}t)g#NVeF|ol zgw<oJ)2sclbBRhx4`kjk7Y9qsj-i3VPKU;i_XYx$@!vKk@<-bzpcfTqtu4Q0B$%>5 z0zD@*Q7xf>;sLI=1;>R}Uu#pdf2i{2bVMXrILjI))KP=-08S-zEIWz2(c~b9TyY!( zNY`h=OglQYu5TCfqN8kDzBvI&tx?1vBP$+^wDkzlICam=Y*BkI`Y^$;rzs)qiYak< zcuZjG*Ss6puLnu1s@1}H7R|fpo8zL1vYWuddt&6~71?8F{ix-*Wdl^-6%Qef@s?Px zZIAdmwZ^Y8k17=dB^#AFQhklF59z1hG_`ErSe!Q?fmn>OuA=QxOx@@ST2P@2z6{+O zEydr~L$}=W%d?#78mhoCxqhcp`4y&#q^frtGIQ^Aa?YiXVeqzo2hOvSWBF@s+H3M^ zSo_q$2WePp;nek_cj`hLz$qS0gIx1jvvWmva{uwAS=mjTS?zfLT$^|h8>lD)wYZ_( zmau%{InDk_?sjqZiV5642E{r@2s|r(Q3N<OdN@O3`!~OX)ossrRgi$I=yn=k@JJ75 z{Ckl>8Ig1S`ChLaKpT8fcqFtWv7bc!I`47<_;`I8_vENg3JVQMXTa*0`VI=#5cuy2 z?Nj1gRuER%ZaFE6Xz7Y(Xm$X~SXWGkXi{#TyAmIQRWyEfM-0q`B&)u0ky+ftj-vXF zSq{mbc|9ukPh_ekt1j&=f{&bh>d_Ae$l$4qJp=(l(~~h|*f1Zoq9d;_6!6}ev}&QE z&xI?#lQ!aDgzL-G0EnOOQvs&Ytpz>UT~0cag%E<sTp?QoR}6@0W2R4eOZ-;~-_yZm zs$umNBx70hWUVdiSXc~0q%Yppzi$t%t9@$1D5kI=l3^X&>~6>;QJma!cl^xqxUs(` z8ys?HMRMVtPu~vOkz2dxh$cB-<);MY5Kn3EoK=zNKBG`T{}D%)S1N!ZZ|Ig32=gdC zD`o1@%PzitP7;pj{D};e+Wac>haO1CajS2yc9BMR<t(k2Eoz0uNi`p;C6Xe=PUsi# zXO2|YVTr$dT2>ZV3c&5^RR5Tf&}PtSSAhd5&G+tJ=peKWm`CPij-LrqXN9$vrjZd0 z4IufTACNB!m6pe4G5dwAC%>5dIp+vf6U{PX;EmSO(v!O2I(zA8{R}lPQtM-`4@B)F z1hC+rU^34J)Oj5iqYGuRLDyr=@25^{_%f1`)A2+OBF2sHw@RDk2acL&rWOQC9W@YX zp9qaGt1$CTCF5=#ad-|M^xYCW(VfAJ?dbw}{bsxYtmTihC8FQ=ajOFpXM#j3NH|=a z0D=*4zsk9m=6oY!gZ0PgThVg^!xgm#vzhkW!7n=dN}YC9oG?9WWgg9K$!BcH(6`vJ z#<!t<)dkBuS0TudV<J{qlS0z3^(J-;z8>vZn!w$77foJQQr&r!`%b$Alk5gAUu9QQ z-^sfI%+Z`{G+^=?tZ7cVc%FXdCXYE|Tq+8E(a%F|`h?j$b9t}?nR4ZkUa(o@`RzbW zXh2nS8_QeD&P^Vh`~fV8p+VXDyJ%DeCBbBsyiJ~;mm2h67dO|l(hIzH8|m_?_I!FT zoXMG{f(o!;tR<oVj|QCpIB5_b!Jpz+%)K-Dd*b&20-LCQ9;nbJgCn{;zF;;=&!a~q zWGuI4HxP9*wkL{jyjDQ21TLg&MZTI;!X-J^!c=9S9if~?2fwp8oq{#vlWHC!Sv)~@ zyJW8PeRF#a!Ec7cv%p;AeDDkYp}Xw;n)Da;c|P&Dr9zuVL9j$cwS23ICO;n_uEV{5 zGgO<9!g_nEv!5DMJ%J}k+NXV%IuQ%4)O)9Z_7iv}@4!x)-%H}O0&`5l*ZWdcaE$R+ zC_B@Sm{0bQp(VGGk!!nc+XBYg90|B(H#A}RJttGJ_~jK$cUph~d&Z(vZN*})QiTtO zho1v{u@MVKbIXQZef1`h-ZL%>T>>u2B=FpC4R|%w+MYlx^h5;ZZ<8r4bp5rF&Lp5} z2~WZCzZX*s4&C3cXf@L|WQ+O;yJKx`@`Yci`f*EK+3&8EHTX&E>Dy^t-|_X(e&mC7 zPX~#?gAjL7Jo>{=K{C-;t1CFhv&5|l6d#<I3-u?Dm&DpQO&d|)wkzga%S@IF{5@&< z5Sh~{<D>%^msR&uT?oS>6`&ILq4-9Zup$E`YJ|ab@fjLjZ=`AA{%1k&P80i6hj-G6 zO@pZ-!7kOXM%HZsyuiJ8+IxG&J$)|gp`yjMDqXWPZBSm{s;p}>5?x;=-41p@7E{7e zQ($iH1{butQ1jx!kkWsjT4dt)qQ~Bv0ePyjMEiQO_XONR@??$QGYwN#!k|ntMR98d zsgSG0)7whDW+bLg0&+lcEZ9fy;!mB~fa#d`0IU6i_cs!|ZZpk;(zYOJ{@)LToK8hc z)kDaKB!}v%&STy`mS-s$*R!^Wq-Sf4Z9uUlaE@=wU{>*)1F<$fQ*K`;ET5GQTy<xV zVheGc<PD8sF6z~%Gti&v?yH?XUrt45j_t!G91!Pa;L~?`SOWYZuo|uPl6_xtltn~& zd){|aDrt><kkZJH;PfRBmibB0kxJEC^}amuO`iNy+k#yzoDqj>ZB?rPN~UHU_qnp$ zmmWS_9-`dJ0`Lp`p+xRfq!z^ETCRBN15y&RSnAGi8Pq`DNm_~!ammHM400WC3Oj)e z=37yCyf*7yhzj+h`!eQGnK5E=3J2ux>Qy&vJUBZMi)>oIrS>CF#~!}qZ4w*fz#0rT z%R~;0bjUI!iA|n?)pzd2l)|sWnvJ{>vBf_I#adAA3*QBZlN>gHXUAw+au~YaB$y7Q z6TtK;W0Qk#ERJ@IEnB*_XO-?Zjyq&Nh=;^;cC&;Rw5cVC?)cvn_a@ZUFr!1}uPmx1 z8YUPX&G&w0$+(hitM(!?-^Cq)dTEI>K||%^)IK72z63lL4twS7a;(YaQA6dANhz)K zw1D=6U1Rc&!9V}1etAHdZA70|7C!iRpc;xJP-S;u?_i4ahvP4Z7sAR-L?90cV72|% zG}*nossG@BWb2D|V1+7Y@>TEFUtNP#*8#m>m$xzImG!|!RLixMf?p?b@14xUEqab? zyAm(~4jSUe^_K^9ZJQ(OMw}fB#vXgX!cb8q2$%!+H^EBAtmugu=4ldVH=`fvS~qso zqk54bjh-*)&_x)?@3FaMt6i_A800C?TfKXRC7~*mXdvH^N#*iv5Vn<gd{xFd{CnQ} zCC`vX8?9HRed|H1o%r{EieE1g5Ws6VTgY<f-dw}u-q+GSDDVcFR-*3-qfx)7{aZDo zwT&GQgnv2l9ktp`9rp|A+BQ}d?|)AJp7r1DL!e%3=NIDU*ASy!sE2&z-++JWXt2wt zH8UGlM@!ei`DY{)2}(QsFO}(jurBqi*8hxp^6&qUvH!2q2BWxPoF?qE!EIucRlO|# z<4M>5ojMqj`On0`z<)L}0VSh5YH>|>pjW?M{@G!O$)}=@vF4qp6YvX6Lh$KQqLS>Q z*Gu3QMh*LA{>v(#MZLZflQxD3q)4KJzGnyAK^q0Se98+q{#YoY?$vCOh(cC!zccV| zJ}w8&doZ8zf7+1i2@AQO+onD+e|esqY(Cg@5Nr&Qn)1rxjK&2a_%YEn8T?&9XsCI@ zU&u?@8j-UsJ|d!~UM&7rV{!VpMmT`W92rz}UeS)+e0R3&_9XM#^VYtLC#9bLecS<F zVdB9o98?@&0Q7!tQ@=2=#}IhQFylC1`2-J5(f%Qjyw2mw?2w_7;!dX&<<$MWT9IqI z@B3lO@|s6jj!n?XfwEalXR=v1RwAD_R3jdA6dZXK1PRH<V#1a-PL62uXmEf1uwQZ* zLwQ47H#Bph?BM)0+gSUy=A<!xw<H3-c55oRBLTHSUZKtN2`IC`966{Ea`Aa)#z%bH ziA4`wZfOc-;Kpevjh?xa>7@pJ*3De!f&TfCYO#-JncKln*+Uuh>VFta3KF!h_-<?X zj9dS{K;Ls#C!+WR=Y5e+<c?z-#)jK24jXV3LuZco-q+Ipd#*~D#+tYFq7rKb301G@ zs7e^}k(0v5w23=p!Qj_3Zz^E&f26Ul;Y?&_p*i!J8DaepeHte^(RTDhdR6vDIF4aF z7nN#V@y~7A!KypQ*^FdoXrQl^-cm(N{1xw<zBgY(_mHDJzwxt5Ha#nUe8hp&7=)#T zS36(J&z23E2#97n`%YPl1+Vcyk=I@P;mvTDoUJ|CcVhG-7WlXcy8<{sArJ24T-Sca zHPd2td`OUI)Yp0Ag46mCy`$PW*pgVoJkNBa+^3U;oFr?C=hiHz(^{uC8~JG*;LTC4 zt<jivrXXXLn}z_+vT|FR<1N0EWxq#)YM^JahCK<b`hTZ~Alw+7248ZB5MIyF8jJA& zR^!#x@{%3(WVjF$Zb}$5&vGmc*{~UxPQ03%u}uGJ)CKJ&Q_y3{APw7(MhHf%#fTS` zq32haGcu9{3?(7pMhtwow_MP=3Sb|qFTqg6eszr?9~t{W<Nu`_qs($>DeF%-*0A#A z53aB^wZ96qs1!82;)muHC#?~p=68|T(Us^q6;|-L+ApL1&zT*atQG5)7d054D1L!Y zTPFDX903dX(R&05RX=qp(D=fhv@c+ESQ~|!ZIJD4siPkfBu|3Jwcm^pKHkWdn-n{5 zYT#){f|A9aGB}=G;2=V@|C!L5DwQ#Ny}2y|Ljn0$?2M-1gl=zzzse$WwqxspnDum9 z%NG=xNH!O;N0-Q<aV0od&4Adaq9ZKvzWdiyK??#KcxFXlIJ(AvAC9Kk%Cp`2i!in; zW}xj2^Tona1Ox>2;&1l-(9AH_%AS~|OVXS&8gJiuS{pVsi%!f)5cl*-di!=HZ`k=h zMT)qSGuZGO7QzR(sS%Z#j^ZJ4z<=xClNb;Y-4aNLF~Scjif^V*NBz$VM_YC6j;nIf zLBs&yi2C#cMp`S^2|5WRZn^;hWD*|o_PTn?o&!3S|6^_fE(*)b!v&^pO}Nb+i|!bF zD|lHPDeXpp0u3wqSb7K#AM#~uc9vrhY)_fzEY$zZYmK>FLSG`cC;aRBQ&erni2137 zIf(K+h$)Nk+8Ag;dnlb{SPw-P&|SAdhx47U$br4gZ>QDb$U9acpsaB&T0w;U{eWA) zX9bIKJWYvz_Zgl*=C93L?ON>RwWLO+8W%k{=nBWe9?e^;A4|~1j~^@}>q0L~yHo^b zCO-{gL6pCUKHN})&?UcN4pv#I`TqK)=i)pI!n{sLa3#&}<bq~9@2}GzDo4KC+}TEf zQXaaargJkxk-tpoc&Y#;<XBf=F12C8t2hSxVO!Jnwl%IT9$!*K&G08Qk+VL5y1dT$ z4mRuLMrqZld^g!VOfPBcgh;$9)!~XlYRTrkN7vv7Bxo;5!C{GrjniIH)ha$mUKkho zq?YddzIvJijq*-?pOgRywv%e4B`)sTH89q%6BEzZ?=6^H0qxoDAyk73A7BA|AT`ee zvhFd;1vLSkZKkXGi7)vk@;KTb=1{4K77-vlRG~wN8T=8Vv-Y<U>5%NQ+C=FmjVNM@ zsc8puT_roMckEye`qOhv8FtJ>>l9(o#xLoshK~@Z@TIIQYyj!|RmM3-t7`RT2;`Ly zxXtCed)lXsV0$FuPhn22V}}R{!w`X`?m56rh}+!01Z3<E7ovAzx?waZo}J=DjqnFj zSLWPEhBqnIO}lpHybPATaA0)M^?TPsB_WszOQvf3rqVGq_Wk_(31Nduu3CxMmg_m! za9?)>;NZ~!NG+E@m7I`pc|Z{vl*r|)SPC=qd94l|^|6Vy(>O5WH9%tYy%aO$?uviN zq%cfPkokhFZxJA)%wxPn6}YIr){vMmQABvlyj<-Bcw18pdzcmpkQmSDg~6>mkizD9 zgua5pQw%`;*~`&sCjt|4?wOP}4H5W#kYgCsX?iy5w1b0GU%uJZ<JrRKK=u_MLGoTk zMMUv6xa9H8i+CU0LZroA0w^SQ8zcdZCyt~y01SQ<u}<D*t2DNGlmci~O<JM<e9b!y z$Wll@=vG(rDWh+57M$eIZTLkAmhTVm%Z!j<qZfb*6^VddbXHTu6c4!Xl)Tuk($ZFJ zDslmVbvf^)N%(E6inURp*|~f|+vtDkxTnE1pXdIT&7tjdaW0P*mSmDkZ9D#H%jx6| z`;&me3q)KP&SJ1QFUv-+z^7m1`rcCo;%b7jS^rzPHOUvnMqm`AY;_{3&tR<8=xG6y zciM^J&Zfp)%JAGBHY3CM@E)wS(YGdaPwysXT^+syE`^fxjPAQkG&i}Ssd_GZpQJMg zBJY!h>CRr;F>59?FqL44gqNq5#+L0JuW$TDFAQOpnpgRrOlsbPXMXcrR+^?$GZee_ z<+nN^<+KLYg@<F^F8CWBy?|x1Q|&^{V>ik$Evw+*LgAF;q;)C23zUED&^!7B7LFqa zp+5EVbg-qO%%D&=YuK3vjO`4#;KaPI((Wm?Er#WZw(7cRZ>SJ^P8tPO=U@<s>iU># z>ba(vefnItar-L>A|u6$?_=@BvZ$UimpuLNe&Xe<C1iXKyz+UwcqK?@9|2PInGa21 z>*WhNlmxV@;L~cNFhuH3_Eeujd6=XVYx(HhOzaJY471mIDyGz@C{z?NX6RXkgg;rt zD>#%)nCAqP^@OS=p29+aFk|mA0WmM~c}RyG&5nzV{<AhvR-X#FFiQ>rFcvW6l>>(l zX)n72x-yu%f~ulO;`|%`9J$hG{?D9#)0(6Qio{!3t>g@8hqpwQk%eFGW80s``V`ar z2fPDaxj46Lc-v6i-Z3SpIdaLCMNncDhAF+28$!Jfj2rPTiwk$R1F;%5s8<mHnPS+@ zbJhY>*7ZUIS`Nl1t2H**(@ckdR_52Vj-!X<z%&BZTG~k4UDb|*pyie~7t8KB9SW3Z z9x)=zx@p}K#Uf>yuB_}=bc{DvkNRU@KX2a+Jz;o$i7jA%9QF&@M28d-7-+8hTS0Vx zBvLIL#C7O+$UM)2CCXw?>xjMEv!y60BF1H%QlT9>cJn&tnf*B9z8>$EVhLpH<s=b7 zsL9jc!klmtwWDxB&#U|AAZfL_2+_+T$+u$GZL(>yssd`bqC;|sU)&0XJ_lyl^6@_E zXn`X3_`i{ZvhtI5*;=f{D2{cDlRQXbvSpl>{{8`$Zf~>SF1)67+98~gQinkAmQ4_R z*Y96oBvC=fS&ED^@u}8<OP&Vhq>>fY%dpPTc{X7N*^bCVOj1FpLAj5?>fvM9&l~>H z&45Ob#=>uR@(e=xFK$}iAHV0)H7RJDPg14K+$2~=DWY}`<=}2a{(WVMtEgYbzlb<x z)2YXWCqCDcV^}<%iTR~7a@S^m6rKIU^=myla^AI(mljf(ScfKqKOgz1#xr;>ed{|9 zG((4;#cF<8oCd_c@*9P%-W*j~+QaSs>;9xP2JWdb0tEG<UJl+U-JooUw(UG1?>ymD z?ESE52k0ui1h+-38i8UnE6wbjZPyaJor{R_4H^^2Seg`i_fN#>T2VUG^Sy;<t)YIA z2sMa?xq8q@eTuWDtfan_#YpgH)wZT<i(`!@RD!+tG!wMJJ@2#KvO6hO+A3`OeSlXX zn{Kd6o~#u_EEcdPr^2Zs_4oWo$jY|F0U^(ExpMhTmB1Ct@Akjt3exPh_v5sPe{uI` z{3%3Pdxmq)Y%I4wKQ@^Z;X}FHO=cAZv|oJiKgcdR?s;RGD5+4**<W8UgU+M8Y%Baj zK08W+CnUM}lz@>=Z45tH$nJ+_ix;}XR|G}Ut8m{ZVocnoR=~upv|fdsTOf=F)b&ja zzX@E@D8iUo^&ytmkQ;8p={E6)kEg4lPd4wlhoOjVI7epPuSwZ3pQK-SAQ7l{kUCW| zy#snCt^UwUctP8OdkF(n^t6%79#&bGmB!X0|54KN{8z1uZTqhf;U9Gc(f>3LuK(Sb z^Yo8jv-uxb2SbM3op%3$eLbrGN-_Scxb^(+;Qv`E|3#1g6FB@kZ{ZMV&w%RFL!b0| zK*=pB$#@pg7)-32_7CcVSx%-w8M)s_44!K@OrQD3hNYX6FD&?<w!5lUd}FKvjx>8o zJ#JqFa)Y{ud!r2Z7W_%fFLo<64^op>vy>XHhY$Q0)eb*-2iz`7<O(hZ2O#UYPnx+X zcl-4j$SXtlIOi8GSqercHfl0ClO^uO6kFN1%?mx2UM(hK&c}P$4gj?}$!?T`R?z5+ zCYkz~C)e}a(gv#4n17WatDSaOby+{0EH8|9$w&|=y8(acZF>TEo5Pl;@W_Tl#WOvO z63L}=Y7IL7@YooISR4sDwt0k1Itga!XumhO_5~;XetbMz`|Ap|6X3M^QHW_n8|G{9 zVRU{-)XL0HMX)V13t|4t`81}nDfUK3%wFyH5RQTv<^72`#}8sNo+kcRt^Crg3_|Vv zXJ>eBJtnUqd4iWX7}c1@)TB5v!Ir;@z___n%E@t<&QlO=WDzJUm!FBYmjB8wu)6AB zgzj=k!`P%$H#)Y>D9KS_Mnzf9Sf__$AZ*S`xs8VinTYcpP<_ykmX?6mRWRQK#dKTd z5D-pz7?*27o=E~5Y+>ygDJTui=lh|P%wCEYFXckh1~Hsq4v#cby8Namm3^POZ_~qG z*e->Yn&%mv#u%^)CEBXBO1nAK&<k*FYJ!trd)8C}*vl(=UYah74?FLrIozh7S9jgn zR4Z2vg5zz>RBLV6*nE6t(@GK<zFSRvOwzn9(>1Q=i4vu@Rohb^z@JUWk%qpRlZs*| zW^2$zK0r{IuZ6Q%QLYq7El-XuP5Wu}@0Dn<3U*hU^1)yo;1X_u+k8I(uB1T8FhP&Q zE*>4}F8)=+e}#3%A1O(`J!(}$L{ztdm1Oa|o;}k+|Bz-4MFrItxikNZYr4uW&McUJ z4cmIgC%6GD9gFJZ$GhtalN>>~qF4YCFDMbBYA{f$hl}V{#r}p9+`uB*rqwWY^HOx& zia*?37OQrq*)i8*-{V>^kb5!b4iHEXD>fqN<;2Ukw9TYHZa0BmU8C3L)v@+ZqG}%t z0}B`hNpTZpI(HukJS*XYP<%bY^A{|utmM6eKvg8pE?kJ|Diqb@gE)WT_80~YD}_p= zM|&&DJHJ-Mt}>+iQw`z>n2zv8^;do_zLRtex2dwhg^=C;T8ex7ldx3bxQpYS6^+G0 zl?`P%#46t3#)FVKM7bZ1zWdHYxBAzQjj)Oyfz@mAgUOuEJ2Nsgn%$*!J5=9A3fGgl zW<ERuwzUW*G%mJe-JiwKY5kBG7PCH`8%Jf{+uF^`a68zNFj0fQe<Ciihmiuu+2>fB zbxprMthGY_7A^>_xSqDO);eGQVTSq6{!?Rkr`1`#=COPht1A*WP?QoK1h6Ab!*B0F zg@ArU;r}19&N?oN_W$}c(jwgwBHi5~A>G|b*8;-Q-4aTNbc2BO(%s!4ODJ6n(#<pX zeSd#{J%7Uv?Dd+tX6Ag(d7mrdxH0O5SB<ggc1^0>^Sv{~V@V|F0dAt<^)<F}l_PqY z0W=J4$!oHz;pK_7)JrIBTIjnT0@SZ!(3i{(DbzKF^ar9-XWtCIQ&x!?dJWN}=uXYY zpCSrwYYadEAHr2J5D%L;t&7trNZ~JgX_BK3^5|Ju7}5p2@xW@ll!har?Gl`wWz3Qe z?oj0TJ~VM;QD|;yd-bZmrbRx({yqT(Q*z$~S>q7&IZTAR6Vn!NABC_ZwDoHiGrB7O zSCT+hnri_*;;z1j+fRl{s^&1-SiH~{Lt+d-<K&FPKwPrT>bDwUY*>k96hf(pJwxpS z@|7$GVBh9_O2wpgPB5PWCTNOP|BqwX+a@jFU=m%@aqgBhBw?q{?tlVqq}8foa?Ou+ ze{PL&R+6>fwcEhHkM=}Is|K}s4)hRm_2!|3L73lNi$NUVZv<sY@e~ws?Md{=oMv^( z;q-Rw-jEhCGOASRtC-)&Nb47T@6kChV`Q8QA=2HXG?Y=gjB}FhEptkoePz3nobX9e zu!4*>e%?%=nJ6LaOR4<d^kT2h53H6AhTRm>B^G2AhrydFaVBU$=!zT3ywl-t#EOth zdVHN(srm0a`2giS-Ykl^6XJo9DkS3Bj-rF8!<+QAsqFf9jJi&(SPQQB_2b@koN3O~ z-L~*xgrxm1WN9&fA}bv+KXt*a6%w_P2a7=$K^2u#GB-9HVB&(}I$9J(inZ3|o@_<| z426{a&vXq{+I!l#D@Va4GnWOrh?4aC?|*EJR#H$Gd+KHj54_rHp7-a)HMds&k<{P+ zg_QZX+n*6QEV?kROzX%sqozoUc%SwN<qs9|6<d0bb*1je;1tDL%v0IESCCS38ZSD2 zi)Wn5!zi-3$c>P;Ov|uZmw~sFN*~kc@f1U(R2|9cv9^U&HYukyCpr<1KCHavtxhqq zzCT2P!ZWHV=0VWFN)qtl*s$a|#E(2ODl4-Nf8n6TUg$(P#TqfF+84;1Vzf*<rgGv7 zK!=msE>+8N_izEn(R)%O?avn#u?;jKS)pp&zi{+00!{7yPGf!}ynlroBU@ietI&gY zlmST3C)OAcW}O9M8u9+Gi)mbGIRZZAWuC>U(d@dLDx%o?luj|XU>vA>Km^L(5qJz~ z8PA3IiPkVcwRtn1QP}lbqCfui6sz^Q1;KukW8(L+gAcrV_9iU}O*<&icd~DGt)<5^ zUWs$wjFHn)EAIRBTkWHCyK4>$YPy6;TA{x)eywB}JMRJ>3;Xafm{LFdxIATc8HWa; zfL2lgTKr51O(TvzBQxLUDfp&Iusjn?Pf4)*tBTS<v)~s^!}z;s_Q{N(hdgPM1qlD< z`kc(NluHRChm#B%7X%0K+#IJ@-vVYbrV)Y<oPVhI{4?>OzeVf_VBS#QN+TDPINWGI zv+p4+xZEW|xYWt-uq=yXv;?XfDv8s?mDr-Cwo^{2MU-~fxB>4PZA7sd#RQ`FWXH@= z^(LivysA|oDl|#pI>ugi+#d)HAwd<*<xzji`32XSAzmRhGS_~`Iy!ox0c;Q8FBzD; z+fgo{<4xFu20HC$M?yq4PBD`wOIH~YHJ44I$a3$YuP3dG8l}LXoHO&Sea0+PXq&0^ zZ@8O}*N(4#&0VVTY$AH1nHh_|c4u6?>k%xtbk_Og(nE2A_C>GywF1!9f-67q&pS9$ z2mTFJw}1S%s{{ntvBsx)jpf|%Ml>dF(nlXXo;Pfr0yc0r!K1hzy^~rDsTKRP1r>U4 zhQpaRVWcKv=*~(dCLvg<?tjgQq;)QwNkDfdyrvUSyEjq(E+}*IH_IJgDfB~>=bO?7 zs2NJnygx?fkt)WvP_~rIWXaQET)m0UesfHd(eo6gpoW+q&rtxyAm$47rBY`E_|f+C z8zVXI<s6c==2Hx0+5d@9X?L$_V2(p&ShpPNgLnT{pK~Sl*nWe`<=@E#J;Y5?#K`pS zj9rB=RYGM=z88(YRZ%UY%*<+o5B{v1?L?%NVZmMm<U*ZJVX0^zW@-Fe;KBPggCx)k zBv3-ouiiFdTjIrP$?(#~d|c}lPk_C_QYFW~LW~&NRwciO0P7!c=LxicxyKrUnvWX> zX)7^vh9t~^N*x&U@K+7!fJI+W?)oQ~d#l0@f67{ja6V4Ty!j^E8MadM@_E0h0U9v) zNBfZX=gw^x#=8i81x=dWvb<@T8ZO{W$>lx}u90{U;i|Ku^wW!0zN%Bop`w9z`rYe` z693UP_lt8Pv=VMi^mbtN?P53~jD^&|^8hm|#(?_&f@4hCEqL%)<4{Y4?zC-N!u<oq z`uLJR{r8C%FLaQN6;|%o5S^fh@Pt`h2+nJZ3?g15^0!vqK7Zh1bG7~EtH-;a(E@KV z0Gp+W+@dw6{ac}3XV0<E+W=Ld8$Fd=7~*?gJy=~kr~~JSql@Sx653Yxh9%_gDTFD0 zkrBjxPX!Oy6w-HC-o|_?J3|GTS^#Jn!^U|(YwRJAceuH2W1W4a2|hhrJ$qw_FLN^e zgWPVsjBNm(kZkw@D$tr-9l15n^;RQ!`x^v*7N=2ZGt&~Zgal)t9KY)_+FKv{q=1vq zNc*Lr04{fC`Swup6zM+Q|0_8T!L`9()Npyclh667NjTz9t*<;W%A4a0{nVy60TYV) z<IHsM?nY(M&!-R(f<sa0n{6$?At;OhO^Yee1p`ss)^a6H-wdD`$Mky-g(&XW6dX9g zpIk@s<2_RG19!Ub`6OS+TLgN!H$y!7ek4-Nd=LGK83OFzy!&QF^uxtIJR1J3A%+4) zOirc*-k~j}n?#M6xc(JHh6*JT8k39D0$T_Z{RKh7!TuL3^@Q}7N!~v0t)O~>I)hxs z@XUQTka9PLsIChMm)2?*>dm`B0%&bhR{fR;X4D`&K3a^GI;kL2Wep%CN594+vvo!f zJ6Nh<D_FuUj_KeDYf&Y9=YbE|ORfzPVjI}n{gaU)Os_5IpJ5;?iUrk{5MxZpsEZd> znbfzB9XjFQ8BsT6L#<HtD?piz^3lGOJP!7X6*%la_{yoGuV@9}yxuYy?vOcPLeQb} zaBnl-epf3zD?z@5brQI_?OR%xGx&H+LGh?!E7;lDyO5xE1xFUB-~<XHdPHc?p0*-- zWu$4s3Gf&qAf$6~9cC}?Dufan8NM2?5#Gb_Ih$zmJi1vVSFHmR*^t`%K>ec9Y3`U$ zuPH}uKyvZV8#T(!Y6NVD*3_La=BT3LDSWt9KWQm?9RGox`-)6g9GE<A9KwgS(p~0Y zVR(kPjh0XbtUpn!C1I|QPM}=N*ac5eTEmDiA`wDUt|mhr^B^sTxshM^Y>$7p-QwX9 zmOH<|IGK=pDQ>UVI0x&~=4=@zY{pG2-cT*Y%_wH*<6n8M%Mvf21reirv6~%)C`4X0 zmk~8r`qN&SJpG3y)nTdM-^OrDHK{XwXIyRYZw1&@P7f8oZHpa}*ECuEVi*>ug_5yU z>L5#eB4pB@#%U`xhrxoI+2tLkISJUr${Bv(DU&%`XA8IfKB_Z}Aazk<W!cQJ0S!54 z{53_n5jU{NWWV~YTJNax^fUd5Kr0I|!`D=#pQY>X8;eCqkAeq|{e{8fgs4tio7Gph z_2Xv88X1vQ#hFX;%VR<?i&f{kEneZV%@F+JJMN1)k9!5QrLD!Z%&m=-VS~3>8oI|V zs1=^<AhGy1MTbrtr4Zvei0q7_NgR%j|LG3%R^|m`@ee9bY0~B}#2U%DrR*d1g7`LG zl~J<`L&C8djN+{xG2f1N)da;g;IX3KWif8B6G&kzqUGgc^ZCaE^hWR6)BRqF+!_%U zi1_C3GyZ4e)un^Dkt<N`T<%S)lW5ru{;)1|*<%zZxrPdGU^fr8dRxKxSFA>xEMX7+ zK)Nf_Yf*pCxp6QxivVgzDf(=>5A9Ou<(zBVP<)1V+FqcZyu&s*cwk=~33wgdRU`pO z1i8sr*3K$r&j#IV{X$o3T;-7CUxZMs_{7Jg%>V-nAHx8g=Fw{1zT<bl?r#mf|KU5a zk&VZO!Me7^#o|eCgDQIBGi;rBW}0-K5MaD<^jq`0U9VuJSPNaLzq#7)w&(MJ_-)z< zHgD~R=5_S)2R^xQX5md&9*8^>ndl!CP5}ps7v;wB|I)s>tW-hsL2cA`dUK0cN3~DF z$N$clRqoc$;pLTCi?6>wahhWN-&h*r2dCkRo8mvp`_&W&Ryz3)^yzNp99L;zaMUH} z<iFvy%3ad`KfMNYjQ==H{{~EaLmpZTcmMhD@BdBBop-BWC?6*Fa28)&xBp%zd`rJ9 zJ34<2x$=!vO<ro;f8?06<6jYADL}jk9AymrU$%ugyA7MVUjRz^bDS@px@+y`fxv0^ z`q!|nI8H@8yAg%OFvohL3ruk#{`A$>e3m&+{>B9HXUx}hY%y5op}F=Q7T?5ZyWV-1 z41JT%-^Y}(=|A`2N5HW8n}>V*hcENjX+*Hq{A*OUn!^4@O1>R&1#CJwzXvxF*tMP| z4);lhxN8+eLo34Is+Ck7vBQFj@nS7>K5E<u9WgWXPvqTC3t7GUY1(o7?RZyPrc*TD zuEN<hMMDxsC#zn*gW2+BT-?Ey0T<Kam{E5b(SIlYrkpp+Z?90|d8?b6T?~n*`Jzcq z4B0JOPBpoH`gf)qFjmQSeu5smz!QMd<_+=e`S%Rsk}!=4K{k<x>}#G$)z=!olOZH= zox>RB^Em~~Sp1DR<yRQHp<IvTH;eWD!JKa91K6<8q_n{W(CuDvsPIm)+G5J5kysQv z%@#_JIe~F=|JDlY+CZ1HxVjJF@-m{<ljWhVyw%HcCXT|NoZoS@8yW1=irUxLIt}UY zm1K&)r}W(F3*N6bb0f3Hi&xrlVwuq}C;wFFH%w5hOvT_te3aMJLAR!dFGT7iS&Wm~ zw$0JyQ(6#^Co=RVsZ^oenHmn9{gmbIlugXMVE-5Nt*~3P$)W?iXiHVr30?#?KpSBV zkGk601H$xqg`|tgFRYFzV2nt<yKz}5vy)3H<we7$^59hxYP_96WsYDi^A8uZ^vO}^ zni1hlNW|KiCEXGHuf1$wnIV7i^#YI}!lM*3WGU#yUxi4r-V4psox5&Ui^Ic0rF)1* z8**6=N3l@CI~%t>AjEQ^Tr8Xmf838Wi`B~c8!Tj(56*XpPxK`8B1!A$RkpZ~kJN@? zd0OkZ{5@~xs3#138J$$TnO)`4N@iP~2|OJ|Vkzqj=h9H-l-2@D)^)Y`rOyy|NK(^( zkgk}#pYUmq+zsCCTajDd4d$ZhPxp^7?e$5>oaFRz;oEesJE)1jqyr!xRW?<d&ItH4 z_zFQOBG{VJM-uL1uhvjy@O*iY7JcM7mLn@kN7At0?XYO7GkigU4p3HB<4N8-7RMRV zCKdqoF{l)!p5_;Ah~Ayu-|<%w$yex6m3Z!{W8O8q>a$4GfoGwB;zpK~$UTmYZ?0$f zvc-y%Hd#webql0fN(jn6UV-?1Z^jof5bHKDR3EV65MZ_7)g3}_gqtx*`fu+vf*y?A zWi?#5ctb_p;@q$XR<e!G4NM=&uUXW)%3dRYDFo<ld*;rZr_KFE52GiJGc?#l;tzO4 zl@9XUY8|&&iKaY}%cD_Dj)JKLh|jfhNox4GZnt_5XK`<afu(KY@%oCjpynuL=Z@Ux zMoZ{xtr?O2zL3xhIjRb$*`s^*qSBG<Xi?&N>RZhQYv`;75soHaPHF!yx-5e+V^&Lz z0>-y*$Ipxy=QfY*?OYLIwff_g*(G-#c5#q;15sZ$E_j%lgV(*`aku(R5sMkR%0en* zg@U=7l|y@m0`m8%rnt;6o=m*1-=&>=tYAp(9AVks5+CO$%YTE(6aeI^oRnwN`m4fg zOxXOS^%Y9(9UV&fUuJF(`KDWBDElk*;={Ai)E2U~<r`43jfCs&55Ck{Ma{5OpjGvt zD6v7!c823Or`PP;M3fv0cXPJEP7)}i<nIt)24&^U(?Ys_G6%sAij;4d&~-+cb%nId z<U7#AnSPL#tJCNNyDix7!(7YR-^abv`Lb(HVp&#YMyz*uL)&0zZ1#};@LWuoQG|Kz zx~Wo#M|Ot4Rb^3S{2JLz=_4^8p|SY8pOS&WD;Ir<Do@JBZ0N`yf=nskFtwB|0R(7y z14;hCF{DgC%KsytdcWtcQrYy6{N3jD?qAII+c8{g<9mRC3E0Ugb}2dRc+eLs%BO5J z^K;DH>pqYiq)h~;vzDpk*{R2d%YR<x0HcS#GAr2yny~TPmkZZ@BYcZp`&B1)qN43V zVHClv+8P%;91Ik%L}rE%CMGJbH6w)xzVLn*iU2vg`|g^I!x>C!r4`V`P~D9C$7*&U z!J$w;LM&mlhGp@zWIB6%%F6K){A!275X}$<oPGcxG?&^^W1Y+>upK=c+QNk%YmKKB zKhsA+NK2rs|2nAlc+#F+0WH`7yWoY38^jHn8xJ4F_cU`*L>o&9^V+_P>MSw$7MWW% zEZPkL&<fwt%hmmdxV{PREz({&=Lyk+tJyI_jVSV-wN{2xP$7zT#H5&p7_Xk!3Z#Bc zzxLQ&r<{TgIcMv0V(?W}eDwo6^E8J#O@$tpX_(K^{gyx~`K-^9G*Rw{4=HS(f%A=B z+?&M}a!0nrL27JkiQdPC9Y^Ve6Lx_R%NbxpJo13AtO>dgU7-Oj=6&QDV2gj9X<K5_ zP4O0c2g}?rR!gu};<OmNi5;&TPSt&d&%h}fzV|kVleGS!`!k6;Zp^|P{>@40`{d^> zYzo5^&u*zrG5a&GvPGG(u0v>jX-3Gn8fOb^w<AAq;{b}r&q?_={X;g*!vbYTw@71N z=ay_Y#r+00%t$I2{jC&6y%nsMHR4I&HNw%$SBG<3H0VVc;SKyRRK6t#K}$o>Ug9Ms zsm<az2gKC&Yoq+Ti4glNvmPI&g6kK*E}3x9h|Yj$yfT?ujAc4g4fDL~ZWw*YQcT;t zE+Ht5z{$3v4B(VyAwwtR9D7Lgwy+ELq09uW`Sc$N9H?5l+%RB`hn=ii($a6QJd(dT z5;ussIi(Y8NHIR?9=b|TXMX~N#OZgWx}+_4rC*%@c_6e_Rq^l3-SnH1UlLYz_hRgi zFaMjYj6rF!(gqL}<@euT)DS>9Jz|n5$a0!T5bbND{V-t51CpC;nb`N`isn;1Z@M3i zB7}V{LwE5PWZnjtheYs3#{8@`uPATYtR@7#4<Omy_Sh9OuS759Fov5#|B&9S&N@zE z;#H3@fkv{xhOD9p#`v)cbO!^0h>Q!M;#L9+RLavv;hq+5<eY}NSoPeTT$ucI8`Ah? zl&=^aWb^I-6DDn2{D!@>MJ`Lhl8bgzWq_X{xmV(k9o#z*cqb}cFuP4bp&~L-J}jG= zB}&8H^TzTsV=>w$_KgRJr&dsgoD}QU@6;BY40=bZ73+LyPd&FwEl%XNZ{r%Z2}z<5 zuv|($TYHcpB~li8knHx;&vv!IS_5@oZw|=R_)~fq;L*&sDp-e0bY7Ce-L0l6`J#1X z``0<MS?xGOSopsOmP%ov8%fnTi4iHTo;za@dw4D?{7ptnDG4-K#}KsPL&y@13Hyx# z4R4`^AVX^n>DjZK2|;qwB`;SIEvv)}({s|dV(W7)mQ+GUwidsI6XMm`594%#9t#rX zEbQ*#L8xwfop~{Ez#a`BUNtGodTD_O>mawHXlQHx!oDD6agw+|08Me7w$}8G<Cu?k z^w>4wOM-p*!8O~yIaS*H%)$&2hQEo`4{3}~Z!_)5mOcMKH^b?EV+a}&d}WmAj|J<6 zq7pc=QUNX<-n`Co_>aaUdfntyZBreVgLL*J(TXG1MYN48dP;ect>oZ>_-|i_hl~A# zCq<Qq=0iBZ>lsr*{OQ9c&40#)zyg!T_7)S5Ud;ub>D~uiQ5S<ubIpl>IQ!WpNO)p| z1Ul}&TW!A)PUltifvSSpp(MM^3dt*&TzD#TffqysN-L*yEg?QjUp_#AW=LpK*mIvw z8D$8|=vs~a*4bnGgTd@OKWo+`bkkX0q2nx=rm=)l>9}+f$yob-U!53QzFGuCkpTJE zZvo3aaxcCS1F~8zc(4fr;B93D`iOPNHw=uNIf`crd(MA>n1HnI2Qpt^27Di#dYJ!9 zSEMjwsYwSk6w4G!2dGR78m0_o5*`~1TmVsR_^;9XnE=d5e3@dxJT4J6aUCRQF8ZiC zTKk^sb*TjSPb<YKrCTcRk$wbe9<rmBoX4Mai#GURLI4W{!-icliiyMe`zDq$i*PBS zpYRa(!eavM-54%I&{7(w=M0gA&n3&>6}@L9P#3^6LnP#2T_nqAp%;(~?0~-srVkA+ zQ8wtN$bxh4uPD>+5nYsZj%Hk5yZ}%c@r{OMH%Zj5aX6Q-Af_V25N2(h_75b|o46tL zqqxHAF-m#OZB`$ovb+ZA?K3z`PEvpC?4aY|3WKKfNVhM(@_1km<67x;uNB#;kDY}u z;rQU;MEd9YzP%^CB?m6SG_{K4t(=w@x$n7k2EfCV$WX-x3a+LcbjTEjQXN5E4QS3# zp3voau(c1@ml{h~-XudfwVk#F6QG8b$~tFewAocH5$&*ZLGaoVcs7TfGkO;s*-6H@ zPf;kcxd-A{%M3w*EKa5zp;>Pmal=CwYArm3&D_7n<x|%2XG7RiMo}YMH_#`D+{bwy zDbh!UrL<!_0t3fC0#(gei-m_~BKNQ2iUw<8$~v>ZqwwINe`-Yq&(IDlW6=4I-*U6{ z&WkGfv2eDd)lt7xZa!~dK{VCz;W9nLRqZ=_ppogfEe8PV(XS5oIks|=f|S={D2&*5 zimCnq6Xs{%@JEfIR#SwL48-qMe=haToHJKk=52p*9_E4!9}D1f`)<-}6Y?vy85d~h zF(<4)WQ914J!9OZ@LWWTBiONhr@^Q=`zj2v3><EqGRB=9LEEUdwj*Lp&#Xy*7$8cP zJkm#w2Z^z#ibFytt(&Zv>2zOBgnQM{xyT~_!9A+ZT@29(zpVP2OmwVB>RoS7+rG>V zPDXp@v)IDCbi_<Evy49S{$p+QYi2ZjCadDjSD>oX4fJxnX35II_rSH;q+dp2&Rmq% zN<SJEv4Y*hJ0RnmH|f7U`ez_*OXF_UHvVh1JGjm?J;A?l4moE!#(+M?lCr+RYaI6k zWULN~H5@kT$tLk<z}`SxZ_q)yc|^5E)fQ8Km~rdd26t(JU#^6}p%)n!)bH*y<5EQ( zd$Kss*e5KRCTpiJ@)}RgqI2DZB8?F`Q3ZAeE(CldgwLo)5d;eoT^^Am(*@8dg=a)N zh`*vtl*;+O9TZlWDL%D37+<?h89-@)eo*-i2n7*W=~d@HKBx!O>l!__y$k)0y>Ro_ zN}-4l$93FoF1{aNE){+?YVV(s9~LDZNrc$Az29rM)^-;g5xs3;A<U?u>L&B4Cc?*w zpijXOz^(pz0v*Fi>AlN4!+I~n4(s4+^{s)B@9_*+|F)pZZPgWzgl!~P2ao+6V)&CF zQvDL~DOiSahf@Q+VBSMV<9g^rpG+2xF&Vbvl=O>Nav5ljOB|OtttnGDAXQB6WOVHJ z&@#O3NtD1$e@mfmr26_vybneOPh|2-!Qtj)f*t*CZHfRMKQ$?pCaAI1R^(d$SJ+?b z(lhg@=f%wcf96l7{`k1<q<dXixsO^d>f!5ig$AOhrZd7*2G~2GD-&e;hpFo83D(nd zqDH@=&-#Q~MjZ(tgURplm6J~iRq--3Eh<Cg(2}nWbl#nYva`j_GH{h9ifT_X{ukh+ z#w@+PFMWhJFzKTzfY*tUy^6GkAJlox%jPj?B~o)bNwSbN-es!R+%|kg-QuT84HC}b zZqo5koxv?gn2aTLKH8DoarfGHcW*K6Q!F2oZoDX5r1wFFop-4-yT9it9Vt{U)^W&x zM!TFSwxA7e^XT*<g?D@y>V9HOO&1|3Wj?9roK+Js4cU6}D;%_}c~r*vRd_Zz?vJMr zqzg1VRe(U=^Jh>ETIBOjx-jmz54}ccncw5A1yp(M*K2Vro<^;fTt4SMd@B%5wmqmv z-6O#2q0nf&yZEeLjqCrlOb+Ea9yl2171E7nrwQLzZ_e0hxZC_tVVA==-WhflicBLe zstEoFV&NLP^TYy|XN=mX+{XS-f35>|yHbh&puO8rxP)&6SmabG6u{p7K4XDPcAg9H z;}33D|5ff@+vK6Gp1d#Ze)8tiTG-MZR=KkmWWGwa8Ajn|KUy+x&O-++8G@*Keha%N zG`;D3+4`R^CLsMd<AE1ap8$ZtQw9lifV6n0B;HFx@Ppmkhks=x;O0a!IX?VeOZwwv z?c`HTOEc0KJuXq+Ic~c~*L8fzf2NtzM@hbPK@&oAGYr4W+OYI)sK4<7SNRpiX_dD$ z@#%{oNc?}s9IJ%P`p=jYD7=^g`7yb0!c`4D{(+pMJzCEjP3)ZkyQXXZBE!GCrTdW^ zAV%FQEO<l=lm=q{pU($$Cr}sBG}CMA;`(J#92J%@-x9bL=StOLd4?F!<r)ttbGa!A z(hf@A7_gB5-lmt&yE#-|bT962HeBZA$ZnoP1vmJIPLmLaO5D?hcgD8ae`-6WslKp9 zx!}N-#{D~fD-yoDR#CLGFKliWs^a%`QZQO=Z3{hISJpq*M1X*AW)_?*SC=NTZNNFO zYL=r7Z3fqNpU#n<=hS-0I&Qm(i|54-(~!8PlGt&O-Q#>mq&t9Boy7U3oV3z*^fX6n zDJ0atB^{vFd!-$|PH(!g9$s?V!A4Z_EOF<fsPwI>@^`PY<p9@u`U)~!nhmyt*~{ED zj7&6O*f`G>Tz`b=5lU3gjiP(X)Z!XQP7zrW@?}sRv(W8{{_v-fp#o0YSZ8v*qdVid z1ALRn(vh+;&Ro=cl|+$=@6;ceFoP7N`Yd*Jul7oY@EtJ~Bi;pCajwTW()zHyqvCnf z7$)}Y2O_ehhy*H}uyCuzIyrr+(VW0Lk5NA~ze7D`vrp&`=8ZVXq~`=T?RUPNdX}V% zf#A<`2h^f$Pe{whaU6oRI7TSl3V-rZ7`B!<-npIf`emzcb}Y5#%XOs-?k?RWTDtlH z)J0WL7Zm7kD6t=8AXKVTz-vQlTy6>C4L8WrJLo2OhM>mca;P%DGs&-BrPX#cvz52N zbWNw{gZ?fxo9!P=X`P6TBar83)s-_rU+vKRX^GDL8sE<D306DC6Fm@P1WEvH)1`#S z_LP?bcVXea^*Vzd|JO%!DnA4h=zA`ixkMs6LLP>j<i4VF+DYk`M6FbZwT%A7N!jW) z4n%;OBNR0;_UOsgpv^fPxORsNU>I6~tsGjW_0lOh8`VOE`nlH4Fq9Ig>;`_RM->m` zj7Hj_aL4QuTT&o!W4L}H&=E*w+TZmfC3_0KBjcO57~|>MT&BUsxeuT475g_RwDC)= zQDMlL`ST~a5Mc|lpZ9Y;{y&rA`Xo9<#@lf@W)r%7m<{=y9D;=?Ruo8kgqHOb9bcl< z2vUkglrnod=P+TFJL8-sd=tdJj94&C*f-LM&e%>v7MfV6*zPii8U{)mHpDm~eaEs) z2}VAi{%P($w6zf5)^xSfO~^riBIZB>X0!8yjTMY~Xlz<JDB;_$R#Mx%-qkzc<W-&L zU<eZSM4rNalr+VEp}6<hd#Z06yKxPOkJ({|0~a@`ZiqXEIkGtlyO*Q!5oH;AFE@S? z^361R<A+mTgau*VP?-HW@4uoa{t}CsAt339O4=7HdX8a8m-F~eY;-)QV3Ih(Z}?0# zo0y1$?T~P6bG;I-8gXKe9VIo5J5F~$+K3$klGZ)VGoPpe3N)POb&rhx#Pnd!ha_4T zefUb+9mob44A^VhAvy+Ddl7!Aa%!}!J%qNHerVD=RItV%>kCu7Ab}21K!B1J24~J; zU&&?3?lthAt=6fr<Xak7``rP&%a|TzK3CRj4?E}Aub{dfQ`pcIwJZCHtgTYd`cL-0 zI3iNG+<($|GBBp3c0WBDf%rRT9}(%DS+f-StHz533#G7{cr>|NEGO|O+BD;OM9*2T zGbqEf6s~^Joeo=??W(xD^zl_h$h$P()R@=T;xTWs@lq2apIi!XOTQ*|))iBH7!#>2 zB3wu;saTB6%z^O{CEx<qnhZ^*Aym>~Yz{h>-41cqmasK;{!rz86nF__e5GDFD(3F& zBdgzP{s!{#Fr=FV4lv?YKdz_7N|*pZ9LF7A?Gc^2(7advNs*o&Tn&Hw*g*VYHK^^q z6#FO%k3+=$*e43}ZB}4q+L&D>w-rC;+>>?t@1v>nD1k8XbrOR^o{tpXDqRm(k*P+m zl!_Ej-)#{<@EkwwqM-}QJ=)tAHv`~ehk^v<2nmn!Bx{f^Y=|42xh#wU8hT%{o|8u^ z>)fZ6<?)SvX3~5&xAGkrGY_<<n6cc%l=FUBjrEu_?*%QIC#j?8Py18U04_OhjeQkb zQ@)T0F?7anu=wfYs)8~iG(%+9@{$YEKl(-C;%(0fLnCmR9Z33+C>{3L#;ZYbC2s_; zy{Q`U)_RQZoJf`ixBO1r_W__XC$bPWVCoNRsV||3ad?(xi5~{h3#AfeKVWvo$cI#8 zEyDUex26vVk_VFiq8xTd4?AqT(1K|!U_1+>eZZoyUA<|e77cokz^jMfTxTr}Q5xTb zp@l>mNdHYELBvGK0s2;@V+N5davcL)QDObqubR^n<%)9t*vL!*6(~G1NM^W@tj!Xn z#_?Cu#=q%@#1(8!tZn^Del)ofml>3IWsC(j?sM=mtSQX(bz2g*6A%wO|K=Kw^F?|; z|ChZl9Kklc9q-^|)0r6h!hF?behar1+VP2)-qgNVo>f$Si(|-OwZz|Y@3jF00pdO< zf(}K@@)qa$jmHkxlXwHjEy{JA#>Md0QOUk6`C13Mh^`$Z(3UaJ;M8aem!53p0e4Ha ze^*F%&(XmQrp;nf8Xd;`hZXdG{(G6YWe?9_1A{ET8mj+0xSWmXjNNaTu%8}ReC~25 zvn&M;LhvvoE?_)oj|huE35MGl^#`TV=Q8FW80?9u|EU#_?i&vODDJqfYNemK5!B|! zM-apH6DK71*|T%vZ$ct;!H6qSgFt;iZD$F9;CO6T7nyt>U+0AM`J2P&XMPNKN7%nP zNe3!_<YX>!m8KbNgsXYYQw@CbmOD)v+)NqJ2tm4XJ=UL_C}X;L4%O><5|F`{u)glK z?XSj>HU&PTpFzz>i4+9j+#_JaD_W{L9s)8=P5_cydM*9dpw;m+Y+jj!re>Ziw9Jae zP^Z9|<BWrYl?=W~O|ERDUzO-u3LYMsUpwW(b(62)Wn6<DC+aE{<SXZx^ZJZC=N>O_ z^ZLoxK10lG+OMC+TX@&Re^+KvkriEtC}v~!yX(h$lf7zDX6D3O;*!OU&XK>WiNG}8 zNH!@?Bt^r(4haTW`gUjHzoQMKx)SZi*Tq%C`3ggpNB}hkXV7wLOirVSmyjzplS7eJ zR4EGky0O=4S3cuRke@U?UVF^eh%NvsLC~F2R`&cr+Bj|wKWe}*LCW3O{Gss00Qq~R zcaA3_j77SyU>OZYWdUPYAJYOlcC<Ger>!I#74A|?b_YHL3G;HP&K_pR1tZ}QqeR6D zpNFIoLu;3Im3LL9vAX;VsYBa74vd6UIHs5qYMq2@tdo04n5cDtOcWB=xa#tLttx%o zYMksidVclC`sXj_ljTt1niF-SIvXURo46(54obicW=<<{?xwhUBk`KOIJ6D8|B~~h z6Nd_;2Ux+N@$+9-QGa9V)y;?L+aH+!v3}ZsK6@#$j(kA$VzO_Rxw)vNASNvRQZ^F! zU4dWJT2gxmkw}Yr87#XgjTMTKQ5I~2P5n@5VT{kCyD4^>14Q`}{)yWYM*`+T*KMb; z)vB*vpJsqQ>hFL?rN(sITHh}JsZC$U;DS)do(2=PEZhcv)AFYHx8~=w)hiK9Sd>bW zltNMcD2loESLvX(-WVzen))}p&OZs<lC#g!C)SQr%{i6f_ABseHshfT=CEvYOwA6* z_Gc|nE_j!9TvUfq-(vvE$vf10$<g-SG5pX>z7Xt)S2;>?ni_22xKBnskDB*wOh5f$ z94HDZ8~SL1&HO_MoGq!NFoC-|)O5e8`YQJa&vmybYaKY&R=8M$B6(D}*HBV=Xk#jZ zm&;Gni`tDkw1r*!D`HI`@G9IxA(yLPZy>=5;B8;K*DNlg`A(Il%J;StB-;0?q!_Vy zfjpM8VmuGWlD{h^#rgX#arv%EQBWgfx;J}=4=AF1!o=5{?&MM3H-1gs`gtdvxpF9@ zGY$ZbS)EgtX#4;KWojbzzw>2)zw17kZuN{3-d`alk+>EV3jU-A)GK736Ad-@WS?6a z_vU;9hAJ;85WKZQbY&oNqW9Nr+pWbKwoIUDvx_}IqEK|Z%%b(zdL4j}G-oE+|4dU* zU2OwLXKBskRRDF*y0!9!+!q`l0y)vB?cAc!lpmwYloa(QZim<N#fv*MY~YdvIa0tM z_7b6Td!{aQg03V2na7r2GBtp{G<SlqS<tL{w^=(1Shyv9x*B5mFEN0!R=32QbLNbn zrY{wj9q&=d^^fs%mG;J|-N(4*g?^^I>ZB8!G*2~M&guJ3dcv$WEkSJ~&W!gn%P}Dk zMyBW%g(<$2kzO?twP-4o1zKf)Zi1W{a)iIAVnL*=xn_NuMJ?w$Na)e2V7_r<?Y3@N z=kK9L;2-u@u$JpOw5p9{4##!MKn@7=)H^EX^YBOJ$x12<nVA8hQ=7<oa8q08L}RjM z1TR@KW^nsX;!;k8rgFHcyIbfM%DMCC5CJk_^L&^ytaiMk*>jOW;YYqle4<yEuhbnm z4fG4P@#Tj<0u#6Ac^zD@Hwp#miX!-AG(B5dN@vIAEAmL($bb0lvAGC8jbc)ET1{jd zXe6%w3%@NSE+<WOA>ze0YKZBoJ!AJ-Z(HTSH0awp<_Lu4$8V5XKk?litZ%aAoA^L0 zhWrTD|CoM+^Qmvao=SdH7yWpyJPXCqHj$m%(C_j8$O;UaemJ*H3Wes-QV>$5QS3hI zflA3;Ck2GR2Qsn5nY!D7!QpR+t-;Bc0-(9CiPRunt$K~+i#d2@+uNYY?+D3mCiYUs zls{53;_BlRe~fi#zq#TF_{6?<`o%!udbnTHyWCRKTMl1$Ptq!{*eGpGCZZ8NnZ%}y z#3%UU<1Fdf=jp8wy5pvS@s-i_x07U*N{`$Twtv!0&mJ&AUA6sT(fdXjS*I>7k1Aqt z9-{M<k3$75RGWMg&8mH<*mXlUQy&7^AXId<R2+}N=XZSI(f2YyfFR&K*>HPo?HA(V z_#CUod{m5z=P_k>5kx4Jcdl^Uw<%{fmyeI#Yu@)yh7H=cO@hy)oZ>`K)w`a$@Nq~~ zh_85ROHj*Xcz4H>Y0v{LE2qEd-RqAJK^rgNa~o(V8y{dG*%&5(WU)esB2Q)O-y6L> ze?k1mF9IMyUv6ejl1qoNp;*%tFL4wAcj#nYk~`_~HV_H+@;^#D_!BBD1a|oXIMbt> z5TIYQU*tABxxmUhe~%u)&%!U+F9C~PkZ`51p5`!P)=+mCNh#=gquamUQ1<1&IE{B* z@Hhry8+<1)P|$Qdc)^9f0K4daFa15^U*Lql`dP!Mx6cC6U}V`3^$z>Mj|6wvKOttM zT|N9XR<i;nyqE%i^XBgg@8^G8(umHnLCw6jo#6AASI~v>|F{SZjy?W5ABY9>e}Tt{ zbsasgUNE4!Lr~M4HJY5n%&EbP4uumyVhIJ<q@4vQ&6>Z#wmCi7aSab)zGyF|KvCK{ z>qX<$-`SjSO?L3x^Gc12Suqj`e}CKaPAfGa>f^goxXW^`d9WgAFKX{Oy|GC-@}A>n zDQ#(K<8q8hBw$OBvP#ugfW78o>hA8?*Jq{u*82NF$J?G@mY&Dm#>`h1HPmiNnUsUd zY^DNNUCiI#&Fel`Go^W%@Yhanq}^D3&UM?qYkCc4G@X68&pBH)mmYF>!fd^1Z)Z8# z;h%v0#J{O)hrwmxlM^nD1)DqJy`0}q*S>VqKn#D~ROabEqQ7}Si5CZwIRHsQSLlX_ z)77UY8uYF6dACJRBzrr<>j!(ynu|kMKb^f{JG-`4>xOS|D!=QwLM9SdSL*upGAyiB z5v%mJu^sxw%tv^WclL5u#4LI*d~8SijnQh&l5s{S)+e%Cf4i(!d51s0tUV<b&SrDF zES=AvXP*m;&Tj<H419!rjJe(^?|nNn@x}8qUj0c|qKljI`F{1MOHqonWIFl}{QCwR zRyt>wq2wM#b|<^unlF~Ww@)j(xjwNtAz)i&(Qn`U$I6Il=~9Z`*T{l3e2ww(&o;Tc z6MgL!oV;FcO8;=4SZ0Y2BfDI$F<2ft_C+i`K@K=Y7;DR7LOnl^UwTG@&3~~XZbJ{n z%PrZs94)@-ikol{F=C_e4W??-{bl&J4TvkwcZ-)-DqP7P=RTOMgtj4Rj|xv;OMn8O zFd?+;63os{1Q|4RUbS;J9tK@sl9;YjMh}s%G?x1DeDVqc3{R<2=drP1jjuQhCYcWc zWAiYNInnlJOJE_H&%A|L<dR>D&|9|@S)n;C$_*j1CZh<jn&R)9Ky`_8k^i#Ec)EUl z$j!i_z3Ffj-2;tk+5U?3A5_d&##KMHI=vk6c%y;fDf_%t(^VTH_|Z8fv|RM<eLr0s zjaRL^hKZ?(AnSLAYdOXWJFM+AFO{z4xyQvLzIk0B*w9hKU!GzA&D;^MKhgF;$lZ&) zE*no8D@oyl1=Oo|@5rh8C`?@GH$<DZ&|L~`@J!)lp`NZT#MkASefU<<Mk`iQ7{p#R z{9e;;erIj{qq_EI)`wqs!leOhD)^7=<rmq)M0XfO_)z#ka>Rn9k9;x2s^U@Tgz)mT z1>~UT*-L>#ldQ+uq<Omhn1;&;&pWr*mf6fZS8AY|j@}l(<M*-)8!?}!EeElk3of>u z*)X4#zp-d{*Dfv*@K3)7W6xIr^kq2r=8o6pKbYn5u(BHoL$b@^T-qiP)=mEAUABJ9 zG~mT!KUR1(NbS~liwN1$?k!NjH==Qx|C-m~l~ES@_fvj%h8>%z1J`t#&XNR#EHzc{ zz#LakW>z4dT^>7J2n|BiW~bXWUqr_goD=KhPN)#6#l=(_aXF3i@w1(%x7rx!4ZPZR z)2?5kyWIKvFY|?(AqNI3`(byIv<y4FaJs))CPW=&!_#tHP`uk1`i^-aiiBuJUy91t zk8=8x81b^m<qu8wApFRtc<F>~OZv@W`XtDXoUDhG!JH|U1$>{>v#36V>je0}gAo1R z>!8rIFcnm&Af$V|8ct{IPowSeKlm&XPbKW^Soj;kT;<&EU`~f|zSSI7Gar@8blW(x zc<(gzMime&s=;IJN>>Z?4TLCG2w2W6><;1WY$pfBFKiycnI2-yHSjh?X$4!Vi=DrK zSBdlcOwvBu`XVM5!~65z*TZ^fN;xKU+eljZL8dxuM!I9|Ki`l}PsDu_b=TNW!~BQ< zn^hy6I7@B8OC_-5tqD25UgFct?xd|G=d#RDVocjs4`FTq)cy6hE^e%7G~}o6kU+T_ zxrXk^8Z=clcFr3ZkSSw>pB`HfR50V*dCZRz?;H?o)unz=>><0xH$`ZDTLaQ=qax>* z^CE6T^<Wwl_?tA794AAR)2~ZQRtlkqM4&*s1e)Tm`+do)+7BZaxUnYViY2-<$f)`B z1QYq2Dt)iN1$k=)zJ(Ol%~5Yoj!9u2*7W!7A!(|HgxFPG!SqRQ4le-2f)y-$m`JNL zrSS+)9lBly-el981o+I8FtRvubKBA}ciqz0xR(ejtM8P2)Mmfz>%nhn_*<cX9~8Sk zf0V*w1^72wOA-qC)5z9ALebn35_GRr#KJv3XA75lnb-P)0tq%xChX0z*^lmfL<ZYg z`t)>{xGr%ab3+)H1Jj`{y3b2qbXn{aB;hR=Z-3DZ)x44N_FmgZ(%J2d6%+=^br=N; zOEsP#+oc#V^H&^MVT%xP_<x&Mgzs`Zq&#A}S~?aB^*uVUcgH<W_su>YGRw%6_Rl86 zl^uz;al?V4a{*>Py5e8oc8~=nQb}ENmO=+pb#q=*pu<=@EJiA(f~ZhnBGTeWP}5R- zX6^`+IToIQR7pQg<gV1`=6gq=WkJ>XGpv8qgrzYV<tNLf)h-MFc(#FWrC#VET$kZ^ z{<mg&^^wW>xHM@#N>6)|5OdpAfyrx)>rJsEf8tPL?18PZvC#_2ms->6BnQQ)-T;k_ zHmP8bA25uHVrO8jp`09f3$HNQxM#%J&9n2iTTgnjla`R6g3);2cx=OA9N=!Mi{sIg z3v7tueU0t9;rNr4M>_(T?Mux0k+k`0`Oxm$fTv%at}0Ir_%^0Wkp&eCVuinM_hc>J zU2ydurwi*0h!r)IsJC!grIX=yKNT80;Gl&H+g}q@;&f1VHKmb2O|iH7S)YVRq24*V z0k7TnWQb?#@<TsoTX?^tPrOG^YXKVm=DvA+#e=>iws0HF{``32y$(G$AWCi9ht@X3 zjlX#=$GhlbZCq)n{nfgD(<}rYpJm|&$6Sa(*okTT6H_>99wY*sdOB>(kZ)MsQ6C$G zThFTDZO5VDO);B~-A^9KH)#|Q@a|;s1r0|0kxI%5?3wYZ7)vK*9UknPG}8PTKpL93 z5NVNETBXjQZuoApS#Il0)W!L-dNHL<LT@&oD^KllcRPa~YV@@q&a11^AFj>$<MyYK zCw#e%ptu)MjId3mekTYTd0%vNH&5)!kdu7|QAbgzC^obOcmDh!$Olva2~*0_u8+U% z;%jhPRh(P@4XAsZz`2fZ(l%i#(Q-21UfX+TrLTV?bUr~w_Q8kX_8t$?d|;){JMT>c z%5A9^x@Sry1DP7!A;3PGK|+Oj7q3p3K|}4XJ_qR8g4-?P&huQlo9h9rvCmd*L6D|- zR>+uaD$&7S^JZt^u7fhmhVNlU{M2E&zIJDmKQ`gJsm#ws;KEUZB%peZkax__Y!e;& z&fH^9Y)P2rRR7SPgfZuH))(;b(Naj8<AQA#6|oodh}O@9O^)4Xrr@SNzU=D*4dx56 zC^=Roa)@C>l4!F_#BrLH-^m`=sM}Y-(PLzfKzG6PPqDWR?CNS^R2HAcu4ehib1xI# znVVXFSU8scNuB?Yu(`kGPal8d_-{@=y^0wN@Q;4w0K_7R8?S40^_Y{ntWGfi`9_HQ zhA4+uiw@SjsZ#z2^T*~hP5$HqbWRIau81VZ<e7JYnLoK4{=@yg)_b3zV$%U6cjyi6 z<DQIpvNCOM+v5NGSmEz2F&M)NxX%u(uzrgHO<4?*{yJtY5={Khb&NJh4+uM%KVl`~ zOizy=<;%vFu<)9bS9oDq5Z!*R&<A!li_vZjKg%{{X&@dtnphM*t+bm$gtNYSQYBNi zv%}m&Aw$c2`ZPQ+hS>$Ys#~+j9Y9-P@oRhu*&TIqFIQKt4^UIVOv^X%eOzT`&ip?X zeRs4wb!8KY1Z)5P@}ZU9w#Dl}36q@fg!2q}Fa%VOhy(;KD393bVC3-aKILVXpVyC( zXD9MszB_DcOIu+VBu!2iRTsOr8`)~C?Zv`Z+-a#aiZ>Z;<8RP&i61E-W1Nud)(~MT zciLYKLCc=eX7vP#6rYY14HLGmj~jCo@JCRfWcR66f3nw-=)SpsI_>A?UjK{=HN~A$ z47}=`q!?j1>M<#21(HPdtu=LtqTH=ZTx)BW)Plb%^k<ubbhF#S9gMpvYWWmjZQQR6 z>-gg8txv~XHeXh%%*kD6f;xXWTTb=$WE&<QUuE5+OnHaq+h(o{q&<P%SRn3XNpV>& z<d<UfGj^+q;zU~d99Go_4djMTyhC&E&z1QGYMi2gFOvkwAaL$B9!na?7ZdNZgeg27 z3dWS#o<t^K2iZ(($eqD0s{(fy&2-y46yP}M{fdxd=?eSYn4u(8@g?iqDKzbTRY1Az zEFkH8b#vJ~;TwC6gUvem^OLe@d-hqHcq<gc%!y27v$<gkHbymiG@&JSUJ|@9)Uv$~ zB=J~3Ey;Af&7{SHD*9h+?KmF=dKd0U{)ZAs_}PDX&fo0Zj#m1mU1jLt-RZ|QmcLJe zyhFpKs(nUta>AmHq|f}bl#@S!@ulp49}*ADeQ>xJw%R_emh@xfUATcpoG+bQfNy-; z{csulg>sItw%BV<JNYk|x4Xw0fmgGR|Ih@_-n-AgDD!sf8yh1F79ISLC-zO>t9E<x zVqU(m9O?27GO*bn{SK}3)?I^$Xyq8Els*>!FB-t7rF!=hvyk%O<*w^0VO{WVnnR@c zOSA7&pUcZr;MUH{j?bv+C?zkrNvN~xaSUMU-L-HzN_a(%Y%O{tKKQ<Ly_5vv4g2=p zwz(Ys_sb~UTZg2`A9CaVs3QJTA#v_Xa^2lYy?;NM<}keI64)lU7`XQ`?Q#z^p=k4^ zGkOwj`|(bT-tT28`V&H2KEt*cOWPIMbeWRLc-AeRjf=WYJrfR&z_DbJkhnt99OIv* zkJ<lLtRYO}4EU?Uo{PtyfHC_zBU}$z<2Z%Ps0no-PP5B;YvK31zN}o=RdJx0sB|<Y zof)!p`3AgMy#Qyq;z(}Dy&re}iD&Drbwe9b*-1I)qZbIkDLoxC3GGA<?_iU5_4J$; zJgkO2PNE-D?Y#;-@vKS{{O3sM85odeJD;`Sw#jmBmxkuczEX(<$8OsDpD8(CzosSs zUH-jlc_sKy3`2Ny2P^K@3n$@<Os{RJ7Ycvbj1a(moY3loIM@XgtyCPRKR9e*IFtZX z;!f?f%!N)Xin;ArPvkSvU5zB=aEi?V5=+DS%hUY*=f*ax9AoLyNBkBj&;?Nyx$f#O zO%T|3cN*!tHzGIl<Rj3N@ZTYQGtf8k8<tukGh-L4tpvghD%BfnBj|~I-e`Ua&NIdP ziE8;}NhtYJe&V0_$z41b^vww?=|=HZbNA!>?2-GUbpcnr3(?{y7pSM?Fwk!P&;QwG zr1t6yj^S<&20nY(#y7Qf{v|0o79t>$IOk=`<@<S1=j-)+0H1r{q%(>Ccb^v{1_6zA z{mit#I)MRcO-CfcSB5MvCU0Hdo~<o8uiW_tKY1GcyPWYY7X+mTKFzUj`GbYO3NI`h zSrc)9gM>wic$ID0e#N-<G~L$s07ir(c^VEX{f1Okw`~`LD>>PZE%w)xTaSoSsT=$$ zuceAiwx1-^e-vV5<tp@U$S!kRF0b@w)B309aMwrN#!EU+ylCh=rdf2U<lfFZa1{m3 zbKZ&T#g3hxgI5ZVvFlrkY{2NMojxw>2nQQw9!**=@uV+@al-XMhLOV3Gg2GKP>)xN zcxtZCxYB;QGwn6saWKEgXbSnd;b7k}rS`q)L}@(nrLJfRvpAi+kba!jtznB7-ksdN z^-}lfgQB%Zw;ZXl%v?jEU+srrDJ^YeyU%_9e6OKj29?p7Q9aFzZo3IO_2{={DhV;7 z`gU?HLKTD#4>&9z-*eOX;&hUmDD}+yO!G+YFjh{mqXn);B*xORsfTjt<XDk*&d~he z?p!?7F2g88{&c2Fb0-(I0RK878AVFgt=c(_8~;5)2HHr1C`k^6K%inG@fY8vGWTx@ z%#PbNMuXgLhZZuS-1OzHA<u2Z{y5dA4xiTl94w7ywz2UiMf!s<VVvquNQ@Ct%<&K> zuX~FG`-TtXIN2bkq85_RU0WL7%zD;8hNii;7<y*4p|dv#3MM`qo71&w`|be{7x(vr zm3$_Gu=Iy3F>pNYcVq7U$W(<Q7v6zMC@Zg$8||c6ox%EYV)R1Oy~_c#Pb*uoxSvyH z!N5kkNPIGtG1gmQvT3B;+<vk|L%sKxO1Mx2Yj9w)#OBVBVtMm^F%v>F+|B3Lh|8hA z3~{~9WT2&5H>Mq0B|IjB7Q4}7Tjig4cQ;A7rXbBb_g?}pno`v89fOJvX*247Aq`Zd zWv{cVl8QZhFUaomUX=?dKF33!IyS|i8+*OTCNZaZAA2|Bfi@AO+;|#Dz0HoaLB>Yq z)W&T4BmIvYJ(Qb#Lb)^Qa_oiKgg4p@S_uP`nxpy3bNK+Opf(*-&i*B`_*{p)5o!>h zPRd~VN+GC~{$p;K-eE^0$2{sGcc?;l!Lz`u*``7<{0}<Sn!{`$8fTiThJ{Z+tyd)3 zW4&R|!<kYvl1=>oxH`+Qw$^al;%<fFTHIZVyA*dQ?k>UI-AjvGaVZW3g1fsH2vQ_? zC{WyP_SyTn=RWs;7E2PotTi*<G5u{Je}~?cRm@LX%a<UA1>9sWT#fCinf4meE9=hh z@IAl+>3(QF?x8NAg6z#oqIog2NMeh*q!u_83Lc32is0m@jR6eG!;Cf4C;;s2!%m@n z49?-Y#TrZAP4e#vo$qRq$%=uq6vQB!*(oV9)+7m(5SBB!@e+D*^>jKBud<)eb~@ig zs6|ujB;i}>s2DogHRig<D_&F=tdDVjew{8m5SlO)(?-O*m0qejl1TRwdR6RB!R{o( ztvDhc71D^J(A&5jq5-D>z9lE>O9HsOoMfS}z*C8Dj^>ahe^&53nQzD_!fn;(in2>r zrbi-~$&uN=W79MemxXKct}OHon$(I}u1CuktWPFxPjw!%p?M;H)|Kl;Dq2e)+3n-0 z>SB&WFjO9~5PhQP`NAQZhGNX=Z375Q1OYHC8b>U=At}<#byGXZCI!T;DsaGN_}}OT zSYh%R{;)}BS|Jmh2kB$?(Pr?Q=A-a$TwDw|G3w~$<~fYwevNZ;b50DoGa!5A-wX+a zhHOFC*patTxDlUTfKf`MK2%BZlL``!+AxgjIS2=6%K62XBEo~FFuoH0N-|==5IV~b z9-Hpeoua87A*+6$lR12X2V18S7rcmL_89n4SD8j?w~FusqRJrJaH%mAn(E&y5j1t^ zP>-*()B$~Nf&akC8_je1Cu)S)3mY^pJdH?)v)U2ebANi9`0U}a!F{*BtI~OR$a^$| zp*nR<TCjICgV`I05w^}fpRJE;GeCic`Vq(4xhKORrzBkd6O!)^r1i^9k~jRAHF=5B z5ZM-V)<nWls)S0R74f8I42_k^J)h-d{ShH5rxhiak+e<7A4X!nfD|6Hg4fMSM48bL z^HjOAHd1jGFZePN5V51@U(&f@<(*_LQH%5?jhB;BVpCJ}E#^^2B9(?VWi(v)ru))e zV+j#0sUz5byJK8l*4&nA_hV=}Mp-d@dZE-5I#7u=5{>a#>`+VcFE=lm%*?TbvEMJ@ z1>a_P6(g07c6`mohJZA~Avv+iA5UK-;L*JH85y)O1AZee-|qy_^_m>2PKhEYo1kRk z+Tk_>hrZFl`7oF1zK5a?jOipRMe?t*e6CwI5F=OCa#bc<i|5F)xN=3dg}_j-q)hbq zW;nl~e3gP6DDDmx#GsVVihS|2RqJYh9uvk#&S?l*XuhlmQw>uhlkr#KBL&<kd1a6~ ztxx|Z!Cq&11ysn74H?XuNN(4n;=|ArduXQytB&`fD2z);&W}CRW(g+=@miPR7Qyl? z!YEQ18UfO#Ir*56A*xK+Gv5M0Ja_n8Rff^OIP?5>j|4Rc=`19?46+=EmwfsVvI|<M zlxlgW=~I$+S-k(UMJN?!AZ-MW&4hMY`wF1io5v0(TZwoR{ZVQWoGK8u+Sc2<@DvO9 zdm-c#Wgr`%QFLX*TTIODbk%i=qA}RGqx#3LKaxGl;6ny7<)Q*-6@!Q<_3;l_5Ld3w z9u_D&T1&hU>Mn>Y;-{!alFQX+)_nz?jqSXyogWQ>;y#{*8F^2N=oa*Y{8H?Y*e~1a zmgZ`<=@BZMXS$odA|Bxvf=l?zBz(6JeDV)_iZC4^f0&n(xnz=1hG?*<H^~bc^i?1L zs0#hU|HBz99)rSW*i+VqHpnC{y!|BfVeF&kK(ql6(K?(A?U@9`gzOC?N<;&zc`aC( z#}n#IS-Jnc&<Y(gg3k<eY*D5rD%l;xz}2FZ-BE>EE_W^SxbQI5tu|i^JE3_O)lae* z*&^<JQ6_^wSdHtGE$n$J?LdO(SYWk*zKSJ)b|pDP!A6Vvn*<E0u~Mm~H@Vep3M~QT zAc&EvqCJ9XQjq_)j{G45e8n+L<xv=<D)4#Csuc?Qbkacqee^~Lt}>J6u`d;B!f*g0 zd62`Nd|827qs7NKEtPM5G4*{{A5&KnJ|Dq`X)weteI_<)Jx(f2KdNjp*ekE{qiG~0 zmCpIG(4*W`GZ>37It#rDuAZltl(2W5Q{5RgLLLIuVsvU+AEISNQB66MOX?c;Wyti} zCSY#)Jxm?v|6I}g`>-&T3HeR2jwYi-N2BDkCBNam(nCr8gwb{671#OcDw-ToARb?h z)@GX+iQDVmJ26Y^C_<FNQnw{z*Q}>dKAK%bSO-6=CX<}NH8n56H?vGbK!qv7h4-p6 zO(4N&iCG7Lo7HIDvV10l<r>IBqLUaT^GmCEi($~hXVhs_Yq$$)?MMU66yN+T)&C}! zt$Q7Q!U%mQk}q1Crm=N@AXbJeD^6t>*CZwmt=FXJ@0NbVOIn`;r*x?#ks#<W2(A)D z{qUaM!}p-9XM6%KuR{Nx<MvFk9sitxI`52zRzBA55HgRCxJG-HCM7xq0TT`)e>M`= z@>AEfPt^T*(M$}-qoQl*Ov_Z5?!-i~Shc|ZtEO<rHyRzKPbXT8q?$n8KHn#`&?n>k z&g>KG`F5=U+nhKz?jcxVwDP~-k&5w3wdh);YALF-yGrkETN3%vy;xxG(g6BSP?UbY zI|l)DP5?qiJZRv9gY3NM?Xcf>C1iZ1oIh#FZz#ii#0eGlS`Dnu_<hD}@-g}2piM(r zzWzw?^|Qi*fXYG|RPZ3BoT^o_iOELvfyT7B5+$0^QslT$^I5ekC|?`eMaeu1wI||T zQe#BJLG(YDZt2zLZb7*uzbe|L4d2IzP42gGTsdeh045MBS|Qn~gN4jZ?t|&<j=)-0 z00ydAI0&!k_0W1;ADz1jyA845@O42u$EQGXkHhqfUtn<c5{_RKodmMy+?T+Q9(N$( zNQ?WD=t4(SJA_PL@&!*XIYTMob?8tGNHhm|eQT-VRE5d7)7uk843EBuvg#MPygS0% zJsHr^tHfv(yXW1NW8aH+8wN^M&U)E5&8eivSD;A9Z$uq6TKt#%UqK@^1<%)1PxR2a zv3sjV(jAlB=<|t75|9#4geng(Az%mLUDqOOJOgCt37QdPTVkvR^xG-Jg=%$h;`Qf3 zZ{*CJFVH|$Mbm59UXYVoM4g<fMKU?{{3r3u#IyL%R!lN~%vGaVbplzOY;WS6)PB>U za{4gK@SAkN`lM-wMx#1pKTYL-6v*VlOh~UV8tP?b0i8s*qw@%azLA1e#cC~$3;Q}b zAYVy1;>SIb%5b~B<&v%m&Ss&{o-|M8uhIxCN3UQ>i7;29rZ7PwvV|}9k$^naVooR> z1O>9D2EsOt3RPl~8_GxLBFOOl%nN8%%yh11chN{18;mjUecnc;FVzt448bmzLts}N z0w-CXA}&UxX5}qJ&}T_@8b%JMN+J9;QB?)yotdX!-pj{I(=w5R(d_{;^6UaTCMr|T zh<9IAN@a{=l`LN}^gmALa??flOe!b)@@u%q<CxwqYC3JnFh9-75U1U$)vK%kY~@h8 ze5VwRm)q1j>bAMqw&Cwk&M{lK<ArJa_}^U-xnw;h;xemqPksE3a<2<VFT;nY3r@zB zAFgBptCrdB=1v(Sf1X1BxVKt4Vb%Rjkx{@L0-uy?6HIRj#`ievPHXz8v>Zpn2)|UD zMzEOO*@W3?Dy9ua^NXktwyJ_>?0=W4PTKj5;lR|l@=MkmvF!%ATx`B1lomFw%j zj7&&~+CeX$wjrgsI7jMZGcN&>555sh!oJBE@@`cTaa!=mjAu&GcbqVkJeRc3%3qQU z$)T_?hk%gJO0zbno34fx$M@-KQJ{3pCNX6J#xFMNgkrjEC3Etz9s!KHxf*gMuK^HO zIBmfw6#mpYBA96c$DxQcI^~>iDAl6E+BsEKN3J!^cK1WW**GJ^b}_0bOX-{z9?%a) z{tp85Dj(xTbn5*n4!wq_HhtUe_cMO{k;xw+(4f%FOY={nZD|tkZz~Fo#rnRD143<c z`$Ay&!FaXyFrFLH1o{hr)!{9Y2W2h5uyQ^&MAFff3wDsu91_7ccT*ZKe|3xRF&alU zTg0T)gVG<yjNc*53fzUo{6<8`ZBa=i$_)o8ScN^T&k`nKG9XcPq0O_987$Uk0-Pa; z$U(26EN^U%IgDH7xp#qI8iI_+)ZDwq!*)sssQiOCD~>CI2*-Q@1z-mn7fp?_K+2`P znj)XUOJywim~)A6cgN{-qJZNHcFmw)qedv6TvHpx9BZF*^`6J_$Id;3`MX1#cM66* zblP_z9^^0&V|Q#{lG#JT#hUsePbo6*nQdv~X#B@-jQ=xXIz6uW1Ea$bn246kwtgV* zHvg#a`1Zv~lir&~*a1#9(d;qdeSwvH66DT7$+~%;^5K9LHbI0X`c5p#Sig5dGjL5b z_H&S2bYF`#5Jnv%zM2^)WcX8H9fge^04uK|U}`f!Bf*ODH=Yi^JHFQW*e18O(J!n0 z7609d9hPuqxn?5YgJ?-m(TYZV!Kuy@Yc4GrVbRHKJ8DgV_&7*Ijo`R&rT;iBvSVZ9 z`A$lM%rpSDvn{^`8x$=&Pqyfbs+bWuajt%pKyFuRjDupQExi8SO%=OGe#SV1M5+`b zFm-<P?{D2RP$jEa=g(^Fmc{qgZuK8ma(i79R^&P|*E_gW45`-;fx$WF@XpyH1D)W^ z8}^1%{rYD2-1Z0Q-s6LFoD~-K3nTCL@%e7e7ddLgn!{&}%yqC$Rj?RLAXM^`vN5pY z;bvF6O1-ElYha3v?V(;{_<1YuJ4ttvYqI8r{ylwKuPsDLV$;X9;W1W}`e|20+mmBQ zx}Fb6IL-C0(ph+oAyALkrYiE?9M?8;YtMZ3;lIZ%zjau5uHk4{@tic4-rF`6gq$TT z{zPf`*oBugsN!~LxZPFP25S`Y`V8$Seqs_=|0i^WCOhSH^v;wm4xSSM`$1Dd=v{i^ zkU5*z6lMbCBkvv`>7iTZ(M>aV{8`&9=tiplZN%td%6=nsK+JvdNieTH<-@2b?LU-? z_<yanTC7|_23WiYo)e=7=2Jl+H^@IZpxD3W%ePeMD-S0IJs|-zK~NdV7Q?@wg!n(N z(QY3F5ys@Y3gC#pCby>ud<mQcjXHvR;tqw%p|!=7|6A7a(D3{ye_&MhR`j2`gvVzx z@5;!JA4OdG-;D6zdX9gN3p>G|A4yzM75pk~9g{sMTWTuEWBPC((5aZPR<<1dEpX%Y z#eOIF1e%34h>%87($BL0(t1^ej_nYuq`i%x|M}?8l}>WyTEu@hIxn2L_dG5Ct^4l7 z!uRdoH@5zl!KoL+??vJVEHa{`5tMWc9&bheF+o|saJ+vW``ijxKq<ZfUwuzT-NC<v zJvzUp>cslOZ~K>CNV$FX-Y5h5M&*8XyXIdD4?LV@Rc$?Ah6alLb0FVqBDD%=d*OYE z{43Oud_=LFvZYhXLr!<m4V@EF+rEI!%+QhaG;DbuaetyNzeu!9$!7;V+Ys#b$avn5 z#oFBVRDGV_xVG@E{vu8=cz)VR)9EUI-I&%(cd|zG%=i$p&-NB+6xNv<QW7ehh=S^| z`eFIxw_QZK>kAu*jzV(B+!cm%%VA#whI4ku1$*R{;VgqIdC0cMFOzN}>Bsyu*o8ov zV`9%woZSULUOfR(lsa2&h_`KLCTjDNGTZE5+b4>r-6byG=ZpJ^Ecs!Ku4sg#e*rnX zL2S;FqZQ_XX7_cIEHm?=*qD55`G9n1@8`p_-0X<Ce!I)7Pm>^bHC$qpGl@w~zj5d7 ziZR5-@#%1{srS?L+j;usWqvtP0p<WU-h^Qv=CC7F(TNn~I`h4<Smg%LE2!GdWE>j6 zRQ3`^=z*ZmCqg?+PC?zcU*P%fWaD14&Yr6sPt=Fue%~LJeHwrMlK!H9Q%1L4ezAX3 zuhIwx(yo)6V_jU}#MVqgu4^L_{LaHxAb)ad2}<|934lmW8Lcgv{TlX-xRnL^wAGGQ zIXHHL?X?`6YY#>G*)@s@q2<*0%?rbaE`3-w`{uthT&KLByNR=k<Zyrkg0Y6Zyt%b6 zvcHa_btaj;6)Q&0`P0T_8_z723ev4M8@9_-2_4QGdN;~RwA*^k&CCXroK{CfKJKf4 z0=UGw;6W{>PeE-aKgA6Df_`En+^N7lZyOi{FaWE!;r1sdCn+WWMu~QJjk5SDarBy) z)RS#JY>m>!_t)^Zw{yE&;<4Z-H7mzt6|8`ylbcQuoDONVVmMJTA0+9u;{-ICQn*&k zNeB-SPL-TV=?75`OI9H7k4B>~^VI39pcwChVZc|1PkK8pzLLvR4#bpZRIz>J(f+() z$*aLla)T~~AVTHM7@$!2c<nrn#ZMM<tV`sGrzAT1YK+{Z1iX5x*y*QrcUOoZz_lc~ zhc;|&K(}7Gz-lZ3b?^Wf9<YaTiH(LUp2l$BZDf%X>pb|JUj(KR`*q}O@#L*dgNKxX zzRV<lUioeQKGcU1VlW^Z_0gptT3-AZ)t7gosm!?mN`$NT1Ih$ATc(?qCGs}Hi<x1k z2b$mnU1x^%8OJq~>`(S#-}M|Z@teVdI7D$=#x2NQ-lN#O#k1A@aG@u4<pQ$A1$?=G z%3$Zi+RX1^Om_Yi$<Aa3$h;ea4|^)BxY!iU)KcCNi>dWTfv490Mg{5ZAJwB^FntRx zZZN&MV&THhdg+N9s$V><Uv2Vx=6+#%KIq0q`(+PIbYgw?;8o`C@tYv%i<c%(dwUx> z&Ae81lNLqgh4Jp*)R{&~536^YIB^D*3~iteVegkB6c0P6PWP@@4GR)umW`M49x<a1 z*nK5Ci-ibt^zuCDI(0mz`i4mk!u&0`#4Y*vB=VRdp+>qkUS)v@O^qeznVQ$o5RDY@ z=9481i<e3u`$c4mU^jHg+j%7ba6zwSewU``0GiX~%5FovYjNllb%5asX)TVdHvLM} zv;0>{nE$gp9_?)8n<nlCXpxr<@V8CFOC59SH}tY6ND3Dtn(Qv*Drd3qR9sg#WQm3{ z&MCt^lI654i$p8Z4&VYiR~iO(*)Zl1ua>`b<kw3Eu>QbK^HoAHOST>bi9X#ilIEBy zXf%;33Nv)s;A)D`4ZSBoaZF}1RQ=YNOg;N`NOg%1Q}-`_-)7&)JL_5Oo_p;dZ)49Q z*WNI2KKnf0$k>ic{TU9L-k2=PC2nc@Z~Q{#RXsgD<>EyrN^JXO_*Vu(PQ5E_bL3Rr zmXHgX^OT5yGu=;Q^Qink3xe9(>N*eZW)qU1;x=JFB+I}&r&Zk@jS`QI&=MgvoxY13 zwZ@jvmRt5JR}#&m3Y+u6t42@nBiEru`r>Gr;)WI5lY1_9hmKA5>}3NXQU2DK9}O!~ z4dXN5qH`)CT4%G!ha#mEQF34P{t$7A5(CmUwb>^Dfbr<<^TqjHys3QSy@U1iQ^II> zr=O?y6%%Or0>!CO{P;gB(s=D?$YOeZeU<Lb)0d6mU*k??MwPVKDPrK<P_!qvo7ka| z!*8upd4~hUZqC-s^5v_I*R?6<jmWM0n;&FE#Mv}QHoVT1-48!ofpZjdZT5a8V`RjT zZHHGd>k;%64mVC88c@xy!ejbRXKG&vfunTL&wi<(V&X#ySukVa7<0zQcZCLe6=YSv zH30bKwn{A@=F|-RPs=|kHpTTD*Nj^#-)a@5nm_hE=PgJut&*iju^HvusG}rbeKl|g z96sZLX;gYYtl1;}S=GC}TkjpOuZyip5;HV3_4^bRH0?SqImdzIv$FeKyxp7CKD#wE z3P$JsSP!ja<??Z%t}>gkck2(-r}y_08WLhM@SnMyBOiwOj?1C!_9B1sLKFT;^k`Ls zX_T?lF1ec|y@Hs5%jTq2%r&zQ1_GZek-U_x)D6Q09+i^!nF@je>zGB*EN~D6&*S6A zr8!Ddr85$l`r~_{<uh`&@RW#v!-$(ya`&ZH{)siyaXvK7>UKPVwouD#aexq@dJ*UY zNqLdQpWr5aq+@VPzmSNmQ}cHn`XLaD<2sHh$**YkFk#PeLXyZ!t%{KmerXz_;yQOG zGD$WBD4UpLah?mVPDT2`Td3O3w_m3bH6y*S(x0y$(pQ>df|`{+nDY!nj;;(Cg&n8$ zy&W7@Ip#)C6@7?r=9nTw)}7Sm!zs!dhsrt@H?-An#OG3G5c-*MXu+TUau@L;aVRPi zA;r^bpz_K>wD==i2{CM8KQ#wE3~1pl@c}o?i3|gL1cq>thUGNyc^H}DOV6)N*|hU{ z2`PUCnW-ue^B$-G)J|zu+V#Uf=eW(cWoC|0nJgfI&}sNOyE0HoNLEg!I^18)W!a=( z*;r{Z<Mk@z2qOQ$QL3MHd1huxaqxA0N;`9fKE}YQl_(QP*YW_dTgaQVKMf)-P08m7 zb(bnW<DK6xV5*8s@Xpqv>ZWKghIw7;MpgYi5J9v?@5}EXJOgoDLfc4k=)4YQ_5!w) z$hKkb%wc`9uwrIJiId<u;O^$gunML0B5L2ogW)<_r{sh~xPhiF1llY~Zb_lg5p))= zE6r^)$gqK-{Z;b(A`$yRTXujs-V!;e5zE3Bpr_t}81KT|%ub_TTC-VVo2>}V!u!Y_ zDN>{TU3%IT=EAb9q$j~BX9Uop4vBSks?$|ycZNY3taE>U(@D4N7<~Yh3ykTvIO+_% zz8{|*hnpw5ITU~JYU(;qFUF92#E|-$gUOm7zsl8XaAw<_t*ufsvZ+wg$guXgDKj-P zi;xr$Y57@L75}~ca<@}3%GUW%G8Iat;it^ToGx7^h>A^}CbukDgu2y>3gM`&Birif zq6I*z-o?=?*ZDfzEJ9<2hh+nku<4s95ku6Ho#{;3L#*^!bQR|ns-j<he$MA*JYGsE zip6@rx}WJhu$@a<3;K;6Zcw<y@Fbl_&$`Ts$-F-Aa$zIhaZ#c{j{c%Kz7369xn=tV zz60W=d=dnD#q_&EhZ;8w0pEX5jiKrw`QWjr#3eZnQB`?QQ-Jcx%!(;gh#)}&k(4ae zkqBEdh9U$8TD}5KA%p-Z*q0$!t-O@>%LUrPF5W)3QV!Icv}5L@{%UU_S?zDgRzjFC zu3e8J^!_t}xh$%z@?PvIQcj$(c?1?1fs8whI_zmU<4Ey6fUt6~9oj1;JsI7<59^Rk zdo41&Z!m9_PESzc)Np(qnVPK+B~pNR=9Iq8YD{x;TFr+2o5?)DW*bHpB%gbS1dg`Q z&h7B08<*@bcS)3>#;+5cupb)>Cvu*mSB%3wHDWaQny?sPK&e|}Rdm{ibV&X8jsV;E z^YTBc-U`>%#GtA-T%GaHt%@yF%j2Rbn;HQ#e{y$BpnAWZSJ~dE?21o6X_Z&>z^{)E z*<rJ#;%;*-e=mP~J-i2ux}up=?(beiSvn?6njV9mVmr*{;2>3Gtw@Tj^W;B7ie{98 z4#jmR_vNdtlh+&s{|s@PC5>M;jK{B-*{_VfjE#{{SXE@qtK(p>0F?wb%)q`6P@ftN zCnbru>k;(!9&q-a@x1y7bTFJF)9d2c*IEe%fSCS7E*2#a67B^4xv`p^YmZPhDfeDu ztz786A)8qaXHIGko5=GmfcJluJM5vx3}5<n!uV%One-ic!R+{0nOvcWmOU~6d9CbN z1NqKc!#eWBy17u1aX+JUk<s+NEj5Uz*x-;O!igiBP}|ZTo=?!8pa4nGMC+9e*vxT_ z4CoyN^{dMywQ%3PIgG>i$`KDCr%RBGuz9ErfOO=&_$;3*vY!Y*MUS)!q~LsU9$?AG zxcO0Y#t@{t*Q8Wmq;;gT7O1eQ-5fiyzgwj@cp67Mq-JO4a$#Fgq4=`K2HCQ$3b*;< z-7_2TZTIAa&1n4;15)&STsauC5178U{_#e~8@+{=k{Nn@S|$LTjh_k*u;5~3BH{Nn zwQMx$>z>wWV6U`5`W#ouwKSPZ48dD%sFoF~xva>zt`y1%mh$pz3jWH{xctkM?107e zsTVT+ps^Ed+cpIl*V+sd{%|kC0OdVMkevK3hp`=q8YL=SydW6GRI{`Wt4&-tnhra} zL@CVK6>rVKDWD<^>A9gNSO|P8AW;~ghw|aPk6ic%TsOYoK$tP-RH|qZ<HPi+1fOkW zdGlbOFn7_qTqsS@j|4^|P~jGw&+UP&>0J9_XRjqBR*KM}W=ZR@gFX5qBHu$u*-HiI zyMYe4&>S-mBVztjA59FWPsFkdt0$Hve~n@>qhA|_Xa;Wp`>O8N<|5oEuP4AZUziRm z4>#uWsr*@qu)Wm2$}ipl4?!5_F`1nTYMy-|0G<9lh0=^rAZ#VwG`oE-^(6pYhq}RG zSLtr!YYw?}#g5)YTb{N{0WF5>%43EbSWtKhY5s1;|7-Vt^g{w7e0?$V)LNDFQUWTy z@P!dGd&D$jO$)K0y|Fb*>7EXUF6a-dh(d*pfjcK8I8G#@UHZ_(s%=U!<j^>wP3Vq) z?Ux|0Hfq~cw-g>l=gelkWD_OpdO2zY$6$NTyOa?7a6?_E=3S(n<orwM@NGG5WP|un z<euWnMsUI4-z1h1Rm|X1uRU8Y(dp5=npuMj+|~=*eP=4Wn+Fwe&$Voo+7?$*NJ6_7 zTHx@;$BOw6+rMj(z+!^m;~8&KWha|6aN;)o89J?T)JH_B(j`<xjqPAOwys==ufB^^ zj6}SarU0Z>;a#KNgJ%qVyHqks!CTK4-jk(>YMln<wL)p8z2!fT_Vx0gut1##HYbI_ zDec$3<{{_H+_>X#kdRrBy{Bv35X%-@Gw1EE1xW+qGq;;llOMAQ-pfUe$g)nWpFiEg zBh+p}IbmSWR&>7U5zb(Z#c23RXf(!6={FrFXq0+7lO9i=mcHQ~x@%U@BmS?Wl&w-u zx8*7sOm8K6{cg!m&>bEEPq|TTGRnM<#3)Cr&Y$>OhDeWE>HVy`l+NKpFv(G0;i|>e z(LE>56A|5eGAq3Ak#(64MIT3rTTU`jFkB}JaoE$hX%`Z(oe&R$))vf!ru=9JwxElu zn9rc_XnL2un@sJ`JW!!10i^nyjD|cM&@xC|x8kk`>6vz=KTZz<Wq)GiSQyMV{Xz4o zhIKAfE2^6@TAP*AB!VHfsBU=QtJ5{4s*D=vptn^vBKV(nJTK8;;3oJ4h^x2Qu#ls? z_7(qB7EJL;`=v%$0V*7%#ZV=-5Jm}WtgiYO^#U843ge>|MgT@Oz;1X*s0EyT7qhT~ zuh)%rXJLFyQ=y{duCs|!Spy8@{RRev<813Sy4}#e!Fw$6#A9#foRKeHYCO2c{q?=s zK|Z!!QOjSi8u{4WXn$>W6ongbLX?gm*})g=gZ-UOjzqdRfzu){23@2=RPHezc9eAJ zuo!}p@}^rFo_{5b;K|4DM27uAT~on_*Ix&%FWJS9Dr6Q#q1|hmBF7K=dkt|m4}4Fh z+h??g5;1(?lfy)Q3wM0CDg7ANuhYMKDPj#QHqgs39}m`2i0`v1dl&;XA|P&i9LUVa zy`cNz@4k8z*qL?QQ0v(3JCmO>KeNGmY%_~d*nP=OZyrqCa6X)w&Pjg+mo$i%uS;o- z(@3ylaV6#h6$FHgKCZgsWWe{@v9FpuNzd|M31YYo?y<DCUKYrJU|`eeX-8n+t$i1B zbUul!zdrfVH6B3Xe4I=6fvCn{ozn-z6xQI!LK{AmA^#fw%OSU)JZv6n`4PG^2a7aw ztr%a6ApEL~A}7o#o&L+t7uc{aP7mtALOW^l6zKkWFr43sAC$xPSAFTlOu$xiTvcEk z@~@wAy7r3`<Gnx&Zrg;^%OP>$7BTZ{Wu<s)Sp>KcyQ?gC5Tw`kr_)}HplaF3GhR(3 zh~oiMq^HZ^i5W)8R7UX1;YqT@y89+wjiwvYcNZ1JRuEwJi}HaP>XcrgTu7lCdyNt| z%_z~tojRSYPeG;kdaNfox%=`aZip^A`ftQY*)uEJ8-P8+ME%=9rAnsdHJZq<;{1os zGjyp>xUF{I=SbTz{B%%a_G0em-CuC!^I!FofyJXg@l{~nX#r8DcRX|<6q)voeZ~j& z_GH|q61wi+{N4$^%AjQacQ4S9J_eMfzpn7NfU;jAinD%sfheF(@KagqqaZ-_+zL_w zO8>Wi3Y+H+>R!e%n~8m{>)hDJUl`nnLXq14hO8V6!0%V)e!OF1D*u0;nKIeTb+6&h zefNKN2~|L2Pc}>5n_r!UiymC;|C<RzcNM6Q^r9C3=whg<=2!8*K4|Po#L>W4$eZhv z>kxgpE#Vnc$bT{HKh)x2xaCer)cN+k_~RSG-S>aa>jD*G3N*CgD)QIj`MZxg{TqGv z-mF#Z<Zbp!E-pluJp_6A`uoL0uUPg|%0FiZZCoY=*DVEppS;~WNzP>92p~o%tDEQ1 zB@)ZoR-fE(0JM}%>QE^~hIAQ&FI4Y|I=2!Zy-`kPeKwwva1uN5MqQ<r#9jndPMj&3 zO|bPFg8;zT3(~85m)TzUIp~gz7zVwn($@7l{av;0L#JL28#oX5$#W(IECsnMgT5%4 zZ;zC&h-_)kLO*@E;ZNx^#xZ%)L)i*kx>N!sGHt!bJdrM1dozek{loKvCcl?AI~r-X zU4Lat(1m}9+%fEg^Z9mA@H!v)C!mY#cReHUv+H%dyWvdUwo3Cn=fEp6KOyw)eEFBq zsN}=ENAMQy;(E(+FD<<ZAz<p7?XnHF%F~)vA?nz&&2{u-dpY1u^YGP~k4MxP#)sML zxh;cK;HqC;Yfk<{?pFtLi`&aDoXfHMMFZH%2jt_g-5I2BS-S-bA0AbRF;WMyVT$O= zKb(=_>&WU0m;HSsw_&HAAuUn%p_Tb%^eEr|GJ=a&>ZhN-SN#>!MW4`e&T;w|eTL{G z-IVZUl#0BkC3)`p(DLMalI;w1!_R>q2oiTNEjy6zIL8mZMX>a?VHG}a&^!Ni{VB=< zbexUGdk?Ygb(m<_j+c3*Cu{wBsY}KJe5%^GZ(iK6S_iK6PT*y3fm?UjU2rF>->Y|H z+4W(r3ddkaJawaW(`24s9U;Fz-M$TB@{!%^#P{fP{M7N4mz{`X(VRZnorPpMDPgak zbaOj)f>Yn_%L=>}l!Q>V76Nzpeq*d8>6i{LLl!1tis&ado3nPSNuUYZ>tf%eUb1(U z)-lbXw4lnB!&W0Z#|({1iUt7BPcPsg0vTDXS$}`(TW~Y3&jB&nuc;fk*hZq4<RZdd zxpFaq^=fM~(M;r^$-Wh_7TZ0z8v@X9VPc)^l*k=G`};_3ze}Qqi;e$gXnx2yZ>S9< zm%b6t;s&S&nB@8x-!svYs6?Wz2LCkSPkQG)0fhJAVlGj#ck3EYj)k@*O{Il=I_SX( z6IHI87NdHl-s!n~eg~eZH}C3Zmibh?eh3%@)rU3N9zed1Xqa_jyypyfc$I`7;SLcd zF}4eY>L8x}E+<la!sd@sfQNkOL;A+vz)k)w>HXv3>St|6KABdV3=8(rHQx@!w*0`K zqxyC?-}cg?PoOD~%Mhj?!e7ppIc8?b331$Ko?R^p9x}Fr<y%$kK?dlv>yYewkhD1- z?5$W=%&vLtLB?9lGyldL*G}+g^a+Y#6tob_(!<y0+w_@IqEHIs%~9>m5|7=4)whx> z40d*?`ntKUZ3_Tx<+0pjUY#<IiF0PvY-b4Vyd)4JrxvC+6vhx`wx=ft{kDTQ?C?e< zWYWY_z#?P@*9mfYM|EI&_+Zj^BY-j`<Qhq04LcKae_Yd8$e9%L6g)FN#`Q%A2-(Vf zLS2|oJ;fb`VhquZVSpUlzMu72`<Nqjl~G#9Z0%d20mmcvC~8PEYHf?=h7navIrDve zzw&f?6c+~gG4;L*c%*g_f&{6s0kcN=yM1Va`-TCEcDoibNzs!VbE@6k#b?*KLobVO z#FYM16hC@Z3VRR06Y=NO!V$6@Z|G-4%&jL%`_U|#Wk{q}4OoqhW3NnH%Lbvs?2$A% ze;-)HtDXS1p`Sd<uz7Dg2>JW!hO^dfhl>dNz#QqYnfzqZH>f*exSFgObb1_1*wH%a zY3s$G)S241L!TITAj%l6r6`z~dt@~xTD{@pPH;ZXSwPES*$6g9V71lfYMP#4Mxg0M z#yddF<~kdY)Zr+CgHLCEl!zrm>_y^ZfkR`CS>-Ys|FKdQRC%MTb!@y#;gO=^iSCot z2`|0e>MpJnH4u&2E2WUfPOR(g-vCuPTp2iX0ti3S@dB2r=q4}`sm%xl$n7UVhSAP) zp-(%8*j84K7n)G$Y06JypP0C1Kh>8V6EjS)<S_qHJbgrDaf|ydoEkbP#>RK5?&!cv zT*if4^vgO63T#=Aa(d{EIp<z@wyAVTsf6YTR%dNd>!gd6d=*0J{@#uU{{z9IQ6V&1 z+J&u;iaQ->pEiefqXRA-ZOaOvVs)CHcf3ox6J~q~Fi%J%Ye@$;s}cnd-pVg87&>+Y z*}(|K&kCsz!c{(fC4~QWP6QSkk?afF7yNUW%_&KqBDPe`-dT0lIMCYIei&?W70FM{ zT+qHG4{w?G2J61^KqJU37js^U`?zDmu>O+WE)3_9!~SkWSPhHU;nXRjmI)n*taL<S zT>JNv5k6!-UCvX*$5i}1$Td6QsvueruCq$Y@Sy0B1QT47G*KOaXfUVFpr2NbYEB(m z&1;*$yFtRgBPQpc#jrYEycHgRN7MlguZfsb5zUC{-BSOgX4w_#S7w@j&GQ~<Ma^XN zN|PICC*ulQdhapBse%(~Je33ORwHk*hR^}yz<ZedGE7!zkskJE+8#>^7}LiYU2|t5 z>T(S6kzdDl3O)w?RYvX-V;S_B5{2hP$$)`Ghll?@&_{bv<5^x03%LDe4R&D^)E?T6 z%Mz}}KzUxIujXBD;#$D4qzZZOjSb$M+SEpnxzYK;h87`LrTodsBd)o#>=NbEEZtU= zw{lG`_S%6)-wTCDh!Wu&?BTFUVyN(_2uEW4)3eXRz})7-$RN26uE&_$nP*P6ux>gG zgxSUvd(ozT$K?dJIn2l@ocuTXDTlis2GEh;K<$&bMPvf%$U>QjO7*qxhaHNz^5tpP z&In;aA-7WYP9k?`Z(jLZTextTj}n(Iqpe+5pR&+rhrc<?+<!k2Ww8GCr62lm2W6oB zguD!x4c;vODLfbJU$27)syQ)d^#?^B+lM!_6PRI`c=AMy<S{6)AZ|dr&PXg!HtQb9 z!Kz{CnUE=RN6K9ZsJUsm>K7~ozf*y|*4XaI++|k^B?x!Ezgvsy5kJdbLnagB>N}fG zaSOD&26F=XP}e$@{|5&~aVJ?KEoT(nL0W6?E5L~^{o4I^zasUgVH9A=hGVI7A+cGG zq}eEl=d9zKZK$vx`dm?L)l!thxhI5p3=_=0UNo1)qcOfd;?DthCs=(0XN^4~a1y{@ zlR$NWc-PmAyoo3C4FfGZ{-cV9qKJFThaw|1sBmaFQRpUnM--cTUbs>NZiPNP<y5sW z6nU=2`VdZ<-w(>e{U*L3Hd!3IHetJ;(tw-uP3R}52&f%#`V&#m2#yZE<M>;i0^{Qw z?QkjPL0CGs@beevM-_2FHFN%=;7Hb;y3KbAXB9T0H#2X(2O8^>@U&1fx0Jx}Db@nv z^h!<xr%$ftCMyPykh)$dO+C-SvRoN7AK+=tB?sbBIQIoLA!)nh^>5-u5SAs`<k;Hr zNBV@zIo?<8KyTUEc(oDC+!RIHpkJ@{fWamiQym&!w@@v(HUrYW{3qhDL0z_Q_U_+> zfZOH}z6AF&9-o0LP2W-BEa3q~%=8K?Svr*_YKfhQ_K;O*>w!!A*D6>fllY~fAH*Qh zukw~XiY=;M*2}_xiaXpNY492rcNEUkzzMoAXHiiOZmY4A>iqtER9d=C{i{Wne)1{u zj$Q-4YHQr^A3?q91&3JyfC_ItOGP>EUwVQt5Si)1R|Mef=Wbr*vBtvqn+o0w>HrRp zQL>m`nW-)=+ym5+%1N0)VuCVTpY3n2NFJ+cb#)Oe+MpJ{X^y26WVJG>mn<Xhphfj^ z-8!ta&$UDO%qod2gk?YM`}RissS?)VALY=~waN!7B$3XOx3SMswX7;v_mB~nn0*CC zRX9AzhNiWTI9{Mq{69yAJw^s34LP`h)iFmPft`X$*j%;PM14M-yN8RSsUVTB?N1hQ zU;ud2X7Ed>@J8w#IsXW>qHl0=xL+emMHa+;hyEq6cjUJ-z%~0%@}mXv9hVov>MwLG zM7q9wM%5W&yftXZdy+g8L{{Owb^`kRbKHByQ+gY#>_UPsjfcmFk+!}s-=QB*)hX*q zpE*MK)JWpm+EK?ALVwt!pqdpf5#I>|GTf%(Ls<gGp->=BIqwpHCKG)z2DKZ9E*iou zcGEId$n<tp>jMTH1(2IO^AsA!cM1Yb7?+;ufedLQq*M9&RB8B2g?0ryO`JaOr^D&= zc9H|jJHnr)KyhI<UmgiEYhK$zg;#=<j*nhlz&+uecmRfhf)6&x5Z>KZ@b$)2J_@ml zbM}!`t@Hu)BRMnfz9?KB@|wIbtz92?!&X1MVw8Y`^$3H5+6P<&MpFj}1CIOkU%8>H zp4}?MoeVVbQ6n32W3+i{my^O!&v?>FX@uggaycj1)ST1E3r~p6+9nC9-4O51<{Km{ zpPB_2^EH`>9SEzTMi!hnlkd-a(SwR{eQGz~PmXJw)bB0JE=5S%NboZfIt@uPDEzV+ z7O+`mUAaoaX!TF&0a9>2lTmg*IjOV4fb@#?cc^@&$`>1C-&%jYBp_9-8RnX~&|vX^ z<l&Pw8pGyM(JBctMU=p&=Ip9EuA2!On!z1ZI<E2LM1+oYlbl?*Y)Z!(XXD7ZpM+!u zk(vmHx^4x3<fzOMAkgMw<Nd`}M)##XfC|aMWdL;8^^662laAm$7V{X5KIY~&l!%*4 zjJ;vBEAUz7wp+&I^3=^%za?nFcu`8ab5YQ(8kS}&`KVCp$9{PS?K_)fg!MU4%ow&} zUcm%P8_SOOnN+o93Ddim?beWB8>Z>6$t1M!Q1>k%#Nv!~fMJ#>+ac14$;je^wL^?o z>7SR?R84+r@}A&vw5k79AN7dPCczgOL8^Id_<`two=Bj6V(~rSdcYic>rkpp7Jjm( zABy^L)TE%w=Ew~>U{2%HlQgK;JemPUciRMa#~3ciiBaJEYG1-St(m<im*D$?U@AG; z7aLebvpFX8`}1>LNPdC}pq>Hb>`H6tDCQ?`;)c5ZO{0~1==4t(Eh;c3V5*xRD}r!y zY68T@!a*Sg`VKA6Vl>o~JL?Yu5IcGY5hApxd6p`bm>lb~eS@wZlYxTH*}||gH~o67 zu>b@kojdPIoLNUL&6<oN0vtF@cyb42wq(29(#YMurh5MLN482bOg<SzmPS3NCt1DQ ze9|mWSC&#J*v^_M;r{&w@l?8XX#``%0s7t$fb73u*MV#y2qa^iSpijJSbh2QBz_uu zMiIhEVOrcm?`97C_|$wEb+G%$4Pj`j{dRGGOg!}|b)G#yzshNu=g;)OE_QMRQr?63 z9`dPD_-{xa6^xiV?A}sTRHH(r8lIQDA;sI%i*K64RXXypEniV2nNo~OvurddOY<Z{ zr1<)^3+A%@^WAFUwxIJtyo*hRC&QMj^F?VN;mF?5MA&i8iL5NPzsBPplTN)19R3oD zjyaL5ge%OLUwR)d91|v71p^Zb^GQZhTb~Wjz-^Lxu_DqSFmxomgL2x2qIEXkfK(+U zIg7ATMkS6!Ea`XBEK$`|GY#yW#Pzx|4y^n=cztr0$n%6;?8?u{OOMS15psl@zLO{S zjDi%3s8cb&0qqR@%i`1#YMWHXD$QnMIWFt?QV3t8CRk)($2~9^8vyA2W6s^_QY05L zz!a|O+&v3=fC;aKg1u%*@HR<f`N_o+gZxAOG3|KB{a5sT`Tl(JP*-Hsko_5t8_GL9 zI6*};SC2le`g<a>@>6u-bwDyHph7Tm8P`4iRgNg0FEsX>w0ek=NpN+>rL1DfXrnD8 z9=iqycs)O)?I+nnU8Qu<ZUKqpS<<3w3sOe}Vmrq-o%&BR_uv39?~Ul6F18P6+{{?4 zY$3SZZd)winaimFZI`?D$seqZRBLR_h(1U4x!p@cFsv-K1c0@<?tEJX`A;nvB0d;U z-s@J(CUBVg#}U*}FcY+i?(x0f7~0rO2sqs2rr)@Yo(WolpQTgWqj3oSs)NN^>F~2w z6Pp@B4r<Pe>IU;s64pe!m1+IfV5anv(kT|)kAyDyUgFq!GPzs*<XM^xo6B(pFfA2B z^DI0!Sd@yS7vWDBwl9&)DnofR?xCU_yl9$uyNJtR?iT~^$p)nC^fL7(1_|70eEU*b zy{D{v$SlwhX<)JFfg~%tPNsmA1ONSF604xR^y@)vaG#j?GY+ypT^4ZdFquBwl06Zf z46Y6`2Q^o?Cho8W$=U4Uwm>djzgm3kmn5T8L9$=CI$*17f%TygMyBcQLKt8=ZB+kg zK90_y;=<oIG6$UQ9NDnxiFXTVOWe0jQ~n^b=67VF#w>qy`+6A$yHsPpd*m;1$y`lV zx~98;tXg>+cy~sEn(bkgF%jMQTayS%(TlXv?-=(5X-w`s#(hOz<;1;3w1PhxrJ|c4 z*t$@oBoZk!gSE%)ve`BWEF*2f*j}A9hhztIX-rbRk6*$Rh`_~Gc1JbhIJF+Mb{!KW z8`=mM%r=C)Yij}2PSx%}?LfrShq5=f1Z60@M(a(>{?W0)r+96i(J+C>Wzm-3zS6tA zRwri4>L*cfGHQ<|6z^~@>s4CEa_|#knu^bHx5UTKNAKk2vGoh82FpAnEWT9jypFPj zthV}G{NNYkY`qKYZQKpTNO>e}TH?T^;`YkysXX64tqiHC2^>A}A_Z&@d*o+sRG;#{ z{_-NlsJ2=Cs0%Q49W=UQvRK(|MN@7zA-ioo3L=4|O`iOLuB6_mrtEOt0hwjNPcGRC zAmn)1me8lBLLoT|H4>KE0ceQ$u`_gVn}28rGoq7TcjLza=8g>51FFZjHLK8r`!4qd zahVbQ$L1cJhrnC|vXarZbkKpKChvO-*Q$<skKT~Mik@u|F`8B9qXqz_Kf}IWtdT;c z&$Q7jU&ASRXBR}mBNfy3ypyaY)#Hc0dJ<A{APb`SS;x)T7RJ+1kHY0GPyfp#E7!30 z#VKog{W68y**Q&dzW8p#{>9#(5FkD?q(5ltc87OZ+S?K|VF)b>-ZJ_!@FT-~*}pn) z-Pd9+x*%GJL!yhHl&h5Q%=&C9UtqnE6|mB>YxZXfB!6brH=a4B<?WxtiH@?X;pr(1 zPUg|UH~*8F<M35Mi!5Xmih%lEX_y^sa;s%r^np@vt+zUiQYix4@fmOEMuc8*<ei?R zA4e;WC9?w)+D~B)e9vMO?CGZ~z63&kw2V23*dzYMGbzeLr4Z9silO4!Hsuvhao<;H zmPd_;uV}N&p`e9BwR=B{E8rrt;sMHwRq%L#=t0%B->+T{5bgr5qB63!3V2_i*Y-^( z1{tui<A1Y3b&B^$tOD`(H>;3N61~uLJpn!Bqv3!Md(6BLRsk$06S5oN1D8wqHsSC% z=#A-tu>pJtx_TPk30_whJ=o*!>dx!vpJ;r`3#r}azo;|ZC*;@z?k(;CF<rVOk8>O9 zaT`^@E_s64PvSI`NGq;poyVpN&?CAS+n5UKYzB<1vVeO!Wt>2;j|34uZ86Tlr<-@3 z<`>Z!#@zLCsZcPN=D(yI%JYh`X0{auk*R@$CszOCf&UpYZ^(m!xUO{nM&$n!GQ0o7 z+v@&D@1{fj^bdN__`4#I<sVL1?SK67l$lzG!4uHt7Wf+h#Jl>{c5Ku3>X*vb$K#Fs zS0?E3GHomVla{{+_2#vc1}q);U!+E;{uMtVd&5rue>Zgm&txv{C2SePjLwYiSQ(y? zW#1PhAaf^*cLjOC#&D)6b6QPvGkCQpOxDoPZ^!Nl6c0EEHdXiv6Oeo#y-Z!b3`!?@ z>q!`Sbq3dEt}Gg=yg@;Mm?2*$LqBC^$~*v%sr3AB8^T*7#D#AG+s6Jz7XkiW{?HTA z0`yuy-j!p2#ca?9a?x<odW(g7Kx-=Vhi(FTO4krJND%_D`n~o9$4`fBxDV52cEo_p zUm+tI!LDn;@DS-;;U7qys3<mu_x#o0*)3}JX0KdNL7V<`9f$NKZoh+SV~ng-qY}%H zu!hX+H-NMEebBD9J$~}jW_zqSVI0y<G#~?(Uf1-e)q-k?l6&VggUV(0`YX|hcl9&$ zsUd|TgSc8POe$<YzVHjEn3hY;IJc6$5P#0@RMe6(3IWb{wA!5oJ#k2%fB4v1I0~jM zms3rcE<*%~imaraZH{R^vC*xCKFKC##(p}XQ$m2;!h92&&A5wr>YW66F(=?Je86|$ zmtj?Q<R_nhoX1savKRV-hLNrn=k2Qx?PA0=!RFr0+(76glg_DOQ^BtK{61bJubPSw zu4GqPE~VUs-LihW$DmB%`~TqTu54Uu8l(b#TxOM)eJvwUneZHa>DmMZMJz0`?~a=9 za>tuh9M@Q>V#>=%&{%YP1#ZhYr@t_=bg!G~+cO>k@6i62ck-&=P@B=LsCHJJV6npr z(;a!}%5J_!%d(ZUU@iInq%fx;^g*w4iyYf=q3srG`i+%b7js1bywlv-aOi!tnWT|* zm)dc8{0m&AZGqFr`0f9$nhNk1lP%oxfy-gCO?zcxI^>TGh3??mcQ$*PTZI(d7A0#T z+H@a_uzA78uP=V6ykw2CqQCSeBl+z-i%{Rm<2S%^=v#%w2^du-Z=nNXrl;3Umz^Yu zO)0IwfBzXRwSj0y!pD<35dS)-<~CcFbxL*Qk{t1-Q><#Zmiu0K-_vA|XG%!p%FF<? zYfpXB)T&=)^WbpGskbPfSPdOLac1I#Q1O$SQAB|qxpWyc%v<UCwdCxPHjBAZV4M<i z`=I~k)|PKlpRPGYu@XKWl?h@c!+^7y_R_Cx=why`@A`~sIs^NG-R(VhwsA`($-Lqb zQI1DgWBqdP<(Q|nW0)^FSq+tx{8Nrr|FAdhuvE)kaQTq?tQgwZS{96fbY4vZ^agh- z;}P^^dL-}PLT)=c=ChP-e89EYv;j-q8=n%XrL^8-E@;4&(hvZv#?9PT^Co^O+@IqW z3O1a^ZJp-u9yU>DqI|u_QRj)+Y~!)XS6NYpQ2eI#O4%n4xYzp;KBcpxRL(AorAnr+ z!EWt-sNRO;##`d)auHp@ct^zTmM>MKPD1Esy4sQY^fOBL?!Ny6QOh*eeB9=QEq|^c zJ-lA(jbQC(>f-5ImmB{wklSc!vDexM5kWW$Kk_5R1PIx0kKZ(K0o1QW70EQzM>dq? z-0jzP@R;sRv2F1<Gr#vDnMdj1+T|m?|Hwgpzh{tt#%B`9dl0OT%^Pdmc+OniPyS{0 zZl6LOO{M8hCuKw_{DjL-o}7_Oq=3;bCcf;qdf@=TPrOH=ad@^ef3V!%OSZmFx9ZaH zpl2veocV6pmo(+9i*@oY{V8m>_t-<vNeN~BSb}uLA5&2}5xkq>A<=F3_@vE$*3OzY zd6UO}1YeoWbOK({!qws-GWeW~Z&WoHYHD^Wk}iV4lmK2NPz!Q3b@-|zI7fZMx8CyX zR2;0~{#FQD)zrluq4EK=OQD=5fzt0=-yyJ37m!BF#m{)kKuqQvI91Rz*oVW9r+^)X z?!B52lnLEm#yxf<Rk+sCp9VTLzKbkwexYb)Sd;7<xxkYjIzLYwGuD*2ceW%+^1_tA zuWJ*#v(|&e1laY&R0Paj|KUtIQ$FM)=JOaWVb3%fBR|$6e%Ia{q(Q%30J4{GQvXgQ z%j8GBphTOYtk3cy)m^itfIUo5PxSKVI}6J2elnV<zzMeZaFAf~XT{`I&uUQ8`MVl5 zb;#!MPgXr!5cqN8uxHHU%7H6_Q&SsmsYK28t1#<Z*Sa)&!v56~JJhp(jquHQme^f^ z)#+VAizNHkuN%fXnuwkN<Ke8d?zF5g!h}VVoVVVwX0;Xe!Q*fAF9`o!DJ^<7)n{aP z+tH?uFTz>)@8xI<Z-vZ=;gDjk6H$s&N-`7-a1`$aCh|*qEzL5HwZ8ySa$@TpA9dc* zQsDhCo1IfoCLsx^Bk<tp3bgrQi1uf);WOz;b`!!iEQHAi68I>p5J&Vmbx&_WyfuAH zP12ZTTNNM+!92EQCXp4C(tY0e768%uj6y$MVtz7rJbyyspWRr2-@-QRZQAbmr4w7Q zh_TgzAq<c<rx&XXY5QTgQ8FpTaaZ5{+@tim@$Dz8^W&`p@qCX_ZdMo->FfWY?Jc9) z+JkrD(?YQpheC08Dems>?p_>%dnpdZ-Cc?nC=#6FPH_pI-~=cVoSXAM>)y5A_rv{m z^C`2}PWJ5Imi5d$&&<37=vDrqi#<}d0)qdBf-%rXz`@hj{ee=@<Vc8(nG}uAKafqd zT?;B(Xz*4kpt3li+TZG@mFH>Zz~4Rai+juW+y%Uti5QR#x1iZ*zJv5`GJydK1L<iH z0JCMmGYZs@7Jz}xl!ItS3*bwxe6V6-MFsA$#f+IS-$iKA01mt~Oh<#1-dLgiaOv2i zY?>E=Bm`5gJ(C$icb12l$1OAdpl(6yjUwmtE`T*u27V!sU`iih#N>cYH0s&DeQ~I4 z?3o8-dZ(7S<K?jKeH<m%S6mii*CV4=UdNXy|H)~;W9BC4W)>ky*ZW!!dXTqgq#RI= ze7m;49FXxwqDH>bTsu)q!6WN?S)+DgeM;_Q3Kla=j1e~FFq{ACU?(WNeI>Z68|~Ew zXI?vPrpF#U-SgP<&Sj1!jDNP<e7T+sJBIl8l%_t8yJR0z-g@^0@`k-4wXHpW8Yi6! zFq~j#fElW12?6ID($B<N$5o`Y-v(}ykCDD42-NF>I3I8eI}b}Wr^<?Evq2o`JSQo^ zv>DMQprc?d&zi6WSq;V?`?iBicsHMg6>OGj(obP&Lgg|BE&is8IWm#4&?tN5>Qo_G z`(?7ehnH|BNLIW;w-}JXFHxNAw*=70?-v5ls+bY|bd+x5U_3w9juw#kqkN5%&NelU zP2<ek%6-y8z*~`f6HVKWzwfH9@h<_9Wf+L7#7wKaZ?BrGd?3@GwC1EH7k}4APifTw zKW3g(;$aqpKgIC<8<S+N30PVueDF(>(20&kiI(EyQ@Rd?&xaH;zT$DI%~U#VK1f0T z>LU@#zN0u7Q0<FD?8Z-7hTx;R;KI0g$0j$#TU4DXnun6t+>ip0*d2%!{VxeV-)KI{ z8X-GwwP)6_d|8q_LGsrLq#ANZbR;vEQIpi@Cgyy}@gOP#`IxlMaTA95TAf^DHn1uI z#rp+D;?$vogylcV;Ct0LHO`3X8k@m(t(}5MmLX7p)Qv3Aj)pZ+f&9x8fu+<eh)@W) z=dB;qY~t_Q^5KRjIc{fTEFX+r@LU2?*+ok@mIV$7k5UAef;`Gx<}5QN<P?{(q!Bpx z6w#8aS7a=Yw%v6<OGC9!2d^dms&fWUDMR(6(2mrZdk-Zm<i;*foa7O%zw?CXw<_dG z#bEEq1&1IfihD~P0m}6S?!_2<$k_VO7<dlf;=W#R4ibdI=W6*>y^@J!CKwqCdyr1w zI9KhfN7ym>Xp`{_)Hd!4np<#T_C8!=$O|>OnsC!EkDZlsMukwoGKZSeh0>|Uigh0x zK2Ztds4GJwFzu9`X9-0wFeM<m&Jl_GIUs7|WqoObANlhHf^C6Kh7}=SRcrD=wC-hw z_v1Z=6@QuWxP6(`y$o2ul2AXJ*L(?8v7X`%V`d-tjVX0061|en&L6%RHX5YZzHuA8 zNDn4swu3zDO|U$j>Z2WXxQcj`m*2|*VU~~aGo%p;QhZVy!6?@F9#lU@p2fW2KoY@= zw8vn_!~0U|?8KQ35qIy@Ll66UQdC5_@~WIhF{V>c#BOrkq0ZWTRICwz4BT_^s7YlE zI=l&jsJ_yXeo6c1(dvEO!NLVd_sdkX=?$3j1Hb^?^hJV=+=hmxSyQMy%!n7FI`E)) zmK}{`Rrl7?LUr_+wgL%h=SL7(t$?o4{LUQW%i1U9IF}F&VH2QS@TU*+OMfKGam!QY z)KiCq+zNsy1Z*sY9{Odv(2Q~EqMG6ZQ8W4iob!0bakY>#X|d1wa)nM=o7s83^HZmq zW};(o(&mT=#y+=KYP;c`d||Kv<vKq8WDV^KtiFFUM+!J+Prhw48Suv3(*yv;l*+Z< z7D(D)J>No4-5=jDuVeCO8F=~zP8ax{@M+WI-QQv{d}Z8*xEyZ+Ka`oe<)Qy(FJ$te zg6ZCOvt2jVfmNaE2MdWMTdbS>B{5yBuDE)t=blpd0J|A<W(1+ongD?5^zZHt0`Df7 zz^3~m5M(M=6}qJhb^0d_0dxJZ0%>GUAhigThH<X`DngU_gi$2IoCy<mE?H}CVns)B zP4FmG4r%uyp2(xnDOzRH;FvoU7ZL7lHS2KJH?L27Y$pBelg~MSl`aGeb0RY&ndz8l zedbTMew8qJ?l%4gan8}>tDX>eq&biPvUidKm>h)qa^LQ~<#8UtG%(b+zB$3j0JY)l ze}@M5Qv=DhGTB8|ZD!~X+QlN4GEYf)F|>}4r~M~3iM2X~q2*8P5$;~rA<{e{)u0&N zMsbp6&aNs3)qD`;a19H0Y#c_t<uemI(JCAsffP6cyr0-xW!f){deeM9?K0T_mdQs& zJORr>Kz8_B>hU&D7}<-1CrB5)#>z;Leu&jWF+XGC@srq0=CAaxYcaAf4jY(T!dXw9 z?%HbBuEopXmy$boz-tgq#UY?CPTnp@z7{iQs`tIw%uhM|@i3C?^O$=ri0Usif^kdD zbiQN^aL@L05Nn;@NX9}0DAPGblprdV>ti1WFlzV&Y3F<?fS@l9Y$MQpXYOW|JvOsE zzVU(#5xwx{@384P$;{5^bq6!tlm`e$fI>P8g-o$)>hgu!8bUmAGn#K1&=2f0LjLL1 zfj%jwMVg6NHza}!jK(SN2m_;mtJFZN7G-xznr!u{p<#20DGgB9v*rMJ8dgFsOd9GV zCYQL%)4{tB$HCIz`p=11XI@YQ*C->%%a4HYHjEc9&y2~n{rg^c$(d1)+szYBjg5== z)O_KT<Aa^w-@MN5wt0xtlP=JTr(k5C8!<ozI-IIaK{WkD&%!rOIzf<oP@aVS9^@1O z_3l!hcLUh3KYe<|<lngM?Q&+JHF6eWfW4az;!1lIOGE&^nnv;!Ox}*9Dqn>ZgS2?e zL~dHr9sw1p&f8o4*D(MyDmmYN(Ufbo=`I_(Dx;4y4!G_g*8O+Y5|P6k2X}CeerBW| z9h+OiDy}LJ0Y4Hl(*^lSr-|<4I4pWc-8w{YEf`=S<mB|)VwVYNco%3bB6)6afv>9# zTq5v=6^%UZTi=_124$9VLz@@>mXd%(oxl69cozlC-|PFNQpa!j^=?4hsUaDs0AS1# zAIvzT81(8#G8VLk`cmp)&2~%htR$uM;4?NYM+e&uDpHdCT1q$aqJ^@nG8U_rmb#za zBOvOIF^x<IJ2Wxf-|Db2RRdyv01Z?=0?)5OY6}xPzrtiU32)q{RiPuPZ@u4v?qM0( zumDq;*V$!0;P}2e^p(yVQ20_*7y+s@j9Fm)xQ|5T6U?(VBe?p`_}tc+c$4&JpvK^% zV4a{qOz>Wnx+iti(0%%-h<UclTyOU!*JuzKSoFgANft<s`Xb-<0J!L@ikhOb0*p+N zLCRRpjY;nOfx6I<y{LdAtH?;e>w!BY<9?9YLmk@e>^`hC^G2!Ka8Iu^3>&}>CFoT= zQ`|j~{6XoThiCXKleyEDVF&l7&7ne?9$fI(^)8437RuKbRQMR82YtGvdl4j;C2qes zSBE0NF5M+>>K(1Mpj>p9mkvO8+8m^ag52JuPG=&VU}_(jV*(HBAub+=0PRiOmjbqY zJH;VHr+92FovSCK-pLCfX4f0CVh|?I!+u#Y2>In}q7tQ8GL!(~@^eg~nzj#93U3n> z0b*wKq`HU)agm-SWXZIIZ)rZJD;BEXtc26FY_a9~O@|-Dec2jb6@?MA^$OU--4)wD zrmdJEJ?{iGcn!Psf4!#ycE*EF@PS52ol=tbZEa-ZLE9pq)8K^6&cH2#51-F!+M~4R zlcR!;>bXnyuGjA}hOW;)uqRGB!J=a}xkj?dfSD}2eBL0@Api3NX4qDD9oHuKe))2U zC^&lN-xYd|%|%_@Vu0a&Yh%TRSlTXxD}y(MZ#^(@Z*wtFajR+eV5p0}GEk3AI&G<D z&f*Rl{tc;@fxzP{y@}CB^1kchVzXf4JHFz9WpBs3w)98OZC{=nlhf&q)00zi<@sys z-%9zuxz2k(>wY!N>yl%TDTX|@i`;OVblN~?AHB;cMqRxQ-+gzEzI_WZbqssRxL{w` zln>AY&Y;|x<_7MyB-vu1x=(-_w(cIxB!LG_5tNE;Ml03E!GMW|&_X#Uv-PGxzEvr$ zoP@#(KaTm!L+-6#ofA~woLK_Cps&24QC&y=CH-Qakm*ElX5?eMv7dAr#bUhS_bRuC zbnPT))OOZhtl~|gupAKes=9Wr8>K~@BD?VW$#<u`wE3kL{n~SX`!HZh;PdY0fm}}_ zMkcXro2%KEJI#c_XeA9fax=@0X2W-_Se&Mw8RuwbRHQ~1oID9TtY2{Wtv`55gLwGS zgOC!YIj$$(Hhf22slX#3DsvF^LYZo~j65c@!pMbgU}(<7QVLvD^Rw?pw>FWkY;3)F zHnJlQZeB8rE)-2F7U~8U9@WG=aYQYfNtvw2njD-l!S?^kxA!hqyC*Dp?3xqmE%i>n zaGZ>8<V-97oqw!7BJobto<vcaFlbw0_AXB}dfp$_MiA1sIiO6vy~u9AUj9}UHJTt1 zVG^<WSm#+--=jvZdMwws5lV09I-OIWU>uyyR)3>b{&<!Ch_;OFeY>wH9qIRT{2T&^ z*_&^A=0#_R^uE!hqJY);r)TwZmKG3jzI{m8o1bzQ)j1ovm!|m#KycEhr#odft?a#@ zDbYpW>#yProR0oZ93;T}VU~0|-ZMN!=6l~*y#!-g)Xi1e($9;&owCC+x^!<gVCPq3 zQ9=C=5TVIn5o*HdgchF9o^HwS3I8<gvr2ATE8zp$kcxRVbbFk^WDn(yWk;D(Eb3xY z%O@Z)_bCvWAkOn*yGO#9pPo@W@Q};)bwdRMxv&AGq*`ZtS~c#jVYtU2quoBm3ADl# zooKW_<Rhxa;Ct%*Cq2fUU$-drScei{`db`hhprb|4}LW79^X~pB?ESjrn#fM0dcMf z{XY;FlBgcl;NJxaiy<4@{2*0S97PWo8A}GWfPWxY77nRZ@gFrFv0m9J_M<f?z!JI9 z)kY_b!}WD-l_^4;^uRy{evI9P<4^txALtvOpazBN>s|4)-zZd6h5Ih*kT>1)peBMq zIb!}vQw9tPPhqtPkO3>#R=aGy!ozkaaA0s4U|yvp#<8LP;Hi8#n@^(JyQ;s>X!H`S z4lOsl&c$*Uq-^JZTb<(Hgl|<Yu97LZBwts&-R5x`v^{o#;u}X;t=(;3ek_A%%o)a5 zyHI_)<EvDUlQ`<m{gbt|x@GD}zIuGEMJB0}funhC_2bE$kFpH4tzTlQa7#%M2)i5R z4o;YDUkH$<^O3^Kkl}=y#7d)xLQLn!zzJu(^8*88;fvKaswa$LUaX<&0w*mLy8ge3 zpEOxy&4l|xF)M6&0m~I;isOQA{9BOUnT1Fv{F6u~0k-uKkGISW?!eSxyJl&<z}MA{ z!fwMz7XCl5C9E%mw<2nxqawc)D>bZ^tsi3(9~Y-^HTo!EA^!|cVY9XBE9QNSOY-vk zO2d`xi#k6zf)Bzm+#x<P6rBbq0JHv4%En`?O~;{HKLopEfkM(B93Q3yrNRhazTvce zr(VPW@ZJA9ob-W4Z(0EyzlMDM-pMpysV0T%dP_<8xV7s9DE!&H_+w`dN@-5_ttnWQ z(KB+hseXe=N-A_~jI?+WTgGQ?G^kViT}nPlzi6fBo=5M*1+47RQ)XQ6_(}49*|gw@ zZt7@SV7anu+TqhEE(0Nz&vAL9pSOd?cusI!9n*)j^@ec8rGrmTeYg@iF|XfR|1@!; zGM;-FBIxHn=PDZJX;KC_*a3`3^V0(w7g!m{I+#1wjG19P5$7nPL`7CDpXjvh8NRwx zh4_+${%AL(^cm3TQp$fYG*7jbP3#cxSwftb8r=}}l}z_6OnMX`J%u;!p*%su2x7Vp zGH+${De;=9&z9Lpc?26dlTh<j!Vy}_D`YbzeXrrlF8q1tDtTY5{;31FouCzonL|zw z3#hR%2UEa0N?2k*8>-Ns{%jkuV^G}1$v)iVM?owDRw+S7D=)Or(G9h@L3umUvlz=0 zG=N<5+E@^3D^_=$nYRS@d?}!?gxT>qL1`!pWo&;LY`jla@+S&;SP+yJp#6t7*N3jS zxSC}rOZ7S+51LWD`}g2Rq|n@BA}{r3idD*h-aFg)lAE)}2-_8`if=Kyh>VlVc)VBc z22M&&`nX8v5)L%xzpY;edn=sM_hcN&&V^)5)`=aYqN9Lk|6YM#VgQ&WAotS(06oAA zf25fl{DQe13)%?|t;AJF21L1%t`{ChqzjSib<U8!r;snmtp}}30GsKC|MuRJdM^_h zHziJI2aw-Ka(A5)yxr32@D6fk5UCb9v#m@OnlnCmYTr%9k!NY2Ig;uCAYbPMxA0oI zTao8Di^9Ic#B6@p87w<*(}AI%@hxK~&&dc=`;~ATK9j$Q1a}6kafIIUjTxt8VHQI7 zh8eF&ATIPW<#ysw{V!$P!Q~d6n${^~VcHP}tuO244WzzSU*qu~L7f0(cIGaaZz<>p zK~_aqvJktRRj2+>%M5LCry&MH?1qeD1T@E0x~JpbmkdOncX{V7W6z;QPqH?Bw6O)m zG&3Ck#H>I1n*~e@%KP=Cj*$+<@!rqk><+PLvC!*C`{XGtv5uOkQ24}rVaF$rHm$mj zZ^mf8W|KFT?a{sj=p+fz7EkhBB-`94K|{_90DRdEc{jP>f+oXZTO~;h-0DUiep90b zd#_c?7G*Y``B~vAeQ+Bb*uG0Tp58n*0pix^6mCQevX6@dxKC`~X<87J-^ts-`{4J) z27Lv!m^gbow|IC7EVDEF<fl|>8yN>DfbehhMJ+Tbx8K;`#gZ{KOyS56yE^_<>j#4C zMey12J$$bPeavbbAZ72AYC$bw>FGGp%eX;R*qVS<5T~;W!%OtbN8IZ1tGwC$49d6F zZglOZy;9JIZ-rY%bbMR7mj#+am|iBhM-8+U>4wfXPk&cp-_72s&$&%J5%(#jI?gpc zf33W1pySg25rP>pmY<mF{Kf3Bs^yuVSpEhdx7r&0jVMg}b8v-i+|api%`Zzvu#Nij zI|{BY&)=?qRkxa826Nan3)g{Jm>G)~+jqg#DuIJD?P2SQ>~T^R%{8#q8)|_bnkOHd zr0wX-yc-Jp<~LsOj3qQe$*co+v6c!D)v3$|8KEoX)V82~!Jm4m0l!%2$rF)&I(=xn zaI8-Kg9cWWn;h)Co248$bNcN{-@VLn;iRm2a`iIIxP0YpoxH4c#6_xmp~WDe<?PMD zSlUkTQ$Kn#h9z$l(Faqru$PTxv9>g)HIF6pgD}pM^&OUq8GY$Jk4eFMAuu@2DE~wv zJF_ZeSI6Bl_R1S$kCTEqCaw!xB=l_5H%q;&J>Y19b@lBoM6*%dYlZi8>f-bnG!Wi0 zdBhgF*Y?~J7W#&wpoQvukd$!iaOqXgPZW2C?wEiUwk2!HL};^BsK9w`^t_1{9U4Nm zzcW#Xj3m0dD*apnelda+I9K0_hB!X$4;yBOQhyhjpcndl;U%0~WtIjCsR306y&p|f z@4a{4e#N)SoeibmhW{`JESmVwDgpw+dAuF&jbqAVg9P+{TX89!L}1a+pD&i+o$q=X zfS8bfjm`g$amQ55Mn0fdc-?FN;DQMcDEr_a@(UZ6*T1%AuQJiSM8L#FPWV5%CN#_) z?X^EY{=kI1aAjPcl6?5^;pttEVkIWn+sZT%R0#110i7-Ih3N32d%tqY67XL%5rSXv zA@vB9s*0i)OLvq9eYySFvuZmk$iJLwT)%yl3X(<*r(6Ep8JhyyX^|oI6GGT?UJwYm zt$&D`ctN2Bmh`^(uvm+pW)=Nh)k%wr&O8wNMy~XCDxyf8u0xC^nE$EOO|$}wjrK-u zo1X8Zc+rwm8e!%sk#A#Fltqf6wk)(;!b8WUw*bN8HbXi0X5?u$KSWB@ao*QK;*F#d z(Pr><1=_+QI<59d)1)=2h~?7K0x~c}1}KM-AA=6mlCa*TUC`7;H6bR7QbmbxYsJ9n zp~wt=$Gi0l-c1kNY1A1!g1|mFZckaORC~nrcdyTIDoBcDx+TiPt@nL)Y164xFe2%k zZUGf*=<8CT%|Oh!lua;iM6?JAjM;y+*m#kfe$y@|!OjM2#lTNgpe@8s*=;R2F$4+U ztF4N~wy2Y|T<$hq+YUv0Bz+y@=A5>NtR-yTMaDkgD8sr}^)FNWEl0F8>QH`)M;MZv z^k>@oolTlHrqOP+??SqQ8=~i{7f}ck6tD(H*w3{*69eqR(qwMhCJ##f@S#;I=Q&1W zY-TDlcn`+#Z`-M{^4)AC45ARH<uYsudg`XB2*SVP61w8hi39A!<?+m*FyaF;mE^$* zS2oSz5OwGwy8L@LhGK<+-nyu-+1LDeue$sN)MHOe02INrvi43lkG<%(o|d{KoN4+Z zC1Z8;5wRhn3u-ByN&?`y$z8pXC9Y46RmifK<{kGk=}U?j#)~PL>J}qKQ}ZSC_ui(4 z-}Uu)SK4)%+ODhon`+*Bi&%Xrx^h6c$+4BKZ3A`A)uCC|gjRpOvrv&1=@u%c4s=cJ zlb3xv<djT|4BQ%cg6FV&sWu_uRVg%vdKutP7Sr{kCd*4Ha53JZWR<Emb{FzzT#$Cm z>IXTwf;qArlX6{)APOIJfZiViESKwHqc-$eehRSlebY86X(Czg{f8(GUP?K^$I(0j z04%aj=3N8+^zXg|w&aC)&;)QpHvY^osz4A|jCwY&-dZkAM395Z1;d{TgI(!1Q-RK% z_h1~)eED;mAy$wFHH@M(b!Bc30VN+{F%CCE&Zd;0o`8T3ig^@G3Ba7bFZ>j9ffb`@ z@cT6VEuavtJ03avoS(aQ=uEPWUPlodvl5xLRZ%`KxtE`vk(S~7Y2f`}i(a(rT^3Gk z^rY2vO!0Aa2m0=HtCSvIjuOs;Aa!g(X(WNnJGSULJ(1MMkGPJCQ<-upo%^$t=gLrc z)(Ol@S>>*)3@s)Q#r`CyS&5<y<^OZ5e;F+n6ZfOF42-}Kq$&iox`LTTHICX;aiyjd zQxaxzP{kX<y7y?;8eBX-ao9v?*X!1N#YXHBX#FEWrs}jZw$awNF{ho2(ekHdL5g2M zOdZYilW}(<JEH(LhE^$F7RbU-A=mn7_bZkw2~=fXoemENx*$X;{GqY?U^}NwEM@N^ zR}xymdyBWfJMU+8A0>&#MD<$)ZJgbhou-EFL-3ImjX;EEKo(2an{U5hgw@soI8ylF zo1erv?IR``eOsSmgQ#A%>9D5b0;*M&m9VV-fj`(&6My5y!CO+|6eb-bsNe**F5Hr) z+{nWtfcm-4KbO{qv<6}@w9wQ|6rk4L{@E8V?)&8NpgDnD*Bhh;Iq0!2kiOj}x;7i+ zaUhOJ7v&l8ez>j{Cl=KtF_*?Nbae73bpc9(1KK2L%%pO9z<LS0xDB3ES#)t0&=ktK zGCYz>?iZ)`skfDSOVo{AE^M$%N=4zwf__r6HG(ja3{nzjM>GNtN|i{HpkEvYPK4(F zSh8F}AdC9#Ic;3W3y>4GmO}VT@*Ut9Ei6yz7ygUEVqzYpgQA@d-A*1Tw_BnL{qb?% zo2cxI>eY<|PxS8w5B<wx9S1Llj#!3e!gt7|#OUK;tcjS5sNs2471>puEY3(kM=kOr z$lPz1nC$W;+OkP5bQ9wO`O#x1fZeVPuDH`5V=@`&7oxNqE+p47LY8pcWa)0{h(n#e zaS_b`*$YE%F~*jNF_YzeqHn_NMug7WZ@^GuwU0eKK={kTk<sy;7Y8to9?67tG-&7= z`4RS6nA&+#%wGT%;de~UHwLP5B(jy!?f}luG&)=rsl0&7P3mvbA8<Ku7Bvl!0cL5T zPR18NgOt?*5$d!%8aviQcW=P5G}N=B_^R1ch0y+j<z(_y#uAV579*yh)=q_*y8-%d zpyX%$Ezu+8kF11G%F&Urq+l9tFejCd%Cj214-<tql_mjS>Wi<kk`TcldT4CfAO%JX zj=`(O7Py^d^#EgJ-WD@4g4d>;q*%a6j?`b*wr-lV(uM4+BVbv{hpa#iT3JDR2sS-{ zfYdjUt3YGV-!Yba9cZWf=yTRO68nH?8MD<e`#Mlh`d0UoBy>=9`ma;oizx7feE^ZF zLVIAj!M8s%OO(NfnA&>&7o!iOmj?8@>zX;4_NFrZj+jMO(GZ2DRTGy-T;`XomG4q5 zoC<e9`=uu442B+R6P@uX@>tEnl0l_)Jn6AHG#ZlGC9i{x{EZy!u^lT83FD;S-=DEk zYZF=F0_X1s`<0<<8nJb$0hr}IEJkW>>QH4zAh+;GBvfGEM8f66;D8nrmZj?ySXK8t z0+eePf=ya<V(1qo4j(yPj0k<Cv-Dej&eg4m_j@Z5dqDrU)as&&qBmm+Cl2v0vZvYq z__19B`qkC1z-agL<hc~owFsnu_9uGHq9N1I`-GQ^7A$(dmQx-DRD-grHhXdi0Y{LN zgl?cY$FFr`&j~X@8vf2#=`*Bf`9aV!yP|M~McrA6Z@c*Hh|iNz(XT}YKOW;J>SpqP zu@`D#f?e_lq&GwWW`^^gF*n&OTA9*ms!iRCqO0p;L6@6$LE2CX2Tvs`F?KN9cu*^? zKrbV#e8z8lTM~>KP|4jSH<B-`t0fFgf^h6+ND?Gzm{RyW%r)JC>}K9aeBQ0Sv0J$~ z7bmq#F+@2`VF#<~Y>ag`WZY8%%zQDn`gw>;Et8W<SbRgaNijuX!^3#Y$H9>F#&dC~ z*sh1!Ow~K0YUX_2on}R$%~8_x3B+I2x4_Pz5}DC_On(wk`eR<tFm#L3$K3s_F8y(1 zk#iwK5I(4yiDH)GsNE206YtXb%d(PwvLIg;*bTQKV`oniD!sEyiaE8*x%(%~NVdL5 z3Ths#7&jV0lv|*sFs6={w!{Nu*KhRDhAzNp=r`TtRYy!yg`)j)>60GWayie&MN&SP zg@cNB#yqz(Z~!Axgjm~%a(Iu9S)k&>M~6>g6F-tQ+y@`py+#h+T;UoM2?66?uHYlW z@9hC*g1`xa0`;KJ;Rbj8t3o#N`U^f(KHk}fQ7UoLE|^AKkDYHB<Xruw9r;claR6o? zUy@H}M~lqb6}ST(Y&(CYc4|NaAsFEfdqSy?au64(Tm6pFYdOxAdvPl;j(5}vbYNfM zT)YBva0OYfZcK9&g`BrR&D*}taxySmQZf^DQS#_Ocq1tQVvN-=sA=U^?$GW@GK}if z&j+4vRv48v2NWKDi#1r^w-SH#l!0<@C-!vO=!eEZE`$_??N6Ef@#tV|5Q7&Vi0agc z+>BG|dzd7AMUU16ef)1J3K+bme{Um)En|$FR_23jN^;2tF2b4EBc2!m%bQxZOsnI# zqZ{VQJobwCDQ0v<v^QifpK86(fFg=2eb67Y1x=C^_^tJXRTT*KC5-f@09G*BpWVjW zj!}oZFMdr!=k>oQV@sKRI<Dhz%eSa~a2*~n+IlH~As0ZaxwKzDew-*i@!c~uII)dn zX0ZY41+#5fU2^S<-*ne{jI8<2r=}K0bAUNhnrH9vl_(j5YIVCPVb7eLKbCOl+IPo) zb@OIS?jQg?L{pTLhJWK$N}tx5i)<x>=*?E**}$6wC+tB?dIi0|pQpjoFID9YD4b1M z$Z-e|8S#N;jC_#7oGUm%v~l#59Mjf}OxjL+(tC4^^yXWM){|Dh<|z3Ua1ZjOqfJW> zEc$9v5)%12u8VBqYJWF5un<)znm)MmNn%@1YR2!NgHM@Nci6-CN%H$0$k{Ql@JwW> z&%-1ibYCP)lPbifV^%(Y?$+`^_wUJXwcC7{aO?UfvX@`_+w_DkhV5&qhnWS=x31#Y zp@@yDJG;E-)L&0aDyvSN^4rg<T`xpzM-y@7>!?u^$`yrvGpNDEJb&xld0GYrhH+D^ zsjtIn&SP;#?gfz)Om;qbe&tTvaQofbT2widIL|k;Ga3H!KtjLX9HsrZ|FKC(RgBCn z;i<_rr1-DUWR*)xpHA)F5C1>zpB{?JxjRswq-_UzTi2hZ85MPy^^ps<&Ut$-cCO^F zCVwGz@Tq{GEg)8G-ml9jKiQ@}iDtBFzagE>kH3pF^qxFAFF0YzWXY+6=h(@A8b+%3 za^*gxz|}o^qbAyiGmr>DXl<E$NzZAUZ@Ko(<)a;HwTMhm*C{W(Kd>jFLse?R{&+xb zy?lKps_TImllHaRHQ_YmwXE&>lKi=`YV)5-SD&k=)S1S`XIg48jqiZON3{?Kr0I~X zf}&t2fus3abJqwy{4SeUpS)r=p0bBen3O)vT|&Uukn@B3XDPl?B0|EuH^N^*D$3BQ zvFBG2ocY%SEzA#3TE5|c8P*`Rj$RVrYauf%G&B@8LOr?>em+&%Lje?H#+m;&L=^Bv z0nWd3RfS5ynYa&Kd}I>Pt>Kg8M>s3=Z!9YD-}a|4LU1tV>v@e05)#rTSr{k^Kn_1H z@}-Sn5Jg+fGBs?+1HQr6H85E%^WI$uPh)Ot_ZCh|!FPWNZ@@X`oSJ`1dfh+D1&RI_ znigKDm<FK=O9075kEB+e3xCD%*Egu{)S4E88n&+<#-7h#;x<#Zm*3qsCkVYg{Im1K zFzJ`e9{I!v??dDLv(^zeV0PYT;`=3_^7%dFu!}f9YsqV$Jo)dthb}OtLU!W2z_x`O z7hFA{Ih7wgYNi8j)n~-Sm}4h`R=Uo*ZS&S|8(MzQ5ob6F(B)5!I4(e}A%5>+W0b$u zlIHP3R_DeQN~+pxMNIN(6^yMm$TIua+g8|Ng%T{#GLu*9k>}SObU9rlF4WH~`iZu< zSBcha_$;k>%d1OkQzkuqDe;vg_a6S4T=Q$#IIZ;<8RKUb5oO7j9=y!^L>XsIT=Zke z{>7&{Zv5{Tsd@YHJR8Hus3%97V;*?Mo|mIO2Sh)OQ6}B~Y!R$&;(&tr$7OD!M;nzz z4&yLHM!kmbnf9!uxpT0j{(0jmxkvg!`+FoK!$jb#nUm^chvvIZvZgOR;oF}fq*O^S zQv8Xa%w7r~2tSRV<WCF^7MmqaN9M%uN%`xs^4Ou!{ML50#@6ud)6|2N^GdwwZ2L3X zkBk%1q*|J+n2wyIzK)frCC5p4Q8vw>VSJ1QvbBJkw=IP&6rQTZ)$)q;)hXVqRYKh1 z7lHqioCt{?w6=e;f)D(HXF&TnmNJYTX3<KiK66N#GXsbJ@BoqPPv||a*U8@Mm3;E6 zA7W*#UZ~CjVVf{k34uk6oqddA6UkCvd&AJbjs|fMypoKA`W)$A6|2He_Bho|y?bN+ z0H~OKR?W;nzFU{o;pTK0g{OKADyHk-KL^k)zz0Zj*<I|iCtz~M^rvL!lHf_&)+9~+ ziXeY9%FA9tQu{Tn!H!LOB@q$6ZGT+WXG!Up9=E8)lo3FUr$`WL{0{9;Uu*Nnn8PuW z;<q{qV(k=?hNR#Z8Av_9_-)#lA{*GHYR2ibYE@7<Lf^l|x!8eblHsieEEPS@+e3$A z?b}h?FZor2q-WQ$Zk^?GLZ#q_EQ0fQ&Ll@mWmb)??#eQP>N%yiivYM%SS_E!GFQe( z;K{-%yW>b-1i4}&r<4{4m!2N=D=6MZ%-920?y}jeoGWI{JjPsLa??0&Q2pJMXf28* zFHWD9lIOn6WHxQ&N`V0V5>OLGIBoj7C)&8PeYTc{i0UN*g+=(mk}8^Q4b~S^NK#vI zWCjXo!t|YkkmJ$5I5&k<^{gP!aqEc!=E?vYEp}vg`P2kWl9;))+!!3R$6R6nv$<qG zTOXr-!{1T;Zd#dJ$l)XhKHf?WVCz|?LZ|+lE5q&2zLL`AvEZwClOUhVK;@_O5$nqZ zxQk?DmW3u0SBE0Oh+P6L=GzZIx0>n5FntD`jSJwYq4oFPTyy=<qkK)P@Ii;Cg_AO} zI%f`HEGTihiv?%gM=Qz*Z-X|&bFJG_h@G{h-4K7Yy9J2+F$gi52+xb+#NdddrpAWe z2l3m6O1QGD+4QdXtumB*Z8`Fn<mULF90{nI9@H^0Du@!cR27Q7hlGm%p}nQ<W;cZZ z5Jl8KhDNWYqZ6|>@g}r%oZqp;ma7q6bFVV_=RGM<YfGFpt_fdCUnEL})E5yCX>eYe z)UEhfqwG04b4nV0GQ4HTzGTl|v$oWo=!jkbev^Ajq8A1iz4Y#Uj@e`eyy~odKk4}} zuh=h4*Absob%O)U-5v+_d?!8y*Xw_9h$(wd@Rg+HAf9YSISxS)na;;W;9f!%w)yqU zUz5~r^d6G61s#Osy5o~f?;>z}QUiR1Wz*>C@dZbpwI<2wv{UWky)S{OUQvAsBg_D` zPRW%~QfC8Iw$P~}B{J{ZNze_{J`|pozH%MSUogkO;Owpa-U!&&7!BGL{I~#Q&-S-H zFg8KxJaRMUSfnax^k5z}p_}Xk@Y$<G>yoTWADU5vU8I4jz`OIwoG<5^#c9ITr1Mpg z=oBIgZ@mFC8?XtKb+^TQzSTen!_kKMM0y|l{mSId)}RN^nFi)y_Ov>*+vbny@?N^_ z|BSwMJUTg#{(=MykpgOIU^g!N(fhn-H9K5SHyV!eKJy^xoe2Ib@i5O=_o=n(#Usa; z=iO1)g#a*sOxpY_RwN*V;W`5JgRU5KWk^(9vdssG0`Pr2DbE5ut3urn`{dO2x>ccG z)IJ)}`IM9T)*hsxJ;W48feX(wLyv?+uSsY4^$9+b-rWznUjKZJn3w%A&geK==>}WM z@{^g!+sY0b?i<%!Z_npGc$e{-ZxaUEBCGeajO8<OQAntgfa_J^=W6gv{{cox!E#fo z5F+;*grbRdROLLS4F}R?<=~btpl2{MAWFOc*8(jooexoOr5Zd_uzzHnaX)bIqVH6X zY=Aa4zA^n(Fi8kc5dHL8INcFI;DfF^KGXwhAsNk|5?29coFBQkq1x`+aN>%>kO?H| zeOU047)?NY_@>+M8U5Bi9A?|QNB+TX;O1AfF}U^i6!b0FE<@E(zt<&_g!Tx5G`0fp zo$M5X`nKpdS*oj1e1b~pD=mW1|4Uh8j&C?v3AfNXq;;`OPxPU%W*rI>#mhK5NvN(6 zkDFK_eP=LIT>^m;!DNbIS5HY9wPCF%{uDmbh;X)MAT`^49BWD8`yyvzI1;*}GaFpI z`#uidy9h9XgHyc`584U&gM=X{O{28%+Lm5V-9H6yIzZcGZus%d#M82#yEIFcXDz4` zjc0xQ3R!ZLR1M>5ug$Cf?6V@i`Tc>@th=q@2U3bGMRaVbs=J@%Nyhp2BvCj&V(LCv zoAPARAOm`|`-4B4=FuUP7Nho7Rx30St5^vJ|6S~%Z4;9Lwxu19*Vri1f?Zg$JW6fN zQdAf{{buRw+*O?0he=d>s9^eyKb6UYKLQfteJSP><#F1mE%fht>Kh`C6%xFlnD63` zf0*9XgMOIsD9P;;!-I;6wGL(&W8K)2?qR!Et3EDqJ@xIb7gW2Pm!~$PA8m}C{bl~g zoXS#lp*VE>FR|aEg|<RB-g?RNBKYu==qs?&tE5L)Q6*`y;$touY?IuJqV;(wZUh<6 z{?z>lu89dHl45pm_;$u3_=PS}rZv>s^f$l+vwKucG!Sa01I@y(`wMN@QIm#B{vpam zR?gNZIk&PaSdSgEzf97=7dOnMY2d#Yqq|oMyZ%D>kfNLRjC$C<+`3!7%mSO&N@3Br zpB5DJCUX8Ki*vE26m2N)qhcUhm3@O{gI<!8y!6A5#ZwT?2!Yf>!MCY9qx}9k?x_8$ zkM(9Fy$>-jfBPFG?#F=!8QoAXFZjcqYin&V>57&X=922I+Rc&Yo{Kx*A#RkWHyH4U zNxWPA{aBcmk@2l33{6*tw1z@DchdCTx<Rt%$S-HaH%bGv9E}r^ND0ACVs7N*R2&ws ziUuu_m{(=3v`!8wA>5)>J&Gx>3{JiRKPEz79z8#E@sNiURIt9|Vcv{PMZyB~M)ay? zmU|rU)cJq??A{GXXMD+YAPNcSc6qH<h*P*8FBij|E<EIav_F+J%b0q5=j2s&-T-+A zE4a=32NTxLz9GnWlB#Fl%Km)Fn9a{smpjRRTs#%Q{F(=Hi4Qu;_(cvM;TY(qk#mN| zOPlGGz#8};Tr6xVe00nH@LAhw%TLGNe4FGy{$?Z?ig3{X0YL8iwm@ZpT@gwR$I*VX zFA^sgNJzn9aPB59<$r_c|Gxoeb%aNQ%+0sEFX81SDgg5Fe~qbs4GjRf=>I_UVK@Yo z8T(fh1;^|EcY|jvs5avh9CdsA>sl%ZE}MRLtroCKDyrHfv$DwO&?`?WWm6pt<yd8< zEq~Cl%DpA{7Grnzu720dd9KS@&*$^-Nbb0I*ipOC(ydGoJ<=)pMV)Wcmg3(@<IU~~ zd#@sB+DUOrB21&O5U4TwKb}1gAGmbEvZWACy3V0LJfN&P$mfBxO49HaHUdt|SXk^_ zLI-@o+w4X}Z;pm#ATR#@(@a-7R$^NOl1_Hcgf$zPZLYnUnCB$tj8nP@>sHNy7b~1f z;#m|hsDOKdb0Gjc(;+e^C{Toird(Pq2rE)2eP+9_y;$iMzA65N&h_@d?5<o2-jWyf z{?o1b$DJhM)~Dwj0A|e~%~F&;v0w(-H(~92FZT!^?Ti77IJ5lqkF$g=BWC_oOk)J| zQf}(Iy)>sc*?(w|UvMtF`lfDs<-F8;YOP636~3PG43SZEiU9VA2BWjwuUgVt2*Sok zV;29y^7!$`caY35m2TdB!PDo6YdslbG_w)rRus+ehYIQ{RwE%^7XLmBZRBc3ZYn&X z#d2yOs1G$|*AD0BqPRdUo(==`mVpqk-O8HKkFn&(8gLFib5lW4yP2ps&Ms+>a^(AF zg0sU0zg?Ew^2o6FV`XYfmYK1X3sSTFCfaWy>TvLVFnjBebASq-4k1`AGi&v#q+V%$ zPTf-?x7hR9d@;F<A&F5K{`0)ta6Ve!74P9hONEn)>aCJ$keX00%=8WP?dM9JdsesR zRJeJ6EZM-qN88T*u}c1^l<AdA0AO0(@J4u`ayqGrPfIVH;npnC_eO<K>1@MU`N`*J zO(CF>u1q-Bu#DyJaW)p7&b2DEieT`0+8P&$_YDOW%~LR!2!EDc(xYBlCmM<&j|PVt z0iY1;X574Ls&R1}Q>stPsH~s`aWvAU?+rdS+oHOZHO3)MbZ#7@S2a4!UPYw_@i&?8 zo2n#!94+@As*)6vzQajbv((o9<>64bz!ZM|Kw-nfT5|-;f8dwJ9VNsCJ+;$aUV*-W z+a$jSx+GpH&MNGdCBoBIf<=)_+mG;`!XryWt?6BIxB!lp_=2s;+;=R(iUO%zUqKJs zGOZ0RSqLt+|AYIRCZ6_f#D*Tro>pz7Xz-leRT*-*KfR;J>RA49gq$`C)*kr7*#pIR z8d=fFe>`o7+XMwms}Pe9qQdPLT{v8phGO&(Glo#Y&g`mLQUq&yIo~D;5t_N{D~GSr z0`#K430=G$EyuDScwKV(Ju5UH)nPkG&%T(F$IAFeJuZQM-K|Sskjz&ac}OR&Wr{Mq zF%Jchh>B$KrPfxd=|;#fJ&Y1ghiKWrS9I&zor`;|icAVWQW0-oAhH@%sDom^o4UYD zC0xjfhJ|?Sjlj71Da|iND1bMbXo0ix1`$w*hAIRp69lTgjRx5eZ60=sh4a2o6<U{e zHg<3_=1(1r{{CF3ve2LaB~K4%;Vqtmf>pz`ozZyM20PAWpt_w=EOZbTk7<k7YzNzY zG%iYH`vi3;cYP!U6KW|ZQ8QfMFdTmT{;Og9q!m69%z-Fa%7BT;OeHkG2tbmPw3ZV) zbo+14lYa09_bp&366r*5<gCFP@EXzjROf4wf%Nu`s82&_B_$a=J#j1EHu;glNL#*+ zsbf|sQ~QEzEG3nWrsP@n*9AL8Lu-a*Je~(zVoVY%f~Vy!u0OxbEpPT9SXHo?E5^uZ z?_z2q6oe`XU5ioKE@h3Ex<z_epUYBz{y-iGty@CM*&NGX`}@SKaU#l3x?yOzs`tCr zcsQ3x!_RA>Ukd<CKf}@VNS8JNzp<}Pdl^iI$X%c4iL>E|GXjK4lL>TqZkFxiLl5M^ z{6Y#9SzJNyFH%_uAk)npwJtmu^#6mLD;Fc-5~whgRqpF6>-f3_@ff_U@({52c@9WG z{XiB<g7m`ONP6LU-xZOst;n`shZ%$i)Z%#$Ed0X?(bTe`{K-D?H6ZaWz((nsd@N|E z>c~<id&V=)eTlaA_CL-aPQxq_;watjdiXHg{?g+!Vf4wASp3K9C?>P^#)8?Hvkdej zHGVTLj<m)m1@g|E@Yq%vIPJJ-duL<%)|hgl)o?g7PvamQYo%NExzli^RQB1chIy3q z%t;TbBtM(5n`tuZN1pzO=e$}AQBvp7{Fbe$y5z4K9_hy>yr7=|-mLZwg;xk^sNt=1 z?E6p85wo!nX{uK$0oj{s!4@u`C}CVo{dZ|3%s$E+XKIpj#eegTNFhC0gkO{yCu~p} zx$niT%U>d`UoHNv9Q@N&*)l~8oKGT!;##^i!y2)C*1Tks92wGIuB6j>ZCsw>R3)Jo zK*y;Dx^P=RQ)}g_9t_c>0EVuAVr3l(0Cq5?8cHHv=u0e!0C&6Q9K4A!o_}^I#^Mzk zN8s{lAE%k_=F2Av@N~kqzV%v?&IO{Lw{UX&8x}sH_bE!p-+Tev?xHYDg_K3Ww4>(Q zMOl;gG6FhP;>>7}MefSE=(3kk7CeH{0Cw8vAYik9WZmuND|pJoBdJeVTMuV<$`!2Z z!UGtwh7}&QG2#);=ji^G-f&n;dxQ>VfAQ2I(1l)k?lQX~ypp;JY`+ty^kLyH?J+K{ za7`0>a8k}yesr&PQ(|?mXx?#ijHsXBZXI^W)-KKAK+8L-bxp$9AUF_eF|)e;R4@`c zM*6%sI43RlDf$8{BbuS`#+0!@b@gi0M2k%Us6`-6I{$0sFNIoVagX5;KvhQl9WtU8 zy-T6Q+Z<V&K~}}9)0usb%wj_`R;f&Q^=1s9!aiPav!n?LxHUAg$T=otiiy2^j8e=l z_RWa5qUGV#*&LwPsOIJjW)oZgeV$`YRB>>+E(3I3Jl4~_;T9Bspf39RUVME~vm36I zN-e4u5E9y8f@w;9Z2Qm<=`b{}?{~v-pJYS}Fgxmy9pI+&DI+oto7sp;>QNS4OM(2H z3waAnE%(P9n8vDZZ8uiRve(|-CJ@}=r2{I*gC{@fD5<bEZvD~(=Ksz4Bf<~b&x^>Q zOS0ge)E{8oegfwj)edkccHV)yyFQ}>&Uqzx!8v@M6>2qloBkYW{|Ra2APGLb4#ULN zAGRFY6gcIGjQ8SyQn*&7JYSK_%R-q1yErn+dZ(T=9ZtgP_uj`vm>Fil_ihN2{}2xg z=LML3a3HF&L`xNFYcdwbAjs7en{Hs?b8u;lHA#wAexhS!m#NqcX05lByfJFXq~c<( zSbLVG-TzD$f=8ztt^WCm%^}iWR>>?d1Q#GOv{Q_$cq_z(6@s`NyNCbbN%TCd$k_mP zGZXTz>vSC7soa=(*e6y+wN))C2B8fK?s1xwLXH8wpPa4&brk=HK^I+lG4>Mqf>R0O zJ5C|gz11~^ZD@nM+WVVm?U?KF=)$Cm9z)KHXy&wy9fH3bs(0{z59k8u#_a~YvF)o= z<gUGAj@F}&9y2ZsY`wWOGo{2dQ1Wzy=Q1GAs0%UcprhV(?K3iEcJ}94z8?HeX;lS> zhHcYYBAF8Q$0Y@wYk=m6QoH0WDYP}rHM+6zu}?@M6jYcW6Z$IlpM!EV6`@z3M}xLM z{U42z8=11;(7!q;*8jljzq@c<!fU`05PbfhpyB_?Q2z&w(?C%({|9!%tGbPWTklgm zgSX4>D!bL#SI6m*@L!(1k79DMMtWleeRcSDuFR)<YX+{4^)Tx`Us(Nj5?c&Dq>|Ct zl-wog<h)<wTBCxw-`wr)d-Dsh%>!1)oMQkY=Nw&^*{A0fmYb4H`&C%_?gv844|MKm z%P%8(l=RYPyoIjL1Z^s@ub#W)WcOn3Mro`r<wZT&k&RJ5^O&w$$BmLle7!bHf}T8x zLZVJz9^pej`vtyuHIi^5JeZR`-qyq#t&9fNdZTmU2Ryr`KkSHFuUf1da}@lNIDa1Y z;8j&_$!slQ+MknM@=^;dnK9BBd5Njn@wIPAX?Gjyq6{_#jvy_3|GZ32<e!)aG$#%k zCa+2IQA<y4r0mr<Rq+@~wyb;)betd#CQd9`i=NhfUlL5xykmsfXL6M1&F&v|Z>6P? zQP0}DY6S8G6p|GBx+0&8xz<z%db~!&goDx{E2XyqLLMV~83*|w9f*~dpfvaQAwYYv zkizvdNG<gF+~TP08?$}fWQG)e$$ePRiY_E@IZ{*eO{C8s9_{puagEdG@6RCm88!OE zlw6VW0XL_X9O^ka%iimlqZgewlsHfWj`2!kjkRm!@^16jkc4my!ih!p!kR$!dglrO zcNu%VcEyzb-pf_x=M-=-J5Fk);&<4n$r%``dy@ZZC8PEcysLX)Vw5i}UKYNgEGxM@ zj}BL2{6b!_V_+1LMwB1Y8ZxsfWri8&Ol)oz(*rloi<m{syl*{rkH$@4MOr@op%-=| z=o=MJ1R1B`X^C&n_ohM}a!?WYxchM)V6K`aTD~0gfqgUx!0;g1a%N#`Es$Eg=7uuo zuL_0s@gGlwxbFlUYu%R64=AT$BceA~BA#Tih~yis4n?on&<o@2#!(!qu)q;LyEo(? z&4UcAZ*&I@Bl8bIhNg<Szi85V`L3jO*lv_W$g0VgYNKP@TOvA!cGsAgiWEVH_>1u& z|1lmh#Y}%V>1`LYy5*diUMRpWfV8_Ff3XCKlxfcj3_wrufWYxrbLU94gz{$xbK&s5 ze5H*J3rZLxPog{!4Vwb{nh~!Cd)IyfiIaYOgF<-uo7>nZ3WVPgnE&VS(*xfaVo-^P zf5AWW$%XvEc(0MEZ*MrCNFse`>;UwJ9G*FmQvcZ5`O7PgAcy;V-+jCczaW+glvIGI z=xfSGqu`a{(Ly0<eU<W*0YI-L<Ken%I7V%eLBuG?cwu-dl3wwY?ftbJx04pXn;QnY z<XX;5dJLrTVO{<T;;HOUq!!3HKn6wyWBKgw7BfvLCCGnz!?#<!B3vo8JUk>n{3|We z7O-seN1=5f^N|T77F{W6cD;O(#5Pe7gdBkkdFuiHYW0szbvJ{o74gWE?t<bepHv{6 zrQ+x39{V$=O5sBk?>~r`2O`2l6HO|B+_hGI)ToUf@>czz<3NF0K83G573d9umVeb* zSa?@b|3jCB57o-Cw{eqACS95Av<S=j@%iFP)aQcn8<Cx@4wDwycgtEuS@>j#e8bIe zZS(Gz?JV_k`s2y%!=DZ1;(7(vS{Cr`!9VahMX`7c$dVsvESx(4di};!Q_R)+^*1rY zW}~vTr^V)wgu@9-Q|+rN0|x-d*cr|Syvk2@A<L))+YNB7hI>zbvMDN6Ub|c+d6|wh z7Kjd@0=sxeSgy!%;tSacJMsYQ>NG0{w#<{;6&kMx15UXIvmDbAa4FrjSev$Sgf)=% zLO#&PC^GYkRerdh)9M7c{_$AQq=pbOA)RZxrB-?#{-Iiaf5VVY_(P_iR0*<cQv~l4 z@*^)B6kw<fy-s?5<DVcU`Rw4(;faSp&z98ftK9sQ)Ingh5*z<M?zrCx-%Q|54UIT2 z+F+VgPmij;2a`zT@xSy&I?^jeRv(9Ux)BgT+4@!b7}q`M<mxW828_pmn45tC`2Zm+ zifAvg-B)r^<jR@L-ae=d$diC-uT9S4)TibG3rBr#?~JsUlT`|+Syg-P>hzBAhbTTR zVD?ZJ6oXh540k`@MiI^#MF%*2sU-r~LJGux<bz@mj(nY?vsA)Vni>cHS9x#!)>ioK z3${pcFYfN{uEniDahFmYf){HG6f5q<io0uYihFSj9vp%df-`CRopWa9+-L3|aP!*^ zFZ<ca^X{FsKDOfHN_#PS6nfXMieM>)*Hh-UmMfXnj5_@^2KHL(KNqk^b7Q&ReZ8pw zP5t!yB}i};srX5!3gle4LaegR<zH~FF#h?DkW$Q(!7-;TN?YM0pGGX+yrsLVht`>! z9>h&gCvTyM|1r;4bBb+N&v&|b!`L3G!^gzk7m8^Y^+AJV(AD^SC_<s7U_U8D8xAYm ztu%g!K&PnVH|B_md`TozHiu(h!{;z<e`aQjQo;f$D}0)_V%$5y%e*%6_hBYLq}O~y z;?RaPP*lFIvYp3dY{82y1$9<SqkK!1tls4_1b;H}HP2c^3MaP>M;2ejATbt$Pe{P} zS=pNzmCjCN{4Z~87n1!}lJ9A=ATkh8IqBhd*$Xm%IZuEdgiSI`{_R!|(+=-YmQF&P z-^(m*Z@LktN5;vGy$xw`{x0`S2rn<6pnKT{bCJy5rX@`oj#F=V8i*Seh)(PU&`Td2 z{G()L@y688@bvZ~9okBx=inGJ`KlB%>rkm4qaF65s}-9QW0ab_qM~4v<Uj&iq4-+? z-u8H`r#4Ej8LUqCkq)Z!A*9_8%K$iOcQU>SlVb_^i(=-J8PLcp5A~8ncyY1M^kwK_ ze*UsQh5Cv%Zc%O#_qLuDs@Y_diUi=~al>*?ltz9_^)VZ{Lt&EUZGamo3wmH?OOwqJ zv!*MmEDd_Lo1IWX+t`-#NC5j8DozHBG1v&6S7u;ObxtoP#RDpM7!03<zoJ`ioGb!~ zhJ%_LU@m9vo%w@)no#Lg=}4VRhor6C?NNdR7z>~Zakcyex_T;^9rgkUiUKpL!!+Nx z7kARKWlU!2yh<<7I1;Xp&Dl_dG}^PFh31>ndTSplDGSlIx+mF1XeZs*#rxR+yh(vM zMuxydm|LcTix0!qy~!bi&(fq#y!V4a<O+6!_<-;sCXjPQ>VbSuJ0~ARYu8L8;k~V$ zckY|?9s^1EKsN0oqqjs%&%@8U_Y5ypsLC1(&kJlAp;{%l_&!s-(1d|~)=`df8xdfT z4#e{)`wj5);zR~Ad!h%585XZGGMV|2L=G5}>`N$W{yaWRMkc=e{SNMjK7D8uK%;pi z0MqrHXbf?Oo$&VqPxm!F%p4S`DqtZkC%2VExBrqpgblie!skZ~T?_C8FcMhV6{C&R zSDMNyRbA_u_!VW&MisDWpy&8;(AN^dz|2ocZO-DA>JU8g3L}RRzdcJ}3Si^T$zi{L zCe{iBU=yJBPWqCMI%(`|sC-%iDh7RoZC&y&!J|V_J5)IS04x*HAT@|1UFWT@GYV^P zp{OKc0mw;-TTpP^BcE3b5m=4|4s^bC9C^%C#@?ygsG(KK=6%PDLD}3OPGVnSmpxTy zJbGz-+&(_z30RQkW3)N^3jqC%c1fCc2(I^|A#I3hRbT|GBWROcVjJ9vO(w=Y#e>+f z&wjpzf9nZ=eomc`r3O4d_w02#j=-dFm=e%2E8Y=#)}Lc}AkOHDSoV#KISC8tId)(w z7P!-0;9w0brlN`U=9l(jQrj6W6}T!K^v=UolCv3{9Rf<t0$Cl5F@e|MqeMpbiot7D zLmeqZ;jIy%s3b;lzN=J=s&X-r1+>IAlNfL(f~wf+74Xy!*1g5f=z(DcPzb10rGJ=1 z`P>6goK0<lzoHIFLU@nyn;jSh$eB&4=9E?AdQIXNv6Gf8k2`9$07L`Uo2~PCZ4<Ll z9gZl|h~~)_uSS%GAlR8OpZ|<_=9dFDkMG4CzQ%fpz|QeAoGcBU_@%$5o*YF?K(go^ zEjyn<bBDu1HBDFL#@}#)(Uk@2k9u+GuW;~GFvo)yf6p0rZ)o#jq>uFoM5|qS1Dfk$ z5B~Ua$0^1BLtmjFVA3QTd-zKf>}Tc8Dl8O4rEX!(Epb3qCB@S!55yeS*fkoWM8wxU z)SPd$+G^uGoHbV5*1y^JOQk(dbUtX~unKh5d8{@hUe^}>c!JbCX30%m6W?|Sj#;-X z;HkIQhFt#uwYeZtuz7vG!5V>~CHrG#o|ImeMRU^u*SB9A>&oqDz0ZmgLW@+aqn=v~ z-)lI~dS@Ql*p)AX-l;;UvMUL7kN|qBq=S~)W6a8}f#gE6$0^KPDN3{6#(PIcQW(r# z3ty6+WvMgcEvPeX1p+*#S>>~yl04%``I47XS|p=D{Wd=v6&efF-Dy2t2gMsdVge^& zm(;18&haU4rhVWA?|Gu^%f?0n=2971A%T%-P;&$~Pq#G0`@Cn*89tgsZ*-(X)BWnE zxQQ%SwdB3#ut4s};M69MxJ9G=kIV2Sns~oy-l{q0)r>~QLLSZxqg_}y*Hd&FOW!Ek z)b$%t^{-|DS#2hGJi(#q5%mhhyTBDY8hVmwc8QBZ%4E^`p&2F`1TJCqWqKwpbAm$^ zYFXB7$~U6Q9Qq!-JUK6fiPhMWB-0%_-$4xdC=9A$=6M;&p(`_vc?snz&uX+wWASph z{!zqLr+!1<4(aRc#3Ps?NeH>|1r!N%hy;+Va$lcb9wOh{eOi;LUXKC{s`?ht&O`&S z7W%*1l*ZGQ2<im#pws|1{S4T(>C7&(t2w1@>!|9=+R26=H+u|1c@=ZDt98Ca`Xr{- zoSF9(Ja;<7YB(<P$tdi&yL1Wf2bF8NuZY2}N5mZi+}i}DDT!Jq=uYNC@6;?==!y19 zn42@<3FdLl1&lH1-&*YomIwl%k0{a?F5x*rviLECfeJ~U+-q><*6fj~8xh6H`hzF_ zYW9^Eb-n5uO=oaDAlEcR=OYzr#M+vztWiT`JCOv@wpZcbGuqQfs%uyb8WPip?nuiX z?#Nelm@C%H({LA^ZQVpovm@SgQU*YxD(I80SM2RcRfN^4jpu=!at3wt+#8XGFuB<T zwbD!5#;j&PRG`&M6Fo>9r~s*T&)rs%)~xJ?zD-Ah#T#8djigWv19uyA?k%`v$|(c! z;f|*$T1<E7g*X#?QbWyDG*om)E1cDbLR)M~l8nqymB3Z!FWOt{{$$cnMq;df5tHs$ zMP2!vLYPT?%5B6{N^yC`PoU%&tji9|4QqGAo3D>1^p$yMqSpV6kDjr2{j^^S<`|D9 z;@lu8?m9=zU<z7BJuKgs@UGCVYG?Yyo<V2P184sU$=`kkAx$%MBb|dHYo3%pGavSq z>Oo#r2b>?VObzz??D4EoY57p1tDJR<WD~ipWYTS+>$Im<+VNziVpO^7OGs0;qoii3 zCb4yHH;+`UX(r!aA=vDQnu;BT(T6&@5C>-{s_(z2CN-w5X5aLRyezmc{2KJ>E*TwR zQaI@zVT^b%P|w%S2IiW(#^dL~<&9Vj)N3aVGlh>Wq2j&OeINAY#O+`L;68qeA3Dlx z(Ppq)(5w4#WsN7jOFl4QSjnxg(?6_wk;3?>GdbLv+m(ITPb=X5<s_yFi|1Sv`-f=j zbD8g_vGs&1kkC+77Up<Uv5%60CXUAI9(#*N<iSa7R|Fhy7;i7k_DHJoPh#LGCz5la zac_`!oyDtEa7}xOAMI3*Z|6qX8#6Tycnh{#B4xY6B!iZi=0@#GBh|{<ZTJ-P`PUqL zp|emu?IzJJlweKS>XN`$B%ptEoR^+rXv9Pth7vUBY;89X&e(d4^6;=>dq736)X6Bw zX|QN?z=CpNq;%BmVV9FL^k~KXs@N&Sr4Y+bIfj2v#UyY!MZy^z*sgpuxxi<fZEUi4 zck#w72fFzdy0!02+-O$V%=;)YG;e4I@ym)?<6IQL6y3E`Q8B>;8T)Iy-St|mmR}y) zHwNge{Qfydd$=PSMJ3s>k0gL_LZ6?~8@&GDbC^Z(iGAh}2ddd+XY&k1hBR^)#zgPb zkY`Ufhl#*wR2cK15!?5BkUfa=?D;9B>#9nEPFlAUs7ss43wpkWZ>Vo4goii#k38-m zK5dK;iZLL%66-JN7W{OX9gEfX_!GIb(500=u%H40YQh9i-uV6(7PSzDxhZV?NC~)O zASS;lKKskJ1~tLf@Ky!HRe$py-s|oP{r|GH|1TaFM%~Wnjl!IA=nv%oF8H5bQurSU z+`IQb9eMu+ef_srFQ^K1%5EUxe9M)>_uQ)~7$o_`!*#~<XC(tLNS{5wIl9#H>837s zDfXb-NFfkq8RW=Nc%Ri29p2D+d6}Idt^hCjb&=J3#p?ntF~}MZx!&Mw=k3{zABE)9 zAUosk*nQ43TR=v$w)^cl0~Qm46NFrJtypqd9zieU*W@389!v)*Zy8BuGCs&2zKYLb z5!GO#a=(pfWQ;VmVogpYZNo~Mc#(2Hbvt~n8<yx@_B^(Nv3xSXBEov(!z$jc7#rN` z$mLQUbU+G}B;ZQ#GZN2-)Gn02uYah^yuteQd5rJ$6)Tcj(Kqu9gXqQD^$56oQKr`3 zr6sI+Xm|JCF|~hlcnROJohYS)EzZ`M_RCWMwFpt_fR(XVcuKHocsHk86nM$K&sO5E zU2-nVoZP8$mjYPcVM9AMO<9=K)3nE389w`hAjdGaWnk(|YgBxB%~(&)@<-0hlY8~T ztfBNTbnlF&3&z28VxcW<fS#lj1o@@bFcEeI{J>%z53cNhxOyrL0$P{@H~zU|Q*foO zJvy0MBR<r-c~MHuQv6n0)o=#j%ppmm-IL@s-5q^{$ep5<3kNCe2x+B34@>&U_%gIa zSPo0~XSYsBrJY(x;noi+uAzS$D2%8~_dvXJ)xrobG<+UcK;4Z`Y%ca92lD0A?AAKQ zkDIy6P(0n74w*9J)#A$HF07=(8G#<|nXd3L2{a*4khloPce$?w=VE1kI+}*LE`_{~ z`r&R;b2K5;8R_}-_j5;z=#sQ!*~67$6ZF<9+1P#_%Ke<$L49f4A#p8uU&g<CVAiJ3 zPcMNXMoMHX4y_?xlEjfox@k>cpBKVs-&$|ssK7%ZSjcj}si6D46<XCt-z2;VSh$eC zXR8RTJeYg92{fj|G;}%;Wb`m>KPvB&(()#<$&$+ci?qxb-`_>a=)(yWd2i#DvMX5k zRc%G@4h=V5y*&~-5D2ohF3G|<08&m`77Ji?t?YM$pFxB%Af{RyY$ge|7KP2TvX*|? zikoL_t+MnIQT_*;9SSEIRf#gykgV7kR;a=dxu)(=R(=^w7-+LFlL^;MHSjK6)%m(s z*>nef(B-|r)5q6~>%B;RJix*CMutqOqrSk0Pg0La5oKP=S4XpPZzn38aYsb&m|p(o zQ%J`$qAObd82;waXMAh45hpIU5B9;{L0-k%=l22BhgbO1`>W;*7@$k31w7;)(hHUW zEa903Mu2dSBb=h8s`-_Xw}mE{mG8%=u$2hkAdn&Y;WcX@7aG#`d;(PmN-W35`8kdY zi)4uaPVE_l^}6s{oHo3FY_g}a@H4Z_F`Q2byE?HU?x-j5Yf5J6KFfmDX)51E<dzlb zGQ{MHh$n!eK%dZA{m_EC<kaREW(jNwVsF`E2R(Rzc-kCP-orapMH7fvhf|+3b3u(R zzKl?tQ?9083lDajdC{Q$>u?eOm@w5@0e=XTdmSTgwN9?6s7<4wgw}J}KCjkZzay;9 z!Y+1mR*bl>y_(M1XHn!aZzB27=DXB_N5Xf-+jrNo`83pn;T?8F-3eKb2bGm)K-oEH zjwFlsjw{k#*eOaFI{yIW+qh@KMHSCnNu6fb(Qa{R@EW=vAHQJPb3&lC48F+sK^x=% zRg#`BAiHB%Lyuii@4jCz08^Evx}fk>L^q=IUtww0$`E9lN-0QT_7dXi7kg9cBU?ol z5_=*>=XAU4BUo&x<f7MwJOr=JUJUsVw^lV%1g2eEpo7Mahzr{q;lW~Gr6Q~PAx60= zPQoRv6XmjuF)HD1N<dPtbm6^2l8a?B8C1lGdtzgwDSa)p_(vW$_6QVzj!>&j0UGF2 zeOooCxOLjs%QLr<0Mp-OdgHqON2&L&mWe9Ws&e$=TZ~$y=#QSWO~vkY-jZ)1%S#A2 zn|d;})?zm`^I<67_=14qO@^gSiL5;nnxbb|G$>5@L!ylc(?=z1(0QwxeFFK;nXtF5 z+t5N?e*?V$gNuPZVv1B#Ib$iTF=Wqwe{r5S+>2`oA2SrYcbEk$j6O`E0P(I;ljraf z{cP}T015_S_#*8MKe&!g#^fRT0`*_;i7<|{2<Af-a{QPs>O0Fpdjlk0=JYzuI_JTl z$q+~(iFVH+B8_+1hq25EBoesg<mu@<S#S(n&u+N29dgV-n{G}o{DLd#A|8n6_>S8X z&7hp$)9HGFwarG6;5Jibd^guQ-Nt?NAwYSb5zy3cfjJJ;Kg0kIE@M946oLA~dXuyk zCLVLSDaHRjjbTlB!+|e*mlUKj)K^(yCtH8E2B4s=?~|ee!-Ce(HNCkJaRX=6AyEwV z?&X&fMm`tJ5#ctruoh`Sl9DZ#6?%bYH-m-OC@DJhXsuYfJU8iX4zNY?WAxsNk}|Z* z4pIifZ{XI68kE83+{+Rw;ACltL7<{Q7fz!whsWedLxLazr)(8SEdksC%_NYn_9_l{ zdUizPyJnW-CL1AI6?Wp*G|Ve#Kf1!w4g)rNMSd{jT$Suhqx~xePODPRO@P(2g|D<A zpO=i<_X%u2fu^3-nbw%Vn1ds_0V5T4O+{Tpasj-LgHg;gW5>~(v+*F(XUF{t4Sz@~ zy}ow&DBsYdF;fyt=J&)F8@T2SG$7ubW$j^XoT#dN1mM)eeqKROu*lDR5XV7gKL<s^ zn}}1qv0tpuqv5oxci1`oxE@*nqJ6J2F}lO<!~Ed|^)tJUREhzR_PH_bX{$a?v?a@7 zWyr`O3)CYl)N&@GTo3-lYoj*)uigs=RL{>hBHVyVE68=b-}IN;6xdv{pmKajj`Xza zw<mV%OMQP(AxyvLK#gMh{j!N(f!y<qW}7-Dq$5HW6P(>PQY=8Qkb;~MfeK6%%k{87 zo9kiOz#}QQQI}28qL)#VX#5F|f#?yu`nfkzo_sjT<egYX+m?5I9}HIC_6tj1z)Sw@ z;P|ZMN5n_WX^NFcmUU%%u!L9UgOoe0qRO~?K``6Ns=Qla+&h|A=N<i(#M*ZQf!doD zVWX&OA7(vsc=bKdHTjq(NgghH@^>)kbjzzzHN>IK($23$A9d;b_-{4gb_V6wD!ql8 zSrhu`9UsW9K14qp{y@dIRm*<b=%a5=;fX2aT4K3Y9p2hu@W6QYZhrsw%5m9Jpg{YV z_bVVNzjVV0pEu(Jajs~+@O6WgSvNtwrey?CvTRDbB$|6YIyJ2Jq*wb{S&Il1=tP?J z^3G$wPBu+YB{%A7O7*6LbAj~X=Nysi$r920j0+Rl5}NH+aDdwyLY?z6o$|d~f1ahq zzE^`$Zav%PUu@iDUU*#?Q==X9BZ{Y@?*}9r_kCyZbxP(4_*d2~;sYR6POaR^e(4N| z4A~6P3)ilyxw6<;OyoQ6&F>;Ezntpp2#%takILDSWQt!2<30Q=KJs0w%3rSvgjC%- zH?3Gl$zbm90#vL|+}=L~eXaa>z?pnmQ1GkR^qum#7;08+dUt+3ue%9nMta1!csn|{ zUnlA1y6&aZ)%(MHhjK>q=IhHE!N@`UB>h3(Vea&OXHEGNMBZ^y6mm=s!n!z>B;m~4 zf6u6zoO?#2+b3|_(>>`aykz)WFg)iMPP|Wt|0&4+@V5W0Oq8>P*^hi&{@q;v7}viC ziJ-mzj<0~#&VSuRE;0WqBv^FaAE(j3%K1OGqyOInSbJdAI0iE-Wo-XbVEwfa{XNJ7 z2OhbvdpYQPJPchg49?EwtXrvgw#g4i4^Z%MhWdFvQCe)RJNlR0J?XWDK71-I3DB-M zu=lHAN1CzAcwdUwyxuyoL#q|2I>4z^x&ohi*wwkY8a%o<`8YbVYAy2%6$eccazc`^ z9(%xKbO4p?3YD*;E<3Ttzrf{Lx39TJqt*@54QT0Fj5A0-7J~yR=p(yeAR9$strBb5 zrWQ&@u93@dq>qWFm2a#nt*lOGJuDeLDRX%Ge29Y&FvQUeY%ZWv9o&3D)9L%XN%anm zQs<n7@F&xMgxm3HLJZu426s}BLl&*z<Ty^}NB{e$me7u|Ovi*5ON-fU6Ynf3a=LC0 zx`X7|AasC*>n<b&t<DPA+y`5K!Hh7Zp#j}}4~-DaUontX4w8Y&@NQMf>hP)GP^vjO zZxLZ*TtGw%>Rz!wTb}apind6sanpyfT)?No(U+ZA_yV<)=RW|CRHTCh5=MIizc2so z5$uTJfpFX-u*6kQ$xkHwbkKdg4koyYftar}u&1wAKlK~gRe2P3<#5u7h@+>w1NB#~ zEvI(mmbGwDv1$BhEzQn)EIvrhB4Oq{^qZVI0x+ulMObrrC&G@CW^Hn~qN<}nV(u=P zu^kpKp&CJ1fZN9lQg_9#5&lvTFHc4#%N^D*UlD%j(2k6OcR14()rqs?@Ld6NWz5K; zTgim3P)SC9%u01iqj^bS?%{&HXjD!OofXRx0y%i&pc}k@Aq~md^lC(RxJ03*O$P<5 zpvVp}FMe-lf_^9rWKV3f1n3FB8_m6TRQ_G>#yu0Jo3KOif_iBVG?FRgD13#c?eLzM z14{UEp&A~j-S~MxrvU!t%bIT*x@}VU$9Xz6JKH7Zz3^Zuq;ItF-INk<>j8ok5^zq` z&01<^uIo;~bRkru4K6>fj0kvZ4X=PSmbv6Hx6-*Z-F_x`q})8&=ppgfe&02aIjpob zFldY7RWS9G+6^f1s4{5BILhXDQQ=;GlBs`R$4powSZ18($pNZVmt#Hl#Ue{^cxw#( z+>b;Fb~aa@#{xXZ0QQg%KM#v*MHN~k7JUZf?+(A@v%+#|X7*0H11qbA#)L(piNUeX z;8!_<CwjQ{S~+laGVJ4r12*1#a&BQDM~g>@kP5EZFP&ma(~mAoIV2mzNp2|&LCyz= z@eym?r@4|%c{pt1Nkh1$;WOqYstR<vV57Jen=;hi!Un>|gJXt{TciuZHj6${os)be z4+lx}?~d(QpJx=F`zdk|lAuo-lg2XB#6+tlyJ>ME;Z3XX$w2(gX`!LLW6GxszGStj z!dwDKqj?T@zr($PL6U<=IewlK1S<g$Zj!oQBBOk)uO*c6u=tCba!<@2d-%M5(nP(e z9fGeV8Twzo*1o!vD~n2ME3&Vsw|Ck)Th?Z6`3RGb!C5+~n%2I)Q|Wa{+<)<o-*fMG zzozHNd1!@{?7*}eO;0yQA`=lta$w$k7@i%|IC$bBY3Na}boQZ>`dy<!jr|SCLck$Q z8p2?%^F*b1Dy=H*TOHb3N^hwngH<w=Y1e&VD9jni#9vj<AoyadRS6a!);7B3fdEcd zgjSfAVsU!`%pP)$XynslY?&22<ob2b->d|9<iT`i3P8e`I42lX|7K^|l3<V!#N(M$ zqr|FET<E0{{WC1ih~GYvx&aj>ymbjFC$KVNS#=|Aj|4NT^n51}K_)<gFN&#ypV?j^ zw}4E>&`KXCOFyPQF@!~k@Y|-V@sPNC>M2ILmUS%WL%srlao%m+@bC-KK?IE6bW{Xh zhHw6U!$7KITp8C!@0mEGEI3GpfZ_-<wv79%Pkb-e*%KMCQX8U2aB3_S4+j;>F5_RV zThg#@ErW*1WeXnT6Oyh138GOl8u=J>*gz*<yRd3WbY%6r;zhq#vuduJSCk0`Hn4fr zL-?%+-7kG#<$YYPTJjs1V76V95Kzn^NFQcTMUhL*HHRAg;)C&7$-KxJ`R@t8c>7Cw zTgbN3;EcXgD;ZR!Xqmn!!+LeL3gr0}6bjfYq=&hHdchL$2CwhQwZggceecH|(?Cvv znT^LItJCo15TAvrod~{K8bEBK$oS^x&(pp?vjD_Gsc0Hbi_NeQob^5`0l?trO3e>( z`_+?M1|4839v!Asl&D-#S0QNX!`yNp4p5^sjz)w1BR7%#H2X;td`{cebRh|27NHDZ z<1MxUu#FW^j8Jf?IlIMsl(*>~M7)m%6zvaY#oaCW^#coBRpV7SM+S2*PL7Y&dM{gb zxP9Tk2Dl*YOnhII!U<BjsMQ3Ge{Io|gvpMxCeb32hO8~@=lrqrM?IY+k~>)M{o>ff z-6wb<K%KMi!y;iw8>%_?pBqC#o)uwk@pw6Rn-z%F{cj*<RhXDNPoy9tc3Iie#&IfW z<3!&8`?QcEGyha|U}<4_%&0vvpG?K){2r(8bMc^+D$rx$mOXa`=*oM35JL=`2q!<V za9I)9+wp}&Pj4jP%G@{)rup_aX8!O-hpzMmiP(%M-^2DCPecPz^b2;~sf1|%^r_e1 zN)y}2EG!-sKa7YWi0(oe`tiJ{h%%7*_J^`xf4kUY@*XpBJW`uf!U7sIr~WeBQ=g;g zkzmnQFGbe$<%Fm9zOlG@!Ej()%UeBG85Zn=vOrL=^x+)f$^>;`hJrhs>Rtov3pO3? zrV6%Xyef{MF_$$Ht2$5OgVP(Ot3z2yaeK+fsk)KLl_1SM-At$imRHbA%}2wst|-6) zfx7o;5zOAxP603!1S~{<^@^#WUnX<!9TQc0GLDx*Tdv}`X<c5jd~sv*rnGW2$=(c= znb@BXh&Q<Ccz!{lN)E%f5x&2dQ8B+yxn!2`eiKb&!QA8P-s{Ja+HLdvgQ1X|U?jW# zSKWvux+Z2~+cGMBk^RH+nQ-|@MVg`?0#SBG1KDo|-F6nPp-1l)=vVtvQ!5!y8XAsa z%LuEV8DF%SW(xvvn(r;L+P2p1Y9bZ}wU(1bO$WAjeKjFEwQ)}~KC)M#*iN~3b8P^# zynOg}mfev(=d(Ko=Ker3asI}>-E%E!-NZh5WkOF(1uoMUhEWb)MOF^?caBUv^_ET} zpFxvGwt<uv*0o(xhrjDOYzr1=l2})uC~0V<Ps7=6swF?88?u`V_TbIwb~3$z1;}Yq zX`teh7i%W<7xX7c@X<&Xvig12cRfVPMt>hwRxD_jnM?x553gnUNXi2-BrHr0>M#;g z0zapiP+20&&kzF5-Q&Jv-&;cqZAQNfIbDmw^ofRtdS&AqX3+~_p4I1w3P}+BiqhS8 z)tWHLMctA@ufM->pGeYyE!3<l6Sj*5I1b<EQ@AiaSl`pu9*khE9%)<$OhoscX_(HI z3a75K?mov|p6RXhoM@hFy>fJ4dD)>^3WeiQkt}g_jp%^8R`Gj8er%`C#)&wn!&$HM z_X+*oQoo&d`f$BO5f8<T6{j{sTe!Ln6PM(a|A9%U5V!+|@UL5huJT}#B0gCwfp~ZD zqOU%$<aQ1p)?*p{gsjg2m~%4fXIE7QtKwj0Q+W7iVitjWhTlAAoSXk@R2puKOyoom z74$RZKiv9{r-zqY%n4qj`)?~}g7L>g@8j@4if5Qy@$X;$S7r5}eLAfC7X0rs{^tN@ z8M^u7wqGOtS2@};L2C&<!rVn-|4v_>bno%vk!y8pt@c#*9yX!LJ>ePX@hn{8fOpeY zAfGOoaq$%N4;Y8duo3Y)P9AeD4HAMak9CDKBZ2Jik)GCf5K=o6?t;1(>cm|wr5{a9 zOe=ofW?;n*j#q+K^Ub>VEUdcl*dA26CB7R?$C7?NBAOT#O8vZa?V}@NJS|VP8z8E= z7N%u(GCZ7GHad{N{pZ>eLDjmWOo`%19aYvtUilmOS=DAA>Qc08awtm*iwB^2MnFSU z=kyUP!?V;naVf-i>Z~PQr7C(EL?J8eVQM?Ijr)ell7Lf;6qiwju5|O85YRitt66d% z9o0&O%FO9)0T00sLyY}QIWljUka9nz5SSfkVAVU6JQ*G4Xrq!9m(H<kjU=&tsn<|t zwKL=+R`3_l?xF*lu|kJKLWCIS2Z*#F_bg^ll#UPuiKo>2gDFOJ>OPFyyHB+cSJ0G& z!Z;xkZ;n;f^XX-n?4#*!`LkP7m;d$ic~H;YY0}Z@)1{HgQ`mEzCy@{&MYa*Cz9F+s zLEOJ)_-B)V)i*+Sc_N=9a_8qPI>{(%;^o$CB?t>ZhnG(H_REX@*q6~QN?)_^a_5>G z9}Hj5@jbd!x|iv6vAQsq0rKrR@lCeD%EM&jqfXqZ{BUrOGEB|#1e-<ln$`DzOLf@X zklUE44}DWVVs8-APM*I8a;+4{KEGL=v>i$ZP??f%tT^Ue<AF2F@2^D9yPCr!CkHy7 z3#^_85TC1``%jaPT%PYU3hpG^c8It~yOb|Ap8Ho_EuP!XznkC(E<{QoZmDNR`V4Qw zo4i)MYXIZK*i`Q@X<%c%`z1NJc(e`JBLcfY!!S=vR)P$H866Fw5?vWfc-hdmJ2yW( zp83B4aQBf2`|@XkjH@(8Z=o|&IVQI$p||LN5)NU!iR(lApIZTTn+OGZ{cQoeyJOA& zn&UnPVgF@axX!RF|L-^cHk0VEu!=v%I`a+6K7DrHKd1S#LQi3Aaza`maMHU5i6Y8f zK!j-E>V??UULc5Z*E{@v0u~SjolFg0|EP3xWTd|zz`3`=&L9Ea05nKu%tNzz0&S}! zjiHHHN-%Y_`CZ-1NvEX%Lk{lS?VURn;G*+ce;LJ%(*CMQb+ffd+R1gJnJW;I5ZS1Q zVp<$faeE|Jr46(-7Ob?L+`L{H<c(DV-QM(zTRzd|wo_#nfjr|(RGu??L9JdG6HY9; zgU9~u5=5Pi?nYH+Hc-blrI3{BGErsByi<dvY_vAY^ZGY4loz|Y%_xtX=g_`*om8Q< zr|4OfHDGz>V7txv3?O38gd^2|-!aH6yrl3K=UFum9P$28!1hLkH!FRVtMEX8iba(G z`@3S<wc}M2Hj(9qAh607^-0CHbA5dER7N3U=S<*%&B~k3Vi-Tkn+9#$Dlx8hXE<8E zk(~gM;!mt5OiY~kK5Dh08FiM>cip;f`HrksBCgOs0~_4qm-`_jg?OqBEot@`E3Ske z!uAbsWo6EVt}jo@t+&G=uBDj$l<pZvk#sWbm9yft`cX3jgu|4!^+_JdKZ+RdIKdS0 zAM8|1u7CE-?spm-EN-{TaNs*yM%yYL4S+fy(?RDtg__WdFc~oEFJ`poN*ChsT}pWw zcCB%`{&{65R>9edamR*|R^_I0&-nL)MLpwj>MN{IFfm)63Vbz3;}FMTE+s8#;yhkP zp`<j)fO8)qU_mL6+VWk5OJk9bkYrPcwT=^7x?a4+Nnf){*88}}@yIOwA9PvOq+B_E z4ksT->D@TB7Mjtg+<GqkA)P}h2YgLAuTOD?ql0o|qYlEp>CV(8wk<5Dtho?2hkU1b z>JoA-bn;|`zS$P()bC_%+{hz|6Cp3^i%8u+3&az4GHh7lu@Gt?;Ca&yabr#|K1{8_ z*O^FjFbHjmRm+O=8+~y6tq~3cIt`6_;{p}{en48tT)lMgPn&7+R0Y67{Ks0NeQB%p zXdNCg`q9`0%Do#<q9NwwLVcC^InUz{a&auwIDnCnt@AiLkw$<~xB|e1`fJD@x_DOt z-;<?k8zTMX<0}<4YUlf6`&kH}<pbx{=N!bQ1kS~7Q@o6Gf$NAdGJnFUnwnFm3hTvI zF1<QC>}DgrP!mS-B+=&m%wI>Gjmp-cQjanP5;Xg?K%~0n5>+9^JTzdU+Z(eCL0q|E z+R$0H97;hzPB@6#jgC}BWksOl*B-OuH@rv_%hicIui~l|u~j{8`VuwYUvUH>GL^y0 zP%5b8M*SR5m3N6q@d$-rEQc9hC=#i0rC80y?}gOByjPsHyC!Tzu|f>Juh8!tk51$v zQ#Qu7OcuJpo~bZJkf|08eEvFaw471X?}Z_?4RCnXHT-NWkq{ogEz8PK>U$myJ;A*n zuvp5fJPb#I>~i=6VDQsi(@eehX9|7~z~D(h7rv_f=&RMKgi_knH4u|G+Vs^;@K4l~ zD&+V+r93oxab>RGA$)<}THQ=xzm|MQ+4!YG?U9$;KvhX?&F4+nurP*J65MAUZ9WJ_ z2i4n85^Ygw+gggVezQ?#O*tA%DSL@wK3=>xL2oE!32-{(GK>7aTUlO_gn-zi2-D;T zxNhxvZ&?9@SSe3&PQ$gI=A{^ps)trRQ3BErgcC#^1?Qcw<>m?`?!rwn@&O9Avn%qc z8VR{7D@KkHsnQ}zZ7YWOV}^+`rNamN)BUgb3%XLTA9uZO#dbR5MTg}x%*8+$+LRSC zx!3AHv6p$?u5_WlEY;Y#cy9_f<K7W3uKDH&4LC#ZAzn*cZtPUvkMsdG<DkL1R7RYs zmVi^xj$evg--23SAf9CvEhjwBzrWD06U<>bmJ~!7aMToWnGSMTWONzIOm+73K*E() zg?JR@Hx%G}ZgNUIo`%=UC=~|wshubT-DQ#|Q9n=QJHG%slNS&aDs&*0x;k*z6ik)& z2Mf`Sc{f^ajVplF&xHuEq#yf|0mTZf?0s0^7*aR)VmCI_1jR3Caq2ORzrQNcaJU;@ zYmphBd8ie-mky80inS3xbjiTFgf=;Br8d8}$6CBV&i>CeOMJ(b3mj{4q9rg!#{Klu zt_<K=83@hZP8-1h=D$<c#r=wQz=h+X34w*&?Rvq>ZmkfCl)LjYW}&rwU1@JX$qTW5 z+>*jhEoC3C_;M{i^r&$&wr6TQAuM-;$d_h1)WHSBOMKh^wpxw+;4?^Yin%?>=<A>r z$}!Lk6Re&uwdxl}#qFhOhMn-E1+fag%dlipPTm$j=1Z{W0xp;Q7De%<i`#0^Rd#hC zCHL+Jv?=r0T-iNTVDs`I#VobcNzcy;IB|0qEyLEBu>gWbIO|^GsBZ@;MV&$$x<IsM zTwrhTP;oerR-7eUQ8)75wgDO4YafSC^22exdBFpoLSn)D202zdB!wNw)LeoGYTtq% z^;&{oA9ARQr{`C+crbqSK?KNi&9E##Pl;%;p%u&bVMIxnBcNWguba1q+50f1Qnq@n zg0BhIUPW{90PC+5>{~?f1F5`?>!mEDl;395T05U@m<(lU^KZtDAOQqdQ-?{+zIS8> z=>d`Wn(6QiJmAv3Esb&v=PW_t*$U&Vo5O~nl@OmzX>6pRhxt@=z;pG8NgMtpMG9)N z!yqb<mBHH*MdyMcnln-GF`q>SlFcVAW5Tfj#xyclALr3RPyZGYJ0yiM5PYxB2lvB_ zC;A2MyVj_-dLacS<=>PF0EJG+Hfrds7Nd9gR_L%em0a<Mhp5r7@37K4_)0^+E51S6 z{n4MC?6}CZJVZd6lD%6AIE6U~Rfr1G+T=f$YUsb6Z}NRHnZ-04X#3VI0ZVQi4acpF z$IVp-62sa4Ixj^jwj5>75GcFSs`|UheJep6gdEB4#(RlLU0Qg)NiwdM%0GXN4L{kf z4w;Q)D_aJ*_?Ls&4{%1om~X1M4_b(2AHIQ@`}@GzxNRu0U`#ZlW1F(e7y!)gSp01< zZ);;oPXZeC3ox-F5uvO#nJa#2Kng@Uw0lUH;>&$^EkJz?|K-dEdhED;CJlkj6B18q z>tcWfrC7hBdQ1HM3gw+~U3!we=Oq(WD|e7+LK{CRF!9zruxnl&!jfG1iuW$4hGlZt zNcEjFYUbEypYPv@RRgJ@+12C7cOhl5rr}A>WLArh0&?3AnMT*Xp=ebKiKr1J_&kFA zzqMGLmf}3QdOWY(6o8CwqeLV+7t;s=)|N`jSYS-r!s3;So+CuVwu%&Q<E_S@CoWm4 zZz+@f?DF1U%d{&%bmyZ?;zc#w4o17>BN_DGqfpebX`P)t3vz-x|L(YZ(73>++E*m^ z*0&I}iuZaD>ibdDFR|dYW0>~QnK=7(<7gvbaI4<mj)Zb}wceVrus7e2sR0eRegmRr z{PlcxGPCO#=3~|T4eeKa<eYFj&@TfUP~4;oqb~33G5+kefJ>nJxji+s+sjJ@vJ!Gw zI6Dr<dH*Dv^P!!=yCYtdTp{UR4H(sFCS(@y;sr9BlAN^8aUef66uZp^i8boSkN{r$ zE}f-a$QcsA1qG0;y~D4sf6Igi4~iuN3CTc|hB_?8)xKcmTPx$vGc7F=2+I$KJiG-W z4aKh^>T?N=iO-YdmFj^x3U{pEO-C!l8#1q3tL*22HXDXvbM3~b`oN~%J5|xY#a6Od zbR}CWBU}mDz%kS@Ybbpw;ya&n`XTOS9Grxn^&MIev?>2&;*_jzM3|nl58fYgyp8@d zy-@uTFTHT>f#TME$C*mxw?O<dMoiWo+W_@x3^)cYI8KxlvehDut3i}Y#P=eA3cAKn zr`jq!Z><IA8`J>XQhk)Vqur`}cXp=D(zL~}VTvD$u55N;(>A7jy6|Mn)m;rawXSkt zPlxUJAussWnJ-r#VJ6>~#Y{NSjX|wOI7{-%T(020S~a9cW+3ah40YdzB8oQBCQV^6 zZ8cF#g=`NGoX;H#Cxp#zx?NGl3NAT0(pq*grOM2@=|&l-F^Y>@{ZLTvidp!h)bHgv zD>*D96%eNWsg@)2>^hJ_lnjFeNxY^-vN`~=&(x^_N!%XnrM=3Q!^?8GUYv<e`87x` zIMN~6SHIHp%<Q!z(ZlStk*2E}PMIXy?yJu}qg9ajlX1j^)AbrL?*1q9&*V~kLw+Ua zI)#3954~UeSGHjFc~m6&72aYQ=zxhdgf9K3j9Aawpc6Bl5l$vYyscTj7{WP%jU5g{ z_it@^+RxZ4D+n65zh0hwsW=XGaF1^U27{h;fevh$SJ<Tm#P!t*0KrmWlBn|tk|@c{ z`oQzKU|F8~ud+iXH;?K-q%hBVk6@{>P`<}1kZ-)g#QY#Q_y*g27Lm*j?JkH;?j7aN z06;OAnH7Z<;~bUGAEMI0ao;D~*?R$JR5rQK*$SAfOB*CKoiSo2UE5V#*M6_RZp;il zG{*I2^oKBCf*6VGux4$o#~#gw$k~~!`U?uXmV`T$a1YVhZF@KFmdTT09$}C74+6mQ zPi*?_y3_rsyJVUfMbm}fPY6v|p(oU@vcE)whHJ<SU@k@@g6=F3uYa%%gaLo{M}CU* zt`3C7ds?8;qJLbb^4p6Xzl#Y0&{u>+DA(IMYaTp%>gy__A|Z9e@(-I&y-}t2xBBr? z7~P^?HDMBPzp~N4A+@@KG_!k9zLW6IxA-l5#Ef{Fx{kl9RMUjUb3ebnxq97#)59}A ztYQTFTEk&<{k>SJL+I-0)YiKuYy2+yiYZp4_TXIy=sMTonCX@=8X1^`aMb8$pFvw8 z7v~&I$1VrJ-D?ZIC{zhI?N%zSv%+HBXpk7joMJYSJwe$tQSlyLxJEd}mTPiq7m6UM zPGL@{hR|3qMrw<@l>E4TNv1&<abIW~yfB`R#(c4SbVXXGKiY3lP%p#&(8^MJss(S# z(QvH@@v$XzW_U7sY<gXnDg<S`hYvgQgb@4;V(sIoi2<AT?pSl|6*AC!!r^yTzTM5s z75y=!vYhE~RRU@bBl1CQ^>PL^kP*ur@KVV@UcPVN-@OT?Os^gDpWaD6rUh;zb^4cP zTIQXTV2(IocRH2M*s9w&I4b~}AK;s_mNWcYL?m4>_-R(Qs(Y%15CDwja=~=<YG(|| zb(L*&EKnIzzYHmDMQk@YYzi<1I7O8{r?cXb!)L21Zbj6BL?s>_D>LtSnRZmpy3rhz z!f5&FD>un`IGgXGi_x(IJ4c&7`^WXCu=QUc+^J*E?ykWM#|X#UeZdvn1a|`CkL?J1 zE`s1AOxZrGPD~fGt#3ZQzn^N38Mwn7$-0c=+jjTXo8F38>krC){1~*NcbXp8g|x1~ zxIPN+vNZeAk5lh-a;@Hv+B<;l!l{=TNO=$PMtV+x52z?oNf>o1#d_eoD<7L~D0mg? z71i73_M0&FYRWlgWR>iszW4(Sm^pLJ9muHlHnlt~J!AejO1NwY;#^Byn&|T}z*K@? zcvO+RwKN^wJX#aDll;CQcb%t?8G702bET+Cxe}my%ZcZUp4uWgfx7JH2e7k|#6ez7 zz#<J3$43G@BUpSM^lZ_8>N1~MFLrwaVcdSc;g1vqO+NCsK&+ac(yINy6stBE^CtVJ zPF}ZCH|tnh-0!~WVGiuZKAQ~{>$C*9V-2ZT%30nCgI0=C<r{;jPN6syOGRLLT5=*E zjP_hWkP!&OsrEtEh=wC|{0bJYnf*-<`iD@5DN~XD!6yGJK;&<5=c^~_|61`EE&PAJ z@joz>|LwnQ*(TlpJ{}~4!813{KPQ=>zTf}keZC6BmaH`_QfQ)hj(#2p+U`1E$9h!o z`45nD<EDzm0JV)(`?K;%<6QqAzVip;`9I?2!}Nqy*hqg7iEP{d0`^jRqb^q^WB%p; E0(VTX5C8xG literal 477676 zcmcG0Wk8i{w=EXkARQ9Y(%mlUmX;Qf4(Sf1L8PRlq)R}QPLUE3kS+n~Mi7vOJK5j4 z=YHQk_wRlGY-BIidf(@nF~*qVSrKX~vRLS3=txLNSn_gG>PSdvmq<u=(ot{1Z%&$H z-H?z1k>sTwYI;s>&3Nb%%3dMu*7vs!3YFYb?!3toX>y~HmJDxen~#jItD}QNafHOj z)HI@^3%@ZUf{c$}EqCHBq1t;?xj6Tcpj)q<4bCpOdRmSegBqJ}q8wj{ii`i8{kiqe z)xU#z|K2^M8}PaRd0F)pb*cR4um1U$-@|c^|MBZ8?;nR4|Kqo1RIV4-5A+|GWGRYa z>wo;_`X4_w{y)9#;Ha;Tj*jKl(mzjFMVTS&rlhRQ<IaNQ8PLWxQPQ?!TWK=BhWW8v z`o&B(o;jWs+B=GyKctkDlwM`rMha~EtpESzZe<1BZ@!9<$&DuEdD~}En4d4^_tt!C z2`LB-8{6H<iJg_T(f=Z}a`^vVKS>wQibnrNkE2hOm2q<P%*@4IDvBDFH8t+e&InYr z+c&9V;9+?amX^#pI8=#=i5(q(9~`)vF{1pl=7HLQi0mrI-!g?f&d$yoo14)Y=|_WS z^%%1QQDa0q7i^LL+L|gXJ&%jGDJib&LwBwWb##)`)88LIh?d!$Z5BZk<>b)P(X~(L z7h<RN?TnR?BbfO3$_ff(_E=?QWd#Iuu)EU{4@XD&q@|^WgoM<KM<(RQLV|+)OiZYQ z)%5hH&Rp*Ht?uvt`D0*c=ySA_n3~F*(DN#T7Cu{&vh(j<#M*LivT3C*^Q){Zj*R}# z0hZ66B_=16i;N;wQ7Ux5Ghi>RAjY`;60W0?`|FE~1cZd)xC*MOtpQgrDid-sSXoQm zx2K-y>sRW&KlOI9w^w#@lK1y-k)q{tACj}a)hLPAL$`U+WTiE*h84uGO^6jDlUrY3 zFC;AdVX{DzCBLSoJTH%4L`0t+pH#%U%iP|6dwxE<iu1t(WhTNe>vu`+P?W&k2C^Hr z&NQCkQM0nL!sCR;@RDH#q@|@ze`)j=6BD!IB}2$@We}p@7ZjZ6?bYBiU+ot+tvnve zS4>RQ>Qdpm$0{b)K02D%XVKVD)7#(A<?ejF{%&ukbe=ss_xSzs?yZRl-J^}ssAF9t zBWy?<lGq_GxuVk2sOV^WpJ;iq=&^i7%Lu8{l|J&$Wlfg5R}Zt*qBCU5DkrxtFV5;4 z8cO`{6QU1fiZLelMrU+gStm3~j-I)jlg18`Bip}cB9m%#XTLbZ;pBV9%Dy#G`6x^L zMnr_Fy1M$S49VQej~~^=hA_}Q>o$p5Zv6PJw~{?I;YAI%XhnO9eM~_z5!Ss}-4%A& z)YOEFxcMS*V3h!)(RE$v;B0JcOubl>C@KUOA3fy9@9Bo6m6fsaah_Bq4i3k<ba;y& z4R!VP%ro=$bF(uO5jTJNnVXt&d+z?~P0l6cAe{>QyFGohGo#Nxn8BrgxquEemo zJ*~}e8JU{8p2B4YiM%J9s-&%<(QeM2s>Fa`;^8TkK0M2*sl%um(vEpwFno>`bd<*w zzq+s>YB#}&9`aH`TW9>MxjJ^(qii)2Oqscshng(+g-*n_2boz|AcBq#4mwmZ<?@GW z9p{n~i+zZ0z;jFKZT;JGyI<((>Ox{HkCy6?JyK^Pba8Rv;o%X^Fw)S_(AF;SJW<Xa zOi?N@V6P}GeT3>HNTH~RQK|c7bw465=>Z$t_dcQO>gv096S1&c?MzKgAv*KbOG``d z+<fu2BPHd7oxMFCLe%KRg0t#Cz^NZZw^6Hq^rMD`hI!36gXEza&Qv9R{pr(FZ&Tg% zh6dqIdrM9dS7AyT`Zzg46sMu5cWub}JVOc!3SbWo4-fP6^KJgLwxOmf6;xOAWvG;v zmp@j*iR%2a?Gq;_C3@S$)bypk9=x!lpB8~H^x5K5Utb?7rnkMlJ*3@+pq;SgOHGys z%*;-3IXjQ&3PLRnBtoze@sPZ7-!@<-j9f^anrRl>E8D2}TJ;eZ0gtyf*A=MC#?H)a zZS6;cL}CaDv_2d#WW`HPo_6EbslJ|`I@23=Lt)lvj}p~K&6UU>YQk7jZL<Q%cMsr6 zBO}pG4QFSKP-*H7`Yk?1V08y9EiK&(eqNe+tbMhaTtI}+jeB(V&HQ6<a7R@YZ&Rfm z|8#ph9b_zX(;$b6{Laf2c_p5EUgmLg%2F-NMvk<>DM}1fKYIg-$H_SK(%!U@BTEs< z=c{+h`$n+cjoQ4A&&+N0IB$4eFeCCT#B;=mAz}WpE|&UK+Ra1-O3r&Ea|^%rPaq(> z^W~gAya)^oOiwq+R+IDhL9_W*cq7+Fn2(R|=(hxJ)cp*RvwOjr5&?VXCocJ%4O%ym ztfZ$OX-yaCm>o%T9a<9bt@=UyzhhpTJxt5Um}&9z306DW@h2rEwdvO-M9=s5Z3I`x zIu?zlzCJlMbyjL>h=lvvubEm$<9Y-CzgzX<em9?gN2RIMr64{E?_R{B5R6@GhmG~$ z{gu5yFUi2baB+I*=Hfy}wN+A76do1D%EV;HDPK27Ow+NN%);JXW*Ll&=Vh3&wmn@N z`INUD!!b&U;q2mQPQ-QXN27-$M6;TjWbWYB_BI~k==Yqe>eU?6@YAQcc6N5S2uKdE zqn!-#(mMC;-(7zpJkZe5|Lm;?FA}1Mc<lUSW@f%mKoixuF)i?QW+p>U_1QBmQ&ZZO zFnp2;lvaeY9dTM;CigRL?2|vsy&WBl$G`U$>7KA9!7VJtBq%X_a-4ey1su;wA%6%; z3knX^!lvp4Pj*$+NM~nAkGY<1O1t7Ttf5}WmoErt@I+DTYip9}f8PId;Uc`eyc9Hw z;~byS1n1;dczS#DkC7lDnK;)Q(8duG6H5eK($dqD&_G>R_AON<AN~GaN%>aFdA7pJ zR9K${%AGqkj&qr)ba8S<Exyp6NC^qo78YLOnsTQ~<z93|%ypV_#f4T?RfXZ0g<+D~ z6>TOnEU#T(fmbaqtL3J$j*vah&L2%pa*flWT*S`ZQO-zN$-Dfjp5r8dMJ4*Rt?dTQ z!THI4p=v@n=lr~x5Ct|n+LI?w%$+4y&1$^<^!>uRWocR17KB0<Opo7lvQPZ{Dy-4R z$8<gfgSfP$1XG_73hk?~LKPMN{o_5erXOu>;=H_sG@6>4uFK!F#B>JprfMByP+}4l z@&z1cOUla`xc~m$7Kw|)qreVR$amkG*jpbiT&g9GW6DB)^=+-H<Tlce7m$W01<9vp zIl5++2@?~75UXaZq)2*Dpa{@I`o?f?{t}bQS6_E+NKH*O^)W(e@VH1yO8U0^6)HeN z&%x1A!13-=Gn!@R`uzO+Dop;SZxr%BPHx4<#%^r91>`_WAA&%`z<`Q*KZ%p%6%+%E z5CjGWhG}+c>g2Dspv&`pOmSIml2;!-Jcc)3n?s?Qw5!R_Uk=BkD>tYg`h^8sc9SNL z_qMW@RwDFl1QX|nftki5&9hHE6;TTL$jHcUTN5_|-j|jx?xF9N5#Zq9ER02jgb1m; zlB56D*Ei~N*XD0>VPRoJ1lnF)`#dH&|JKj?RzlkiWV(*^HsYk)7#RCBkB}vNNz&jB z($c~j{WH?j_uK)@;L%W0Ue$Acs;=%7+XQ@LTIsp;70-a3m>8$tKqX(@n)hu;$Q_lK zhukj)INAer^`|AT@p7PccGVkzVxLX9W`6z**LU05*+I>onwt9fkvm_cX-WSHYWBk* z<hQA*c+^g2zaTE$+-Pqjsb!x!WM$fqKok^PBN2>HmzWQIHs@~t@&($+-Q4`)bttuz zBJQ6BsCzum_-8(hb0~L=R#RT)78S`I-Z8!}(<(S>L(J=D`qq1#H~hQ)Co&HWJw39W zQ#TI}#s>fGt*z&+j(&b({$|x)uO}Iv?S{5BdQASFeb(4mTR6P_;)S2XY*VKR=jj1j zhlHw<uew(L&eW6IoT5Yv-H@8_FvUNBdiv>=SP}~gEf3ZP4Y^3<kwp>uD{ZqW7XEHj zO%kr+nmxSDBR`3?49dOv2e+GWBzrZrw6yf~ZJ$1UYGENGigp8ulTFm;@v~?7QnYOu zi4B9zo5^h^4D|GM4K=xgR+Pe?g?V{Jr1pZ$>!eu&1K+%L9zO<{^D+np5*zxjqoZSf zTD*lt0Tj>*qh@{{9&%o*dl@Q)>cvDvL_Iw{#l_Y&HT-RDZBU(h%!Nfn=7kIz-8Li1 z0f5v)EsImgH!{kkp`p=asn)45!fHWPbbZO<mdwD|>g4V&g9`huoWd!7|NioFuTJFC zDm|U<*OW`nLNPk`a8ZxXhtku3e*P@(Dm*henc8VO|I|xV^pez6n2wGhMmukSWn_zk zfB+D=Kyh&~#8X?_EfUPoh=_<7)k0zpqmq~p`nBbCej0{`*Lj?+wl+UMzd4OXGg7E3 z>F&-S)1A<}Oo-k&d6GqCd``ihHBbwiUR|9(Y>giQ<&ZQWEh}rlgmd?Pl@f!9+lH&3 zUo$)wpinj4`~Y!+-U!OViB&8pmR07wWDg`H28M@+`}(%`7CoDAaW+yiGNNUzG;@?$ zdocx&zxVZ_V6Hg=Dls)3Do%*mc;}0Rgd8+j?_zl_z*UeXZm$`QW%Ba$QKAxA1FYbg zpET`Yu58Thm*^N6E&>9z@87eLMJFXBh<Lk_AmrGHWTmAS6Zt*q#93K;e?fG%O`T?~ zdIMJ8rMBZI$C;NadjFmt*^zgrbA5BXXUXHC24g|7M|25t%zNbGIprr$enaS)SEj(a z@$-)z$2s8Oc$`mvSGr|jkRV}^rm4Y;xv;R1o=ySX10ETwR6+vXjwQe>dLFcVZ0X1P zeIL-veyIl&W^(9g0y-mnMSqJb`@yb>Bj$+$5|aJ8Z;_3icX2C63GYtB&}48o>yPUg zRn&m4qOZUC>z8D<+FSenJ4mytfT-XK2?=o(HeB@xaQl4<35dwvJ=`4k_xA^s&&0$j ze5zo^)3tZvn`5TSo@{AhvGByLuTMyU#@5#M_guie<lf$I-#&i&w6~de_wL<eTG@NJ zo?c$_h55VYDyTFI%;R}^mUXi|U%zgR^^JFRO$`pl$>bJm%XCB|<qx|!I5_zFA|xdp z(L)f0!w|w_#Ttc-s+suX5_)Bd?8$RYUKkP>G4l^{)Qh39cMpW%=@hQ7uOmN^HY+J9 z*<F*o`Qr1?&`liDrG+7t;!PbsgsLjXxvcNG**UIQ*1)QB{p;7*n8>#r<>cifnwy&; zV)OH#NlV|^5m!}F*%_~(j+XgU>+x&P(~}0lBp{#)C~4M|C2=ZO_Gop$7#5hNpTs^^ z>7F}#RHqcgoTRN};V@85U_(L_ugl6FK=^*(?9QEU_DNPwSGo%=nwcLNz!DV+NjR>v zlT&E9F%qg0gUi|v8c%P2Q{=v?s(_V%!NO>T+`$onK(q}UEpF?3-j)$GMzE5z&1b7_ zx~3~CdFwTex@`Q%hl&K-eCM*t%2=1Vj&t`+i*&a}iibO5Rl1r5%gV~`w_>~%=IV2w zR=J29y?59s&yr|iZVq6clxAsX=S8FcUgL+alEmXnF_R3VgjhiUMP*~C0AAtJj8qsK z`-;fZ#)*3F#wx|TGDS|=glbuZFjXBMVqv~PuxWZPNYP!#)~bo)E9^uhq^Y43HLbY= zS{GwYF8<NRHw_s_H>@5nIoGQ(Rek*U<xw_?h!9eh({aaBYwIUkTF*>PbEXylLO)#? zZT8$7nx38>85x<KogE(LVJw{At7c<kYie$Wnmu91AM}v1|6@r60Bo8P9MMfoL{U*u z3aT2^kl&8Qs5E5JGNR>oDJa;IuUz;$b@-t0^;r<?;f7n9X{EJR7`L)B{W>{2Yiwws z4F(#druMG5cs+qpwaQS($*EF3z+7)i-*<3fem*lP$->$?qGIyfw{N@Esh6czn0v0| zh@uZ4!Y4Qs+TPIS4O(@`IdxRvBBZ55JOc^I$!&wx{Kau%?yN2?(I+bGG3npAbLam3 z`>!Fgu(6?K3I?h%b(E#QfA5i*NrjrtZrI?uF~ZEcIn$fWv8NOI?RJi}biR6zIUa<M zi7TWP2pJ3skBc=ySrE^PaWs#T$^q18ii#x-eKRuphUuDwiwnkWq+{Y}8Q@}c;@_74 z04;#m<av;5u_TsQBeANx6vfLwvbTRQ7&tI6?m?s!WZcSoCv_{!R@gVB=&@p>;QeCh z`!f1AuitlB{ZxjyuiG4NZ(jt2R8v!PEL@e7bCX)I&;2`pF@p_>xrK$7rzdm|Ji|h= zFmDDceL}Y%n591=Pkk^nHzbadtH{uP2FhAR2~UjDt55$|ohfnjj;rS=2|q8>L()qI z{$@|@d=qIcsMC}=GrKC^XPg5;7#yq1=Kp6&{`qrG1k=5D9zm=8s;V)uvADjeG|9cv zv~dfIDhh<g?TI~?)|;&2<<eEASCdGmSNv^LQwn@vkOz)T_at&{I7u)^Bc8&ZnVC9F zO-{lNEYM{7`Zea~<uSePd}v{qn3$+=18O!XB>*J=-GJZ~j>0q7;#WGoQdFL^_v*s9 zH`HqR$NIPSN6gYiDO8;`czEPd&tBqw8yMJ}{Dgw|I-AKF7mkNOWPfOAD5xXxxR{!r zc5(9XF)|XroDV|5+1Rl0^Yz^gmIopS{ng1SMqNV#D-o@uw<U5K`??|75mxFNsHy#e z627vM^yUDwmI!Jixo?$rulCrLO1RXSY&93s=QAbtWF2koZ|2T%MWD;@iiu^ctqitC zmlWK1PomV9t-yd4`SeYw;LwY<3gfp3`)!H+CR`pGc-TLlqQPpCl7Xh^kE5FY&lV%c zO)B4f@vf){V0hb?FF(h|l027>wx?ZZ{z2and|K`I#KeNuA`^Pd0h7}c<k>&Ab8RR4 zUClSbf|*~ilErn4EZqT1!X=P!gO+=`bO6uhbJ5%A8pwL#A17+}ClAyi>+w$XtC6aN zcUw4+`joPQRI<wF0`dwikB?nfoVP)}@bhcDW}qh)OoR$1Cihx)Jx~6OMiFy>E|-y! zA^V!*p}*OPUA8V;S1u<_aJf-)fv^U`&8>Q)BHR|4C@O#IFe))A$*9@eero~;m=6;n zda`YDLPF_i1DTS$w|7HpfGT<jEbi9IO5`PJDT_vJA5H7;yC`B7pOnK#iwA6cv%@P0 zuD70MBz)4vsS$uyRe5=TM@Prh6j^OmWR&7Rd5wB9H8D}t-+Dh$fm-5qz}~{M@p407 zUtbbT<PgOAv;Y$aM{P|_|Gm`D<{!h$?xiYTSANCVgoMq71yeJ##ib=HGqWIES{WOy zJbPBfO0LhQZBOt6kw->HFAm2~kXwgZv&#!^C^fZ(j!>0M6};#)#mlAG{C<sRUkt1+ z7OT$uG{_S7i^N^ndp^LiG5M)*L3ujK%Sk~!O5s(_2*s0<ufGdG2S7nV363o-W%a+( zVoxT>6%&}|n#RPO<uu_W@jJbZOI@sK1L2k-;?YAdGo4fP2C?9{Q2z3%&LE+Jg2MCr ziwg^gY_&J)3ma3|S8c1w@pDG@y+H1{(aTtFAi3u5XO|SLOaEypqFp1u1qv2E354PC zvFEvLt;5Wl&>n8SXN$wx2J8W+2h8GhC9iqjgWkn}tNE)nRmq|_64{cMrmNv``Tz*O zAkDE97_%g@yr#>WZg`Vd*xDJ5B-<TOJ_+42ys;cwc2J!G`(B=9qx%)F2MY@e?`3St z{jWVe5xQ$zTL-^uuXt1b?C;|t02&?B3<I+YR&#QSFkrW=)IEM_z>-Krc;5PO)yCGA zfFLVf<cN5d4p3xQ*O*$WB&OGGoS&fLSQ$FIxa?AcR`3WlLMkUfnCnu){-2t<P=#G# zfFv28JynFoA9(jxk&tFj-b0o|d}5Kh!lb}CW11bg_;jwXy5k&6(8@zJtnBS)%Jc>J zX!O5!7S}YslP4Iy3EB$)xLqF|DE)QMAr}{%!Yo8A(q4f0((H58#qoK0b#*Zl69`&9 z=|`-hmdmWL{s<=xJOtKj?HO)(2{v^NK=_#kH?8v$LlNQyWQ<JxjHSQvY`|F21Nl{_ zA0@uKWQkbvd(8KCwFw8pj)@x-d(><Qdf@b`s;Zqwew7Wvc>d?Hi0rz$Izl2M=lY*i zVh!Za$%g<5-2$oR^e<M9I<vHNCofra`#e;2v=FVH9!Jdp#P^>jmX<ndy8}zKykzzh zAF}!Qs=d5`*!mW0epz;oundceigMLYj^EfIqlyVbvHeo$Ybwc-ArOYCp)s8OD6Akq z|A}sj2dL;A0IlibnjQCw#veX>fr<QxiLjxuw)WE}Sou!Vg(r(mO}-o)9Awd<K3?#q zcnA>Wph&~!*2!z?>Vme1hrmQOgL?qp4fP!4b-3L+!ZwdM%y=~DQK&Q^g&G-^>la*) zI%FOj8n&<Qg9@>?J(ZrGj!aE8UXv)ziwvuBaqheK1t7DTBRf)A=)XgH2)#XuBEQpv zr<^IE=C;pQ*{-T<YMz5i1MR9(_qz$_nrlNvg(INDkPt5i2P3oJDCC=`Ax+=DmB2fT zGCBb`Wn`2U6<|rT|7OBT_^2i}O2gjcVFE+J9op8kJauas8JT4E3`$B$EF-}l>Q8;2 zKVaQrWb9VS5T*s8L*C9VJtJcqbO0xI0LWvbr2d=XPlBNwLb2RCdB)D(f1F}}HyH8M z#-=1D1_x2(@p~4a#mR|ivF64vli%y>5xqwK{^I`kGSC0UGeew|$io&)PhIj%qyeH$ zO?{&1IZD#xSS6;3_V%q&-cD4>pxr-$T%buxxpA->z%XDELsAN;G{u^4vj%L(`|r^3 z+D)i6efan>9+6!{IxEZSINM}BUY-#Z^{Kd+xy6)5G~hC)E$dBk^5To)y&nCzV&+CO zAc-P5SJVS8=cg6eo9c&u?Hi(^FlK#y8KnpMXmZQT%ORwj=so~4uj1`<Aq1foh#Npo z?$qxsenH_Np@{PHCy`79clUM^r(z=KwzOof*@F^WSyk1M@EPix1`{EST;NK)pk-oa z=F()Cn0CQK`1+HIE}(<NI122ybAU5j2H8z&s`eu^mPE2!H(x+=YoC}#mn_XzCD$^$ zmGbUV?S4WikkPuvS^+*jpfxvcG)EvEuPglv%Y{!gdT=x?ou6RX>`0I;pGvdFP>HQP z7d)mJxt8f1|1wz%5f@JFykt;TQp_E7P*7Ih9?Iuw$u>4Nt~e0Y*r)i^*RF<jOE_b; zH6S3}OkRE<7z!=Z_kjTqC#R>MCLcb0NFU}mrU3s17zx4=w3V5&ECqQcLYP7o%}Uv% zE-VrVQec<sYqFAxX9fJ8^|P-{RyyG|(Nym4?0g2AQ^)43?WuYtAnGhEZ#{MJ11)k# zvlY|;fO{EhHm?Z%hKh}JyB+iR6)uQjUMGLFf{dXa5)obQTa+2FukLw{mtQD<$Ih3i zH=rUQ*k9@)FzveYJ})ot-Me>{S>~3j_ks-!48j@P?&J4Bmu6utC47W_`{miuZ^rv# z!(N6ZgtBsqs;WBP2IKci)n;akiq?SibEjf*Ftf9_xNke2W0%W-6bG$F-7aqT<eXf< zf$4Rex(*}DgJlBw`}_)fCAv;I##Aw~^vE>y2|XV_ek?a`eH~B~z%Vf}@e3tquGy#X zzw%q^XHz*O;&U}wrBZEe8=JSLW=JU7qLjCgMurQcODb<DsRjHC^4hx|ByMd{bdG9i zYC`#&Z(UrZCJ3MlE-AIuTn*J6IUnbkDygWrI{Uqeh8Cfq(frjMKKNrYhcTXq#eY`w zn=g=5`Gau*SE_q&)PiEP^0X-Q;qTdIC~kO&<>h5y7F`&N3sm#(_jh+cXAp$mPw3hC zSr20o8T$9{-u;@YZq@e`(ga=rz*OA#ICfx_^={z#`8li=j57XvOT&81S+L9$^VL(8 zLd*AVyb~$I)_U1hO3!^HJ!+e|FMf?L-rc@^oA<9_P~oGDN?kUnw{PFRWuT<!`TqTT zM~4(kqPC7sRHrE)&A*`33*3f)tCpcNc1+};K8s<iDgZcqL6mXEIy`pR^6<;{c|arU zyXK@J2reETGfooFSdf{?U4{F;zY0R>ha|Px8vEpsdaaHd&p9~PpC7DC%yS9Dtvrw_ zRH1|$z@#cW)lLFgr^WA#HW=CqmH4Y?oFo<&7H)2Cq4w)Hez1`2l8lu716<p)OSrIH zg`?ZKK&OJwDp58ya0{2B%`bnsGC&kBw<Asz)oJkw4*;JVZCp{CQ3H{)(-dK&<Z8!S zJCmirmx)U1U*k`6b8<$TVr+NKYOu@=_d!*CR;kO!7h0ch@|@lSr95k9X8LGrlHg)^ z+dIK?$gp;MR975}M2iRLmGU>Wu#y^Oj*H(>{Hrk4qbwr5gCgORC%DLm^p5n`qDpP? zLYku$Wt`jyrVi!k=qNoSAu|)x=Y(a~ou5xYJzyhBu%=G<*9yY8b~VBgN|qWEuZbx= zzBMpC4fC5pZEHW;$Z6ih#of4Qfu))fEz^4fuf2y$BGQ9Y<=wzHBF`U)SN}-MjEo+? z_^sUAg_~uh>~Xxbp9~)?EmV2MKjh|mfSY>02k~^#^6c62M)y;P4YL|)>;9blMCiMs z$=ao%o2!-sw^vqHfGrcEKimEF5M(^o2M<QQeE5=7Z^_*G?DO(GyM)9@Irwyr*uFB6 z2PD~=Zj)Q$wZc$j+1XXtlcy&q>l+)%MT9=bHn?xwn3}2^8)u~)cT8CSV;z8dH<2?a zH@v#M2*o7jer|$l6#wRp`Igj+qyF}=N>6Mz;S6!pj^`kQnH8cU{Xi1bguiPFd;7a= zj;JUv@1QH1gn)n`uIT=2zT2+a+S=~FXD>=hSUi`B;jOQ)DG~@FXc_p_#x1_`N+B4M zpW=GV0a*V1`}YfVS(!Z)oL3o4NP*n{_13eS*X;_%+LZ}Nm^kcb*Z28Sm#yuS{OI^N zxyS>gK$*5|bR@6pYByi;ER{l_P@rGIDy>s9A_*6jmHD0gNvzbkf%M~D+oQX0jjr$E z!%_3*KR5KwzW3|(#R*mkB(l%f@6*}Ynapm;fBg%jD$^ea;7#}u`uOI}n`CF@em(+b zjMw<<-!ERMJ2KsaZ+e#ju&Ai0bg7tO+)wURR8YVLEYm(U)zHQXp$*iUrepp&5TYI_ zeSLixiS;cz19FLOj`%FN>m-}4=6YP#Q0ouN^QzhU-#-9;epj55l0qVaR(3a9CQa<@ z(e;8{f|3D3ybXz>B0L0Y@DHfgaw^&j+uMHYLm|LSJ3D^z{$+SMhJx&i{C~Zlq=+WV zVHAhBEGjHw3>lvuU!W308o&LwH_RHih(?bqrH|Lb!1c}Bj+cY&#TDs)_*s5q0O|+f z0v|1?jgyCGn8b)3%nLma2>VlEXeb~s4pRSYqlYnbpd39JkA;$vkv~k~VK~LdxQCzb z<VP*)`N6zLXMLR%Yo$qv;Snl`A7$|@2|Y}NkwcMyp@JM)Y^&L4hHkyZ{vQ^bCXSNQ zQh-;F5HG34UoG!>(lfrh6D=<n4!T=Rcz7MyN`}@ZFV2n@p9`+`U+~$E1rR2K*qNN1 zJU%k=D^n*`scYG}?EU+2N3ac8f^KPP8HQU@T-?*w2c_t4R40fz06k@Lp(0F9O_ii# zrW_~A(X%{w0HudEE?lKhL_~xq^?Q7L{GUJ0uxX$Jz+{|}kr6p4`*<HF9^zR8=G^(} z#W3irt*!m=K`ru$pEocZ&?6`*D8jeD%(nO`77mMvioR-|n_^oF{+D^>zjw;hIJ|Qq zHr51$>DB;=N?p6Hr7CY;vWt~IeV__%&p+rG7#SN=<8i(2UTpTi&|7DOk*wYH-^Bz* zG*VJW*pc5q>nSNjC7B2p903hyi7V54NA1ZH6DPx9)nO)5UR705*>8XC@fHg8D?HTO z(fN_bqp>uPOwFkC3R-%;eLG%^A%Gz(WW*=Sfa9$v>Iw?Z-lx-IKK@Ax`H`&;SXju! zgtyv)e5|dR;S-@Pjscs2<tQ8CG40qbR3+$s^_U9fY-dKKQ03z3R>oLT+y5{c{l+_w zEF6l;loa44+wO`cU+k6*4Gql{c6&>rIr%f4fP}>JV2z7Rxt@oeoBN{<$5onuBlO_u z3EdcS;uf>+zc4g3e+DB^63l{(3`#B{fy+AAb^L&UtCW;90f!FVCr_fu?l$;eG{7JV zbZ4vr^edZ_KlvcY)%#z_z<35&{>z}C7)p`&*jPcUAD`jx0Hlif{3YSHD{AyP6LMMk zsLK|t2Gji<>8!pqfg|ulBy-4ek-Ylx<Hs$OzZ}Mwhmed#nk+pBU~TwEyR1?FQfDAi ztZ91v)c+6LSHrtOD{E^<m{QQu(!Qn=lfisPNk+z!+zXg{d1uyWow4=Y`CWPW>y&TT zA2(g=h=D;~Z8<R8H8xbLQ&G{PC(|V9d$iLm=HsrK!r4+;ZVWi{_pmDQHKC+|-et_H z%|^~|H}N%&ZlyoNSW`0?SJ>z8&jMxgTer?&rnIuUN*4^?q}9GOa$;hrz{sL8j)0=* zWU>AB`$~3qQB75hue0w4<}v1fN9DhM2xQ;YZyB$c`%qoI4l0?Eu7(DWzb{x@Xm_4! zsY7`KNc`kU&+0yqJjb~fy5!#N?d{R`_qp~W7CsMJTU-13rvm*rt-4Q7|I2?aK!Slb z*x_gRV<jzLUr_|mf3$$}UqM``+3+yLz>UG;MNABH2BUiC(Jx=V3=HTD90Xci*Q6?O zG4F#qzccsM{*361Sfb<<?ToKAm4**E<^TPje~dW5ZN$lSy{2T1lfy+AHoChxJ2yDd z$?)ZAvVaw&tfT}4m(^gjMTtw#OW0?c;5An_y2FCPLe>YxMYz9c-j06#=3RJP+0Z~n z0~DyR4tId-yZI&0sYk7YAs*ru@<Eo!5#2&oSQv`>8r7JP*gMkCfdg=Z&;-WDYC@FS zf8^i~mk><y*OcC2Ktp=RC@b6jv^})h_vFvX{wn>gR?oeK&M4w86~X_$bIE<kOOO<y z8K1Y~NPtmbcNZrZajiRQJp$-=buj$;$B#JEN_qi-!fPO{BJ~~jXUf~RWR&VKd@Qxs zBqB;e%?95=Vp4Ka5;uvG*zm2l4~N|^fS@+i)lmpOm!!w%BMOztePB=*d(0Fk$HK}A z06h84n>;;-H#b>@J$FqE4Ko(v#r;mNN65chuRys)t9(9`Cl5-u&5$qPkV@UA=ks53 za&jcD&OcQ~(`px{(AOInLA}+~d;{-v{3BRB1-P|%*44&nDd_#k!=FtnL$N8RN_9Bc zlUb8{VKff1)Xq#}7>d@oP?L6jA<1P$>*W`^CRU*9Z#kbLfRq4d9nyhjp`I>E1+~ou zi=nHxmz9kTljdM|zP(U2%ZA*`Oyu>CPnHAFd+O`z0OLb_2FCZZHGrD9rpwf%QkUBQ zm?lF-!f8PYIM~~-<ZS!Ggz?DjR(V|Ukm%56x8_<~+dlHzPw|5P2&R7EFCt^%5~h$< zcusOyIXOA0oFS~`6me=JyK2X%QS*2)tiJ2C@E<*K>3DDPT5~oA??at_t;2YQvE%z$ zD>g1vng}UcLUb2r=S)$rm(;(8gi<a;G-}O^!}L^?pOxxAE2?y`jx0(0E~LoUhD4Io z*mwqN1P+y`T)`$W%51G8wd=*pv9EPlLhpDaBw8!Yx`l;>|D2pdB@p*MkmJKl?xhs- zt^%nbti8CTWD3kS*4D*cDLn=Qf43%GzNc_OSrPL2`@Yg8CxkX3S~Bqzp;$0+>(Ps! z3>B3uT!Mn0Yd^C2`S}6DJbwI`!?=Z>K;NtyC9E9{3u}8YHw?!8G2J5Y1{<uhdeU+h z1m1tQNXf`Hwzj^n?o*3-yMnsb#ePtw{4~h+d?4V`3_hOF8H_|WH7bh=ph$#aQ*JCT z!}Ld8SJ!iM?7`@l_bpYM>HB?>%2R?A{acft$j|1p0xsoWc_{ob(J_v7wFQ^pR6JCB zWE30{Zu8x~wAxS{YJYHjfZvf&hCSJF;)6ff5(-r^F1Kq5KuNk5hurs9u*?{*s6jwR z&9)x4z}3Lpe8h}jsf+1|EKpsrak~6m5Ev<iuqzW{ZKBf5hD^&<*l)JUtEAV~#zrMm zv>tp(owsr;Kci;P`JXAT|2=wn2g4hl1n5qT#AS*u2`TAhz9KOn^VN3k+>-N2lh=NH zLIQbHuY|?-l-Xt<f>K*Hd6>6@V$HWBZq25ou08}_NWg=H#K?E<*iTjUz^H&d8RPa% z^bpf$&-mOnMh*@RDq2n<^%R-$|IAl^6YJb<X=&MC9nd))8ys|k+oO$>tKO__OV^3i zU?YMFsK!0qA_j|<@2PQdadntQ?iV(%nkp&7a7{T$^lR)$#eD@4MI|MXJ?0B6E09)E zL=SA(kXaHNp7kbyVt2XQj$?D`H~PlQ4?V(^B$`(SV51n^zvVzCs0Az`^Un1!s0x6` zhCha>b2fhNs#EaggY*rvT=im*mUjkoAv&Nsm0WxjUQHQt=6<FhvGBCK@>0lo>1(=> zixuxwe}>52WPM#-yQwO9dVES@SGlZh{0ONt@aH%$g+F|`t}W;$`1i14`3;Ny49g=v zw<zt15f;%@7ouyt7kH_Mc!a%XaelmKJN6z(!pX_WjT<-c@bKUbpdV(brzEoKfF)8q z%UD-;ZG9cuO7W#QThHbbfMZanW+x|w7#NTn{I%j*A0WLc;;1r@6yqfPYX66<6kovM zCkYi5J5iLEs1eMA3YAhn`W!hNj@Q`O#LTycRXq9B_3c~az$&1{;NV~-NZaWe`_`+= zMhCq3$zUkc1F1ZPK;}Wz8y^?o=63!PjD|tP_BqIlWsoH#y6k$-^xQ5=jG3clrXfU% z9_QjBAiKCz+34xb0cQtXo~#xqr-jRnB)iWzw|Et)rh#f_=7EHZ0B>2FVXHZ|d-NUo zFa{K)ciUd)f-NAOo*&CaNPRKqCa2g=Z8O2776;vCX?LEk1HqqWzg2ZL0Jau!adA)z zMX6L58^7B0#C>BL10$47E~yW}w4h;wzYs+~Ow()Zr=ej|2LFH`z}!M8!U6^~_nn{X zOG|IScDlYU&(IHr8%N?C_d-OssI~R#6)BJS=^7otD(F?L847@PB~F$I@=4yDF8%!Z z)BA8EF(CmQ%1clY7Wa1l+`%BiUH(2d7XZsf%x*AIZJTT=s>DEG9U<2W&j}QZh)tIh zjIe;G0`@wIBcEQseQ+!|M#93np&WqV)atgWeg5b@u-t3^bnkMb`?j#hj)9k#5F)&H z8MIWl{&b=480suuYxSp3v-{`eS2Afq)*>V%q@wcQTae~{GN{|n3T7yP^w;&#=2l#v zMGS=yHwQ-rAb<wx@~)9$jW8VQ%cY(K;0V8xIVmV85C{a!=SI(MmcJ!F3d0t2U5kCY z!j{Ud`Z3lDGdJ$7TuyFo_bXBYBBFw+Lvk`Qg?#ng++3_Qk}@lOK{P<i7{u)9V7{}= z^7}jEF$W){TzVM)Q=Pk0_2N1~pg;o$0Jb$1LBL2@fd%Ny*1-WBb^XY)t3T=tl^BM* zx(bY2{h=J503y&(S0}^>tZ6%7#u27C6CQCkXVK4-_0kx1)e=Z`Ny0`0cK5DGnr|sk z8;p!P<pxhQH4g@5sR1Pe$O7HUr|sn(9BOg;E-Dhi=fB?a*#h%u^uIWTg^i0yIzQZk z@`Q&trty0x6*henNyFHxhtS7_DRx@V`hx-mpN*!cr>C9W^{YY<+11sDnPNUf5A+TW z)-^^gFSrh?ujd15Oa?8!LjH80V8yN%bfdHaRK4;8i#t82d=3aGB&*+3_Yc;G2gJ{m zm<Wfgs=)oO3R~FqiWDSdjcBP-LjF1#mPDJUPw~jf&tT!=zWW}sg0ByJRI3A7bI=5L zR$N_NrosQ7C!YX=!pN-5aos7muO}9{;`YGT%(`AZz8EbxY^*cbfdbKECr<k~*465| zkI+X*Iq$EOp%HWi{GGG}3l$WLlBZy()@1|BwJ6m9%+Wzi)7CE6s~(!LzRGI!_#G1Z z`utBXM}bNPm~%-nL&10+Aq5(iUiJ1~SufN@Y9Z%0?ehRKKsL))Yz5<CwVx)X{~}x~ zE1`{IFz^H+<-}Kf??G6*ko#6jef<f*7IL;RtoR;taMHpB@;{6^pzLOddi|Mc^zZ@S ztLL6+{%7^#D$S4~kwvI?gy_p>zgr8{m=?RD>5`ytEHHY?jY9F^+p|i$1cU=O%dY$3 z9aM<jUu_2LI$TPyW^l>N%lrDCLkMA@qn}?~fJS&VNvgRKibcNWdRn4YicKjTEOHAM z0c!`jb-LG04UAa3!swzkqwtyMpZdbJscKue$=;*~;03&&a5s9nDJMAi_6tc|Dys6+ zQ7|il4oSAzKu1tdb_*F(5*4~z1c`422%X<kdG_}9qA$#$5CS<854dbHHIBlMf0k)Z zGe{ys#~0Vp*|~RePV*?V=yee;5fMXj@7+d!toVP@2rFbMDW2JX1IH!$Fh-7ks?nnY zD#L<)XPxXWtWv<mVY0*YeOy#-9v;<n!Aj`a!D`Q+e-OV;k}0aQhEZoSR{ig4%VqMV zI}E~>FOpvMS-1#N96r@$OX_+7ZuQqgJc*v!r?PxK9ZE1a1@%&<p9AS&Y>3QRk`>lm ziD7>=E1;|I4E8pfTmXFBV3Jrw(qwTv+!%#TqYgNCG81_E;K75tbMI*b#HNA$q7g7q z2ssD0nUIJu>QT%%U?555{IFsB`#JDlZIA7Hg;(L>vAxTiV`c4TCcq##3>!4rlLy}N zm9}~Ej!{7tM1_anlUeYC{x<o^a^2M%X8I0zHa~+MW*TUMq1FWnz;KdE!k>a>X>)Vh zM081GVuB2|3<3?j2mM!tBr@wu`A+!&nv7~4D7ij5si<JjMqYyw9|b?_asJh`gwv`X z^N$pFVdR#XnF)E--EL+5(>MA~gi^vSq}|IpuYCr@*Ripc)5B1d=Se;0s#)T|lurLn z^HEVzU0#ZL?3`P7gwID(+IJ<Uq<AjMD1m@dVGscry{R=|0FN$|L%-(W)NOmV-upth zJ}=K4rg^qwzQaJ}e*OA&b?LF%5ka6?C~`YAUvb<K&|8P8lZ6EXq6nTFwgFt#9kqz; z=Md`}g(`l3w^BF6WdBIf4nn*F^MStwhg0=53k%p^E1^?CVf+5|D+xfl#FE~mjrX9l z4TO#VDlP3mZt=e$qgh&83r{}S93OyLA`Q(v-~w%|fImw;a4-xECjtTjGha3fK7Mot z6#$54sdm{ANs4*@@cIE@>r*f>Y>ddSmxhO<QpJp$(8*uTM55p@N(kC`dLHLUNA1iu zLm~C%Yjb7YH%CWH<<u*aV@QCC4<lB94NRd<E-sr>)tkUbMw;a8V>_zQu^fsWI#mxj z$Jd~qLLpl0j)Cb=o1!>$Q=+KDxvNVZmc)&EYZ#KrJ#)S@11O2AO6)I|dhhxN;;JF; zQimUr$7g4NSsKB#1@Z;Z8vq7QP@o}BH65A%t`A#6jKK)zRZNVkoLqQhq`EI=NH`-m z_a8{-%F0UBOi>~K^SatvfeaPny65wdP-fs?SX_jDW0}uLGt&J&Sfy|vL*xiv4`~M{ zB483W1w$<`o|0kw289t?BcS6x;NlahSdzE&JRe~fjTfp?2mb)gE#f{r7u-K=XeV`0 zP!Q;J5JiUC+G8e|z!|x?xBz|K^InrDLc<RG1i=mE4}|n}0VKU?^P=gSziFaFw9P6} zkZ;#3$G>H%gq8w=Or+VpJ<le1DWE7mPi5tTziMP;xDv{?VB$0}xv+IRZ-_V5Aezh9 z<cZ`+B`kSD_u9B`CSWunxn}a^W%CkaR~)UzRJEbB%MiakkHvRL#g04`G67?=heNtP zw~(ed4We1G$I~-20aDY%$-#X|vvu4Ew_Nksp2~Q0U<ZaJNP5$&OTYg9{@$cA@Uh%~ z>@hD9zN<iuro^Dp_p1l%Qi1t?3Jgp4Bmi0crIUTFr$7DPsM!YoXfEJt2IPf36SSpa zI-)3OzWb+#o6H&v)Pf%Zx?kHv21E3zC@Ky=-8GcVBpNpXm<_6h7{cn;=NC6$m`r?l zikc1GjW+n_%nT^UpFVv8A`pZN+LrKTMCL7b9WAZSj*eI40_>ceYNdDvj}Qpxga9&d z5kTsUefOjxYN*A1C(?zYj3*yU2($XfBw4X7xP$D5C4oi@;?rEq#e5hwgb<3vW}&_3 z%!kP>$iiqcKAYp+dDw?e)%U!ikRDc5pf&>n;}aD<@1_o*PXd$O>Dk%u>Dr1m?KhW= zhkz2nbp%ML<C8}bj;P7!K=5(SGb8wr$I8AZFw>iVv8v92qXbY@fm|{trGNOqd7gNQ z=0L7ltGT*R=$c{+vq6BQ^??20FaWgsslL7kw6qKG&Ko#l@vwGbxZdZ-mB1s^{>c!n zUhBsHogx1^J;c#^J_P8Tg=GW0=D_12*NiJorD47T;3Fb7S0;L6tZW*724W5ek_wg6 zYCw>QkH<G4p7%^*dol!637+$hXA^XLC^WtRrjA#p;12-toE@wa;NvgAa0U<WVfqXt zjrnMa76F4&ctiwnAk=7?{euGvQP1Z=`{^{nfRV8&1i={#_zX?e^(9ehh`>@H893x` zzL30!%ft?i6x5h^|CmR+E6#pRy@C@3x@`F~ZOhJkRwxGS$s`r=N^!cCrXh)mqW~kG z#+P)FY}9-{lQGL4)!mA2zGIKR#4m4CA|;$rE-Vj+0V`WuB{Id;`1tK@alk$vjO)ax zSBpAo_XSEZl+rM2e@{@&UcS7^pVn;NgAe3+{>z>ClVKC|(f5zd#+`#0Im$kUs1(MK z3zWl9-fDMKZHjND39nd{9P|blY_^BtL_|4or&YAvvwq)v1Ia!`myJr?H*e?*z<-tp z^)9PB5W^8MkiEUh6(8WLu71G5(XI7krEiYl1|S#0T&+{N6tOcpK5N@u9R=n#5Rr0o zE{%V~JVM0l51{ixs2(sh+1%Jb$A}8|NcdXF$jWNFw{RbNg#mjlU}>EaR-JO0cg)s< zhazy^1O9|IxJa|afPL=cGYmvHBKzyIvncO!PXeRUc*PBn%DsQqIYG8XVnFMB(}nSX zo&9xG6rK2MY6&<G1%(KX)8ym;!X+dnEw&%8*wEtytv|YT`$u+AMMZ_=J+)yZGF~e+ zsEI)QBixa9o`40%af=bE9x4ske4wL*sucE`f2_70&lGa8fUp241b8g^4nyib*wclC zPJqFJwlrI5hT_ypf^*vy*ouUNL<XJC;?Z0HyvNnAARO?Xfimp9*oBo}coPjo|7p;5 zVDJOPVoaArEbgByYRrL3^32i_Okn_UMD_3xRwG4^@gst*I>|V>^eAP?aJE+le<f{b zpKIc{a6`vRd-I0Z`(O=<lkfRnH&}iEc?jEuhlEI5Sur8P74r4;^-++KLxY1UB>c}I z@`Z2HB`A_v`)rZtCE40>kd!o4e=i}g5{AB!1@g1HI{u|6=s$q+u9vWK(*rmkpvDgJ z6MzOHzQ@mXbyG|YM_@Hz4+!qq!T+X{c}2o&^`p*daW|tH(h`P2oSd8=6qDIIeEyo7 zGQ1+;qUGar>xsYL5&yg8th~+XCIuxW4uv2XttHNPADNciL7ED+u>E@D5E55Q|H-j5 zHG6XJ>OMq3`1N5-fW**h3e<~1DqI`P1#z(J1yHJHpp>afN#F$aZ-%1~a0mg^60ncJ z8BlI_{y=`|f6pb-jnWR_#W1bZd-4P?!v^T9@exp}%~p3f;P*IJ2E3O|z9%0e__F~( zbVlBV4;KXT4iyRoi>zbWS*J`-`VWy+5VK~h%+Es+upFiGSi&(O2z)s0l`iP?(lcIt zv8S}sZhf?rII7cTynF_z4M?2;!lO|x5L3zSK})^_gDEx48U;Vr4`7M$6%QmP_{L^o zEcp&B3PhLhnhe-En3zT+GB>U-8#Bi~AE~JFIS@LpQ{03*^}2aODo_zD!b$+v2W7`G z=V0EsVuZrg-F>#sDR&_rPT(&1i$Pj*ntX<|-V1VsL_kAB3qr<Hx3h}RZXn{Du&c?+ zqE1w(uBzICvI&&=3ELP*7=$QRZqJ_|1LMO*P+)ft4+GlC6s2;61(8BJ*Fzd4FGN48 z$FI+}_xwIHLpiYe&=W*SRf&rcU3$;knNavZ&Sp2L+bxBu259L)G}V14P<F39)6n^j z-GCLIwxLjq`k$wCFBZFBkeSzl_6?B2Z}Q_a$fC=g#@|UC#{SSO;9o3S74Git&^4ZY znlxY^9~;wF)~VJ0N{G+>^uYMBtLwp+5R5P^^3bfuhme)KyLB$Buhmt^=&y5S182J+ z*GaL5SRy)1NM7RNU>HQ`2Csdf=pxWN)7G$t6o4ra&b<d-3R|ezR5Qqu^6=X&nahds zvLw2CVoa^sw}l(X_C_F9FT`C!mx6g%{zKEmw_gXcB$9iVVa^?i0a)uUHJc|$TR@>4 ze%56l%Sgkno0z=&^oeKiP?5pn+Gq~vJV4Rqnv)H>XaQ{&KCkM-hZG)5?9BVO1GUR0 z$(#d4g)`th)+RWfk{0iK;_{G_lb?^k0fW7y2m0W6rKP2XNP0jNb#=PQ5gcp4eyv$n z=~aY;bON-4_N6(kh_t5amwjJj>qWMtLqc|?!ukGy1PIsHuk_#V1EUll&|(04WkEr= zP6Zeb;ZV|8h4FxC<;c&Gp#TD01jy8apkcm$^2wq<JpxzQ|6H)A5{+CbyNeHMbc^?) z0uy0UV&W4$J!t1%phZB|eX{8L^2oAO!mGF^$=LtoPE0xE6+r1z7;`rnOb<E4raRJ- z4R@JVGN`1dBqz&?uG+)~8JZ>B3gnkuBy>g!OnS5_?;-5IC097SmunB_Ndc!s63~!P zh_{Z7jQrD2JARWA5Q?mRX>YgYoq`y9u7OW;0H(XopFe|wetEiCv7~bW^$iMB3A=H< zbAC)r%n$;KuP8nn+;BB?iu@aTfV3?8-b(v6fe8$>6T&&BPGxjHjhJ75Ne77r`9)=N z2j8ryXj8^EKLnARjLTHY+<Xa?$%Vy5ty@-U``6IR|Kypcr(k~(JfM)EAnzDA&xpfa z)Z0KYKn2XAqoacgcm<LTAo!gGRq@B^6;rdbmwSud06Gjln)iV4ENIq+dBGuvTaQ36 zyt-ulV%Q4UzizX(axn9nGry)g409hItjk}D%Ia!Q&w~^M#o7n-0PfVS)~kyOhv~$) zxJu_`g<#we1dxEe!@~@apkUxHes%8BNyQM~hN(`)`KP<Zp_-zn*`(;tn5dS3)xM@N z`un0HHNRV*XJ=c0ae%`C%oTOfdAw7)+S*AAvIZrIR3_c3R7}dnIb0TBAg>P=V<cdJ z3)o5@>h9~97@g+x1UY&TjqLzmg0^>e-~&>XQQuhXttGIA*Bg}UJ(<7n`5ccwO*va_ z2j(xf<Lu|#P%A-cyQVkmL-}3Er8<tlIv}Dz4Stbk{Eqqm2)f+7+7Tc!qGDrH!N3!C z7&I67CV;3YML9WCbaeH7K{k0%z{x=UildV~@G>`8WPnqdW%{+)q})rORKOmA*q+5_ zs||d#<@}Fgv?B*!3L@GTsAUSjJ=tDdr)e3)H&9Mvzr)dw&w3AflCGx#J?8&9cwi4I z2NX3>{GNbov?hP%p3s~WZ^89J_;24fU^>-tAb>11k(SeQ?O$0_+AN=glA@SD1a|I! zyxd{!)<YuRo+e7?YUJ7F<vVcP3bYddDyZ4lvDA-=kdg}4_6vq|#A>k~H<{*@kO+YG z%ANWigdjNJ(AH*{kdOd6_DkH4H8ro{Y&j|_)c(k3JWnzl@J=o~ptwGra%~zmo%v!0 zSVfR@DqfBr{2dpN>SN`G<N$Z3YzFyP;m8q{s3$H3g`JrhnA(W&@Ms9p$s0v1ie@73 z5)#4&uKvh=bggp2kQ_APcY-^%Dk}YqS-vo(09%nTOaSgHCjFZ4JCrJjjYZ47iUbF? zag*mDFhqb-;#t%%>Lx^o8Qw5q#NdXYdVrMxWwgFR%dxfS_Z|@dC$NVAw~O|to#8Dj z{r!P`0NQ|(-|W7v*CefXheyuq^H=I?p@;tHW%f7yea)G7eHz~1loR0)Egaf|i78l{ zt{}Ui{=zo^fZ_cmpJ4WzQy+DDGX}8!D?$6cJU@Y6N6l}iYhkehft$xG1%9{TJr@gr zGd_QoA}U>ok#1Slgi_p7g~J&-I%#j;vOMU<saYtgXlVhk2s4fF;~Jno5bA*ZcmMt! zn^$oE8cTDH?LItx6tu5#^PR-M*lZ}GAl_>rt{8vW`6T|n;!T*sAFMwr90pY4x4+T{ zO%v)?QEG3}D?qRi90Cjsp=;K*Im#)ZOoJ^0tW<t5YYqMZ>&y)@A&{Ftn-#4_pDdzl zm`CPCY4IcY9exVJ+Qaa3-s{M<pD5><Kb$=WDfBl?x}aA=;~y`nBBx(XLrtwxPUBam z$Ip-m$ka8B4Vw9-e0^9&lG?n{9|e<S7xY(}U^s%6sL<@Rh<tjKpAXpr^JifE@(B#2 z{7&FNgXS!kZJqNNWU90@eP7?EAyqI^z=1um794@<Sn#zQ!cY{Ai4>%05ViDMe4*L} zw0P}Xn4ZABfWgS;a6|f4UCwp6LZvY!sKTmf1xw~7D3QR>j}L}b6Kiy8(_3M>{Q1Q# z5Zzs%6u{%bUAMHUd}Np^qm5fD%<}(pbabtALu(GVMh!vG>`cJ7N%+B#0pQ8swL!Yk z%*XZsm-X(_`_V?ce*JfUpPbuVPC+3uH+K<cIa)5W_adzCjyQreQ&HKTF8Wi%VWPO; zdd#M&xdf9X2Z!<%ta0QZ(i+iN(Z7f9mk;JJ%&X1;1Y?24f&>oB!ORH0Kp-ZD7&+)^ ztdSO_Y5&)+z|}e-Fc_8J@<Ppm_^r^bTz~<%6jFo~H-JIM){AR`3vx_EbTps)<&Ae0 z*NC<ZzC^^^$7k4zxASo|u%BgTFR*$e!UtAis@PIquCk}&`2{=v5jAt$BR~Jsb$I?$ zW}}x`i2&C?b8)w^*?^Jds|?n6Zo|4(d_+DblCjepaTWN~0O#TG?YTf&pSzozvWm)> z<yJ6QSODV)i;G`EFfq)|*ySjrVqlaO7YlhGFzuB>AY;QLLg9lja<s$#*ri@H?IlHz zzvn3mo$?ST**5V3C^}%b=H$c;pno!jmAJ3`LTL&dbI<|~#*G7*l`jge+8lOak_Ceb zoR5aBaM}pM;Snm#emEo~uD&I*qGkithKIfa!Ch{<DnvL<&?%>|&=OAQ%E%!1WJ$@$ z&<2B~Qg9$R3Xucj1gKV%2#10!Q7>nBC;~>6rswlF_ogP{J$2sea=|PUx~_Ef_S(t{ z5d{T+tMu5|clw?|6F`0;n=bdWuIL#VS=q-QtU~Cp;-Z2G!kDN)iiu1WpsSUzqYbC< zaKXb_VvH8@C0{W)Q_#t@JroPF+)9yS9wa_{NUcYqnDAvG2-G%v1wL1He=Mq%E;!W( zRUh-N5;c8{--T_x#RNuK&IWQBWrhm1;Byn0Q7)kFva_>yMb}qVxxz<-7A6Sk3~(Cc z?`zQwBINq>#QnTMcemf7Ku59?g0rKuK&PQB5SUqi&}D<K%YZLD^0hn%ZxBQhWJT11 z33*)-D>L)p(`XoODEQrlquMY>DkxxJWyLVMgM9jL!LY7<A52y-JB@c)<}ZQ@H0O6T zvpHS?{tXu~#&0yA&;UY%Fk!vc2=V}!d0brfksJL-^VDjUa@ClCSpl21LC>t2MC1+v zfDhNv>v`jTYo)0zPH7q{C>{d(sJdSHzim59&vO{y!ZBV^ztbuhgup(*&t4#^RqDdg z3&ryzkX5i!t}V_W9=zA9E@^0ZdtRysU;~z2QC|Krr3@WEe+}qFyu6xj$Jn{C3i&|Z zvek<rxw6%-CNX@)uYf$)R#pA1u_q5}e~js9Yuji)%`cpB39@RkCzA5?F7ji2{cFh< zD8;Cb@p{%iegwU+Fr4Z0fo1@5G8T4#&F2{#Gqc>P4)DstxeG9KL`Q!;TIovz&aVID z$^6B$&*{A7Fg69w1oKe%1|o3FNHS`e9WY-<fDH5+cyYJICs^0Al|<wCwgah^3E9x1 z<+o2csv@CixWme`5rOf$(<$XHBa&@@N+Ltsx1Juns7@?w+>C^TPjH9O)1l<@^Sf{Y zV7MjW%I&tHY1$Kv_RmSSY(9`Ez<dB)Cc**<XdAB;ZcI1b)KzwNHV}LI`mSrEPXE=> z|Dx>8!*bl${{Ji_RFb(&B_*>;8KNXbDrrJR6bU6mNE%o&loApusYIhGB{Gzu!b+M+ zQ7NQ^LL}1fb+Oid)?Rz>?{WO@f1YRA)O}y~XE@LIbPDCAk94nIuy4uB?ugp2?CRL8 z*4HW^YjA(57pd-3%zc6Nh58g{5UZ|HT0LwUBo5%`L7VvV=ihTH9;Ostdh2)5TEl{o zIx1lp-fF<ql}_D(MajtU7JSq37FN-%y$>yl=3y0{r(}1;xH9RkU*Y|^Z3ae$hUP9d zhM{V{x0Wg>Dpm)|%)OR<TtoiQs*UT{4**CpH9b^6XmDGP%_=|dpvWhV8joE#AZRaP zG8*++?5Zmt_E#80{W8k(jJ8<P6DK95SnhW2V?g_{)~SZg!L}<`)`BrAj{(#eLZO;# zmqdv_uB2s!$`j6btsgBl6n`U)YnSQ<4$<NgdPNb#dh}okUSB6D9p1g8+x6SOpO$4c zj6|>jh|e8}d-N&T|AViVUXpN;0u1L~k(s)AbdqkwaWq@<Cwew={7alOF24uErr}(6 zs`myUl@%*ic(=E0;WVbSMBkKUx1P_W)l${5d-r{mcl)xcvs1rNM7}20<HE8#uks>b zHobP%#wH<6>fEKvx0V(FnCrXz3yVsljMSdWmZxFo<Pd=37n5V<p&H>3*r_ll&+7E8 zJJ+8~nlwo&&=C`b>)W!Dq9U{Atuhq##x+TSb+$PZQ~RkM(HOqE{)pxLO*<`(6oU}X z3CJ?1`xW=*1X@CR(W|a?zjrz3`05ypHs#qz&LZkX&<-yB2_c4A3%vSp^o<!mejSId zz)!P2mN)o!5=of|*~mRG#G|o;&WP#LD{^wypiTiq@c!P^Me@Lj6J8uspcu%j+F?H6 zpZHFfCqL1Zy?OU;Ef}({*b2Hu&u@=PWjk$urIVOc+OgyBPu2HMu+Jt+gQzdQZ+$&I znB#HjEx-4lx~{%BUO)+yl?P05jmwVfFP=>a@Wg5JqD4=*QG(O6=BD@^@Tb5NJ_ssE z-iW@j@%|e(+Bj<wX{NXT*!KPAxoVmFr%a-`$HBU>R1hskG5G$y)`l0ecW7T&nKyW# z_D@oc<w2JwXcAVhhNPAY%a!cfb%4t9y(S~Rv&+_xZ>H)mFVVdh>&!bdA8Emo3<#UI zJG)Gld(Y9hY*X9j*ZCdfe6D#RhNP>Mm}qn(AV6a9#+eGzxK`L2y#Fse8;Si1%T}z| zwP&eC3g7m<d$SMD_URIBxrq}BXo+W#dH_v)KBWbf+6BjglL(p)A2}lLlW8X?2oaQ0 z_UK*TI4tP?lIw2kaSdhFejD$6M|S*6*cpN~vW7I@|BAk&xY!&eME2DwDFILa_`@K{ zT4w6HDs7%0e~lkqRa+Z-<ug^vXMR=vWoVE~Kr)LiES&+XTogMmY{Y`FCmf0hr$A^~ zF#+L6ywx^4_FB9?;H}NJZQD-HbrBThF@|;YbTcXzmSkAYpY|Xu;OyDApaqSU(!Qr) ziovoe!WCmKJsNrJ)+)`<6LuDFka*WQ;H8mo=+)DgDC{lDudE-&^QPeF(L=vIz3&Am z@~Km=IpB!<SPOip<hOSI`~nXD$|{N8PF$NrRS5VOZ!*fQqloxgNLxB5ika-oYa-BQ z<Z4tBAtcoy)#-`pqD7NY4n#%{^^uCmYkw8yvbT$+kB*#|*rEPS(jw8wA$t1S^$-`^ zVC~IL-m+zjzStZE0JBnd0?2mH%IZ;DPWvv9y|Z-u=rLn@>ST&v@>{1AVcGMLu;DpW zz0kM7zI0x42#mw&$;FKJAJ&_C-DA}O={$(gir6~?P1n^;YxwJ#r;-hn#s!Q5lr}ar z90<q`X6HLeSi(i~v{)be#o}X9WS3tH6}z7j5*mt*ldU9Rc(>gC0tQ92lcRpxhQbSr zKShQBywIe=`m&Q%w#cVQw0n`9!CA`HIw{(!uCuka_D$;7l@E>;NWVI_cE0bb5??3T z@{&_?R`<Cykmo;#f^B`84MHnRONY#3XdzHq)3N#;#$h7KHNbbTJ=C#b&Q!&qy88N& zefN=la#-{_=o&1W-<R|bj$Mm;TN(c1^v?DeHEI-aHBQT#CiC}dgxjELgpU<f$}QP( zYnVc5c{vhd*evDTd*!-o$dbVMiN25eAz@th>vbP)2X*5j#>-1KVzy$YXWravKf=x@ zeHM*;IbzhPu!(Q9THe>(_1?63^V-p;exjr6h#J^@sDoQZ?>>DdPo6w+(*01qvK!6a zL(Rb1EC&UZ?e^BXk6d4Uib&)o$3H(cL6bWx?-a^8{PgcHZFs<^ZSUD_SAFfbxbx>1 zgwGbEQ&!php@ZZ0P@R3Nei8l6QR(5zM{`(YYj2he(A3cp0_E1PPd=N3$BtK$%ce<N zSwGq8GYYmXDQm9u2)Lxd0g*5MU!q7IqxkR`Uv6&G%^SA=Rdsb?=@x0<%u?$vB97Q9 z4Cc<=_VvSxx&4E0%o-kJp>)yNX+d{GX@1&YFYWmpG=YPkHC2K>LUu3cbp<9zCn~>g z{NB+bxu<@1u`Hu{^(xf||4cV+OwV6^t`e&zX9ErinE;0dpN{#TfoyhYFI~3mmR*u7 zuGkI{e_4nA{H59*K^`5|tQ;I-w1-lpWgAP1IQM<`DfiyJ$f7#xo?5pm2_YNq@2^Pz zpF9ot<;Y+wv<&d16}BRwV!;ONTfWF_`wMSA|1s`&f>Zwel|S@pI|*l`_^oJ25y}7j ze3)^qmu;v2u&YE)XnAJq*?Lk$<VD@qGykc`ckKP?+i&?+<Vybg&;R*ft^fIZIntXW zf4PYM?H^c8d)?ak-~NRE*lyY5s@FdrlVDtpmYw>~KaG4Ty)O&UV`T6jFE`l7cHW-q zi@;0>nIxg=lW&**_&M5lK>aiAlF0emm!-1VO2jew#fGh(o}S3I%|}k0Fri@b;QozY zy+Kuk^N1Egc7lYUi3axkmRh3MRI%3W<MsyUprx1VJ8t-!yD3GF_Gffobo%)F2Z%)8 zheuNkTD5H1jviCO0~ft+Z5u+fyJk&d?V93NppVaujcx!L+b)&J5Hb4j*o0_6cnL43 zJF*oCGd|1sMRmJA<9fukV4W!R$o83gd%9<T^m;Wo-*#U@C#y;KM*a2BB9$=+s)q$g z{T_9qgX3x(Lt~F7KXE!Z`_x7Sqp4LJmoGoHZ(q)ij$LLe9?W^UzyE~Wr0?atd_=_P zkt1k6TB*qK-IiN?K?wnAP8IeA;zaz~e7LUXw|7Z+Z2}erHIu(->)jR{5plkE_Wk>- z5OA_jkvkaJqA-y2fq5&g^24kRT@0H9XT!apViY_*OmpSKfn;5AN#-n9DRF@|c387! z+o#v_2W>Xn3HFpq*U+(xBmmQILf{Ul#|O}76i_zJ_GZIWj@+$*6+L%rJRBq#u2>Ye zAL{y)0j8%zZ&TI_BKnX8&T*O1eUIM&Wg~n>!mF8<0&#kbvB>@3&bt=(Kl*S}WNMSf zyd?S`8sd2d2FL*1lWT{I<a$0@Q!@1Y_J_pi{8M#(a>o82-m2DPk3KFDL`-l&ATz7_ zh^kF&etg1a>=we!C@u#|#^M7N?yl3P17<Zxw12-_SZKQHIR#iBEl^HXHML?w!18Lf zSW_?@5=%zi$eT3K*wN7us)+y}H_ZwJOn6%Y!s8z4dPX&aw@lr9COUdpL|z89rrp`j z;*uM}t|KJeKR}gFrUCwA(Q1(Be$3D(L9N0^VdGKLHW{?4KXu`6DKybE`n1z`4yM)% z2r$AzZEjx72QN`tVjmu#p7wkExJ2h`R+h<|UVM?czw_C4S_!M}ES+G3I@e>Gy|=#t zYHON%vv;>yM<X=mU!<m|;ph4INkJkU%RXmI;|UPr4$?vG_EQTO8WvVlcIsEdS>C;l zw)7K^096a(ucT!f0cd2xG|t~T@Ad8NWnnpOr(Z&75PW+Q%b)fZtLNrzokT@Z9!Tfj z%C<B&Guw#rh)aBA`n$6eELxo|UcUT=y&woGWn~jT^*NfenAO5+JG^$+>pKMn1u%R( zMw6cPJ3*5cdVG9kv_m^m=1<+XSQKX9SMS3zl?{!J*ODnUWQdT_+i}V3)b9;IWYdGo z8efY6j63qb9kO~gKiYXvob&fFsikZ+$1y0hdGz`LGP|Tkju>&^{&EOWYPGNMKQu8u zchnwX(Es+C7N99PaQW@+G0{zB8!7u?+YwHBOwYJ*A)hzL(#Z8JrJag@-@5p^TNB!E zym=@pJUl&NHk1sHU08bSH(y=5h6j$yDEQMIa%Fgz6cc7<Fi<K$0M6y9Z9l%f&o;Jt z6Pcb5iR_gdIuWHbjQG%@L*?b|;NDn{s+$wa6_IaKY*IpPqu+xqI_+iV{AO7|&yfXg z@<X>CHLa1!MUr^!>u#y58*3%s=>nnKlVY@R^s6Q}en_~=ia+=gdkmUVT-u}Lamez} zQM1h!IhU7QY&|<H?eV>V4Wcd^MDqQr9!mv;cN3`?*Q&YX%-qN05OBhAfj|M+?UX7@ zb+%rzq=K{5SA<;*v*Eg7!ygYGC=~S}?Qe5+W>@NJ1Yk7QFHyL_#v7c*u^}m=hA7{l zd<-(yHy}4~DJCWdp!@>wsu~)Pnr&p%_9AHB;l7rXrrtR(KVZpkY;2^-IpljlFS_~N zvu_aS24A`pTs$2T{L}lTQ9pkC5RlT>(SZm&p)k%D-^)KX@|mu_e&7IA#nGb;FTK%F zQzM;HPhVelybCsvudu=~r%v@BZ#?bgt5@9aXbh|_89i`FCW|Koe<Xno_Dae3J?W$E zl1i)cCS88fFld6EPoe!p*C}lv^T?l;51z7CeN1CqL8@f2<=nCAEGVn)@#a<*7DAW8 zbAEo!iySvZ+=#Oa`KW#Ld&rl)fW7(ELEPfUpiuixVeHsPwEyw!HF+H9=N2WuqMrbW z@<vadEf#N1TRID6+m=et$4j^Ky`j3V<$=PpgqV!rVB`dd0A@s;4omOQ@ZC`vqz`Qi z?wO`b=#>UZ4w?QPpl31E|EW`%rSWU(iu+k@+x87orEi};p6H}WQKb-O&n;n{(k;SM zENe))Jn=xe)uOAe$~tk>NUPFPn=fRG1v_f?JdiOretp27YU9P}FjZrZvNo-K@<9rq z8d1`L55R69Q^b>=OnU|irvBOHV(XM3!;Q1-|5|Lxe=Rnioss_0G%sSLPzkN`9!V@j zWrkKno>Dqy6_5l~4UGt-U_@Gmh-G|zCCl2%_|dus$_WDd%6l`#AcS!OzQL!K_~8f8 zFzL8xhTq=3ktQQ5z1yel(ixz!*2Zl4aRQDlqFP?$aPxDQK@oFr%~jL^-@{U0Vm$F@ z%rwe=v-$H6hJ*-&7V8Z+*kz7qR^cOci>to-_SJm+3hucqX`z8FF@g7AZYVitOHPx_ z!meStYuEK4my8dbAi4T%&ye7HMLD?{L#2H7>`C;RXqPFbs+tVp6hFtpzO#k0hIua+ zRs<ODO$oW6W7)SaEIh+TN4DZ~<oFGQ^t0M+k)DI<dl8@{I<9$6%$_^X<MtoC{d}E_ z><zTA)moIAGRH?-=FX4yQl&3JOP$^6jduBz10L^|8Cf~uC1wTLkMq!&`EJLTBiXm_ z+a<}!?mD3zvti8zOWlBo(BMMtSG~`d4+wd%4E*6y@7QgVPF7m~rJ&8Xh1i0J?Wx15 zZ7HsoavvX$p!x(50|6wmbYq&$+1ny_3f<mP7bC@4Jb!)@0F=h&UXM5#n+Dl()^*!; z2;=d`_MROCW=d+x##iEA5!SqYm6|ti*05@4uzI1{X4s(2|HflacAYY9=+K*`bJo<U z^({kvsu(03%QbQ@3B`rwnH^;kGcRH-%XG$p@)v+fE>tgU-}zVVhMV<R(<e$gK<T#+ zTa@pgnXef1GVVf33P=&@Et-QjjFXqw8GH0R)Mtd^A2~U~T0NR05Zsy3uJr{ASFUzC z=Q#T3RhqF$;Y(<%xY}%l!Q2<>S6$mSqlO*b7l1_GhuB@dyqJ~*HX>(i4N@({Kza_} zw_q?v>4k8Hdp&6DwWB&whGFU?rObt&fOr<vD9I}Wt0ll-xq3@^XB0pL6e3(Su6g?{ z#$?f=G`1BenMI=I!LCDu%tS%xmwiC~pd(r;#KF~>zFexg7sfztBV-sTsidHwyFLvT ziqlJY8`l>+V-bR%vPo1aX}H=*K2Lh{tg^Bl_Ylw*B*!%jmw*TCSQjK1t|dM@b3;`3 zEdNk^zIZ4Cc>!AY@ZfYg^~pk4w^QI<Gv|`|BLqA{s&g|?4N#=X^@#l%MR|F7Kv<v; z-so^Ku%;gkkQI(mM1uPQ13??UgRFg;laZb2DBep(#=Wj^IK>8Q=hwAX4hrDWBl$7{ z2H+k~kVxtQ*V*%UP)s1es6uV<4akbO3Z{ZG895}sUIR%8tPO-3SiPkcS<G*-AD*{K zlLjwEnGLLIV?QG6yjyWxr6I8m2$R@)!xa^?v$6!}58(QSd$UUM^jT%aJC^^k@?&pV zAE~fhEVeHNQdHB8FyjmMcO}Ojo$Go-!<y|Akey1JTN~%xLqH4uXMPKcLCvsBrV6X~ zw`Q-Nbtu+B_g(MvGTsXpmU56=<Oy=eTbC2ZH}C1Q|2kzcKnwgEayyv$7FP7P<~Om5 z3nVVCZuGjHXOu8xQmmlg9(mTmr>n}c?I+ZhY!mI$W$KhEupw8;e!JBle-7sbl9?Hw z@@qzo&e{_eTy>EuddBEmT05Q(3?30+VzFe&ekqlPooAg7W$TpxQ<QA<>G->C6rT!z zmmVum%RiGedyVYReRGI?bAEmacM9pZ6S^+o7NOAw!SxkEOh#c#@p)y}dH4DmWsgG) za{H*Pxa7Pbr)+I_;gX_bJ6bg+vs<>mI+e8@GUxw?fH%7z(F;gYPnwK?=P^5;W*NXa z4Zid0#fyPd&*|x8WSYqz9PxR;9v`1|X;0z2h6+l>^p@&<92-DI7qA26I&dMbMgk~& ziBnu(vk6P~^yt=2TC9^oWzac1fxf=Nb%53=RHIyc#FQ!S0JA(nL6hCL`rAXl^WXQ& zOiaMO3KRPfY22ktf=~q02$4SPe$Wfzi~XO<+Tl&^8j^ZHa%G!GO%#&}*bE>EoxOX{ zo_5j%GB?1X16*^)#jAfy|N1HnaWb_Cdw8ybH1*9k-U=Q+kl{1Ln5wISGh=%I_Ypwk z*30o%LC*%LIw%Yu-uAiNg`o);?@$vWcmD=^={oo47Q^Pv5<!a;5)|~2T{&!LMfvJ6 zPv%A!2q))h)5m8PMZ3<Qp)zgmk<oP^{E!2f0NHjtuyo1*kIpE&Uy`jxQ$`JU<?2;E zUEL9uYgoI;`N<<Mq*%adC7{93KePo>J@&;7o>;H3@xKayFDzRbJIuBVF<rT4Tu6UV zHBvA@{ui+y0q3X+Ujt7Y#Kt<@o7R|KP?|abAu!r~Ivln-S@hZbrWHATee$VV_KvR) z{QFkRpkqZe9F}WYwj9(fD_XB@*{)%>DUS0w+Q$;ILhLA>s!fm6f!=G`SM55@uLR zRLsQr%Fzw7CS!f5<+<F%*pY|Wbj7yYsvmncR-7`82dr7OWnG%hcUP3lS;LmBZn%46 z%li``-WW*1B+X1rn51xY^dkA7`zZK;$Q%o3JA3N5*%(Fc&enPJ?%h}^u};73sJ;zL zNQFlRL&Db89bSuU2s_nhlqKN|x#3e6TpIak;i*djCc)WZ2bRAxU402P+}JH>K4^>; zviE=*CG<GZr(eHs-@b7c5V2Qc7C5qbQ_Sj(v-VspOHEwSY#n=*i5HP4ei2BM|3eCV z_sc*gIM|G}#gwb_n#1(Un+2m_zQm#^Z4P!FC?zE|V8B<N5PgjDrW;Z`@o_=-*<3%R z^Js_s{QcG39-kNZE$wJZ6F-e1q{AC3T2q}MRI)s4)n~{MTMLVlg-%3f06!C`Ag?v) zBem?^0NL7?FHc(}xC*@#IA>MWQpr6#_nes_hOpj1{-Bf*z6n|jYO=j&1#Ki?Ea~UH zKV|@+pbIfJFt|Mge-Xy}`_v*D>K8BTEw@ZiB7^$)@$Xz`uu~{Jc3v6gzo!ZJ*vW{9 z2)h=BH?X_1@7`ta+->o^g@o^Ibl~*XYI0w`z6c^vT}n<+IC6|2%L<>JLHEj;C&;fH z3*<d2+tEeQfg;Jx8uog1n45}kL4Q7);+Qec5Ig9Hx=0QjZ=Rict|45*<wRg$9!05N zWmSRPG;nd;Y#ZF&r~J4=Yu9s_o;Z4GR$5ERS1z&t)B5_2JL~T5ZXBi_5VsU-Nh>Un z2bCW7D+xu58V8`AzeK?E(!af%+SX;y0^N&}3K83KO`Jq~41S6p0woW;c(sQx(SeN> zT=8i2?x!8!_fc^ULq8gKVv3US@!76zht51TUo*@9L43%AC#gv-6XiE9<W$K$Hlc>% zsilVEj!x|;EAsW^;w}RVMCi``smBc`cw5nf%YeRCm|`LuBlN_NlI-<;4p0K!*tP|X zIoN<K8py|Ko~>$<jbI~`Ak6PzP|@{HTiT3~tn%!f)UV;&<^Jcrkqn;M0pmBC1vH8K z1&UwG+bchE1{;9WWQtAq3@uIoy#SeDA!+92TzkeS!Q_K@_R$}DxAB`ZvHVkpNp#;3 z=Fg2xyEw)=l_?_ZEM?C`;Z9rj(dBn{`ueD%I@nHyBQIXQ#5x7C;P+aeKE9>3`03Mu z6J6`)7cLBsk4Zb}{IfyHK5O=DP3w?`DZLrfB@$WZI6?XYQm=d{6pqE&3WvB?zCcaz zSy5%R;ZJO;M3}u(Qu)H=%lhpnjJgh?xeDxthQ09ve{Go0=XcM_OK;2{dvq#h5RTgF z+E;#le$vv?q7pL88?#R)Cx6UtpSQkH(no4=)^JtTkF<z3W4|B@Htl82>L5<OUN>WP zm35CRC9|hnwC>%%-+{O9?Ba6(-6p1CFt*+izRU-)yl&mfRFX8C{aYr;O_*@-N}9iv zdt2)!LM^A)R2^ItKf?wsT3MO9pe`O3Y|w_*9#@^A{}!YEst)2huaDY#%^#@rnQ{t{ zOfaGioXY%>w+s%N(01kH52Q$$-<F_&09n*PXArt^zk-UdTtrn&(e32Rbe*7}%sHY) zyZo@uH!x7C)w3X@<Mqlb>u0W)ZAz9gu%Ax7I-<f5*ak&T($S;+yj=ByvvUzzuG_R} zc!K4p_m1;LS?a~f4Fgh3t6KTh_PXhFP8R}LS|}$7_rwzJi5UUMrz~E)*mt<XD2)=U z`9|LjVjWagmS<N#-uqx#Gg6<Ej6z`&2$GUfSQL19ei*XfaeEso8(MRL>ne5n%qq3F zvpf9Tg(pt%Fu<PT11B{?Hcj(r8NV-!EQxE?t9BXo&ws!=Y&6Tk0tvx})LqI~7Xj;j zfB(!5C=mpjkX6u2i)cEJ=6VaR8In7Q=jD4vj>I*NYGAg{R-ji30^m1}7v4LI=b7fr z371UKlOehr-S-W0CQxjv4$Zrc7{{8$7n2)u+V=VI1pCDzo+y;5RFY8Q;zG?@qBcwB z%`)d<PCtxH$d@)cK4}6e+D)tOfuIK6TIvBThx|oM4kZPf0(LyoyL(`Ly#B$^DalE% z{8E3`Z8DdQH=Q5wV(H`5IHAokGT3+7D~Wcju+H^qSG3MT{XePa?~;v)R(QPDFJo^v zI(2JlkR3EAAhuVw#;e0i(#-Ii8%Gx)n%pjHAr?hF59-Iyux$Q(V>%YqrfUy<vX|83 zB+sW4pr~)s442p~r&Tbn!)49GOH36aMh*h88E124Jkp^aD`KXUsXDm0R7UIfAW(|5 z@8h#i?=Ug1+(!O+ezMDw8UqP=OielCGDwxZJM-~p?2Wf>Mcs-~7#lZk$#oMOa$IP9 z1UvqV7rLM33Xu**>z|QYf!r%<W}lUo+0#7yzJ%Qy7S#Vk*R@l|Ox}h<8qyd@5Y=~L zna0fN)8PF4mNh<)|Fl%uD{)D@0a92Kt5wv1bS*coUq4)}kQO4`A1D~yAiSv;!>4<q zBTKKlI;HsW4)-I|?(~(_R5)C?@fJbj2J<Jbq=nd#ohl)}zFuKbTKpqFg_^r+C!A&X z*$z|L6TI4}g@uUjWUIS7pg{fc_I0`)8&DFn$!Tz?x#`Jij6UOjiJ2rCy=PCC6DFb% za8^J&g|4C;#tzvI$;!R|0GEfV-gUHUM$f*##KWTcTk`&wkXHz4v!{Rr(jfoEkeUk! zmwvc}RZ5k6@#@vGQtPMEW2{mHu>?K#gnMr0&L>)Ru%;6PSYI-B$#1>-_V4>beE`6y znyRXGvV)QRm=QlgN%eNcxSoCcI;>c+NnqjC8>#1zNMb)wCs&7ru$LQ%z2OXm$lN>s zQ?ZHJO7%xJ1*vCJ->zO%^C<q^#GL~hrl|ewC}N^FJ$B)GIBlwY;*dag+<9JQyeRy+ z^+@nIzoyYvDPrwObhLa5sT>lGR;Yx8-j{BS^yY2ZAa1Yz0FH2Ha~uCuIo<u_Ze96B z)Gln>-77z=X<R;}ckj%aCNPbAN+NmJY!)tzvrce55Ek|gMFA&%>60gzwe#~$qD(N2 z4U*sfUuCwZS_@A|&g`2wW5a3D`IeTSIl?J+kdKf}#BYx>DXn^|3D(4vt}^|-)?fYJ zuTC@;v4>Ln@pjPya~qp8)^iUU+TBySQkU|gp$$}%zy}ZD)U3<Zbi_M1^$W4~Nzls7 zxZR^?V&Rn#1Sga)LfC>Jz?6_Z5)$&2lj|7)Mhz8(yIZH2<Xv1@YPa*wh}?J4?&~X# zr**05B2%uuH#0tH`O6rqQHT5^Ui?)M#1GDZL==<DTJ<o@v82kgk!;lOcTuIGy1c>N zOmxZ^+w|jN2O=Uekc9x2!LS7fpPr&H^#1tB5R&w;d~y2soD2T#^6cuwWw$$FyHi<k z5!^zs?z4E1X`OiM_~^_cmfI7m4vK)DIuRZp?o)cA=gkoq2(a($it4^A*;JGR0lvO+ zYj<@-v{i<=rzBCtL)~Xj4{_#T%v_tOvHacvE?1IpX5@CfW>s=$xx8=~+LxuQLKw?J z_Ur!tRvXVAY-am&$t4I&F66<VOYT<_E7DQEyji%dabQWxWjZ7iK8!;_N=KN(mVyul zz<1%oNvjGK2AMXpOxD+AH@~lJM=T=K5#J4@B~7zk%<x&Xbb!HtmAdv~-6bWNrpPpx zh{A76a$oUyh5A&87is%srr9+~p3@p*sq&@XB`6Kuwws+E<Gh+Wl#-ffhRA5Wt1B$S z$!gD1c9HmCP1=MzTxNH328ipK#a;+m;7*f6t06E;fKEudrg;DG*jcj?8w+nKD`fF_ z`lMo$d57dZzG%tI-!^e^3Yz0Tz3bYKPu{$J+Xi^YP>1hdGTKWf?`bB}>|{!(Je|i2 zZF`2~at8h{QEzLkWpL;ellG^oOOxUg6G_S86!UvSGHQ12wES1`F69RTI}P~sG%EAL zO6zXBZrddt?z>v^jJdwmorzJFfrsl-S2w29%Mq#LW<FT3|EyMBf}=b#gndVi4`Zi1 zHZ!2ZhaUT(M+XPiK7W2|xymg0`3n~=G&0I%75Iu!j19s7L9sw(e6G0AEpONE-2!&X zqo;DXwDyk9^*t=4r%!EIm@)w|la5_Sx?wXG1WRM{hjN*F&donPJgq3NIor*ychZvS zFD<=+ewEZNI$cML9znhrzG_4zRf=}%ggL&B6}$SvfOd)vJ0~smu(!;=VvObw{1Wws zr(bou|Fb_+v3^{-q^NzV#xE>!eD8}J+c*?~h}c`6R8rhpH@&&*js^#}VL%f4V@wII zb7wH2bhbh(1zPXeGiE{JpWf&1O=$eom8QS^OZ(er*N(P4T8J_}x28!@^u|4$-LHRt z(9x98*INJyi8$bqChQ!d9#5}L{Y2UXOQyfvDL0pW#<BPb1!y#*y=`2<dm8@2Q+2C; z1XH&$@(46?Ep#YjVgfzSb_<j$r_j&ZMK;TwJEWTT?cF<WQRl&%1T=fMfoe$Rfv!d3 z(PJ*%Y=EohUqVfwN?qk7W9(Tt^HBZqbT`Lp;IF#05I9x3y6_41yKTlIUcUHaj<cct zrpO;@D{tBbg@+rx7&9Z+@I~&CZIRAqm8o*~t7;`@wH|kFntIn@UjDVTwC8m<E#fDi z0bV`)+m`y`uJQh-D|;u3zL!Ow0e-C;eQ&!1edees;rsQol&WM5*K4~p1B36}In%<T z&$*5W-{{8+wG|<`aZPO%%~>^ui}wqHf2^^sU~&t>wR@^zD)#*GeKN_mPt#PJ#_Y@b z(9}d=q)Wr^onMP@u)dK(ICo~|=+17L`ye41i1dB%S<B|}A!1?Py<}89TU~wfxj@y< z4TpTXzdRwL&yw;fX7On{F+b0l7mp^UK1Qx2QTT$IOGJE^(_<Hmt*{N$gU)N$dQn01 z|Dz8!9o;v><EwN#DXuG?nKFrr%o6tGMR1yuFn5E-@h9jr4%Xl3k3xCbo!vMx<Mu}p zAVcg_e;Jvw(yF-JNan^;T9SAw^b)NjF~^TRs-Z4%LHh4nV|RXK?)5(K;b7FTYE%*9 zl$Gbqo;@_3uojdMOfh&TleOq#sLsdp=JE%r*Fa-Y)o4wd)&^88AxhH@_u0FbI_Exz z7%L;*`=a!gxN%k~v+FLM%3f=+Mptpd^4nGGCx)f0ywTa=J%1g$j5}?;=pOe+TGJFd zcj`1^`oNl(FH1nL35-VG`Apqxm1Gz}_DKt$p89e{HnC%K-n5Q=!&pRe!Bdul`%_wZ zzuS>&WK_Oeb7#cV-gO&OvsBGKH9Rp}AGP}K$dEe;tUNyn{KXm6PjFr8pZg#0ut1`0 zJW;(R-F*aUXMcaBkM^;W{k2K#117n$PHz4XW(eT5K<IC$`wp7`>RD;6`Qdfk$G+6n znI?@WsQ`1`ehl)z^PEfy(*D%S#ZHfj_`7cSw>uA8ie9Z6o#JNW$BK~F3K_rbcVFK* zZ0w|>3eg#B6TdK!G4E@;U_%pf>8p7v9AevN_g?jXT4aBd2_7Gvbat+B{g-4odxr<v zshG8LXd^)>dUg*so>u?HP$jodz|YEF;j(eAaOfx%{aj?B0h>3r2@?;q>~3uRDC+&G zsfkj_|A+4+N--)SxH|!`1r}#0?hb8mExZ>^<)?jsa7fsU;-nG)!p(0(b>)Rr{D_E3 zl#3j>|6ORjdg8f@GE`=imS$F9pIQm4mXUY^{kaN>fk95kjvXP-*Jp%|BnA@TVJL2! z)Sw_Ua7ZH~BQDOPW2|G`&ztQrUp0!<SZ3?OG0>6v-B5w_;J8O&@)X%HOAo&RcIpDk z`{@xbaTbXxe;9C{PGS?TS@Q-MSflSNIMbB?qLbEFgA{`b+AwlcN^1OyKMsR&;Y>*k z)KXXf41b7z_ZD~-VBXD|reCv|I{x+>K2n))!E|!;2#5Q=D@}?%bH<-K%_kl^%A7fP z2?ge#9Sh1=taY(W^x|VOJbS#u18tFf`P8XSJvyA7=RSMn*s(wOvPtiG%!$GFc{(cv zEI4~f)}t#S-0@HpTYt8WNdW=57@?0DI+z8nEn7Os@xW76^CVwCzt9QxdXA29hKl=q zeV?zJ1g*oHUyz^^aA;ekgjrFl+z{WjwUUQEO)gg)KAh%#myeHA>4oQ%Ssaf1Z5R(z znPZ_3mO&B-h8MvE3X}yAFPu0zFKKHX&nT)@CCre0_3oWum!YpY9TS7f{MUF#E)cO@ zw<ElNJSmOuDEhx;&6%@;fW+vH_DZ1($Q(9;x3MGFK}k^&_>u}36rBA;us$74RRlUu zA&P+l@hdBZz8QF#<Iid3N?~)1+AsZeI$7;(c|6V3s8sakt(Kd*nw(0?=W`PJ!MD~$ zEQ%p5aKn6kP}@QslWn|Bwo}?!t$<nXe-}%S2obx4(Mt3&wq0|^nw5^q0NW;(%r5x} zk2BEUpX*BytWG$8pfFzFK70<aQ2Nh<`}?E#Cju-avyVvl5w|ZZqVuyKH_AXkTJti1 z8KXn9jmJ59ro3rIJKs@9?B}?oa#HA*hq{LtraI(?@*&!4wc42go}FB32Z2m?BDebk zGl(GdpJ0qbmh+hOdBLrG_x-9_dU}4kCxy=HiXZA*;k;E*DKuG}K{b~!Y_@<wdn&QV ztSJElV~=DW4-Xemh2xV7O6Li9g`>jH>}~l86Pl0@0Ew?&cfIE`)6>C}9%TCwm5MN8 zl;@@OHG1k{gFu7_58nU7Q*Q&j1zqQEt7{3bY=x#5KLZqQtHv{=F=RJsaJzF`%K4l! zt>e%TtoHZ}0}>a~{E>4*IZNy5f0U)d>5=%=7u>kstTTw|&A{FV=7@)k=XM~_VU(A& zI>)l|RWEDv&j{T-90Z|7{bg)H!yMX6l%_4GHBcgthL3(X=m$z)^2rR^?!?w>eEd`S zyrhidp%wMaeR1>CN+nbBho-HJvx5U6U+)4y2?sX{CZBwi639aYSNF(l`!i2FItPcQ z23WdI+HxTF;}gr#eE}aD!(7s#h6FZON{1XK@(f!j#xOPbE?q8}$oA%{e;A_LWnQbb zsp&<$#NQvfnw^(PSq30Zoh2|%)7;gT$oJj%r(SuYdg5=6oBq4VT1it7S)aIc^=e8~ z<{&6DkvY0E%w@(22oar&?~`6xc1^&i9NET(&08o5|GSjBytKT`lu=-F=g##xP<Z^w z!Zq*h9YyQAkI`}bKh^h*-mDw}@8T%+4{uEEikQ28pIZ8tXH~9g5{2s5f0#eUvm!HK z0E7&Q8v&x;Ds&Bqy?qYo%45%ac4^H51Q<<ce{G11X(#`xWL7=>xgplLh=|-|HdXp$ zWvRmuE^3pO%7*1;-#NzgpWxsDuOwC7&YS#<kvCqoy7d*4T~<?rlb9^+3%eLx@n9&9 zWWFyLW^~%sX_Kc>3<&1}0ePI}j;U`0{QYfU6$Jd_j#0&tv=X)e(#X78jn9KOn&mG$ zotu0O#SAWBu2;tIqz-Ci780X`8TwFM{Gzt@O}k`=5IAV2f*(JAeBo$IQuRZhm{r_q zC{dlZ9PtIe-Z!iI`gP4iHM0|+7^3c6x$^Gwb@zr$GP-IVHswo-)j<~WjT@e5X6(&A zV6^J!ymLmGy3zc!o}VUXkw3y+hUIgRWFpcfE+`>C4{uvRlw$G9lB#JlVvC%eoZxYF z<>v$Fl!vuR4rO9>Ok(1iotO6TBD=1>f%%O8(t8IOeOSq3a&}&9VbQrpb7xFsOuk)9 zCnYH{9$G+nX=)F?$bdep7ywpVdo(<JjFi~D%xGt~wz>;?2rs()sWO+jo>o>BuRrZj zZl4i}?uA+%g#e9|fgGjD4sBi9J-@e{_v<ld6mnATjFt)ABei4#QXLCc3c0-(*F0W} z!Ug&JQf=?28@If9<b365OU3QG;cJr*t@`rFMKvxyUasg9=B>=cn`f<1beWIz6wJfD z?8al*c~VxHy;ymGN{GLkmbNv67=$CbSM&sbo3SpFzoc53f36Q1tiltqH?yk05Mq~f zg=bf1ns_$m;k2`sr;-d-txD@sCb~1lIrQX)VXrr)_UX1Oz-XSaQ+n&2ZnoX)OnTL4 ztj>Rhq?`_hrDLzuNiC|i6^<}a^i2h_)$9}f<g}AI7#SEvWvQL0+TLNt+BfHu<j4FJ zsT)rp?0o0Vygd_FJE_0PZ%}$-v*TidQk$xY{adD~x>Y9-i~@c`N6yeZo42zSq_wmv zIqJ}Z`@9IqicHs+((){<8kO~;hKSaB`=J?Q^B-8*Jbu58tVk%%S{nS!MmwR(|J%#R zK$xp8ZXa7c4c2!mVp?El2GPzh>yDgm^pX2Tv2!R4ENsR~`?67(=(Aoa(NGZ~l#)Yt zCc@l(cAtDixa^<OXtMDg9I{!bcXvu1%6Z8WC8cq6-$az|!W8X=4D3WpjkG)~4rB&< zaJcc&`^%|rAwKd7JNrvs^=emARTbD<D%#vsJ;k6jY=bq%3Xi^9KhwE>S++uR=(ci& z(zC7Gp9&!HpRX~UcHSbvbeW0CQYWW@t|A&*BZET^9jbo+-euXcCDz|Eo^(Jyj7gt{ zt3E#r?-7^%r^ZI6B>-*UR^-|mFdzg@O-v5a%&zWQ-2OqYUL6O^Vo-;i4~G?6BLTh7 zI<dI9X{Zljgc#eOay_btjroP~4)R<<EUaSC*0*Jqx|)1;!kBwVO0t9W#Gp*u+P(zP zJWz4i*N)Xz<JV-Tlf{s2yd*i{>{+9^bJsi^u%C&}R#u_w^}DY5adxd-MY)8_-~%_D zr5h|gwcmA!RAp=kL^tgoT<HKNZv6Suw!XP^JOWjMjxEg0?mS;t{N;zAuKY<`sn@<b zQ6S*Nwks)RP#m63Ow7rv?HN5*HN>B)2RJb$CMI>`$_S2vlPA4f18G2OnT^Qn`1cqv z?vhK3!PzfftSEW(NZyAs6mcUb2Y-z{9v&KMWok<Fw2&yoipQNG-=V$+&}HA=y_o41 zV1Gp+Ne%<&3O6bF5(`IDrQSMN{P-~^LSX+1*C{`_;Kq&1D=1JVcj(k9-Jw#i)u)Xy z`91KOx{5H&T6p>3*Py8!FtyLG|HdC*KI610;A%j)-<N*7bh3i3K!T~NtM4ah`6aw3 zDYY&YrvOVww!Nsh@y#yjSj(}9Jj~3$pLe;8OjNo%b%*z>2T!ooexCr9T9y(|vzeB* zRiS46rcJ1%7=QcD);s)ePzQ1zwcK5g#l|W{*cyEQBRgAhlAAUQ{bf$Uq*C&<D5eJV zRbNdkK=#AM+m}|a`0Gvn^?yS<dIhOY{wlG@{uQJC#+^BT{>zsyc@G~V0x@m#B?;5u zG#iD<mh5qoNavkT?5{X=YS`;9vxJq?eOHM=uTKeqv2%|;6pLbh{gs*h<d|th(-<sW zQ(L=F5ZErk;KwP-YtEeeyeI5;gdgr#6AzWR{!crJi1x=hjI5O$oDc8`b5!7{2I9l? z5`45J2e8BrmBQJ~mCJNh^>R>yp~QHF+Fbx3KRpDw*Rhb0LxFdNk@5h=r}_g0#+#<l zVTsAPxQyeU*~xjCJt-`_7#W#gy69W_&i}BAh=k6AHg#|iLO#wd{${Nh)XXq%g@n2D z@=PR@rF|8RLdhv!5O2<eIZJD61_hX}+;JACPljGV(}jhK8`8+y*lo~Oc?|0dgO8Q7 z?+Bxd`2Gx<81F74adl8YkI(-!bcp1R9RAX1k7UL4>ESF(7QuHmG#9myVb0WvRJ3j= z<5=(69hR$50o$&=G*+c)Z&q{fZozudJv&YxMwO|&>qEOkU{-QxG(DxIU%SYNZX_f7 z-(UG>gdJ0Cj!a@pL+K9VSa#ohiJ8#_S6!Q^?%i9)A9>v$I;HH~K0{5WT*)!vHRj3z zCbQ1Us{QzL#-iV}%*dD9|I3pLHdNg9QL%(Da^~ouex<HRScW;teB_;?Pf!YMR3dXI zxaO8`I_Rr3b*ik~i}#hu*RK!U!!~;l;%jQoyo;VX0Ob5Zzizu&di*o)TYlQ9ppKzZ z|2bwtdn3N@x{{oTI}^5jP)NEZ!tF`mc2N<D_63})E0c|IAQT{2jxvcW@w=B9bm$P; z!g=1_-XVrRc*?zcF{r9`|DYSeyQ5es(5*$M=hn{JHy!yI<2(sB+C(7K=g)MdTK?hD zBL88o5plHZ-L11+=F;(dd7Huu)t$0(e5TI8?f1X0JoS?Hu&B--$dJCB2~bCmdNX+g z>_}C$X2kB5Nr&}!#1z%}6@6OmuRr!Erm$tCq0)plJiFFUm@f>v_OU3&$inX{Z4deQ zToB^jyWg2hIpE%EZNGB7wwRoOwzjr?CC_TW)UE&ih5wohr1m-3W-O7rK$&WrWjd%p zim0j*;1JI=rFu6UJj?_jO6uG>(p={r@jxQG2?b)wfg?xy!f1}}3v6?{I78GYaO(Fn z+f%E~{?lP4Vs#F8!_MnT@zVz%oQ=~+7kiR|ju?J9t`#2>!nJokrwIuNpP)V9KPL5T z-+in6`1`Iz-8(zOmds+-y;`Wv*w_Ncn!Eb)KJ>bg{ZsmmIr-)bWKl&$Maz4zijQuZ z_OWrN*(=9!$o|-doNc_C;FA0MD}O++0b+?0CJPsvn%Y=c%!(~~_N*LBIH%DK&+Z>v zQf2;i-{l7FZU0`YHBhpannaM&FuT-i-@v$A&)2D_sG!NA7C<UKy6?V#aQVmwEOWXb z;8BL>G8*fTYaKsJVhr5g>ZkdCJ|%4p*Q-}AcWM&5nQc7GQ4!?Od?d9thd=u34<9aa zVSf8E<mRZ1TtfxvkYmSEGSj>;L@c(kAqg@vNf;xK@WwM!pIUR>a~+@jzuZWre|IDK z<zRz{v?VDe>*WTrKp?<vY>=CLLA()a(d$ihlK>s88Sj7e=mJ1bo!3+kpr|FwPG?$; z_tnMT`jyU?n~dg7bOGDrzYWLeGM&UqA@}#u-MjiVo8^44kkLnzi^P#dNoK!{8tkjb z4~}id8~cu@H%6{%;XmNL$)FEsZ^Z$gG1REIA(BQ_AGKWDYLt8wHgx4K>uOQ><UV>t z5KA<h-tWmdA>OAoV+^BIFN4fXoje%_B6olKwl8B96=N=3kot#hD(_N?#Ku<-<dSn3 zs5ry&G5?OwKbSZt;(%wb*mAR?gGfqW6WfDbwsv-X#UumQ*Cvb^rK}{bh8>FBb#II1 z9=%OFmuZ^~+bE<f=V2=+mj4yJn?kg6qY@HgHMJDbJdhq#p8PRk5ZMp6AKCZaxkDsz z^SC6+?%qXzjv3t<LNF!eaLc2-JQu(`Fi?s)v|WCe`i`G;&-qaCzy`ukIq5DXB{55m z1YUP04pm>SpO@)}@_`>NJNG6S(j3j-;@&P{&h$z!Eo>kWdEOjnD3WBaZ<%pXXP9^B zP}`Y@{LLZ~qAenx6)RL!W$D$PB&X->?>1xS&6#5~XHJRM$fdeQCCxd{*9qxAd~lz9 zghVMfvZIUYz_ezHeQj+;u4`LoO>f2rW)Ml%xk_3L@_(L`m*>3PutQrr%7jXcp!3iZ zCw}0TU<0kPIl6E(AqiMGO(ax#_}I{WOpJ^I>>iK%8Z5nLKFi==W~Q{9rQ>PxRXkeO z`Ix{m1l`ZfD;5+{1t({fy^1<S%_AfSZ@DnBucET@D$+_gNX6uUp3rVl`LCNaaEG=) zw}yXYEuoJ<WO>qIrVt?CI?Bc6J>Qk)w$G#0)h(4Z|7DR9SRcgvPqlsWA+clTJw8vE zk04Rv0uY8Zoz<0}prN5JCNTF5H`!gE;WT&lJC&JdAO6c%Ra#DuLzLV;y=Wo8i&I7{ zioz_!urIzOuu*g*8#$dP`A-j6oi#qP?!fiWY7-|4Rwb%XG&8d|x2d-TvETmpxCjQW zWEFfQrPb-bIj0W2&KN)_53zE~RTjZ;a?<PSW&+Xn9uo62{&;umPEXJX67wh}@76TG zE#HEp9{uTb*Vj_=TjVXd!XK3y4fe?gg<3b{MCvwYkSo3}fLXM=)ZU;5$Hy<bjRdE+ z{!9hisDqkDjuwAgR7w@w|6EieYO4QhKm;*Gb2>GC_`vrS3r0=ZFn#ejF5?j+Mi2lD z^;<s^&Pgb?H>7!>eCI$KHEx`~*!r}mVE#Zx0&*RsXmtC%ow_2U;Yvz2vCtEoWkC1| ztb)t}dZ<e){B!1naNiQ^+1A#EC%uVWyszKBf!{<pPB3I*0E92h5NT`@UJGvCx+SNe zpfGi+b-AX(BS#(vAQ3zzB%k0#1;pHCcMQ>^m>i^0_4DTwKqH`bVCVa^U$}Aw`T8zS ztoDZFJOqZ<0OjhAyGZB}ck-K^T30Yy<co{1tP@6r>1ujRw{2d)+5s!=+P%BkTYYf} z3D`dVB=Zme%e?7db(I&w+op!hS?B7ixvBmzMn&`_tPfQc6(JjQ<<0FK;9u5lIX}bd ztxDT74j`sF84{fFd9%=0M!r1s_i+d5LQ|BA#2AKV@eTK2w--GRt~FmH-cfx2_e-^K z+dt<gzZmAys6?O;wg_a)Eh{2n$b{Sg$gZm-LwjxRyL9)}F^z*|{yF<W*>jDHOU8zm ze?S57h^UA1o<3!y*fVfHHy$#MAOG;rsiGUg#GAW(`+vEcXy^`q_w7&k5aMkA)iQjU z+*M7Te9GQk;_mr>nzr;DWP=Y(HgdF{dC1o+@7F=6RAG{(7jbfJ!$3;h#)_!=Mp>+l z*w-09ErmXw`l|Nh*UZaY=WyLTQFIctvPA^^o?A@ivnbUm1pC!h=SWixr&1zg31Z#! zI$!Q-=Y3Kmm6e~+H-gMNu2^x2q?hJ52D4`)Qf7}O*aqMxX2f%Rj@jj4bemk6yx^DM zH3T8<2~FWHrAR|SIH9K#U#D0U=V(v+OzPP1$r}}?PhTP|#D%7&!tf&&A{8O|n8$Kn zj@(TN&WqoVBoLF?dLX)tj0{q|vs*6ZYFGdjeX^y07mLD^XWCg}|Ii`*`rWPlxJP`z z$ticW$<PHIYtYBacY5Tf0mnd}o2f<7qgq{B-RB)W8#z@hVBST{tq2+^=>6$d6lnBo z&C5!iHt#GNiNa5EPxOz=qx;USIV>KKb-w4%(T!%kv=bM{So|*g6sh+Q3Z!g3v&WN< zG6Wm%H+7`sqE1Z5#0%aWJo&g$qo{h8_{`;&5@n~*fMO)t-~aVEB_&~pi$zfgj}jgB zB<@jv(f)nEuF2zF8XX(|9C<s#!0SeV(enDB#W0M8SZXGSz2It~kY^4eER%oukTH8Z zxOBhn5@%k|bxKV+{YQ&^$wOHm6aIG4eIaM1>Fw`4MPw+yMl#4wed|n+k)BMC&j^gt zY|__0oAUjz$JVW1*&k?M$QfBDa!AR}@E<;?GNbYvz%Lp;`Oqcnx*@7E#=bl5zO(ts zCbb!gI;S@VWlw58KgFu~iIHbD8MvRu)w4sjHx{0LBRF;Jk|yzJ<%-GJ<QZozc!TMX z5}wYo6@zs1#+_@-|88T7?@DH>)`A6(F%;lkwQep4O?P1CB>sZ5w0K|g_K~KS+`Svi z&o;1~rK{WMrg{2E&<smIDMls{3{R#pQm2&E)a>p}Re7y>x`_!`W#(;<{Un-fdWg8Y z0I3bG7{jAdzdDTgAGWC7LyR1|ky-e<{PKJ55HI5X19lJ|iw9V+ZSvlzS#g|K-4E>Z zJm$qOc!eBOfpx*WS8dIS$QSkv>2yoWcdkK#l!*6SnY7StEB!0Q*4QQ2TUZE$qacEa zTk?R#^v_`gG8$`-XSbklC)@sPf9Y!*UUp0Gb{oGHY$|4_BY1jItWqno%YnY;Ml9A- zyd|SCuuB-pxA&hVc%AM9ydD=f;<OQ8$TaZsRYft-s>;xNaF{Tooblv=J)XTSFHdpO z2bQE@g~fi$AxY$Oo>qIq<MR=rHWOQX#jk5McKp3wf3I9ooMJE0*S;?<Debwl2$Y@O z&asGYqIv<Yb6P5R5tI6;1s{7sGKd7WOkNrg`0V-uaX0HK&t3xuHoSiAM#YQFO|&DQ zxr>}DiT`$UaPJ^|qR0;j|Ex}c%&>qi+kV-J`s_h%=f=`!G>fUzyOHu6<t^2Scx40P z=&BAZdpGgAyda<Inm$$EKj_TNT`@n@q9)uH%`>X6QJY;-kdU{wOmRuMT~Y5@kS8LJ zQ>>0}Lo7E?MtDsj#%G82csNJsA1njIgpmO=XU?Rd@}J3Cxe*yDB6q4Ot9LW{Uv6mP z<+w4{X$I=-Y^)PnQ3)@G^1*nM$GYx9cD|#U=9!ej?q`_h4%$I@g!z>7vdd2|M7d*V zC?0fQTwFYJZllpj<c;dHYD6+}%@{tYD2|QW@s-T@N^!9ag#_34vfgS9`L_&k5@F7E ztviI6roS7aN`#$4P9-8InBfIer(Q#?JL2?K0xPlDjey<4u}lSWpCZ$_e0S|^Ju#xF zFd>oSi~juL!ZU*R6;Fr!L9uZ{fFKmzCm19g4g;sTAI^0UVi$Mzm~P_lO@#;Rc8x#= zphQ#=fI&jyKNUe@pkO5c#K?6R<$MrBO_Tp`I)dAfGJWfY4IgmIvv0q_qCs1aGTsw? zXY8<`r2(@0cOLZiCgiMxNaUQei?4l#QzmpA)2@)D1Odq$y6Q!*rfG#$-Rnms%FT!Y zg7Tvo8vILRV<}F^P}%cF>*YJXXK?&<$Ty&Sc(jBbb7JNjDT?R!3R#o)%PGTDPK|_R zS8T=-^D$w<{Q6dlkG(ADn8oBY?G%Ro90een5xqNc=*Zv%clnK5w)7L6H`?oQq{nct zv^EuPmt+u)iT8z~I@gkqOV_WTfMK`Mv*QOPJO7-Qf>WAO1q9s9H+9=vwvA2{E*~wN z?K&i`HIV4as3T5?15fn=%;)v0ALi8X^pxVmn7BU=$xWlwcaQmbNCp+2v|dYN#91~= z80*WiEZCO_9)@9YTh4^qd9)VU2YjQ82xr5<nRk40^6HX=mX;PS$daY#!t}*X$Hr>( z?J@WebBJf=UWI4oTj21aMMI1!S$$;4;PW+9o>a}Ew#v_Gny8bB9lAZlo4gNv5Iv^1 z2+3j`B*NBpcQaba$=BH2Oz!gP(6z_{>p3bmY)~l>QCXTkAfL{bsb5ShnLJQ(!i{&7 zI||bG`Kf(o68^5-Y{&r8yIEOvsY|ZEnUkLTlrodHO=<Y>=YfP}YY}2VD~kE@_oFTJ zTlh*?Q`m-XZ~4k+>osW54c9tT&8o?gpNZ=fq9ma+4Qk9;f{P~#InVgCLd24(HW}Sn zy@zAr&)EFxP3HDZYt-yA_flc<4M@!u>eOs`xwM>n3dbJoUbE|gu=JFPdm<up`nJzb z^f3Y9@18sTF7@H#$FK?ZqJxihk`r<!g^)iY*(D?kmzG-W{4#@%3<?n83$W*l>gtP( za6=b3@%eqVg!?`na)(k@YifF+d1XbwG$Q*ZU<9U}Tm~BU7xNBt$otDo94Tao<Q&be zu*~o4+ECh4PN8=<J{D+z;c3&YniV``(1?JJr8vKqB-DH<zhZN)+Q~-S`#^bXPEO7n zv?Rg7eG1~Um#Z{|%cFIdKbERwcN?26R|0}C-{BOIung=0R#Xj_1T^*#bhI>rmsSTy zy<1nmF4VE{>8a_)I~NQ(+u9H_p{cc>tc8N0P!P%2Od+R6$iZ)U-USmitAWF%YQh8| z^Z*W<lOSgHK(E?~zx*bw?(gK-Qy9d`h-(?m`=k(mdr<ar;}niO8;&fTA0#OF_Cjs( zXB@rqre!kgPO}B?j_HY0Q1DXn$Yenr$Sk<bkEb+c^jz;QMcu-3$(=<P3ev$L6sEaV z1$RZtsvz@`!*63w@Mtbs;1;bpjq0-Deod3*nT0dF#=Q8LdqD`n9&0nnsdW7J@iD)w zE;M_G2N!MpTX=u?HLs=`FM~u!Ln!6-N`vG+al*mVVYsyG`Yvetx+;+-VL(htC4m5} zR<?KLwJklyy=Zbn^I~$N*R!SH4R&@TSAUe3$B*v>r!cg7flcYc?=oc5@yVElBo&>W z80hmrIQUd#&-G~@mDSH!OpZWj9}^lr-<6ZmGoFkY%wrGG3mhCERrbxh;n^0OUiaI_ zH_nlhlNxH;sdJwWePl=eZWr}LvgheiktWUV_tw|1f0VrL^VE6MnqM^ZX?`(!W#?J5 z=9?crxwlWB8S{JU?Ah*f;Kf(_h@5eihjU|k=I4ETIpku<1K`|;PMbG7Y<`!yHMhG} zFCP=UCUN*(gtd-(j(!vmj->T2-HCswFRz-*?Bu~R0lTH#5qMEs!jcdFO)4#3QCd_@ zmElJ?D+Rr-Rz)AB-rcBW5{egOk~oCA3d1#cQ+?~gTm5bq7x&&)aw6A35M0~ZYGF_1 z-U2Sd%Yu-`P!UhIfk*dp`DqV(#C7Dlr(sBAU;VlDFk0eo!CaJ-lA_!GQbBLo%+bBV zjU!NHapLQa8<w#75%D5OFxzp=3n_wPQCF^9L5>zMFnx8dk8Am<@y5B9gU(*vWOmHW zsE=&dPAu}X{nURmaUb3r93yUPmh!X#E;K>p4}N|p>#Iu!dsvH(nAJt^_8$zaK=Ub7 zO2dZDtTsE-IV)sg|7)HKh53pK3g1!ua<wn)_X=!|sb(uGMmesFeVtJ*RuDN*0Ch?b zhcQLqJjfB}6^EMY(4kcre)`#3hU~?8H)QH&!%tYFZ}D)GqI&^B^ASQ{=K(wlDJ|Ip zdgW>4-frzlFjbP5?$+dKwY9bO9gAiymmG3;|Kd;W^jWmIbN1XCT+#FRJuCME`dpnY z`8$AzhWZd2GdA60wE99D51nJc+#w(5j`AN;L^%Lf0)awEqSz=W>Exn&`)s55wzx)x zbjmao>3ASPc=x)tjnrJxt(Rfr&EVgYi(s6Zo;+ri(7C!cw1Z5TeommtSr3%=I^)vd z7dswxYSW1Dy8`1GU)h}KG*dL)oRTo6z>#i~k`7gm@NbbSqC=R~VeeD(UR^teKB4E3 zkdOcw+G|^8;JJb?69qDMAoH&`OhptBsYv^}a`JP(*;`)-(PU>MySZ8WQQ*pLqD%WO zyr7*t^zy`NPC4Qx8InS**4T05m>z!x!7KMT4OxqIaW`4J5L}1=!|2>~FGr3%K5^Q# z8#JOQ;u{EJfKI|g33A18U5=1jq3K<8x0C|Id;Vt07W#>6pY>K;GAv6^=GI9`?KiWc zOnCM}l4!V;NP1sTj_}hP55H@r0+<RQ*<9a8Ck`l+G4=zlPUCM{p0n8sc*BNan(Z95 ztEGohxE?;ds>&Mde({OZuBi!eal%ZEYuB#D$FG7PT)K4Vo;wG>Uf0_>byj<>904t( zliEmT<lHIE@b(5Fp<?FJ-s0=KuTLx81I1IP-(~<m(;+{Yd>qzf@W6roQmgquIy%26 zCXNcwGfQ}L)GdA0Bk*O?f*3C)g8rA|4wyi4&qiXBe3$Y?RM+^d+Z#A7`0+IVaCi8B z`Hj=}ZK=&!?&Rcu>PW^cAxE}p!;-~|&su#4tES14Aqt+ufHDK|2)yy9a`_L{3r0+y zycNwWk5sU5FyH~HGFJpu-0*SNZ=30jztydWjdHgwQ?`Cs-Z1Ycp;^jRj?#PC5c2XJ z#}60Te*OR|F72T=ZM*g6tUB;1d=43}I(u6#z8m>o#)Em$Zrj^xDQ94%2{m4n;&`y- zfu8Q#1YfS=RfL!UI)Qi@5zL~Vj$cRx{TZgxf{mL+iXWGjj*t@j{JwHrndyQBTPTAt zdvl=>BMvb)06n}%_canF?_++eMsf8bwUt(t@)$ANB%T{V$l%ex*7Mc$^ugP%{yx7{ zDyO%M44MfFkx}VWSLAU`6;ZYmL~+ffa=K4G#j6&v(*%##(XH(F^_^c^dWrS5&ur(< z^|e>wZ|f_%fR2Pts->|%XB0K**rSQeQQ9D`d(Dexh%+Ta-lxB~Xow-=TA5atsv1<L zEgoJBuzDbOC=_+H5PiXvur|t3mbSD22NJe!Tj4Vv5M-v<GzP=m+s_$P3ua$iyM;^& zG&XG4KN>ofR2id;fkT(RRup{m<px?ilmkymg+SGUy<95qGPWAuhTHRhw(I8z10dAP zg`b=GMMtwzZ7lhD&@p@i476jNQ+zB~nX$0nq;yV?{jwSlb90S`eQaNv*NUL`WwTo1 zD(pKH<vd-I#x;(pVsQRo5UQgf?Q0x6*NFtLTr`g4DG-ZvipCXd-q=MKUvRj7kiVt1 zBGl+Y%!WGZsZ#F?6$ekAl<!~HT_pc74LAZxf=c=v*(4R%$+PaP?<d1GhzDjEq>G<A zxLe$#iBVK!!-z@_9FczTp3x;!jf%(tOFwS@A(Zgn8#|_U-nKI9&YfYusx{W)NbfAF zW4=Ak&K7VLi?Bu!kq{DLrjm1&pFcFc=QjNTZ+zU^f81d3%PyUs5r!2gEk^W46g&U% z{q{obwQCIcaJalbdyDQYh?=>FXOk0VGs9u#=-iT$OPs<;jt^ehXZiUI9K@r?kD;z- zr@VyA5~e><loO*iW8I~3tI8Y|*Hssr)6-gO$ooDvPdca{&&f1ONB$tkl8me@E<aRa z>FLv5MLI?f2Ph-uIyLoCW+t&(37WO41?MU;&>_E&^MQy0P<Mmi^vTB<L>Y>oe&@Oc zH%f$hm0r&iV+oJ5U!?$`QBk*i{R$tX-+JN<7B3E6C-teSszLXb;6$Xm?IR_{@!b6B z(}h*5POn-QD?l*G$-JLKC+?g4oJ2gkb?a#d9wktS7l#Ce(6C9Smhm1%+}o#EO+94Q z&+yK~q8!|w3N{4(i1NanA|<nn)IDJYAit@(;mJoD2AO#ygAMp)qeqSUMinqi77)|d zqo3?>#iob6yFo86y@8sciT??g7sVnG_WzhUu=a3#(9-Z1<bK8p*E1j>*I40PE2%FN zQxwT%l-|KihTSjn(j#vOD}}8X6(uKL+xpveX7f}p!^lX+COQYENFCU!G_P?KPU;`c zk8KIkQFp1(TzIpG<0H;%5`nRQ_h?!abHSls*mrdzxCPex+LnHuNoe3#q6*CA11;#h z!CDsIx1*ZO!<<i@WUEQc8S2BJn<2h$|2Q#`gPJDK_iJZPkYbcfP@*MQy*NFp?#3Sk z|Gm7nQ?K*!b~Al$3%3(%0GNG_f+=;wrcD#C7jc9TRVNdWZI|?^xjD@KY$Z>gl!KuA zFHpq7>`t3LeX!h%=g*tqlN#D{tHAf^?J779;6O4jqvEAMtP}$8>FIGlWlfDDF^&&P zztaBw<GiLXsq0{Q2+A=IQ5lZ%9Zzw^sdSkq@jG_h!X3-tfkg`zC{6#PZ<zWb&E;I@ zFuI7;Ql_mR7?D?rB%hju01};<Gkr6v^~YDLokL$UW(<3xq_`O0%;BY7GNw>AFa%0~ z3z?8W?2vwLMJ1kQ#K1H-0E7D~jj)|GSDx=J)=6`4U|ubvt@+zPcMM)!EB#bcTD9pQ z&C%RWL2kn?Ubt}JZq4%rb0)<ahIe|Sa1@x*Q<&g{+*L?H2?>e+;1YX2Y9f~Gq|2B4 z-B7~cRtyQw8Je?gqwzM00WF7?o==?XKZvllLnlrwVXn_Pvo6KW<t`a>oCx{?1I7)^ zgY4&wYk~w^L9^W=7^S!aFOi(AqGFnyctB*k6j1uH>7MS~>6Atn^qv9<=Hw*C#ffc` z5lUqSz!Flx@n&x;*g%+Zf4%Gd?Ncau&e10cj<ZdhngNldl6D`vwG;{2bg%CVPns3w z<cxyian~EWYo(DqKl3)4Gmfb`7T-b<GKU))Y!)vzYTOa1>m##DF|%Azetm-Nrj+_e z0ZXe(l-2(@G@@R_V*)7Esg?R&L{hZ>INMwvZ>Gdxfa<L74f9||fhs1h-0+?sC`6>x zWY2L53<!X&ZvODWz|fE>ZyT7w5n}kR@N^D6WQgG_&O5-)*&c$bIznZI0o5)S>h@lS zyTSns#w@znNno+SHYhWPbnLhjq1vo{eSNjAT!(Q1Mj{~5Z=W!Io;8rYf6y8yCwAlN z!GW=F4UOl`%iwh4_!2gF^B3CbX9Wd4<(RF0oaKA;XslIw&p?BCm*ENuSFT+n5`{>o z`yMwL`1Fm)tT|3-7oz|8a*=rUSWb{@*S@hcm?93!N3JeZ2A!-aUfW`uCrIUJZHX6Z z5O_MGSj^3-jz}n}Vy<QX{&7|xbUXca3nX^hv}xq#Y{Z2{eMBdLa;l^3jQ!(4>&Vq3 z_Ks^0`^E${H3W{Y$q>mjKZzuqj6V;g7Gb&S6DNkNt&*m4n`CNGp=_pfD>rEF`^t<h zn>IP`&XE#nY$k-hp6LdpK?qadI6RqLLCwY~L*dgi@WmQOBXTmB-VR}Ske{1^Zc0<r zW<>9`PcF_{;+<wGtJ0XofJw$aUE>Sn5fi^fBpk^Q>`7>M<Q1pi6z_Od_4+jmcRe2y z$~fwtKD!?m6_uxLRN8q9d;P+zuJM_%h1Mb_h`=gn9<Xck{5`2DkQ4BbRQih-%qv4N zg0&u^UEW8~kGy@$w+NoVD3bMyW81o8y66co#rhE!ji$>$?932v;!QI3Or%!rWiTtH zKTHU1-&j9Y1qB~N#kqmcbUQr^)%6i72O1lM5gcqw2-4y|*y>dN?PMNxx_e-+e%wI^ zos-V;(y^hxsx74@;dV1S8PD%hm9zbZf<%pH2L$keb4<>?xr{MNOzzB^%haRvx49Wr zFDb6jklHceApPLonpyh#!mP*LyZv@YiFNv&Ym6x+RaCbIZ{;;Kgqa*%AT5KkM>YUJ z^$xT0$$1GzuyVx;AdELmpO6mP^ArvQf*lV{_5a7(nSkZIu5CY4lBr3Np@E{3k|G&O zLXrkThBOG3%%Vs_QPLvGoCcCY1BnKr!4OF)m5dP@3}s4E-|ue?d+m4a_dVY4JHC#6 zSbOiKdY<Qh-`8+n=XqXJo2w7n(|i@VA0CU@0ikSR#`*$aCEcVkRHXX)p6o`_IVfdw zXeBvOrFYnjXJ*j&5)(&hYnz&z@9)zgC{J8md|x@fF(bn=e0ctE7&19#`ynHzw&%-z z6C+mft_nADb7f>?{BZZ1GG)<x9xtu>tZ7I6xNtlo7+`$)S^ciX;KPQq*^qVXWdoo- z$ciL>KN1qY68SJWnUAwBn=n4<I%Fil_(#1BdIEM9NAFg;tR|>dcN}Fotc$<#p|Y+b zk#pI^i<t$%u&0>Vs@1C}2y-`#^cTPUUNt`y1rB$eDX2q`pw_^GM!;bTl9qk!wCF+w zK~(4<@EA$;zxk5!?^+r(Q1()fTBEhkSLv4@4d@u#^zgxh5yOX15WBs=@4UZZzs~3K zD7{HAggsbF62=gXz{MrDXu1+n!4zl>u5VQ1we!ZTX=dvDwj5TxR4OMai8*tS1m8)r z5gKLEVA7rd-Q4m|3Jqa%yLanG(FC%_N@3NtdzysE%KV+^3!2V&v}s_fur2@)Q!4oK zEYq>Z!Mf5?%cZaDm&O^)^QfDw-QXtMS9#Sg0}*?vLn>W;XK#Il_4|hloTb-ObGa$( zU~N7zLz~Wup1J*2--0EhD&_6upQ#}PA|vYPWLNF?I+G0UO9mM=>eB2{(svH}<vBTO zDRb7?Iuh6NR2u$$YAT#X-X{gtpr#dS4JJ^!8LLh+A7sHyFy;LD_=JQT2X=;>VqegT z75AKVW(C>5?6Sgc3^v@7#4QdHp6N?2%<>u4668Le&k!q`3_5!T1ovy!@vjH$`Sv2G z^R~5f>rN_lIM+4xkOs>+)}+zlyLkjvw$t-?|9I{Y8RMmfF0SCv^en56j6J)Ra+`qk zz{4raoBc`-$+kT3u>&CDnZ6F4+_K}4i89D3JSB^Y#T%-_^}Hmx$f-2xM1}le^)YM2 zSD$`7azbg8sz>7#N9)d!{twE^$~>sz<R8pP_YrE&23dOF9aB5VWY3<+OuK@x^@ruS zz4qC<4a}9$s-|0X1#$cJ^|6!SQ+{<&{`97^<Dh7f;HQW&tm`E!TWc^{^9i?E<y5BV zpMU+&e|i_pGb#JP_$7H(9|>daXJV3sMY$_GI%w?quM|@e;co(8c!c}SRvkThZrRjd zKg6X6LX?6fi2iF0l>Yp&{4-^prqe(8g!fwl&VIS`vVloPL?J}bbPFvJdsX<qB=U9X z044?vDFN15fBP}Qe~s+q=Hl|a!ISaGIs>~h*LKf?RM<+#m%MzF_xKPwomX4`!CO`A zu;(UYHpXxe@nLuyj27{}O<fv18J0kl)e!YPKUM0Qhy0gcWi$=lB8#Am#ZGM$HL8Sj zW;MiFyEo(aYSVvOzMC?c^&TH#=HJJ;oy&N<qZK7ix18^^AmP9MR8jZd(Frr#T`QXu ze!JAM<PVPd-~Lw0#{2)^OvCjW@DENU1>Tv?|8Tem?XLZ&uRRapzyGnN5Q;{rs0fPm zbc<VZ`|inh(&_FZzF*~UuZoY}%cxAtDx4=nEy<q=(vAKnFHG8M-r-35#a%=^@R~x$ z_oe2+l(H_aofH%Q_RW#;UxoS*9V!<Aft&x<nsq{9Bk%&*p&}zrj;823$X-1OvE1zp za~bT`x4}v0WM^i!zy;N^zbfMolZ)10vhBb+dDH;7VJ$|0;^<g}Aqh4k02n|v$d8Wo zHrZqd`-wEB(j$r#!@4d3IisM>ozg+HTkqjcxd2z7Es712vP<Et3loM{@t)|AfVK#g z7_c5iLTGQl=hLLau7?af)PwS<(>N|6Vl2LYLJZ|Um~`u?tM6iE!S1g#bSw}ynPGA4 z?!JMmYdMa{1sNq7dN)Pd^!C8(exkko78)g~JSp5i*(}5w7^Sl^FPt+>+<M6lZfPGl z({sPNo&MBWq3fb>{N=NRG9po^fjphoiL$VkeKy4*Y*4ygTr8{>VyairP13T<^*cK~ z7fKqQGf5cFR1#NXs#uu&L7jV#UUTxqiA82+`SfjhmnthOe>6AaBS}qF^+t4k7&kaE zDr$nk(p*Q!fRZaFRZ7Qii$mVNQ(2k8rzR>YN}nl=e=RI-=$Ku)nb06={30RHeoS;Q zEi6DAL0ML;BM28YiU7gRnA6V18p;;MWG3H-;=~T0vhA7eYnLT&h!=?n4ShiHf@BE5 zzytMWI^JMOa}Kb(V&zKEAo~RiyjgS|C{i5Y9YYs~XDcrf5@#03HK~1Z>u(~aw_`gS z<z{C)@tM+Yf=H&OekD_}^Fw;`F8lheOD3$4_FJ0_@(8l?xTNGW?;gMiwwPp_O~tMw zx1E_{e8x+oy!<kYXMi1PS*zMz{rPo1ESbQSfH7`b#{R>fzXje!-wgu_%eHfCjt@C1 zdU(vFU1k{uJL8t?yDri>%uhb}EssIwf&Kd>Mte&hi|%nr*l#yaEGEN;_JG2l;_f#I z16(<?6;=w6@xyb=DpSu{4LKVh4}lu<N+xVtS}R$I%U9b$8Ff9%S%V#vmgHb^iL&1< zXMsgTX~LcXvdy3Yr~3Bp-GU?&jF06$Sg@Zub>r48R(31<aY%8iW#F619T55$_Jx|r z^NE9q2uNn=PZ*rYe^7E293MAdXKh>wLsFU->H6ldgB{4Pn1lc=Fc8wo8Zx50jJV3! zvB!*~*w#ILEVr?Ndhhar_n;J##vq~2=j*RO1MGO<P^M*ZJ7mLifJ;j5n;Rtp{j7H~ zM&;vUIA2^`JZL-(sx9(xuBeL7;2~qb1Q@N(*4nG@KP9f%Kh#F=_82Y9?igACl;^h6 zdUx;HlYIvJDmDY2mheNEb}4@^)4$#=<Y~gkMy2C(axFDN&J<E6@qwjx9bsUQ4nPe! z#|w~qHlEdgbPSGt8`kC&78d5^RnxH9ev8dKHbLyq)4uPDIJKBS<m5O{6vOEvEiUdh zLj)yVni!_w#F8fiGH&!0^UqNAd8g<H4uvOyHanpNYN=-MWZ1Q0Q9xXRedWNxVj?0} zZ8TdfdOh!L=;MvGfsrCKm=oxa92}lgUorOg7l>=*RRt8X#&0=3?YCY7kJHz00^j6p zg!busJrPrhLiT1rv%o=_wu8Qb2o|t=x4WBLv4>B}(ERb^M3g~8?U~{PPljWuHEdWa z%;Dj~B|Uyt$!v;Ty|>cjxqUqt(3fxD-ZXfEzccC<@6qG8V0OMujkB_*gVJHOXr5CT zUhidPn>;<u@!0^E1cJXb#GF0F4GH#N1`d+iK9)E@89bi@$ha(dp>3~5lL}qa4>H^B zAC-<aU!G%m6d*2ha0js{AX6v1ER$jDTmHNUJ*v}%Jy$dytd`AaY4K)G=>LMapSAXl zMU>TL<bA>~JbzwF$=T6S5=fgmmT8wT1lsM1ft5g~Gd8ui=kMR+<5JLZzD4UI_&^Fa z#VokR;GAXH_Ym<P*}s2Kb97YH3mP(dF$h^WuYV%V&_e1Qc4vV{b@i<I^MkG|@t5vk zY&t|HodtwHeo$N;H{HR|I+++l)a8;2F-Ki}M%#YCbEnQh1^WPt`^n0V#2F0I5ezdn zsWlc$(1!>#8+o=x3~#u!9lNl_&dw>6cOZ)c{YX!fltWr$&8_12=$1hi&porHR&mA} zlg=w#T*^7oTt#TjunPoNTr+>`>9`CLaEOEJ$`aZ6eb}7kPlNWos|t`IKg3Bs8WJOA z^2UGi35fDN$X*Qjp`C(A7k>}5Ea+zawb5EBG2qy2<vGtN+1d3s0%X5om_U+&4GNVE zc@%T|)-`W^+jWpIR?l*11#xCY;6kTGjM+RNz9_kp`_g)6SXe2X=S6OANA~VrMHfz+ zEeLdlO?mW5Ha;s7;ue)n?l56hSx1}|cJ~`CIG{t0D%T%DH`}x49?q=mtB&nNt{sf8 zeiql>i$w{7VJ<3EXm)Jzy?*P~5Lk;kI*pXz<c`;$zEciUi=(fW`)YFuloMjwalmnE z)x{P&C%)2P&Ttq4IO1~N7b-&>beWUTLemeySvgxb)OEuC%^O8b7@aeD6WC1vDS>gm zd!wBa>r%G3Dqae_mQ@aK<lTo45eE(kT8kb#nI#>i{=dt<O|CoX!X_#j&E)G<`UL$O zKK(b;6jw9thYBk!$8)(Kkes}lJz5+#vq3*=r<~Rn?FU)FL`-kw$X%(Y_YTfKHDP0H zfRXE*H`*7w8!jg^(*GAf6WkNotjE0%>^FV}T;Q+d2&16r+<95%s=^7SG-Ve$DL$;~ z^zBz{`n8HH!D#H=vn+)=IGt>?5$I#YdpMg;wtbCF6(vegX+TsuZ~)JA0>+l+&$roB z$$e_dn4j$A&we{TYob1+<D^mXOww45#>ke;Z2GD<3MrHvP>~>xPafpWY%b8G8B+k$ zK{Ht6JJ}-8NRi!E!WRVc!a`xnLwo|}D+Mro`_`q(_4%4K(gadUIfdmrzGP(ai#c!Q zvLlb$HD>*;)BLU9=;%0mosQFfdwY#@!FTrpG@U!QhP`)=j!`zfOOdc9W@dUbRw-8; zy&4>l8auk~;H|hhsrs&gBhBJE7J0#!&F2-YukSswThWszR}S}_U2$iMf2Q)9d4UTy zgQ`#~5h<%aEM!T5q8}!Am})hDeW&qgg@XesfI@;!*cL17vvkz>@nh?#bi`j;-(*0I z!wS7o7LtXtFa~m8tm1%@7-QC?95GnGTvtMUl$TET{suBiEW$J>YKaC90N}~Lb?g4E zF6|3^En;!7YY}NY;3@&&#Yb_oC(GYXR*rEW<I_G#_g2fWkfvV6<R@KS8&BW(NeQh9 z*X817J?28N_8F^1peX-~n>qQ!X_XLD+*z-;KTFjE-z++?AGAMQ0VRy#D@KEgnCISH zqt;>uUq?b%tD60E8XFjFeL-LA3=HQ<ERGl;BB^s2h_aDIP>_<Qefy!@K5u{vv{++t zt*_UvA@8{CR;qsX9@W5t%d6;Sj<M5R*4K2B=6jCd)~#EkFGcg)dDgD#Vf>I?%K?1{ zN!4&M{M)8IRXVK@mEHSQAJ!ZL&=G%5Gf%r}=YJ!}Q~uRE8%NhU-?fjn^LfNki;|&` z0u$uZcUrqcZLGKdr2Z><iipI2$B-4F80m;FLe7%1l8IuhtpFB9TxO>*#ASuqx}R(G zkMWW0@bepsLI2T7eV#!^z}a{2;lpZckK{uSBffZfdI~(F!BXtqfNJZv7y6KeHtm4D z{WI<{ALGLCNivl37)PuCRplY)c}-E>({~h;^bdp`7(89X#P*I_d;SOo4O_7Rk05VV zrnpWV+a0EjARJ%{4RV^SDX?Y2E!r5yeD}V3cQgA%mt)>Xh5ICV(auxFiSD<r+sv7> zXxW#F^77NtI~2DX?cKjW*I6g|>ZlOL*mNeJAV5_O{3>>QW6ZA51G@9o!albC+~l|S z)W(jbTi1R+ePB*U%QM+$EEOfVk*Tf^ZajUu@Utd+4w+-Wx+Uqi7rfVH6QmV28MCzs zYLk-Qmqr3B;i&wUWF-(LFZ4e(<L1+D-TjVK{8r$W(6GtmemAbOi_2T;NF;h}=n+hv zA<Z@Dz<kh0GRfls4a9+s(&}DW*&Ks?G#a?7Q#NW19Qcxc3L|={%_P5L=-EL!-@a{P z<{Jyb;_M7&;=YNX#24u<f`;(G0SX+wn$AaPvC0`0lh_D8{A%|5<UVuVD~GrAO15o( zuIz~eOZEVN2MFFUv$=IJW`z+F?~gyZllEiRz_eow0vnUAl$9J5Cu^_-(NBvHvD=<F z;mqZkof;h;M1wlcPpJkR<Q_u@+nbr_FzR&lcSBY%QmjBE-tl0fRzt6P!y7klM2nP9 zKh?BA%jlv;S4Dved+zL6i(~qz+muH5isubDjiZ^8zuYEX9C%pn;1-zYd`cl;u9*?0 zQWq0+1G`*Fic*c<ppa~kmYI31$@;W{l213C;fL=6xI^|D!kQDOk>mZnlrJ<W?-M;1 zE~WNPz2A}x)*}gcjzk~b?nkq8=Ggv90Fgt79h`4%?YOM+_RTj(!P=iczYQ*k3>!RY zrdPD*fIWk)6+pSL&k&cB^UQB3wN8+JOWXpHG8R+ow|ZOaGCkg+>Zh4eR)_ZOV@Q_d zpr6z*t4UKRcBc+1&T4C&wraGc7fVq|=zJg}C|%vFMf>4zgTk%cvx;F89EW#LegfL4 z4j%l#B?T^tl;w6KMF8i%VP?U*b{UId6g^y9TN`#iD5lOg-Ur3pG}Tb@tZqh+&>1RI zI`;MSn{Iy2qW89>)mNl?K1eoH+0i03_KR7s!J4l3W~ler)Q=OA5PIT(;)h0S%|x-| z6e$W1!!+VMK+s_Q!$HmudpjV7JpB@MCGOENyQ~1)Cub%wBQ_F4dov-tY(vV%`ho{W zr$gV_cAm)E&QF;y+UdGf=ZEpu2*fa#KN1W%=7g@?#7>r$g&aVEl1Xo<zvfi{#U2Ri zAo;TlU>M9WT6o1_ewMoY=<(xE83JzKwk^rhRrko@!xf}_RzsP@KA<)kprC+1Yw|n6 z<d)_KfE5UC4ZXYQ_GIVV`=~W{-4r&UF^j_eYBlXMm<8x3)C|_biutqvRdLA>K2+^x z!kBA+Q^4@h{4j?R*3=1x>{K$)%cCO<Y+q64+NG^oym4bQrAaHT3F8=C-8;O=FTRy< zeNMEHJ`U4j(+KjFJL>hDHy3P&9=@=SiUF^8jyaW+(|q6&gd4(SEy2Dfk%pg`ihrlj zgoyFVhvRCq)o9iG$D{4uOt};ND6CV`m@Q{B@$RVEVP4_Xv!q?x^p3507BMqoDkqFQ zTHv7VeD$NcU7h-?=g)m5vQNF6bmZ;InTE!Jy`ATscV^?@JW7sivl;$3rY)3TwLae1 zb?}-)>DwYkvc3hY2cF9u-Hk_Yy?80-ad{k;Q8CHMMI|Ncu5bGeU7v8lz~&v4H{yKO zj}?!OjW*nCI>>9_w~xaQ?~p1uLxsC_Yn0okuG?l$4@!K-`k5|*#(J=p$jFGLbf2r0 zajdOH%>W#~`t=gYNsVud26|lBZU)I0&nPrlCB%0^k=wFm)tv^gP1#7%)YQ~SjL8|L z-zc=1O;_U13;Wk3BoxOR?KPEW8Xp!OK8_}mDfqqP<Brk-Ghli;Opv(t?@#x%?Tf<O z*@TLX-`?X&<G)sV>Y#3`1u7Y~j!ff1Z_AuhH{e|0kq1<?Yv&-(+AwvCdBtO6N}wRz zyxCdFL^YIbGXjP<B{Mw_eWc!}hWvq_gc}kNG25RTqW8Y4N*E{k;RU~)_7g7Ib_uiT z)0v{p00K&mUwO^9o%eV{4UK6nbwg$EJbPxpF$<u*xNl5{3l;Um&f9modwC?DZ;;rj z*GFgY#er+|3s%(^+&7YNZ+!I~<{t7oeo!6C1*SI?BCcOm21Ke*QPFimQ4sIh^WcVj z-p6q2g8F**dSQ&tpdD|m26%4e2Y9xSau_;p;<edEGywTaNlTMJ0}5vS*69bNTOk87 z^fJAhf1d`frU_V1>*~TATscH1lkB~rkr8xYvgLJ6&1~u=ujeML^aGR7dejIj$jpS) zBO@!jBX~D-@KdMWQ{3F%r{b2d*vPp|#B^Efm|2RUK$7cD1a|+NjBGggel3f$!YwW( zCm&{#Elh8#?<A|aNf<+9;u8-wQuL(N_Z*~eFO0O$JKtspmf%Q7KHTW#HP_a5=={`r z0KN2kJwK|veRNU7I3VXm?u{Gi85!^km>q#LgtOMMt5H&UhhX2wv!BsAVBwgLC_dax zSH1w(J0)jl=Rx8-X4X}W(9?tZyADGSaH1qlTg!LC@*wI+2W=)YSY)lG^#pc&9cX1B z>PlpWfXO!QAw!2cC)?`eoWAe*BDUR@*!%<Qm3PKzh(D11#i@oiFl)TG>#9v6B39x- zc{t)37!T3Ze0MuEwtU$PT6PL@tVF)I{-^+V2>E7*zE?Tq<kH;|;{N50LAP(Wjrxq% z?*lwR_tf2b9pN5Y4YASp?YJr5PkOh**vP}K$#rs@Zrhdkt9IYyGR)`9PKom=DGQPu z+I{t)v?FpMb`u8NTkPq0C$;I_R;CTFhiUq@kUPT}th%|q*M00Oc_mbPnzl&}6t+4O z$!OjB8wfiT%ZravQuFALmRDW6aK!(~%w0?6uIsu(g+VJuy97UG6BWbT>j{2TJM0f* z7sfCIz<q1x1YCE}A3d6g#Xy$WJN@|B!xpjV&@5WI%PBjSgg`g#)k|15Rv$B#$v$E9 zS*F*_v4(*W8>{lBPCIgL|D*D9X5`kN2gBF6v@)V;T*|$v_T$yxgw2TU)mD3_uyE;x zit;sC(W!lo+KbgSfBE{AjYWWdfR12^A*U^Xva;5{o40MWVt;*2&FPsxLLHu*(H;=y zs8uXA^svEbp@)dq^J*+9EuDT?XE8Epz>V)vYQRTZXuH{B8Ss2Wk4O#v?+IcAK<U^s z<GIP1?OD1u7wnZ8lga#~Z+)3mX~=8f*0_mu2UeW{9r)BKr@leEc9BbzpCqb{@Cj6N zQ<2>P1`RQzy!)X5ZW0r*_xGc=!)|#yd%D3sxSiHnTE=hrOo>zPO3&b;V~6=y{&!0* zQsjZvvEqZQ;%sydKZZ(}+`m$J{A_{xrz_uG=`(;I@GC|wLE{;8&_##+*6)pmSQI@V zK%}A2M+1@@520DXF174?yQ>leKE$XwJG#4%+{B-xL0SyqVmElg2vb^EzqMH)xzbk> zQCgW83xi90`$DH=mT<_?Fn+eTaQe8+&dYRAF+~p(1Lo0_`hNQKi6EQ*VimSXbVcbK zJ`Cv7r-n`Kkm(w{VlT=>-R(W7ci+CKFoe>xEjds;Sk6NJ<A!+mUr8xidpQel;Akm~ z_m;Sl6CW4!t2OCJ3vUrFKRL=uN?I#0Ysdn7`-lVU6Ir)}JfUpEI;ScX_Z{C!uOLqF z_85|*(QscUZhQ+ANB4rTbdhKV%CT+w;6MqX>l-lwHi!4e=St|{H`Zy>_V5J(&^SsL z=%aTx7*E#EG*id0Xpb$J^XF4g;ibV2NL^i-JtjkB%yRK;*}Z#r(v7ZfkI82EB#TNd zwNp4NVVZK5dV)_}`sd;O`%Ro19o-j>51dhYX{EipywTY%mgeR*<zF=Z!Sy!q&B`+L zH)a~&V|~sp!M5ifbq;H3cAk3>x4Qh?4wvUW8gyy7hT!W`Svg-(LJ(T&42%V^e0UD4 zDxArK5+(;S2K|oSHrf!)+U&%In!`uwg=p7aOZTA@NKUXnd|}*~RkchsG+k3?G!x{} z$SC`<Dg+uZ*BSX4urTBN!5?OAU!uDC`{{@|CKj|lTI0rTCJ<7fY^H_+YC;K_x8y?d zI|@XKLs(0kE%fmlQ{M=-)(g^R7~JDWBj_`8zgt+yG$E}?Hc;|R$GV074X3+p8fvjh zO+UO}Mu2EvvC<=B`$6O5@U@Xpn0GVZ7Y0NWOkBg`o}W4&QJC%0@TPL_03BO9JI&U3 zA5x!$F`ciRee!^#(v!U7BLu?v+W3DE&d<zId2J9Xmt{=)e!_HvYIH3?4HQ8#fa$j^ zrwe%jXgLly1B|ZkF5=c_L%dP@UlY&b&|yyVbC<3V2zJ4faW&hpcI|v9KMW+mxVB%3 zQt5ebjsQ7xveED{)uCQ7F)=|EAduTBNJDey>xi88z3#Br^d!NEhO~d>wt`oZ{rd|{ zl`2{qjPV8vl-T$0#}f)c8(~LNll|UPfqw>OJw9tZDOlnNtB7M`-+<%g*}vNia~dm( zx0VLs1Ei%#z~n%}%w_@8O3D1)6SDuJw|`tYX4V~PFV}0&;?Bo}-*T+om7M~|6Dc01 ze*r#eF0Y(+R-$NM4c5nz<>`lxo&c0DjKkOC-|qEE^<ZUy1XHBnb~U%seDBzC7g7<q zkU_?-T}1o^vuE%4(u!rslRI~C>ITmpp}GXZbiuH3tTFuhgimL%Wow&F5Uje*&HCN@ z=yaT~7kTyS`xiO&XoC-#t3Lb@w7I&e!E@li*QAu>sj_(BtbAfdF$0mWoovsYIb=x| zdV!rQg_s5h2lFZm?t1%<dn{@Yo0nkk-lrQ4l9#lnQ=ziTu52nyj<2LKq+3j(S<@0z z<RTuiebFUhP9?V`ecXok3+fF)Wm(5+rQQI-Bov^OPt5LUFisxza$kR)W9u|-p)%oc zUTt&Ul8L>xoY?Cr4@CRw-8;%hJFmjYM92z0C4kVHq!aIf`r&4wPA7seCDM5_Mn!6J ze_CEv4K{$~-YqB~N-_8W!=M+=%Q^km4TQd(r*(y%;3>@uA2BZ{x7g^_@buXV7pK{e zuYJ?&`h#6tzC6j=vW45n6+`cqom~Z|Cwk~~OG^-A7RO?@JmI`-Gvv^NUf1)FEd%eL z;GJ?zcbi9Iwx`Vwy*@l(lh@u4Zzl)2ByF|2ysR`KTu3p530is@Y><0_Zn^m0p6>I+ z2z*<Oe6wVR+&ik#8#eQxiwnl_NS6f36+yx-tr|6a_}q(brO>q?{em#epF5ZJqA`Qz z_HoNda9pk30Rap*U$I67c^mgmJ=x9o^Q^hn)>|cXK--qb=5F}&s(n3@_O@ud*lf)J z!zG(PK5zFm0%(_QbCmN!Miy}1KvEg;l%mTP)*FLN31bi+;T~>jMyR)?b+oGL<g&E( z^RC>uF?p*|(v~)#q65hD5jUG3(#GROY1F8L4#}Ns2QIuV(vPHvikchHPuoEx%xp90 z4~-}v2jgU|s~Z!<dwH0e-V$(+(9lUArrv^Oz|`wU!Ki1RUS5vUD_pgVm4|oZ#W3Hb ziBwZp&n`4z=CV*;=Dkf^v4!@Db=yoI8Bd&;wm>L_XN~dpdJdj!v>?`^zoaqv;6AzM z{6fYUC>?Lz*|c34Ihm`j#mj-m1pdoT$T)E94^PMORE7<EFE+AL!QXiEPlLj|m@P== zkB<8OHmkPlk72=+Z#unRllIJegusw07>2pR%Z4LZcT$&NTgqxS$)fqK{Ads=0Yxt; z*xXRnX}cpT%0jqzjh?|Do^81nEfn-*nuS^SHjxbvo8vNf@zSMOs{u6z8?Lu;$(})Q z#5i2QeV&fh{56Y%%y0WT7QHIP>pZ50#0sSId$JN~9y)jI*sYJwEA+|o=50XQh{y$9 zpZk@`l1S_6HbBG!-sfmT<7Ngx!@h5Wl{!|qWD(Q)dzNv!4o{RCH|nrMa!KKFJ6qc! zE6rDZI*l>bt)->er`7&R^_MFg6=pfkVs-Jp*IF@Ee1O;?IW1iZ2xh}L$-~uQM6(&; z8^_Z4?lJ?7n;VO47D|pj*F^soRf!Kx{o)z!sY}f<4+c5o0UZkuH{8<t*j;0l#;k8{ z_qiOxa=6#8Pvvw82~ZH`jb0hE-#mJ;CXF!fv3~vg2eHsl3urRdg(ZtTqtv+Vd>)j+ zVCLFIlT<LWpB9uac+W83=X2(+-%!_u@#Ga2|Gy9%M2i%UIOkZGpjLlr_7=)O*|n5` znOoYPUcbK8I4Ynpe);0XP;8*n5Ba3Q?IVwJwg+963rs}g`Ujt1=J~(z`J-Y=w_Gbb zfuRdYOHknSO<v>gVSL)EerrB8p9(K-+_?Tf4B0Ed=0##^^_Og^xYGnM%n064^Kj?p zzR2kaKn906ZSB%y8@x;R>~-i?ZgUM8gP>*bU4H#(EF@FYsZ+h6qdGgEbo1I4Dylq2 z#r9EH{%NKf%jsdECyv40J$H}R7p?UI@*uIZdu86-DZH}wg74i9kDpE$A+SkyYLQVs zg+XMb5zeNUFP}is04sn>XxOly)S|0T^}m>s!oqGc=Mze(<Q@8B##H9TwDG>N=4ko& zqAfV3rX=nG?Jv_3zn|YJS?}MM;FMUGC5F!YU>UKCJPdTYbNSS%X>oODJGD&-TBZfw z9)9yB<gBTd?6<8&1`Bp@wBX*|yZhxPdV9ApQB}1#hCbY~WwQ!Ppwb=-fK%e8*sFjD zbfS13J;c$@dy|!wgs}^dbw+C$zh_c}+e3mqTOL4GO)m6zQ}6DqgE#0!7T*`lot!1u zCVG$G!r%pw3ih^dHq<(2WLBM2DX=%ob9~Y}+7L$0=zbR98z&Vm&!0CB(%S5e@|NBA zUG>&IG{@~YTaAlp?SM=SMvunzZ~Vs3rk^E8zCOzgmHr6kip#z4xdCNY<kxYZX$8Q) zg)JWy>*MbwFU#DzH*MLM#Qyc;XEfJER^uOJ)HeOcSsnM^6gBNG*r=C2cyQtD*?JU^ zGEdZP=g*h^K5X`eshJa=v3;XRN=FKK7AJr{va+f&;>3=jtsz&gTrqhLXcMSobtXep zB*hle9gh$+S#CKi?|4Z(%|@R`RzqZ{Kx@3Zt}^w`d;B<)J?vFa>$!oXJqr1<xdeG6 zJ#2_^SL-Z!wjyuIn3+-K9l|E8Shk&sZ1Ch9uj)CDlg45A%Jk+7@t4m$bYa9Sc_@l0 zDeNl^+wibt&tA`N+;d*0y2SSB(lc1CZDpmn(q>r5jjn^co2)lGnWAyjx**Wu(JAx8 z+a#LN-waAUvn4s_T{{t9efM3jcZjByPMess)Nk+A*0#)cZEO~A=(3K95ZACg^;}F~ zV3!6vPGVQ3{UIT0t?eJ??5u#h!PHl7%g<`wb+nJYFdu)tsy4}@u1%`K!Od;*i5fJ# z*EU;sJxR!A#S`doWp1uBZ=kA<c{PmizsVmO2W>5UgTQsGx$4c_+*_M0b~1>2l(i-6 z>eW^bSWHB>_<Albts89%)uF_4T^${HRB<a-Bz!Iogi($+B=nu)P`}f6uU$hMu!e+7 z{SqDJAa9<7HTuS{^?ei+o*6%ME=}W;qP%9dj<Np!0|$0x9f@3$dS@tb+1(hM_JJm# zP)oIY(~Rcai0IOB8(LV|pkDp^Yx-!S%l)-B!9=?MvIBSTOu66{)9QMK49$$}*s)`S z9^P`kPyv8QNsj2c_`<kly&BTzZ2w(&(Wl!DfexPY)V}H$x#@L6So-?hm08*pa~oE# z1|8Zub;^7l_x^%CjCyHLrFNUFU4glzp0voP`E_dF4qoA>?^S9t_8+@-9{FJW$fBTt zbvNU4v**Dh7(2jHc_K2$+z$=B5Rmh4Onkhwj9gZgiTKKP?Hj2eC8hjGhczKIPVP_D z__JoohT@Y`Ik!wnqc!>To_T-j{&kD8z1q;BFkG`AN?+GLEKm@rll(7iXdh{X64GkO zZWbu&RRQROqky!O_wVnM-1$hSv~#N&?6gwB;CGy?pkv}@C%Rpdbtq@%Xw?^j0{lz1 z@w#5C_@yP0#)VPvyrPLOCDnIN@ZJOMqjGnf9_pVzIn<23P8h$8(e5t3VVBtc_5M5K zCU$(Vgr(Ef)!?O?KeyZc{Jo#feepTKG3kd<phNMUD~s$dl+VlTICt*Fi8Ib9v+kg( z$`XjY>WZg(>Z|wTw<MH3_>nc&@59sSJR{B{;F>W?3LcWm>vQeWWAeI0NE(yy7|rt* z5flhJi3<w{hu%iV+y^R6=xu>$4rJG`$n@{BiGB(Sma3s-#NUE<uU^0Y9#!(4J2}Sh zD=!t&%CiNWI`7KnACP3%qw?B*o#9LNj+IWUoc7l6`2b=fP&?*w=g{y)*bs0APIl<p zaT~{;llTLhd`V6DBFaVPfm8h+pI_WH)hJw-oiFIg6p=Dcrgp&yV3C7^)q(|?Y*Q`D znZEdeq9y-#(qU&1`jgVw%*R)%MS7?xDP4c^1bN5sVZ$skH7tI*9~@@U)M<v}ix4>n z>`LU-lsfWvcWulvpFW*#(sk+5!9|tnAZs9}2$Te_9F!%;3l+rpzN6PT1L-meVY(F+ z(oJd2chmbfTxSU@@d$oQz1Vl56}SiQzJbchd(Zm&gq89x{?d$ODom2{NX%~-QcVC( zxp>iI!v@L~Z)k+PbFZ<`Kj)GcV4BT3zIoovo5QC66y0_!q07QCVo`J#OrUj8Yh1pJ zQ60d$u;zr1nmF;g!Lv3(F;Znt;=*vO=)kj4$}lH|<&CEC<*Qe^%N`D`3ON}QBg|3w zHf}IhHVY8D^62The(|UxkEo%AqE!6$`SSue6A(mb+ORGvMU-|djVOHK!Zb6pv17+_ zRDn49^NxYn!LO#7n}@Tioa04+N1_a`5|$A@q=9M&Y4QFWNy$^2t@4lcL?ZL@1>;zY z0b|w=H6Ai>V9wL0J}C2nFDXc;h*dm#g!o2i|9L$GzHXv9h+#;t{d!DU_pJKgr6z&i z0;h!CRb$8^)USkf;eQ|-Mij?5X!?tZ{X}F04d&`9lU1uef|Q~UcW`pjVNr+ZcBS;F zJgu+46yn*1g^8)D2d+ENstjg|VI0*0lc>Dd)Wq!x3ahto-;$;ww$#<sfG)BOld;)Q zyL20;Ddh(snXqaAE&%dUJ|lw4%B$Z`#mBpGbRGrlHSJcl$>xxqy6!@g;z$V}*Ror~ zQv5t085<j8|MGdSz5h<jj*l^U2*{cJLQh+J@2I|GzxI$wO+6^KXYgp1K@SfV*XUMd zJS>Y{^x@mIZoQgX4hKm%X@8zHW|n@&#Dxo=KHDNlOpF8(<hS<)OD;%DYdLBjOc>Ey z@#MP%`vH68n6mWl&GII7`ToihVhnA(pI>WN^ka3C0EhgWs^qio*uPXI(T@HQkqF#; zj!2%yq^1l$b@_6WFsbnN1zQS}>tN9y;fwM-x8ZzXcd8erubaB$ImkcTy*qa56nMOz zaazszD4Os5x@HuSd8ZU8#K9Mc$#k0Ot6pqtI_<?h-sA7zDR}b4U)!6TA5h%*gxh7o ze<TkBzZ0aYD)siglgjIoWu!iIY-4+uct2sdFTDKvHh=-n4pu@RxWKt(vghLCkKi>) zn}cVD=8>zrahG^@^(VZH=pPPxBm8bv51i09c9t410+zYC>N9o@Rh^(Z<Yn_v9cHG* zv-@<arCuhInPbD|H>Be$YhLXc00xP$<tdB}Buo_8d?mdDxmVXxi@(0;pxlh`zb-Eb z5>wBT+qb8ts37{mp#tZG9nDKSyX-Mi6gYOs#qnn&rAZhYM``Qn&8qN3;fPWP4i@5? zWKEp-D0}6nzJm9P<_cdsAjjsF-bU-zrDSiIhRls}epfFI7GUrtVN6~Ywwk;ykXCpG zId}w;-J&Z_@UbatRU54E(R+IBnggpZ$`b=P$pUV&=+wn4%S4Q(r9yN8Qic-duxA-6 zy5ChV!4fR5;WPR}Un5Hl`j@^YFBON;dOOSd?_EO@8UGGt*9mhe_6{l}YXYXQEnV<4 zSQp;sdDmn#!r)NsOu=u^&x)>?mz`@rEnDrY(aZlqR#TE*-l3iQ;@R{!?(?P{KJ(Nm z+?&807!V-Q3E2X2XF*kCqLJ!0k}f~sgSApGc`apE#rCl&%iQE18EG%)>@ax){09`6 z`SoL<?=J+cT-tD1-B%#%y~od;gQR-n6bwf1jZ6I`!puU%0>=$_@hQyK>q=A<_1erh zn}&8PjidJ7)-@8-(^LBvZ#HRCUiF=+{Ade{EA-iPC>w;jS-ttB%^;&`rgTb;;~&(E zEQhv(_s*}iSIP6G-!b)ffvk+=`rsW+4UL=+6`j=K?~G$)i6RYD$|L-MmQuLpuCF@5 z=BkzD<wO*w();#FLFKt`P?|3ll$YH+bD5hP1>URR+8^-}Y3qp}^z|Vjk`EtckBECX zi9!918#_#tv0<n$nBI%YFDxF_(7E>ZH1|^qt~%UvN+wwn538?S-Lair4s++unloow zq17M*Z(glxs9OK5qem-A*x-W~Ah;NWuUNDw=Vb$w0L9jclcos`foypgyP8#g-jn^M zb6%Wm%T{UX{^FI1JRfvDyN<_7e-}T+EK6|XKX=YQu;12^_gzwe<(}($>BFSz_bSx@ zyZo3Kl|471hV1)(QZnlyye-m#0Bw%aHB%*&j~H=*d<VX4mf1C-L9Evd$2|nmBaLAP z*MEWL-qWbgU(-k<6aqLas@<l~_1%8m;qDPVwocLdt~UrD_VmY{H=m{s`ph{Iy6dr? zVw;rR7BBAAZ|rwq9md@V6?2S%ax9MM7X9*5UQ~Y89b^i~5oiaus<u&L9e=#XBsOU^ zCIkz?I!CX2o76NShnfqDuho$KPcpuV`x^%)2ACg~LQn(A*r(o-0pQhn>`t9)TfQH> zklJx!S)Z2bYYAgYXRADTf7(9KW@P1vw`^iw{`jYeND1p#94f3MafJz+k(HArYLd`@ ztC5JI)_g4tIt#3#d+-CtzudMYZmr`Q{eCSfBR$6sNHq%{TfS0h*g=hz?YF#pCogip z@x_7~qM`f9`Bh<FtBXMt6CDEl+8He-tv5|So-Nu#ps*RpJe^oomQL6iJa|e)IJC$7 zP46rzQ%`0OnB|hGTdkq>t`@dG8A+y@I0d`5nRC9n%5TxlR#hzg)q5#XXqZG<G17;4 zEHKh1XJgWh*5uKndFo;LZ$9xVSPVcZFzL+d&8?4pCGb}xlSCD{FdN<YzM8@Xb<5I^ z&nIkY+k8v_-3PG~gRx784mmgXL=4gUdMYz>fu-f1$tM^~!U2njU@MRH5SgmsBIn$$ z{zH}|a&?}o>o-g_UOs=GwCY8+FjYHn9+A6HH-3FLF}7~$;&Gl0%5$nT$SKy=&tgwK z1)yD$Y|C6iTHK#!)Jq5|ERqK&9x&iNFalRRFK^!kQQ$LyvB{m-=|7!aN)r|>I&tMn zPUM6Y&<$xEXVyx{4m;KcF^y7+4Ok@F9`d?}%u0V8u^-^(ioWUeFhj#Fv}~GNIxbx{ zb!kxh!=k#K^3kRJ>&v0ZyEQMU3szNvl_W?=Qm}DU<mJoy0|!ofUDAWWF5Z5Xm0gd1 zN=rx>rdDIN@M)X5ROqo|^^D3OV?)Qbv)lakzT;5sa0_YwG@qZ7XU+0xYrRLJo+Rej zVLcqZFRWo6>ic<)HqJ^W%~@%2)6B{{bWZQyr?E}C@Wm>8$=9rLxL$A|`uoFXlzw~} z%>{8_%>MwS<QFqI<*!$4uV`C0XAZ;|0BoxvuU6^PqZx>#HmzW}3>`FklGuN!C;^x6 z&e4d9Uy_Q4B_$ufdwY%Hp4%pIQVx$%*=8I?WkP7+CRi5^zaRN9`QaZju6(M*0qpKV z;PuxpjdVm6hx2Q<9l@8YKYb_nHYpL|dffoLATpMikB%rDd|oS3`k%5d=g?6%WOV!L zck<Og-)#NYPyF-0=vu@~-EzIG>wnl+FqaiQJ9D-wWf`eyzZmi7H~jfe&1sN<g~laZ z{C@tm)Bmvg7jgOWPlX$*mT_<Y_>BMjLHyHqcF%wQev!!1|FC%D|Ki8$aJks#P-i3Z zu@?hvbbHl_6Oo_UF%Lk)&eS)d&d*z^#@$-+f$u4!xqnkAMt%YB<}RmObP}<b93Mek zvuQOzJy(h^3}=!*YYdd^O%3MD+|rFyvpOK+qA3Vuva@N{PSpAR_1+>oarKe=35r1_ z5$|3d+qXM-C+0zo`c0!*@0O9I;a>v>vi@7V126=2Hh1Y+cD6B#VddoTRnwwGiar%- zHG~OBd7HnnBf}0V39=5;N;UCCD^?5u0%+B&(PeutCVKh&Kq@H?C*T**5;Y}Ebp7E0 zUwvNRJuIY@e#XQGRr5ouNH}ND4h`Icm`xj7Kw-$_`O&Cq;Lv-pDdCw&-JaFZPssjy zxJ_hk{xK5D2DUzLf^;5e(?x)u$jQy2|C4-*){DT#e}vttto_W~&>4g~<k&IuLDjjp zhmMwty~+y$aTzn_2XP0Pg0Q9;(+$Fp=7n}$yLZPm4|cA^>|LwQ+bLfZ50duTnyWU} zENs}Zlkrp2@54OfvqjYt@FpxSt_JdpVB1ig->b$H&p~JQT5(Ue8bvPI5fJP5yn5nT zf%~L9Cjv+h5<7S*on~GKR0hSg#~9Zj2CS+?QvzN>-A5DKu(m@+zOWk^znbt7RY}?= zwF{LSBnq96jTrJF(ph#lbeka_73!6}<Gg?FT3Ph8w6pIGIyQ_OJULDvg@SlCy~yc< zO*_dZLu(dkQgXh0`}UTz4i{ArXCPGevL3Ck-;ESQMn#T7Q^5d&2R=t#<l5zbO3jKq zcFmJ+F|MPn#gHFR0Kkp;^TaMC>bI6}TUG1W^2n&dEbRYTi{_#}|Kqg(UWir`ZQ(5^ zk}`vfV`-U4|9tlBZWeRZ)rH>HJ}Dt`j#(nOJh=c}He%K4(Gg+qo7oi)0j&RcZ++vp zbROavK2IJ$hICPux_o|=6*jNvSul%)I!6PCjS7{2tCpILo2TdHb=@i|Dv(0JyPYH! za{CoM>$i86?AMw-Yu41UQxWzH?m~<?reMG5?ZXBE3cxV4Un_=wG&Nxd<;5|73Q~i* zCQw(<lJ4BOHf=#o!n6Ocg0)7sT0jBUq&m6SSGUG|MCne$zUawFlkC$u4Dt#KKLAt% zUP>tlG%#$8K?0>l<%(O5Q?@$xvFjj<7uNCXUJRNwz42bxgLjatlrb_-HYD88@T015 zUjGw6G;A>zQK*@=>RD({Jb6hY(>vfzuZ9O^uWCPi{@e{l-TRu|zx^g~bCB9VPRqN5 zH}Mhxi}J}Wk3W9;w08CC(eN-H_Seu_Dq(EfTiHV^#52HIt4GWBeRH+<r@PN`*==*x zC(rdmE#vjb3BNRFGn=G67zbnZz)YIl3Jd|P#q-t4@KKY=2Y{r&2$mqoL4ZT_C)T6K zc-XOwg#$W@DF0`vn2%q3|BqeY!GnkE+p+z1zzz)A@VMFl&V=)ZU2OB6j!;E?#_gWj z_q0_Ul8^s4Rat_4sl0r!b61}~r8AVOjmMWL`mMld^UEEnwDRg+9@{cRB4;tk<KGRE zii6ymo-Y6JXD6d+T-4yni;`_=2y4%NIkTWFk;uWwg4cL3B4XvzrLo#*O@C78tI3EH zRa;?wAQb$yQw&6dl2B4kZWJ5r10`3|lhW#%h}G29@%O#>xL6imK{<hw=T4!$B$%Uo zggqiKxp?Fz_PV;dW7pRoVk6>`C9fHY3>fcSPOYgL3e?7=3D#-yYCHYmihgLwA(Lli zwc*4P=xhqoLNjJ>Yx@?DHqtRjj9#I}fez)@oi3a-7&8W5Wx=u04=O4~D=Ql}PuP*E zn|t%-PTu{F9pF&rEonEHA~P-HoqnZE^1CnC)r!**KA|W@bC&mPl#O)AzJUg-CQi%& zXu%tH<EBk0cv@+DZPa(WLDc+-JZAIem>+uq1`wKJ8yey+H|3=M3pvx^`;*ne6b-Z> zG{V(|d{3hu^xJQEorT@A^mbbkaQ@&Paj!|QQl!$Fkro)jS!mZmG~nC1M~@yMZr*zH zWtu>kbZ#g*4aL_;EUsnScS0azhfRUO04h~;ch3AKwP(sSXW4F52hWKIhfGd*w&Zd% z3HWrPpd0HaZW+PE)ZF|oR6sJ6=I}GSbboQBfIurK5*;mF;YC~~2@AUsu6lpxGKzP2 ziymed*O&!ZsE;)lT;7}Wg6Fq{kDI%{nK?Ll%p*MgK##2Ze01x7Uqm9{8y{b64+*ix zui4r86+;xPCeHpT9ZTHVu&hHb^;sl@9y>31HaOLntp)`J!c20wz72SDmuN7oGk)Pu ztn5sR6Mg)|7hOvhHu_jmd%Fa=bq{Wy5|xy4X6>OzJ0enxi)R=b8rH02iOduD7Ibzd zJrrKZdMIazJip`c>noD#M?_|(lf!u6Z3M(2Aw@iIl4p#*n~oPwJ2vVb6zCkGn*%Nm z^aCvyCTw`x$OfqlKigetkc1dVk1ytz2r)ot==*UG5}aCEo}9By&VKr|710(e5Bl`! zQy%{kOEvV+Tz2@0gVyY3Mo8ZQSsotUK&kP7d?v~a1Xd1`Qd3kk8W>BZjOb}mVj)XK zq2vh*%mK)1@tj(>PPajKRoY`(NK#HvPraOU10?mEUf=EG-t}m~u<!P8T<KtOK`AQH z>a$H{%DU%h<@oMhy9G#+U0kV2NmiUt^2nTp3&$h6t@-|dj1NuKq)aPhW}^G*VyWf( zXLO1FG=u&#A_DfxaCfo9jEqeq6wdzbU>^U)6~q@R@7WcC9%6#DHU4={I3CPNd2;Pq zB%(vwCiS++s!!h+&&ajEKhXA@`tI1#l9}$amhIME^K)cQY3HljTseYElOqO&(D`~! zjD1il{86phrQNlICx2<WWR8#jyZ-7<-8Vh-xC)&vLX`zu51jl45;G{Vk{<|~n5c+Y z)L)t`_mWMhQ{mkB8w)3OU3kg?3&$v|S=hkLlu>SEj5i||q8XYF>Zf(#U$uV8y6PPL zFK#^_R?C4VCQn*9Nid883uc1KPPIyeaBwG~4T!fL%$#Uth^GD42ry@iA^VN>w6e6c z^d1v3HpC^f#8BKn#;!WYU9`znTCAi042YEo(BZuY6*!*y_^~0#AjD4OV<*KB)7sq= zI*LfdwpO3wIbf2Xv3@yh7TWEkx%(S1u)GX6nj%{#)-!m|9{di%ckZ0R#apcmh|1Jt zq8RAhi;jY1pK&EOk+f7g*FE#psU-v~fD>$!XCB+&+z6CT#l+srA5aK=eMK}2RwKh; z8~TkGtAvR-be$^K%XH0Ppr9@6h7Dd0+4%!BQOE<g-+Ws9{tWC1K~>2Qh7_V3=CgQO zk5i<K`OEHumV|3}{C$$B8XEZJN}!<s<t%_lODQBw`B<Vc>sZRk3bQyrO1y!7^Ri16 z^bhWF^P2QAMLn|_i5q-2CRE6bCp~NY_z~A0&hi8?hRlJfd`AQ%&o@VAz(stb>{${2 zuy@>+pU6@=oRj=&uB4_W441fag87V|+y1vR0pF=a$N-!%WFg~05214Nyo(F_fd?=H z_)Eh@y?b!zT;-yyY04pRfF?QqDeB5bd-k71U1g&?`pRD11xbES_5*l;D;6*Ifc?sT z-owLf=gmX(W1q3Ud+g2u8L@eXUz<4kCR!2K!0U3C&VqXcbqxVj-^Y?KX4<+WSNNhs z)qEuQ;PWnf%Ilhzxwf^RutMWx(tz1fBdu)X%*@~VUwNXjajVpi7xoJmTC@x)*&|^n zdKmd|{H!x1q5XUJMt-bFFgbq9J+ox2xN?l0e~$ae{8Loj=Adw=9A|nqsXrcWR^Q%N zOSFqf<mOuY`23%5(-Frqw~;V5nY`8E+-r&tXCHMLae6^IU0J5DRc5bem@9J-L3_Z} zwXRo>t#;JzEqM7^Slko1e_?%BArYn3a(EetB#k(evf&%V+oSY4CyMaQG#%R=TPFZO z8+AQ(b#bK<5CpahFuf)J+<DCH<hW}dHW!>u_4N{F>{lPHT>ik#-O0@(Tf(oq#D33f z!9Uf8zdHClZce<u>(sReW~_z^KUpxbuX}Y`<yMBb%^i(xv0=ALcY0Lssx=}lb7A?n zkbh_ygEsthS{XlbX_=Pt>~FRGLhj7Ic*FE3h{YTQmta};2B0_Mi<#wSUL<2;&VCQj z_wf{boX7u3p>)A1Zx@1MJzZU4*&Jjy%60UnqrIE7w_lg=pPRNu81~`4gLX2L&JKe@ z1epzGuaQ#=CW2r|!g>WhMu`1z(|n)We_Xt*7hKi>Ef01+F?qtYR1mb})lJ;ZTqN8A zPl1DFU#7*(U}6A`FWJ;a?4w6C6L^(~f+Zt*?>^A7#Bo|=(tT<LS_HlVSHj|Dhe&$( zirS#xYs$0k%Oj0rY6Z!WR6$(Om(}r~rp^8-rsA~M6#>Xl*<~2ni?1|1`N_obWlXm9 zX{$$p{Z1u3k1fC)1a~+A9}C{3x~9qO$#Am|0z%+of#u(s{md1W{D>~EIx!9GZhV@m zKtBZX9ZBIEm06RfitKF;Qb|D%!N%w8g0x0d5(K6@w{D$=;34NpncaS?qLNZOB~G(8 zWg_M_?|wet0&5@nbd$&gW!K9db+gy6|H|YTrK~=V{Nny-kYv3w#CrDJz+Na8?Ts{= za0w5-VwxU2q>ddmRdx*6MEK@^BTfW68!0Vm?1DOm?t<#4SI?<`ge5OC_<PCFQH%r3 zRWDK5pwUM+0!5k(>h}6&*p%1RC*}#3Fye{h&n|n6`2|T`ENa4bQLqo_OP!VWA30)x z^(=AGY1T6sq!{huj?+{&cjy6THlKYkN{bm~)_KW=3c$k9gMAxo7cPETG*bECIk(`D z=CYL|E=fjysij6@4nT`UvlHZT{WubU;lo#Bomigx(l!ZaZ1afm<Hn5X`{NU1A&f<s z7|3b5zNoD=SY4G%;R?pF=t9?isAIr4g!6?UZ%?V=zlo2&{Wgc7d~$;>-$HLwV{k^q zWx|m*i(aQs(X)st_1G!hw{PA1_ZF(5$RR-M*Hz_q8G4P09+NgoAmZt;);#9Fth>PM zmqKyw{P~#A^gCL*!_znM@xP=ydx}v1g@#K1qV$)=Ei00d6*ec;+#FcmgpjRk%w&W1 z{>*-+B#pF6n*p@)Z?YbRH~&|%p69OuGjB`_KVg-cB0bvN&iYU)-gfF?@(K!CkD?ob z>^91AUfDCmqP?&CGTzS3)U6+$p4-z9UunqL4)&KW2yV^x;CL7bfBaTTi~iX@bf^w} zi9myD1rBmpv0|9d*mCy~6gcESKAm~gszhPu9Vtmkz2Uv_{E}lvF)pXVyONoiyK<>s z*Nnc>g~PVFmeUua+=F!ajJeAG{W3*43%bCz=+d(%S=|m2=*Z$kiS5@{ty!ZSdYdj2 zs^t-u8H8KdUs@5~^tgnMdLW}%b#=Gg07=frM6uBZ2C%lilRK)uPi-lY)`H&S9#eAT z#uCUm(MYRX$$;}px+i?D_B}M4#@1J4s>uYK6KfW#dCY4_yh^7s@@TN;Hw_u_<d~4; z@BT>%_AuJPo3RW-nvBzHU~LMV2+oDdp$^4cVL;?&xOaJo-rv<nTx))*{6M|LXRlWd zWCnA^A{j@hqWhHuAkZ_+Pb%{ARM>x9c_=JQW#LXX4YEgfhPUio%5=Z`balCvxrp=- zQ4Uj7bU+aS&liTSSQJHW)!lbWYo~DZ?t6@H7r99D1*h{GZh*K_!l3$(ivq-yqO3eW zzqPK>g2cOX@(Crsr;w{ia`<^K?%-YhKkN(;+$L%bJT&EfqF6kKB*LI)vS#r_zpa9U z>Nbbvk@I5AltYkaOpkp)Ku~{lC?cZmbIr^iJ7*#{c5*7_fdZ;*+0usdbYS6_b1`Cz zZzx_bFZV=UMD5nJXZkAW#xG+Ut%uD26;g+o_x;y`f|W~_wKyGoDuC_x@1~T03DVoE zU#H-(L0d}m4BA=hSCcKODk_qPy)VbbO_hl<CE+Aj=q0O;WnGP9S>i43B76;8eTaQA zyLWf15uqEv7!z7qd3O!txBOFJPmfyBFV!OUhT|pq=pw`12Op6%a|~CmT*;D12y^+n zu_Zdo-Z4lIZ2LJ9UVHd5-}(0i1S+pjslt=DRoI8C@xz^i)}}7)WpO22pgFS0B-85x z2B>}#fhG`=-*FXOTwJKM7{R}~;&%V;NiBshpLX4Ho#pw31pWJl<^)K6^4uHRy>j=F zsf=5%BlH<I>|S1;Ki-{%Ut54786lh9OyfsSnKC6Xn7c>MEB8!!_>M3^9d`V6?8o!7 z&JCBce%HLbb!7XLh3LkO#JVetU*KKp=H5HKX^>~}2~kuEc{{}%<XQ=tc{#WtUGZ$l zE+}BP(0UkNw!K@@#>u=F^G%#N4I#X`gLZFx8u;Bzqi&`;jL^Uk#QyTCc0YQlJpf21 ztbuAUBBj`-h8n;0UcdU_VcXhWUBkU(Ly!U!i%XX_czLB^Qo`XN8UXyQT6n92sdW@1 z3t{|~VC~-3B1BZ(_whrqZ5Ow?h1DWlq)vtDIi%H~kxE3UMz<8#d_HvO5ae$`?kDX1 z{LN}fHz^!2nKJg4mfn8uxyGLS?!n?yqW)52f#a|b14c~roRxY$$<uz%)Jx{oH|NRj zg^<NEmAJbi<sGJ<jhHByI|I{+MG3JT+uQW?Vi#Ti@R0IzmIB@}W`mH3ehxM;*a(7a zrg9a{5oa3QOVCtXS?ygnLP0S6oQH4H!<Q;jSlh<jY%V_*Q?*h?$}$HkZ|0RNK<h^% zBD6*{!uMjk=ubop2KA?ZkU`0oRQ`W#Bv8AG#nnxkZ%~5&uz8?CTm9HZ|KEj%INmi( z6FeuljY8%_3zDq+yzTgPi7qE}YVJ(=nW^k41UP;e=j<Ve$wV3W5tEJy`(w!15ZUQJ z8U2|)G|r+W*U_>)Z217=A)?Zb&`G}(Pr8QwzjAYcTiMD_LUPs_IdbxhX|o6VmAj{U zdgXX|bz0=&!iIp8TJz6ZT)S}*1M4mw+qW#9((7O6$i>|qauqK_ZaKT61^--lBk<%` zJ?-Z6AEgtj1D<QJDFsHlAx1%<Kd8{@YV3YjG4WDshhF=xXJzYBS6hqk@}R4WU0eeE zOFSC0h8RalteL;LqX4Ru!d1en3x0FZ)6l(vcdC)8e}!I$sykctaq&Vw6Q|zzZc$4C zk<PTS@r&??*V9#3=+sbbu}aQh!l30$C>ZB+)T1@!v&v&O2-7#+5t{3Nf^g<OLnqVL z+W6YF2H&lH^2e1~hMY!@fG+rl$$!(2jcBZmjIQlfnuyvd>iTElp$;8d&&Hr@vdd(U z2nkx2$&+`y9pCNc`}a>_P@;wO>KvmZ75J*ACNTGX%YL&CU(4q#?3uoOdk!yzdZ9YF z%ZdRs;!@ww&g(5Wi9?lUHOEjkpXTS+GNi8heyTC<rW$FmCC274N)#*uX}c+m1julO zD8<L&tyE$dw|#x;zaQ##7+N`vR=S6`0ASLa4$B;U*C+JIk=mM?3SJUzBoAU#rTAmB z(kq%BTNj^MvdC|LmXF7#FI#7KKBELiP}*;z{mhvYRYPM2_qtiT@a!;#<(Mac#i(8` z=_6uv(jR|;#dv~kfZZmjd<M?8bShjM2+1KKKAz>Fk@@Ye&J#vxH8tgJeY#CX3POdI zP&#USmWX)Qcbpyk{OIGFoEt${*&RjzOSfn}D7t3;%>D7*18m}<wHl(4n>_gj9mm;^ zj_u)=sH+oBM%*ix!f~v34%N1#@n1ZDWLaWLQ26MOp?%_%6n|i_+kj5jixWzQ9qAL2 zl9rynzV6{WfGjD)0A0`IJC)4+L<j7-iEBf0qcGa}FSepC$#vg|gwqZTZTR#Fea4>8 z#XFF%tlO{w!7ur*(J5dL!#1B581#kVV|E(eW7U-x9S2kPakxzI9`!uLsK8OR{s0fd zKy296aYKfPDW!OQS`zpzmjy`Y=_zOmf(;+C*C!gCEf&PYNZq5NU_?k-U|%>py-S=h zV@5IN4?DZ}#ZhC7-`?C$V?55=E&M}il9bS?C;}M2UyoQSU;Iv^4?zMIsQ72RlsA8O z(M~KGdk)-;9K#GAtcZDz0AOrhM|naRCeh*wF4PsH-$)N!_$^hU>EOBMV96PcCUsu{ zBkoZ_vJ>DT>Vlf<Kg|Rk1qluzyZZPMqk|{c@kn;&eE(b{ZG8H#g#ra>0zUgz5Uu>V z3E;LNwD+Pd(o-ZSL|I|ezgqO?kZvLp#yn_Uc}+nM+{Lv<M)nbXG%=8_%uWXHBwpF; z>gwxS8-uq$ekcl#m2Kt$#+(H=mD-&maf<WzRZ@Y>2dURJKAeqHP-^H6_^DE4ZyYm& zmIw|36R20+JE<1mKkX%BVwQ0}!^NWGgOQ8#W&G}Q#0DnYZI{c)6o4yI`+sX1Oa8f< z->~=M!CYEG!0A6Y@$jfx214dRPd78JgdaDv#Y4Rdq6wb5vkr=|9p*Qtxv>$6PnkeR z6X=SCW!%IjE;ilHZRbWNWF~zvOk>Rj5Q@e)L*SNqnD4W^>+>Kb^%2_ISo$qs&5NB~ zxJ$?5q7SsuffLekSGcrSZ?4B53j-=Dys*pWF;`ug;I<^=u28-#FjGPD`SIf_(d`Xr zBHbm9;%H%J=9FxU^suT-sKS$-IvJbl79}sao$0N6bWUxAuqB6Ejf6)Hv3koDn~_Ju zj~*SvbdpVhOLp!(k6J^s<GsZ}x<$Q}7F(pONF0A(-cd^fhm1K@mqO3ac}BpLG=^n# z?M8P8hS1lXl0hSqYCFweEA($wjv^w@yB^rPS5Zd%M0B)CSUe<nw$a1ib(y?EK_LQu zspt>%16S9L7{{z-+&E!`t=!Jn{9i2fi|Z=eRIF`X=+7`J!0L7L;%vVzpkj?nF1M?t z_RtS}<ZBv(bpqAKrZ2VrKPxy;s9|MgWSDN`FNniAdaC<j?i_0x`2SO6@T|)H*2E5j zf+l+g7!$>y))kOSz|TAOm2bE)ZJ>b4YdrSvA!&Y;3&bm4zdrSIqQ`W*dVK~?7jX_A zJD?CU$mA1U;6MzN5vQI?P9DC#D9*dUZFPy3F<y2|?jN$AVEFI`#(CUFXPq>zEFi)X zox_C4>;W^Y{xdQC{oA(z5^Mf<)bz%$Uu7o+NN+c%C(i)-1S2(>PoV=4%_gpa{cRN` zju~$8AvK^I2zHsYlZsGqL{NT(!3A=8=l4bV`ECR<!2+g;Buj@5lSM{OP786b?h@+? z-CGZcL++}5NMAK3u&ip=i@VqfN>_xS>(=cK3X%@+$cu}3SNs>P72bl`Kovhlh78tQ z4pDG{@}fH$v~fPu2o}y=WBUHNu1xT;fv80N3O5t1brCjt`0DHKQ!*K*(B+Z-IkU7a zZ9b@unTVpvP-(Eny9-M0zKi!0&p*Ow0qe3r_WiEd|Lufn^!r((2lOgd`y|6IyBBkw zG!C1;o4BUz{nIU;J&=1qugIp9YhOtvl!UPLD2LXsT7_U2RDIBZLMA|#;RbpXW4t2x z<_%EWfgPwVq2&_VZ4Xi7TO87M#CL^WguBJdL36iy%^KFUA4s@Bg^|KekPqYtzKKJ4 z6=HB;;B9^(%-6R*H;RfVpMu4rP)X6J(`Np61o6%pvu5@d319;aIx3ysyLl)Ok>RC5 zO_iMQEApK3iS^L9H-V!ENnk&hbm>xrfrlGBSr8SE--iK{pO=W5{Hmn>Kd`<{8cm`b zicM3WA6&1TalcoUYu7GaurbiN`O>Y{>1IVIk#qeI-dU{OTTJOtZ6A^4ISD$Pr~CIK z8&e7&y=$&+@FWVMZl)^Zs~pMfN2+H*6aI8)4tUim3T=+VHvn$X#Au6vU*=cO(f$PN z=!K&{-WHf5U83wQFFt+<Z#b?J?V_Tekeakaj|uWmlN57TG;as*Tw#Um-D?z`!7vBJ z#ihnQ1Vk*}Y|KzFtn3Q}t6c@%v#Zz8P+d5G9%#e^Wqd=I$@`~oAB$o}Ft^ZkD;ZK_ zNtgP=WBpH*!3?!9*d3&*x@%>bY3j6J-kV7uZ*`4~lQPDGPUvux+D7T=h3((pf`Jal zgOTF)A?D-)ARsc=C_r<NZil`V?q9irK&nIKSH&&aA(7@i$mL~<x{8KI5UX5nzrsDk z)O#IKDIg#K!8_;VjMs0rLuE&HO=k5$>Wg(1yUMN*uhegza5q?dyo%Ic_4{d`EI-hs zzIplUGd;cg{3i}}{*4Q~SAMgwLXfm7rZhfc3%>~L_zGsLT@@w72-zdHw6-u?!D`KK zFB;+L(@Q<Dh4+<RUY-<n>Xhoxp-6hWE7>euc-1LS+<g^zW6lc)tzgFsF6S%i!OsDR ze(N(rwClB(4b17&C?&Y_Qe8w$*q4Jxm83Cg8Zrf4DGTJn5~NEFp3BYiyHAKDc|#-G z{$&QPa%XLmqtnypm33*;nXuwa&)AWQGvb`Gek3iPiTgd1C<$YoIal%wz9YPnmXuTy z7k(R?{g`0~%yutzr#p~%cEb42GpqQx*uq&Z-T2>`)S-R$G|OdV+lk!Y$O;EYVKHu( zw7Q5W{$>{AwB2{s(eyokt}PJlu3CcY9NQ`sCD@d{Tx+{CK9ay|OdrvsVo31pLRXvD zwY3{TUGe9Yy}Dwtz>kc+VvZRzg*3Z9;6R@|X;Ri%JS8E<&bOeVce_X#N}1)$3!HU$ z=aiNKhFwPYz-fhOyLt0Zdh*+wG$;Oz3EkVblSq^N@ATu3o|!yIQ*()8l(6s?pRNwl z%(&&0jBO#^{K<peY<i0*`u&ZWTwH&_Ke3}lR32h6m`8xiMazyDZ34QCN*Z}B(S}uM zIB^rRc%1<sN?>Q*y?YjKXG(Rc58IZFHTJhDKass-a(Y8?iM4li%ufwN?~h?Qb7ui) zvG!w8;#?7tBi+|OiF^2^(tD*FbjeYbn?fjpKHk$4(S%(haqg_B(WhniZitD*i1`~g z+?KLY#n|2c>A}F8FC8yLiHKaA6P=uF{j^b`_>1GrnbJp5fK)U(5eF6hcv1UnXSb7D zC9b(6=f!g^`%b#-%<eC~tV4_0tRXV^mk-GR*%Q97Oj7Fg^>k8{_5UI6y#ulC+wftP zN;D7^viE9OiBLjhBqP}&g{Z73qC!?E60#yAdt{V(TMc_=WtOe%k@+6iJ)Y-&?&taa z-uJ)PA5mSd@%?^2=jS|+^Ei*=$F-<Wf4x=Yr-r+;)A!^1KfX@uQ=uJxHyYUOnAqJ{ zvfpgpBjH8kT7fLOG$r?MYWDy7#Ro5TyK);I3Go$V6(TxKmpPFhpYdPv{5n*ZCk{S% zAs3nJVpM+pU%&g;5C6ZjDf<;ajLe|~M<d2QlKhqae=|)_`@*YR7lu}IuaRwm=Nh9b ze~f2`+ranMZZI0#KN9EsA84k{5N$)OWuI$7QUWw6^n5(!69Qobhde~>3MBdd=j+u- za|8i;{{r2KuxJEHhzS@~7P^#aZT)XHshPHy@-QDO<g`IsJO4wGiJUxIoHpm`^pU@= z@V~yN!N-x_vm!<<>9STjC}wVDPiY9F@)(td=LQH42?;w^{}AoLP;UFjEgJ1C1umef zalX`bu71u9a7|3%1F8VR!Lja&<_l<Y1@)mBiZ~wt-_TN1FTgBHKXLosOG`Qz59G$i z{f&A`M6|31z9qEfKSHS%FG#{HQuw_(_y#gzAUMqrp(gq|wuC@Sk72fLee>+{PH0v% zVXg&Ua<7*17c40DOJe>=Ak3NIcgT4G&W&R{G?*m<w+2}|n3k+Tx-#`%ILb)L$R?l* zP%BkRgiavZfB5tK&{<yD=_{qz(ztweE~;%IN~;fP8W-O8iT7U@$T?};^jYZmdkFA# zcRRr%3fmT+3u-|AQ4BDfJqFY=EJ#Y7i;5!%-NETy`#%swM!uxAPEMY)>ef+;-q1($ z(f)qrY5Okv1v)A!gtcNo>DVHS*|D+47+dMs<ouo3>Aj!8uRO&7E$#C;@u1QtBn+cj zgw`WolyZQZ%17o3K<Ueum;1}M?e%2s0?2g69Y<^!B&%xI>;L7MAaFDg77r-KKrZn9 znB<Q=i+MI%AazKI&Jw2Y{>|lVcC`quo#Tp1fqMk9kG~UFFWEAPl5<{U(k1aQebR3V zKdkG1A({l;VYnM%+K}hSkpq2_kjR8y7|;d;SD#z(KVDi`fTG*ojkUY-@?Oj5I)dL! zZs#(>C&SWcwr5q5^>LHe?1TL`^h&{;iIBWc%gKWgNaTMYI{-@o+xHi$#AYLmvHTBa zsb2&Kkq(pDg4gdx2^UWkKM+mpm6HEjaV)GBWY-!p!eSuI)Qp@{9O&;q=Dd6xE)O_1 zkQpH%mXD@&a3IK6hrfL30+%gj<^e370u}q3N4DY0aUHCtQBWlzwx#QT4(FRld3$F6 z|Ie(`r%NW<owRC6LZ7<1|D@(|T2*%63{JU3P*V`vh6vGr<!Eu_=c_)O=3vqPloXQM ztgG_%?no|%NLr+bRdUAEC<?sKzD2lsoGK9*$L@%Rhz(p_p*?18ea@&zoi{!$-H;>b zJ@jMoIau8ZwEfnGCjcFgM)ebe*6>D^i@=-Qc!OCaNl6#v^zd8W+#7g4m?pGl=x0|h z*~AQcIWqD8$>0>t53Gg|0?K1BB47HbZWkT7XpoLnj}LvoiA@g5grVDZc97dko6yp; zO?b~vC2vkzbEvH5g-YU$+*Am~L3%Fa`SXZVch#Jo?Ck7N(jonMan$fg$$d0|z%tP( zaXtxSI1oFqFv66sAsIyLpM*hF<&b+L$Y?MG`M&+B_Ooi4%wz%^7Gm3|YN8_|p0q58 zyR0okt`2E32A&{c0?q-d67OD8N)PS-QuzPF-o|1j`R2XSV>-pIPfI+ZKK<Om)q}hM zf=Z{lWl2ywfKLV_h?bc!82a#Z|G)sn;lqSwgcQyD5xNLp`ud_je#0!n9$FzTOi!XZ z0ztAs#l`o5D`C;3%qi{gVh!vjDlHn&n<P#lvqq}-#M>K+(4dxL`=Z~B_yh&|Ii!^Q zr282dREj3F)=9i8nF5L!YpTCIJs*FjS7qi8j`FfOYsZ}w_1tm@9K50lefbizOA1EE zI1_sbrUB|m&SmL<nu)-l9L-$pJ5!elL<)k6fvS<w0BEO(oXW5Uqh%u2*{fMV@YVn% z^A^)gK-E~>AzZMAm4lqwduvB`_bm*q;R>P-=dq)bm6KCT+LSVaQ#c+g37`hYjqDc8 z#G4DzN^@b-v2d#7?56U&e~SEjJ1JkhLhE<U!a@wBDZCUs#z53KzqIS~^U%;yI9E?h z@Y45!lBvYO$-!YU{Z$XRH=Yc(1#MR%&NJIE$i7G4<9|r~o9}}3Ox?E`9j*3Twh7uJ z+bMUd(5R1Rw;5<dyI=#Zi6Hhf^)4V=>5e(OlOX`a9W=PBKC<sSbc|^A5|V06eagsG z;*l=v3+;$<k9Hm*okL~~YO4W@#GqBF8g-KBpyoPQWfanwr4lvze^cTAQ0{o|9?GvG zmv!_Z+bF-q5n%M-`&K844Jobqq~!Z5pv|xXtrCLS+n<8=_L1!TkTc6jOCvbe15?QK z>;ahi6>X$Ag`gwAaf)lOf6ZK7H&K;?#)NSIG;at90P=a{wK!v9(gRL^oaSX`sWPa$ zE^yji{^qu|*~hL~`;(5aLH)y4Gy=$z$pvYUC2Wv%qyMc}d=GLgR0PHeJ{qz?Tm&ta zF)aect^esS6K#**gVxui^5*n<BMUm0F0Y&(i%V$)xlFSisHiZA`Lq`WW>b1(@Mr@T z1grbu!;={QlBEOSPA-jx_H2Pm{Eb<p=D;7p+C2#Otd+)xJQ~_fUz(c04Dv^=K*CJv zEp+wMQ>dynCH_;&pL7Q3MDThdQVwQ#>8f(<pnKy_PDw)C;XaJE09GeXn5a{CXMs}z zkH*9^KSdhXZE#^=Nr)Ffv)r59#=(IzG?P%whJ?UG_6h8Roxfw<QIW!721Z$SS9U>K z*jPhSj*AM{Qq?1$XWHR>yc&41&~kXdxT|cAtGW%jGRSb)3Bcq*0oH}+5w#pE2BB&r z*eD;XBodfhLrScnDLgGLEkOp4>80wtF3&*gGWG<2<%vLfHg7+u5f~i5BqEVq#%*$5 zKd*~71()Ve?R}bwfq{qQ1vW!aB83ibhFRgmhi8BTL93B^!<i-U3P`&gvKqcD?7V6e zSd&N@IWfe7(|&F2%)hnp>-=!3G2o(uiwY2zk0?yZpv3tu%s|mliRnA&oJ1vZ)lMu@ zI;Q`eF`%N1i~z>RWmi6>J{8sstMN5t4*L-~zs2IUFmv{eX;}-u6UC=xSeN$UUN)P& ze;VP02&>A45wFVn`k#2l-!r?w7sePDgXuTr9vdD$J|J9YN#4JEcSRR(3v5iVB{Gd> zFt3W)1}ahy5T{z~yX=*W;^Q(qQZ^AIxoWLW$5jp*PLigO?LtDkclU0p;w_uFpFqel zi3{?UC7Ev(tbPc?yKhp4=pU^R#5EZ1O1<!IeM;$fa7L(qlBzT(#W}Q&NXkm4>!$Eu zhbuw;XkK9@T816I0_4&NVB2=Q^VvWT0P~cjvOiC&GGr(ilYQCIG$y3actZ6VkA5it z4gi)|TO=`{InmJ4`s^ddpc~p<dv@)DWBW6^kib0a_g_H<vlfj20td1A9a4mz28HyX zKGQN9oN8*6;JAue%80?59auctr$#*kBr$03S$5@&;iG}Oh$Ic3N?W#UiJiv#!q_`_ z7dRFm%jb+l6yP2hdTeNnmVsP<=Gfh3acXlMjF2m-WR_R|af(nzl1=_DmoLW+LNN?* z5UB8^h-^p{(VKbZXyeBSD0~F}j;Y4p-d?;2zR>4Y=V>7sPR{;6s>d@*)e-wbaYq%? zfp{l4hmk3vjrm5y0`uqCZP*S_gC?k8O!70&9Q7e(D>F_#Ceg)Y@WIP4Z+YfT7#qen z0rh}o>a@D48(3CR;Z`vK(@|pP??XfEUFfN}l6u6JU%9Ew9x5+;KGWxlKo}MgfS-%_ zjPt9+gP9NO0fro~B6#ZH>dH=?z?2ZA?4WIeVnjOf^|n{ru_}<F#>$NoIyHADnSwT_ zIMM(zqU->m1-0<n>S{<}M8Jo`jtz7@h4bez`DTFD8JJVxP_VC1rQ|^7<}f`yK}rB> zh@ex5MW!cJ>lv&et;OYPZreb4k?DEwP{g7N)qBV~MMoPN8xQ``=0}Ql5=5a0y*7x8 zx4)w9ncr$Y-bZLu{J{%Vj`fUMme?)L^*cH9eCos&wkxHDvbGHb>IO2PcgvfP>8Yrx z!D09W3-qGxYoy$%YL^+*Q&D#zY<m06T@J4;dHU^ClrLUL-V42gH|{YsY#pMZ-O z<=07OOrGvajJX(UE<lGV_}@CYpEakK8;Q`Fws17vx$)Y<1H<nRRIW@c{pfQ&y+ROZ z{(j&0eDL9G5A2!eer+Yz;beE&VTU>ZI%6cvz)t`kP_W7|xkFsYn>;%=7Znp?XAjU| za%phrs!C#SU-1!vcM3iqK}YVesH(Az#;%V26;Q_=e1>BjYARLj?F4Kx*01B6)=ZWg zQ2d{5DeX9efQsX$p!EO~Ty-5CC|BsalS8^wP;eD0JNRoP408a#<A8gD1|pDlAPp!9 zDp|@NQ7}GuRH{z><_<&FMl0I1DKwAYLAgjNLKLoc4p`NCN7}2ZOi_aZhbB0<{n#p{ z1Z`Lw8v^?fuM9!kN8}dFik?Sw^DNO7K_dr4b#ba($Z4@V0JV`YM+oibb^(+<1%qNx zB|!NCpAe$|pOAqYOR=F!`gH9r`gTYN30CbOpj)ySdv8_9JjAOM@WLzP_@j`ta>rIX z7_)&{g$<9@&g_n!9zmiXdI-Nu^iK{A<$}t{$F^vYY%%9}gQrY}M~y|Z5=6AieCW`> zrMkolrJmneotlFL!Cvr0aNRJ$pJiF*vnNa`p=Io4@>!zB_u$H4TnfgN7@2v8lC-`) z9h@O&N=I<hQG~g>yQ7Z^w<CXCP4wMJVt@pDmqUsa3z825iQoj;iJ|pMP(H)<6SE!O zy^_()0PkAND8e-wOigQdfW&PYrbmtv1Zr`sCU?4t;#=y;ivApj*iR@Wx^aiGLN*{| zjHELf;xuR-V3PvS;1tvn#$gg{#*f3~<;v1Nf^CA#R{S}*Kb^eP6MEwWAxgA0jW~o3 zgE!2?^a{Y%{Qd{$<IgWm06>HS97f6`@&!wGEC&ac8)qEbar*GHuRE59lskR(3kp;} zm6dH_W_ziAa3V=_B*}k;;(R63ewDMYkF|UkHXv<z@K&Ary!f+<R_e7Jh5R1c3>|`d z&?{b~;W*53w&6OH_8C!Q6+u}!b{8{19)5m)il5<^UwNp<PB@^(hsZt&Gn}75oV)Ii zkw7jgBxZ-1sTdgp?AOP?Vp~Cuqw-ukv-=Z2KZt~6&i|8D%EB;*^9)o#B%<(E%{o3s z5`(G+D7g1ew0e<Pr)Ojw^y75-x0w5s-YV7}#0UPS8jrTR!P@Z@HLppH?!QrA#ic-f zg|Gx-qcMUT&gNgvlG3BNyM(D6AiV%&oKlY}8-)Tc#x_=t6k7nyj-73lH>qX@fh05x z(fTSetARC>Poyzn9}wo!QLqVo+39`X6c2%N6ppKo3mIVX;jr3+$sL?*qCpds+#l); z1=y=m?_DxFWl`QM048nOJsEgV$0a6$Qbg~riqaP8EDl7kb+$v$^^9(4sIFF<`|UX2 z@0$Ck4u#jfXjf-Zxh9)T1=kj2yI^`?-Xr@m-`Z~gXPQgBG7s8=<Bm;$49ACj@U|#m zsgCha$Rbfqf)?bi!?}Y<A6H=yDJkI`!Bk~YTdvdmD6@Vigq$wIh#inE5NE*Ypd}of z5R}9uFG4vENWvJJ?ZPIM5dny-LOFsh;Z)P_Yu@8_mpBE$2q>8}i6`S|MV1c9d+(Qm z3gn%_M9nWZ6Apfg+gPu_BKS99*5^!;Q|MoW)QpK*GjFIVTu5xOva}@3>;mzD6}sgx zzkB1q>9Y-;f2Ysxx&`{IlRoFP@7DKel8+9GtJptm04j*}0WKQOowB?u61h0j!ay2! zD}!`>F}6Cg-c0JDm(0>*hvEiK2$2dZUn7W(EsJaZMUxd7%hUaKP@Ew2U^j%QjGKHI z<8~YCJ7MVRAx%L-j6g^zcN8grGocdxFLj53n~4i*u@g(+8WS{W;ll)7tP_?U50o!k zLyi);0V4gx%IS@rcUIYFe4GB0pQ>Tz29Xr>x6#$NhJS|pQ#foQhCr%-d&2_a(UHqq zkQ{ZFHUdgkb>f<-sdrQsi#yu-m$bE$>g{eXi&sV2F}b6&LLrT?aj<xL1Lzl8r`d;g zKL-04WSry2$MDGj0AiR0G+c~U3>s;`=);q|3v3lfODxa6`%C)ZD`7a-Lz?;7F#%Ss zP;;GX&1V=g!D12>6Z09?;G8}7Qho-cb@GK(7I#RJBV(|KL(h!XO*liIKx-Ct&o{eu ztbdv2*BrpaKA9@AG1z0A>usl{<$J>zRj)Jw|2htL`*jozAFHa4hbbW{Lpg?=TS|r! zMc^v3JRetHettjs_KaGe=b{kuLQKbkr%bw*q`?!W1n;Hi9sX8jJANRH8{eYO>YT*R z7@e4a-#CI$1o{DPv|G&Lfs473cfGewEOIeqOU(X(*;q5O#m653sK}alpbjSJxkDlg z-jyKMTABbhMN>O2oKjhHcy>_BOWp|<GDjp&G$FCU%ojo9PF!5vlA5yZ&6n0k8BgnP z-FqnH_f?9-qa4xR$5lVc>5y2YBpSe|L4`&p^3p!x9$^hhk779xn!hS42kzSeGJ)>> zCJ3f5+eX2G-Xdhs$wcx_uS9I6V1X(O>GwQ2@}dswWU|9-l;)_Lp)L>lO)P==`A3BW zlm%fL_d4Lolli5kXc4QI%T(1mJ_KeYl?Y*x7tE-I?pTZD`HO8EZr7bQ^M{V!??wqD z4Tjh^_p#iNA)^>UK8)B8bRCl*dcFCWu>-1nLAh98Pp{TE3vQ~AmWZLe(e~V6DIS?W z#82pYFfW9)#8E;nP4+OiI`;UHP{=|-42()K@1M%-8}HPaQ}=y_x7)<oz!O&R{<K1V z(v4mfq?`F9DCZu^mu?usV|+T^##vMxyN%jV&Xh2C1|{1KDR4Vx+Fk~uTQ!0z*?WVJ zi|aDj;ee!q_q-MWzU<yeV6~nQ`3I|2ru@?rJ);D3ZY|k7Aku(OT_K5sDSM!XP}yf% zKBZ$c!^_1*zKQX%1I%nQk6FJgc&)DldR{qxDU?B&o6m&!sBYQ|O?Oq;=Kx?ppj`nK z2Z>I}y#=4TYbM=5;V{thZEz4Hco-Tk>x}Yd6P1!;3=cg+EZ#%<IaS_Ux4;g>HzOsb z-Or>U#N#0yW0&+BIJFs&?5Fg$!-YVOU=nTYMhlP{x@<&m-#+?6b|Wrx`<bDOmph?V zzKvN35bcb89ooB3$bmajS}7<h?vFnA(sAvONAP<%Gq5!G7DMXGxCT+Tb!tWPebRPA zy2w6c-#P`Zs^bhF+S@~_jOihemfJPudjjJlz@gwEGCZ7zfgxPyhA_dM;o<WD!2x2x zBx!na5x!>mnVG-6uz`%c`sSXlqlcau?-SY%0eBLFNzu0L{<t3~&EOlUx;8XS&;)z@ z*k>cIWehBRFcow$8vr@%9D0I(0+*#(Ybvv8!ry&IIC}1Y_)QRWe{jucPNYWH>~MIz zc2UqEQe~L0p^C1EddTYjPVc5c?~R#hyOqsTa}Bk%R|UeLn9z|3=}!d(t=ZXLrbY|y zo`vpWCkM&s&G9x~cU7E!p-KrW>$<d_X$pKZvmh5xUmy&ZK%kN^tA>ceBdpnvDhg@f z|KQqQB!UNsX38Z57D5{n_Xm3f!X5Vv?1RNMuByFj0U&PT3icHS3~zSlAwAl&Dj$1L zl^f6Z6&7xAJ4{Kz%6j_#(e`J@cnA&*B*e|E@tK82mcOweymHqH@ed`-BNqqX1EPs? z7<7m12DlxlCI>HERLNZatY@oYEOU^8)c1JV{2K)$8g<7`$|vUt4ujyNr~3MmL7Ol$ z6C;aT^CD}8U{haMScvsl@a`Q`IoUd;0*18RmPJnvUcD4Yj8F2X{5SJEm2hZ9rKEr^ z_O!!4jo&Z0_TMVxgsTcD3p^F5yPYMo^d@2=_)##C_aEJ!oSBV50lCfMb{2n#t4k$6 z&6o2{;IR#Ef56<_tB_AXe@9Dwq)mB*a{DLZ=E4n_l<AiCRrgk4Vc5JUWQF5mf;w+d zWL(*NkBMgpKqBN~4$Zxe1_9>(Li$Z@{8h!OHu*5&^vxT@Wxn)@1y4EI*sh{BK+zH# z;&gS;hCskw9}d5T`S?ukcR2@{pB?fN5*lxPD$w%kcH;TqJCA7M_scZ@ebK?f(W-mn z`O+BHKYJbmIl9)hwS4>co6!1w_%@TAazkbhf#eo%0u@mxD>b(Wf;|90!`@!F=s;f= z#g7$?Xp9mvL`V@Hx+?GsD|fW?;2z{Xl_PT~jnTG>o2WQLK=poS_1-)@ba!S@Rzbl# zGBOg~#4@AXp->1yI%QPxcxZSSN@S5zt_Ew?-$4ojb$lOkN~fipmW7ZSFRy%~Frb3g zkN5gcry}TB$32S*#PJNrwS|f|sR;>>l{kDe9y~fOD0p_${wL)w)}V5w7PWLAC)6@1 zrSPWUe;Nn24E(5%XlH*1wmVxs5w|>G7Bx@KZL%D~KjYZ?@J}YNy@qqOI}S#az-W%0 z6c-1xgT{5uP>?OuQI@9#739AdwM;(b%-;tFo&^TZ;wiCOyfcdaE%)tX{+Hah7dg)# z{y>CvnV;#aQ|He}WH*88@~QxUo6!DQlUbHCB-?lF;IWrF8*z=-meL!RY3w3AmQ!)p zbt=B-tB>o8wGliowxD?8@avP}vfuY@e7p;L26_D(^@pw!AR>UDfZ0o~lH;fn|5Fuw z;P`$?k3TFdA>fi#lX`@0d3l-Od<_7K0RNXi#5T`=^M)|NCq%2<OUpZcPX5@AK@1oO z#}x^YcXERztRW{X$YLJUe&@#Y@6qdY%|(6X92S;m@OhSu4k*65uY~C8qXCGSp#6k= zCLI$&XgHW`;u7A4a30ub_}3#5vK%ivvHSnf)Q;oa@%)sd01X}c>r{a6lF?EaQO9hG z`_pAs2DoRAjcLP?9%Cv#KR3aS&As<YtkazAp?wKnL(`e{@8sIDWBhBsq_wp>L5YHt zy}R@PGQTXpX7iio>@l+OJ4dpuME*tcwX?BFPD{HF9B-7>(p?)p8|Y+0Bkt8)XN8wm zoB+;QxCf@3-Yqgq5XgX>`LOSY|D}a}c>vND+`;FouH{mf`2>~U{f)@%bEY;+rg^mH z<GK#){tH%ds*%-)Q|j1yU%`Ry^|F%8;MF{bL+Cwv|AxSPb~drIu|Ita5&w%1Q;g3G zJYjJ}Dm{wn>n3}VoV^g!BIuv5z$BTG)(`&ZaTCw;>_~kj8ks&>S*bc^@unWxv5#R5 zhAfge-_S{txwMn>nLJ2`U}4VIzg(f93^?P#SR*5_N9sQ`v%lx|&=z%|3U)4Y?^h%q z$!Av|dBiR@zJ#m-LxvDKhyMb&RN&d3BY{sS5O(5KS4C(lOrz@t0y(<sX@;c?Qpf%# zEUkXWO9_1e9i5kGMj;`>*R^X2qpZ+E{5G@fT(X>cbkO&anVZU;E@?gJ)1oI1ChVu$ zS}OWg3`qd^Kvc@gU-NP=>%DGnzCJ`bMF*5%*6~!+6yumseokOxY_pqfr${0q)Xtqd z1rP1^ras<jc?YLDc${xEc#w?b$|U({L=hxlje!}%=B=)}`X%PU^E}F~5bxLlKw}xN zLK1_CB0PnsySvvVjwr<bk`fmi8-c~^a6?8ChT;U=E;rN2zxcNliz%8c(nLDG;Cs8y z)t$iRqq-IMJoxF;{*jRrXo#UgpSivtlVs~5Gi^z=Sqk5P_i&b6EHI%iEv`VljGmfr z?>Uekq3+O!4=_|56I-UgjYx-YVT$p0rZ<@W7;EwBkl6hJ`v+85jD22;e43Dv0Rd+A zYo?)aVvCA0z>sNeh8?B=6Qf;VPj!Ibd+Ya$mnR?YfWUf0WtB=?!PDiK_W$7YMy$); ztIh{fO?&8&SMTN*M+j?>_p#1AmNQ5&s-!#WVa}AT4*7xsqjB=GoPnI4mj#5yLDYD@ zO#SK60Gk`@FbwooNi21o*}B@&)HH)&D5g{lo++X%xisinXcYpcfY>GMs|<3?p3U2y z{&UQdK=b?2`8E;ZzxqBM0B>Yl(2_?1Hn>l7`_?j)3W!-i18u>bN9_am8fgE(_(0F; z*Q-_)44zDlk5_-2$q9)Xo`>22a6RP+QEPA{2o_*#zurRA7_3w%ZCG0J%@91IP#mLz z!E1mE@ettfa`$r-2#W7t{!i)RCaUKGEnnBF_Iaut*?D;ONcS+HyLI%M5Cg!ZR~&o| z(L?Ye=S#`f1AkX#GO5^t4>Jd<`|RxVE)%4)T4_4$Sp=?XZ1malnsKyLl$4b8^!hqF zV#s3MRe>%d?Ljt8A&saDq69tzNc|^W)<h3T{+|i3qiih1uX5p<J&xT0B*hMmJ7}(g zRY*rihXWMzJ`@3LP&vT(17WTLQqjmyL4pJVg$WV}b`Yjjlw!n!@8TWc1org&h(i`V zLyR$v0=@(S@16g1x?3FEc8EYkJbaQMOMv(a<tQ?ba(>;sPZLMm{|Hb3?r=##mXIMC z8W}MW<RZtX1Ov%PDL@HOCGID(C`a5wYwP1~WzY%1ywM@g3X0O5i*s`+X=&iPVukD? zC55yc=9F3MZB7xrhWX!~M;M2T_?=X-0s7vBTR;M^pg@BGK29lKo(D7(9jdF4@1&+i zGX|nQgbfJD4sd^?9H@(`1Nl5Id$^k%DHPnKm*e$W3mYj1%`40ch3$X019;Vj`4^~2 z*KJ97wOuWJA|D7S33KX1K6>3KvkUHna@<N4F6UM=gr3TEQ&U9d2_QlOBZJ2T1wsC# zUEGBI0*Lwqv;$LiXhW$QwWBkDZVl>4aEmAz(JY6EG%Q%~#p;fVg`kK;Pj3Y+|Ke1p z64=WwdnhZx1^fTVC{;^3hAG;wpvD4t#cyNQ``k>rp+{IkydKCiH1OOsyQ&GsGC|qb zWhZy!wMZ(d!~8rFq9ImqKUY^neFga#PC!aV2=)rHun>AAYgs1PDYAmR#E5n~ckTo0 zH_4k63S^k%tNcJ{_7}JWC(8?yh?CA#-2xi}!faC4Y7b40T!Q2S1bflrm)(NNF;!3u z4;%p3_%R`;!DxiX8&5egM8xe6Pagxd3Q#$k0f=)1i6$fXv}DhqOGrgU<?i8uroV|U ze3bwL2nWgs^V&k2nwmNndJ1q419{e66;3<Q3jz}YgpQ-637N%bNvb}61ceyPkZrp2 z`S1<FYQTYX>oFl@3J6aziXPs(D0c-^wV6mnHPF3LupkO4x6?FI0wF<X<xgsDclqC` zwLXtzWn?<Kx>($S#RI5<xAg`pDE-7@d(}UJXv)43V@@@Fugyj@a^Y!phUBx}u0s>w z3vEYKWMtgAhyp$m#`-`lXV%Hmd`m&;ea53Nd09A4=9?_r9-02<ca(of(~%@78+E5` zRPD{*N%Y_g@+&iFQA1C$@l+sA$D#&|9=_zH0AmV*4&wpmo4inbfzpH6m2}bxZm_6x z;4OKpJ~+!hTU{B`bN^Nh)?5|?DAb-F2_FfxzrRO{dl<o{8l^fE_K|kw7Fh0@af1N} z40Wyxgw3j?)DjNQSJL-d`S#T%QM2dDVnh5Xxf?3(`-dDb`s~5MpVwHBS2f0L3;4JS zLiX~g)m@6MjXI+kj_c@vo}@^4+H5H2fAVm-B!jb7TFvz`6$?Q@?j8Ip`U68T|I`v@ z)!$}j4%db+(nG5|-Bq#40Sh>Wur-qK1Y<4$zMp?`aa|3vF7sg$f+0W)okq)jj3sP; zW<2&>MIAFKWNj{^nCuJ<3qxs!)BNIK?lr%2Z=RAuYu&u-Mp4OZ^F}bE<Z?CC$7)vP zf2Z3bUQUSl5jpGQl~B)U=msmjzgXIJmgN~HD#@iWefFho)W*`Af=5&EF2s=9)_V34 zl1*lE5}AzK$%jD<I6zH3wxYVR6Bh>RZ`r?RmhtgBbBO=Y)4eC|Sy2|<T7bsIuu|(R zA#h__3OCe3j)jU;GrZoN#Gc32BP6eU(O-#!P~xX&+cu??LWjF1adsU_)awNYKjEaQ z1dG=)uZU=x?u_z(eeU4DYxYuKd$~xPkx`W6I^+ps_<r9ewE`EU)|o^6P$UDl(LV4o zvYc?pb&7HRi@f;P52wxf(b&M*)seiLgqglRF$<KHrkovy9TxA>q`{tm)P`N#%)Xu7 z%{j4r7P1O|D8v5s>%SdLl}-JV#QQ+$|Ed-XR`0MP$i093syQHKfGv&oJbyhEzMF0T zRG{*=zyJQDnKv8{Rk>R6$Ymc;pxZvI8vnPX>Zj8&s@TbPk)%W=EYNkA{^dH^b6s!0 z0v*w`f;8pUm?a*~tOq2<Av~mBj~>uB7)(w6nCzKrRd496>8ujxb7Wz<e39Zz<yJMB zxTRj{z@>`b@S6CWq%!lrHrJTKKi5va6&4p4WJ@aDt6chzw|JU})T8<9SKx(I`V>SZ zWPAtUvmA!5RixXS_b$F-M=#Bj{s*-cg8_NQ&zxjB&Jk~g$~eN>^Wfm7F*{_<EEEM) zTN^nLnbEMcvPuKj6$ehMi6pPWlJGxXciM`ToCIxJ;;qPTVj#yfyuSUFAExlpPe*$K zBVjdqrH%7s|M)d`HR$f)%Z{IjXz)zSpL)ChdJy^Ui3cR>_qUks%${GWI{n}OFS~ev zo9MLogRyr6QqzBYy{d3a_-_f^(dk!Xf8O@LJzDIP*~)f9@sJ}cQ!4(pnavmNWJ{FE z4YW_s|LsBeae85tNV$}wAo=Zj;nL64j8Pw=<BoaHi$o5~dcR3jVCA)ca6gxIMY2MX z=~d@O&$-3?r^lnG1n)V1;w>j4dPi2i&-ia^_JLaXFvECTr&4su$i4G|ZrsPpo*Uhf z>*8Ut=~!x~yJ6zTuf8(5F33J(;{EkT$48aE#C&*W(*{)?Nw;)d$P(h<&M5I_cB(J7 zw981PDHv&ZZbC8j-N4FdcxPA3oAad}#n-Ys)}rgDCz2D-h&!_8=3U&&`>E9bly0)} ziNjLtl-9ovopV<;Fz@*l8nCs+?s(g7T1yXdAE(I8wX@dZtv;oXJ*f9wpNh}5ZJJF! zB|SR0{^V<*PSgcudri)}4tGP<$Tv&mKdg0MpL^z2i8sp@7yR|!i<XjyGH&+{{aTu^ z6O<eY%gGx2a&v@6A%*`V3Ga73Qdo#Z9!;R9tt6GNtJk~X7_AanCuB~gcINJS->&xo zy;Qd)hrY%$VZyz&wOL2CcbX+_+15Hu#{9JI{?+dN%&i|)Tyw&eE$;kcY#M7GN|IyU zq%u3oxBmXk{G-`>vgZbG#H35_I&3!9ENgf+I8aMx^PJK>otx|zXh-Vrne<pH*=Z`K zgm2snth+zDh0P}80G*gu+Tk<DtSPfT?zI+JnCMo}(mz?6Dmi)alA0X%Qey1U%C*WU zgJJ*CbcMuO=ZTOS1*;I|C_#n*$vZ2rcj$zTHz}sjF_v<_qlvCCe*0|qLE0?)-}YZ` zaw?=s>AWe^y2n-Cnqe~b*2&$unvZs9cj}J6NqL$=ry~;Oq^;KWW^|f}=>+miY*aYF zby{}XZX=pz1?<A|?0kIS=d0SY<|zq=!nD7ByWqCIaz~nkzGUH2N5ho2L8Oz<Vcvzy zm8&Aj%(C8&S7W-pHV%-)jISIpCG|ef!R-E%-6brCRc>)j*=|h7LPK}IpGb1)Y5lrf zX}vVVgpkVO`jKCsPAi&Dw3dYZYGb*1N4!#u^ehYIft^b-B)K`+EC$Z$saC@m1h301 z;pHf#7nIX}^v(OW9b+#nqJQb)blL1i3UAHKL2k~X`n-G0;Zrlt7O{$khrhlJD|=or zwlvY_JezI#<lBRrkH5&#zGe@g-n?d&Z=(9bqGmKjtO0v!`2*K8ubnQmhlM_oGCw!G z^zmwz=b}jXaLa<8M%V1OhD@P|LMn!5M{Qljrr#yRY`;$1c<1)UqJ}01qjvwbgbM+V zQLK4mT9>0Nc&HwB)7l=LAro3RmYdJ-kht;S1#NCla#l%_z1gj|+!Y0uqDv4C*xdLn zS}1NVy>nYA-<_M*J-;!??LTGZps(0#|06ecVndU>Sj%@0edQ&8rcg((UX!IwQL_k7 zD@EQ3MTJPu*Pn%=(@XVSa;Gv*ko0+k?u=@wiS3Wlc^B?t+CY9`@2M{yi&2bbhV7p| z9Z9v$Ya?42KlQor_T&q$9YO3p9&&c{w?Aml_a3RT$fIkrub@#owX?88*I(hR*rq@+ zqlXetnnmr=j48|Hq<A@x1jFe%GYbpgnviaTqVM8YBBHHGB>|_P=Hdt<1Xg>=W})@u z6xCP<|Bl-~O~2RZxi@}}XNdN_k*_EJoo&=O`R*N$kg%xnk44G#2`^c)Y2OYpgv~cx zPFgRZjnEsnK6%8XyGkp9IM`m<imGg^ME~4;zT;wvSy>Ec$LjJ2vE*Krgicvuo6no| zz7fwRHdNL%n&cJ^j;?%5CD)pGb>`BVaw)a}<t}$A#_Kg%q8_QQ%}&bZ9(ZiQ?3VWH zmW1Y;^INv@NgZszBcQ5oC*1utyUCwFjqiQwliF*nT06g4GvsLv3UtMG^{oxR71EgM zYnxWT=$GP_6(+fkD=uR=(wF+fc6aq<E1LTrBQ#hueNQfNq$I=)sZD;=Z#OWxu%7y) zH6xu~?CzT$!wZtu0rt;UlAOO66p}CtQ)j!y*JmI1mpn4Ob7bGfK>I3X{1zL}&HRys z&qqjN4h-CXH1l0sud{I}QR-Kz&Bpbk+xUa`87hx(dI+{_rI?$Ay<ggLXR51BZ{h<- zpI?yvO{oU%WV6#GH0CL50>y@B?pD0n<A4um@kXtF^VHSOQG=|EIm7#W!MV$ORpt%& zMeN9RPd>Ub$b2tg5A9Xq`U;Vs_8YYl`z&a6>{^45rZZ$)6wS@;t7?#<`c_JA>m^bA z)QebIbKLFuS}<qSx1`cZ8lSp{=cejc=C=KacIAqCCsC01EJlXqW?1v}f?Mrj6@`R& zP(bE4D%S7)wxd|Txy|xI?8IZvILEzrvhoj~jjX#<$1pu$JJkGoMj`CB4^bcO4%ky1 zLuv<wX5T6`JA0z#7jQHn^?(i`GSIl6tGsno!4iBq{CnE6&KT|@{yt`=R=uziNbBc( zBPIGVk7?_NPY%&lYx8NTR!5R7DmOIS@|oOe!*x$8o=>Lzb#CvgK!x*c$J-KGJ_#j< zUb4zCNFa%!=8UrbV8qLnA$2fvLp1lP)bU^?wS=c^K9u2pQLbDEMDOGXc*LbkQ-r&b zYVMlwsy%a&rP(|-Z@%LBqvm9}(vnEW5-)O6TFa_yuO|ZD#$6VsP7Zwe%0?FJO|5c& zV&W7j?~U+}cRQwCg=`+MN6MAV%m-yooiElWFVR<FapYm;+Y_v0Ghxp6vHG^VR9*Tl zW6P-Ka~Fa*K2i^uwbY$sVp7&5^_C~s-<fqTjF019CnbqlTha*eR@x~eUKaLXrNNV< z#5XS`1)T9-yd2T?fyU?wt)J4ccu-1;Dv5L7fnxvidX>Xg1!uNA72hz4mU^i7^AWK@ z4Y|Jw=|G7sd1&cnM}KWGzpn=zC~g-l-%L9-V>$CIF=DS!r-!iTtzub{J)_q?MLwyL zTTp(o!XbB2_H1j)QImX`;C7*3??UO!lH{N7_;hfiFY2d+vdi?(>`gfyZSN)GSlL9I zr6I~l&Y-Fd4ULMq3yOYSof>m$mU1SxDY0i~b4Be0?Hgln*Ngiy+VF0Asc;5)Z7bZg zy{bGtsl*&~M^B~PB|xh^pHJ$*1*TVFE<IHG4%_z^{woF=4|JGVbz0_pA62*9{bcrK z0!^vJm8{M=xy9co`-^^GvSvvacM;FOfA?ZUkKdB|YJ;lf-cu2l_7u{tGVvxYS-Aq* zp0`S6Nltc;Gk-lu8|53)A?D@xA8XZE%WyJXg@w{3va>Wh@9z8yr^cUTB?_Qz6NY(- z&q{1-`~r2R@VbO1GyJ34brxk4&3%eLUR=5)XCN&7sY~8Xg*DNIXT({j`_p9?K1uG^ zLK&%1ww#=W2X^q9J#8C&8l|r!tQ(d(S^l!vHDP+*h@HG~ci&ChwZibR77FRHyPAdR z9Ax3<+3~?1<QA3(7Mho?IK5^pDx9CNc$JYP&GhPmtnliFv+c<v+nDW4-ev^H6nxAM z9}?ai3vs>|c8*cpjpD|pNMmfI&bYPEV9!Ikq=<24`Y-m64YlY@_PDFcTD3$6ymc)O ztfkqSZm8v^t|;Nsaktc?tV=khG$@TB+^?2%t;{&fb@%9uo5R8V`eF|sjE5iEWzN33 zaj#-?gEgqCgksY?!7x9jxbCKH+PnCeg4ek>rFC{C7Djn#ervs2oqpN&{z@SEIm<U~ zk7idY@_QLd=WaPD@zE@a`EV4dzE@?T*t{1g(UX6}f$WFF$;~ki(Xy6BMFslJA0e&X z@i?>1LMqN$npP&z2shgFupQJi&A!Dr=fL@q*}b_$WBV<i=ZcOg6S{f&_j2#+l+w4X zDsS?ue4sXuuJa^Ui{VKl`yuh6N6t^~rn#vs`*6B=cw_Zi!-V-&N{W$-9Kw{(j(zFj z;LjHjIVmNPVNvAy<L8YG?ag9c7V<{BzVsI74eiJkjt_5_s$xnjiFap`ztesna3+g0 z9#>v%GRra9kFz}D?fHZ1b?nR%$_t~GBIo6g8n~=!UvgQ%{Z;qu9DBoiLNF9b<eKyN z$&ss7wozqw?^t;5A$@Rom-ynzk1r=3&XlK{B4eI8tWMGwxy^NBV_nQD>g)B1Dy>r? zt0A7!K0I`Csq1vB>hs5aO(ks`wwdU+QJdV;K9meKw_y!S$>?P!4~NkG{{3Z_vJdVl zxzO=YOPh0?^OC9lT+KWs<3U@pZMlQhJCa(6Xa?4PB&ADtiaYez%m+>cWZ$V9Z&-hp z<v%{Rtqi&eQ)^OLDvD}rQIWz$bm4woMwdeTJ+2>8nq&x;`!zyQ$>hZ9u4>nOQ038l zQF27APCyigPx`w@-aXr@9`7~gJx8vTRrxau>6{NQ-E7SU{cF*ToS&xmyi?qcd&^(R zCeC5>Dkk@pEFOKs%j(WXYpk`nTXy8P*Rgpt%yDNnmxk==g^$Zl>zOSdH3<CjP^#W> z@s5J8*@eI_ew=Z?Z^)l*HLWsQ_6{8r+2eV%zflrxhg3Q=R20TiM0>X^t8j610~!$t zS7z!Tx2RgRUsIq@wM+GDrI5y{!(;JsZPi|yWFhB^EJ^2~8>2Uxvq^9CUJYS&7j2-i zzOz|wg0zg`MOQncslI<*qo&s0g`YN8W9X#4R^N{df4+Zh)xq`ICFjX{ah@=trj$8k zHH!YHif?bSx<2-1RD3KNmVRjB-E`yrhf6P^yZrDHp%9X&tv-_4)E-wi{bOY{z|ALx z);MU+Bxr7@lF(t{PqW|q7)8hS<Y+jr+T9D%-$;7%K`A;tQQ_N9$!yy%4?g$m6K-+o zd~%Y<$ybE~N~Jfq71I4m^EWfQi3zMvY!b>ZQ;KKSPOp9q6yqDYw!?O5a*LFs!~40x zxv7Dq^K8=B)s?XV<Wl;rsneyZUyil&J3gg$Xt_0g1(b-6*L<f^J|ul!Q7DeIT)_Vq zIBv2Ym`hV%z0{Vg=M?H~`iQ-vPgc$@#^wwQMS7*F($WvH`kre&oy7GvWM^|-^!MD+ zR~())<65`_%Kslb)#z9!MT70|vO~j>)b})-yO=f9xbsiSYP>n0IF+z{Pd05+UwOu@ z#8N}&7pAgZ*XJlmM!%9C&5wdm6IGw%ih{2S{jl*Jlc1vw6!SGtT$Td_#vH}NY0Q!i z7tS#-Q!O65@k8di!#R_v$j$td+s+n?x$-2Rbe^zMCwuD~c1@Ajx9S>Mck0)VuR4M# z11$omb*&;OJ|q{+><mdC)<I%d`uxk{&s3?{(yF1h-d$ttKlgsnV!U=hQ)u_N(f1#g z*NomsI$jk0GWyTGy6b8w8RZ@Rin~h8&JKImezkC&zxPsz+O(HWMM9a@ZDKn`(?`A+ zzs7gfOQhMSOMW^<uWglZ0hxVGeB0R%w*p*3Ssd?ddr!5e<m^>S>mpApGB=u4u?u$R z?KMfI-<-L6^uj6g2T!Kg7Qc$+2ISESJF3S~dY|xncwi5m{BNg&KHR-`q-jd~tW_|@ zI=`{u$o;^U+B1DT;<lhiu5Rwrv@l6ExY(_sy&9bm8SqOJ>wR9xJic!!$18T}bXJU8 zM>PfU{(VhOsezPP{uvbcnXxg3T8Jf@8)NR%hF&KfRgP{7y{?{SlUdw-*QTFhZd_6M zY)!zH#U+E`;o!Cu)nJje{&M5D9`=6yrHv#-jtUw(H$)Y)@_mm;XUVktNyRx{GMrDB z%=Dy?CRw$XVWE6;mGbMBN4Iu=*>kZem#BZ0rKW$JQfS@ZK0j=@g_;?U=&-bNBy2Bv zrp!*WkF^^lF)hy+GZXsq`me<A&)k@D&!L=b&~31Zb)hGmK=o%YaOxHV$S?_<6)nEH z;ickgea!LO)sX4L=;fVc5-ua_q7L21Z;C9w5Zie(uGi&7OYMmtEst$?Ehz7<KgrLW zCh8n?Yno}I<NMl;eS%tk4y4w(!#7QLF<8p7P!jj1?3uhN+F4lht+hN$_jP9d?Q^WX z{D+1z@5Ii{9`_Hg-xOD$t+p=qmo4gBKDRaT>$7cqeM1^bJ=8S{b90}sm)GZf4l~u> zE_^mZsZEnB!av~k4(;Qisk#jt^n6;C$=1#DKT{hR=Ng$K-!l>`5?_cBV4?8l?i@lE zbXG6zMD&I4r@ABiJHzVaLcR&;i%opKQ7B(f<L!|sVB8{es^M;k`tgsYPAehF67A~W zsV_gF^!{Z0_8`3rZJ~I7JI#7j34dz(!A9SMt{UA&bI8yN7liy>4XJXNDZ7<QJxfm( zmIqz0zvAsLFs3v=UVAmGg5esoJ9fQ}M45T)_3J+)U9UJ)sAkk3ZBcwAA~zf1KW%v_ zi<5n9@p2X+xm3DvqlcOIX8iix#6%BbAM2{_@|&<ddQ?$bI-cZW&J#bP>6~|T(;>bp z)bs5>pp<nz@lMApqEEhFCeddN9L}t@3+#^Km5lOzm$_C|Zd)tXIlhusGAA|>El9{L zjV2yjg?Bk1Gt?g3mq_+ttgr6rc@BF4)o`)edcEk4Zx27BjALnb5N@~0Zc0hDI&eIn zH%jOgJ;H<ET&Dj0mAiM0{9e!okF>OFn@%)vWOhtanY(^gp}%&HgW^KZI#W-3>HY%R zY7~bFE<6{ixz;x+X<bcDeo?4VRot%ADntG!^kTa7{#~9frxm|2PvS*CX^w@wwzDMG z4V`Rb9-(fV^RcgEo{+yhS=2pA(Su^LD%fu+XwLs!QA+YH^XT2bZ2K>2_6c0?s}QV_ zV4U1lL=`^J(*5<c@8Y+ObLCM<vxa7s21V{|XJjJSd%COA6SjJ%(YeZ-N_7-EG)t4T ziR9>A7OqSQ;r5naR#S7BzBW#Ch>94vD2x2D_NkXGN1uF%_#rfN%I&kx-Py3F(6@3X z^^%*acB~uw7dM3y4RiEmql=FYo_Z!jQe4l&n_-@POk;$PX37Z6S6c~>7R7{ulA&wP z{sp9_4_=vbj?>aerm&<-)J|F^-*tRA5&q4jUB&K;M*MW#fXm|2tO<9xA8;aaX<6z$ z`_yJ5E$368Y@}6~X-!<)A-JX>;%fc6Cv&`bn1OiVQ(Atoecd++tM^WpuG~r8&Kv9w z?=^GlP<dlVMzF_5%WwP=^_Aw>Gu6FowWU|>;}@B4E@})*H8)r;`LS+9J_seVtS{Sz zjZwb!F8h(Q=kz-Z^J(&)$}>H&e(MsU^B|Z1-+N-2_v?YogLG2Enm<+rs{k5R>^q{C z;dR<7>zCa8+tVcU1;1Xr4burrWzFxMy~;jzk%N01KXrxyhjqqW)(it#^+a?DKkcw_ zdRjuQ!u~-EnAR*<WM}3vHdRJFkLxg*(V)BTe*A(OS<5>HS1A|u2jm6or#zj$8CT@L z9BYzIP3?HAu6s+B=sQV6*3pbYri~jkI~u4N8)Wq^Zx|1pycS)=|2+qkXodtTHq#e( zMA~qHxfRz2?6w@kN;l9wVb`9z!J`o$e=fRrfUZl%Bl-JR?S^>Y4b|&!gTLMLxHWq* z;i<^lOyDX9@det(dLd12r{Ud>E9oRoMT)139AYg+#As*yuX{PIy}8=_Jw{*hV0-n9 z>6csk9zIyCql;6z*yTJB?Qr@t8;iHRnb9-@Z5_Xo`%|BHG!v!QjnD4P3T7oq(2FPz zk-Nz9GfYrbGwca@^Cfl3g2p!abK99)%k7tV7p3{gH^;U!&mYg=;eMO*CYG5!<rIH@ zwNgNdWsb?@t%ty#e>{!(?eKEXg?e%OB{wW8e^&>j27*h?H&3mz9gF`BK!9(Eml%of z+c+oj`Zf)cEc<W!lJxf8(ceQG?&p8RhLw`!hDvG2^2ZvE9dqqr>p0SR#n=F=l$@jN zOTIG|C(A*Rb)t!cxV1u!lS83if^7S}&9EiYU)2TI=+lRH?&Q^XZ=5a}?yXOV@aTAM zUw(6n$0FQCY})bTP@MN!u?w`#re$27GYom(@?>o<=v&664K~a6X#}LFOP77v&9?6P zJhLW?#-LaUQP{yiS&pPL?1p`Q<6hSlg)35@7!Gui#At2a?|D*oHU3&iq1d7D(dLu< zjMxl!cf9I#W}fLV&L53r-Ef)tRa>0Hd5cU|>Uq(I=#8olgEF_Y%ygFyvxZZGTYU_K zcf0P~9u=y1#xll+Vv*~HzS)%ZPmvC<N(O%pz*@S*J#(M4_2W8*WGd8Y)~Ii)mu@ax zyXxwTkUVf9n=$b~c9Sa$s|ov1;je;Fa~5~U-udrg@`n^$o-0^Hc=}O#J4&5wxI7Yl z|C@_VFKWfCpI^@1EM2{B&u33A?LEe>7Q(U;$5zGQo7g4F`sDMcjKPilbYcDKMn7B+ z3Xn@v2`E&)^pOzHUD&bxwEy(s)!72F!O|B-w+&{h3@SZ_jvk0I5&5A=-4OUZ)rOO< z7~mb_T=H#dR;#9dr(^dNsXUZg+vDD!Jj56}wPJF5sM65*9p`ASaMQcOp6I#jaxM#j zuV+pL8TKn|>*`#jSsxXeeRMXUd$e&cgJpbLLXp&|;O!%O2QK+JFpOK?>6hcV?&V^s zvu$IGpaL6<wAYqfiX@zWqF2>bL+_q2t0Zi!^F3Y=;Z3_K(5iO#X&~cf`lq(CcX=~? zF^QE1UfTzyikaM-OErG29WMK&9wyx-eB-yv4&i=M?`pr!y-E|L3f;EPhjONpa$le1 z@JMV+hE%Q2;jgy6pBR8OB~JRJ-S|%LujoVO_t)}`YSW<lYxz<qQ$BnU8#J3|c+Z3X z7ps`Wz?Dx0jlEioSIcQ2D}Gu$=-pU*nOb7-=X;y)w=!QfdX+B6T1q|ZWmr<VH#$Wj zk;(nh4&6Dvqp4=(5=OcP+UprwflKSZt_^h<NNw+8)c-DWd%%!{nP1F)>g&Uj`(n8{ z0)lfXH8)<;>V|%$Kft=bRO5@V=kATfVACfl!qTHQsr_LmTQxo@9Vkrl$UnR9PGU;T z`OmAag$lC#Q*2yF%1?z{;@>-VGPcyiRmwNuu4Z@xr(E$0i>059j|Ct?`i=^D!=Ot# zJ%^6{mYw&E;+H^3(CNwKfhX@}ZXe(|XxgTXbIwyVY}|q?MDv95bWWPNnYZJS{`cX0 z-Lm8QDu+%5ml+O-R9(qFK!0~-X>p*mj$yQbttj|cv>}tgCAE_93x0A&S)J6m%3pV7 zevrKx$Y2`yvftd7e8u!$sbRv>YJ*KieT0a{9%|B{su!jLhnhIqxfd^=`W@Q(EjJ}- zO@noDvh@oc717CZ+sT@VBVL<2j|E*L4q6-i^7R-A9g^zCJ7aMdwSAbck5xH6d7ol2 zI@43zVZTiS-_los_=eQteWJT;6fGR|6wpV`-Sgzhn#IGn1%p_WL4X#XmVK%5ubOLM z=RPX9ULc%%>}b#Cn^BCWC@=je;QGWoc(*>!H$#-H(^8|mBevRM>qnKbHGakiXDvsW z@@$C9o|B2tDR<MK=;$?5-N!26y)2e8IpzNKUEfwfCtvvsjnTXzjxt!rGlwt+>^p3B zGBy9?LnaI7gPnqvVHIDWNjR^DZrYqQpNi%tiLvgEbs^0$WbATU%_$+<D>0zJH%5T$ z-K(@?i|I!!c!;A4W;`{H>~yl_4f<@nxzSEnA6Ovwp>J2T>-10K>*-ZJH6)0nW;-3j zU5f98F&OmwkjGvOmX|TE&dM6y)R*u-dgppp$6Zr<gPL31x0PvM>QG3h`&OjP)b*CV z4lDcW%$#L-!mT%QL7e8z{Uhn?>mSbmx?Zj5o80T<Ct(%GMKPDIH0&JjQMTJPP@*m| z#rAq}+>_>uZmF|1<BY`=Ybx5N`fuZ7#Fi#G4oU2xm41_Vrq)X4o<Up0{eA7x%Ao?a zH?iLiUfL7(c51-zk=%<9dae;eI0;cBwq6**0fU<Do#!*ELJO;yNV4L?A;(kmJCT0y z?i28QA8P2o&UKqfSv$}7NnwOt@H6Xkfv@rU`yF~47N<&VEHg6CY0vub$oYq7WW@)| zGreirh+Ls%mbpZE>`QUnIT{z#(>k=tQY!q;8!@3y??ZyTgZ!fKA+#73DWvz*rLnP` zQ4fA(OUmLBd*OWG&n(dtKdJH`sXs)xh-TSWvjV#M11ry#9JJoL<>Ie<i@p-qex1{4 zxu_*aS(3y-Sc0}ARU<xK31y3NU&(kUbkaAM9(yt(Yn7;*ner#sIhog9omHI44%<&= zq1MjHp3l~|Y<WK1^b2I)eAu(6P}j_`X!GKW{mc1Qt*2{#w5&+n)fF9CI(KTl4V(5y zZSHe<nV%F*=zw-wKG%J8<59!Zi;l)KmO~_uxQ_;?li}1b-qecW(WZS9e>H^ch6lAH z^Dy(^e0fHaN0_eK^&7Eg*n^h)IG$@gUbZD+xT@J#DeA}?{PuglpT=fM<cEUpo6FzW zm*(~;92KHW+kPR!`sWWy>ZbbXR^`itoK-P}Htk7kxX#9$+|fK?Q)ew|EVrjydlTnq zezl2buum1e&}(U&<#|oKx*0w>n?0UDuN8R5KvD7l^U%Ef>?1$TjusuQ7fR<-UXn{! zU!@F_Io#Eq8kcMh{41hc)b@U_`OU1KcBnN_wBL$Nxwmj8A=Am%;bidW=C>9b)lY0_ zB6i8`s6TU0F_{*p_o6;^*|pc)6_YY?MKkm2yg@_lAHTL&9cHfV5%9Ea`<}8+=BKiz zcClNix8hDtiZJ?=3i7usv4HgMoK)a-<J{9QU1K$ZrmErj@!=<<Wr7W{lTL+)PZ(Z0 zBfPTts`BuG$I?p@Ygjt_J?-R3tk%8_rQi6x`O9HJSlUZ)icI8Cc5$%(Z%VgsUZUV+ zS6Biv|3U~WhX3~!v(oWV;b#cj&1}8OtY>wZNj;+I75(y5ukaGR_G7~->I}(3X5$$W z)9+gO_E<fyWzce<GN$uW+1Ayx+7LW5<tsp%d~!20y~AGl$&*LpM+F*!1a3GwxRZ<c z9_t?&FtfS+@P^H$u{ioA-R0hIN^6&;FS3Z;R?baVV#YJ8tg3OR8tu4J`3GKCn@29% z7%0u*Aw|9NGO~j#YqW(-YU>u7i8mVU`6S&I+1I%)?%kooLoHl)ij`<2xNSd){Mq30 zV%1nOzqlJ^`>&sJDvXoO;f%1~e?YBs-{SXL0RivP>Aq<DYb$o{Pdj322t0`Q72WgU zx@u12KRw?rHMeSVIT(D8Dp(z8?b*k_`%B6bwaLwPhHE@`lrz87wS9|p6tg8M)NXC- zk1VU#2<R;>G}63ZlNd|O;ag{B3h4f8U(`T*@Cff8mGk;aXu#+#=z`3izP*iFnrqUC zLwYok$m!>9M8MQ|xjn9d{4262*_&NOTJR)tDWNfeI71oYsOED8rzcHyG@7R8ttduV zBT_gFe;9JPeO{Tf&Wn8iWw1ZW{CzMg`mI68%Gi2_D$CVrPMKFHhm%VWugvF>9ZiUN zZ~r+fk&VUZ+rA@z1ev2Nnherr35F+r9^L5g@!;g;_7{i{(%{~>&#xvGJhyLZ|B{## zdil3sv40V;9;t$z;-k|$9}W$EO=VFzPx&KjImJ)#&+uZy`M1S_a)m<r{*U?h2UTdQ zyEA=8LVxu2WRkUq%hg9NtaOZxP_-qv4n)4W{8QHL)*-*-$~hMzX|vhJBUJ2zEe;+& z>GV(AlGPiwwf7BeoG|}*-(7XBF!r|vhY)(-kAd6w=IlOnh1-01c*UYZua>g;eAo4j z*Ly#HzBE;9(@?uMZmk<jytm=Op7djNOMNY~`+D`wG}s@`6%pP1tC0BG`O+*ky0tJn z{a2S8pZk<_s<h_If%e>xI;km9ABkeKlo`pNt7Y9Pnqi06H)$lkN5ym;c06BuB=z_g z&0LX7BW$W#G3aclYPUyd=`?6_tw>kc&QR*_JY{{LFyB{Sd3(9`2@2-m^(*_Fo}=ML zZQ^9zD<s^gHe-E!Q%x;IpCsr3;h?(}ShsM)G!Co1`13|0&4*sKRXw|cSgip@lzjkW z4}ZJ1e@XYZp^hg<<LzJCB}ax0qu=g!&|@y~f|$UtzDiY10Q+{+1vG?tSr?A~6nUBa z92Ht#PByvpzCNnm_9CnIdtU)?!c9d`n$KzGPqX;`dBn!@!!Y-Kgv(P-hR@a6>~=pL zVf1N`O}w!9)5f%}5h=(*-IFsCPZIXNMaOY-$R==9)5)4?*<dgvuC^KQJiYx8f)>|R zwdJ4-v8DFw7r&5mwxISvBW~!XrAbz&sFt!nmD*_VyIQow(5hYXETwoM_u>c3*b&d; z?XMY^&5t#dD~}ky&^$4av^z@3-tS5NNotk6dlS-5Qci|(a;%<G)Nk|Ue;A!FYug!S z(qr|VTJ!y_60`vTY$Fr-d^L+TYUE9dYEh)Je!=M6+M%aExhhy4Gjjzz>}E<HEJ<Is zTnyexqj>i4wjG!CeCpm&N6)!A#OPl5HmzJTa6uA#^S}-Zykc263wu{;`Tt(f1&V<r zKkpX+bdTJd%HPi7{*Lirnydd8)=GuBwUYu8{_jd3-JLlc7S*p`GIX-*k>f#|&1jFO z!9x}sweN%CCC??eGX2z<X+3iUE1h9KGe_UB<mTbXz6Xt)A#W)JgsI<RPPe7`mTzo3 zrB`!>^y;#)gL~u0A|6ZP?GXv9ci1UO5?NzvGKjD<hJ<@jf#Xp6A-FQ*EH<@tjwHrC zCs6#TWPtTsW~TCQ`5tJ};qn|sm-tuyBhUS-E8c%nF>ELXE%dt^W2H66dt_Z>wXU=O zKa{-(IM#jtKCV)f%1A`nE72q?D;belgk(m@&W=dPN|GWwB3kyISqWtpGP6QPR`&Rx z*Zn;A^W4Ah?|b}@<L7ve=eX~?a9!8u{eF$}b-vD%b-*unDRZ|s1`cd_`?k&v%y+9C z+&S_GzapXWCMx)E{5g{aPafXAi#fStLTS)3`Xe`WYwYiQ7qoft=8W*BZc9X~2nMqG zZ_ocAYCzQ>P!9%24+pD{2f3%cwQonTQW@9g<_x9;7j;bPPo2A~)P+l3D0i5~E@7b1 zCE)#zIH91v?%8**5`Uye`#-Mt$VeHv8dtbv7^Twj*1}KE_3`WXvav(`y1s96hFdiS z+0Fo1`t4<`RF0_)h1BcsBcv>BRtLqDx-`!!ZQS=(IWzaxl>B$ui5$VaBrqHnvyXTM z{N@^U6^RmZZXe=xjlPmOqdM2?bA7UDq;}AJUKjK3NAnpnq&4Ly_w=|p_g43<UgMv3 zuVgfNAN^G)NV)U~*Q@^dz@b?XLPmqZu{VR>h)Gr=Rrx#N`NWb}@(Z;39=wsmy^(FD zuU?dRVBl>Of2QYdq)vaess`uQ%5!IGhJVFsvtKE5&cX*l*Gd<oK06-uwR@+0L4#q= z*HqDc$)pKDNi)P_U5<HkeMziRQRcOaXEKwJXco^;%A1Pvpp*ha=pqs|X1-~9uAWL` z#aet<*x8#6rDFCZkLZo*L_0zMd8$UAHQqNZyn}SCUr)D{!Nf&zA<OFKsjWM_F2_&Q z+~nQuw3nfE<+A0jpf7RDmp(s`FRgX!+&^~HA0EDHU$^?%WD5k}`iD_%iqUxH+Q}Bg z=Jukwo~~wG6Oy-+r&7|)S9%b#>qqfrh-|oVzEJuma7GJL<=|iJt`<rfk)kaPc}Z{7 z!rLYVAHI`rO~iiP_LN`4qP|;pTQ7?uH@r!7f}OHuNjdO|dCu6O(q@;roAU4EuK4}< z?s4-Q@4T>ws7<anYE!)MYh%<?FPHm`rN5^pe^$KACj$#hc@T;8jHZ9i2So1NQv9WM zrT;#~n>3sA%gQIg9HAvy8fG^$H|bScE*S`kh@sONiDrpAQgBI{RHp26Y$liWl=Nus zf!ItAV6%Knq6KtYzir%G{ykLx5x_@Pm_H<%$wS;&6j18a;E|Co{wMKGnn|9gpeD%; zA60XWp>^+&%*|>9Z^?6PV8@fL@z%PhCBEhQc8v0IVObP?@b&($tI0WOf6Bv5ZP_Sy z%Zj|Ae?v_Zq^sV-JaaoOS@!JL%iQm+tFQeumSd$-bQtG9#+{zS=$S4QNTsG9_Ue^X z=nbXevRhW_V;`m;3`D!%)s!n))#`FO7-n5;F!THN?RO75`H8omX-RH7n$*PM$ofjy zyln<&qL4NTKfU!Tce*)^KwTiUoc3XvkVNT8;}^2b6oJR+Gc*%~QRcM_m(>nFv^{4L z)W%6<rBIz25?`|4wtn6b1k-zyU`oB{_}$UeF75qAwx_A=yxV2XghLZ=u72fzmNVk7 z+Ry&)>C6?Hu3Po8BF7$HZI5Uz`uOweCb2P<n&t&<@FzYScyPZTU3q<pnb}ll1C)Wl zYr8$#F%%m!KboJD1?W#8-|m6YZl0ElIx;%Cg+*l?Ds$tb$ptO}kN9ex%kmq_R;ka_ zwMqt87>`hY8;qRWdoSHjW}4EF3G}UBzivUMOs0eK-fuFe9?GPsaK$XWa)#~E!T7<0 z@<<Hx3KMhE0^il!1vK07#*|TuxwcW1gYBTFEhhEniAScG=G5Ec)a2uNWV^ObaMjlP zD^=ZO<Mt5!6v3<Z%<a6<QfZ!0eNtO%ef=le^);mv(Hhfkygx0@6_v;B+e4(x`snU@ z*BB8t0c@U6j_NT7MLh_Qy3VcdvfB7}z|BfcwW8|%RBw>AhlhR-4{`a0&o^IIhj2Wh zxpw_K^JKDdq3O}^3@Vv-xmuU6mq^z}4xQ`oHqqap*~KT8uFx`pQuK%0(msKW|3Nq= znhAdW{@{A6M67ac+l8kU22Ud*u$=cAiq>~DBz3$%ddppVt}kY@^-{&R+3&TIq>IV6 z7C=1z{c08`C9b@;Z3nT(!sdn>JU!kKV+mejQ)p>+h>J-)$?y^^eS>PS$PlO}%q)m= zQRbAa5sX1IcM(lLFKIe2^PT_xH2hN+N$ACexjE`(HLTy<c)9$#9$Q-)>grHI5LPO8 zD0&kZc+12jIZ<=}r+xhY_Z!l<k^P-C0g~I@`D`xYm2J~d^#A;MFBusRH}{CK5X88A zR24tpl}SJH_%Nu(|HrR}?9UE^Of4LU^#-UlH#9Ur$@|fx{ic2TalTk;PuJrBA6q20 zud}nWx!J(NB04<$D(sRd;Ls-mNf12=W}g4;XSRL&7AtHoi`4<>Gh#O>6aG_nBlQRI z#s&riv6>HGgA!MJ{SueZsMS23{4{LAsUORQ{0@XJWJsZdkL}GXc#Os}>JI<&C4<e( zzpjY|9H~@1wzFq*u|EbY084Z8^Q7N8I!H)DKqYfqU)~*7Crui9kzFKKIYE_Div7uD zSy@i0)RGcWju9n=`smM}6=l-t9`8^q_1Gsdt>N(Jua8F3?X4<)<?_uBD*xu>OOm{J z_il`yXm_(2|KY<H(;WNu1>-#dC{BMO;`nR$r+|={SZPsF7epMda0NkU?I11f{AgHY zr1tgeUyJkYvH1xJw?s{{Py6;R@BJSS06!f{m)J3y=D=1hmd2z>aZBNvjr~MycIy{8 zxOSfU4P5{qpNPP;GiI9qH<MkGMD^M=dIpB7QsTpXbdcRXOiK$TQHVuYa)x0|tmbC+ zL0yyPw7==+4u^=hvj_>L=HyHcRQY9b{r7l}5e#ME870jQe~M{{LBpK=t>*6JWE1K= zGA$arrUFyP_Wbn*?)`>p(j#aXj(u<2W_pJ;ba^Ob9`ADa$$#JA51mSbQ_xL&{qkiS z4p4D^_M11*bG+=3ELnX2-vs#=ry%+YiNojo+&LRTd6}8m4ZQ5|kI!h>`^!zJ9x}xz zK-UO9!q(>I*auUD1A4{+fRwfHM4tV_yQ4h*BH`aNg6i!#q0Z4!S|MR!tjFcqkHhxK zySzL;@y36DDDyUf!y2;{MT_kn9U*jlQD0<3Lzm!?MOb@=b?%gywAO^pjT;A~E?&6s z61#3t5R+y*Jtq102YB>Bd_0qvWM}ynkryO(={R}mAOv~k3L8~TPr;z#14!zZx}6JB zeu48jPX9VJ6<n2BUUdzPn!dzm43Uag)zm0;w;g+SOymG|9pqD1LQm*q=KklL-%HBL z;on$ycijxF8wS_b*;x?2zO^Co_zB=bwL$HFITK1ScxCX{mEhUst#<jc5!QZxiD>ET zH?_7(weXM(OUf_u5<T{P`Em$~H>0pu9;hOb=@>aoJn(F%G<gaHwmh(oUU7eCU>YgW z3vVbCh>KUjDg*|!GtjZt*N;a`YvS8@n3Xm6PMZ&oQg0HWPk3r@D4s#w-DfL*PowdX zxHv|rIwZE3?bx*!i`NsR36qm5Ft(K=r6l#acQ5q(`Ipcfq>zF->FLu;@RZTf*FSlR zhlFGe&MWX*tbnm@Yf=E#1}z2FAhY4Nw7EIb5YgNm0A;PHDEcp7jzi#~e5<THH5G1H zZcED8qt(v-iLh-y3gwb(P!Hm`6h1OMY<p7k@@0BK>v!c_wvc7p?$zAcxeSdN$gm|R zl~hnskovrMp~k{ep*1=VvAlR;`)M5ho@dvKoy5FbvRq~pAvFsV3Vies!p0GUiLiY{ zuHDcsw>3sG8s5)MCm*xwFfmEc1aTDQ{pTz_-oALV@XecBu&Z|wS5Q_KI6W>39i*ms z`@WKuB@!1)%b3@%>&9AGXir>+<^~KMNLh~k>DSD^VPu3$4O?D(VFeB!&D*hD;;dg- z^1!mog$H}(Av+~6ujZgzW+8f5O0OG!kP~BL1}TS`o%>B)b`w`ZIsitiSZg${ONo8i zA?v55lMMy1oE+G_Q5Vn<5z*c4u2skOZcc7)Rb?8R5B@4v6I-wgjliP3eY;nN<HSu^ zyg|98x<*VDrqHJhKH#ui)6prMuZVo8W5F{&P$l<L&JO}kVlFcjEb3}%0e5roSy8gB zLp&XNpuJzePL6f*2?>2_$sARYI1a}6V3UG;z`Nw+vxq-<TAx0-;pRen#ope&JM+d` zcmD4?OHO6ZCn4VWx$d=QxyRk$V9!VqN0FeKJFEPCaHkqm{oN3eZkyHm^(*{!K)D<- zUy>m`e!bvBzvnW<mQLyxDYAwl_VPpCdDl??!5BdsYgh_FQw?GPGMr)9_!6+bUJl_V z1VP(l<HKJqpxcM-b<d51j|dx^c>E7iQn(hmWOa1hpc;!s<dv13ttQ>AtyvD^R4xCw zjMOk1FS}b#w#E-(=cWFod0tECH+!tJk2XOgZe|#oponq8&}HP{NXC(sNoRfRooBTQ z(X}(DPh+du#oj*q12LSqun$fVT7|d{sllu7w4f9fkmoW+@Y!>Ac7_HRO_0X5YpYl} z#@3=BKYxz7RuVz81KY@W&vOp`6^hSKorhvHY*vs+Z*!+XZ4PQ_ge88YSqdr9!--1y zWD?N2wdoV}Q9XaY0-px=sbHudAYMt0VbdRb;Zv$SoAmGohe`YU*r0ID5in(;b?o6G z-jo6<11S4JXZI46u}^O;es@RSh9@@e;2D7pg(9bQ=*F>R#7Z*1CeMVDI^53>(a|Bm zVQ~w05G$?*rS)CsAzDo#g-b^J_bGge-yc+iU2IuW8M#_`IDcts@+%&9hQs4uTCX<Y zyxM`i>ySY(ZwUVaHJYB4ABrERpa-a}9f|Yj4*iAo6|$I-M~}qh9?qyJDClJxakQH+ zLpt^V=R-Wrk59S7pij=pTZNThyn!VsN0BCEoXW8qx+5r<@3rGBr%K$l>(?Jr6geHY zgv@4RqcZliVLAxiFNCnUS-OwC3lrnx@~ok(Y`<qmfB*a$_3T-$VU=tn{L%ZHZf0k0 zIYaA=oqZW<Zjke;VYOXzs`e%Ggq_(r0fBHnl_ux_Y(h%}tK)|HUt3xt#qUPtFHuat z>Swu7;x9eeTO4}XlqWBbD2LLpT+DNMfCPnCTs7=|K1711Ub?=qA%P9~jaA1+DeP#T zJb4l-WqA6yx1F6@jinSnxCS%t!3`3o>G)1mYtShrGaQEUk08De>SQ9ZdOA95uqMOu zs-3uRb1s*^fXDWx$U`l~Ig+f6j1cpfo1Hx^AOLA6f*6UqI(3tGR)sf-o2#q2g#{F; zWu>LDQXhEKUpZxMc^R^A*m$O;riKo=7$094*S^MH$w_b3nDN=`X6)DGMBfIasJ7UB zI8Z0RnrH^~Gw25z>cftZ-l_P6(^R$f*@x7{B1A;)9LTN*b$2ogT76r%1QTJ)?}H;F zz7!(xM9w%D2U&h>f(LvWh0~pt`UMyo-l*MA&^}SMvO4Z7Rl#}64Tebg!|qg7I;`Ge zuN+5AL|i;>lntd9L{FjO_`@@hB^(QY$clLPi5-Vod|<h7voR)spv?o(q}q?KM^8fl z2QG>}suwO?SQFeZI_nN$(sTS9UEjaMY@mLYgo~>LiUg3~A6$XLwk>2Y2#jyR4Udgz zl@l#P&iK%<a&q|;KmYol4t;`Q9QfLnuqM*L`U2^fc!~aohD&-jUj78*A{^vQi8Cf# zOTCOlFSMXy0hLICC!&nZPAODh{K6}L&`9v}e|`IQ%eCt3w{Hho98e`UW{Yx$xk5Sy zBEEK}zI=3yov{PhC@&-lD#PKO>^zN34MEWp?>5e$%CT6gDY^4(_~*~X9~BoGz1e-5 zaXMpSV<EDNm2J2K4Gl6bFYiTV-3_6QE&Wvr&M-Pui}9XHO3((*gbu#!M~SA40*m`f zVe7R_v_g~+uR>Hbl>7h*JAxah*Kyus$Hea}^lM-X+Y|2q%F7VX7dq*&kKq@beQ$4h zy!-k+@cq;hq`&i<4z9RyuI3ZsRI>G|hML;SNQ6FA7?AQZpimc(W7RDHuM~n1KTA-} zZAV82l)X^IfkxY#v5W4G(l$}>?}D*Frq(-HbVHyIDi{n9Ma8)fO#7pW+STRT8x07S zL+dFu^;3Pl0u+VXT!<1ZR4A<0mzyGwBs!aWBsMVy(HxHwu)2nNfFL|jdKU`L7cYK- z#Jvz(ndSE^4rb<i6$aGQ)C<4+J)vrfn<(Tum-HbE%1a&Zby8lx*4ESOYi|Ale|acZ zBZm<>mf}q#=N&QRQZ=t?T@ymh7;4fu8>M7wx2dpq`;R4}Gw>D5IZujwNmP6zqTy<| zgC@y~8!K_1?c16MF18VlKa>Zv(Ca`4i`fT;z_Ae#I4t7I+bt|6a6*uaOiWFKtc7Cu zOdmaIm2kAZeY*=19;lcWe{bbqxC8a6TZbV{v$VMA0eL{kGeCNSLJCC`gnqHTZT*tU zgdj5N>FEgvk<C~7OiWCyq5k{IxK834#Gf%yfGAC3$C^I0q#zb`SlnG`D;NqwkO<S# z(~CnpocQ+pPlBI-!KvZCT_0~|L%fBSg2EO$QhBM1`K2q6e#FXpLw3egqX8)kic?56 zm|0lJNlV8-e3OTVj0L()Bv3nj^{QQ5B~qUKG9r~etTv6*HC)YK60XBh_-?>rx+aJi zdMB3hXdSY%+nN(DWU{=Vl!DF;DNCGA=(~58aqnz7tExVJ+{J=++w+x+4Lq+te}-yN zYe&bZb^S<q^qTLQilxzy`}enR`cl_R%#-$%F$@gxeXcb<)V^Q=FEdk9TBa>{uRoF4 z8md)6)%kO*g$=^7g?HDSE?+*gls<hzSA@;yx-N-*z7vG`v5#KcA+M-7JWgT1G+hc& z$~$i4!jJ`(`UHuDt}YP)f&In)7h~U#b$QspK`qaAKuV@#PzProazhYkhfWYKNHKNf zNu9jCEMHq&E43?)&mfprRaJ!?5xyTw0kKYGD-q~gpc;dgphC;+a-e@7Kdh3VIt<$w zC{EtNvxti7^4dXyC^Qed^=b3EG8Je;;3lK0>Vz}~gj-$z73TA#aqJQ1`6XIRL!djU z94!D%6=+C%Ab_)lUWC}>Aqfw6D4js)n^Fo&PAIUUZG>7K)hGN8pkvmI2n*d;;xZF! zBcscjn)&c(o2-5H{{7VJD=Bc?hE)*?l)#y(UCT^9fl48xQf%WQfx1efzJbBsofq>M zT4W+%=diXm?`eUu6Q~G|@?2N_lj&cmmnFMd6lNKaq)-P=8q#=49ul%OaCH?Py&@6| zhe>TT@~FDqAz|Qv(p$r1%P*Lv4+3N#eYb=upDA#JUQEo!f7iHrl_vHkOcY5Ip!#Jr zRYsZsEp~{}P8;q@M#B~OhcP_!4nKXcL_9iicpSLhxija90=D*M_DZzJYxOssj#~mY zfWnF7rO&IcqNx{&Z7h%Za+8aLL;m#o**K|Wg6jnq%J1DH+6;NHp8@|^A8D&@@SZr0 z)02OhC&V;No}M-H8D;nbh2+KG{rZod4ZwKS(#%Y&%)Jn@Fh?|fUMdNqLqtu@MO72i z_Q^O4J%WyONS$%`ta%$(FJx3&+uOxm=Y}CCndyXB2orE)V`C^ed^j{He0U~_lHoLT zvG9IlzGUi;T9bd!l$kVS1^3X4_8j|q_>1EPrF&?2pL<Sq9h~fkY9obImEW3OE2K3t zw0M=d4EDC)tKVmOMif1xHZRQ<TSHON9UqF=6ASJ~Z6A`f2&(<=FNfmr+`_^ORTvH1 z{Dz>jVMHZLN_d&_oS3eFvI}C9<Km?G^iM4j-F*a|`hZ-H8(Y9lU@lc)+Bp)R!6hzU z_UhG5*vWRrU+}xb=9AG9XHs|7!Kz#kel9Ufhwt?SY)m1d$TL$QNZsBFIv4!l!7k5y z1D|H3J}D_F<#=%=81+QJVZ{oPK{2%FZ`<1wOp+;}*O;F;G<%S;*jzT4UM4|xKclGs z1|y6?db3Q(yd<9!bnhq93{axNdKDce$~c<N+yBl2KCyf?)2*V_aZr*U^P+$NL{*<U z{3kl)JNx<=FP(x#qd;`2-H<Hrd6Za?cj&ZSgiPAba2Lp}Bj4D0e7k9EjJih`8Z$6Z z4@(&9l}sc_aA^%HZT_Jx7xy;0^IP?m)G;Cd<B3!LC!%VMM&@8y34i%L<m9#1Lni%y zAN=Siuf_=~J9~GrLBom#RU#Lj>$Eius(2``L&|0yI$FYFcT753TL&j54l^=t;sm0a zhQ5$N+x^>BC+b2&LkVU1#fzlm<V+$CsTq6e_U@vZi`hQ}tOH+%4t>gAhf~YPX^&IT zGJ*aOGRET4QaOa|@VO9NFHlfy+p+7Sx)?7L2?@!$bH!+l%UotzSy;SAGkH;-KYR%7 z&dv`HjzHH2xz2NA^=yj0JUUxQAUWbfLp+_}mn|)An@)N)9Ac&M@%<3ZMoy$ehGAg% zGC#5NFO|WV?u%F>fm4<P3T^zN6S_q+?l8qnCB*1rp6y<zV7CbS5NJN15f|S?nUDN2 z?2&eyb&hIE&BgycFnX9W!9@%j4YM;d{!mg33OWZx>yk>HD_62Tw>)6s0sWkYGS;c= z6$&YSdMgwJfJE*>UKc7KFm8XDl2R+C%5`-C@<FU@Y-q3Iq3nzZhh7SzNew&>i36gM z7pvRb^E|gU0lgs`Q^!&@eZS|qRZEwNpwH@~SK`8wxLtn*x3A-#Bs1DCFMCo^6wb&~ zJ-@R)dC;;?8qhjjYHojvCb+G-T8Nu_W%9dy&ld6o+SBUDeMyCd5bk)BnriDAv9(Br z3yDfNL;SvI1G+K_DL{#H!55^f832`@_uj?ogNg<LJ6`O->X|Rl!^B4*;54~xKf2l6 z(Se*29TCB`s0O4-%Iw$IalDn06@u(^P%4pkg@14`^m(S+-ya4jwXgupX~2OdR79sG zcVoX}&v~UX4<k>vTju60J_Y^iKMf5GDDa`+skKQ#hZ_|bp_ziR*LE-FBKpp54=a(L zOMYxlZP0%sVOdz7z0vptDne*^KXiM*07HPEzXZ~N0xa7lNOj%rn+>rK#&A1D{A5|2 z^oq4C{N0{$Ma)!DS4XEC>Q9M@tjhQC1<9hNi4K*{hC$J)MWYKDwtBCqiw|F1WmXR) zNfCv1!Nk#-Uz~T&*3blw+CI)96@HR42JJDdUPfjqExzX+Puq`7lEb~5F%Y`b1mKsH z1>GHBws)SAaAo+basV)mB4~4FV29MvW5@Qa1$I8-UWSqoq*fqygfj1fj?OuhkPtQ} zWtk>X!FeIyw@*n~S=@6|^qB(sc0#oUmEbMdd2H^za``e;1x3+PTe6aD5@W=JUx55# zib%hIsreO<Q8_tNG^o8rj>Rb7pe>79_kxrZWV6wTmmmubykiU}*ukbKMTf`7dycnq zR67sdr+`IXBS0L06$MNUMopfD#p}rb(EA+%ZiN?&-*bRdu@gYKxjA}w6=9R(dL@Wn z;xI!M6}^7x5)a<RNc}TF52zo1>YZKJWtX8nMvJlvAOZ?Ra#GUHLVGULLWn%WpA!mD z%Qoc%UwDK>cqb85%7JN2_qqXzIC0`c7^f0?8EOXCfW@Pt)mLRLqu@ae*LV3aPDqpX z6+4sLZIpyE1j`oR9tnhl2%PL9B0BI>OteD*6%cPHSlHoT(Viog5ZWhaXNkM3{EOBk zwMcXLNKlLs;yo)0yLY0ZqFsg$jrKN%1xRP`%^;Z*$CVWfAou;=LO85F012K|#K{1U z^c9}|scp;jmYo?aM~@QxwV>yZ>BQBmS7GASBbQHDtlaNpm``j~S`Qy)IZ_6(J5Tv& zc{z_Czgzog3W?F^2D9hN6Ns6a7#hw__nuRxzj5P6Tn|c1HXfdCU=SZaig0sBW<OTs zL;(o!h4k>0_N|td)Am0<FV4-aLRb$l-k%B2z|s@&$%+wkn{Igt-Eu}IIJgLK+c+(9 zp?C-MKz4Xg#RrPHA3hK{J8QxoGCdvfqMUE7{>gj)E)PHH9)@k-12(7X+894T-i_RC z{ECW7h?@|k4mBaiL~tmaRJjHu36^c);WWaVzg7fL7os4>M}e;%GB`J*<AP<JbWXeH ze1`a~&S`0ODoCR@2@^|o#4&dX1qhi2_9m|ch`Wix=PoVH8Wtcp!Em@pYB7Tm4lLJj z-9JzfQ0ej@obSQmVPiA1Pkc;%lAU{*JB2=w_FFTLd#eVt&SQZk?PbQ>X#a22I;qrt z-eas?Psb8rql*>^;kKTRR2uiP=3n=c0XRHCHV>GW4@Kxjf-xVT+;*=IH?tvV=uJ_C zaNoYrO@oF-0P1|h!=8*)fChDun;=FW;}?g{8x1@vbF`e|i`8&Xn#4zn61D0<=1AQP zg#A#oLM|yIJNumdPelg@e$R6}9#AdEcg2uAB2?69)9_IWmrmGT{awrCSz<d-Nf3y$ zjOoM`ApqX6F2+EMFCry9-NwR#XOxDR04q<UC{gB2*DnWxK>(|k=KWDb&-w8S2|aIH z;Nceat@oE^g_D{%8`}+F5%4@15M`|SSXAgb|H|8Yhw~kDsmNmxCH@>Ic6egf9Rvj2 zS;%?YLSc~b*OP`rN|M~3YC#J?0KM~PfP7E~25{yGXwr2j&C8^uYNJeO%TdtK<PlU3 zeSF|FFn%?uS0LWcPY(GP;o9``b1$n`7@16W=ZB=YeL*5Zj~~ISU8$Xg*t1{kH}fLv z{<!l#Ge@4UuSvxDbMx>Z)>VJ}80bITQQp1dg)J`n`Sa)TR^x>2UuEb}y7uneUHs)o zIfq%B25eN)(!BZ3oN?{CODTm|&x<26GlL<bEwm_6FZA?W_x6^v%O77|BOhI%X*3o+ z#`Bg!3W#+N8AJ*nkT0QRvAjKJq5KpQ;;^a;@h@Oov^p%0!CdXfkFKt+Mk=ux`8vcf zD(cyB4JGC2Lwl9eqsGP#p#sHRM<-|O_>$Q-X;wAM*tRwaz|)XGCS}>K!jRPXS6PWW zu*Y?9_bIJ5f>Sy^LFtz*3YRXy>+d#vxEm!$&}nw(TF?g7RQ3r~6ciQhA|{469GjpZ zMut}maMc^tkHJ#a0a|(x(YI)Sw=y>pw7kb_3rd~?bgqXt%EQ9r;`)|)65HX9OeoBI z(SjibD6&(L?b*`^^x)4g4c=`&X=3MdW-0DAQWsyk^ae#RA~Bxx3OrxX<^k2mCApfe z_r;Yt5>XOA3V6OUA0yzbIDypHuLHj5BR6(*2qKW3J$q0mF|}8++E;c`WKT&^fSyvO zuL3=Zp-j$>Oqr0wg39vp<ERK@II?U^3V##2se8Qahh|nf^gSIN943()5Pi^z9)Wf* z0|R<E7|r-?Y~hcsiUaX3Z^vC^^#QW4sjUqW+K<}zm6-3~)HS|L1t^8nk0GyD_6a;A zl^CH}Bp<|mw3e9u=@r<rY%O~TmAcH{Uo#&<CD~VY7nmfzIMn_?;TXj-TanB!TvJGR z@bN@L3N$%+1P8RBU+Han`e-9N2Z!&Mn?Rw0_PypEY8l{GKLKa&*Z4~iPu!4ar;>Yk zXch*zn-PK=8yl2T$jU<=n=ZICkhX@M(6rp+_0R~15GpbilNrr|;|4?9fsVur*-1eh z6Do*U10$X5b?@|oO_FxwO`|iBp6jzDDp%1DV4M!6&lrx|HcPn~8A40?IKbgHlsy?M z&t3a29wcq@!enVE;CXg7U!)?9Sj+E!T@bCU4kVEvmz_%3W3061Tb{RR(_lPP9VC@N zdgS!;8Y3CmzLza#7+I4hjEy~q3=TPY2;i%NqWv%|`(9w@?dNx{>F|P3*sK|%>gUhD zx^gElL4&&7(D=9)#hrQ1KZ{eO2pAB8Hu*%6j>2zqp)CaH3eEy_OVxFxQ2~(d@ui~X zKgP$$!^d|?D~pVF^SQ(p7jB8Na;d0jkMs2UGpPhzY{U36_m#Q6(p1c^;zV81K-)1g zP9siY;$*wJATR1zfH?@PkTMJ}T)EsgJi6s39R62T*tfpeZ6i9bdT;S*Z0rUeJ0#Ws z5SiY*3CAD!0bow?aK4Kq`U?u9b%5T&`f8e*{TYT;sF(`lN#~(B+KHG4Ma@euTQI4h zhK<RX<J3jKt_YS})xSEaHY;wI@!*VgzFkC{hG&Z#Vs34%mwi)7Rh8m?bM8rh0Y;;y zNZ@tjP*sMrF%R4>T9f4Q>@Z*se)w?M{SHufK*A8@vlO6!f-%e>4;?!6V$0?nyjdz= zDMiD!4QD%(V^7aM>FdZ>Y+K)y7H$O|S8o;aKbrVH;CPfm@+0JilP5!pX>%ua3XeNE z5&(%?R898@cbtQRW70$f6T{?7w9^3;UHi8h=5Ty^(hnH5RU%~BHF;Z@n+Ghf+S{U= zevk1Z>;@4-D=I2*^T_w^jXCFhV(Dv*kcr8x_#0d&U1TCuI2rPxc2`e|i|bjAKExdA zbF^SnQxo~&FAqF(OdkS)K?jAl4kII{=t@53fX>GXe{G9VQf9i$4g!3zlpaLGhWAQZ zl3Ycf21-O#X-01DADm7|3?fPo@(a$%=>>`@@c(NY#}VBRyeVLSwE-U*hznnq(_jYK z&2leO9IY@Cg=<z9@FrYVAdpmt4+FmbhEZUl;06pC-|6fo*{o<yz9%OAQTX`d&K+TB zgbth*J+R^Q0)U-N#eT1+PpK)*haJ)N2)v9fW`}X-S;2hL!)quZKgowl;r_y|w!5pV z$f%|XS^Lk7ZSBp#4X6}9;b;JU^m#*%w9$B-Ac~IC4(9N|OcH4s859=LJwR6Rc|JdV zBjbGcb48#)*=R8|G;-^B;~*~!gf}ZM@27`x9c*Tn@b<~~(EDz{wXn!@%L@tTHq~TL z;RH@4o(Q1(>hP}}9hjt0s4y5AC8GX*otD<9Pcoi$P^bHM{g>$e@jy=wbS0dM&p)h$ zDI}+%6$Q484jrXP;fM5h*K!p!G#pXSC)&{B+m#Yj9UL8jff6Kg0fphRs#Na!MlAXq z)#8_*Td)0(o9CNrmnowwkYpA`^@C*HNoC0%A`?V|pF;LmS?1y|W*XR+oJ`6Vso0lm z5s{K&s->j`$5kl$Vm8$SQ$5_Vj*bpCA9Tm3VGzr5;Q<D07<FSTh2C`%gK<3fp}lcj zpV7yn2t+OYC9+J(tJuq*ESPuVs4W_&W9CPssax8sX{JU;0bslS`pP|hg7}|#!+I4D z04qe*H=X$T_+GY+U*><RaDH;RNXt+69m7){NF$F;SimF~M@boWe&}HcZ+dkiU8{pG zU}otn=6#aatt5or)=FrSl%q<3QZ3XE#EXiG;30;_9k>SS%^&Q|&CQ(!cId=Sp<oJB z0$Ib}o)6S2?gzXy+e{N~Lw<1<pbG|207oHk`jGxCG`y96RObM5<E07moG{3*?76Tp zBd7OEOyS=<XWwwZ467c%HsD5^%G|s3htHn={#n&J<KQu}^%^x2AG#ZeLA$!SLEo4C z+&MQ?1VT*yLnyV*TK5R8Sd&s_a8D>IDanMaJe>b9+`ly|{Z7B!1M;M}?5xL{y`0>L zsAXXKRAUq{6%UdIoekfx+a+d#6P=9vHFfpjabcf%Qz-fW`euQt4H7*t@65Hg@R6N$ zCo?_6$Ru%7F>1jZ5ce|$Saem>fLH*CL$8?Trh$QE@@1eIGB&Z0`6nko8RrXs#`W0i zuqL@X5q{77Ec82J+%$H=8^;oS0WfkLL`oAA?|XhFp$T%F9mGL7ahQ${m;%3m0EAfW zMWXk-W0%8i$zM9<#Uvl`zO!rli=&uZ5x^w@%jd<#=L8%nRkp**0h9+kPVLEPQ_LGH zH|>#=K*Pl0f^W4u2EBoLHIKZ$+{7uo5&NycP$E9_WAyK<moAY7)rh#x_0JxJGY~o_ zv~n1F0pwtInA+u}o;edk0Nb9>;O`jYw}6cWP4ew5{7{0&(Sb?eGK>rK@~s)9{J-2h zshyQ%gHCaE0kjoZ9QLARL^+B%3$xKL(6^UohfwBH9ym~CUUXqkFCnHU>B$+s<<3(L z7-TN;7w}CP+kJo&<9I(mKl|`cCOi#yHAxWAjlJ^6oq-Iabde)%G2>?qJ;cBeyxBis zi4>*CnVp(yhN5rJ^#hZyds5Y25;rOzyJ~MgkK6&rOU&>w0X+8Zw6`R)>TC7Qk@c6J z1{+&KO_xpHF@_*~!_yjW#;=l-K`TNi4lDj<jEoJG6RO1`cNUK3#VB&xPxp0QJV$$H z=;J<g*6?h@BP=W~#_J?I!j%n&j*INKRXp!k>}oi;aU#iGkgl=*(`CaI1tq0Yhw;k* z=R+hm4^dLGq^BAU7p&kQ_)8}O+;A?0=Z!=@QVP06Sd&}eZJ@*w2hjuxlTh$lvy8Az z8s8@j1kiwehjn~QX|=KNDH%C9K4#;<^hksg|I#WJBihr_*?Ezj3i(a=fQmxI?k5vx zCoE7Idvl2kh1r2iSW{E8-T=rr<#d4(+~ysB_if;Qe*0#0tI^;TxM2i(Si16gul2Xb zW%68Zk=>KRlfZ}=)UnG)sW)|+0T;0Nco0nXJl838?w9h7{`y6aY9}sE+_dq?rYOdM zxZN4s)QAXXCKx~tMAG*(H$VPz69(8kMNWb07`oxufcZ4-+j;j)JL$H+274|4K4o+B z^A=`iLU3j@t&8L{eXy7A3`T?SI0&A9IfoD$L;1#xKPocvJEom7dq;l^4b7t_M`uRx z`4FudcHdX*g-!LOiKBl3O?>;Q4zlRG1UlK-p`2_$O;$7i_B@)}C0zy_s>eI~3O#^g zI1r|fa*ts2S>`&wYi$cZoafjvK+-Pw1H>X8tTbirL3TZHi4#!}it1v!COE3*8zTw} zg$0<7kt4#zap)E~R19*~{<4#nl|2)wNI(F{$$coC8)8s<!3$Gc`#V6~M%QpdBO_L< zo_^i*g$Hv6&cLZtw&**JVGyzw#UwC8(1kCg#Rm?CO;M3ZONhfrah>heT`Kg2A?m!J z(XpU7_W;G9@#(iLxr1!AUzR}X!sgf{pPxVXTLAd`nZ%FK)7Rh3Mpf1=9{O|)#|JkN zG*FC7!9Dd&4sGz_<~2fF$w5Jy$h9iNV4F|!V#6?hPtO&LOXsIMc$>v9vbO@BqLf1F z3>W4jB0535z2d`%7kPPCf4udB7ZT*9*Q+^jJ_vr*Gq8>~?CpY%F@_<BgIyNhE6B^U zgw;W(e1tdQ@@o|90IIeNepwm<6%6OBQ+@xDPBBq|W}d&AEtx9&znU!tjHWQ?F}2OA ztds&=Y5D0W@aH|gtb@7ZD3~lEEe`k^oUI@6Gk+{P_f_i=K#Wcx7)RrTE?)CFGQfKW zh!<%BLh=l6#NEH*#}5lO+fPR@r83O^p0)n5x_jm^pgQ!17^cJJu(#ZE3mq8n@0+I% zVV=>sg%B3Z_g3KkS<gn$$x_&2Gd>=K-FF-ZETMoO!gjR6S_6Km6jESa3@Wp|d!Oq3 zyRYYcIq(Ynm({ruGSmGA@^87WAuYPQmjIx{$OVZKm!fXPzs3liF=tp^sgA9R?KhgP z@@6z;2ty!JevUeep5RL7^ZZV0VGx9-1ATpbK)eEbC(vU<wJdtCsmV-I#jZ@tiJ$I1 zs_5KNB!hp_ntW;GpvJ=^g8cxFDf$~}sHiH#4mLeK4y+Lxu)T~;@(yPzUgzX2;GOc* zPoc`Kyyj^le5ywF9o{W=6+DlbF)~>Hbqd(}knwfH!=Ch{YrlA}6nO^3hGY~=c!))J z{#=uleU)fI{2@QU?V7`97+8SMT#%AEGdoKsFd2Wk$rF?S^Q~NiitRqCFr36FQ^2MV z@$It&^DwHwPsX=Vxg~1mvsHY2g87K3sr<!@{wUeTT7H+4P*PG_3b-K##{?C?7pb_| z?fm&|i%Hx6Dzg#;#7tR_6!QnmMxQd2LLqKT1Cv<<j82SQ8mUBLr-z5tb#;%=>}0^z zLAU@&(T^HUr}9c-Y3T-%0Rgf^pz>;a@u}?a#hgc%AyU>sxv}(%)9LIi^)Z3{Mr_}m zY-z0Ux~He(Vq!i^tY=N?Xiui?mz0xZ4K--LMbvd5tZq2ok5QuT=jzng*9V>{pbFlx z2-go?O!yMnW<r*imkAyAq0_7YxqvmJ_&~oa0A|jK6E9_h2UR=~)?vSlUJBs(F7Flu zMEDScm|@eE6HsBm>;t1Clo1#kg1)ytTz3G#2;K_JVZAPJ0~y`?EB?;P!5<|wv;|a* z@0N>zw1j?FUc4rj2?QC42CQU}p@pYE3eW`oSzoaSl#Y20JXtk$b??Ht618iU2!B4M zFZCUyI-o6>9>j_`DriN)cmuwnX#RkI4x@8Kyub^`{Ep|u38bZaW9!M?#<&Q`e<Ruj zI2M6{d(fkVy+TQJ{P>r?K980}8I&MUmp{0nm%@uz=7g~}B5Xa+o7?^Fc*MZ;P)hRB z@Nja1R01)5Kn-D|dRypTP+YpKEn1;a&C6TFaXCt@P#nC-+fqkd-tW293r;CeK71_j zUU%Et6!WfV1~of3_xQ16U3pf~yd<wW{r^mL3-a+Dun0Yvz&5=|l!M|R_3`7!VBExm z!EojboSp#^eXXc4gpcGhU+9|EE;9=x<o)}_FfXsHOp}xDQ6q?#-n8l~iIjcG!O2NO zO$|c2h_EohHSW!uU%=+HwqyDQr({;2tnBPeN^0qB;1JH!*HJuSIt~_auq^CZQ9ptj zdd_9$1>wZYD=R+=2%tM{L@ad_bk(k|J7|ZIlo4VtJA9+&<>Q+Nn2wK{fZ_u+=jZ2# zgDOxk0qY)rj(Y^oSKegxbSv<G{TwqjxSvNv(8ldmi51DkB}T&vN;x;sFnxVb;9{uR z3HFnwsd}hZfH%?yw*%w>MG7<>&>9-AOZ9NT=LJ1in^_JBeDGzMed>EW^seAzGX^_7 zGwF1;rf*7<w+6Y@9gfUMX9fQ_31n#&`qAYL>DTkJI&~TDJ$fXSz<>5EsQ4~5NA5X& zFv`S@1V<~m@qE@RpkO*a6zvNDi_%}doYzpgQVuQ{VvFyC2PdxOkm`Vl0DBCMQ|K2% zKq(pi@#BN`lkjkYZ6R23lPbHsPoty-{sR6BzKnK*Es>4DvMKI_Xbq}$BrHn=#%(Y| zd86?*!$Y)HL**TcULd{)4?a8R?7~EA{XNT9_T^4u!q<zfa_d5~7FNK1d1M}Iv{BGI zj*GJf5v{0p1@5RYx<R)_@C@{!2&;3)L4*ApY}>f=NVx?fQM0IA;FcOg4XZ^)7gzs7 zJ{zqH5}e`5Z}3~qH$U77m<H}-{$GlYMWog{&*$dlHKK}v7d1}1hldAg0*)Qp7x+oV zor}lyhiR^|Uk5l2`W`DXKc+l%9wSrhBX-^2Nrw43V#nwZ;miAYdTQ#A&p&zocyWsu z;qC!K0R;5nO4Fl)?j6l>FqBe}*vK)idxFsd!W<h^&IJULyrhTSqPKN*f#S+jw1>!@ z78ueQi+0{dQD4lf1q2rJ`#pv}cO$g;mCAv=9l}+GQU#uMu=7SYVLwOs2=L?VZ{Maa zEn+}!vY@A@hhyj?v0Ezg^4i5tR*sI4woY~dTm;;6_r85o9qCMjJq&mBp*=Q+Qe#~Q zq;;GC0Zl$Liwn?{!MGQl%XfIr;Pv|-M-Fbl|Iqr^%Jbos!MWT=71flx`#P>GhUcGF zo)$}=iF}uk;6*_tq<=2uo9ai*>K&_H6DUg`iE0XFz75D$rL_A%SC@A$+YC<~ghN6y z88h=*`Q(uiB<8lG*$!aRnaG~jR;=gArnKRBCTu%&PoNTqH7W`-+q3-qco<2HY>$5o z4zf=2#l0Rsw`aSTfsv6^N*i1kQI!gx+?a)SI>2yDa^QZDlqB6b5~G}gKZTPHSxj^S zx=g_S62Q&STc@g{uHg2r_|(vFKw$Ft=C8VosKZrM(qZ;wnJ-#H^J{SM_OGw6(M2Pc z<>=O+8310Cm37<DFd?a`@zdR~f!BX+vsHZh<gbv7^A+^GCP}G^=aTw}-ed3};o^nG zp$uVl@K4gxPGIM$+_PTnPNE8DRx`XcqDC#id91H@`Puh)+LD>o2$&Yoly$I%X7ZJD zK{}Bn0ht=O^=@J*dHLO=zIWy8CZa&-Yk6h!aNA7mQ68S5c#~Z@5}<G~FvQ}ffUdVm zx5j(?I9xlV_YrD1fPeS^(Tsw9ZL7mdHn|^kc~HL<TO3!4RF6`_IGr+t7JcOI#N+1- zi}}4IVPCb3WCRBmX*#r<fZo2fx6g&lzk`XIfx!oZQ>bj0<E<2Q6TcRFQF8>AHv8+z zeGS*lw^_4&e0Qoku5{b-t$-<g7}MjE#}_(igFbztE-VAV+#bIj?>X!9KEirf9^bq1 zCCm|){fc(>bft_h74IahN2okU(1t@XIXyqA>DD14NxvPiyZE&8KkHW_#G*>&foW_+ z{j}Oq9vp{fAPxS(`H>_ursZ6K^Skc;!xUnf(crymGtpkjbB~i-Xz`OIE07KVZ^9Vn z?O33DG;>MTy|LZW392C6?92ZCk8hpP4K0<~L)5(g#kl5Ge29Q5!5aunyC|ojr^kpS zId;uG`(NMwwWnvV;Xl3=y-S%?^8(LXaASca9WBB}!2kJm?>D_#3qix<e|-IKJ6%Ng z_LKj6$>yJb`~TVL;-BA4_~-w(AA1qAj7o6}ux<adtz}_piLC^<c-(Wr@Eqj@DJ8~1 z2czY6m?=n+KVjSpHo#Q}-6V7%k}q4Rb^kU3p|}7xe2WGV(WiY!2yOsCgbiUKf5xm? z5>8?C!B@e*i-=glIR42KDqnTNroh)!$!QLFC!2vq5qc3`;~&E_{!+vT6oRmQ|Grd> zEIi2<YMDlL3v6f6PHCM&g=M$7?mN-3^;9G*9lL($j9rn5?=H_IBu@NyKe74r-zFof zMA$&dwb1PD?q(zSGGQMBOL$Uds|)586)$n7yUG=$SzFrMKlb(M$;c!Z6|H`WR<{&} z<H^3*Pw|`MZOi%|-_;14HiB4Kb94+wx#sk?+{?=gBrw1gT@wG@urf16B?7Q@b%q6l za`M15vgJU@w%<#YEiHB^K~eWz`NS=mne6HIhgj60Y8&ptOU$$v#wbz8Vf=xaiXq!7 zF4f}r5F+8hR_q@F4O?3o{T9aQ3mPJrLpy+Q^~8ftb>eyfDN9mfVryac6mUQAZ8L6t zYl1`Of#==i66?)f^=3`4`Vk^AH$BS6c7^4?tC#n9(Q78jCv2C%7+C=vLNvg@V{fm_ zJuBbbBS#7|@Wwc?iMbJ;8G|FX-mm(9?~GJzZ)rh)*>5<mZz=}Hyx(5BC-^*{JV_k; zGd)9H?2RQQRJE{@l$Mdny<nFyN;IRp@_>BhAWt}!_AvZ{wO?C|FO1FX?8u2<rKlc- zrJ>f=wf)E;XvYxn@>2PNYQUP1CWZf!xZBmu>E1QGG!Tg;b##h>+Lc#g6%2Hg>sr=A z9sZ*{2#Ks+HQy}-Qc|*#DhxqL^MqAnPz^Zhi59GRbJTlwvasLLL1@j^;+@8-vX^oS z;5hutdgy;{ciA>fQ!wb+E&;BYjkPuQ*pQ$J1#P%@Ztk<9BH7!wvl2CT9({sse+QA? z+S=Nd7ByYn(ibm&faMbzSyH+OBj%Bzp&OQ#*Y)%;te(e~njyLMUk&}dkSBH{+P`8% zKg`a>6*T>;1<qOsBEac?gLW0;3#teXyeLXpC8d2TcQ63MHV8h%<dl@AXu%L^*4>{M zahhNRUHJ=JkjV6BGg+v#@=xFRh<S$payveDtjRj_yNFw1V`x9EK;3m$*A=uxm{M?b z`Oi^NQyUu@-9{-1GMZCEJQpd_5UOBoq5!0&N)8QzD=nb4=;zNfwBF(RAw>dtKje9m zgN!T)8vy_yrGBNXTxL3d+sCxu`qnL~Wi`A=pdOfz&7!i%QLzdwQ87Bi8d?DBHN4YB z^VMf}o3;@-F!%pru>mP?a&jFVKfEmil|f(JzFl_L&frRqZy@;AR`*EQ|Kv?+X{o62 z0N4jQCmsQ2&{+Wir=^ba@lAAQ4#5bIGyy;a(obX5*_4u!m~*4BEC;Ix=DWOHTyjOZ zsE1qufTHhLRD9?f<$*j3+O^EfmR)-fEqCa5P)dFO9uJG;N2bBVy9~dkqH-ge<UzAV z0C7w29N!w*9VDyO`3KulKX&iWN6H_l+Q3-Dz|s=VSrQ(fg|KAwR#RT|ETxVsSBf5+ z>@wH@h+a7O>+AP%cl$~Y*XdTFdgeQH9RG?@B~SF1#o1Y8UA3!M<IY<A#Mltc`=PzE z7|K-nh1k+3ZKJp}*>oVlqa2Xv!z042AU&3ptYhRXnr`=_FqxRJaf#}>sS-G_?H0F4 zqhz%*&);4Y)#bIV;|u6!_gn&ZHFt2(h`mZ)W06my@zRdC15wg+tUl;WCr3t--@iw* z3^Wug!twb_GZCLy1RkP6*3;9&)k6vgbp+tylQ@yGpAGT;MFTzLHEH60WAESnuj??} zBBDh19&uqD@aI>qC>bgrN+|+@QRDz$-Moz7SZvD7eYQ=hyk8hBmeT*f1%R-dXkOc1 z5$4-XU%uq#=aZu%*}WT8yt0MG+k08h2wNw0<s}IT1E^cEp+(c)Z2;Z?P@!qW6OfmL z$>iBv(Uar<K{PBlfR+;Qe{Nyn3Zf!u0>R2MK-%kjAGm4;Z6~ibVJbUhzIsqA|KFQ3 z%k5YPL5cOj%pe}7_q)k7;iw4?D>C1#jRIZE_yWu-U0hvRd=L|PmR{*ou8@&QUBBLg z>KrhG?W<5q458pto}VuWmA1TasRUr&KFzqYARV6UH}hxyL&+}ZvS?-a*E%ACCLo2W zgQr&FVbTK*H^#8(>$_$AQrU?l_3*rWD2kj<Dp)o(0#FG)G!P#d34+f!ND*?iaTOKk zv9{&8YQD|suG(c*oGdVmd)xEu9UK<0(}1`Psz^UJ1M8o?#ijnUU|y1)J>Q(rr)6<e z_R5v2Z{N<MUH#>xzgIx`^wzVq+-EB@120=%UO>qWAi$pjlaT5{*>y}9MctQYaIOK_ z<>ur#pmxs9)i4;#Fhg^XgUBk>)Bk6Y(dgE#JHPeRU6yIZ#B@Ek2Ff>!Zj98&7wUM< zs`s_E5zz9bX&GR+=rMNg48E3Wgoq;}1vL)rcb0w(Vbavn@()(|hCN$m3hb;*B2IvB zS5QELj~08d(DqgFE88?0b11q#E#XCK<QaEyb&Uh#1K=sZGbAMXYidlsrm7LBQn!am z7rEnf6z)M}*#6a+6IqMhW@A8~`QIY@qCQiZNUoJ}4lF)+v#Qsx^Y#+1OSyE!u1qd| zdA^=3lS`74pnrlHH`ZUi1?yiVpL=5Y)%vW0Er#r&7eTC^|MN$N^dJpQmKLw3W(VvV z(UDpKZ;4S9nI2Jb=$)DLGty)ly$WbjFZb3#Uny=ZpB+1f9toHG9#*yQVGHsqdWjDq zph;tc)8}reBIh~bKb0Q$$N)WP@rI90Jk82F1K7*@I&)YZ0lbwodvW3Mi}8-?>LhT` zFkI?<=?cmV!R=MIh#$;M3ujz~QDA>)C_PrkQ-EUwbwDsitMB*V0WhJfT6xIBsI$&* zF=c(LtK;V9cUWB*$0(7oq1C?=6)^}WC<ZW`HAN;<RlRq-9Bc?U#3BlU`?Yi0;ui?O zsLcRU`AtP!@Y@eCduzAXlU8IP@H8=aI&p*F_nQ^&r-H(kPgh-?IU+Lnah>I!5~D$w zlXO0J!I~hF`bb?~QBl;n>%dUtNI|U9xpobsA4mAm!fdkAsB=GjxtFH8O^uDgr|6{# zc5;~;o#eyQ!*h?uE)NW6!O@{Pas8+o{cFs=`?|Z=kWKL%szeUJ-4kRbqj~B)KKT&l zmC9@zvbAXxkSU6hKs(y4GjF{N>+G-r2)1|E5RZ+<6vZ=QqEBS)rVCXhrz41P&k)?P z!jP_&Nj0(Iib3)210S(fe53wp9Z3B{Nt0lql(<UVU0<eLo5$ylRDM0<M@n5-imZ$b zxaAGlmvL@O$5w2Bbl}4hu7+z`nEp)N0&OZRb|YXEm@y-e>PL(Wa|k~3qgxC;+qdZL zJWVi`K%uCUWgO|SLpz9czjGEo73`Y>uc7OVM~FrQ#M5O$;dw%B1pBJ3ot@~-G9^$0 z<3%u@JgG9RABST>piW^u=A*m-)_Sp*{Pd|H*ormRa!=}&<d`(vym5m~JFlffQg10< z@=&G(6Z^(SVtRV{t#5CDj(}`8Ix+%eo&jqmc$kRocjtfZtF*hcn?ee7GF@FU;47GS zZa?53Jiny4@ZXfgViW@6&7Y;E(XDzQ3V`FzoH_GYolE0;(>j$deRW(j`xnr!1(}(d z@gu%xnP9$+r0%z$Axgs2<1*oks*%doe?O+RI0E~~$t7^D+dqTo;sIhKYM!1_H(ED_ zj0^gk(jEJnJp4xuXp5g=fDb$=A~ZD9yzLd(iN^#up@^at!q|)5vo#D%b&F{}&W9Ek zccZB^<G+SFI!&+iAq8C4M@Qo|S<=pzWUz?h@NX>-RpP@gobSmnykfy~V{<(oF$ovd zpK=?3@`W)9eSN0??8M_8qFhLNRjEB~Ay*y0fICP4oJAv=K7A_i*eJqf3<@I4OTy#E z0&T{r$r>kYBLXJ&d5o;+Z>i0D70Z+O!l&Tmw1|oZ10>j^Rv~sDzn0@Kv4Pnth&d<A z*AXAL@7N*S07@+$I|1JB?Y#=x778#B?y+@Dn}^OMX}Ns+_U)L*<9(2Sx9Rcy_8xa; zaw}stH99J)zQC5z?R4blGvYBSnYKUz{#AE#va|DE%Sp}1XhuZ{9PnrCfW%*0HpiNz z{<%+N%g9_$*|;verU?9xklsE=UeVSb9~el$LB}=RhYp`5$8q9nBXcXtOG87$?ftJX zi_(f<UT0qoOp<%-{?^O0|L2PqGc7K2f#}$$PuXoPZ*kv$;CDpDh<N*X0Pvj@+eIht zzqdI@p+)mdVXD8p+~0<vD8s`O)EJrlt(x;d@c=OmSKbpMcdqKV4d6Z*t~^4<!l|=I zYHlZh3P=GUh$eRLVS^#m;XN-m!4rV*<<Jn{!!?sKaC4{6`2j6RPEL-*Cm9`mW1a;6 zZ%=+@U`ouV&RABimRY{ptR7Kj0ze$NC$E%avrL<;_xNHis<!S;HKflr{f5;CbP=9E z#2;DjSH<#zl}AvDQBc`>9us3}XjmctAbSp}xJPpfQ!1FQf=4)=1;7_Ib7So1zgJV0 zZEkXg1(;UHrpK2cw@Dg#ivL)-3#h)LHyisMYSep1Fg5CY?_p&%g}N2T0N_d{v5^h; zHYuQ6VUo<Ce2#3=a(Q(MdFEG7=lrcHsFk>+MHBR_K@Q7=_4UU@MUNalBi$PIX42F{ zp2;deEI~eM0Otya8h~de7dh}bFpMy+#vJ^kHtS%qOTfM%L|1^|pXj~|VdCi41Em8S z<@f){aQc&1IjI6b`2-;d*+n2{Z97pHb);eoI-R{sHSbYbEYBYBQT6cX`x2cGnxb#; zg$ER<nSNry3bhqJ3pl@<Q^}i8b$tU|+vB?UYXt1N6UUxmKmsh@n(xp<CeIi_lltL@ z4?m;)WfXU3=lod)(`O4F#m`^2U2I+mq8J=M@9!u)DymmqwDkJzTYD-3oZ!RG(2-bJ z=n6^}E*66A$J@*KMbd+qIs+m@FvB+bL2UW-F5E`Kz+D0^46=)59bVdN^<S78pO_52 zjv)bd3PZ!f?8ll}v@dXHSzBQPWd&UbVNLTwp>b+b5<jE}z);6}5#};tp!Q)r2Ucun z3V!cD){*Xtja)2RM`fBx2iBdEiM%(HK)Y9l8r^9S{jo)X)s#Ef1O^I=7kf4BI`^t; z5w$+$#UGSdw!=nJ?S}03pM;Gh>!lIBef#0iUQi(PKNpV_l8qX$718b_L$-JSQvBtZ zYBT;W!1P#uTtz7i0Dt;>wj3DpTYHgp<59L?5G%pLGJwVmGoqLuOhA<p(biSGfV0ri z(wbUX-5sd(6%xnkIFNUlwI2KKg^m;9ILUr~B;ifS`a&&nLUu+l*v6m(&h(X4Rfy!r zoZjy4DZuU?Ab7Nr?z4k3?(Xhjm~XwLpsWc%o!h?~drO9u#Esv7Bmd!B2Frr*;Aa2) zLBJ>ML}MO^au%W<7#9t`pmCzk|8p!`3o`sqsI(o<V4)x8ElW%Vv}mmX&EEpsV`9Rd z#$)wq)qL;5LI^1f0oZPy>ZT-RVTw2Glmpg<Vd_aecGAOQ@`pfFLGf}#w7?USFNyV2 zuL0$3tnQ<7WcXMvd!)U+Q?u_9gH=lfWhgJUoghKpBHvm+@#|MnVPP;G-<__U*JxxV zNoRXHFsho{s}-#Az?7GQ(w^3l_jchH@%Dg?6=ne-MCUQG$J-w5dxs24%F?*@n=}EZ z4J<F)@>iUz;Z!fS`eo)7vl{oQ#FVQTIbZu*(TtayameSv1DJ?T)0VJ{ysr278IjXy zq+<5uCRT%W&_AfFS8HEZRh<C>f#Hpz#J1}2PoA?+_#cw8Omc`es#-B@%yF6bx-4GE ze0$P~2U9+XPR(H01r4LX{kvc*^9N@FGjL`f><B^x#2p^2pFUmmd5pQLYI7<W^CJzK z5B&NIuq9t{-xswT%0xu&nDnigswC7Jjj?M(P&5GuaG&C~BSTDVY^g~Drs|vEbhKA^ z`*AAAEI=m5oQJe4MDe|I=MH8|<Gnu3IN&JlUnxe;5k}&bQuM)j#&uL6W1;nzw@-Wj zJ~$v?_ujpe-T5c;oQ<yQ>Y{`I)OC*{(BEIHz}65U85cP4E^NI~hC=ni%N5~5JNsi# zk2``UH#avLJX)<i0n%OAYz)14J>NQZa%eCxO{cr!j@l=SK7W*nem*|9vM~q*(yZX+ zxVpI5Hf4eSRTH46^X`$u%8mEliM3I+VY^Z=rvPIII1G98PHBTEH1`Dd>+$1Ocpa#i z(T3szBnAaFB*}-tn<Oxuw91nh^(^FNY~$-s1E3Ji9;?fwKLi71NH?K0L4h(dI*P&J zZWh4I508&dUq7*wSo36o9pZR+OC4ZGAd%x)AcZ(P6T~;>Ro+fcOmyR;1E@3l^XIRz zG3?J70#8I9BNS&)UBT-C``Zq<rt%$BV3;W34^U(FmfekBo9e~AMym<%i%f@%(gcID zkJZ(RQT!NQE+NnPPh8JLsgLOhup1C?uDt$=?ii8Irl)}NFx&ags|O0~Xiw@{+So85 zR4_88B_|&|a-`(;NIlwFyeRw2fk&04IbbFBzbqDs@)hFd{BJ8`3FTXx(P6Sh-q$+S zdZ1{m<ZfYXeDqGICkF5|K{fr|xoK&P*nfY!S>AvD-T~^x0y!Dq2NZW8G=W(>wi0p9 zP(5aN<n%Z{7eZ5pJq((|Hds&)lqi>MJu;I{NfN7UnyHnjFLXf3!B%KF=!5LfA3dT! zUY7vrMZ1S7XlHBXr-rr57*c-y`nf-v?l8AcG)C+}HE+^3n{HEfls(${^TMqwNYDPt zkhJnE?SV*$U$CaRp`jXHCzPmSdC#5e{_;ghPEPKJw+o>IwJq6sLMEo1De*sd`T%(V z;}G2LL8SyK;%N#wk6<R323^zolXg0le42nW>ewBMKa4?FHL5VcKrdcMS_Z7so|Lab zo}oT;s1vL2uGTBTx~O}DJteBMR}=Hkv{xMp!k&E6<=3_(q)@2BVpW`2abZLWdhy}9 zE3G2}4yl4tW39=awcoJ|iTZWcpK^0?QH+X8&xkB2=n|ls8Zk*ts8?Vd798w&^CnH6 zkLN>`8OJAO<C_1+Rt1#cvhlz{a9m#*jUN~o0Baw3Hvoe0>EriM>FnIK3-G%A$-Vpc z-^|p)IU!B(_xDGDC)v5vPB0zht5d?lu4r+PeF!B3u4uMtNCqnq9&=OEC2-sfHqM){ z=UKaefP+;N+mpD>u8WhA84LJT$R}8{rnPJ14aL9@j{w|9pKN1vA^Iz`mcSQmZ1goW zI0l^#sL-#2CV7a0;*?P}DM$kd*3xov^P=jGc6M}PcO0aoDp9CsZoU9MgUhpu;V1xb z9^3e*gFK15MekQXaXTwSAl(7kB+&XRol^36t{vi5HUdKtZKR5#V$A6qyPT2<EPG&1 z%Wm_NeWlTE)eYFm1m&T=sp&UbDBN`{z1jg#Kr5J@elkG1$aNkf+X%ujBj6XI6|bwW zA5?x={tk<Q7-cHsJ|c2p-W`+P+1-t{9dbl2z>_-zeSCd;!LCQYgvS)4R#0PoRuKgU z+Q6uon1>s52M;=8v`ZLox22B_`e;zy`|X3LtE$?J^*;zzaZk$RfC@0nWP%{_lYgV$ zMRlI3#;UX(kO0QzXg&gi+?ZLlt*j7!L1Yk7xs;HXM<bP*FwpPEy>7E`<A#Euz-C(v z9i^QqpaAb(`_S-Xeh-SV$D-n3T@64$4hFVszs?Tg;jvQ%U~G%&TI<1M0z!v26Bsg< z9wSoBYI@WJj-Zw+a2TH}wD&X!t~Nd+d`!We$IagU0Q4Tz)CR1lt%6S9>>|{}=MNJQ zT@3lPK%ulL#g6Ef4bP<SZa}-6rv2;rPl-0llZ`<?1B4FUG(s?p6D_nI*gi_kY96!A z?{7hWXD~dlnulRWRtB;DfV{@!Zl%irqA-{w0Q3C(;QpbS^1(}_kE2>SsV7u5HaV%7 zd>OS`?L#_{EVFKYi9*^oV7hxLLIO@E{p8T_NA`S3fm?MB+)*U60BH<;D}Y=U#Lr*= z=E44i%DIEt=kW*1I6F{a&XevtBJ={<Brw~VRPJGO!TfP{!Ty}%uZ1@nJmg0@w-(IT z@rv}yl~?Mc1Bv{evQZr%^-+ozP<#CqdFJ*>Ppl+>v^wUniev*RICQYbWJ31rb-Li) zyI=r<)2@B=3(&Th49-Ink9x1DxcG)jy3pcu?<ICB40x~*mx02u(O!`eg%hsDI(j6~ z8;wKQATw)XX<0H-E_CIt!QQ=l0RUot*9!U#7BZ}nTrhG5#qa6egQrjmpyv8(8%Tek zLh)tG5qvQ)pamz~8DI~1y#xlSTeGgHdD2yVeF*^P$Ppl?U{oh2B60^sWe<!E*4Eg3 zAieWZ7iIS-K1WOncQy|He{8)6Jl6aBKYo)UNj6ckiHs!4PRJ-bBP${!6iK2&DJ$8^ zj+BvI6b%WP5t1EchGb^*f8L$X`L5sJ<2=rA!tH&(#&tc{#b0ftJg9JMIvktuKc*<_ ztB$YJwnk3zNZQoW_<u&~MyVaw+F+Q%(i}F{s6`jd6bSz{*FcR1=-dtlll2#aIr7lu zf7|>0y_T(k-~uoJri0>sfkplm7Q`emDLWM?5g>#(k<oVa(E31^<3k8BrVjl=X@hRF zG@;U!iTwSd1CA?-R5ZIGQjJ^LZSjjI@`|&6SzCU&a7Mvv{uQK62q~Js$JpsvE-ATr zEi~v~*DJ&2h4A8{qM>DxKf+D)iJ<pJM$Z4up%Oy#29sX$G0|@Fjl)0QC)Ze&x21Dq zqd?K0Y}3inm`HxhS|~p~{Y$w|IjU`Xel0g?^1;ODp@s*tRY$fJ0|-ha%~zW(+az=L z|8$;c(T1V3GX+o~Q7v>;24^_gUaObU95OP*C_pSVVnjt_BUJ9mfY!kUcxZ)7H2wGZ z6&b-82(QNw=xNo*^R6i>dyGDw0Xt8XFA9fRm|RuImoL2lx&8b|RyM!!mMABOFmH&l zqhmnF1JdzHi#>>&;GpHvCm%2VoaHZZSzArTuqvoH5e<O|Do{h`YVPCmfWkQ+E)4+z zwH8hgL~3~P=ur3;%hy+*T>Pka`U$tcteo6k>V=WDLx&FoJhc<sxFPvr)36Qg=}6Q1 z42n)1!aaq959s;tyB=Y`ogWvS--?K|{!gEN0p97|t5;_;i`R~CQ~BWo<ayY<hjCP6 zNguFyV;uawyFf@NBZX2)0GUO~TyocD$zJbMqQF0iT6zeRhg`e>`du+IOGKX&QoRBL z(AM)>ToC}MHMk<a=39!c>NGD+@EHQLK}Y-Q!SwtzWO3hJsP5mp7u{grz6b0C&g)U^ zR_k-;pv{X%5G14II%*Z`Ef>z=&H+-(mu&TRCOtw0aRvA$P(QOEJ!#J#S%~?;P2sDp zw-{MFkAj~1zM%n6A`$unG;3pHpz~fvIUW6B=qAO7<5TSefnj0Hl2RU~%);UB{0E(C zIg%Gu!ToJzO3lyz4P}mvP5RTPcb%!59w`Epf$tX|ohuNI5eaz+k7O@K0%k166<)sn zC!v6AI+|ApEh&u>_#wm~CEfu!J67I2hFgcq$L=X&kEfU|FA=xLcA3>6c3)+S6LAH% z%hq4>5Cd%k`dQ?paWCg0eTTMlD2N6tm{q<PrDS1UUH;J{JOEeG3Pbew-GZ5%JODrX z#>QG4eK=^(p;2a3pl3DzS|bLr8VmnuIe9Kio;ESLv()6a)DbucuQ;j!B-M>>1S?l< zBOk;sXl>oNySfZV4@d>1lc2!zFQ27Sg)xVRh9Z#+$(hpzL^(T>tHAod>X)5f-1qHk zLe}21$Gv>-->S1gr?s&v;Iw^Hh?|s%uYfYX@WFq3q5|LmKtZba_mtu^M5C<9YWJS= z-)UM&DJdyWpN@cl^IvaVlh)2o)3(>M@x*O|o&koLs>;g85Flx5|HhGp>thmI$=p0? zk~f%Q5EaONhG2mCNM9pjE#P=kZmtjo!=`0xm~6OtQ{chvB-O`Y7s26U_wF;j6<Ybi zz9kLNNChTkJu*hcN#wUi&N8zGA+l_$b7rFOT+RA=K!86PR*gf=eM^;H-?zQn){5z& z5RgNC2@*LmWcPVoBoO-&Bf4CFkSW>2Ac|*a{>F2rSz+^yOP{p5=1(YXl|c0bKIcKw zBIgSL!;mYwX6!la$e=wpj$00y1K79mNlC(DbEtNZ=eK}D>ca||CZ$iGGRgtEzV;Dp zR6LF26eu&07XhUpR7yuB*U^03!@CU=(6?{jkk47y)PzWc-#BK6W6I5dc_5Yrs%@BP zec-wrINRabS_^mEG-ROs+Q~?${D$BcV$xzxKcnPs_Dzq9rd(3*9~v`^ElXh>vO~Z~ zHsYMRbM0^HrBoGY%r<U(@Tr4lrStzfsOEgmOJ7GHg+~lf7qCYcTCxStkvOKlrY3+^ z*I@ihYv#0Wpre>bpF;4_^Ec_~{;T9cow;{uSMQQE{U9vK11QJz<QDp4brS;g9y*#U z$>C<8%v*bViBfNrme|oh@e|@sK82pGxcCZEa3B%n_W$-q{p}4I6senVO7IE_mZ5w{ zPJ)=&BP@e2S(}ZQ^dTOe9@r=-m;lJTva&5Tl^(Di-sM+48W;QTPcJNNr(}(Zi>r=% zau;%#7lnlt7W0KKUvAFt4``d-pM{^-*qDQ}5UlwjUS6CvkXBHGY5=<@aCEsC<RIEV zoKdExaY)z$CWLE$cT+qVaHY(goVDri$E~b7aJ>*kwN@WIN&PO(kGX1z7sjBeg5(G9 zuPHb^C#OA0dE+A^U!Q2&IpxT<q&+@&>-KG|5aR=XP;kQOi8B4d#r`cLYFmEY`|F9C z3w!bu#)GAi6ebVN?Mt8~FQU5bEU?1n?(E@Q8l-ylZ-BYm5vvdWkS<J5U-C=wh>jB6 z+<vNc51vCLujUFm<_zt92zkKiMKl)Rh(zB^I=UE>soY|9ePNvOPYQ~Un(FFb*n}vO zk>0g*Uc|?9{A2mP`r)(CvLeF)t7_;#R(^h1Xz0%E+i|^CNC!j1BtzpFw=}=M1`PSv zuZH6z1^Ab_QBl<W^R*GjH#RC$e=bh&ySC+rg*9XAB;u3@?=tu1Dcm<5e<KffH$|e( zg002|))t(uY})67>|yNq^l7JSUo<wv!-NFbX)eW{1@qhc_{1*Mp;Jw_j5Y5SY|~|9 zOTcSJ!%sOue_(&mIG-q>S}>g^h1S(jtm4?<t4VxbR0PDZ6n8Mlk(0@?%TPd|QhNj2 zM6b~?M^tOFgFiGLs9F%u`>DQ(p`kC&?X>mv+Ypa~dY3DrR?c;Y>WLHN+a32SQ>Y^& z3R}pk&Xey?)WyR*tu87JZgkkqTy#NT5_%V)0g_d5`u3))vT_ic5X?rkmNG0=cBaU8 zx&g!$Jra5pK!50rdw(12WPO3j7<EUU$#d2D-_o+SGnL8dVXTKW#^bnoTbrs$J{RKu z(gi7REbH@rBD?b9@x6+(a0fOapEgt152?ubt8*4W_LTf*+^a$Y0xXBlLyo>fDX`Aw zV~qmD-a4n-ec}r%D=*^QMk7U?&{2|>X5CZr3;*$53&FbqaF(M*q-~1;5r?XUY}E(m zK`0<W>*!hD{=YU_v41uR)G#>o;NC{IK!%+*xj#+9r&#+mYuSop6uD;0bJO2%VnY^s z-^LC1tH%e)8?;wh3uF49+x^Zyt+2X8H8->SE{%rzwdbBQtq>yEUziBYv%ys!%&34k zyDx|~fL^u70?eFgnR{U`{|$oT3)~a%rG%^TOhuGoC3iV_AWqgUD9}`cLk9%av15Ku zp78#e5^s{)a`Rure^2QvbX2XwkWbTjw)GThWy|tQ{1m^2FaQWq3N}G`Az~Q7*pAiZ zu;<D_A6V$=^-*`cyl6Sud~sklAj9RupW_%rg<LUQ#|Xi36|G{wWOb^RK=>?QKwB$y zuFZO?KWt%kHc@;y0G+Kk3ssXFSA@WdP19xT#^&bH4e6zL^{?|XXW#px;6z-o3*xZX z^f|`H#}Pp{<Nh59BrjgRBr>3xKd*wy1BeM#kBQ0VeBJw}s-17Wk2HJh;V4C!LrqEf zq3ewXdKRZHC9a4eDXpS6<9u0g3}JVGI9LI1;g%AcpOZ5QuB@e{1@|fuyf$i|U%m3- z?s#=_EbsvoH;=(I;{;D6W1y@?8Zl~_f`ahP3BBtoWE<QRGGf=hS)m-|r`tUA{pIy% zoDqNapZOTo30MGStFx1nMfuH7>hI;Ugq75AWPkbus^H%0Fde9Z<RX-n2-+2gNCG$; zxTL>nmPF$*^y|6Cg-V?qnM)0HOKk_axgSFX0W1x=wOb#zWCaON3GFdv_w^v&nlNDW zbalC=tn;)tkr%%ai-WQKV&9u<nxMjvJ<n-?rb$<~;)d4Q=Uqm5W^X-&8{fb8)p&x; z;T@CPG*Wf`DW10Chk(lioa$F@fj%2@FgwFTH{;?=*x4;Gj^NB0G7;uqgEjZmqi%wI z&CttA+_Agq@Q<&(y=$w#S3xKO!}lkKIgh%_Bd-2O9!qnI)a}aUuefSJd<${iwHC63 zwg-|<FdKl%0FX^?_yBoLyATKuv+-N6P}m=mlPv%_5+hmdD{iSo-rY;s{RGKn&?ez{ z!d+M$3uz1x8N}W-{XWt1GFp)XvhTBJbxch|?$Bx{f&}}|fZaW(5~XPWCb({dN%yM9 zjQaD*{KuHKpe)O)!Kz9Zln(WADbm6oC}56S$vzD2DZjB=g0}<g-QbY##^&{>FJ2h5 zd?z7XKY<hm9F)H%Ct<FRjgLqCI`HR8FoD%oz5B$gCdOJSAymPz0Zgz!DOQIBZde~w zhCD_ZvmjDU&&YW2-~pUZh|AR%h{hWIo=2_2!nKi(oE;oW>*zZWW<o|yh4UPLEO6(c zkkmG!xB}<z68}#C8z`BY0R14n<7koz{4nrZLX7ZHL0%Q)h^}r#SlF)3S9?g&@8{wh zqI-|+&}nwdNk~U#Ho9bZ&QOSYvQDReJoH?}#YN<Hg>Ms+Y(Y(1FOV2~g*kkup$FhF zboT#@?&8&PW;(jGtSrPv?w_`L@eiBizo9UD8STg``mnt+C861zcRU2n{E1@ux*X)) zx;H1X*9WSWZMXeCx!0Q1&N2R*q=@#vkmO7$Kj|K+O9K$axb(jh{t>Wmqp0A-sO+x_ z<CG<$iot!A$(t{=#U64I?7RTw2xim7_Zp<rN$*Ee0kf4IFfz^BHJ+~wPzBEgAJ?vx zzQ20R_<$jr5*T#~4E3B&VX4adY$T?nh)!o)+1j=P_yAgHXr$R+aYoNc^7X4%EU!}| z?L(IivfS$>eweABcvwZhhg!C-$`J91d@?eoX^Zlu<uJwEF=r;&?*q38gllju=<S>| z;IyX5@NgO|(k4^xzf5YNx02U?Om$L&y@8>JXjK0lNy?0k4gemc@x}=|YwhgTb&8m+ z+ChJ5nA*zLRyQ24cze+)eX!(euGVyC!S%eHa`OJ}Lw8T|@$>On`*@5s>;tsYNra2I zxwufXz~3*WPyw(8arKD6>9(gsrZdfXs6G&y4mR;yk?kDr)q*?a>m|e`=w8;1wT1AT z!#*3@P*Fp3Nt4tL^6UDI8%8<C8x#35_@BUT+?S>!&>9GNG5UFWdawTvqY-8DPbXTX z&PdewIGTUs+kx7w|MUsvHBQZ(yu2ys3qJG-B?drc2NN_cG5|l-)@Fjz6ciMMG!O^x zsJrnV`Rh_J-%aF~FO@f07os{oiXa78a<(Uk`d8N0+CwQq!HEoMkhinf(dr6XQ`p1c zzLAe!#|{=aw=A}dXwZ7I2LSkF6tF!2qtILKgOukBa8F^ye=I$$@(M>bnkPi#nCj`J z{WH#k@(!u_&1(?MiURpVsfV_t;w&U-4po7)Ad>(*d|;pC0}X%YPAF~%(7d>zT<}PM z_a1REb9J2o$VE1?zuHL5^F9Kr-Q3(<T??N*n}E~|LQ~kn@m<CzCmRn*WPWK6H%BA= zAPR93%J%k|*p`TM3<|<-#`OXGVn|-e<iJ;uBmlf%w7ia;2iqASX_)SIPB1qiqu>Ax z#^@e<f8Qs13}J|>vw7#U$(|t1st<ke(DvU0iJtY@`T5$Kn$KUpgtM##AUcX<Zf<Uv zkBA_dbyXldfiRE&62SN9>Fh+Qh(resWfn9N<>&%ot`Qa8?o}QntaX;xwttM^P66pY z66aBpD<Jm<0jLmA;yy*jIaFKIc3ca`*4H^A)X?pyP?(qT1g!EB-XEz%n}ZI8IBR0^ z-aV?n&jx{7fwbH-O1L?3sQ_C=hVDBg`G2@d)c@dudfH--s~a{;RD{^a*j~?I)^i`D ziB)t@gh=l{XZV|YNFP(<nY~(Eby+WF>O|(f;$ab8V6UxIv`QNr8^DJpSaY$;;FaN_ za{wxssICeg6Y~q%RG~b^N~r$$5jQzJYlt9#DjRtSxMi?Btm_~}*yYpb|BEQL3j-L6 zCwQOj$P`W<>_;f=9!faSg{ltvG{T~ghQq?D^12F-nwHjx*84erB?#g#ugvd;%K;kk ziCuSTtP72a_p8@JJe*I#!5VN6>FOTL=(?{!-*|s-d1RdpNHtVUsPq7TkV#WO*a{mH zjZ&gI$1AIj7Q8*Spve(YhF_y|7DXIVAlA@Zak=3cepKzT2lkMcr*-lqDu(aaA+KuM zC@3i%U0gO+f0u6^p<!p2hnNCp!NO0^z^V|X>k{r`Ivd(BgDFd_15Ss+G1Bfk^nAmo zk7(`hoNnnw@5BEisTf@wq&M~;3Q!8+X!F#d<pknKj9a?^ym#q=<xN^oqj@>Z@tJva z>^9I^DNU%nfn)7sV{0%eLOM8lfx0OET`Xb*P9XA_-7<}BjtY&k!7w<V<N662CG0q2 zZGx*D#5O*RlZdAiyn)!^UC%g~ozJ{5)3Qc}AX5Ii3aoBp-+VPaa`^BSH2L5lMw^`R zcqCYbIXDOxUL&(D5g|uuDj^7i!Ei!|tur#N{%pPTx*<O<Zg(uzg_cp`dv$T8+T`oq zoouMj4?B0`RwGiU=W?^5+E@k94cZ^yqQC|v3D$mEW#C&Oj_P~q)*<x9>V$XX2bd<1 z*?gwRMja&v4p>?x*skqvot90P$t))a{qnV~?aHM~VuugoegBWkny?g%6cVc&y``&d zfGMA*rdr|s>f{~(5sV_nI_&6luO6xYXJC;)6{~~j{$_=)|9aW~%I+istsO`FzodiA z|MbQshfOCMJlUWXJe*87llYmZo`zH6|KEOR;1ndwELv!Vv^d0O&;R)Y*^3l^GZIxN z`(7X6=MRV~x^1y>>FcSgn*tsSuHA*_PT)dCI2Ldu8YQCAwj=M(lmvlr=e;Ti{i`<x z1!`$IP@Kcyn`T6zcJIF&cQb8ZgIim(b91W|nhx1tfae%=66MaFj50G~uzR$(KWY1k z?>Ecpyvyh3US6V22Kk|Xqg*glisCi0F@r#3p(Vz-D^*h&@k59Xrz9W;T#9L<tPT^7 zwJ+^Uf1kD1wnj~gy@u<N>jQN9S<s8ENUZ?CFT47CYIvBpFZ1D20~ZYizMX;KVFiU0 z?{2pL?FUr3_xZj0?|}j0IGvw@2g;<ZV#o$$j{Q$ZU5t;qx|hxl?AwaDl6s?tZ|`aV z2IN_8!sB~^lpYed&s|-mWo5Y2q`7`*C1_bp7t^xs`ApQmFY!~7Sh6870P(2nlWe#9 zB#lm=uG_fz>#8PlB~F~kK+mP1VA*LFL}QorFD^mJGZ?0GEhcc(|E|Juyb0hhFg{2} zhhy^RvoX3m=5LfS&jiub;Fz3HupKzS@aOTW3~{#F4az&#$c{TJhJNeavlR9LHjKr} z851NBhMt~^zgc0VRv4P!Z_y^Yl<od`r`?4ML<u7hvWvhk;3^^z)=rQ+u52B+unkta zzaPHTB(Rh%#nLdE!`ZUL4o(=x4Gw?w2T#Vz{`oWi{(Zny5z|y?|Cr!{NP9*;^c1Ql zXddytQ2uPp?QAW7>qW}G_d+H7>ld;3(VhPM_I4F_IBurgF;;y4d|*WolBjf$`cmiP zz*K#Vd2Ijr_8fPidQ5wUv=25GqLr_kh;FYe{<efgo0irUxcWm(PMc=DMUp}izT@v7 zA%5j&&iB5}gzK6Erx8nQZv>&WzWe|2(@pREchc4LKH>Ee27xka!u1_aG%K%+T4MhF z<zOB3|97y~e|?VlFX4>;<v9HB&npIy|N8|0`;&yv-;cG4{*V9u=U?4D|KD+81j63r z$TXq<`)A)-z*mCn4aXsIB2@nYQa?qm2;A`au&pEif6RZrXR&4QC0Lro;b2!t1`;r6 z45`$A?!&r$_sjCXcDDciK{StmQWX~JVp@YDhd`MK;d%oF8R;D*;4}DM2oO|#to~qE z;{q1T|N0=y%+1BCxZ?p6Cpl8p5yF<68zW8r@8~&8W_t7Xu8ltLt6z=WRR~HLK4o9x zvly{1%wQgI@lDfzzS;B@M`vf=sJh_1t%QDB+%|ks`xiO@hk1VowZ+Wbfy455!TiPi zWCDNZBLZRi@Wi={a`_jFbx+u9m|kB@ZskAg`y_i-p`0f-^l-_^pM$@gvd5%vu6lKi zJxz%d>nVR7D8a+!+7K=O{O;A7q-Q^_R7wB$a5WBp{IURJRwl$celOnoJI+a9yl+o+ z?8dKl`hoP$of;f8P#_sYPRz*IPF;<lA!;O80oecw$~m!vV85e(JoS_=7rV)rWLi09 zh?KokiBn38RHsPw4zlF?6{zd}>zycHnY-}e?A)NcX+r<)E+h;o!fTK83lwW(V+e({ z(9yx9nFVyU$r89q{_j|rkZQVzY(dKLM=r9DHsd(JVVIbh2%ZDR9@_S?wv6U*&g0-M z7suO$nm!=%2jNK=wv-3XhW{<%N`ZJ_Yz=Wv1eD+kf0|@+f`)DkL}_s-3ZznM=<3ii zsucQiFp<TiWeOzkZISU7?d<8&o_yP9b@5SJS|FF;qfSMG;8yRQel(G58=d`EMIRJ( zF}xQ~8BO-Kxhg)_B=Z}ZMVUG3AmzyTU#Kt7S*JHja=8IyfJ{j}FF3tk5<~TH(ciNK zmUpjaFv#)vqzhJFW|_Z|6+REU8Cqh{TIo96*%a(-Iy=BH0kOqPA9gDpQ#r_sWCaFh z=8W`oXjb<}tC}NNAMHF+`Eg>x+=ojGj)yv%Of^)M=*nZ_W3V0Is38pC+<~#cg*rwf z#s}H>C_v8rowA5R2PYO$<n+8tnEU<WZ7-Q4h(aaeV7RMeUDr!4bhsdeh^VNpTRTou zE85h&Vz15i)m1sgqq!}3ggtQ6&};`m?9gY{$uE4*GF6A)a0a`s4tGRYUHxWf^rD1= zCNNuV{kq~McXyae(u0E3@p}Tu0o3D{)Q%|Jr_Y4mu@mE?Q<XT~+M&!txSRu~>7}OX z8W;fL;x0Wk_bfH|w2<Q;8mdR)u3Qd<RNG)8*k9C&2b+anHdCyH=Ow+N9EsB9H_Q;b zp}&Da65>S!z<w+D5f!opWQ#|;fwB*v?pYfFqfk#TbEgXz3-=%6eILFvV{d(~Jf(-w zV4|SEB3!!ZCc5tzfQSx2ZO#{kkt<E#FQH5Rcz^F}l+%z~v7I^unJOqNT<{n(g{Otd zEobp!Aw0$%rdQ7wg~Tw<Ye|*g(E#m{^$f2WRFC1o2rU%q$n3)`N<Oa$WiI%RZYy*B z>U(V@QHaTgNX2<&HicJ7LO>6qoHj4k0pCaX_=?KVNlnel!Ic<6Q$<BZR2X76uRs8g zv3{r7YWuJQOvaI1WCEd#gTwxfrv|LDl8>bElt3GSq9XW0{uV-=ZnK|LQqlt)RA42Y zHfu2^4rJnb1GbC{6qzo7b^(}W4IVY%VGmmbCJ4oNodjreDhdh$;gVD$(<NdBErK{8 z!0@2Rn@7QC;|+_dvmqz~d_k;7iT)h_@n1<jVYlACm5ZudYqAr$3DYx8V4A1L#VrJ5 zugRl77Pk@@qC1kVaa=yk7OM1PhySVTIai~$#VGSeIZB0o;yDy^GF?w?(knTKj7s{B zD9zW)h2M6>ONd)?49zk~<*0;qY2@D0p|H4qAok=*4ubh9M`yV((QtZ8iZFj``?mc% zL$81HVKX=pb;h(mkoJ?B3;kfUiHm+V^S0YFJ4CWCSc%E+BM@LQ0Le*DLAJcSjE##< z3JO|c`=xsK(D}x2nd&fe0kX5%_&t%Qat)LU!Iy{(Dh`Z{K+^pRXe4Ustm3VkB04SE zF=F0<2Of#fa5PxM=VkNBorJ)yaMR4pET>mFs#nW+fh;X^{cQn;J7CNZdzcX<MF3=A zd%6=4z&#gh4Yd!1MeU7^2l)85RW5|&swTb_DJg#082!lYY{T6e>S4ouc8E6kAItNC zi%Zk_=fEI>PgbB&-+-(g!-bGPDgWat(OCod1K|$q(1R6pIl;w*H3~H%#u#BOG}KGV z$q^?L4EUs)AZiXY6Ex2wLqiO7bX?1H_!TCRqysbwc|L$Y5oY8j$Hirh&Ic6^c&s;L zGFQOHAxQy{S#EwlIRV@ZcFx*~tv0g&JJCrN7&U)C7VCul5U9VCFfcUq0y_t-I3%gN z)~zrwC`Mx|;W~tt=xnUJkVX-beF41*fdI5#Na)#q{ipL29T#!z1X3rkm0~r+Xo(+& ztLM|-?9JHtZN<BVg>zAw;d1x#^aPu74S!KS(Y=GnEl9m?Kmm>W1W?cWxhOzfI1g}G z)>$1)(gHDR4^|!%X<Rc?;bj8w2A~=h7rMh)l)FH{xFW!ZBTmTz<I6OcZybAm#id^X z;N#GYXMd^DLI4dNsh@zxxhMibr#WUY+i7S!>58c+OJ955&gVg*wSqZamluAuXPBfp zP>_k)+SmO2w%3`sEEtP-8l{|Hzs9-Mm1g7U<L2pa&L^B-JxJCMN<Y%laj#3Bjv!`Z zVsq@;Ubn)>Prk(*KAx}8U~yyo$wMjzx|yq%0sY&0;@HF~$aFg1Yn~MC^8VE~_kzp7 z_h+T_9qQjsR#lj7R{yNq_2BT=x%^u52lqenGhJINS-0ZWF5pfN)Ax?mq0kf8_(b(W z7PEiz9cY9nhOEOZ{(R&%?5`8a*5xv7n6Z1}<x}{~*XD|p;Ni88o4*gYq(@ZV^1ko- zvi+$(YXaF~)a4Ia{2D8Lg}e+~_S??hKjGp0aL0+O&Xv{_cQ|JBXCfarADVl{d~ZtH zHuJ6D{cR6wd}i~`E(bA}@;bHL5{qXkZ*)s2iqjcfqUU0qY$gZrj)MqSn>OAOxUWo2 zWk7pMNX+BfLdzKyk8A^suS4WkXOV4)+Z`oe*~7ETYgm71it%Pr#9ey%;sw!biR>jL zz6!A_PIM@%JTv?-$ywxEU$y0KHN+PXS)0xBgG0sDhck>s<CH|*FaOip9KqfFI{?4H zlXyx^&G?Py!Gup}YKek0pwXZ&giGnq0;MGQepEgBjIFReFry>p!Y^Sl-b{(kqVI*r zWp};qH8ix&rXgLng>wTe(K9e*qN1DM>y^ZF!2f41IXt%O>h8vf3W*a8r`1A^!R7=6 z5r@v$+A1(RP>)J{QE(1M2*L44@C8=Ly`yLO`UdcB0)d#(S8K>Yb4h9sbpXihBt*0$ z+Z!A0V|6v+5Fz|nj{J$RTg>2ufonV2Ed<7UB{d8a{h2UXxW5(-sfG${1xp(hWw;P3 z&FanSj*geW$#Ef_zA+%8SppcUXw$FivFfdfv`00E=a$#Rw=3_u%tS$k8XO-G1_G}F zWG8yy0H$4uBk-+@Wn;@7r52!QU$z<eSDb|w9NJZH91YMT#l}z-#{nS$r~^qfMxr5D zkSXMe4(k(4c7>`1qDKgg`8F!dU{^!73Pfl_xv=!Z!hrb|4J*Q-stC32TyFd64lw;h zBoyaB@Gu?K84?V<lG=BtQF%kX56&3jh1Lw5`?rOvR+@;gW0FL{1;KXl)5@Vq7(D_} zQ3T@|#giA^dJN3fghNyxFJOYmpb@}TWU+J})jYgCt8R!j=*y2G%I$t@HnqQW9VFs& zE(_@xT=SeM*D&B&zPz1q_GhOH4;Kk{S9mhh_seFMKKsqDO8&fLlO2&fl6q~6YUzeu zvaPpTzjK>8E9<i9#<k)RcWY~}I;!7VFD1P$wAK=QU&h%U;Ool`*&qL{p{q4e{fKpI z!2AnEQ7`vHb_ai66i?5o>6h-a9bRI;_`LoByZ5^vRUw+LaerdH-aPfW5zNN7&@Eeh z^_WWExW4F-WbLQnfi=w6$h<uir}XyoFhxy$t)3jYYsG3XJ0r7CyLa7_|6q->Wm|c9 zjQz2XUh$P)#h*l<HDHg6n3}x4N!;MokMzS8wv$~tpEdfzYOj8|;Q@sW>*ko3&c^rH zCIW&CcWYNyD{7c5Cd}Qfdz%*J){(4!&ugam<y+UP`ij-jvQu;8p3CYZWzW^M`<bby ztX!?yY0_#nPEGQC6n)<N)QRuQ;SGN^m8nt8J64F%AUb8lor#qyF2aAjD-xl=^TsSh z_@e$Zk7;Aah7u<sfEDT#qJ~D|<9RJDYVr3l-Pm1d_*S3k((c*Fev3ZyWa(Mc97T@W z2u1jZySs@?8#jmIOb}mbbKv;)DxFpDivE5}0S06#Q^#3BhGF)`vrtDMQNkh8xE^|A zI1q@29(0P6v7HT?d91^K%G`3_mS&KhCNY(i^$>Wu;$~`6nx#ZBl;Nky;T}sO9t0&A zaULe<L>^?gjdd44Lpi&n_UWIZaH_)Q#kEvU8VcZuP!>8kAL9^A?KCO3_P!(}Bt$|O zo98MzdKv<OQ&7K?6Lci<wmxVuFLfIRHv>x|x|87OTZ#yuzrQCgB4P$$KN=wgg>tBQ z9?LMmi+>n{A~6LjN&bekg2Fz67=SO<&_4*&pIL4l{Q%$@oZJSykI)5YW@<Qf#cvmR z0JkCvHb-mgTQ1^;TgBsuQfpl7_%s~_8Fc_a>;%XOQ-$&iofTF7akBN7`&b$qFJWTm z_qEf2<e~b&<ba+R4%`=>a3)JEx#H@^5LrZkDrtJx+RUPozkTZ#eteadJ*GQ}3J8Sn zVf}+1OiYYughYxe9CkxPdyt9+zPZ*Mt}8qtVdH}Ljg3wSMgu%b@P*J8Rmr)ko`Y~w z{Q1+=(9rYd+H<p2<=}@$E?S^9LM}Bb9kfYA+RaP^quM}JqZ+|n1#$v1?#jT}ft~mq zeiu?GKrPDvUUmFviIObLhr8Lzp>n{a2xb)<R2!IFLhuE3ga;4LW}xG)9vl=4O`%#D zP(S*B458X~yJis9OXvP~=0&3w_H7U|c6N6I7}si4MyWM5IZ2ck;#tG=7-Eayzh6)s zYveMhqEoOy$|s_%<}o8GG;}Kg1Of+bI9!K#vHV(zfd>TY8XIL%WqO$%ysNHuhMIk_ zN`U&f8pRMl5C}53``M0A|I|IY2UE`T@px|kX+;Z%%W217LCyEMWq6c{IeYktRpPoo zzW?eief}k*xZ(FzhAh7id)_8VHoaYcNK#^+L-pa}o3QH}r?Y!nTe{z0{ghNSPdC(T z+Fbr^^K#Y2+rK`Cmaj`EoMd%coWJqC^VDL5aB{$7z0nn!yyVa4>K?jGH1jIlG$jzm zexLQ4_h6l+|7{WL&@WglQEMS5tlh79LZr;&AR}eP;ML_w@q3dOVpfW+>+hc!iy5v- zdHifPvHSUX>fd|jq(wb1+*1@FBP8CK{yDs%JHdC<(kIruV|tVG&V$g2n>>QfeO<~! z0ema*LbnoCUw7>(pQHWc5&i6NkXm5idYXGl(fhnxEEY|%Tgu{j(;2tsgsKK_Osu?a z(<CoB{FUj{U45m4W!)^)XS^nSWD4}dL}yvLGLjyYsFW{v%xQEHd~d&$H#46Y?yi3E zEcBR$>h5IX>7?YPBkH)@M=70aaV{0TGQk%Gd72S!HONC+ifs{B2Q*wM^>a-PxdWfg z!+=75#nOwhmOD!wqsdHW4zSLScPL+Z7Mno0wGW4pKnw3Sa`GLx47uAG;_V|%)BZVw zQn4`qlKGn-_wE-E@SGb7h2|zgO<942h3X^GAN%GSJtJeW*Meiq9v(}J;A~p8`7+O( zw<b7;ly$qRCUsmEhD(av^zYErYHxu!4I_@ch{^KT<@cHRib$6VZi}jea|Ks=t~n!? z(J?>s@<@&biSSw$f-e+Vh=T$tfh|u;faV?I!mXr!4+qJ2;YNp!(Lj(WSWW8y4F`Kb zk<dXw!FnjT-6?=06BY01W1EwA5(*%tTU><EkC@2xBo=ZK^gsx0hBDYdA#uBD$w(!F zU<9TtA5??-1QnKmAR?lr%=9JDXw+%eiRT5+Z^^z45*%F=!ME4^R2qkAboj$>+36MA zi=3u$z7q(T!IIH7vlgt(1@#6!fum%m<HLs!b#=t)QT7IxqCt}$m6F0`pNF|Pe+N!o zz}7&Ke|$<W%V5iv+sHe2>VEMP1TBP+n4H6qq-BZVJ`iy>K?j{W#h|>ys1y@Bhmczg z#IfTbb6f0R_-rimb8(SgGX@9z7Ump)g?QV3VMYrtuPrD@tPIs+bTXJw#*wuL0QFF% z`isD$mq&8UU;lxem3S6`e}b?DT2PJ^vi**6f@$`nL?_x*9~*|bqQ5}=$sRc`#6Ha9 z(uvggXx|2i2pLL+CD0hN$$DPGDuFH@=Y>B7`nJPjVqh#Q?Jt<vqUGT{kuW+m#8KJ@ z*Zy)l1bc8Y8=9G|0nY~F^*|{V(+22|2D0|>@CcKKxmq&>aPpANMiqkb!ONo$s>12I zPtHq%lQR|UnfsL{OgaSXN=z%nVVorA{S`7hfW<gG)8Ygcr|Z4WB)qOi2i_5!sp-0V zZ@1X4rYqi8-6zMl%RM|}P-p|>N2gqrFmUR;$+c6*Wukn_8Mlykk`g>DuW_?>FMiJ5 z731Xc`TZX<QUQVd)kLHAjHvBJAqELrKYP07t83Cm9aPr$o_rx8Kp;>CjkUHc-SD_( za^-e<=IP>I558_3UY~{1nm%ysQucj$YtuY8@4}n7>C-2ox?j$fUkJXe*~!+#o2qai zdqDPP!f%^~B1y)qkc6ENYRcJDp8V&);5O?fAyD_O`7-rYG4CnkeJ8y$!{559TvVAG zKt%F8z|G3<mV%dV(6X0*A}1IZut+7KFQNQ->}{s)+V+U8e@2fZMFUkaK9ohz+u9zC zJ2`YHxY`;lDoPFa%aX~%4fQvkujvVtQ6g%66~iYaCAs#QluHSoDefhsSyQzAaV%9N zqS|^VyX+Dcc-rgp)!{P0s+8O51JnL2lE$5k-NOc)?ekCfmQxrsE{t)IL?>9I{_OCR zOjcfRbKV^DU;4Kk$xJ2HWvcXVOd1-x5ZjD8#gc77e*QTa-w_rPQW;q0c=2Lb&fNe- z4##7K=H+QH^6p}jJRm2xzP`Gtz><U98|Xr@;4#^C92Xa^bkOhEs<@Ujl{WwZLTYHe zT7M#xl^Cs^mPR1p^aBaGoq~d9T?#ruO?7n)XFZAn;-8cttUFsqXeFt<y;osdMnPqG z<#c__&Rr+@^czKi7|$Xx(c~w7&}*2TV`J|gv^NYybx&;hLGF&lU_(&Yp1h~tt@!LS zz8bayAp2HSM`qG1w1LDB2u_k{0(;xrW7K#MWQ#Gr<Iv%;l;ezm4jTO%UQQSEZsR4& zO6$FEu3=b`?j%3lL_?RPGB^4W0{)|FJ4SZvz9vq)iQW(El3ut1Q36g&dl0iWO<WTq z_L`&0tg!4yM(;XIJb1g6cwId_sHv#nIY#ftS5&wFl?9TOK;nFZoKlQk+5{uWanvIW zp38?gE)_Znym803WC+<{*DH^XeE&|&CPU2wWg7RlcpxV5#~95{pT8%G=`m&nXZ_$O zz>(ZCkF)DI^Ugrlhgn%aaVo%7uR=d4ig@7>bXmaN0Ha`Dn!rjF9u65fIRyC(eJ-A0 zuTYdBfdnrkzVdsm`1Y*Y!&;L+Y_=1d7bzJTaxyaLW6q;XDq>253`>31fs%?!`N&50 z(zJ$rE`iEnD%j|Y<QnaUyJ^+L_S@1Y_t+fi=s#Hdc>UF<UEl0BUq9yhW%{HuU$Dz; z%P$}1-!d=S$O&&&W>eOqW#0|lFf2`Y99PQ8ogclv<a{hpJ43{91q}=NV!@-xps;?X z&spiN?7!s7;!eC>8vl~~<jJw18&RUCn|6*yg&km-KD!zyBU+wR_JDme6&=?7uXhQA zly9-Oz1MoazdX{hmGF>l!&|mu@a6LL3Lkg&nXwSNMajo~P9>HnNeG>$<5yfVeAZ1o zu9!a-?0P59AdoH8%=>c4@EDcM4nD%bg3syrmDAUMlWJ|RUW&BjUEy~#zUX1~%SUvU zKro=(?n49vIps2GuY@Xa))P<k<y8MkGAI|o(qbRrET^F$b8y()$3}?zkph1`fVH3Q zURZMo7QjIsaod|isv_$nl=q+QUx0syE`(^C2CRzI@?7E7#rtL`3mz3;nC2#l$?`ze zdx9?tvLzedB`v;qW!+V8PEpZ(Sm#gj(O;3ky=9}SX1cn0F7_1|#FZ77o)TdY)O9w& z!yL=AAF@>MSs3YF*rYb4EO(0Z$Xuz+>owrS;m*lG8No5GS7ChoI9CM3YZ2{?dZ4Y4 zn`L;`NP?c=n<FtMK@p@(M|tPd-e;#d>)Mev3bNVlrKWm2BX|Js7qUa-O6nb=eu~EB zH|0WAd*CA-TUc6Jf@2e|W(QaT3BG{5&hD`c-YM>{L@q}lFom>39*&xTv*KiMNC*ad zL4l=mLX+SNQ4fX?dZ4EuvKyhHDx(Lh?Gb#B$Aj(71h;b;yK6lkGbFUAaf2-Y=FnVO zhoVpvnaTu&s3NEa2NYPK0;ewV_GiABbLI?9+r^71$s3!TG`6K4HeHH46f@co1QMj2 zhQ1M^oX)~?4ieqipUU1svJTNicvXM_k1#hq-3AvL`g>q302_YHc#dVY7QI4Ef>VT? zipAGSm7gvMqx-O*Y#|3upD=PdK8lTXM=2G`>#=GG)^xeGVd>4uiJq5A<4|A@eN0Vw zDCrEd#@>}tY+zk5X;2oywQBl>4*9~=1Sz+nz)X2aJr7~*2%0xM6M^w)0Fk`o0KJKG zT2Vd$-~oLF!@MGGg8}WZ^h-?JA|W6OCG<Yq()A786L@(Xu?ngQn9%~r6Ketn__UA# z{D`K}xroEO0?1m#bH<EWoCPejJEl9sSZZ6N;1Nh;%*xGui;51<1+p@Px6u!!rK_u{ z<hlMhKux+_ibIox06v0d&^2~Nf|GWZ*5JA)?;QEw_`ZdZa3jOT(L2#^jrxVzde(Q9 ziv*1B8awj4|43HOs|tbcc!qb1ou36Z-12ir;W;bLy!K>Zre}>NMQeS}$^P>(yC!VA zKG%kM8!2+qUc2u1;JM0|kbIZ>PYJ#!#LdceMc+}I85Ey&@1VWWz4NNW;?aD^%F?0L z{0*P`_v#*z5=hOe!`|=D83<(OGSwCO_Nt|>G{$MlzGL(1`hC~uBm`yIl{D*;VJ;)b zan>1wV`fj>vlRt$GS{0&rGMOK+=|Qn(ks1p3SAF#?_~tJ*5`z?f2oCM<IJSYKCW$X zCy}!fImcYfXd`o9M*umIiDP|G3xID!fealk)VR=xqVj{n0v2L*2`PRuwnRr+<R%f3 zYB+;XbFv35kya??ogO^sO`-Kjyq!8!bq5tyV?#q!@u@UM{&+E<4&O1<0H~xTf*v4L zJ-UZFs?O~B`JHa(d92OxK7yk=rJ)fy%>Cf{weJRxbN+5_c~i;^;^vMGFpnVu4o2@` zUB|l!*{O962O?o0+QBF=@i?dR=kGR#ql$b)(g|@jmTNxJddxPLX1Lw>j>IDbt9dKw zF|b_`HPfh>^~%dZlj7Gze-2O#{WHW@Ai~0zS|M=jXla4iKH_128Tuc{d~jd6b*zky zjm@KePE7>^Me^&Ujrx6aGiT>qSY7Q?v7P?XNnj*Xk8u-6P%ZvWdGH`$$^o7kd>nh@ zfNm8g8yuvWyI77JVGJmU5?ud)SvY7In3&$dP!Y%XjZ-)%GOr&MG!={30It3?3w6pn zMZhA^#A7n_QBe3iJT^#Ig+Ue#^?M3+!5u@Nf~WLJ2umv~k!tBnOP=#ozi?JT9EOCh zS>Pr1MYy9eehyp!1=+3gjTKGD5eVXNdE@W!E@lUKeH2YFLxh}R?ipUMCnbLrWH@2c z{d`=HgaFN#V~}AeLW+{{%UeQ#2Al-SO4I?-3yGS=ez6tx_2W4I$5If%fcKYq$3!T9 zXe%l=Qom_Hxo8+Tjlw^j#ye1cWrFEXQ9R;HZS45DPNHGQLpk`d9-R<0)v#kCGfI`6 zvhcll<f<ARySyF#X&gT|&)tXy2gKPD6EQP|*Pvov4(Xt^P-=K3Ta~pt;_4BU)&f`p z6X;u_GEgj3=fRK|Ty}HD^l7j_M=58jf7RD04Qg8&v2NnL49s)GN1zKNcYF8j0mM>e z_)sfOoH!B#g-+yYvgD%lR*axP=bMp{kih0e+qGYW)l;LDC!MQ93cg*xwO$T6K@S4m z6}eMI?B5LgBWs6ejwEV({IuzP4#N4|uZz{iQa;9YBWL2q#vIxNHz&w!f3}hkiubS+ z2231vxx@PVE9N_Yz3}Vnk=3YsHY(Y^WtuD3GhCmI%kOi4MYMUd<_6E4TB`Q7)2ZHr zUlX+wWxw3~qZTkHwC&DR=xe5wt%Lyy2@*mtlUaVAzLT>PcbJcy{Do|z8uq=$`Q_0o zi!Yl*pLx$tZT2T?*vWYQ6jpi0p?c#SeT3rYr}`1Xr4$TBOS=zhXl4p{#<OG)i~CTH zR2hz3(v)Uq$~%#__YDQ-9P>VZegyDLi-Lp18Dry46m-mp4MQyb*Sxk}TeJ>Ck&BsZ zSo>wKUJ+R)P|w7Pj<RfQTS^Uc6T6P5lj5Go_}RFVBS`bHxuI3^Lz#Y?qmL*;i4Ycf z1rwm)=RtjeO@;~rjxWf>oFv%@1=iJ+;IP0l50A)+eGz!par(=pi;B?h_!88Wj~R5A zH^+Y1pOC&cd)UgzmRR^RVhjRaNo37lQUbO!s&+K0$nO2IN99Hu5qiW>2@nq$<r1Xq zh#^y8PhjK4anvG<;uG}d`|p>KCFeV7UXERf;65B7PLig7Gp@3IHaBoT07-xp4fqFm zYQ`jc6>A=h7^+`bg;@pSQGz1GAmfYG;d@@cg8l+k5X<h}sl)Mcah&`_ypd~eh(G{h z_qRhb!bt>S46RRzB8M2r@8V+HLSvj0fl6ZT?Py8Qog2h<gh5p>1~4Vj`eyw)jq_80 zcwRraN}NYERaK8f5BWpQ0o%Wrtn3=@HG(fpKp5|03u_E;kX<`==)Z`Di;I+?%>0=% z)e?GcIJ+oYqH*(EPqm}PM>379_aCYoELFI^&wx_|&?kC9yC7}g!OjGb=Phr;BGaEd zAwq8iptBIlB54=F1?^)i|K#XUZQs5dYEH;L@p2J(NYBj7AA2%(=L;&3$1s4RVuX4U z2ZP>i^Fj5;64>vgegjxjV@N(O!)XaYbvL|kUmOJ0p#;Zl9awjfg|DJ=2f#QKIO9<e z5|~4C3)>lTnZVn^08=;Yw!JphgDX%Z?EMz;C}`dI1V_=8g!?oCs6>{iwE|+pm|mwr zR!2j@vvb$725nzX7=2w1j?eI0;R>#2a4__ha#GUv{0Or@&QR*Sg0>C6JbFVXtQ#{C z<}Pz#53@3inZW@Hp?={iQ{o@)yU2(jC{7Y|35vwgdjY}!vw}d%Hz=Xb6Moqf4v`Df zf-8a!d>YSK2?SP#t<+5?*U$X4X>ha8*qmQ4_e;%W(DT0B*X_mbcFRfb<^CCc_22hD zzLjCU(6(P!w4AeUs=WTnFYE5M`@>(78CUsIY97p4>Fb>?U$@p6n#&Knx_pY=F>Gmv z!ia%~OGbbDN1BE1AN)UB9%NbUJ@KcIi;iOC?wPdFk?hFaw9_=)&mWaNev+KD^^kfM z^S37DwNKwp(rMiKPcguuK(3Tpke5eoVlPT5{-LT=I<8?DM7}FD^>9m)k&@*37*U%z z63vdYVTdDxe+=L@@=<J{f5{d8y%=Kl%rK<uI1MiTCcL+$W>e^-pL}!f3*uYL+_0db zB#wuGzVs?kB+LuKf=0E6xt1TkUxGLiBR0kc2QhqOo63VPgSy0<pYy_IvMFWQ|GfE` z`B64v&EPr#?vu7F1V?yot}_veR3dHd0t$h|jib`iBg4a~m-iy;vmTSZrBql*y6i)= zzTvZ2>u?G!z&ee4XQK5<$U{*$nr<m_TwndOQ^piAxd45D2qD4Z#q0O6*u@AuCiq4~ z(Edn5>lGJ=nLXUE({wLlUNKq+HEX62TW4qUGiN~R>8HOU`s%v60K&mIpzi)GGCdDX zDzV!4Nx+C=Y-x8b_SwO-f{70J5m23ir^6m)zPtgE(q*YcY{pb0qBqX|^COJb!Q?p2 z)K@il_S>U_sWlQ|gBBLXGHel|KzWZsIc-L_VpCS6XiwTdQ5%hQbrHq<#<~oVr_2ou z4cWot<IRDx0C?eZ*2_(ejb?!Rh;bNbJ3yFBPftToPK3=)`C4reMnYt<@tWyytH3Ed zM)U{O*5VvY_cKi2K#BoO3>EgxiLb)2tKf#$EN(||2j*SEh5Q3*7&TH1^g4e|V|uDj z25%Aq!{of?)qbAD$%Q!>HnNui403!L4noExro9basarZ)>mZ%>jiNL*i!0mR1t%g> zKcS9&F@<U<heFob3nVVW4N$NkSqBdYYS|#KSLkPOn!&qolzZmR`kk!Ab&e)}A0MAW z&n=&ncQBLtT~EO@QTiZd^g*Y!BG$eq^Bp%2EgIi^quNuzazi@7p#AW9=KYTX8eDhN zlV4e?d>JxUnp?he>QTlinbiUMarGN(C6CH)J4`>KMmv9Vc9VQ5RI9#As<h)|N|OYo zy5S2zv2n^ybTgE8%<a?hOJhp$4cg)-UU%hCxp^%YK5SUM>UuCjk)}3*{CdLaje{Aj zuOIM6_S~u2oO)}>Yl=Jg<87mBmFC@_rl)wuRo9&hl8nU{Gy+M0yzd9{?z<*|dK#!O zhP<{6Zz5K%_8Vzp+@;dqTenETmMw^st+$6i`-ngvU~j1KUY4Zy%edv95k9}`m~XuS zH}pCv3~{|hNsl=%1o7R`Y49cn@L_c-Z=A|#gL?$Tvp@7?wO<hUM>Gd;UyV52>*C^q z+Xpr(2()8jGL#${Ca$=iSzYYa^R$Vw4aioQ6x3o=!bw3ytONRyGA?j~ORDIQn4H|+ zB+}s-PplgBZU>ll$gw=E{666NE;=?gxaph`a<rnOSuon*!iA2nU$G5~5v$vkb%zJQ zIaH)9J$2zGF1S4fW57Amw^*p;4Y5?i`G88Eg_V`-S%?4wqO$6nnlN7tvLf{HP?5pl zj5eUGjP)8hCd-l%kYgkuZA8Q%AXIvBp+n1HGqOzl$Psb^QpdKg=jsToVQ@G~Z`Pe# zS_K6#=nFn2AjOEB0wOPTjqDa6Y!L08hPgo1fhj?{B{a0MlZxs^NeLV%s+I4N7eyd= zO!e+B(HcjG0KGi4U+;ff@X`fAyMyRv$9qvZB3%r;Py-<+4h{zB)82m*${_=MjXzBs zy@M4Ep<IY`XMytoGfcy~Am+qn)rP*~bBNlBAbx4&@0;OuK%|h;j0pzT-qN&S60!eq zOe!-AaHwRe!99cYaMizAY(IO=c$;6sst|SiHei#zu#UEbU}SoIeekFA-1!#iLNum_ zfzPP(Xl#FPe~$a6F^AiqOCBC2omWh-^#ncOw7YSk|J~c%++V=)K9gDViwruoL6(67 zdu3_K#?B6gxeer#qzz-hQ!NHu;ZUi~7BLyvubDl{V#0u#%%f-qGF1vYYlW#@a{SgP z@kLk1K38Dg#fuZCqnU1co*rFDJ(y)F6e<6JA-esr<o29XS3bV#5iiaRp;oxyq<5C` zXLZewL%ZZpu{vF~Y7cL4jk{uI;X~fG|M;&R^%EtkZ&ah?ZYGp_DTSdymb+mT_>pYG z&}?;ozN4|ICP6XBspEIUwC-Z$WlOtgCL=d0cL}~-#Tj~P9fO;j3k<7#n|fv+LHrfI zzRt~lqfXfN&~6Fu9p@Fu^*fe3{A9V<Z*+;3b{Jpn0rqYgvT>#7*~46=(=>ziQH^nx zGOG*EA;d$EK5nl^zGy$_WXIz%RpiBMQ20+P&7rUpx^++@=+XAJxXOg8!gGau-uIga z)i`Ky0bu2)_8Tz{5e0L2FDjCv-6AfuJEBo0HF(MzCuT)T7y$Vc`SRwgAim;qW_V>X z4IGi{NEkrNWWDbL=2%!-rc{2%gFWZ8)zBc+`mG52-wQIssc2GXA;7$v*cy*2x;2M= zp=g#mrd0~Ej$W=NxZ<qurVH1HWNwuRGfzy?gOn@h@nd~cQ@9t~ag^dOu6M@UZX;k9 zLFob|$;TNW3c+0kS;@%-A)cciuBdr&!C)dQ^2MvF{MC4{ooRxq@Rb0l5JLdJDMXGE zW+Hltovwbh*FK_`OEZ6)o)^yImPyXqey=rm+wx70AKKmUE(7(!FM;4Ojh$2vqoNRe zb?bnm;#n~k>@ldymmWt$?gyj+q92&4srwq?9+AU^I6v=Rx5R>`4<#aq<Ve?}>EeKI z;ch;mteh$I<vFXZK7)KpIdV=gNS29-uRZB0*0L#}=4nq^3AG$Ewk4Io;9y+aK;%{1 zVJ`$Y2YckSaxBJ8pr$B6DWRsOrmA{(>=6wba(tP5iYRNU(Y*WaCkP0JwG&gwKB9Qw z-J2&BbnhM+;bfBZX@fUth7ZLx5<_rYd1qH(WOzNc3kyN$aAmTbcQ7Rc+_0W6LS*MY zLtbK=9XOuU18<M7@)i`nXXdpNoiWuD!^N?OZ<Dz&%5fBc;(|6c<la4Hd5VMY^_gb% znCHm3y@z3k;+E8j>Z$zva~@(t%!Uw1zgAkU&PYcjJ*+n%5IYqkf9hwz%XY`4$d0UB zi?Qh@HonDf$v)ny41J6J-mQNEMy=(A;@evvZ)a=bzgj3RCDr_^QLh>M>^J}DN=})% z#oTY^?$ycJqVa8%L7uC_MlJo{H0wE|0=rZWvt;bxzabJQ^{TR>)WxX7Yp?mhw<crn z>L6zR#|mlNN2bF1*P4Z%G6^4eHQKUus>g1A_pkG}UEK-<9;DdJE|JP@6XudUJ{c?6 zC3t45uIKfNhoOt8au<GIyy95*zWnCzi{~F5_F8|t%TlOHFI!iMG2w4tN;2E#dw`yb zl2R!jnJ#CJALoV;^zDz~;lr@6&1<(reW8U)1SMhn%`dghJ4;w`dGM4+AXn{pstyJ( znwtLky|>gbv}Tf1%CFvl8M1K{wMhPp)VFghuZdahG}u~5ciKnvtPy|=N3>2@iRd>- z2~NNy#(m;2FrL7HU_qSJXbu!_^8T6qV91?pVU$<w)2x3>%C@rLc>6vN#tcf%@RZv? zl~y-l^rj+WV-RP&U_1s@&%1XP?m<*dF#?e%8fH9Yrxixsv6NAB-MO<>d~4|B<Ldi= zkTHlU6}t!shcGm7oBZ)v3}y&`8S*KXxD^Zx5H*B~@-v;Tf=Jv+CiLhn)ZvuDcb`Om zVVpHBJS<YXi&H_`^MSdJK=f_$T^QT}?5=RoiG)xa1I7f^_afk=&9ymgs8=y&5(gIQ zF8rc`6Q0fl-=Ls6Tq^_uCeVEOf-5u+zX)C;6eGvp!s0BC8KZF7M=CH=kO53WuQh_O z9NQ%3TNu$0T&04H6WC<wUgNq5rX}r$LT8pAm^Hh&P2d@u<C-Q&N$sr0t=qu*>J9E> zTz-JdaAJlA2EOl#XXynHjztYcs=)sJE$|H=I*$javQ5#`X@Hp%wpBpW*cCF+F@iV; zyavSx2yxyXEhgft5wp658XE{hIv*NN5I`(qXWzru2f^dB$Bz%$)P|$74$AG<y^kMR z?9leHqXTA$XAt+FQdh_BPHX##QVU3gr<*4@bJR<ySa<D}X4t(ONAGW_TF?#wCqhCD z4=_p%xO)>4dhi2&3=TpP3;{fJC!B{_959InC^eE36XN3FvXBM~n5u)+X_tAG`&J;q zVw*77Qcy~&6QOP#G?3khu~1=>C&1WX`O>8xA~*%$0>l`zxjyn-pF<5MpOO+AJ2Ej5 z!Y3js8Wt92^x-DV#Bgi8Mpy!Hb0CzsRiFz*%nSJc`z!~4;Jcvsz>tZ5W@!?m-xn8a zbk0FrjT#AcHf#VhLY6MBdUp)ows4034hC8YofUDEBT<TT|2_^y$F`@Tj~@>Lz?-p4 zo3HFSbFynDP?_f;tNl+$-L0fnx?3|M*Hc78`F~U1Q%#9nv+6JX!7Y+XGg&^f0hW8@ zE|qj>w9y&<k`8+HHi!6VtJbIGmd-1tT0Co?-?|!zw*;zpd`*uv><FpO+D4%8|4^Ry zw&&`4(vyf1$t1mw&(Ws!s#|t6WK$?zJ9T@x^N`-ftVmqT;f>kp+42z1BujoWuzddJ zuBlla3E`gcjT4;PtHTAS7woz^Qi3j)$z4`hZ(QFz`SH7hwXAr9vqr79I^MZ|yvGCr zx-ZD4u`dpYh-^SC5Ke}m1t31;1RGmh&=Ok-1?WemlQ1(DlPVrPc>*s3{IZ`>bwft> z!o&F{PeD6zJ|tKmFp)6XXk)iv^L+Z`jLcv}`9sg~UzFEhCCn9C1_oswI^LIOek`*a zO`X$MaZu4TSbxi5atGT1#WA)lz99<DaJ6)>F;;t$dGG$!-_6XIb$;ED)878$!KqlH zA%orEuio97qp2IEWo9+~{?bhr6X~!r|L4!2gH=B7=otUtft{5V28ai~P0+<s`}h&l zPJzR~BN^n9S<QV^)fKYU>+&hp*7$X+VF1s}q=@su8as0EAjEnHm_lj>Q`_FuZV0f3 z@{Lre2nOcL*$mRqonU>t)HlWDE8tI>hqN(sg725dSHl<Wot!4INns(vhLj!ha&ei0 z8Uvt8K*V!QdZTl`-7pL-J3l`^qLOg1YJSn%LP`ox2jp7mBSd=>M!Nd?5=y6#%zG!N zlm#cpP#>H*)~{{?Jp}YvEdof*z`Q8+3CH)xDqR2|KE@Y=QJeqW?*kwb5!6WMsnn<3 zhH`8#V#La1U{3agmA5vNB5dcHv=g{5$k(y?s;jpWbSx~u_&cs8*Fx}yb>G$5$<br? zqzF3>&MR!UrRDIg$tb{%NJtpydip8SFfskX0gB|wPwnle=c(>O3jj`C?XF3z4Uly7 zKX9^-BUYN=+dK;Kz!Jo_;1`tXraj-_OaSuH4NXFG^RBEb@D+nQkJze_M$7<kbj0Dr z804jU=1dvTIUD{xq<2v$oRKEZh=M*Cx@0em2YP)40>piEbchON<?WtF4}xwDvkB?@ zW-nM-`SBe8TK@>S&T3^hU1N(OZ^4t{m<XJko1;aUY;26K@Y1DeZ2t%wC&^VH9i5J# zjWiMs1Yb&JDWS8Y2QG(^_Q=3aO-ZrD5k^8#N~H<neMD0)_a>LZlA}?`b~J1M(r*0Q zeuuov_t_H2uGwB8oUP_yq$K(H)#{0^QHf_ZhpMgc%Ob;@?yt{hzvA(XH_mI+7$cdb z$M85o>Hs*}Za0qNu=hZclReELq-q`rKT-Lpx~2x1*^ju7!(Ic6J>c4k%W{mQrlBZ5 zp_RmahB;Tq=rJ|S6R!*<lCyJ{51}BJRhyLJ<|FabC-n6Xad5!oI*AI+`sMWXFroFr zED3Ag><x?X93@nC0QLz4w2mkuf$y!ZnfMJHu@)6Ab*$=|ur^*@l;sW7m!y)3HocLU zDRr8{Pq7L{VvKx)SDu&GkwOF`u7o|d23@%)@_PBtFH>kP|4z=7#7t1s`tkuHh@B}a z!pZvp=fflv+2BWR+>pCjcQANxZW#zS=G|gXDWyIV`Ho&5*wNXuKva#)%<etS&(6kq z4w(k+PEl<hIv~~8WZ69uw@D`C0u6okOsLF~B3WnSvLafy*ekoZqmN3W%El|hpIjQ0 zJs!`72`o6vpoD0U^L(h3iq2V_<=*V9TcOl%VV#w*G+r{`$XF$bZ6do3jtRqm4ZZot z5}M=4=|U1Xtac5<u`w~~eUTv~5o%ym+CP65IB+0(fy+va1y>_VB0cRRuCA^}an=Ez zBF@Zv+ye5ATQfz&_-Xe}ZI{uHHsS!%k!^bLzFS4xQzBmk1tu62rHphTT_!(87~v7) z30yesm;!jH($b^1D+Vq};S($oY@g>5z>IEGU+e6@f(;Zh5E0N&_+zHyn&w8e&iwZn z72SZXxw*Tb=BpT*Oa974Li&DFH64c2$Piob(f&%Q4{K=SPCGa`Av7w0-%Ah$VMLn{ zNX`chz&`vdWmPH)922*5Ecw+tsTizv8W;s-zhUM%gorT!`?Bo$$i*)0GRhJab-MJY zto&8+GmCYmhj16gV;b(xd#~XiRJ(pI3;9_<y3mya!d5?Z*2ZRNd^{c{O?<rIGJo93 zKMM=FND(2Tf7VV;2qD=-umdEAfm$voP^u>O#|9k;x4AB_fLb=m2^8CI345A=O4>e~ zR%Emxn*x;{pbYpnbiR6%*NF)WBV8$s;EU%mk24kP94vd_SvTGXrho>M(ETI+0TU@~ zY<P-zjWBSyp@BHNs<&4b8%RiKhq{x!y%eIefM~Y#9YaHh9rmfI2}s@HyLrU)BrxQt zVxVuFw+46w0=1#OejwsVt`>m!AwKCu0iPzxZTMb}CLtsajGnR<&>vjToH_Ry7tCGW zi+s2j;}_=cR({VcDzf09sWl%%Uvo%Yyr7N4l?S@yyYl7a4beTN-yK9t9l9YEMi~bN zKkM7PTLZc>y}nMRR54M}T|UQ@Qm0WTYBU6yCm!HLMNP#X7QjD7Dj6*Q29Itw#P=Xq zO!p!v8ta^)+XG~#q1e=y#uXWdZrXicrom?fpEK&toYObw&7QRgZ`4`HV&|3L^S|HA zoARh`@sj5k7C->vT?8nNz7p#jwK1;6jEqsdM0iS|T5V}TZCh0G`y7tqfvKsD;Ra^x zOW;Lzb|*M!h$hN-gaW<B14ThWxzLJ>0GkuyZGg0Dccpl11oB?J>a3`!=<R(2$ZKb{ z8PG0dDM^v43~D}zi2*!hVrq))GzAF2L0MN@<0=A-c}}L9gn$k49GkqL0M7l<QGEdh zK)?u+ta}{6sj%nMkCi*{WCpsSUO;nAO0Y@VvJ--QJSO<T|NV!;PFy|XeXn0)onZEY zx%u9rOu3^+OEEMO9~BiO>UW*8jJP(z8^c`&fEdstK@r{<J-x`z`%kfMVRqz;TE-Ce zJK{*>3I#iZ6BO$sJW11&2frR-78{1SXlYdPnVFa{I{>b_`4_DIQ11b*$0`Q;cYE_! z8nU*Ndc_#=KFiC0tE<a`!zOUctF$!I(zLwTJ1>|%(M|83-D`dJEYSc6{+cNyd~Q8@ zW3F!bkRRD~d5=kBPtRA~hc^E|(%u8E=fCa${+6tSQYot~kq||Q(jbY3%BYlNmywW= zLRv;tQdAnG%#6s&2!#+?m0hHSlqik+`Qf~N<NvtM`@SFd?QuS?^ZZ@E)VI$#-pBDe zUL&)o4~r(QF(C7TlB{Z$VGsgd6n7h^65*<V;9uNUVaV%Ye_exy7TdnBPo018@F5<9 zETi0O9@4XuLyrdwSEF9$;xp+`vv!+kdOXVCeg1q5s}NkSR>qre)LFAaZi3oQgWlVd zOID$L*|KFk!B&3mx@Bu$U+DBxs-X-1!8^jj8ucf&Hk38RzV^=M9SKX&-5RNUcpS+R ze)XSb*xD|KZI8P4be6%tZw>$S&?LlbUi4ZQTjGhZzBqD$OU6mTLsaRV>ptn_wHvdq zmwU^P$yfRo-^L{e0j@qvQmTawZ=cHv+C-rS{(ZOq`~ZI)>T61hx=4^T8o4fyaFwq3 z{jB`!$@u-XO*4gk1qZ+lcU)}PfQ|T(9jN2nyDX;dd4Dd+UzhRkpYc#eGDt!^>C6Ee zBfXy6Zn!VcE(Kl&*lG2+G0uNR2QcW9pP9l>XZil;??>!Dn4EkK$o9;E0Aqh&UO3)7 zCnw3jzxz%hh4SVLDm_(pKr|q;iAs(n<@oaDmmE;piLy>k{(pb@-ycRg??*^h)~faE zFWG2$A}xt<6;HC6K5beW+f|<~559N$$Cv*7_jiiNPf06Wz_G?c@`0FCpq?@-Fc9$b z=i{cNp{qJj8#uq2eZ}8@<*)CPdfj6vM&SH;=DBL|9r3`X(|j5E8=TZ(uM~`*4*p-R z8DG(c4Gt^qC%eVP1M}LqTesz}SM=XMB|=&0zuhcjmH(grve}^m8Jwr5ClJ+!s}DDf z9SJDXS@N&n?eAZ>?5Ws!{|)k5a$#6<2bnaq6`t_TuTxj{!c>n&1N-6BxnaX}bvt(H z!m?`dVf*glf$M@pR(8ru<Rm|;6VnJ*57H8;+1$OiVUp9?_m%DF5616MdW<?;dC-b~ zU)sFmZDu4DNwvFv=gwhl#^3`9O8sNb`FVNLlOA1KyBceA2y*DL|G0X&sz_TDY(poW zFs4`YDWLs>2j8=r0@vx?rM>CaS(p6qEUI8bLiIBlObo@&d=Er*wAAAVVtNn^Lyi_2 z;;7!*dPKk)`XzXI;v1Z|>(se(KVd3)J7_p$LF1)*&1tFxEiqKGw(sS>noMW2$9?4_ zSw?fpB6|8tjCfE_TXRn@FXn0>R-}wnO@@^^2BP;`xPV{52a&dxt@0(Ug9Ptv0ZX7f zvfdARc<A15rT<~=Rl4x@7rEP~ZrmuOVp>jyEAXzmy0gfaa>uW>*Yv<H97ACW1J7)~ z;m#Wt6&;PY5xxjf1@q2s6}{?OSzRiPlOG=+Qt#(iIj_VW7Cb%nf`7)4uO2@q$07|0 z@dkhCs_qd+031Ry@uYia4iNeY)mBg?UO5Es{364KO)5M>l%4O-%k|Y>{I;+q$dtwR zdH0eN)b5<tvA>!cavnW==zrv{YJ{sqdSX|1A0(Gpx?l!Pc8lbANAKW9-!0pvCAx=~ zlV7}a>3z2$xZ>mG?BM9Q<)wp9Ky#JKv|&6i2#NG`b*ZL;v*)n&(d?45ma9GQN=O%i z=RC^|>>X%c_M4;)IQwDR7%}md{wn)=h>QLgPXoVcq4^`|>m&PR0ni;cl6t<ZIH|NU z#qI3S`tYtot&G?`PVDIyA{7v6?6I21+Bo?7@)aw3!EgmqW+}E*uYgGjGl7}Yro}`? z!Z3>o2nYb`1-d4~bz=X$RtdUuwv?^x5-f}74DmQhJNh~7qC)`m1sccIF}A|ITPX2e zQV7i9ZWiY9M1zpM_0C4!&|XCTk#y+8AERCo8=Fz3uydG>PUjs}(=t2->+})>K1M$| z$peepWS2a6pfbsY#~P#6K{`4&UPav=hsJ~%8_@<S=(CfIRhIGD0etwB^oOZ8H=>_` zTgyEZ6LFMw?_-f~XTo@n!?tvA-vqskVSKEnW3K<-%?zFn*8h-Pf3JE1Tb_h`5C0Ft z6pS`UNOv%^wa~Cz_EjRk3O2dx*(Ih}b+#N?w|+v_(xq$hkL51YU5tu<SscAdPdzJZ z_^46mb+Rm`=nPTZ>blI<rPHRG29+@0WQtV5-MjAY?k8Mwo|&#UG@a1l8j*62N2ZTE zV8?409u@{EmczWT$Ja#ffTP{Z7R_VpMpG&ts6yil(DCY3D+nb^u|-~2H%!@|RikoP z`N_kFyYwHm75S3K4Tk3(pHZ6NiUYyxSaCb8>#$s)IDYfJ$P36jwYArXL1f#-p0!`{ zt+UfMgWBAz`Y#RNgLQf-{T>sKZf$<M$=F{U(h&y%FYDq?zt4hDv!Ss^Xd>TA#DI{X znIfRT=cAp6Bx7$q@Y;0z_$WOxIdkZ=dBy~Rrcuk!O$GBJfA?|iD17bPGu+Q~%p%N` zZ9%)%P6d@%5MbW#Rjfywh{a@n%%KAZ<^tMbHV8b-ynu{3q6!Nn1_j<fp5G7VuhKdH zL6!t-Cx%gx8wMv5;%|%ws6<i^5Y=pHZr;&;#z}kv)TZc*0(jJU@&qS+azyHaIUel? z$crd&X%LG-=Q_E#=wuv&Hz+2e#sO{+v-J>&Mt~Ydc{=`FCqxOt{GhOG-WtYy42RT^ zj5~nfu+QF(ZSk9C7eea|S%aQ;(&SCWTX*kv<QkZmnvO9v6rO7S6ZBB4^FLJWomyPW z-@k`{Mo(zbCH$jLBlneP7^csZ?)vU22M(-kX<Ebg2L0dxyXfDH&v~eYM%<n~=Pq2} zw{NlYcYWX)U-IKV0*y6>FIRtdXja{fDZ_2(%-L>NO+=z-ORthA-u&KzQ`?2%aM{}a z9EL|d9n{+!lYaMCc{2?<G>rU-6I)!IuhH(RX)f=qLk50bH&%tv2St&}>SW8$Hm;u^ z$ZQ0A4!~WJp6G~cP77;Z_thJoh-FpgJ>ClL9wx61JseYs-7zsVDSbeld-iOEWb{S# z#4YP~MZ=YbG`?X+4<<ON#e)F=Y8?A}<Mb&GOYR@{6Sw_pCDuRc4e%rmowD7!bss$I z?z~g<n#|-wh~k0KCXl4E^GA5<zs;X2EGdo~c|QO8Of@0cWr_BjoS!NYi2<zf8yo%L zNzjt$cI_lV&nzAoaQzKycc%Y^tiR)Th|h1vfxr0GE9LkN@aFEYz9zQw)Tv?KHy9g4 z%b<sQ%pRS1pLlgC(SF#h-ismhK-*+j$Odods!z{Qxc}i*xemPqpDWP#+4+^)fyQ5J zYfX=@$SwufAzLqG$yvy6m^AXiFRiNX>5Zo^L8H)Fvlc#j&y~sOS~@o$muH81qX^$3 zi)AiyNj4#=Wwi}+yX{{sv-0ntQBBQziAFhpf<{?En7_HP-$n~DySoCQ<ZscmG`Y}S z9_F%$w4am&$q#s&OTk;x+SG9Bh{vG<XbV^e@Io-bK|jGqNO&B72R+b~k8ExGYZ?tW zp9T8SuCtiz!ZDNQGFF|X7apH7`-64bBaF3_8o=ef=FC~a)}+U<c^aCUYT>saAd}!@ z)Y>H5qerOi=2S(!o}K4s`!bnaJC<$_<z0W(66OG6z8n{b>0ZkBnz~Z;3|i(VY-G2( zg7Pn1u)yuZz{eV?nvsh&?7}0p(X!QEbsO@a+&x(#)9CP5!xOJm!E_7eof4?qVWjd3 zW4fg!`8jwZYRF==Zdtuds&i*C5kT-sOC0x%yFYuA-#O4E2_VwFll1|+x$&wS1L>1e zhj@3gtLyi3aafYtMBO1iCeZ$Vu0jtNF;j?6eSRwVyyZgO-#YfTA3hKm0qzQnfbvHp z$VBGC0Rgv)ne^wK5EsGD{L9(kVA02=<@37ww=G+A^VO?F%L8;O$|D~VZoY~o50RB9 z3vb6r?i4G^az62EcA#;DdLXQ)GiSb2T<E_7-u|a>yXUPRtQD7(laphkMG#+~Z+qaI zkj*t+OKwVBUF(OW*Rktl*RIKTNGUZeht1N|czt*09U$nJOC5Lr5~{Zk)f++)Qve&p zhIRh365<P$=->JM5wKG;PsTfplv~y;F3PQct#-<@!e0G<6|48%TYxso%=_mwXSL-h zpWvqhRNlFJx30EUc4cNMk3ITXjwsfTdC^o;#FY@S!|#8Xq;m(4R5)Zj{bQEB4tQvp ztL`-HYPmP#shG&F-^AzuD@_1uf{j4%8z}37zzMDW4yB><pG%)TU2)mN0sC$`0G6a= zn{F%1Jv)%MaOYGh-K@KB$pXzC$dM`EC?9JjkjzO21_*ejvtdIkKxBTBpd9B_t%1nJ zLW)-pdUj#owyflthd}CU>+6YJd`}Ic+9(<N1~kiKEBd**IzA@mENZIk3u||(@qkrV zR||Y1s73&WYQysWiXLU{VrgOFi>VG9Mza@d(NglAlf~5m!P_@nk=98DE2K=~u3Zn{ zj&cSDP7&Vmy4C$XV#AXCK8#O$1b0=C{&NQK31Jc<5Y10$pE6mXxRWB0|NIT8(XE>| zi=RE)XS89gqqs+FnEjC3%nL|~cXK<5+Szp<l17A6-r32-+4GYCQz({W34JouR9!gI zcdKlQfs}wbb*x*1ypKKD6h1ddHC`ih_cXwKf_HD<l0*vA2FPY`*27M}0;9vB&#=be z=nSr3x*(@;KnB|oE9+JX(U75yXZx|ZO&Q<T%&ZC6+ry_Wo@&ztC)Di6$6a6b8Qp?z zxxEN$*oNXW+P#J!X)iJuwJLj6wI#=5@!7Lue3!KX-lU{_Q8_kwYpF;?pqYU$e34fC zihtBs=Z#*SoVE1TlQV}?4n-I$-G8*=HS-9%y0u^;L@}-L>ymp&PR;7+vF%jbQ5#xH zt4nr5J|45`)1lJ2E2d0&@$^{d3x40d`CtHY2}T>1JR35&?8&|O5}pfBH#e2~Nd3i* zt`}Av0OIl%ih*ti2@~Uh*5{|vY~xv~wC(d2&jj2n%a+&|9ql#ZSaZ#-FUe!wtnUZX z;Ed}#q2bq;S`Z`o$TaAP2?=db0j>NY5c$=~1s#HnPp{xgpb|tZ+&y^&K<aOwSv(D{ zRpGw+LsMpI9=UV8<GuUs+il831wbJ;GdB-CnyNc|`1a7yHD6zgjcRv&SkWz|QJmvc z2_8Ns#3=det}dtA8!3D1KRP^Zu;>aGy-*@HHWnq?vKt;NL}zpq`W{@4y%VaYik*uj zS7vxmvL6$u=>4iw*t}=7YVesEgz7A**sQc@u{<VggiXFY@$yAEhZK(l-y_Xy{hRv_ z*t_SS<zxZOy1fPShQ@+oP7CkeG4QmZ#q`lAXo$QkT%RPFWPD}*L>?tEk%fnp=nB0Z z-V$t;XxN;mPiLd8K;pb~2e!>g3+@5@p+jdMOw-i;h2+Qg?{B(ia=>*JL1n@1Zx%fw z^Tw7%9&p*oOJwmp>&&8PTF;!ER(6?l3*69y(A9Pe%@xAIO%1*V=s48|S~aCtby@?% zl4{K*97(|rH9MJ=RsZ$tf?dm>bpyVxtzGQtX+KAwHhxEwX;Qpi$Ss+*G7<@T2DVEa zH~to(57W}hd-@clth!<)22ymTG}{xm_X+OY>;3E3(mi^_Lhx~O8^R_GvM9%@nk2aZ zU|XnG2#lO$Z(l?;r*9d*t>+of=O@VunXz{@e;aW)$#Y@-G&JqZ_{De);t~^E*`@`w zZcF1-?W3r;Cn4c79qOPMgn9Qn%4!;n9&L@EzwJpzYnXQ)7JlsSZNp8%_V5Pq4b;@t z2Rom0n>TMb>kIZXcN50^qL5k)4H`IgrCfC>E)*aIaBynr#o_XRlEQT5?pO}!kusT^ zQ_37AqdtD0;hJufkEf-LzyJ^75KTAORH4HqA%KVJ5dWbgGu@&v-v_51Mk*aL0NyDv znYFVp30}5rnWg1z_;L)@#>Q8u7G%c<=T5mYq~pXpSLf_gyfM22I#nx``*(P~xqpDI z1&ku>gbDBZ$+(&)VS@^u_JcPQv>qeyrsn3tt~#IEcgI`y4!2V>=$c^5syZ>iBByX> z@q?!di8J;hVh4NxsowCtQeQIYZFTjfB`@MASTvV=tqxvX`{OcHFxt$<@4cum%56y5 ze)MRCccqe?o{)-!Nci;z)mggUZA4f!ul~6#kxfQRt+fO~3Mgbb{_EFVY`wUcs2ql% z+SlXm@~yeAaQV4g3|kn-7xh%VW|cVh==xt>*wbS1&*@51=ygH^PkKI=+*&&n68Hj$ zgI``YU%W_TdnrKF$~+qtGmX}1?AqNzuCJ<Ty9s8_#*c=@o`<fAmWmTI+G(nkd}!u^ zLUCo~#HOZ=Ovy;i8Ns{H*cevoa>A{JpTZu3$K&~fE7ebqRvoex<4|jUw<9~Rg_RDO z5(#CgdoN#BN^CvuF0+QP&_X<q&CXhBKDu@5*N<28|IAOyq6bB}JHpp?Q#8P3=1a{x z1Cg<L(A}diU-c5qGCTr5)XqjoZl#Iu_s3le1<QyKuu;{T0nv(;;hp=aa%EHGzdbiW za-|pdY}5Xm&o?DXWydX~M$%0}`m8uk$!RC0h?(^M3h}uehTD|*+AQc9{Fg{xG4N5@ zsy}5)%lBm`$+;Gqk$qR&03;cV92vW3&;H<Bp$8TAu8Ul^rhmrxe8cDyf96$GGH=tz zuF}4<zGj??(I|QySk?;%%hB}94T#RToiy+E1%GTIdG~fFB($_NuPw8L4bNe{3OI-3 z5Af;2g$t*qA7KLEb+!#{qBm)7Y63?z8@wIYcok`CvY042IT_$XR$5x6a`peSFkbD~ zI0v(1p1y8FW8K99X;N*z#ApB*3gm!ElOlV0DfT0}tAP%k*P&3GxO17RM<mRS`@ML? ziBQPdCO?PaFynwvIf~l#Y-QQ%4B4{R_u=dIJ$_gdVvJPRXVj(Br}f5;#S5&qqA1%Q zjAG`@V)_(<G58I)o!8lEW5l`Q<KrXuE1&lgX<|kz{}1Tx*Gfv9ijJLMRXu9%Z7#H2 z*?p)okPZc}{3p4W$a&u--_qDZ-$Sa)t22ug285nEwSrrSMIO`U&TU5p%MV}~L3dsd z7gX~g{~8fo1_p}HuXPa#JrUbfn8;f`+ufKGTWJz{uYgcD+C8@399a`Ia~b9@10dzQ zj8*jN*`o*ZsyI?!TikDFUym?vBMRV=Pkzc0jF)m>Y;6BH#SJq!HqgNc(dh`dC`^Tk zf)A&G!A~Z6tP92s@czG*%18NpE?q-p0!?gQA{>X_a4~oQU?mUz#b1wwMD?Aq4#|Q= zREK?CkJz*8#x%-OlZu(JHCNB{j(qiqnS0nSa)>wJKikmIYV_tY%@?2L(z*tWL>^o8 z!P<_)Z1mzMciEw$-V+lw)-7k(#syQj<8?bKpXxEjr=r8mKA%cy(c4Qcqn*a&tWR9N z>xOFCN8>qqJ`^|ww5tr+wjSTjBnot%cXP7&{e<TBJ$rs`s8t|ZG;#Eg9TOuD<~8PD z-4x8XDSQZIdt(0mCA24yfPQ>2+B0%k?w!Sl4pj+Z-x}Tek7`s(h`VjKQ;`Spdri&6 z$&+2qEz3-ubI$4PG4=6M8=6NU<(r%5_8OCjcemPOREl5ZL^#~GMWRuwKMzcITKZ*n zNYxJzRlMc{15@a0HJ_Kh8dlkJgGtm)QoT7gshboq93ehIwW?(6#@vVLnzwmj(&e%T zGC0yaNaEfW%mb=sC&UTPNg!xM+RXfZPpQcYEP;cr?1RzC9IDK?`Kf+^#g3zyp421r z!GKP7TNfOk;XTz@5kK6O6%PXQJ(9PN9}pdOw?nAX$6(zC%|8NqL-{lHUrrqOdPj4i z!14EXUH5wzp%pej*2i+Z25dUseHJAsre!WEDJyRvo44I2-Q{o1*irM~x&INsck5FJ zG7YK32r=1=LJU~;MMaf;{yeB&ENA|GC0uhEAOPdouqV%Iugm_|h$s@~#h~C|?W1GO z=SE_t`TS<<My2n8Zp6frKVcr;{U{zXyhGe(?STVPuf$e57~_VVb>f7vdp|XcxTgXU zL3!*&Xgs6hFY~nR*`v5Jdb=$A9ay(4m~p#o;>`qeBUqlcvRmh4;V4rDhS$%pNvWwC zfFJ7W*YOs`P!WK`_u3NNF{WBuckO&0Ljdy5Yrd6F%3m2T5@q&j=Htp^dkwvLA+%ES zZHD^#<ga#9Kc@0+MdmOW5S=U+iGL{H?RNp;v=L#Psg`jcnwb5xX&9l*R<`ILP3=kc zcNJY>2H|OR6Vjl(wmDy&6T4_!_B}5|k-vRuQ+g%+{H=QLTYGE4)Zu&Ae|b3u4M?H6 zh+*kNZ9`sMH@VbsoB$ckZiP$_xaFT~ygLCe9l4_x0C9AUic(t^c-l>jj0kgnmph}k z#5e7TJ$phL*Nce&rzAuO_l)bR0|vG=oikRuS>j_=6?rXIznO#@+S-%qb`RL;5p^Xm zg#N$c$c!ZJw`AAW#qa`Ia#GXA%lfYA+*X9Qfzna+y#-|6PN8rQ>~c!O-24XbgZ$C$ zrKJ!FL2?;n%r~f|Z)2+-s`LPp{SO%#i%6plfRh(ivD1x)#?smvr%L`reV5f$UI&BC zM$63o5@`uHZjQ~uca_A*I5(j7bz@tvZc=RWi?rXV$VekDqAQzOxrP3yeH#(gyWc29 zOq#vfrp7$A>D#Ui$WL_9(diMj%72_KlHgUskK*>vSkf-Z#+T(RLYQ8ck{{T(K6xOM zOq8~qB#p`V-<if)>>~!nTp*tka+=<@p7Xo<4;`Xssu_vVg2&md&O4>DC2ZRs@;YOh zQV0(jT++iU^5@vm4h{zcQoX6VsJCHkQJ+Pk$o$eQuf3U>x<8l7b>EslB0ol9ivI1} zQ!%mlTj$>A{(qJf-A(gdawxYwz!Rw@<|9(=w4#7orFt8D<zYqmh7KLh8Hk+I2{*Cv z7IrgKmO2)W(FU2KjEx<u)T67I2!<*x=os%Z3tNRd3^HUfg0v!_5h5Y=SFoKRDVG1s zXMAir=3UI>LHI9#)O5RK=j5c_m`0U3Gz>qLnL33Twk)DfF`*&m6F84-x2T}IWH<6~ z<FiHYjd+(IkuY@bZRHJ3s@m7AR=CZb8zk{$eBQl#xP@MtK7A=x6q+C*80J<a64x<s zpeJYv_PoSsbgW;BEp<eEe8>=f2yNU=MeSZadJrE{fU=vovNc+{;&&`QtE26_IekUI zr{Ud4-#^Z>Ft4F+o-ea-32=GEi_M!QGN<;IR`>+$oa^24vnB<vUKWJ**2A+be=EaB z85m4=a#CN?(QtQq_o%AU2pbdks)_6ZHO_R{I-CRQB#xUr2FXr5&+Xd>qX^8DKS-d* z$LFU$(2je^2c`{7SD7V2cEgAfBk(Vr>Rflq@gMSVK?D=t5_+-uM)!nM&plNh25SG1 z0Aa$<nkOrZZzWS*X&d4Hj@D*>1KoD7VVcs-!|<Sn(2%@h(5h9~{6Ohh-*|4ng3Rjv zqu%Z^_x3(H-Ma6Hvvk5iK}Sce`}yEeS`7&Hao049%ZoK!r=K~apIrF!z^?dahflW| zSO8>j0SuNocZ1D4qc@=nQtjG=#%@jMEYqV01p1;oi?vQZzRoD|^5t07HzQA;?v(aY z!$D)qwrx5h<0nhHmA#1BU7y&zhNqWaKoCNWA8*m*)fA#*b|t;!i?W7K`_waNiV5&_ zB=fl?DaFKeeLBk;QNWZm!o~RzpK&$L-njYT9?X#`$$<Ywqt|{N7I?G=`U*M8zQJ{Q z(eFn~e|Rdf$f??Q?OMbXFxm2YqUDRv7%<h?E_?aAEkr4yFvj@y_MJO_!jS-p7|A2V zj5a=uT&lPzDmpFsNz3{yxhc;zs%>;|omFsMtldrk?sK}|KIe}SBPNhava*{l-<8&! z9H)naEec2)88MNN-b{0cK^l=dh64v$71|*)>?G0}Fu>%v%70f)TX{=%oXrw~R}%k{ zi$}&>4cq8C+!H|2?8jJ3vez(zGY|zNB+Rn6j{-H1wsc6T8UZ{pWXKRK9MFT2at{@v z_|*Ka-E3sqj)@tB{+veubOze}3>@6gdqhm~_iw@af%br*6y;XY$f<@4i*U$%!4$<J z1RJT265{n2?Vun3zgJK9{qevpxGqYfVagDcLh&_;!{&GSwu7>4ji}{Qzg@u(7A#!I z_nmm%^s=4Vh^lu_lTwof;dIUPgOz`T)1&3b*X`{*ZpmIS#m^jMST>blz!-DKeATq@ zKECsoE~Odx1f%TJ<+f?fAynNqqObM!-7n0tvr}tKQd`)~Zs+2C2H}9PZBvybg2wzf zS}LnI`<jHtJQrH|8(rdrCi3R@UmqWRc<^9`NTfOS2Yf=BvJ|`Y<YTVwOnZr5e;jG^ zDHsNo`-HESYCSeuFIi%pU>G~Lxg<CAYMXZFIxD{39T~ZT0hElr5Y6%1PdLcsKkfZC z<#AEe<zV9p6Xw^vHD?#M*poI%peK*eYf9@%Y!;nnZ-WPOT3gyME#=ia`&cVZxs<=n zF3)WU;P8<F>R-m@SIc<vmIhpXVE3T*aOx6OX{mn*nWyy)+o)R<qwljB`FF2gZN;x5 zZz$AeW68>{=NP}!=#BjR&iiqkXr9nlmy?815)r>KS>@H_oO4f|tBt)5$MZMXk<frm zy7Vi>Cqr_w*hF(Jxk1k71OpTnRcev>lr?s2!mb_i;27KKzqdY|DF4<^e-1x>W@Q^; z@$K3v$R!7+8y$nSm6h}5b=l8`j=>77OYn-yqW*QaVP>?0H{o5D2iO-n()<JrAPX~R zADg$IK6x%&$dIWueDX)AFSw;wRA`+Slc_nE=N-Zd1qSx8e*GpqNpLf_wHUtAcE*e~ zw6KiuoXD#IGBW0e>;ioQ=;3`qf;<lk6EG_b!Y+VG7v(atFa*=HIIeB0OPAL@e8XYq zp8D6yy^(3LYW(W^mc67dt2Mf+SLavWdGP|yc$M9TlkoJrcHKeIAV5xWqH&T<uBTN; z;2a?%7kHQ9qJKP1JS#=HF|qB$I-2$W_|1&pORwkTZ|6Oldgl&PtsHHiH#FKf`X0Q# zKnsmU3m1kyi8o0Kq0Uc6rhd}99E;{107FZcet`{V+jRt<P+4A1>(@84R6mh3B>I$c zZbR9ZFN3=;-5<N)&0AJ%QsoKzft^98a7UX5C?NDW78b@!L+g9#ILD9)$Fa%a_=%aU z`o*s=UymduDT#*6y{)%(L?{2RWgKUM2{l<+3(E3js8pZ}wb(gj-mkgQ=H&coavBmQ z>o57t{{WW8h4^*fNQUj7`MSe$lI1PUt-0g2g`FR>^kpesIUOO%5i?v|w)v$$K5!OO zc(t9xwCFs(2^r&VK>>qru5(^vV_vU|vmCQ1H3J)Ars4BuAS3#ULRf(Hu?OlHw0AGu zp-)tG_O&%->MIZJ&=nqVsxntYJ1ezK!z$x>4<8$>{Tit{Z5U81OjC_+6ZQ67q*1WZ zf|9$`t7gOS{aKGg5GusSzkqp~I%w>#%ux<O2Ln8WZo4c(K_rTwa+X{vK!ESDJ63#~ ztg0VY9{Q*_=fm!6>U#%{wr`#tBP?$qE2Z|e{d9zC@oUNRlYI#TqnF#YxCsgwfpNLR z<FM5Mnl@i82JAS~$qDg6itYD^6dA_SH5EC6+0&))!`IB-!j_n*v8(4hjl+|Mn}>#k z<lViC{SDTUr;3LS*48HP!fn~I6E<4Ci8DOn!EZ!g5c;mvAG7(5nVHMIymXXOSnBda zzd^XKsUdyhU((%{#;U=3)=&W+n`4{t#ycB#EjGk9qhvMiErX(9HW;%rTKnO9U8Ya( z(4x?7g6CswH~Q|>I#9x@MCO9~{Q2!Q)b@*)?oQYGquOoL+G%~L+N!rh?+xD;7RDC! zYfVii7xnb%i>MhFWYbas>ApO@P<EBvWW%`=n^Vn9^hQjGQIpTUai%ObMLMr*uy<F1 zs4mRIzBTS$f=?lztZQ1D-aLMicXQ)5=ACVdy3TdwyP~5zYs?y9xyk4(J4MEMhN|94 zHduOfcpT0h?sma_@!~cb?tbbK`DJ6*JEL%7pxu6Xm&PVvBVTFwi@$kMM@mlXZuqLw zZoTWFNlSS)M54m$JIpctHPPOPHyd;TaF=fhix#~V3vD}#J(*qmHqs%*4Y(!3amebB zXL{?+GMe3*rEPcjuAI{qNG*Wk7m@E#sGfhdbxVqcoSHtfu}9wHyP&82<tzn3?gg?Y z>23fU9A3UQ8evni$b;>oNR*y5*Z<rUhot^0hG^Gq)9ts`-m9^?3~-idSc4v*)XrdT z<Zt2o{|v>aH6*RjTs@r2Vh?@^uBUd_eMyEui?0$GC&R22895aX=$0>wK+oU;ftKN2 zlC*aQKz{qqJ);s52K7)@$7%G?p*-|oLk9)hA7sY^A{-LZVP%k?V~S_kwGXv_Mh~b- zMf#gGSDiFxVZGy)X}gUy7Q5sroKit16Q@jBvR%^utVKd<FGWR!3ZcVVmO<sGWH3pZ znwZc?j9vFrB^E6GkCJuNNrf>k;}?RCZC5rrmXsuLmL>*kPXQSh6M-wp%P%FP#Y%J7 zs8Ky<IER`o=7d4XI(Ot^4)Oj2wx*=ap)C;%fNv-(?oJ<-v06B3#kzIYgM?dXv^=Z- z-U4V`pC6@l?Uw6M7jT7foXrCrO}BTOq&Lj4u<+8|Fy!Pkf6fW_y{F3Shxm-bwW$V@ zwB*8Bf)WirMh8oy6QTe>a~1>ifdZ|h&ygbkl)jidzj^a3)a)(o@`C}qwrxav#;(tJ zrfFNgWsLU<*|kqOztgK+P}^!Xc7wMe=;8hSuTuZ}%0g~XIzI7;j<|T!ja^V$sD^@{ z-*0a@P^{pbg9eyY_7}M|{ZvV}JV#83$PFe)@@nS)V<{=M6}AJ1DjL7fKJW8Ut<lu= z)y~`LnI}(5Ub+5SHS7e#NqXyC%8n=iu`$Qzl4mExCSr5&Tb()${+oC3c4?6@Eg%l- zW7ZBYu7y&-a)H%ruGsP2fWY0d<Ho&Jg7lNr5ppCakc_PCqvDgTo9O{MamD#!fXDpw zVc8%$%6l_Z9FxPQ8hamRv^wK<bt8u{Bam2W<Wl4;|Db&AJ30GVQl-!dEC1%B>U4Y= zaG$e*wi7@!Ioafs0T$NY<(N1M10t6IVnQT48xIdXxYqa{(XNMWxg*V1*n_i2BpMYD zRt42_8jm+nFJ8O*XOSDC+;bb_w0?eKCy9+rf85{|oct&6bsDFuuW!E5FLU}4&au!J zfGsyVh<VMMr`Zt60v7_QnGRyEBTi?r=;XAU+u0d|vj&#A#BhQYjyE%V?KxQri-Kl6 zWq8xUUvY2ULHe!b0kt;!`Jsdb3GgO+Flr7WPSyf!cRWr#2c(^LsX{q~%@cBI?hKck zpU;vC6bdFuAA@D0`CWuv;uI&t<!?6^afx1&W!|Qp6nQq+`FJaRd?0t=0+xo1=5e_Z zmjuXz%>>6dhxsEu44nX%1fciLo4|g-JZo65jvO-ND_uEb8Gt%OXb?H=L4&$<?K<Hh zduwt$E@WqWJv*T~cI+&=Od`K&PwX}casf7Z!g$S!lCA-C8`B&H*zqIQyH7tDcIdzg zC~uNox{#pGiAJ*oQ<lGtPB+<lP|NR`H8JrO*U9{86h3vHrRT^XB2^HJ#N<%6{|K+5 zPb5MvNA1RT9h;<9N<Y*X^bJU&_`DoR=TPSI(n2JoBVbDjO`y5?#-%RFxUUyLtT}zU z=+PtDoNwjb`#D%V?$t-UVWdrCpgDVT-lHGz^WNW!zX0Bs$t&A+vhf-Wbs15Q9cx~{ zegflv8&O156b#X3?g6g%a8E1Pu=eQ_&z&Tz!|PjFdf5BHBhE5RXlfWTTSNJM`uH&y z@_=1B5OKz=Gd%3H>n@kqmD3iFAAj@e)ptQAZ@>XlZw?2!q}}`c=oav7U%q^(;!JMm ziBnYpy}J&y^zbM;F?*JnSPP3u{sXHe^4z(8{rfKk$jF?3|1<YNU%#f{t`#KEa|;UH zMOV1`oEjKypbvFIV@O4RaMWo8>_SpKe0*zLnuGZt3NbHXKCNjOYCCo6DQo4JV=jH7 z!_5kQdx`O_6uS+5M^)xRFIw0qZ}4{fq<GZDM1U+7dTl=?jZH{Wmk>ql+_{_>6|8pp zP_`jIa-(QyQy+b-czVqHRQnupZ+#|SNC(5*b32HP-QAP7Z7UFRjl#oQ8$KjH+1=ca z`Pqg0Bok_ue{{F+D2MW~!yTd=Pn$hX3(z<`1e$Vj@yt>2FX^}dvY@6ywDSnqJpbF| zPvw0H{rdJFcBAX?8LJ3*@QwK0VI?D8WHCD`e)~WxnO{f*4{iTT^|`6<e^Y&$tyZ-F zM%!Ulf*^v5%Ps@DB~tTl+tOsDrLUBGe<{sY*AM0%qWY7NkjPtkoM3Q|AJ+-0)A+*C zA%Fe*9gm?Cw#&UrSyoqJyE1>vZnYjNejG}Qi=RMNDMV4lyDvD89XTRp-CvQWXBF(4 ziqBV|R#UjtQj!TR;>8CQ{Ppvv%4&Fj5F>wldal0m{%vb3RzDUN9U2Gn`*G(XX?1Fy zZ3KKoDLIK-W7d7kxxBjQd7nO2sHs)GAp8D);!@(8lbaxz4jd@RuX38}_rh`VJ~rIM z*0zu-N8|dyNhe`PV&H)-+xO}c1<{ocwE`CtfpN0zBSWR7yx~y0S+DcQbWxw4Jy{qy zqw&uyRZ~-gc*m|fEO#@lkPAj_puB|=9JXqUK9+);&~vjZtST=L`t)RdYs-2Ii#(Dq zqZT}Zh_a!vF8|)WDL!|OV<@moYKHbEetWf#LcA>nd-bPhfu0-l@86$rF$0P$%?olQ z-m(e1GM{^TELLb2GQpLwLL6MCWWeH;7?<6?`&>GD4s<p;+>Vt1`U`SYyPv##!@&2e z4JD94q^H6UiRV99Zh-QZlD`qO`L6Lp;MzB@=BTz?wIn@#A+`Y(EyZvd*Z;c4@Rsg8 zBiT8}A8C=g)`H&N6-$AM-xoL~jNKL!?avXU?Ktqqx1N>d`f>mT)fWI{f;L+{eL6yV zay_Fkd_IAMe%V&XPqu@Ew&M}0&haBX_e_J>A`-y|Owf`NJtIRDz6Mc8sN%##=<8J9 zG_*9gr|sD(!R2rG7Tu})-Co1*E{5YGx)L+E2k$OrJ;QtNYA#YHP|*JU%g2p-NB&t- zl|u3;tO%c{&YCtY*!ikb<+~oEOr%*YJ5HS{+q?Itw{OKoT7w6>Uh>mFziMjs^G&W| zhH*2_ERqktj#uEgi*hv3E|>fm`ByH!)3QSR%+XQYMfly|6)eG}F9fAcb!eP3bz!ch z{d!4@laj!>Jcw;XJO_O>G>8NH!ad5<G5me9LuenF6g<27Rc%$*G*3n09W}V>&q6mx zg&zR42t909zgfTtT>w3zqql9|CinY=?IISNzBBAuVck#Np+k|G9zJ@s`G&gw`e~3R z5)GECu@&UFd)B|dTv$?)>ZYswN)zU}m?PeR3~i+ud8eFMkhg{<Z8m%~3fnCb4eWmB z$`!&vb<saIY;Qm!JFxqtMNWs>0umB1&g?ZP#>vr9bLFH#?TGXRxivLSVb*yf&gN*g zySp7E;_p8A1jYblDvk6m!`P3QZdwFGB?^AmhOIJfONJguUUfaPBpYLSYA^{&TT`6B zo(6uM&pPrGv#f)|fv_vyLZ&aLB{(wlqq^m+s~8&yDY^azwcMQ-YsaZbLrmilJ-F}6 zvm5!{NG4O!YP{mUsje3b5c~B9cKTI8drVGG$L7J+-u{StA6@Sh8!e=@QtiN^O>QVD zUd_*EN8bmE+US*)deN3#YOh6$1|W`IS1=KehB**eb@G|Ag@imsgM;U1-d=a;eBJmY z8>`8a#YEsrht^63S!jR)Jz8*@>ICmLeI)Q2h$>8xLrOVxzBolf2qgbOX-As-l7h)I zX2c@1TRcf@=O%cXHd=B{cZ-LbHoJ=bmhq}C-rV)|r$EoLMeQ2y@od|z?`U8)$fo3I zNSN~8$^o{~KQ?-7fxqzV*`8bP<mKcn;@3xyZqWQ*9@P0>$4joI#SX_W3vJ=I7aNb* z?+&v;={wNuvSiI1PtUTC9~<ZpAKKNlzy0#1Kh{tTQ90`x!pagU3}S0OM~x1Z`f|)Q z2%irAES!7PI4X!A(!Klb^Cd+^5+w>rh#aq9N*l!I`X5E;LZ^Q#LMJ3G%XZegdqLyb z?&m}E^!*L1`;M5*nh)m!_VHsL@13<|1`}bW^DZ!hJ9n<TM%ZX!(s%Tsx4S~WNfr#< z`zzXnPhOF;I_lV*ae>9N#1yk@d@sIN{Gf6?n;j!B-kVkjAfNhn3WR2YKv9FIXS|xW z&F@`}ui}I#kj?DD6>zc)b<Mx3U@#UQ{&<(X#733J22S%1wQ38hR^4mum(?2&_txL^ zVRWbDLHo0uWaN#8KXynS@TG0ORC$-|@+p`5>z=$eGU-RS(}l{%zaa^K=hTGh8sU5f z9@QTo-?@8votalKN-}6;KkJ~d0B*FjlaokLJ~d%OI`h0we{lAZ4}LFQMIsB0hjf4< z5d`7F;*<ZBhkYAdTr5SaK|m-Jw>+^8m1xr}{6flao<lwB-F(|_MfW=rpWg>JY3bcL z=9;(K!qHI(G0<J**_3;rb)C1#vTt+rEBNk6u;_RSDPzzJ5NDswG82A!gHkNqrtrD+ zj?bv=tom?;s9JJ|kNo??@n3nXLkLU_H0A_&uv=&EmM(p~f7SOnaO&+c1EzV3MBbVp zIM8>>3A5)&8xT#?gI6aI<qYI_90$BL=dYjR^PfDq>-rlM)FQsSTjq4O;CdgRNT@8A z!T5^eD!Rgxd(~}!Y=@w05IA}L0rCMHdT+<SA^gTe@~*w~O)tAzPMVad?!~*qi1A)l z^trLwf$D`GbJ0=h?MIy&@Avy~Ujp5C|NgdhTW9ZUn%+4hE$u0kF;I8vjj)V4a|2jZ zI;7|8nw}_HpLu5WtVIdFeY*={KAHvSCYeu;sr??H{&O8#;kYxWMbk1f14Kvb&$Chq zzHU2e#DrUej=T0F_^2yHd{xz!M`=5rKaXu~S}}_Pi0L|vhNUl4Q`6GsdaN6{%q{0x z{j2SLs#kw5ZK-syoA*BE$dRqLcFb{c`IX{YVR6sVvD(?$&uC4z9}O$~9397dl<5e& z-{U_a2{9aLXyneHJ9k~nzLtg+jWzEk@ahy7FWR#1=|Jam`}eDKeV4-mefVL~GC_^F za54!G;JQV{cIy<-He{bM7w&6F+?v)FQ@7XCzrW93{l)dD3#w6JWAf)0O??EV6urXt zsu3cQu5MRTlX)mbKhm?^E~mIr=V9BFG9Uf=p)4ma5A;Sb^mnZ2CQd~5*T&sliBm{u z>mR7xr@_bLB7S^|YEI`49V!a1e|&R&0?#s~(BJ<ujkYA#UQ?_lctbx;NSX5#NQKjn zb^hA5T}Q92uZ!yc2;?ckimiy@>}x;Mtlv?-iQ1u2qHLIIPK`R;rA*;XX?CqB;FbSg zttvv%KEyeQ{+o{SklEC!k?0W;?{BEn>MoM*^~;y=4S#=ilxdsHTpYVhm~iXWhQv)j zchKr!o4E_HpmU#59*uPof+y$|kev};#m}%Hp}aITtt*>GIGNXi1;*B2o1sx3a~XZ< zQZO^7bV0VT9C@$vv#DX&w-3BkJPuWH`iCJ41fGis?)n2H(J9+I8u9C{d2AcJt-EY7 z_E@vQ>B^T*Zdd02^M3sG9)^Sgd3Ejj1C}fEWUcQ-EDOm!7S`YUcOBR3-+!Xdt7Ud} zLq*ha#oRC9to%EO@Ln)Kj;egb@ZrS8N5#a%L`CJ^9E;#jAT*5Zr>Xgykigvq4kUGC ztzKgBOqP*e`uZPvyJ<0qyZRCIx{PalYe%B=g@@u07z9D`KOULCKB7FHz|sQSe8l<s z4LEpCO)p}Hm9fifRsFO=BN+wHS+f!<%*z614fx(_s!N_C9V9yhrbxCUi{9Uj7`dW_ zMD_euAm`ZFzK)KI7WEYEXC;xB2$>_bZ~+UD=VunD1)1-KgUR1~;yA1<_zhB>LqE>m zXu2%=Z|d4ZCT!8%+*Cwvuo!6k<Sz00y7|<N85Mub`5u$zE(JiytRalz_1}8ley0z) zOpwIrEh9Q|I`q<ZncB2(B2hcjP7T8ZTP&aY%^lwX;j(9s-?=jrX5$X!M_eu^+s6^g zA>47G#jiQi4|Ll2{1-iO6vWwjUUwv`@z_WBU1Ea9zV_tl(>&f@Jtl58d9$T+6+goJ z&9xh>ak+)!A{O|J2f21?V@KLbCl1>2bn~nR21}S^0;6`TqLQLP<K5Ut>@=Ics>&Oy z{9G_GZLs)%{Ro@yfB4ndC@umVOxU@zzn}J)=10`{@!Na*e|pwYEwgVI)dMzKuq_7Y z=!{wZR>RM>GGPuPp+PZ|QVJuCFafOoG>XKcPMvmY;~Mi^+nN1O{ikgBVCZ0x+wJF- zIUAOsDs6b>)PIqcThh!CHEL<ys_~vo2xvVShYl?ubq-1Djm>XrXrAMMCeYe(c@ZG& z(GA?y-^JM(?*^1Hbf0V1WW!c~em84Y3q+F$3HYJdZIPyVjB0-Dm_ITx<oiJ;3mxW~ zs(1%n`0InbRheJ%KXvcVL!5Wx#rgmY|3Dl1F6G`+<eKVBa@jQC8kEs?v&>&$LqXgL zP_K^_3n2G^2A;Wi(Rtup!UPKTK1G{=C&-c|FXz3yI1)xU13MRIqO^hn<osq%4~hvZ zBxXrE!=FFrA3eIXgG8sli&j&6{_X#v@6YRM3Xyn@y1+n9U#)By5^JFQ^X#jQj3Eb- zlEg%aiA<J+Huv9BbitxxUS>EKt)f*-^s7E-@qz_g5&eC7rYj2I{lUJOK(PLejqQ?i z!a~luEm-jLmU51ITdZ9@OX|}O&HsVYggFs#cwEasZS9hr)++^j&ypN1-J!e0{Q2`| z`~Z=j>16o7Rsf3?fd*p_sLAm}bYg|-<TQRRW@Nf#cd^UM$mn)K5P`$;U;u!5r7b6U z<L=!fv<eIg983pNfA`?@4|cVI#&MxsCm5$?hZdR#{(aN_U3!e<Y0UYf*fGRRO%#B4 zRq!v%Ywv2%p3J;3KsrQxox-tK!WON#Sgkc-$ZQjmP5f$e{Jsz9d3G6?-?9<I%AS^y z3?Y!B;SCC6&VN4=fBwnV=v7cvOuh$<JZLZ?5r|Y#LMspto)U<W;au!A?=78od<*^q z(a{b7X@9;`gtC;ZY$WH%r46kue7S)vN@oh*>Z3Xa|1P23Z<{{~GQPY*ZbdW3@&w|b zdiYpTL7s|pws&83byFR0dwcudWcxNp{;huxEtvPAtc;fi=hsP-HUAHNdf{Er`i>%) z2Pa6$)9$!!d~IDFN!IOuTUkRL5CR^*m4$k2UTteLk+%#6{s4V$+%{T1(QCoK$~C8* z2>2CF?Hk5YK6<2;5gc4J>Oih4<|*b-Glem1U?!PO@XZAR>b`vg9Rj&2yoea>y;){Z zVE^O2_F;Z;{xGVE2ks|6kBb1|H99WayK~YZdta%p3&%=b5{OPO0$y4bOG6E9EBgBO zMyF5XbLY4u*Hu1V3`33&u=aapv|ow1^?Sa8UgX*#ylgzm@g>r<PGE55SHhpHvz!OU zjXbFk(smcG0s|T`WQf7a%BTfKTP6g1m%xn~qNQa~_Zb{H+xeKY`J19tXWPfyO*(J> z(D7QW#W!C=DK8+ZJp@{g&6ds^Yyy#R_aGNP-Xp_ft{OFfnft30zNv5Y`JOjg?vmE< zue@klg9c5Z54v+_s#fRJ?48ByI)J78Q{#T@h-#+En&f}!<t-Oiy&m0mM^Dw05p&%v zo%GE*3L5yT*=G^H)zy(Bf?5w!3hn#O)GjnlpUcY$#&e|F!Ndabo^#i%xxQp6*rB_^ z_3PKoTk%QcFLLUWOT0BK%&)a&%$73m`J>An#jN|t+r?F?=}*uPym%|A;r+JqjkbE5 zuI?E+H|&V=ET|{v&M8_~mu2;|dGM7<<FKhlH=5=X>y_CXN?v{be8!V8na``~If8?N zbYt&=k#`B6vt-F2IY}DYh99ps9M;Ok3oGB_ByE;o(D)Q6gA)&yd1rHunK)-F=F^d) zTy>r~bAaD+I32(ukjE6K3<VdUHD@;N7<3JQT|DrL$51g5|I9)Y7wFyJP3^lW?fCHV zWB>0*mYRt~SKzU&B+pC~fCvk4lZl*XVL)sPt0GR(%9oc=s4D1ig%rS7+(Wr;{!o~y z>&h&GOo#RELcrl$S|#iqs#h-Eeo{;BHp5Xn{GCPY$U&YFX^JS>Bj(@hy;6U3vfUe9 z!_<ZVPg)k~nmFrT$(w_N1v5$E8J|2^(eFCXD2zlQFNG&C5zC35CF1knb3_3sM$UB2 zKEErDw93*mi({}EO5D(r?tDKBD|ToNxC;omt1pP$0wDU?`2BEVVq)^BsFFc6X&Bk@ zpI)1;66%U=^kXQ1zn|Cq$pKUC&uq#GTsC%`uM(h*pOlx%;|Yn*9m<|wy>X+QSCJ83 zcCXEKi**$bR15pA$1<hsrmN4+El){H>nGaJ2WLT9p);dR4#xfv>Q(P#e@(>^MUn77 zMg2wg)2HttPWb-)5krTvWASa&`ebMeMs?if0t)i(va+X^y}9<}N$%?QQ}j(dRPS7g zI<+Xo+t};fxF^@A{GV0@(2dl)g>r`=PRTab{$U)QId*IizJSl3O?P!QVz+_gUS%Bt zCom&+9dktvTlWfeBbG7vjI$?$LS;WdpU4Z=9d;|OCsao{wcWQe_qg6;^F`Yisks?- zDHySIpu#6G@@>#3RI1L(YFZihKJBZt>eG)nlP&nf2QOH#An!ab9vn}ZKkO;(XQnzk zdoEg(QF_y-?W*Ruy?as6!d_7ePk^nw0TluB6e-QFck^$%4G}mvbYckY+X$ZEu?Qid z=$i*kvbIh%Tr*S@V0i$l`H$)nUWRO{CA$oTm4_MqFzM|q+K+kE+_?hh3}_YO=r#>H z{=C$}N*1$FzzZN^7DD2p=>r|H>?}&3D&%INqi0*PwYT?*6|g43uQh`8*`cy(Lzj#* zx@~g24fbb18HDKJ!dRmnff1adBHEC)?c4K%3-a^(V-f1(6<4`(>A{om$$7||cyiH( zd6aC1XF$}=&7`W^`kTA;yfXaag9kQ48(I?wvor(TetB;B9FE3{`#U>_>+J80gQi&} zLlz&^W4%HD*)Adx`z(4rAa_LHq$NxobHM3iFx6R6EA23%Bws&2B~)%72S>7;XPZ}w zvf|-);B0e^Zv4(i7wFfVCQ30MjDiJr%g=W^$U)Sb;IUNR$xO#$xO7Xu4)@h39<Xz| zY$u%j3s<5(Aw(2Ka~vjGP%!j6k9zX>;X|tZRDk;6;9DH#*iok0^b9G!x<p_A@F|#> zxD*7zSUWipqG$;5o5M}<YR9j8B(6~;#6&zaM~`m#BGa^JbDl{?VE_4#rON|~Z??I4 zorp2Kyg3N{d5=8iptCFIrNwA?#gES}8gcfZ^WgXY-Ok~p0koTxl*ovP6Lar$PyZ$b z5Y0rUsydt94^cDL)?dIvVf?OXZam|0LRV#J*3>2PUyE#252O#;Rn*Pl{?yO!0yeyy zUhSqp>;w$ZW%;hO5<7ldc(xVFbzCw}H&3(0spKnH&qCC}_;tc27xsF{{j@O>_kMK( z{V&v#w~92nFsQT#51wXX5NJ&LjY01zP_O`wcq^$t9Yo7ku9TnTNTxS`X3oS<!2rKm zKuUNt06cBw#%Zwa4z$vQBK3`TF{D)_vcbfXyUC|wfln=&J%3kJ6!DeiRaM$+7Gpm_ zPnYp)4po{UXADB2*?iT;$$yl#b`_tH28|Tps+X6rmZ^R0^kd$D!?a7H0FH#DH{YPx zF!%4<v**ywEjClyJljGn1fBp;%ta#bh`DOuMY{{z{q`c@=Xh^w)$-uMBq2gPkWIZK z=x<h}!^bQetrb#H4<5rp!;XI~>kZr0`;!F@C(<)CAbFZ|Y{@J_7`mrQ!CGJ5D`uYf z{BVYDSU;5b1G0H0Cj;gDHhwkSb@b4z4iZ6A(uOHYebR$ab}~|C6TsCS7(MQT<#Qv4 zN#Y>)@ZqAl>j^!-?ly!hJNm*g=mj|&?pSWwE=ZkF6tmj_-GP`rec*1Bg({WiOKKZ_ z{bFq9oKl~2jR{wfady}Yn{59=j&<|ZJKpGZ6dChI0-_806Um^5#c@ABUpYQLWS~b6 zMWw@A4s|-@m7TZ#8C&k()(88SOqp^IC9_DxrrGS6fq{WYG|2VxR*C%AwG9><*$P|e zV3Nd7;X3SV-KhEX#}A^QICM;h(zHAO6%t=0Reo>P?V}q@CBg<wUb!<Mw`B5n!}76R zety{YxXY?SuJQzN#%!Pw-~@Hu!R1f7+>bC-z5a)>HN*DG_f8_|(bq+>^JApiy3L<| z>s<|?mPiCKn)eqSz_f4zAK?dm>ge}7sa;YuL|6A};tGCSN*|l8RHX~OWMpcvq~i}) zaI4jyymh+oYVy{XaP1W2<k)$RGw;m!&ML(kt|za6Wz)Vp<#<!<Dwx;4UAxMUAJa2G z7ua|2HgINPBsaRlnFYojuP^T5B@+4l_>A)s`Gl*61|12v&_Kp96d!7e1si%axn{{x zEoRxloa~C^Y`VG%k!`s*ZX9*ZnPvMuj8T?Hyob~l;J^y*@f|SeoHe!MeNGL$w<zOh z(c!jDI%u=H%ggt5Tp!fU!hBI1{i(0o2A&@BUuE|yBM&^I+6rvrbw9Zty1?%P23Y#^ zX%}a0Y;4S+VPbNPFMxl+Wd0|fx)0qHwz?RhY-sh*EMNX?WcWDENXmi|TlanYns~`T zk>E|9<0(4%u%x*7C2S;Q`7D!;9`)>CCW(<TZ40&)JVZO4hp2{ERxT>5Tf8-7tnWi( zd$T3AbRwNZ#Jo+dv!ok<fWZbe!iXY@xxZi*;8(FcPGZy5>1=-)lc9}7b-MC>MM`O8 z+i_Qi49RxvY^!cl;%)nO_JsF!5ylHDjLh1H<w@DG04YjTU#+`p&uPlZkt0@mo=$%& zvDe>xyRSORp{=>>YumUmwTYKs*x#4E|8D;RnMG!W$(saG_ZtrHWlyFoIoyA?FFkAf zQhl+&(;5TDE+24d?Oy_HV>+WtJna`RqPw(la3Fj~g@KD@rkIGm>4)-iL~9e|7jt5{ z23+41^l4k9zEzaux9u@2>o?hG5$-^|l*P~)VA&dKho31;_#=eo7tLrXoRszm(J`CM z653?-`IEFP;bvJ`3BKl~ft49+heZe7jlsUmDQWqx<jzThI%_TR)k*1$pf7w9a?sN9 zddV3v9LeD~!i2a16qe9$Et(r0J||s?9obIuqmW7_yq((@5j!O*uhH@3@uwWBb!y+z zp6zzs_t?HUeOjN#PG<5R`Zl%SU8F50Vc|ihN%w)%Pq3y2BEcX17sn-S1Oy)lAkvdZ z;wpvW0Z&^vSi!-;ix)10u9C!=m)rofyexlLUj&IfCG*kzF@teVoTGV#xxf&~_EK9{ zx3Hj~8VXGE3-wj^+>bD`(gV@`a#3EMU%A-BBb5qxq)l7EEx<m@ltN6M0zJ<K8(%iX z2E-Nqqex|^#m@~vo)6GqOw;XbW`1HXz2+)vJ%5rFaF^L*r8(4Re&%#4F56@u@7_Bm z4s^=en(x8bI#cyj!vUMm`5RT-6!$n&24xO;8EVy?Af<whC7T%<bJb}HhHI|PI|V#N z&nGF`|L7ybyd2i{OG+c++GNd9>~Hd|z{$?eB<<1iV?_#kg%;CXRx3lVui37~Ra14X z`zp2nq!uUtDH%Be!$Tr6{Lc!vrjGvPIQ7L>m549B2Sg9Zx{1@Do;L47#=a?sF7~r? zb=?5c0LuVb{e)v%sVG`nusJlk@whT`h(PtmY00Unjvy14NSlzH4jA;X6V)&sGv*SE zX1GHzo;2YTy_@!zP*!%^549Nnwzvq=pGRM)s}iE=GiJ>803T=d4x<Wa@)Rm2pPq6Z z8%al<OhbJ@e!H<|B&>9va*k98<Ye3D!VobZ237idZSASdOxrmx_NE_!{9A%v5f~1G zblMv~3>OksZ{>mQ-dSt5@WAp1xSRr#@6s<hV&%5~O%L2KJEhb#aM%i|uT{6NUY$*+ zgzGO+fx$D!55e^RXMMFmrPy@U_-&I&gs(mrwGR}Bz8UGe(`K35FO@lPb;165l^6C{ z9W0VAM`@&E<C-^klF)Hk#d08QY+{ws91;@3tE)O`kTgws{+neF?lsW}gBT0CgY}B6 zjt!x4)nz}U$iXxr0t69r#Gy9urbqHGV3)As-F(yKO60KH{ChmWPA_|7Qg<6vHTAOl zzeKKEUIiQbcM*(isWZ%}Tc2AQE>tPl1^`+1y7%*rx$c>;q5-X-6~Hy;Mtq%L1>#Xv zb%A4U-@e|Ok<W|IY;N*&>%~L51XlC_SkdOZ5x4^YOq0^ZIDHw@Y>f<M(f<FMQa-mp zS?$;>+5*VhJEx?@;9hj=7SM~5%iKLNF;A0B+oM!FUvtQQz|h+LP`;<x=Rcp4?QkX5 zcwv<E#Lp#@Lk;EE_x6x46wlM~Bk~P*5j8dOOUZ;OC%+k|^2&%l3IIn=vhA_TO~x}t zV-xSsJLM3Xn3h@<W2}O|Rl@ibtbp2I`YDXEP?78hd}q{VabUV}9?9exr%ywfJzyF2 zkgXzJVfd4JtQ3<6&yxT+Vx$ri!J9pE20suXj)e<-&}K&7u60G$>K)%MzFM0lIM2|Q zll%J>VxUO0)1tSodoJ<?zS@3uv)Wo8S_jz1!$Ir?$tYyPLaPWd-I)sdPh6_!LOz;| z2%M?~R*!-lQO!qqZ>U^?=6{fG5xU5XUbF5j5U2=<;y;heF_x)f{HE>NfOYG_h5beQ zQGfOCpa0^8i_g}>&Q4l8v+b8v-hS{v(C_$+iofCB0|xG$1AZ)`Xb!se)ax)K%@aw* z+_~R>*37YOsF^lZ$NJKM*D`z-`JJ*gJD@MgxO{G`d<@-NXGCC8a%QhXv5kZNq(5h+ zZc&9U>g_#L$VE;)c#uIbtZgVh;IhrNTtAbf2Ut$j;f$AD;TM9Av`den!s;iv@I7~3 z@Oh&%FZv$dZ+;XfHOCR*X>|r&)BRn6lIgAi63MNRA1T4gHwnKLU@4;4rcHawTL}S% z;AFh)*Nt^e(u>%=nHcU+f&<29R^`c$iti$Vl888as+JSo15k@5kdA+>iAu&MFE`&K zJ%t_lV|@B2M0jb_zR~;b2o06F)a$ouI0#16WI<1`Ot40*STJJ-YZO$tfd%uX+1poC zR&rIC`@yPKBMh-P@&aNGy_7%NEP9&v%M379;D1xTUvKaV4lH^;#n9nOr18io*^a-e z51J)}jqRdnt~bIv{9xe%-a$s<ic!<f7=Fr7RFe2+%EZm@h}rTD_sr90&Lp)_6kn+M z+pf-w7)Q7)+s02FrQG+Qa!an}pjC&lH1QbPV@5nq&-i_qSzFqKuy7JAHX6V}S3?FD zK!}^$K#Y%7)Ex>8yqY>O@_`Y7KJd5YUR(;kxJ6fdsJf}L;nFHnwV*WNYNj^p7<&Zx zAcxl<5rmL9dIB)gb@kKLwM}}ZmeRdTa7z985ffm!FhU(I#<>H-5crk6L+?L)7_s=t z!0h%G@0NBb*V}*o&6%ykmnqe0hdEb$`~JP}P7BCKdBRdtS@{)U7xx2Zsbh4OjoOMC zuZhszS;*VNd6flf!vod6efv2j*%d$LL+XV$m8xm#ob&SK%aE#Ri%!p{{@$K?T+-L9 zbJwm4os~udS>VR0(yBCUo)zk)QVF~8n@fbcjQSdngqitO@UlRdm+GD|_1D)J(H2S7 zq$PC_k1C%W-3z>r<>R+4^1n(!^13(6&Jd|)1@xIQM76u#_$BwW1pX@*hUhVH1RrK% z#A6emE``_5*+)g;$IE4ZS=^y4_{!~nB@Rz$H(c@n-5t*@w$AnQ^5kditSmqISA?u@ zagWrISB9UMcXCmPz3`BtDo?l1fWaRgeg~9*GvwPX<qax}!~4tKrkJ4PqVq53hS5Cp z;6j+wnSR39bB&tGe+k6xCc46a2L2DvzwFH$+gY=Sm=c!R$l%|;-I%#VQEX0@Y>K3T ztXA*<wRBx;bLIA1)#7?(oAZADkv#7IFfpAh+Z#gnpsaC%5Y(|dEttCoYH0<i&+d>K zi-Q`=9GdLBRhj_j&SU?nYdnP=PW}ak16=X)(vx9hNVPNl*xzVSjCNxQ9S;z>%SGSi zbZE>j72lCr)3S+)U<1>VLzau~FlI+@S<1@B&jB)RM(#l!Z??oyUS6K3iTxQ=F#b2O zvA`6Ssa+EW**V5RyrKvsuq)xag5OH6U#Vhix3fH=^61*yXou<3eVL`f+mTDG6@r0V z8q$hFj({$C+odlN8V80GXxTw(UboK-Did?gbZ>jopv{d}uUs=qx^1A)jvW5%{O$bw zSmfs%q*NZT<MSNI8g`ckn*Dg^?kRJxpkO`N3rl(|?O-|6%j2iS&vZC)aKP`PyON@o zx0b|G14F}g9Pn_R^K^1$`i=;+Kk>Wlb_rHLf4)Oo|D)sL<bAe94P>~+mS+U|P-+cW z5B1kO+d01`u}Izgz`eNsal^=vv2t^BgMP^gAm}=xqt6JW=j#TVR(k?+-&R3gpk~c< zx&W^P*whG9H)EAUhY#cPw%hMY`vgj>nU);V5EwCGE>9mm6#v#Zeg?Ac2e)p`M@E@k zD5oO5QuXPTxa%3JCj*Kd)hhyq{8Jh_PF#W@_Jv$t6m*O*`0~I6<r=f@oql=U8UWkU zeT1+gYvPhse*V1OSCcI=h`6wF!VYU_?7q0TMwkk?k^}o}mE9P4@%fak172J0mlzP1 zdeczeulI@Y1&&|k#`rh+4vG;llDe>&N~;cZ?ke73Ydo(b56<i5{iH2A1sE>3{Ix!? z+c8%LClG&_1b_;?U6k62DqiKZa-s{FQt=iVV|~AhnwAcG!uv(#wYA-Oq>uN{298LK zSizss5v9I5K!OIN1GOK-@iT9x{OtygVg&7&DM!ffI>6`uy}W#rU(GKEy<3sykwc$W zj(auev3khe`#lvEEedk6DZEo2HeiO`dmg-gkQ~`bOt|+t7a1hsP$KCb_tVdQE|}RJ zAuVDMlsoj2CFEH=jSoGgY9D2}@cLpgFLE+Qj~-npqvQYFV@3?>DlAtyd7pV+W}(cO zNu9S3T%Hx=9ec-o_pxV$O&hylheVrvbBA&(D=S^)qgo-Sl)KU=uJZBeZLrLZvPsky zZK-+HVITeIwUrKHX@{7ZO^&I5KFsToX>Q~#Yti;XVBGO98<~lQdp>*p<_%s_q3rwB zn>z-X*oIGY2;Ijq9|J(jk&Z{TRh(Xbo^OUY7Q5!Mfb&Av!+8nEYXhmh=Zo5iH!Mds zzx&tw8<FiEUi&*_^h618x=GRyHg};?JKa+0_XWk@cIR=IZ@wrk#V!C{yj;(o#l_KE zny$Ro9dgD=U!u*S>h~&|ng=s7Btxy+39?>JXnt!GSz5kDZ0A^YvEWchn3{Obc?p|V zNQ@QUO@i&k)%z7b=YxXGF*~{0PHM)fc;AfuX5xm2rfEE`&22Eyvfu1?b?WKA)PcF% z+f03W{n#OTQKRm8lD!<(*@FHW4H&!FEXYm(*b$I&t^mf%cS?$lj~DQ84s9$!ktKI& zSWWv1%NTYhp0ueIGL{c-^zD{uJ$(B=HGU=|;k-oLde>QbtaIggdGI9qApvDd)iBJa zaB>PWtu*}n2@g}F;xO(O=AOeZu)N--dx7B&MjdgBnVlrNb{(vxB^bnFO}zYx-jE>= zii@#q>`~x+Y30(ulgtBRB46?Ncb**{AF#Xkb*6DI<gRd5eY-S9o9$lN_CE=u|D#Mi z?Bk>rGjhrhpBwW|fzsT4SHrWQQsp}-2*Jhs+6LCHbzi@VL?M$U4%<!co8afL;7RwZ zJBr#Zx_r5lc*9GT$b4Q9GLe2&9nX2tFc7z-Ck5F=hfucI>zgDkqc$d=Wn^vy#-?c} zg_zkS{eY{GD$&>XSG`V<$;W4z>caZ&c}dB94-c)Lnv%ly7efDYHI<SJBYRI-wQ6{& zq?E0UVY`E?4sUT2oq5q4Gz6`U&+tds4rF9l4m{*Ad$wwzvGLp9xBoBR-aMejb^rff zLMl_yBt#md3`r$ZB}%1|=8Tmjgv@gpR;ENsNTp1riHamsN+DCFkYP)NC?rCPp4V-k zVefOkzwa~r@vMK&KAP6L@9Vy<&*wdT_|4?0lc;rbo;-~$fi#N)^{)B%Kcu6*$87LC zCF{n~pGJ4tp?KIbKyeISaM2a2fr696uU{Sfkb|+0oCL`K0Oxg66as#(_^TB!+)Els zJ$*CjpU`%K3X5(KUmXL5gg~oG<a){92EwAy>$6}o&C?p1TKKqfzq9d5mukLpgh*wR zKtT;)5s~M)?U}xw9<3tdTz+u{$14SSmC%+l8e;0yClm%dcXsl~vm(=#QJoP*gic;Q zafbRCKuoj&N0yh8^GpiZpLlKYll04RWVfer{d2UX{j#OWYidtE%Y@V_Tw*kASS`H+ zg4ILHYm9rEFYl~9XVswiP|BW;!RD{-21m}D4g`z_4RCb-)6A%_Fb8L6EN_}UG&;<g zsvVo7VN>&tV-ITDTR+OmN$2p;$qeEluM;yJ=3tCII`7syXB?Cn)2MUgn&RZ%MUwM& z39G~eA<Jmh-NkQ0cD0P}I%0lNOktNi4&ACxs~oo;Bcg~hevW<=PL{CcO9bz`fv%O= zCKQHWZbB>)K|g-n7W|Wl<K*XT;Zw){n28CfqsYqM{t)adt^AY=*TVYr94)!!da~L( ziFs2kh>q4URsPp}#yzIkJ2_IruI9`B%R`y@bfbNu05lOaoTHml4`=T{4N%u2C(n=) z%IHHU+*gW38${OQ$2t?Nb99)$cMtDkP-%%nBX>k<D=Ao*%dWkUbSUxZ^)?r_`L>@^ zO7jh70%#iU)N5W)g(fE%Oi9?jc8jjeK|%}pHZpbwnJO!us*6OI?&0oM3B`9Xp?cEV zwat{wx`SdeGCs9ttgKvYr?I~6mHuk75^efTmv{EBaF{IL(Q|)-d`~HpL!CzyZ~8ef z=2DFJ2!~J3&i0d>o#m^>TVzN`eBH7me#2pDNom8di$QfuSARZMw@}6|uyS|M4PX6X zoHG}q9>vP-T0mm~pL`2%k-zq2#sTd{|6vF}2xMnrX&F9gFq1Xd_JQlRg@ka&r?|Qb zdAyIaQV5xdC=%>!(~dr5bV8ou`Ho$?UYAzv)=eJ=GZ;1dpedFa3R_k_zk|UtRyH<x zP<nZp^GpLO<2u^ga)V{gGL}-4+$;!%smXD~qaz2*bF5qM{p#DLjrY#OUD94q<IZq! zxbpH7>UTXJSfVcBY8Y{;peprhqFKg{hb6~{l9ou<#0Ls*l2iA%K$%R4H@JyLTcm%K zAh^+j=z|;+4`_{6Y_MGD>w6ZqCL@f~o{hvM^);44U#cB4qdtB6Cis=TgSF(DDgC?6 zR*;iZ8~HFyf3|k*IftZjdI#VyH8J!c+cK}<xEJ#Bfg7lIi=yu{h!rv`#$2n@hH(v| zq_clW#y@)Txrt>#Ck#Y+dByvKCr^GLTZ7Rp+wFWyZVVOX)d3g*8?f<H2qTDMI+kqg zdk^Pz>sr`M``aBnv+C0eA+u)rSP9XTSO9i-eA@$hZPfN2JSZ4^vF+kTXa0m_N5Qr^ z|KVV<14J8|l!GI4MY8It_sxRi&qS7^>}AseZblq*GCqDoo+mU7S#u27QN^;@vAe43 zWl&!pb%X_4zd7?&FzM_oJfT+(y=eUONxD-fW*Tx849xw=UFamKK4whp9bcHsClwVt z(f3`g!ualR;3Q`L)vFo7Rr4hK6naqJD102Fn!YCaiN%*<#TU$c`xLHd6W8Ej-py@z zWWn~JkzsYi7fMw}FpKT5V^a93mTn(<TYp#RDiVqOY?pNU37?`SK6bLF+QnTceihWj zoqy8h;!qCrxHDO?ZQISTPu{JkK>7v_yolv|)hgpEnNzGHRjN1=zZO2b*u-WPUWAzc z$`vzgpeO)3R<6YUOXjgu*RJ~;TjB?z1)-3yeVQ}u*Oj(-Z5kWtY_PsBrP0U;<sPB) z0NB-N$`k~pgc@q)_@>iM8ASkX;;iskv*rhqBlro8H#(C8D|>3EA)XN!Y4Fc8o<Ys; zv$+8&U(HTb*XTNYQaNM5;w2>kjgnnvs?Ynqe(w>bCnqI=b_E@iWZgirersq5AL(zs zYG8F}Orf{6$(I0Pjac!)^Y5|;vX*+t%7#&MGvj>rj=@8R;vjaMI1y{8ebgTsOQ(@h ztOfP>M0l+QBhG&$7a${Jx<SH2L8{&N(`s^(SNgBm;QVA^+me_Ck1~VvJc+jFbu_5* z7dM<O)xY`xPm#&odm2?enB{zK*7Yt)y|oWeM-zO|`lW0V0<evzyNOB!d!d_$2O%Ci z8sC@%{aObJ3>H(7$aIpm;~D;OBx$LP$m4sK$_d52XZ6utV;Z8#;9T6XfMWqk!z0RB z)_D3LQXOdc-7|dv*e0eA0`=i(CV+qB*ZyCxx}MXoMKMZ5X>e@BXw{DpA$0h1)5Gpp zR_3z#NF7G0gejJz6bD;JQ-#p5^z4WLr5kleD+WJzGMQ-g;$1?xvD}BZW|@`e)WU41 zz@y!|C6J0x342v`H}oGBSlE`ur_#Of!2{O^b3oWaBeoM?trGhB?b}E3N!VaZ`H{PK zcim1^$JE1fvd$!z?Qij#HdqaS?1*aLdUXIPRATw)tCu6JLu`)IWHZFdGf$<ezw66B zKP7cK)7jA7Bl@W4L=HWxbZ5fLhrLS99DH}Xef-c2_kl<YFlPoQE_JZJjUJG{!n|y? zB@(dG1n=?tmKgUc>R<r4OceC^3uoK-$py?abQqz%V0MY0!TR;<6+>JQq{qb#ncv$L zTof+^3hj`zX#2ws)RH78-L47{_oUE-E+?`BKTf|U|Dhp;`a_3uN9f5j7dg!n+kB7+ z6t#DBHkl|h?GG!}q(05d9DG04>#B<G!~q~X&1oZw*S|Bn#*L|0Yu6v6H0vvS!bngp z=|qCwJZ64wc&{JrpLa;dR?JRBwqCC-d0gLrzpUDi%N4a)-LU`uv;+c&Av3b(3x8*^ zCWp4bC4@()wXL6pgNj;Z4dm(0W-h{CUuPumc-IWq&}cU`vW;4~?CD?vr0u?!?9iWY zD^aouRSu(tuHHs${<l}!_|pgKd;IO6L?Qzd{%u1a>8zw-|M3<6ubGG5myZAS&x2Gu zk>vg#FSC#ie5n6?mAuF+8S<b1C_1z1OafDx|Nip(&`!SbqvD}R$rTcYb}^pwvMOt4 zFZyB<mngN$E_SwPN^j*K?f?EGqINf*<hY#eooM;c!ujHe+3h7Z>uizEI_Wrk$P`y) z^c8|Xq1EK-%b%_F>Fmrqdjz&x_7gH&1`ihen1O*Cr+JC|?s(Ramh!ik><N8ktNZ0+ z<u_%GA0TgNcz)sWQrV<&ximufEBhGvYn#{P2ZtOPm+P!^|N8Z*4Z3J<^77VVptsu6 zCf;!K;hBH?eO$`;8Am&Z9@)|-;b@z*^Y#u7TfQ44R3`#4^&I}o*T-jXbo6|be}-Fb z-`>q`FkT9>Z~5DMj|h7~C&M4DJTv#S@NQ#I+?>$nKYn@ODv36I-pn*z+8EN&wx4g$ zp>G{8ryM_?wQ^DVS)--o756dqEwVR<n-yM;jtw=F-;qab9Fs|#N2PR2L2|<b=`Df( z`Fo`$E~f@9e6VwAn*>SQtPcq)7ZR1N0?BJ^*llXAG-yi8>pMMFLhDk`;Ln3#wvdX7 z%5u@_BuZ=d-z&sh!er)^H?{L85B}->pmJK<W~VD}id7PNzMF5JI9b;GxI*KEkAV?C z8aYLj6gc%xIFGoN2+S;J&W2<oT+|I*)G1lqI880Buhh*+!|v7TmmL|_G^@^S*zInA zxh83`8y3aejp*rV6o2&f+@RBKdK;8$w=9V0G<=P+;{YkOz0;@F_6UzY<dT%!j{U@E z_I>b?kB=V3?Uin8raSg)@EXyTuGUmxoS)ODU;58K6k1Gacl*FlIKOqM;ho+b&)J;$ zuO~ufGk-j7;fZnMq=p(MCBDuM`h0v%*m1?LUXH%UTR#n{OnDb+J=Q5=;q2KK#~qh1 zJHRozl2DtH5~<E(9A?fO;-)N`k|^2Z$87y5bPOCUW%uvTKK+PLb7;xE3hs7x3z)B- zZ^~IBlrfy{93voXFFGhL$L5`()C8VpfYOaUUa;()Ta20ue8M=&l$iM4*U32?>*ZC2 zK1s7JT?ciP{ec+2ebA;@0{8-O2LX)7eDNEWKX|Z@30o*7d6SNx%@WI?c*b~M5#dqY zXy)MH5Ec^yAUMV(?v(AS9GgkD)D)O_9#Qu*q)iZc{rEC~tQN+BDyK;lY8rOcxMibU zN7xdVPA(*w0vc~LpVA&}U$fP`w6Iz|0yJ?^2%n6eD}3!nmvqj*9g2ZalVpjMVhj2` z%e@6ci<>slby1SVO3DNb_8w6hPL)tU<CO*d8-yF>$iS>A$c4C(&+!eg_>*t$oL74w zwF0Pf{knDIv$yq@2%c!WGu&lQ`T*PwP^LS#ZTtS~=Y@(1z%RnQcMdHd!?BtAn`IdX z@p4HH?HoPT>m@li+c{lclKH3(dx}lxGRS--B_(kQ02AuPen0j|bk>SGYZYF;LLv7@ zQM7eVend`7-a6wu4wM0IX;Xw-rF>VT-R$;zAD&q`)69!GlJpIrPB`syXh_KP^ik$I zGw2dklU9Vsj2V}~pt-0z-TOz4pPGZ#XeZ;wL2Wo3QFKyIY;o*&iVMf}1mQ+3OhpbE zFMH`!b8*lwL8$sQlKh2)yNz8t-d)-7<J-rNuU`uT&EV~sACsNkhfFmrv%E;CqFpO0 z&}uxtv$}4%Mt8NS=~qm33vWb@OB$dPaPXzZO&|R^cMfXShLG8eG`ir|?wL;%1~*xj z*skbvuw%&@sdkMY8+7|`^^I#jel%lnsCA;u_4P*`N2C;ItZtOhjL;iCy!GYo_4%fx zv$TF!udcePvHGg0WaMOoC9~HjxGUAeaS}O*ev`0viYvM_)+qCrD}!1G8IF#%Ct@z* z=?o7KYFT2^)Kqs*P*zr}e*PR4-uP^?F$5VJ4H;02(!$XUsH3!9-0<=FbN0c=efz$$ zdC~e5iQLcRSNqH!Fm$LOp{_WvHC2xymFNHqFx47MI!d5XDsU2Tx@;ZCSj2&f=GugB z!fillc<%}8I>ha*bkxCvzrg(1M<z(I%-FLa2|Zi6pa%PI6&`WPJSSe=*TXg6lUo7< z;JuNx+lQ%VyhYZT)t%k$X;+5y$v8$f5_zY`na}}gWi5G4$DMVbF(-sb0BS~oU>7@J z(ZNF%Yd=Bi4@UZt@@plj6_JC01ogeTm`WKnyZr%c{YE>3onb`eG4YdF6PD?Xy<7Cc zp{tNUfRkxxZl7sKIV3a;OuOjXwX1@!W!7?ASARfzq{4L%PxXl?stzz_x&LZ>IMX6X zQD>UB<LR^j7Y+ZLn4C<gL}{XgDP_wp(C@L6pdzF(CBjSo*(p{f@mzdEipBx&$cXDN zLsiF2nfD}X@k>ikD{%?wrgEyPgP)#Uw|PLypm2?>>4m2P8+;v4*82<&${gG-UYhIM z8*e*%eM#Izshcv|M~8mAykQ>6lLNH1w-vt$`aN?UldCvbcx?|RBQBKjqO2F-(nE)y z(GDR2IS~-!(`^Cqr{(nFuj}e|%HAw4Ci<6W1fm`J7Ldz=cTclKaGv;DPm(P4yNxe> z_;3<%l9Uv*!&M3956@g;d*kur^GU;g&D!)ib~IZYAUjGnf(B5|*q&PtjtV>i6m-Wo z`rtwG#28bkiU*^=PE2j)#Y?-ya^a8K=bv`mJ8i_?$RigMM+6>WV-^bW#_4$H{q<CH z&+581gdUBmGciz#KVDW|uF)fW!P;%+M`yKu^tUz5PLJ4rXr#GSU$f>@O7BC4$ZzY^ zEc0&O?R$zhcFeoFr4m1}{@i==rG4xup`m2i7Et!@D1O68AM%veH{~n->=&gcI^(<J zq7V+kBhj;0uXS(k_7*$fh{91Au<S50p=pCx-cNR^h_K_op)J|1o7e{nt{Gd*_VH<< z5vr-|VZxNgmX;PF%A9hW*uJmEQ0E^5e>Kg?P{!vlzV%FcIy8Zqz5OmiaES4a{#jXO z(zovh%jS<W=%cAp`NboUQyZwFe_4HN{DB}Mmtndj+qFa3vjn=53{SbvWc>9Khf#fl zjtfDf{uSv$?>V!eld|4(plZaD8XDCc2xuF}NwFOOGc%oHRKI@S9DNlR&h7~A@3F=l zu8j@!{=<j6Lqqvc*MCenVEY=3lawO)57+wLZX1<pE`_Td6p6Sfny@fyH`g@TQG0#D zwTfVsKzex;y2!}n&uB(FxHupHN9yU+Q$o-?Pbr7lotrmt9PU-w;<H}8(>SUA;m95k zS8^~E9iB-+suQWAq?Gvh_6>`ZYX%F(JPvYp1Ge9%xJ5}Go%S~Tsne^JeqK&I!yjI} z&`0FTc^q=NT%U{+6a#E9A-kHxD~E8w5F=2(fz=vgNy5@}M&d?K+o&I5ze~vv@80P& zjRJuMtuUeY0$4fnM8Qwb+DJ;~;c)BDD;4@KZF1^+RV1o!>*vY=G?=G;{)1H7xESVr zuo4*DLn{Gi&XE?pd)J7OBN?iP+Q18O17xA2iM{^zvrDjhQvC@7p1r&(m|v=>2p%J# zmh1)^Z!Weu!bA()$8~@SNZ+87==sy8WZk@e{d#fnN2az&sWCnwB_(?A-ZQ+%gu8XS zyWU-ylj@!!p+;P>?)g%7fj|BjLrg;94uxrhg*e9!T~((s|Buq4;Psqt`MHC2OKPoN zo9{l|Q9S3k{)oK?k4OlQ7OVqpRd^-7XvlMzy0-l$KT)XtxS-b^uWyHQL}{VVE2FyV zcT7$YuN$3v;`GKY3ksv2h9p%wM~+`T;@g9?CpWjYiC=z1r@l8QFftJTR5JDuoTtL; zet(POkVwAZVN;OE3bY^=mp6^xV%e{LmYh~VBw$kj@5l{=Fj`PU#IifupFDM{RcCD9 z?{OpAjUF@RPpX{xu&4wBMiD<6*gm>L*7@@){Z+%oO+y9`hJabfE#Pd&Mmm?t<SIfk z4lh;~6%IF^C?)RP?b~&^9X8wiadGvqP|K+tm9(Des_VoKWClU9lDF(W@BskHuh!>9 zJr1pVD~;K~dgjbl&RF_X1rw#>S4)VuBCbPTTRVJp-+{WexFcrI78LKO9d8`dO>y1U z+eY6y!T`m*xCHzoxa=p16_yqjOi#7xT<oI{IFfYq=rGPHpom*L_WkoAz|8;=gs9Bx z<Is>Lix-2I(>duB?VMJf{6=T|l1Y)Lc8Kjf&`z+NDS#|0b*@>qgE154EfjtYxmrco zd@MpT9(5@-xc=Fj1~~OW4Mvs$@J;muv?FB?9w_!a>z10Q@u=^K<jaONF7X=&2bpEn zEE^e7RL~Xe*Oorp5l&Q{J`bm#*?8^j%Q>Q3o6A3jZ;uNDLJ_{yMMp8Gfk|JEOD{A_ zEct}#tE9v@;JIkU>FLy7xD6QlQd=9+KHf12#VAW68oDBN@k~}h>F^Y(ml~Z!vgYhr zPcQ`q$lQT7fI1PEU`L1^IseXdYGXM<jwV+`Jm8^mFKv8V)}iAS?+nxygvs7*o%e2M z>w)L%`qS_oW@&S9o#TzwtiboO(JY-)Gu0*t-h`(>VxuR!uH#F!i-T`HskLhO$I8#= zQ0W&{Hm&YOaGZ8raq*t`#Kbv7r1b6`YWKs+{clTuSNx3cLsHV0%)7BRu5F*eCO>q} z|IEdDU^jNp;Ytuc9Py|o#12s3G-1qs8Q*r>rDGw>EhFNFnkg57Qb3KPV*xi+ubeSC ziP9B(Pk0jW^B}=L;cW5M8H3L3ijhmbKgMi-|D0|_PS}Dg_Hmc729c{~J$<~9zJ3D* z8VQE%96N&dlSDLqYo{I!bTv?O2EK3i4A8yJa>C6bhzd?lpQyauJIkDyaIdn+h`3R) zw_cH2T6q2X8@QkRZ=a?1BrWpEzY!@LSG;@oZb%n?^ARtiS?FOJ>mChDT9lcrH*C<R z@-Yj}BrA9C{+UoD#3^i6U7j?2E;cQD`-L&0ZKK1c^#F*IQp?XX*Uytr>1v<?H!z<r zi-Sk0`9@h;#2w#|<sXxe<vC}L?OXozq(pqFgZ5tD_I1X;VGYsLWB{Xp5uce2;;?+h z3Ls7)*?-a`fG7R42eaHYVB`^oP@zJlv4OIRy9dsjH7nx40Y5~}NZ%mRgqF?FFw#D8 z)|2MO+BYv=ATo`l3FG(ktUG0H^@b?s)V&PWPw@pn;qRYX6QP^=V&&q+*0#2L*Ij#s zrZDgPZ9Ql;I63|z+FAZ6g(y3<s-EWtziKY^vZYILJx!!_m^g714i%oY#WpUQ)|(&1 zM^&zGvkolETuSh6oqI(|$F*UsOr9`yZMdP~7|y1-bCb%IVW61mMnO5C*Wvy<BlJXJ zG8fdu9+pyG7RLarpKfa0D%HOs@0a}gU#bSZj4Q1n+Nd<wp%V1>AIQMNpC{OjXd4w` z&uzQoOZN3`0=eFG_0oShJ7-OA>lrnRS8S|Lbso6YctE#9ufvswtPW|fModwESt-V# z?EYz;a5m*wZuUllrVrzmwwa<ZueXx)_am*DGAWMFf|Q<Y`{|UT>t<ph+HkR2S@wPD z(XC`P@?y&S)~nD9JDJ^z_Dt3s4bZYBOWyGf<wKxI+pCG~;??$pSd+BYxpOFzm0OJ# zsJ;L#QK|G3!|;Ou_G~o|xn!`}^tjH~lgahIau+6sW&I+U$ja6hFSfg0`}|w;!40Gi z6Uy-`x4W@{T1I9*Q+p{o1q_+`q9S~dvHVE|#|SOy+K)8qZJM@rWscdNxVYW2{nnkD zC?EC1QfuclX|IosJ35<s2JN`q@FXB=uAIiVGo{J>;)*MCgG|}~`9bp=BwCb}3Fbgt z1CD{Y>2mv7H%S@?BpSz3)keRaURNj#)@9}^rOvjW$!;#2lWaGeoyeKq-t6cj0vu1} z{<1ml$gaMc{u+##?8MTLQ%8@!WQ!wYGKXS{>5I2YN&=7-dEfcSQNgqs!gs$Teh|8X z>C?wBqi5<D6}4ly^%!FYhs8!gm?Rb5cuPyVZO<pz7&(_7&_yzD?;BluC&^jxW{7cR zLm5F#sLC^b>mO(43WhZ1t08ECj@Z&Cm%W6k>YMXqpUh@ZS!svn2b^+HNR-pyp$mjI z`_zp0_l}1Iyf+xwfUXq{eibbePm7?=0Qgx3Um5e&iAC;uL|Ej#1nF0RvG@G@#KHhc z*M)~(3i*s=RxBH76Y1Z5=gytzF8I6Y-(vLa^F?Oeuz=Us^L!WXYJX)hK*-?z&1I8J zvzVNvR^X|JZs*#Y&%i`G+xP9YR6?iSn^D#*7vBtbHpBfF!|(YS6xDi8o{ZfotkEp( z;=|ebGbZTEy{MC@@<?*;ve;2$^c~G1Ga3{_5FBz+Bl6Z>7v;Y3@yURoMe2Sne{6j% zaYkoKVUg5iD@kAZXY=2+NR+4)Wjy%EWdz=kHFwr=L3H^vr@Pwt!w&5v+8D(#`>Yyf zrttD{9FBE$F?;q1fzj<7zWr#NPdqmkn~;S*8SdWee?kJWP2`)x%oV)(OpPyRj=d2F zF^@s`w+RV8I?DJ4@;?H4XVEb;G5(FDkTd~ewUz;z^(IHrkVqXSa?WFBUc$5w1j>3> zy$UXz<U4lY>X49nsc!oewpbqh)YL-2D8>vX)i4%3>*BQ6v&QeZFXLey@r4bL10J`0 z9$G~{6Sr1=t(Al3jq>68Ue$Ir(24LhXS1`}=<|c)=rRDsgt>n{TQm**de86c`0dQl zlo#yTh=b^e)<BT*K%^uk5nJT8v3KeH`^%RsF_)U0R1RIxNp*BZUY;6GW)47^cIr+x zVtU4B44taF+5t5SLKB(mbJLp&kROmqHArQKX6J;|qw&c<9tivY;)=(Q*Q{QRFN}1c z)tM*d_^%kl`46byGfYYDV_d`tw4W%cIy||@Fj|ZhfB-|LoRR7|Y!?hsNXS&wduNR$ z6zlfS3>-n_PbXCHtnee$qE8FT-+WcaJbETtIhow=AYAqJ0dy9nuP3^;h!Jv8WL^LS zkk0leGH+lvxJpw~)4Drr#U;G)UoD@Dxmvdl8qEy0ZreAh^uuM536D+DRQ0++y?%2q z;ZWpiVx&eqXO}LGiL?Q9MD}kCv90(WBMZ+Bf*CAKYCZaUZAcg#>FaZ4LmOgnDchlQ z7d$)(eo~u0z)Q4?ho25XNSZ`*vvb!j)uG;EmM|x1aO|Lp17R#Ze1poJEEg~S1iA-8 z7n)Yn#u-pbzgMqb=+LMknS6NFJEOql4r~>cZ88?RY!^oNnm)j#wRh6=A|90sW~*Fv z!p618OHW!_6te$fA!GUMj+T<g96Yr;?Y+)`Cdqpm7rNeQ@8@!0wVRx|i)7nc!}{0r zjz3szIPu=H%LV;p9xe73ZAiW`^h@(UGTKQw;AliSSMa*Pm>EsHMdIm?1>$5R>SMco zBKKobMvGUrp?CIXAOvBg+8_8cHR^oucB??b(l2q8%9#U6fZ_{|pi8A1<Mb7J5jXqz z@j-0OZ{ITdYb~`CrXfDuk<-ceLK&RVORd01AGV%#fkS}pYfz^RmlXT<GLI04&X<`u z?pgf-lz%(!F5M;z8yZ#KRy-!sGP9&wXK;(URYIy>Mamia4z_t__T}Mi2mI4Ev}nlM z<a1AhND^ezEZuu7dPqAo(dXGM;j8wxc-SXg-Xnc<ojKhC@<(OzvA>>6A$fy_o0>u0 zHJNICUafmuwWnp*PVL~Q1vwPQzyp*O2#l*rc1^>^kqaeX6-RN)J5cx;rQxO*S>E9` zrvmh5RZY#dOE+zgJNCCdP+wE3j%?rPON#qu>jrJ1Ucc)iG8m3VR*K@VOV#L}LeBS^ z1{Bdh*sM^U<PWO2+5u=;?y~N*88i6jMwA?#dl^F}wwlbk<$IdduRG%80K>qH0rPZq zbjG&=&F7f))iW|u{6kwe(410~Uqb<xZ#Z5<eKqk90Z*0G_Tt~eybU9XH`hBQOnZy% zJyE>n#b$}>Qa=OI*XTgc_I|SI((@FeSjS{db9O$n^o>1dJ-j-n792YekeZkzA);7r zT({Pm-1iHNHqcLBF(z{YuJ(q7m6VT|*8?A40NQNW`@08*wpEj7z*wI?Ls|^*?DAmJ z*q%A#JZaJ?E*&ypP$a%jKGsP|n{HU2(s#IjMcBT5T1^+aE@cECO|Xzs!7*}*Ed303 zAx3rkcIhA48j*+Bol=jQZZ>|-@rxrgZ1>a~C|y`pG<6^=4Q(ru{`{@Rum1LEEI4t( zzW=vw!`}4svchSb*ZUiX?dfVu)!oAbFAfX5?UOGmIaoCGOUPRu!%)ksstcedg)(^h zHM83wY`uE-1{OJ4zpdkn<?@%)HWl5xng48<Vz>1V%kX>H*$Dv`6=@pgHT*9RI|KDz z5I13A@|Ht`BYEtSW^}h`v<r+@5RE2GDl|p8$d%JDN=e2HfX+NP2t!VX_U*TS{p>xw zo$<uoo~F^kE4wvpxh}-Er^UkW4r;7*AEHoXSp3h2p@2C9P}hs;ty)_?Pa>7TN7RsI z{_L3aV&fQY9m!%>Zrz%XQ3A90r~3NuC=m)>Z|v*%yTodc_8ON<m_|j(snkb@T*7<Y ze~=+*el9U|rb679wfk^!GYrZkt`)_*_Su=j<k{1{oz1r~1{dMc+p;;NTR(gD49r!r z_uzg#Y&9F(bnn>{aMy7q8L73bal@fQ_xxx(DMK=%da{Gd`uQ;_BEN;{ik+tRHB&5d zlO#uPd}Y^~N2mLn`;jzwr1sRTA?rf!9wTu~W4T<1{O?0)`gscGKRKJWYgd;QTeXbF z#HN0i2HjmmmqckMY|Dsd9G#prug}cLuCTZi_;X6r;hFl@Z8xZV`p_}V4X#O6O5;sY z!CB8?oAi`BA>abW3Ja61bMki-U%7IHGPUT@AJQ*1BD7@>((A&>Bll<G1W!IVToy9& zI%%uEA?MHk;Ov<Ys)D>-p=Zz9j~|(4f17_|G_m~JPPH@)9D+()63gCVf~5jvW=a#) zV)V#nQ+eacB6nb0#+E}TrH(oQ?SOuRfO21|PTCw&J19fgNLQ>_VO*RZe(d-9?mJrd z)g3jj9X5wviwnsE&G*j8zj`$|`$NNn6_I<_wVfOOyErlz&pI#Kkiev#MG#lSNl+l~ zmen6VoPr_KG98Emp<Q%XSl^bYG?Bm2#Edy^h>|U4Hp_0l)11vXFaLJtG<!}b4_6YP zm~`s8^`+rI*;rZ1%sHn*5{3!&@L=HG%lGd?W#<8n(SPC1<WkkhN}S!fmEJCO#J-GY zPsp7p%%3GV5@&CgRiu-DUv#@^pxffAK4bM~YbKmLxe(Pl`|aa&ugxfls_hh-ri?vc z5T)u>q=#@8%nRRL#isThx$=#iRTE<`9MI5j47F8$)%_+CeykqxV>iQVF$5Io;oP(j z$W~PP4NFd&)ma=c$;DlvXcP))yhW6eC+cggnC<50)C&H|!7dmO1kt=xT6m{~@E;on z3>vh){`p2y4xoc*?VyhK-->)(bn@>THV)@?CVheiIAqLuu7Mb)-}b_Xa^_r?BM%EQ zGxZB!JS-~%4S9*{2E_%4&KK4vOkGjj>dY7Y*%_JCA|Djg3RtzP$1p8j-T5H6-b)K7 z9$G^%gw@yX{yMfQqVjDkXKok`-#B^lVLI!xz2_^YfB25h$RsWZ!&6lvs}6vSK4l5b zgho(Nw`;%mVPx@jrW~SnwziD<7TS~9cX~+b31~8bEPj6Q3KQhaP1zk%Jx-HG^n)`E zh|_w@siY)S;I}X(!8mRlbmM;c+WMCpKF5~uIiNSFLT~$?o*fL11>oOP$j=_T+0WoH zyYV7QAh1Bzist@QS8HJ>4*Ql`P^=auUwC8r!H5C-KnNa|mlNmLG5dzg6BoyZ&c~7j z!VLQQPUlC5D^U?crS}%vhZD~4khquTE>d~V90|~Z_;^q7?EHF~bQ&*0JKoWvC08`} zkx~Pi;(#3=IJ8?PJ^&Pnc6JKQJ1$*f+~Fmb<IIbzN@ZWUySi>kdun}+i$!zjnl>ei z0sz=rIvY&l-XDLgr=H8y%70gxYie$Fu4BWN{SRqZwCrOTDm-C{YV?-ADXAJvc57fu zh9k^vX$Yyva7cB%VWUzTd)@cyJ|90ncPA(Hl)HRH@&bylT}$A@aL<deai+Rcw&%P% zroRV^zsJ<6yHyNz)YY$+mw(~TgkSosQ)C;mAvZBOZAZ1&(U-~7=ltLYsiF4m+s8UH zUUbf;bHd{v0Zk3F@!k#}o=v_b!%Df56aR41>}mUIw?vOS?{!2f6I@&rB5h#cTzm(K z>K+ru`^aoqFQF!9L&56->T%6}C|q|#_8f0*d6`&yr6=6#>zu+|thHQWRtV1#vD1y< zLgF?WZ>+ES4pr-w?P@Yt<e>g+eVZJl|G)wk)B(#}7oe%#XjcE~mXg>3<_W|MINKsO zI4x7HHcu|!Sh}q!2~@<m*Ii_e(IeIG#DcSctWtT2r&3=Jg{tSjN!y(8ZjCLVF1mQ? zX&F-;8J~@xd-pMF{xpP3eQQXr=hXBGZF~3XMTC9jrL{`3vKtlzaX3(erMFT|qfKXN zYJWbq$p)<C!zPJ2n)Y3aln!c#Cyt2n#vj5mYDO_y5V$@p^?kBV)0UDmLUD`)*f-cl ze;OOC`|lT_qMTgmt%NNk5G@9P3AleG#I{rKktny{LqX3#EU5q4);>zV@ZLTBF=M7L z*<tDdDlKb{DBi2J7W628QuJmV@RSC8*Kr=h{7`_17oS!Mn7q@#equnmy7%vy$N-Wn z-*JdAgOHmxV$>+oDh;zU!*vV{_TKSrePi01K^pQOCj-*L4lWxzw$1)qf=t(^G6Ufp z6qna>2=lR0)`6FTckJGc+r5wBymEFqIrEa2+s9?OWX$zacS)8>*vS@vgbbP!MxDFw z|6#H9&EW?^1LO}rq4?azY_2aK&lJmC_4QvEf7AMCDRm9X^B<h>Qfm*=x=eU|p<>i^ z@8aC4?(Pmr_ZE#6bm{QUbXgnC^cFleDBUegu2npT;x=ExzvNgO(VYiin|vq|aMhk- zgHKCM6<iKqDLLJs3!)WfO3lynu^VNp+}}&oHxkAa9NM;%)eVd{SF5(!`9#LWO*-sA z!}GiUV8tV88`s%+gmL93BJfN=o~O1mdTBv%%R!WyJ%v09WQ==PUpI5Pv`b^<Sj39` zx9(6-i7Jcn$q-zV;=6~&=$?(WUEt<blrk;iBQzsB&q0OEak+4D+js69z4AlMu3dM9 z^nb($>gq)Pb0TN75{;<P@exWB%8J=@=5%1*K%?pwZ8*>k8#eHmxH>zB1?Ae15CXyl z1s6VSC5Jb9XQGp=?Jt*VaQM>Ikv#;bFP<L87lT@VW*<5<BOpL8qDa2;B2Q1*UcGFO zmXcc3wd&<8b{{v|5h#z%d7$uS-FN-68Kj#;A~vo1_~VZFU<N-uVauX0_!H~RaEHG= z(u5zEjd+3-#z(2){LzrYxs0sGibhk~s<%`Wh$RCn^0jNeNJOEC^loT`+)VNAe#Ai= zrSB{~WtR7~)rDa`dYarhz5y8)emc`(!<-(JU;oRB>EgemfxHs!vYxxftT>H3A>+*s zXGgcDbtb#7(=907Ib72)%Q)R|RJu}0uto>h!hMB*dIG%L>+^X^OJ@@90xk6B_3N8! zUf9r<iw+K|YrmdhFje~?m)PHB-dx=l8j5<ArcCziR!SkdNzc=d@-HkVP>MY(VmBZw zhKjux)5vK{K7Ss4<{GCrCv$GWU>h11?z^0i{R)VW)7anEsv#;D>nXA6dGp$LZgY3# zIt0%Le&&)Pw^J5Z1eL7-uW9BA6I<9Q$R3tnYp>kt8bvva+D?Bm_*70mjo&<*`;PA; zG$Q`w8!R%1orNjp%@F~d<dfUZYk`|}(4w|;yZm#1vACQSIBHo93L;MUke_pB&*sq9 zR6$<#lf8nRc)A~d&57c$YDG1?syrX+V(<ZQJfT%Re%!^uA)NtoMXF=|w0Q4WAY{LR zDaYF9E_)m9)51Voju9R=YVnITOS;$z`yv|-V*<Z0ot4F$5lZn2!iV>L{IqHO_(NRp z2v{kX1$x@{wXh+NtAm7ih%`Z%Uyo-2XjDT>3j_U@>o4)BFJtRL%v9wuX?E|i9^d9T z-m*!C-r~XJhh?(0J#>$0_5Qzi3dGd2L}v!kv+{;9;jbD!gJT2dV|+@=1xCpdV1N7Y zTvt$KvUu1um}_ycNNg%z4#(mTVBp<`(5_om0T>!KUJ9H8XMhSJDk>>_py7BIe*-iH z`Tccp#Src|8~c5eUzZ|Jot3X{DqvsW=^<?ICE}&Lz02jR7nJ$9<gx?5UZEfgeGZHS z^`xrrW3_74Dym}=h`9a~5For0O)zsEqad(9pr@vz^NunY(X5+WHXSg=!$XG-*}M*8 zUe2*&Ou7|BCG43HSkM~ya{3!>Z-1HH1D1!uu^h%tl+f65pl9$`$*%3CF?jF?z(-&s zM3na)K8#~IQ$$zny~TnN&<4i8o#HT|^;p4C4h6<xotYrx>~)XhtCq3~SE>+ECj}iT zjHV;}f#QKwiaZG)UtbE`yHB1pQ|;o<;2FWg<f*5e-!VHf@;<P!tU0(zMJE~Y;%<^6 z)(9f7b8K`R8N_&EsM);vDzzUqH3`fIN3Ogxebp*NV$HlCAqSBp3KS3k5<QrhP88kR zLyP{;rh)XN&%fGk`aE6p>C>mU*?M%c<OAZl1!^Rjd()taV%dhj8W6mkeb)4TwIi$( zx)B45;ARU8xkInLm4-BI|ACn<$+>9d47te*+=>DX!+bNFOQx}%`?*&4{J~1qHJ9r7 zgAu?+dU~>J?QOW3lO}al(^xLuCuV9J6x059LpgGI3NWJbQLhygSjBeVjPm~O&hum) zp&H=J;FS~Rb%UQms6a1$$EQX~?F_pCg(}!(4f_RrjfK?T-3E#Ob{nkQ>GrI?AvrA# zgTW{GetHT{DPHOCsqtk_)o=CbGd5<zXN_Aj{i|Ue#PdJt%+%G0zzj*rOC3U4qG;cT zfCKq%-Ifs2RjO1+#tjCR03gn)eSq?nfz9txvDv5|^ws=}E8t|(=Z2Z$<vR<#x103a zfRJb#_;r9)@xKfLI;&@8sU>?KB~kYPPLQvyELRF+{^pjgTSL;^?DP-ZMDKDD8wo1A z?^k1V=IR|+ZNK`7fyez*xW5IaM4j9(^c%utb<*-EmE_Esf<+zKaIL$%{NC8u_ix@P zDJySVz`#P_I0tL3Z2w33o_c_syh?M2XttA-1ao{5wCDOu4Dy~d^{T&LQiu6y9IluO zL+rI1&?!MwO4kM;(F6o67&)6gjl5jn;zOZ>eoUP<?IP`JUF_Q}_9~*17|w4d1OW9Z z)cUUnFhWZSq#$m?lYtp{B{d5w7olD);w!<ERxwMWuBZ@(r-3KH@74ceSoppCnb);L zL6`N4YoVL}M1rK*d^tFG{bcY(Te9N3_IKQUU9fk8VS5fLl9YIJp#c*E=gl@jM@f&0 zDg)KbrFy5jH)kvIQ!>NeF5jzbt}j(=Q!20U0q@zWgCWx|T4^Pd5cuj<BLFncA{#rU z#Iq?rxhhtlAFcNzIap-SM;<SdN1O|DXP1ASVn|5@D}hAR*;(Up_ruBc4J46Nta=BB zOueR4s~PPYY;*i9?P8v1fN=~#d>&rR7(oM+KCbNPhbGjA#J&<~Ly22jzIyJAsJW$4 zEknPij6Gdm(%Cn{C)1)%{>tH#C!e9%kqLI>&#dcgK0{vSI0qn(1;o+ROUbbxq6szW z(Ib+8>V5leHc!`zz`BUbOl$sPJE~9KqgKR#9=U)igi8qMJkZ#^w_jMsQ12Hnjt>89 zs~uq=ia&nk?lSE4wV#Yp{6N<wrA+`Nz(ZIarr{MMZZl<sN@&8VQ^npH(7z1MjDC_F zb|)?)V=?(RY%j-8{zNt6<LT)zb!sy$in~Ro+?A%2ofJdxV3X|3um+z=>cQq2XV0=q zhB1S|dWp_%2df7jkIV+Vh<lwmc*f27ud=2${jum(d#Nb~h%^%JN{Gy6SFf#AGDx7T z$k`(O3Udc(8x75`_w6cv(|z!xTW>xe|K-|2WN>)PLcM5>h(X?oqAset_s7Pj`DhTk zQ1$Gz+iUv`w_d#{jw^ooiMPF2!n1Z6eBg~KPqVASB}E27;yG&;EJ#azFwXVKM9Sk0 zuAsw6^Mn_IY{#noGtg(IPB>^bZo}v4J-&Yn<FSL=(Xq9EB_~rfQn#nJMN8SVraoOV z&on$f+43Q~L86^VRATE8JyNi{{KsqWaoEFA9&wa>hReU=IY~)Kc#YT!^3K0Y_lv_* zZl9^K{iWP|ztib<BEN2Qrg1p+I4i-|qDTJA<8Y<xHp|V@-fg}wzB1)cJ4AdF?Q|<x z7-%OEgGC8<|K+HtZ@Vcgu+8^9SN_u@VW#`1L&P)fKWzl;?VtYJt{@Uk8U5ex2+;<` zuK%s+7sVI;w>#ng_g_23i3G*JzYJDN?D(;=W3f%!Q5z3x+3RIJUi2k%_?oz4r*;<; z?&^!u>`yEIpqTRm<4JEtB98Pr;qK(6E15pcSytD|pg``PT`bPizrI>-{GVMSbw}Ar zyYw_F&(Ggvp9q=OUsDs5%K3ZJ|6&(8SXeS7r0|Gi5+JLE6ts%L@)c7ypvOYAfj9|W zkdA`yd&xmWwY((^Mi|G)^wlC$+!Y30{QhmS*l_BmXI~em4wI!UHMQmcVKON_JQEHS z%4DZ<)izm5p%<UqvojntUTi+?sVP!=cV(T(cQ0QK>fz<+xFn!n)xTw%Erx;9|0lyh zL8}eeDPb1%llaA$e*20c+`q6DWLyFIi3K#{MW8~>ijlD<6qIe+N-7f^-HvG6O_a8r z^q-p6#T*NsoAEzO-H(_Z$#>RcO9NVMrBMLs<q{m%B5<b_eCEvjhwKSl+FY<EN+$Q` zpuy^5JXk>fQr|kN;pXB%KwZc4ad7|s{<^kYN6sY*O-|ANofr*O^YW#-%4haTwm5n1 z;YpKoE?kH{aNv2bctVhnM`bK(`tgIW;ed31mxog9JhTA?Ilbcekm=<#0xk__4P3iW z4<a+zuM&@@fO>l*6S}DzBPX5Qh*~t-b~PC#ksAG7wI~3mWzD<K&t>FEX8iNUjZL{v zPsBgc#(FTPFh2e{yER;4{v?HSN&8eJ4SLbg@n<QTa7~cpZug~LP5kR~Tx-qSx7*ii z8W_m;H*e7yt0j`<M5F8+Rp;h|dqfj;;*#ad@zo%Q;VY;mIj>Xdom%E~b?#^rtq~LP z2V<l_dN9rc1yjYaEy@4fyYA>eMEJUG|0%*B@^La4cP^Tis3;H6C>xub2zQUI*d69y za^qV__#!pne5ak?3y+wsT=;oo#Og@5o-IeWRIb5scH*JmxT7bkw!ZZ<OF7wHey^HI zXp?DW+Nn3cE0^!Jr^+fGd0{JF-)uw<6j67y;L_uKeFI6I(KKh$bP9vY!3AMAJTknS z5I(+=X=_${?8o6s0A7$)CJZ421RNzCk!qPl<<_6yDwp_#SaP(hnx9~c6twYiT)?~0 z!%rn7ST3u1c=zr?Iv&^#iH#esR*@c|81m}nOFmu>KqR0|{+U&ypHc202J|@qYk;Li zO^k2fVryVge;r#3Tfh-C5AcesF1E%s%$PoXJ<SY&vxQXT{{6(vm%LpjE)n>wK~ppq z_1J-EYFhTf-bP#c>)vK9yQR8Mo;Gc#EYCZePt9L6@vi5d9<vl~<mow+VtVH+ez~PO zn`E>XSSldr$-T&^r(uU?g$qKvq8)3$|NLgD!$5mU)X=(H!Rl_P`~dGmY68Z2Gx2_a z)xN~!@cDAH1vAlxK8M(ZXm?^_W97`b?dwb`0oQ0^{#2|N=4&r?8pNs-!j;f@qoZI| z2pR+|nuy^|Tt+jUvSD1V*kzM#Y#Vd3zd)<O3N590=(}wREQ&Umdk^Xjz=-({^f`DD zNxBzr?jXLedO~)uQIGHan~|_ksjeQa8hwYZkl9r$c^tW$VJ)G_G<~V|s^SuOhV-GM zSMQ$U>G_;b4*SZE!iRpz0AD8JQo<5V9Nw(G!zcH|v_TqyF&ZIqx$e&QVxKtI4?C4V zZ``W#`l*XVff^ERo?Te+b5Ko{X^)^+4<?OtzOv{0&}GlBj4d_I_;yoqa7!Ve|FRml zzOsZNtBHBMdE+#LYnf%q{e^lXx-Yz|u;y-*48g^Z6a&8q@9#G*3Hb@Je%%D6Lht>z zrZZ<G|#pO})oT4t#m7v%mHpcm~pR-+cHGNW0t;MssSstR{@H%F@y~>|j9WvgX`Y zlJHP%k$`f5td_BDo{j#9Bo2a^8YTRj0TL#ZCj33>1ULOs>iD?8AJS^aAbAKqqE{q; z3>E@gH>Gk_@6Ee+7Yp(p)4*Qx^5RRno|M<mpVv2ip0m2^K0S;7SDN^NIyzI*JvZj& zwjxR9-KzHKb1ERmI#lPk?tal2CLl<6>B5<`#L8-$-XScvMT-Erc=tKy&RKPFA!`LS z45wMuK6c5U6sF#YZ*Eo(vMqdyydyC#@aByhelgYZ>TavghBH-w=>c6&(Wz0h0@Dv1 z*r~Shbb7imQcyxsi5%5hS1q^aa*|f3w$8UIDpn!iXB&ndWUfOQV{@r$rKDD&8>Q>| ztyiLsN9zsh;L}edwOe&<ryA1VIXHlVq9Y^QcU^z8kQpf2+BL{5sBzJCMph*Ld&ORW zJHBvXt)t^T8WhAVd`lPNRsBkjpg<qJx?%h?%dB(fD(>8|)9;GMom&YVX4cRr3zPwD zv>D)yc8(bfoF_cHwBnyWe;&2EK_hCt{J4af&d(IPncC|YTDcF@sk^&i-S;Rrmn^l> z^S-AI7n!O&8kf6peb%=%J<I0Gw@rBbVSwc4E=qC}v}F5=sl^xPgWl#cWA%pYs9~qi zW^P$tByJNQ>EILP{-?g&C^}RY7!o2*cfbI-z%?|xoNiSy%DlyM0aX&AmZ!6_B8MNw z9mFl6NFb%@`TMq!=U0FBRS7+d5Q}ZiYh1e2VHi;y;dCTyxp3W8i5Q-)RR!=UYnrMI zUl_xqTM?G%y`A_LeiJW10M27Rxh*5zs8%U`yLRd%FWJ*%ow2ze8*u)J7v%h-52xUL zHE5jI4i*gygquh1=o9dEoJ8ZV3Nx|x@8`5nOh}NFlq6>lp9eYia@U3|%CTn1-OScT z+E1|qLp9vw+{=b&jTn)`SU0B5Ry3C!nKo@2olT9yY^)7#(vC+LNKw>tM=}!{uZ>MC zi?Y@7(v#dgR(Yp=;zY&0`LC???PD$uaMCi~j+BlP0_n`^qwT?i%;^c4foIyO$aiKF zQ_`o~g?dW%7X^w~MZe|QM{+?R{wdG4*u3ZBp9>VKcigy_bnz7*6Og%)4aI?jGiRWP ziqAotCwfHdM1yXE;``wy>6CUwBg<|wxr06cxBKnbQQx?3cCoSh#5TuI(t)R@`qNc8 zPUs?)GR8qodx5#Q{{_Ycn)PLFgt}1&frvvIL$s;y-I(p|!%`-{`rI_48)yt$F|k+~ zNq<z2nTLAIQVLGhYeed)Q`hxNkdCpLZb_fH*H-NPPz!=7WKX)gb4Bcv?`)^x!geYp zY^QqvPaL=EJ9k(f4Mo0j_N=S_;z`y(a#Ct7+eZs4)6l`ECY$<?k)qfi)XEQ!>p*Fi zk^QaU^@S^2ETk{!YcfK24E`NAH)g(N8Rua?nzwM_p?&*SV6QHk1bu+*zV7*RPcN^H z-I<qzFM&A&F5sSpCJkS{Fk{?%|AI)39g+9J3jZZ2-@KqeD`??1#pKk~PE)T;s_X2V zF%a>Biki>7c{a+2FTP69VJNMM$)O@2utbcD>FFo|g^`5m6S^O43))R>f*f33j7cr9 z_Q9a4jf#)Kx7ds`9y1b?SbB0Rz&t5NSnAnp8t0WhTRkuzvWGp8tmRh}dDKoE(0f~Y z4D&0Ar#h%Szg(BInia<Ix2spj6*Uy>j_`Rl{+75?_$VQTyk}3{v$S?4Ene$o{!7+v zbNNyKi<>;X5+=nB?!*vkAt{HkZHuIUumGRA*JZq)vNBF^M&jNp*KB8YG+$M=AWm(| zZ9Bs#Ju~b7S$|!y@S;VWvmzfSJS;4LSmGGDHTgPY6Yicd!otOQ&pCz1tGj(eyBkDG z{;AcDNp*Ai_kvu@2`C^VBQ-hW15uUnerg7t&|cls<u|j{cba(Ov!h!y{}gafA0>|X zqEixI^(~~ErFP?EjYTt4+=qq_P;^=T#z=bgupx_t-BA2{H*8aB7QMviioe-}J7vFo z+m7@*G5PxwtsV=%=p7^RK>NbE2g5XmkD2&7S`Y@D1+rMad_+Lsf~QZ{F~`_{g^B$p zIE~EAcWnOO>gpzeUd2a-&8o>pA_W7^3rT&iE&|`gf1{5ymm;XJ6gfTL;Fw!+e4>(A z)@b9FX%HB!1|ir3`=o#G_DSitK0~Y@57d#Bf=V4AFQaIyDDbXR=4L3l-??)KV;efT zek-QCSsyv@SJC&Zsp<Ad=%H?$@9HY~p#4s}O+z|<J!lw}rCmK}xI+H3aSFA&ul;g< zUsqsrkC8}vdRJ79*L<%(yl0Qx*<U*tP+kg(Or@3nt?L8OGB#{Psch7&FRlT(t=|Ah z@uwK%(`g{bYy{BY0c2R5kp2!I&Fq5lvj9X{w%_1L5J{0L2ex{NgkP_#TLw5C`o1{) zcC=qqnA$@oI-7-@#xKA(Dk&-o_EgFr$j`1_x_oVD$T!iftm{5wtgLxYBmeLCJCmH> zvDGqeO&B&Yd2-&H)>d0PE-_o?TFkBhc|h<(#*Mp5J(XWG#E+2WgIl*wpgQ3s{xmK; zCrPWjr1nvcpk7_J!d@=Cee<S(y$w;x_^{TRgO+U=s{BF85U<F-Gv`c+M){9)UtR3k zMLNgx;|Z_(+ii~Tm{BnF--r3AP|JvmT?qIes@y5*W6v8;PN?+g5!!pySHS1|9=+Kd z*-G$aoBsUb#M_iJr|?3#0T%>0q48}`m`|>DpjiA+Ykc`b9gm$d&c4AHmPWU2xvlHE zpnkWCS8eAjyDhH_FG)~&S0Za}Yxgdx>3#7aKhs&-9h>zAoL-WDx%iRAedEvOs2C8G zFQ7&_QfBz=W9zugM-R)7P4)1=Q?it2xwWZyXJt?&1k+-MoiaWs2hrTfqM-waqacOQ z69nYYc&JLpOHJ06-)Oesj(;zFieKMP%~*uv9Wa(;xQpwW96#JH^;>5WL=Avd2r~o{ zgUFFpYiU<y&7pWQUy$~wZhnF;!gwy)BH_k!`6)YDCj=Z{Jv+;(j4e#4lwWO^VcUFs z_3Ba3>xwvmZoP1!nI*(YkM2N7G0)igQ2qf-80IP>EMul-)3JZ4eJG5+@g8<K>DW`} zziF&1&Wx5)qdEpB=jLtOA_&FR%Q%}*Xm#E@v=`h8`fzlQqn5tj8E`Ztq+_H_VW2Zj z2^s)RL&N2qh83D9ESx9+1?;%kwDlrGf2y(tmmuy#7$WZ=rsSy85u?mQHK4GCa+QNr z-hRQ)e`%hRa^tP`^^Y<xs<s=v<h_(gbY>u12!+}O-0w&d)72_~2^pb7$grpGOwT;2 zXjgqVrUp-i(*U;N<4t;yX2H&=+5MpY?3<>oEoJ2v?akV%kZKug&)xpXdwh~L9|G|_ zX;(4zJ`0mM5^V^x3v0Qv=~B%sA0KB&$4#Ao(vqX++??mhP#j{xo`Zl?m=BXW48I3K z6<z#Bm{?)ZEni1%QEZzH$Nm?M^@jAv!y8pw9Eh-@h7$5q6+<+8ITHYQWz7yG0OCCP zh0d@ia}B1D{~r)?al(6^X8|VRY=b1=5J9fw<>PZk2oYAbFVrp>qEq{LymEj0p*N=v zyt(X+(TM!px-%DO$en#AYVmBh>Bq{Z$cS;Li+|oLb>DyOm{SLjUn@IbKH+@#-BSM< zWAeO1Sbt7#4@({{Dg(>`@27%p%C0opc6s=sg$sXO@6#*}qUZVbX~K=GTdj}m2_rtE zR^xifN3t&kiv`U!jG<sZi0=Lp`938hC3W}@1)1PXSk95LmkHc$kjBk&(RcRj-sBbI zhXp;a#6ahxS2uS}m1m@e{}uNyhaC4o#Nr9fFD?Cq_0U}suJoTOVsTRbcsX<Thnw{R zEG&YNmQxu+bx~W9{GQAsi{jM0V%%8O&3Wl(&n7q~(I8V(9Wq*=5^K+~o>CJr1jdxV zdws>td-pO~LJaJ{f>Q0IHgjRJf|63UXWk|PLOov!LE@ZAWG?Kgn6>6F;_q^eak+dt ziUuA=>JiyzPUmxSm`n}|)VbNzyoQA?KgJBrFI!avL=oMF_-Y(Zto*>$;u6?k`T{MZ zSWiAdO&nuwl%(1LdEDIlk464{yLWcElp3so*a0D<xLBTK59K!+)Vi-lYmMJhf9Ja` zBBhB_#RO|7G$pH|>l3SrGvPU#@DcVCgLjEPTSb+NN#Tk<A0zT}huKRcNWffs`0$ko z7vWF6+uV5S93kD-d7I@?x<K}jjQ16abqk`|F?bdi=R75ii!llWqY<`EdKNRax<{{f z?kh`Vsg3>;N)Kg`sE|f{*6zo|xV(Rw!;W88R<;yf9O+dAfA}PiaZu1+5GhPS0wIFA z%ZA#)(~#+&3XgZEprGB)so~0nDlWj0*d=HytCm*n=$(ZCGG@%$70|74w`Nin<Hr|V zzn<drO`%pPa`}ROJDpsGRc^E5jnSa|+bPM9x8*Im6n)-V<R_9aG1opFKX0DjgPh=4 z+b`uXbZs67UGkf`?y#9zue@9PTc>O3t5vyzS~!&a*dSsM<w}{hjEZb&d^i9mi7_hs z_kVj8viDVQp)6h=zE=Mk&oKh=x<|tq86<=-1j`l-oO0#{%M&S?O_$R^h<_I!S0q+M zD$nuus=GX)q1)gAMn>qzjwAD~kbR8+0*T_WXSyf!CV%<3KwN)ERV=&pst217_YpEk zi^K!q0_-_h`8@nRW}CAJM>1HUzL-FDwBTNA`$O^QEq!fU6-Vuf$acx4IkuOdI(O`u zylnB}ye&Gj?|hAkj10bXV6aAG<6{5H;8vu*!q^g*LvL95LU7xk6Gx;D0}nG%ag2$H z>aFm|NCop6_Ld_vlTuRFHh)cvjh)Ux8$ADm&1DluSJ!JeG>izx_{ItbO$GpPH@q5k zXq(S!G?@B}mgHH3E;%oo_l0BzI{%K%t^CPXW0?ILzlWo<yP5%je(CX>86M-t_s>)J zpHeh!Y`R{>`EHp8<9l{7`#c<590&pHo*WLrU=Ln}zLG~RU-ajetV2MkAY)#%Fk?`~ zvhfuBG2p-T>LX)S<>d_!yb`C(XsvGj|G7B-Ds=YmXw=&ZM23MfQDCj@ZKi6HyUgGL zhH@SNZwAH%3)e(zbNu+DM~}9foJey&`tDz9<6;M$fN~+3gUdCqTwtb{z84hKipGD% z$7k!g!QQ(M>zcXzJfiV(uglH`#fjs5E|kjp&d|JX*)6cP^B~FZpQL_`+5A6P(B-!w zo8Jm_35DAI5BC{&FD<V%`la-b_4m65#%BSiIYBBaI(k@?t%tfUwLS;Eot2gBjL-6f z#%EIz3dWp@^t@ZQCf2RlKIjiRC}Czo(#-2?>`~rHb!Qau|0MLCc{G1~X>QqsSzQl> z5SAevY=C|QW9xB9R|d6C_kZDSE`&F%s_z?De2T;jV!20d{S1yvcO_@e7PLJy6eTLL zMq%@7_OHuHa)l&jGiHLipb~X-d{JFp@M_6N+$D;s2*}w4eEP|+zvS|uK0O@Ii4%bp zgynVq>3z#UW`9`eg9n(8!h?7J?ALAm_Gw?nwn?H*Hd^@9m<vzSDzIxTPi)@ihqav! zX}r|99X(B|dn}v$*Tn7HtwAkW?-Aj@Mx{+aDkrlPh_&-rH#a5gfmyo*o~7HRDz)Fs zkCXQMI+I_SN0S#^ZR0n9aeF&|zCo~u+K>`!dd`yLHMcGQvG(9D_)(Mq1!rmG)VI%_ z#fWf296>$Up0~-VrymdTv9Nd7lxi!AKk#qC@;>Nwbo!j8IcR5Ki5pzk#_P3L>CxA^ zuPjL-{=!%cNg~Ys*v>D5-w-1pAlgdaZmE-@H`WNc(`9G;mNcklvDS7Wq-6vjf+wlN zY!Is-q<Zjce^SyTwcGn>rNY;c@ZZ~`%fQZi-dm2-`mB>=6fQOOW5VE`B4@k$)?qzo zE4bQsUcD$a@leCqydotIE<RNKC|!|giQ1?yqX6@0o&`mgWTXuxr`C^eu@7ll9zJ}? zh_G#!`@OBM{(?paYos94$xl477gymebhO`_ntmc(g|hJO18dV&S<mc&SdWHoLbs23 zH<tVlV&2~ET)d7j%DA*tZu`?C+o^F$N{kB)wL>PuMT^_Nf5PRbAXWuCI$r0D|C^9` z&!k{h8Yof>(_U${$a{y|=kY&cd%i+;)n=hn0)imvh_AEl(dweUVv1_|Bnlk+<Bk?? zd3lU`?E6&un&yJPDTZ&3r>1c2t?qGXM`4mi{&)nqTYq-wc@i~Vz{JiXzp?3+MuG&& zWXbr~GL9}TLbex^|J=<bHat*QQ`>m83VWgZGWDqFc{vL&ZnXKI6~sw1`Mh4IAF;pp zYdw=vuA}BA65Rj|e9IvLMO0&1_hMIPb8UzB8}sAOxClT6<v{+gVoyDeb!-UgwM{+4 zL;0Kw=!~#mXsno{`*HHp#fy_tQ%4hO8*mGP3Tf0Zc1F~G+y0mmk=PJ8dG$+qUCZ#o zd$Nxf8u;j+N}i{_J-t!#`2_Q{mko1mO9y!byLbfO>#*?tyI+Z?HrppUB{^qIo-uql zLfXc?dnedknj>m4KA~|HWhk?3c~Qbb_(?Rk3ZjjP6T9{@mQ_^LIxkbm=isgh*<Ktg z5iy?*>|{iyQS{Ha)|TrO7t5NVa#oE##K^buM^X%``<F!c#<3+leqFY{M8f^<9rMTs zuj}o!Q>J??({@ReCy$imfyJ8;T=W&=(oMeUl>9gO@sjm>d{`TZ+5i_>8{}zhmz^i~ z#{&1Nojr%2q*`S4(!k_Tb@Z1%jTrez70Jv5nXpTdifyem_HUBl3ul0=5^Y!O^h(q} zs4-axZ>?x|t6|0p%{@7rJeR6@mYK8_`AnwzdGO#`oNjxA?o@R&-yiXm2Xu_J&(6%e zNt~Nu>cqni*ye$Ui%j)w+%@CxiWI=K6);*o*eshL*v2cOQs>Xx-E$MP9tGQ7@ADcx zT|gzpCEyx`XK$@7N3K4i*RG0|P4GmF;92(0Fvnng?um<wcPOYwdC!gi@bubP{m)2e zdF%zIMeq#oxzspY{#o~*r$MCYi99Z?xexk)>RE{0f3j$-X=^VW7fc9rbNbjrWZLEb zgGBhmin~`}X{b=BCOL>h77iIOpoz`^o@vwO%~7{oS3fJba;2}a@d3-DKR;dXbEJ4d z6=_S@Cu=co=jI0a`X;0{#kho@*tgG>92Bm(VD78TB*jOm<G+Qy!@m?P<~*doKIWK2 z`E#T;F**6E^9MEzYH}2C0;WEAu-1qxm1lUYG4yU_1%M<dsx5=(shUu++5obsw9g2j zT>RM-QPpwh7y~j|6>ejOfokdUyYkwTf?qmYMrg>0M4{4aZ}^hD<vnR-(Q*aL>XUsd zrgWmG-S~<5;Lw-h5zTh7BV91SQ!OVg?XXSAQBtdh$9}56y1|G2yXv-Wc=21>VvC6r zYk_m}2LWP1jbHyYNmv9Mwg`YCL*fUz_r2Ji!4)b)z1v0KxwfY5Kajh~+VZ3_>S<J6 z3>=Zov5d^~w2d>lL@jc}i_0|JyI>pLw2l1_i&f<X{ciuM2UhgH`Y%1OQM8?JVnIJ= z>)aDHS=;sgBsDrejC~?y<vSy4-nebQcYyrc7jE9pJ?uI$J#|Rdt`wI8CqBOldRG49 zM^-ftu)x6#U-W^$w{K9#UIsUeMvR#K>BSYKjS0_&i2{2yq%}SPHXa%K3#6kCVL%GO zvZcbjcK{7<J!KSt6clpJ=c^T0Q)ZE!!3eI&{%Z*y!oN>DE2pF+K+9y2=tS~Y+~&-g zqZP6GMS*nH4TB!Ua}!)F3|k@u*<P=GHx6H18;0iF@;uK_E%HnghygcB^C-Xm6&Cke z!Qnw>BQ}EF*KsLa1q~6*l?xshy!^Cx;5c)3Qz4Cjvoz5zTCqnD^y-NBH(p{??W})@ zY~6GA?6x_%sPNjg#|#Se@Sqd1>fOt5*f4=usJO<RPO6{r;2%QWo@~QdOLYueSpK}< z5$wC{Qz0|%Lq>H|P!I+flafXk@9N_62=aFATCh5Vui?dA<BBI)TQ6R=>?sQtjE47l zJ+vn<_oTW%7O%^^=@ezGpyhT1;tn<^Gyu47gAA&AF2M49u{7urq^9rbM_@G+^teBG z<}~_rjnch=Ab{cSqkV3K)nj}7{+;iD!T}s9jvbYq6w+ox0^;ZYEkZk9SkcU1HDKy4 ze@f~w+Eui>#RrBSO;4|<L37^#!ZJ*G=a(<bjG|EwFPJrJ7&B11Y!$GwfgAp!xrN#4 zo7&A`j@h_dw{HvHgY4{YJe&a9ly?;2d7gS=)49@r(kGDtOP4ZgcaEMiwO(UG160)1 zOdsj9y`-ZoiDB)pr<Z>2+$sv8d}GoNPB<r5Ux?mTFu8k(9&<hDcewBv6Kw&G386<6 z&aTO1xv>qsyOm10+#8~^f;KY3cIXSGiQ`tjG16{`a!YtD+t2?J8ZC#(vGyM{eeYW2 zhq1rbm41dWi;wTj>_iwkN^Nezi4#_-qxKVX*XQHTKEr;8tTlB03C8=E4DW4Y`X2|Y zOHAA<8-8AEtIY=m8ig^8i}bG=Nq`|jQKTYR|Cd$u+z5)v6UJ$Gq<C2blNUa*OK_E6 zc2(95J0V1IXJPXCTNHPJR@WTR3q;ObbBohoo-E4!<MR5cO%fU&05n}^p7AT?zR*uW z%w)WO_WQ-g7;#=z%`1mhAL`@0WIe+t|DCHnuhT$9P=$&9FR7kgjKAFS&d`Xn!uz@{ z^>8JF&Vi{hv!fTLJ$XQ<N;L}3Ag@MK7KF-zPT}X1;hQ=n75M)pZ(Cgq)4_?;TUnXs zd|RtUOvC@h+;_)g{qKKkUq&G#CF8PFMpn_FD|-`VB_vTsDM|_DA~P#wWhFD&rIa!< zqU=aZ5uqp%S@-i(-*wLK{O;d<|8qZXkMlU+^XSyK>-v1&<Mn#Jp2KLn?vZdk;0TXy znA7;gh~Q_(j^5|bCBR(ntr~EJeFE8KC-nf+?&L~DZo%fj<Lp_4{V);qAv_mh7Yfas z<o}+v>T?yJ5y{M0?l!MWaT|lTd;#u}Q=dSvA`G?_bs=^^o%>_7hu`8(*wX<U#vPEg z@UAspI?P~CfVXon21S~DQW6&>3sXx_b-OtoIDXS~%ss$eLEEoP0t*fM(2q*3@LuGe z4bV;xnp_OXZ~8YPEAwJjpbCTocWr8e1YvV$TC}`3G9lqU0DCmkQLpy=V@>v#(q@`$ zNZoO#FTANDveTcTs*BTyC$Rroz6Fj_kRUdE_v526lMljs&wE}IbJJxz_CFS9{sHq7 zSW)1mW6}!+>ZnjQbJk7+(P&J!bJEj&Yd1~qKMaOGh~1bfh&c<fD+PcZ>(q;|C~2hG z#C^aU2Yms5h3#s}wy5n1N7FFlx(3fG%<`^j1GXE$F{A#_mN&484J9(6ItCXuD~oh~ z0F`fuYC6#EVv{`FiSP<!zjK#MiL^CN8>rBl%M-AvZ_vZs_#cMcH>`fMTkQw8TSxmS zEZcAqXJL7{d{`ZpVU)ssHm}lEIV&=5{gc4jab0yzHJXxYVr~vlDXzM&J~}@yU1&4q zFBkBr#6i=Ujqk%N<e2$9oGvwn=*@g1V_(~s$;iqkC}3<C?I6Cl63?<bxES`Gpr~dC zXOzQ!5#<Cx(4_4r`TpI~SZOQFu^)vgKcr3Oyn+H06dFo>bF&!0g6!h<SGWdr92<}S zlZi<DZzaUe`Fp|5s=#<X6GieZX+7W+mfil#f)oC75dQPe#Me@v|M|cF_-D%3$N055 z^(>vFe>ZE!?`XXAUwo(kpEEoEU-D3In=;H384X_#0gBa$4h6hGSDcE5u_L2x7-I|x z9A)T_bds36d+btIuo=)divH^Z^|FGKdTgx?%2OzDFd}?NSoaqZRR_?U_wQ|Bks?}Z zdNo7@D;9<=fNeGBCsw8WBJ$wB#Sh4r=nI@FlRdsirQ=c&9gY1-uaI2J4?chULE~EP zVv3N8)5gNUgc&Mn5LZF8fGFj?cScEx3@9_dU@>5TCzkT;I(PM#4nXNHE{ZPz_yKI3 z`}rM$sSJ~|sBa1%S%_~F79NE7%R>CX-Fd)`Br-lF7$n)BKwtsw0ggr0Nb&pD4ss)M zBQWWq$mkyV{^j*7nlE^0;C_*zWMNJRFkS(iHhgozMMn~<g!O>nactwSL0jzn_F+<F zBwwi!(s|Iz{^bnaPse{-wfiJ*w27ai5NU*?p}h=5tN}OUtI)OLPlF?Z5vTH<Fs>b4 zjg6vPw|>O{GOZWKCq~<Zi~)0XR2>0cr=iD%7~DfoX)E5+Ed*;ha-Q5^xDkgDO1^3- zq0QR3w2_}hQ0@DwRwQOYSr11Vdl2bCe*OGXwpC6IJzhNy+{VVB2HTj}*s-4CK^&i= z^4c^qdrx%oGr~1C&*RParQb+nJcQwKe?K1lenUgd{$0WN%0A;ynKq_Kxk_!5zt!Ts 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�(!Q3Q2Fs#pG@<S=?_L%JQwaH) zTvuh4x#p0UOp;yR)r>AhRh$?2=H^ZHyu6cSkyGwcSjN75^{PUov^0}#!Y6mV;sJqy zb00lwZ5>?#ry5M8i>!7d3+Rf9czPrFM0|*d3NeP*pX^A5JO^F7zH&SG#}%*UNnl># zL!g8lVT6y^x9{DnSAF_#K1)ln<n93KP;F7gA(#73t1|3-Em3zcsHjZo=>AEiswgHK zua4)Jo)$)EUAE7<0*rB^>pLKxd6&F4tX}QG3W1;SMfe2{!}S3YP(L8PgJ(qSU!M_G z1t^>dIoJxi*FL&_-2oSPxJM|xa=TuipW*hU{8|<p`d2kIQ*Jw#K7M@r$k>lx-i~Zs zWMOgp&XKIswke*kZa;Ak35#Jh0`d)m@rJy-dHn~xr0NTXs`D$T9{18>G8*XJY2%Nt znnrJae$Sd<B-43-p8Ml7F(AV<I3y*G-M~z>ZqJ_0u;jTGiEb>Zd1@Le8WKA2lx<3P z{mwtR41@ZPT%WhQhE{gmh7Wp1H(y-2fYa%*$%E;tvQ0a7)j#L<vZG|c`jAaaY%LAu zTMG8~|L~=HG%Zb9eqv_K`V!TyzD1GaevmQEY2*u)7Mu)xWmYbE6xe9PLP+Z)OQJ8e z>lmRpt<01!OMhU9C}l*qt^9EAsgoziZEorm`jM3T3Xif@FN;YM&(pgFzTTWdY?$v} zOaWS$0!@CkfYoY6oZWd){$7t1A6ld5TqNgP#LC7`iORz*5t+8(*C#Zs`NVx57<gKB zt!R-WLPL*zkUqBxCMJrcoYsL_4ig#OFIs=@iK(lA1+&rrRGBNeF5b9#j>YdQ`_EVG z<1nh<6kkiy!do7nTiVOlvbCk`TTPXLFM#Gm2?n{ixaP9BlG_#yiWxOELm~NUXpX)4 zCG{!DgS;;kM&%4GMa9tk4QEqdn0e)_?Bmtia=Cg^jHRCxs8P<qtREl79-fgujMfYU z_zfc+{SwIVnDy`cq&7A;opX%1u(DP8{gH)+Z9EdaYB5+^TUUM!cy<#L=rNVc`RhyE z;SU}v9FJja(?{7a%FcVl3WgN|^)T7t7Quyj#>SwBkRnaSEqKueqbm}c$93jdOcH5y z7;$6j?0M12e}BQzGOu1aNys}~v9T``k*|LHc0xxRTib-hL}O1ZF6G3oh9-NCw?B3H zZEfwYiAM?g&YvAbUt8%vw<8xtao@NelS=2o7+AbGj;68t>)ogVDI;zkisL9#t_pLN z4zH(n&)zE9V701NFqq~sZDDsNRE;KUSQxBU1mr63%7^3E`vZw$2-3dQUPERUvfP(1 z<6>j?u2}B8yEm0RjT=F{%22R0r<i|dpriXJ8T2%K_L(U=79JF2)l%?IQqP@>lW<zJ zXgCLki3Sr$b``%}<a`>{Ll>Pi*nHJKpJ8duEANL3A<<$4Sg~r9Kto8Hl(wum-p5k) z_MJN@>0{R3@R_bNIkxR|K-L*EJ~JG!6;hMkT}^ifOH5ZwE9Pb?XRms5(c#C7@LKxp z+B@Rhxe@ahD(dQfrGmO2gQf;Ny6N+qnA4{bV+t%n#*DpJoR=&aN$be01#SvnU~1#G zqfK?8-`X!uw&!Er7P;qio7cnal69`Y+<57h!4zJLV<{{bTa7z~g@Hjq0s$b`(&Aj$ z;q#7Hd&P}jf2$VFi}dmRDFZF#OAP~H{^Qz2a{$M#x2){<cTa}D3TB^iACEo?F0-!n z%)|CQiHl(W4@yU>^Y4lbFmht-bo(*2lR8*e*!C~_H7O~zyw-1pLMpd;F}O|Iz27R1 z_4u~t^qAphd^58-rdjNH!jib;J(EspBq;S#%Ls`cBJKa^!2=-r6Ujp(N3YpodvD*E z4TTpyMMMHmrl&)6BO0u7@PiX4%zTS{JG5~~iKq<d*TrK;m!Yzh;6WL|(xwEe*G##} z0}L06Pr*&>74y%ejV&jW-<`z>FT5ak>DV6rob-tjprs1F^sJAU>F&%9&U`g^b91Qh z6b&Br1?GkG%9X8!Bg+H}mFKhf9s<}gklXui^XPteIB{_k2vpR-qwS$@sM5<t(R<=i z1!Hy1W5?YaIIoYr=(;$w2@@7UqXWY+kl6gQak^6XjP&%zA3vh-5{At&s?#553yogr z;l7K`KEZ2j0A?8Y>o$$J{X^l2@vM3C1S@hqk7-8t`sMG^R90RLyupa8)`9$s_3t8r zf~N7g3{Hj4ujLW%<v$L6ssPtBV~x2DtqP5Zlo9Qhd+i4NxlsT~OSI!Y=l`MoVvq3@ zW(6uFzm?ycnoikeSSfXfp2rM+?dj7^v@IbQVtxrUVrvVlO-9)MR%clL*VP#l@?CNS zbq3wPj-+e9A8lsF^iLxP_RjtLY!q~v?AXj=D9&iv^!9XC#6-HYvv_oJVL&&@S8uqL z^L=LhmoK1qiTn54KnJ6rql|3X(#E3MYC*B8{LG*SZAJ(L`ze)tEH95V@v#50QJ7o~ zFl=g_Wuf5sqQ$ax>xy@0t!ySM&XSoCA{l09YT2tc=hJu3*;&oqjDS@0tg}iomOgyh zR>XM*pgUf@Ierx^mpy+r=4VmSx8|)ZYoR#MU>pn$&2~s}+<bY$P9iW|)6!Z#)<2}# z%zT)VvuS;<iR%tqri;(%?}35fL<kn^`H@C1Cht5@aBJgJ@Jc%WHE!d(_hpLUtWZ1d z-kmG~5Zm%}W!4C7ZG}_QD))sRbr5dXT^7yfd55TDG}mZZAfOd~=zI>gB{ySOqz$Zx zDEwTF{O-PH?KgVZuvJ*_G1x_Lkg_8L0)N-}7U!TUV+sQO>EnZ>M?m`~6JAVG>-@!P z)(KEGrZxPz&Tz_}W%9EGpILB60hF!&wBBORxrQ$bA>2?+gbzq*XNY~<qi^t>qf9^; z9?4GyGNutrPal=P*W%zY{t=R&qOXwCrm4xD-UQ0MbH|R#c{lsM1H;7As;x^ezz9Mv zCJuZ?6C@zGneMAO#vu!()dPQb@#&W?na^rFAZR2UTEJ?;JNG<(Ou7cFE`+q6;_Eo? z(D>jC32<5e<-l(HLD9p*N7B&q7htdebF;HR&ndW+!g=`{jo-KU7mfd98gKcFvrB?( zHSpGZ4UALYaTr=Wh$&IbC=i@U={<Dlkh$4zS9Oojbwfl%iZnc37U|0kEj274xEn)H zJSI?V062pVpJO;<c>_hJTS1&9UJvp{3CE95ayu5X+G`v%53bwq$j=BQ(DQDwV_qK+ zp<`CtC&~NBFSU_B<;vb(AH@kzWv40}dt0E!F_*)cA$!)u8{vrE`>tPxzR4S}-uInz zb>UVsx0s({?M57(>S<`Wg{YO!7hog0EL*nQ-pKUOC8v4gMMNH4U)m_|J5gaeRT1tv z4y<?e+cQ70D_x-=><BrdUq9Xblou3rv#P%CQ#wx%k5|a$xf}!IqfL;rQH)VQVefwV z*t!`!m<D9Eh-a7(t%D!Hb#qnHwKOq!+jpY6dMD#ezu|ePI_>ckFjfe*RQ*{KKd^72 zl;CN-@pA&*{q4x+Z9Kkc(S{EF*3htw`P8wx=TGOAW@fjd4cj(1-`L@+k!y+`SF*!w zi(R{Z7379=jCDq`21#>aF2#J@by%l*y9`Rmm!)#7HxoaO=Uy)UCaSu-;3Wg$g=_ju zhRlR~!Lk8AY$q;`${W9|tFUVqR^Pf|uqz%UcKGm5tn7HpFJb#m@y0N-@6V1=cON}` zc>K;Nmu@1p#d|wVxVSymkT;<?sR!B%tFpux+Y`=7?Xq=7I#b>`!YV70^6%Uk?^Z2A zzx-mpc5e#1<K_sYW|$uHbjgk0Y(m~;9}R<=z;>m>yG%CURGj!VM@fDcV3-oW11&w< zWkZS4W5<RXX}j!Mm1Xt6s&zU1AG9vp|C83`kB8)6wJ!Cqf_OtYIV=l|<)nlwaLm{f zC#xIQ4~h0qjNNvue|I_A=j|PywOD`FE~&roP;6TN-SZEzOOqP}xi%J)MmVIn1J*Y_ zc?-G@mk+{$K%WX`{x;Dcw?j(URI~f(0yC;<T!GTmt4?R>qwv%n1IIk#TbShXW3i`F znjR6~C9^yfg((qCz_({x!;>ZGlbQ9B<Kssz%G*ulGi@IoX!+vn&ab`JRvigT9n<Fz zt&7oj^$xBRkGKb$?9<FeRmUt!q>lRmt<q;B-Zr!mN!SnX@L7i8n%CkdZByPcqgh!E z;Ik~Jjxq`j8t~m%z~#%*y9wm?q*;nLcGtguko1~C9*=e2?^e5;nrcmJzq|QnwWfp3 zp($fUa*P<Kt6PRuR+7~@2azmN7#L&sSjJ#^Rp#AVcz0!|D=il3>(pOSUg0KjyqZ3Y zoeOe9jq9iXA}jdech1UpHn%J*0qGyb2jLP}Cf5G$+;g?zz+KO><a~*g4hs&}Vj~2B zbM4!Q51wSSuFQJhd)!9pn&)deNp`$x{vpv`_mHqNqP@(?%L6)Ow=p8!&YjMj>}A{= zz@l-h%FfOPu~u$NBn6wdiN?mfYLH*za~4n}gax7~d>FPoI9Q?dfG`D2i+I)2j*vPx zM+=MHpBD?mZufJ`S+TS9U{Q$kJ#JEbjb2smlPrO|O#P)w_Ffy9Txf#MyFS<@?F2^@ z>X0jyV|gdD0r3EGV3b5wl0%j6Sgth@YB%kTgM)B_c68~l_C1%LpS)-KpW*O7==CwH zR#m7iW;l^0Wr{zB$OuP5!ON;_kl7nvA~GfP=6oBPYR)1<hI{qRZjg?;>;%0yOyPia z3WdD|a!G7W`&_GBhZKTV4QBXL`~;F&YSX>rv$fKX#CbV}=BMmW8t=YwBZf$LJ1s$1 zQJlL11~LRqlw{CZnOQx>4j-M-?YZpaeue*{p;4USG0kG82Zn1Q8<W~(zw%>UG-kwz zp7NZP6P{;OkWmR3@6x4D6RigoM-eQHSTxqVW5|HAoU^-gW>^AeNf}|Gq$mo55w+!> z^p{AwE~>8234W(Cqs?t~$Q&p<?_R&IFnDlHly^&T7XpG>AdOy3Pv1Lc-=ve(Cp2ZF zJB6)XRWd<z_Vf0izD8XPhtnNeA?xtal;u1LR`~uaLzdwi&~VYl9#fqe_O6fTkrM5% zZFkY$t%dA<=8UD=^gw_Kh9oG46;2PywjDF3iDgo(>_!F$-g>5tQG7sahpR6?%peJ= z&DB-Vm@@Juj@2w2kT|``;YO`y_kFsWr7GQ8Z>g%OIgsO}YR93VULxetX!dCnD$&!~ zJHgw~+&X`@>AibJPBGW+nCIIS<<)JE>hh<kC(a?{*NvFq+nBVoAZFdtW3VG`A0D0k zXv6N4C*Sh~<8SpXKU9dF47t8@$BNF9V;`RgtAN4Db%K9pp4K8yHb&c9clF)NF>L*G z_e*)X$HIl)grSjhwc^Fkw>%1dCUk^=`~Y6HAN5y2pyj$ecm6!C*-v-`=$rf&P@t$E z0fB*dhJ7oF*+%b6votSFwcQ4-R5#!I1imU}1mCDKU0HJPo}om&yPiV<mK$E>SMArY zf8N@-=+U)p3mHMZ>f{#EeKBG8i^ilhKV)&&0ZQ&0_q4n{-Bv&efVOf2!Vy=pC>lOA z;q(FRLCMb~$6rcM2jmoFQ1Zw-gp34OX!JcHTRq&}({RRDP^jbrWi3kI{T!0-f&~kV zj6}PfLAa!~C=W}@fqL$OC)ll9t~8q=L$}XQaoCPo90FmsYPgxafBzm>g%GP@WJfUi z*Zd)Ds@OO<A7zu@d6J07jM)fni>9`*a_pB)JL-IGev6teUv8$gLRVt?^TBUr6VNPw zEH!exyo2Q{ISfk$brV#1BojFkyr3I&l#nnnH6;R0;4|0PKVhOl=Ox5t_gjG60Tv$u zNVoOt&j$zJBd|v>@FIU2oOfOy2nc{5*y+KW!;FTW<vF#(=na2=ln-zne}fSoQocJa zFsGRv2y0bG`ULlVLTV@kY)TFl&z4;BO`CcQt+&xY&2bX3jL;8wHm;g7C6Gu=)Oytc z*Ie!=i{JqI^5sktx#s2f9QCl%+X>9WTvCDd4@@_H8a-q^2tAT9X0SH1O!S&!RcB7z zkXPX>ScOBxF`hJOe)_5yegYy(q<3Iic!_8SiwI@o+M{p&;_Vha?q@3S7}v(@e_9YY zWx|9i$h5Syc-B8lT`ZaM{QC8y{5+bs<#pfAC{gHqrRL{K$d{mDBEGr!&^9nSR;29C zXq}wfCM2o;Qb+YT@rOF<<6qTL76-KBcw9p^B#&ILJZpKr$abLv7|{J@?f8fbttFRt zC;t)zo}H?us+xci5|=n2)IKg&Zuj-r{ZnF5&4`=N{H=!C-RyJSxxFSE$&E5p`7D0Z z#^qKV&c^t|02$R|6X0jI6TOB9UhJbe(Sg>_;~I>wPBX0d<X7mlCc|!2H)+M^s+&_5 zeUbUy8u%@7ec3b{=zQJJDDhdBVgfC{f8F_6a?Y3nwbAN>$Mh-HxLKRIFJEkVr^2^u zqwicnTn+k2AgRB7S;y*Av%|ZJ7-%u1fk7=EFkh+r_MO;i)utsTc8I!rIyo6?hvNPM zu-$HZ-e294#eL`M<YY5z*3Pn<Q+EwgS6})fGwQo1-*q+Gf)!Rc>`m%uV`YT{x$C%b zm%+CQ#L2+RT&X*bHKlV7gpcymG1=vx(Z9!<LuvI5FK-rvD=J?=s)20k@VHHPSdtXH zM1o|xA)V|Hb(>^F-tc7CnVNRE5;u61`xQGeF=@qbB^Y;~Hc>*jHBo{y!*v83!lbJ- zurGI49Z=@adM;bY4tBWr(^$XIhG4>nb0?~`wd*H}w7<tP=*N5l2s2=PRxR@UABeYh zR+oId8LWtRFDMdZ{$1O)LleH7nTa7dbI9|HI2Sy-w1M<Li3<{hi(H0+PAdkNzHZwm zaJZAeiXFcKdSj-61Pm=^+>k&@4S9znl$FK2GrgKO!T?}d;?n0FrIl`e)2CORTLiKM z$NFMM28@l0qyfmQgm#1d53{EKk{&%x!f5w{g6{Hsa1aN--M+8W{o50PJ$^6Png3Xc zKV@jGYTvkTwD7coWZ{kd6=VU%n5oTFfpp5>#yo0D!^5t-tc=$#>Gw+$B}y$(9@0Fr z*njX8dwXvh9|?Iv48Q^~Ge;E6>tODftlgViKButoBx7Ua@y=pfJG2umE-iqHo~kln z22^B4P0jZ>yTEv+qz_V2s=GA@witWsV~rQ#e^DzTqC^oLZ~?^5^z{+<kISY{@3!1$ z(yhVEpQx?R=@6^3uVSjHBRnIsAD~%szJ3p_P;iPH-DFelwg_QwZAhCbla%}S3zcsZ za&NPo_<Q}MZx<(2#plL`@^jeUU!9hw=!-D>2PiCk-OV`?^R^4hf)RUA7Vx-YJ0rLs zprKkl*v8ykGUx~(fRqubT2NvXf>kv&1O2XXUXivSuBMoaZt;=U7cTwJjJOJdX%uY@ ztZY1r88G?Ca2GxKA$CMp>A;YSdA0Vq?Sk(pL?#}A7ze0@*z%WW)HnFHQ|BBH8C@z7 zw#+-$+i=l|aq5X<d8&0Ddkj7xS=#&Hy&5_7A4oU6as3)FVCu5qk-y=@DHa+s-ajME z`*Yt<a!Yw5j#Pjz>-OcJzBh)gl86D3{^@9POxF;q8lP~<LRhG`W6PFUS^A9re%uRo z0RzXtzI_8e4u(eq9?y~^v|sf?Q&ZEN%%MiSXia(f7_b|z5r}*eF}&SyAuv@Y;ke(V z2DL*wceXcrgEDU4;ivi#+4c>#hOH|^koFF*cGrtMa-{#ELfv7*-Vpf46p5ui=z-w- z*|8&yDn2_j-<ysqe)}Z=yMi=0wD*h<BhMXDy`<~b=AuvYA8QEnfSV%<OIBL9GU(y* z6J5JR>Ups5eVXPn;nHa$oh!Q!Gg2Kf;#_+AW3o@BHHai}Q&E(cUx;Fku!_BzPsfcP zPf*&uXU`5tG|iNo$yt<$fdY5)qQ)J)LJNW81PekU2H@u8?6WFk#vGLP$rn^Kf>SG3 zB?LjF4>xa0jJ#hAw-StL>KMrc^RTAf$5ajSl{+4KmqS+Sk?N|G$lJgV_V(L{q(+h1 zgNO||-?i)3fqw`NOe6#$qb(hry#N@DB}nMA?!9_FO0dp)jLrlchS?nT{uE!SLxlrI zxX$3Jz=0sQWN1L{oU=}y!wa6LENcJadc~^8%hpes(s{7b3r2G1wmS0%U_A4^Tln@8 zU+pJ@9qhE6)iu59B(vHi88&)`TSVSc&#+T&dvG^44k{Bwm5%)|=v3;Rll*Z%Qb&~| z{1{PTiM1;zh+^(Rf#A0Vv*|g+`>#5QIV=fLgdMc^`o5S9D83*IhueEGr^s)Gr2yn+ z>NSr_0UW{+ioG^yi|$k(DQz7cXnagWckbSWP6uXsp71G}Qjkdho+m`aW(S7!xlwD6 z#R$5b9N;3hSa{NLDdU#y39}oR4XOf^ul;r^2Zaa4MR-tp%y73UUa#|8@pxOf{@$#O zzBxYcr5pYTEU%|M%T`<Y;o!ROA|i9tWC9-0A|l2{sL*AnVt0Sq*z+r%Z<X5kS=G4a zjo~N7vXayI3-8#G2T!MdSQq)VG`@5)>@y%G&d^r!+GuJ8<C+r-ie6vxk)0YUc{k#M zDDOugxN_(kjDXl#T>{pHXrY$J66repcvu=*5AUU>rR4;;I`AOj(RA&shC~cTTg<*? z+1ZOYViNLw`yOJS2C{8B_0DvpJ$g3(PA}$l17z<nda<JNgQJy-rwu}|X;!w&FG!_L zxOk23NWBMJ+J|?H?>MW&&nr60_iyJw<$-29=faBj)zxVWvv&YvwZOg$NqRGE^uvxN zJNd3kN=gjTcWBA500C|7JYOG6h|u}pw_Kc&cz4tevB!>soF+}mqaEvJq#;vKRCI>d z4$rOb+qbB(8-{3&zLq(fWz<2O*z2{_)LgMnD7Mz<v<)9WAq&PWAX#?f1Fm%8d4u=3 zx+fq>6cco^y|yo+XV|ecDc#o`;2}bC(zG^vE(7y_INsyK2isui5?ej^^lu%R%CV3x zdn)!C*nGQorfuB&ON(=-1(*&}9(SIN>`brP@cdKP9vRGoLE1@W+kW2qF=NNFJ#(l3 z=Peidv&|Kt)2SbB%po2q>aKl;TU_!(gDs=7pa%!#I>6#y$(`#iIe(ABs8OR76ht3B zh*wUUZdGO5tlmzLHinY1riI8(K`*>O;J`v;?WJLR2G4e}uO@wCwBHAP9_qZc<6X1T zJ(KcPW^7@=E80D^{jPV5xJlV*&>G|n?d7rNQF1|hks>SFsr&KS0lUV-160x1k1BXM zX4GS%4Atc2r#FnKE`KXuRx)(H)k@m>M$wThI}WXtowIS?%AaQ>y!z`Hsg4;_diU;1 zw22dtn(4W(Ld(aQ_1msRH)o<0a%EXy`#pi59gBfaX=63J`?Fw2nPc)PoLvGYTkBvy zT4x=b6lf$7Y_sY39zzfJ%a)Z_OxSz+7SRitUL!=IKH)kJ=HOtUrpbwk9#9yN_OeL! zIy+Kx#~P8&SG2ZoeAy<~DlR^LP<Q_X`=X=QJp%ZVm92JHJV&dj2nY!S(40(nt!}?d zF0pT|c&9O9vN4fGBf$7l|FoZJtbN>sxhG1N^vf1qmfGViiZ=JAj`Grd`)=Z60nj=< z=iDya$Dtl;coNVt1xXQqG7~Nt{So)q+9AEg@xl%9e3zV0*sG8a$J&_fEqFu2uQbGx zS)ok&`XFwsZ7N?Y7-46_b=qT!)|R`k6@7VkPzn6oLMs~v6DOsmO^3*+g1dKT$rW_! zF&JUvuLHT>#K&~Qz)n?59&aev6(tio)$F2KRd`PML(_#8>;KS^FCHeFMuQA|KX%L* zkp7+76|u*U0|5!RE@ig!l|gQQO2*QUO@A>eYbuB_*E(x9h4V1A@rhZAdINHL$T5{7 zxxbXu>gC;;XUSh>4KWOpd1z8UH8&J@Q+w6|*YIHUiL)W5laE>SIAJ@)d6Dyw__lx5 zpc$t81`^YRi65$GE${Qw^RHM-0Aa(@2B*nduW6RD>9gUQK{rZH6Y9d}3FhX%MfBCX zchAl(odw%He@PqW4^#UaE35WqrXC=P5KD(Xec1gy1~UD~jzdYQ-RUSkXN2yWmyavY zKXUkcVTp!JK*3AxPIhzV>?(_Y91Z`5mGSo<Kb}5$!qvTuxfmJ{kMM#4+d^zL_Tw5J z(mSEz`sc4-_kSs>U^r;sskfAj443tI&ucUAk6PP!Fw!9rTT2`m;5~NC>N;s5O#xeb z2Jw)-xYvl)ZnIR)dGv-2(|r~yXz>KGDd>sX;F-II?~$K*B%&jV0%NoWtQaCA=i|z4 zSJ;h=Ja<}dib^DC8;)R(?*kT|Ilh5EiAx@Abu^_TM_$1G*z)#!65~AcLzF3dgs#c2 ztK%=8O-Z>|RJ7O5TVO8G)HT*^G4(kf|F~PY(sSQi<}Y>`o=D@0fJ#mH>4oGG=V> zl_F29EHOJ(8q&th%C!CDu}YR9u9KxZce(34c5uzQ;=c&jbY2SnOcl|}%-izvZCayl zR6#O}jf)#GstkNX$+sv-h?WY{uheYRCBFc>p9m%?jPGytef=mgA>j?2z(gLNXMWxj zRXqys%<?Ny-MobfwUgN)`HX`(RB1>|AfOp5X2luovP}89v$9v3&f+^}D*XemPf5_u zhz_hM(C;7NSa$7N3_K*ft4G${=#~A)>00KH(g^!%?ga-(mvwOqhIg&4s@f)13Jmh1 zb$is-TyN#_5#q{E9zT}z#joDHbiS=^I#U*;Wjv-xBg?F3!jXspVzSYW<!NU(XQ{fZ zF87}M_1$Z?&E!lzdDohMOgk&D{-1ShFSHPxp|Hi)$wI^3FMP>6uD5L!qx<b4F$y<K zfW@hujx$6hq3PItJ@LA_dDTp<LqZ^3)ZHbGX=x`UwlnGVVrk6;u>b4x+ZJYFMdh+L z_KFTVexlr?Tjepk!r)j;4)7oW5STq^kKMo1wsrX@ZQEt1MmipxdIa)}gJgICkI-gD z!c+QbZ4O3WpL|&Exv!eRDdA`Uelv!CsjG8d)f27BQy#h3@aKs<Ik4Dc>1i`Fan%V7 zM_=|Dn7Vz@R)TTfZr9XX|0-=O;FwI>Vp#BZX<MJ4Z$bP(o6jnh$6tU|4OhZ(T#Rx5 z*N<wbR{grP&kFMK`O&2&%(%@6t7D(V_B@z7Om#V`H-Fj#9H^3$EoLq@*=4!q>&~XX z9|(sj2_eFPkks$r+sPYLSwc7xgZKUhH`_gXC1GG~)v$Zfm@i3eKzRO`Hfq)xGchoq zaCHpvSY60=pH9E=pS5k5TjijToj<?7_bRRzS$Uo1r8@cYH$iIJi5kwBksXv!6{c2i zZT;_LZCB+d?2z+C#TaXGZ+QH%V?9U@1}}u!m>-{BXDw!EXc+r?R^5mxs5fAa*xL`C zy(47k#ObLz(#KYvsJnii+PJc$U=`+q#RX?^Ahxl#9zJ?>M!s2xP55y#g@gLQQd~SQ zJ}+XQ+Lzxa#OyC3H^_n79)}c7X@Ao7*tMEYKhbI1h!nPVkRF&ngseWy5>g*_Cf?vF zmpLDYXxp}ZJ$rZ2zom<9i$ejg^q&-MzG^7i<YvzKMeT<sfu5Ac7siOXECY?;DbugZ zYdCW^MoNq{`~`q5#vuy;Ox53XsG?+cg>2~5TPy_KzCOYrpNEcm6}s-xR$Nf#oEhr+ zuD!I}$LQSRV!<1Lu7OBxIo&RlINTi@TUqxU{F?RZ&XE8qY{w$$F)7Qkc^!zS%5|v6 zU(7G^CNHe8P;=0r_79EXuf|SqD$c9b?E6dZHnC=`J-s{<0>5udQ7ci7u@VWZ7~-rL zyWHDkQ*4Xa$&j;FZb24o#HJ)TzK#pAQ}tFh40P@hghS~=zOAydaTBfWuQ4FH`-wRx z+K61W1kj{LT(@6xv0R9G2rp<x(HGaM)ZJguu(Ft<J?^&B?B?CO`l~B*m;h*t*xGIz z>b&CV`M`+8D}Xz|%K{xQDr%*(^C;4Fn3Wxt3z1Za#U9dk@h(w9PbDWKAfP?ITTnoR z@2qWuEzlno6s*DY9?YCkgJvusz??sAsy>jYIYy8TZy%zPX#}4UIB1v7vgr{#u=q6y z(yXHmRU7SF{QrOD+5zz+dLG3uUXZtajj0h!^(gH)v(0&0u~+>Q2|g7j<MLL5D)2(d zy>)9>#F3B-qZM#$Nk_{ChYJL+*MI>-)H|ncMHvU>@}RUkV~LvQ1D)*vWK#~0N&!Ts zXYMRsgd-S%8$mY&`@0&k6bboE?sR1#hxLq}me#$}QURz3Km#qzx#rwfHSgIoPqsd> zfdEoBHf*xocQSMG;e|cSE?duTKf@+B`c&FuYB|m^<*#0?XNaNiV1!A1@{VVYpkAX{ zvsijeX#CKz#5v6F)F0Rr<uzYgyJoTD!clsQicSBsnr&UL*xwJ&a`fc6jzyIf71N<S z6YaL)<A<uMV=*yWD_`hUPElr3M$Ky|!OyPjDIF2Lrw7+x=6?{RnFd|*QBn!CQVe`x zxGg&EK=g|44Du)nDc`Kv$n)Yoq%{$+TU4O^1PfZK=wGyME>8#Mk1KB3YLh>E@X7%$ zXAOXr?`}6crIa8Un$x5G)<P$9{RZ>jtc(Qs1+727pFMtDrKZJ2#9&dv>C?SBZVyp6 zyA@DVavDn4x^-VzkoEofmb($q;AK_S1iKwA6*~vAsN~<b+c(YS5+`0czwZ&?oXWRv z&GocH!ox2>oyvb9I0b>pkzMPCs%@1GAXGEl9q11uBX&?>p(Wr$cOBTOpg<C*_s9Xg zdy`dZCxip-WqZ-FbLZS|57|K&p31*-^X5(VghU1VI3&(|i9>8<PZJ6t{R*pLg5P@( z<hXfBA;MH1bWu^!t=qQM%fwi+|6cb~kVLS)n)d7KbJ<)8#t8w>4WSuuNJRLm-~9PL zohwlAyZ7(A8PUnGVL35nF6wxcwjl9{*X#H5D|6O9K2Dji@npmC6h;%k-}d6-n5c}$ z3#-B^Zd_IGkZ(CN$V9(~OMQJS+*3Fr4C4c3WH6ZBq~yIuNmEBB&AYXQn+Q}(RYPN+ zdIWsF`AffHi?{S(Vi}kvMF%I>9&3D+=$Gl>B;<=FHw~*CbPK?R3taeR?uPIj@b1BJ z-X~$&*Psn<p8yK60vb5zxYyz^;c4*bu}gYPbZ47RwPpc`$&f%}&@(M!*p^YU#tQei z>M*zUyHqm$*i5$!GjSc+nd^jgtFl(jrM@|<-1A~XJ9h2*=-#~py36}`)vN^S6bw;@ z-w(XJv}h}><8KBMJT4wGA0bu^C#$D)+_W2hSwbxK+9}w7d^%!vqr(}lJYcEOa&lMm z^E=41F;64VJpICsKG~BJweo5WWPnynrc_c)SyvnX91lKonNN)i*Y849<<ka}q4VPm z`pO?&>W!xDhvXdPC2@c1HBVd&iI(Zq<Mgp(RR}Oyfq}e>SH;|%cXr4?kr~Ew=U&Rp z)EhqhJ`QuZ^Qic=aaQ7bW`hU5&4(9zuDSZU+p1N2zg)oJMA<t3rJGRa=g$4XM^=-& zfGJHlElEje6DHa<4Z`Og?HZ?n<)!1Ovq$MM;ZV$(V^%NPiO4o5C*Ui}{MBl)-htKs zN!aG|NK%;u5=gAOjBLzZFjqj(ivcmx87xq8KP0o{J%^ndr#rb%ZpA8iZepT_Jdn({ z4{Rq?8_zpoac9&H=}}tbS)k$L$dk%^;)9!2*3ej;RZC}ESt%@SIi!2FS4i-yn^&(! z^KOEHlVWpfX<@XOHR`steAf5=P`4e~7aDq>dAb!rJJ*wSkmk%QOY6d%uPo9xi0+-n zZ%Vc2C9`}K_pac@?#gw@Q2F6f)vg`4CV+BA>GG>*rXTH})K(BEUX3-?VUE?-#!K;g zT}9iPJZs(=TuJD}_wU;`tZcBcZ@by=gG4vYXh@!+5#*QJVP^Cvs|P;ui=(>SdVOkf zcvt5q2;5Tr;5pdZ!OBNdJ$-tckIiDy!Dw<Jf*^4Neqs`?Q_t_Sp|+Rh*iB!PDP>+o zv8k!u=iJUicvuKu=kH3lqTUPkoH5=%DIi}$q}+T*yjRzLqoPa0e+$BX(aMiSHW^D) z<V!|e7m4mrE^EL2_2zD${_jL?h2jCZi1KdTHf|$=gM=OGs6W+i``i3Y?Y4EpT-}sE z#BR-<|Bcv9EaID3bcT;u)Gs04)$k;mHntc7xZ&A&=HmUoCo!ZMq)Co%D{`<~#6JsS z8qEaRnr4T&&k0!g=dWmufBEw$>z%qD|JN9X=qLXw@e&bn{<@%6@ag);uY=?MzyG#X z31i#Xp99OHDJ^fsc|&W^pvlh%yH-$#Y4rSB^|2h~L0=c2aNxfpte6wQAC9rKwYEO? z!Pn=s#G%4ht41NJyHN!_WS3=g$?3$z8t7AOzrIrSCr#NH`aYqaCkBgA96tm>PsYX2 zPu>R?UDLMs1YN4p^9ojffXs(F2W1vafk}_$1{Cq<9lk64p<#?RcHMI%^`gP-zw0nH zEdZTiM8U*jWKFTHo!X^wj^8hCA!%rk)e-w8jvei0{ofQTWO}z=Nm+!q(tYfE`tEKo zkACeN^C37Qrj!(H9aj(CN!N5`cer3EBxl5ZeDmSM{R$C*frWH>%&yF~+}x~z(Gj(+ zJPl=6^vjmUTX4ymE3(@c+mmRE(Q^+Z$A=H=p_L*23c3p`6tf+08T>FML}!GdtMUaV zGYq;Lz?InLggu+OT1MUUVjtEC@7}#*c0~Ooo@Er=+iD@+SU8A{<7NRmFcVi~t$G#2 z7TKO^>Uv1}9s^|teMMKZ2GxalcKIR#doXHeP5vSwDQPU7ICd3?0AE*E3k)mnsMw*U zPo4x07*|?Sk_KeLpcB$FY@vw9aGIJ8$farzYY!f|V{*THBetcDotf-VWHV<-_*ksq zgg1>PTy7<j4VVNl&rmbY7E35Kn>trJI@kG+Pjh?X;&<(5_^rQMg#{Wi59ljA(P-g` zhul5pI&n4n-1o78%oQO^<9(WLi%LgG_b<76Trd~DcwljHg6>Ts=un?=&!0YZ%0|xU z-^w6#(-lkY%K|srpbz_tY+{t;iCf#v%;syVrlPwaOIqV>dp&Xp=FcC{qW{HkMn2@? z2K3*+YdTt5q#STf3J2{XI!C@RlX4q%*y-E5(_5{xSm<D1Ugr6!kSp%N5wQ%68*tFf zZ^2;%LX-6v7<ad6SQbyQF|`^mUh7V1!S(EHbR5<!A0NlnD_hPw0oes`c$h<ugl`eG z4W=$VL{?TSq$m>Xg0g?DHQHCI!!0;8VyR5cY1X9h;c)W;=3jx;wjhC6Qckm{siDC< zMdvgmgY2r!oV3`$1g*Ocv!C!by<n>!>9ZuV_v{pOIU3N+qoWO!uSpr9s`^x4FZlTx zKV&XY`B*YE<p$Rrn=Y;?lbr{2Ttb3^x*8$#6`j_M;?I#u0)hE2;qP@kOmM-YHyF3N zvR%EVy?q%^H)11rpKKQ(;*f7RtHGvwsYpjhOx315EE&4)Nyx1!TNGa`7;bXOT3LP4 zwy=l!`7Sid@SITWGVu`nC?|!tO$*0SQbyw@^rm6s0%zs-J-v+zEi)~U?T1=g+eq$n z(p5mL5S$Zm`lzhTn^{4yfj2(PTNHaG?PTe6n}Y1>+oGKvY}Z=0J@kvg=CuF(^swXP zs>63M+=d%5bH2qvAII*<d_L0Ov0s9414zUA5SXFQ;gNAIU!Ff+5{Iz?t`aa!jvYIO zoZ<G_=o5AcvDFW@j`_ii`*2-b-y-Je`b>?#og=P6qZms$sb5!k@`q}l(_Or7-k=i! zP@*OC7`OJ+&61VCdXRt+MzYc(xZ=gT7s5sUju`bCmt1;bk~Zah8GP6eAeROW#+_yd z)1}t#+24Dc)R%9!-Snllr<Bw%`1Xj{;5r8A)VanMTMk_pcLI7+a`HQnJ$^)Pb}F!% zkoW|Jgm)^`(<bQGdYIo2*90QanMm_HeiACVS5u-uCmOyAa~Cw42`5jIT;g>0Nl4HD zp#ApV=Gq}DqXPWjq10y*`RA;P1{D>Amh2}a<VpT8H!omK=hfQ$jr-fZSA+N_2wPqC ze;Sk;Ln&LZKyK$J?~@M9bs#zjMsuMwo9&pMtV2av0(AM|!;sM%0_xo}dD)k#(a^|p z@@R`Gg0NVs+CIX>lV6cR+%C(j|Fm|b6*{p^Vo;{PXU@2cpAK^{5EF%hJ;^O41I6H( z=R5XW{i;yz{nP`G29}yVrCf1&vA*DkM?&U;nkVmwD>Fh^SYU!JEbm$DpoRlWW}lj< zYuKJ!Ni(wahL?dU2N9P!xTd60!@eg*4bH49D+T5o2(1eH=g8A81JtuoV)rm(S-j8p z17aqB7PViF>2c(){zGs@Y?ih^elzQM+D_YN5hT*tWuA^pN!FFVKa%YPNrOq#`!Kh~ zhRPY1ruj*d>%PK9(9_e4%{m8t9$Q?*7{f>V-TEjh5*>k^9}8ppDOb?)2mPWhOs`%S z|Ki09aupDlf^ilUBwZVpbN?I9eaY#)B_$=*pT0}CNw<TQcj|=p?U!zx(Wm86b(PQA z<1lNZHTmC3s2Cpl%w)5=uS4R|lifSre-@2hUNRU-djFwg$NpeDCn3+gmcQWFO)9UZ zc7h}!yfC>fQm+fz4OQteqehwRKN%1pY4nESxSK>fXw-7&-@bW+SCBFur|zqy7P-l& z```3pm(T7H?h^HPn-nZWmF<opy+J{t_y2D){8iqemEVj62!dgGxq<XSlBux7+cGOe zLtULp*&p=>Q3Bb22BmP35|omlu6d|%K4w2VvuCrC$0lBAzKwXdxtL)L1~4OgU61tG z|I$q9Qx{PkMI6wbceay|9}qO?d28kSv~8!vf2`P1fB$HInaWOTG8qk*#5F@U3P;pp z(!~D<n*aE0r9Wx=y*?cg&1uBV**Tz#>jG;*KloH|T2TVNrSTxA{Sees=G)k|MU!s+ zRScjKdOVHO`7v1tyad1%Bm);$-BOZ_y<`5}PSw5vivQ++qWJr3mu^e=$(1XjV_#VR zs%=KR7u+=Z7Z?^jAQE7s_wr?~(?}`P|9vLB@)ur3<-JZu&i|WS_~|D9GcLUG|2-Ez zQSv`=;Tv;~dp&~-@6`PjT_wi|lA`_jWe1XnF$WJGoCxyB?U^%)Wf?dTx_IBchYs~k zLFf1aH;vfIUb2z7YE-hZN)Ig6_D8TEW3lJE7dlzPwSyu%vonyU(X=8hGx28oj6qd! z%jn4)J$u~M?tXuC<H8SII)CO|=>E#NIOUak&`@mH>E5wsPw{t>lng+r0IPQLm{soX zjajWN2vLk`rTd%<NjmT7bMZHbUq1gSYwm{+zheJIekV&uyCLCk3ZW5tQ0bxbL;R(- zn%E~C{j24F#^uYGu`#A4sjR9B4GDqybDy8N%W9^;qDUP4NBO4h!H~*q$jx8^!5ixr zaTh+jeJ~;df^}K?>TMA*H;%YWpB{XDtXO9UH>WM)!MpzP(J+cxMRx`@jc|aJ&uzsm z6xOa^uRCIda06ml*!#o2rbica!VZV=3~}bTQdSdxS(Dh|j~D=>?;*2>dYm07B_$^l z;Q#V-M8Ap38-%e(M>*s5CdU5%*E26t=f^X?2%((Kvp^Lpt=u6V69s6b$`X!SMNjW1 zgMjpb+~I{RjN$(ZM3a-f+i}kzp=N-wDm&%3$g;(f|7tvWGEIT0OcjQ85WhhGyzuTS z^ZLP<w}w4UV_eK*$dVV=zu!n3fC%qh>A8TruTRgr^p*WZyk=+kGh73D?8aGFvWgI* zt5`TG57iNx4Ov-?w!FCn7|R52DAp?Mlm)NX)m4*_zA%(A8=w<GN5PtTRzvsm4v8cJ zKfq@7@iKug3SVy^>Gt#I56MW?T7Ix6S`O%bs0AP!Cr-fOHEkim;dCtEx!R65rGBmm z6R$|L(;H?iK{_X5eibF9Si!IUmD$wh%BNjv1v}k!2+Mx-22$LNklsHRq$PiQcC&AC z3X=G8<4n`8Epu#bKi58ZOLN(|B{jrx(V}fq3i~_Mg1*BSt|`2RH-YFDktGKNg@|=? zpJn1bv(Gr}Rnr__vw|Ft1z1J(>(K+LtKS;y{J$k&$WZ?icD74@w0`Ycy|r(o!VAU` zQ$!*+w3Qbvc+Jx`v@k%@?&<TNgKkK6=pZ}7b)Vx;>CGdJe_HHV;<v)qPqAyqjzV5C zpA;eQEY`4i;qjlcS~t-VZ>N$R!K<#cO;=ReLt2651_bR~d5UnoS8f?J3$cmzyIQ^l z^k2L=KO$<j&%}#wqQ!NU1&(N;#`0ro@0-571tFX$F(SRR^K#!tZHe)VA1^zfoa85M zl658SY;wq1Z6&3Na#Fy!Mq>{B;rhS5LAlj9=C2HJ^@|<*P4xKNBT*)hFV(yIvwiDk zgkpd`3lU6lR@r}nRIMM?cuOEv4@&AsaMjPB81Dir1wPs{9u^0aKNdgVvb*Xp!=yUp z8JX8vm=Cga;nXp0#&>x}tI5<5wr?Ly=Zp9*sjA}oR0ZZS(FY9?s};x-+Wv+;+e^kB zKfck!qubq$>sf@!$(7U0@{2Z#)<fbZEk2cCsmv9_{&&+boc<{d<J7;VVL1KAG>pb+ zLK;S=o!R&Zv3fw?_bzpD0dEkp<k)Q${;G6hcJefWNf4x975Wx|k}^F$h5V|Q{*GQ7 zN|l>iYV{*-4YT4$kJz4$GC~ai+3Obkl-%5xG<38w)5mN5nVm6ULP19rDG3wnGa%7e zv7FFsW6IsbT)^>NzhMJJ#j#q6KC^CM{ulxgH}?^~NEp-vM@F{bijbKLa5Uy)&ZZ?8 zu0gT0n(9(uLza`Pxa^006WM{COk+OpY~<%$AG_GmQO=j+tvpiKRXKi$Y>@_+%OY(h z1Bqr>Bh21qID5LZ*}>w&{Km((Zv$4&zDkmk0@4YW>0KoSR~MKXKXvqs-tb4bvX+>b z_=TL-TtJS}2+KzTIc5FTPawzwe?v}6s@EDO$+~oN0C)L)wBUXEsCD<pNMx0Wr;DIM z3ssp?S?^ANM?n%4SYCZ4LXVudG~<d~L*#59gX#Y`u=ZN+OAXaDGEtTOP<pQ5$&&+x zPM|jZ*gSA<Eh@uXz62(IO<s%pGy)UWYshR2<m8&e{s>pHyi%RjFEw=<Tin;HMpaZ) z<j8n*Ju3PuO5<RNr*#%3o!vuFU|{aY&V~Oo9<|a7+1*lO{yR+SX}1$9CL-G~A3xZ< z+cq;Rzn#|ZpLe(XXcW>${M&E)R~q#U>bPt+922b8+0#3J6BsadqLU<e0NJy#o!h&W z+raG3R(PRggn#DocYo0<ASj4DG@X$nSrwr^V1I7p%srAiBw+Zo;XU|p<4Hj=dczSH zXs%rq%pHC?$TvQD17;1f3hJ^1$vfBi{x16|-%(LP_TSWH0_p=y>M!cx@c<!{_T=7! z2Lj>c>pNMmnl5=iHEgWFwdn4RJd;nK)?ZaF;!;wer^N;aoWnq(rnYv@?Ae&@4yOfC zQu0l+-f<1M0oL1~4CNt1PEC*ZN?}B2%49MW?nFV!FwV6kfer}f5?*#P0q2MjCp%!# zjV_tnvn$R#dB@4KGRfS2qY5+WOg*dclMN4oN;>_?uXZ<Y@Kw0>&DBI@+RI;SVC3w- z_|?9aNC24o;@VH|ocG@e-_S$K@jnaSfEnl7Z}Eu9X+$j<+uSqkyv)q9)B-o^lE4$9 zn_>e={Ib-LK{z*BU*8)=16LAbtzdhJ<s#igq9TvQ6w8X)iKkCzv8_bnJ^RzvKe*Pw zfGv`S!JE;kH+}yOvJjcRbLNX}30H-A#79NtKU1lz!gqJC3!N5%;DdUIO-*3D7a=Dp z|A)CZkH>Od|Gza$DTxM+ib8`SQc_6~k`O6Ml7uu<Drq7~MM^|OAwwmhL1HOoC?!$R zTqK$h6{(*0Wv#vT+Iz3>{(Yb4^?F{<bN{jTTC2G4`?}8SJdfjZd<N8rP=Kff-|<LN zqz3h^a9z2wmo7+3@V;p5WWXyx?HHW}jq^{$>TDCG;H#zc<~<10SW(v<gL7=JcnDDv zJc0?Jn}73W9KR5+ji8>(%mps>-)3*D`nT+j;unQu{)0=cKT&)3&i@sc+T+b`h2<4X z&lqq0#;h7SufSqk96DyuP^1W@@n&p8A6WP39)6+DqbA6_ieDxRlI<Nl6ocioigBM) z=L@GMt5r`F+Z#|`&P@WV@Il^&k4|pK4xe+;$;^(_KKiYnv@}juMm5foyK~^{w;`CZ zIj52=$Nn>`qb!Q9n&;%amy*QagmujA{MWFKs-z(a{T<HF&AlYR)2-J7?A=#ADK`9R zZ?Q=}B*{T1HL8tcJ#_3?lXZif-_$Qn+j{YjO}-{&84BM9%t{1Wt6*8$Nu__?!c32Q z<>i~;fFPGf{Yn9J^HaBt>(&LiD_cP&N6fe<fM6iN8oY&U&)MZr{FY8AbU8qB%uxT+ zCw9p^IxMgmRyrmOuoQUIvH^KZQ|8lKF)kk2V^_%au047j*s~{U%9@hwtgcGhqtF%= zR)2;*rMTizf^i?ITmM+DLSR<=9YaTt-uJC)*r#b0cESuwr}v@NwSAQnF1pp2d#*k9 z;=_m88Qx=lB=&4QM-)YmpZx|6`cPf1$zBFMtovZ?3FF4C=j_fs5e9N8Cuz92;bw<C z{mqFrf*;++Pxzf<;KaBkrui22W5|&s8CR~nPFUR9Uc1EQZmFt5&twgwC&s6elLI7z zyh2vu7&<rv%K)&O%}{(97sGTQ#0dDvF=f8-mm6z-M&($A930$znAvDc^auDEw#;@` zI`-M)Tb=CByUZ?@+S@~M&4MDtL(;ol=)e`rYNsPlCV_+g3`k80i{zReZ=lxe@0VG& zdi7oV6#63KD(k+`n4*b5-aX|wIUE5owvD%ht(HQ#zN56R0=^^A6zIfkagI)zF!FOQ zFc=Kn;oelf(*66_ym%268!P{GhDvu_UFDnK&Og-51I&X6C`-A4O?l;q4`Zan5|Txk zRd|7{Q_tkinc^Kt`h>Fb$gsKXk7FEzaOwWv@3ChN3e@V|P^*_-|GFeUeA#Zl!~a-^ zP^$^{R_ZhL`aff1YU+p-X?%WU_V4WKe=NiQ#;)%EeBOL4ig?O^N!d4FN^dOH_>Tn` zc=2fPDvMy_?QY)xWL{tUSLSv0Hv^egcFnQ{43l(-FC$*gT>JisHGQP+2%{6f>+x!( z<$35Aaq!*x@>(Z*|Ak%5QWmia?^7Epwgp=YGwZPrVFMR**b#LjaB1yBD6^O!vn%H6 zw4*qoh)Lq|R!+|l`iSJ$8+8qA%WtDiqQ4gx$M5GoRW(u3(vp%pAI@QVH7>m9h;2^> zg`#F-FBtAj(zyN`{Mc`c_K7oL7m$eT?CgjL!2v>_@({O}FpHB1rWt~6mX%2xb}wDC zgkauVo9)&@`{pUe4wscZB+HJUHq`Q*JtxJ&a^Af2<*xWm$8Ga7pszGE^aJUy)E|*& zUC>fThe?&uxnsvxs>PD}7a0#@XZ3yJ@VYEAg(rsAUdS6qCM%e>%n2%R@00X|W`OpW zwgeQP%0+6H@&EH|kPNFviV+wE)R93e44}pQGaKY^vR6q_RA%KFK$Y)Q4<Pxp8@H_c z3Nv#9`+~iHxC!Y04jCGmf7o*(=VkvJ=Ohl<I*SL4smiFIl|pLPejzohUH2~9+yh?U zejymcpa42#vmVdbAM9vPs|S7A+WN?7r;7BB`D1JAACz=dUL&#aQ-stK%$GHvd(P!i z>Q72f%%x?4ufRW+-6=FYG(y(ft1TU*wb$yLuXE|qk+o)`oK{gWO&P6lv|H6I+m{{| zK89c5bfE8TgwlD)%TrZ*PvLt8{$b|Cx8Z-R^IPtxtW@|Yg7llFwXsP&=F|tBSvMR9 zm*(YlktN~a!PQ^grgrlGW%S#M?ndWRQl^RGy?rF@>bY}ksPm8ofrv7?@_0?P&`Xyy z?Tmu~JPz1Y<bdJUTvPed*V^EsQ~K)XgR`}Rqi(Ns`quwBibzx@Px0p)Htd9A-;Z^l zKSQ>H6gr}hcJ8flLLgdB-M}7slzr#U)$!p+>e~TFSXw$O=)bgh85~=m7&_Z{`t)6Q ztH*g-Tc@*Tf&rb5|7y*HJlJ@OqmB9!{wARdETqX^t)bs~d(BIrC5J}GRPC_mvsq_T z=U3G|+1=pRwP(+}`T2Z?Lzc}|Vh?gTSm)xo$kzSw<5`xq^+X+WcxU5RJz)f(1+T2e z>JC}PxP*Vc@+oWh1<W=XM8dm%G0uOy&i%PrEry!A!~&Cm9zHO8L)kW2TU%zKA)2!< z;BRzjfape!3!YUZ1qHRMJ;5ou*&s@8#MX<WVPkuDCh-afJ;gNuf`O%1M#?OG_+rJ$ zn<+yAL)v$U1bG3!L8PSmyqo_GHC#bPjrwjsb3sx2V++KFOaDINJtI=#c%(F5DM0Ea zh~>nAJ-mj9wF_9Z?2N1Nk9Rg<YRjvrJbq_#FVkh53U#>d<ZogQ)7lW`+8Zk0dyh1k zA&PC?-n58<X%_1^9E%TYYd>KQnQE8giL*=2t}bJ&)9Q$T3F<p>ntz^Ktrhvr9PQ8t zO5W|oWCYh!MuH0)UWLJu^YQ6a5A`yG8jgn61M2!S-OU-=|Bat*v8(r4kKkFYxzf{G z3J2K^2z=RO6ogWbkqm^JHMqZtMpGCiG|tZ_dgLzz?UBFzPXz7cD$_p*+9xix5w!g~ zv2B)g%ls=r+mGD5%as4*OxxwOugQj`@B+z0N^0uxt2U~T_S?))@1f~$$Z^|r*S?HR znmK7@y$6UcT(Cm9xU4LKq>D(^rjj{-_QklK4+K>Nc64B4<ES23EBV%%ml$KPK{J>o z_}#T`$N1I>6+AP3V^AI4d+=aHq<*Y;aqi*M|Acz|CAe8yYhQWq*pY+S9vO~&2Lg71 z_JXg!Y$fUT+xV9w;@d1w#{Q0L8QGU?ymf7jhyLWzxlj`2mv8&<{yl<`X5i=r8@1!t zJdEn}y@dVBwxNdyT|F&ZHNxIkD;3-Fse29>zwevE)?Fc_<4^#lNVSHHFKlU_b2L_E zgkBeobBfcPZ_UaOvWhopKcjqO_by!1H?0?=CH7T#nG(a7FfK&yLSv;}U{o=@DS0&z zZqSw|nA@lQ(%@<GHia6=zoD48CD+X$Q3y^b49S$aXRDj@ml%@a5nqNXWp@+Vel1tW zD`0Re_5rJI?prWr%2MsgR~f_RRewgPBQNP!8j<E`_;losVWDHcz5n>}PSrZWI-^GL z&tkb0fjq)S&t1_S!I}`n3E7dO1v2`JZebv$!}r$wf0Icf<d9rvgVHE5Q`OKA@7lG^ zDP`QaR8SHIaZo14TBjK_v^Zk+PoYOdq&u7p&PK-eP)|r?{+%j-BQ;Jw<SsF+{Q}&~ z$W+K`LOcfeo@g|^o!F^b07ceV4JS7~A52<+scEPo#Sm&9eXWvA;g@tF*wTP4FCz{j zAP<gu{|RfNus=f?B$Mvo;0L8}&mQcT(i)E=oK!*T2=k~WjdawF$PC|ZTiiJ6(}L4- z$iM7wRv-@L+A|-_eSbK}?|;GTUi5#5*X{Pd;B~wH!RsDp@PCun{XqT?UUyqVUn{#K zNYUY+&lHkarqg&%-9ymB%>vJ0;lp3JC9^ZB?cr+Acx0?`XKf<O*c`}wWts!fO8vnW zG2B+xVa19oM2dQwIy#Q9owkJPM|-d`=`tfn`rfVnT3fb))e4(~;>a=Ue)2$e`K9K6 zU|PLP1$<bGNeGsOoO#eNRLcjg^cFgK%wnOxaO4adHVpd3h}mJeuj}_b-xstc=0}qt zlz66H;<%%9Q-YlEuw|%R_SPLJilM`c&zDNOn8^cZZI6?a66-ne+pkaivNwM6TGw!W z%GQDGzqs#UXj&{4YVrdMR3V-Yf@w}RMlMUZ@qD#h`S(M-zUAcQE$81on(82x($X6~ z>)Tve(0lRX#jg$?WKuw|h~b9)LKZZRF%+qoFZxO(0x)n&B4o5?ncK<mUe&jcrb6*m zZhLu~()HNc38_>?MMd({&swJ|p(uZD^A%>;<q?yZx(J9O1dqMTtb><B(hKR5fIAPI z8G`N^>Cc$q-6*Dng61~6uBfPJj~+K|uxr4PqW%{EQQqr%To8HP+qPP^dygLU0qI6Y z(^dDz8p%n*?ViJNipSsiix+2#B68=ZB#vLnfsU@5hHxz+SsOkw4cJwXqnh->aAU>+ zf(P|tw=s&yf3mV7iyUzcKi+tXhmUlQcN|0C+V>eDJSx9uZod8n2ann#V(PXjqes7| zeNr;yw>WW?cJ18BAj53_d<83ll80V>@DYskf%@ER&RoLbuvi@NM${0M7!fTJy5d=G zzTeDJJewOxF2vxrRRGvW;<192gS>7@XVdMB!n1lU;TPwYCZ9eZ{B_T`)twLOc1g?G zJ8hA33Mb=>7k0$nqqLD&6lx%cmzDGU`Jt6R?(DZHs8SM;-^4$(LC>EKB_yq4iL9=I zw)VoAGnb=~`4*cED$8Sk<F2vh7a{Lz8U7lCgKMJzVQAAqm!MxvTUWuzfweO1C$97L z4HNn59%yjd=-b_|3s;kSKx%Y>)enuE3Q6)i#?4yN{m-fTKk`f7tkzprV#LCSX?T~i z6nscD8VfW6ZX~{bG5mP&%fpLCcZ@cDHVE%zULBj*Hc8K^liZ8g6MX{w7;NQa_W8aV zn&?8Y6EzmXnzVFPQDco|RKFt>FsHLIs#olfK4>L}4VKDGGGeWqAr89o`OcnQg-eO* zN}X$tsn8QqT>(YsubHRM6b=R;-1=9Y`q4w(z70%<ukwz9ZYnYb%rH<EHUzvz_5~A% z5@8+=a9AY)3rL7|1WK0jIenzWbb=*)3L67Z2Wu^NWz4z-|CQ67rB1dAVi>Li^_JyE z>(Wo%6vdysV&IY=_A5@j&c`8UBE5nWpWHx>fU%Kh`*w&@shTulhNhgU<jUu>cWm&` zR~_v}nr!yAUob*0BNC}ii7h1TT2kf9igpT}wcGFb4NV`0m3ZFfEWU(>3iD#O51d0N z$uJ6i0|s*bWAX{6T2(~O^t=8?i=zncxaYjtvXuE7HejCoeKoVY&k<_QvB3N!D8}UN z7kh73kZPWyZSK&n;B6-EwpFvT7VP>XsbsNK%KTOu3l1CikujT+l9QE{`!c~CH|hJ+ zCzn5$MjUfg)YN>4%fhCsgZ2@Ox0mNXZvHk>)xQX~C#rj94BNDNNN+Kp+yOqzV9K%8 z?ho6zn<!7O=lbv?u3cONk*mPB#K6eND85UGi=w#CTuU39@ZjLsM<&3~<*ws>r_cQ$ zNHW?y;KMH&i<pY6^v{bi?6{Y<-RJv{9b$_2b9ymWG&=F&iem8vJwkn26UWu2EF1no zCe5Sm3f^(6xR8`{;bK(O_E#qM6%p+_E<YmKug@PG%^d|22Tzzu``?%oseN$cDP!vz zLBa7i*T%)zsO{p26kmgu00qI<XHfBj2UFbM24)=U5N7h)<VSmJ4&HAoPjdp{Ra0wX z(hWdBqh{HmKRLlbU%ae?XtVL{@cJ6D(&_Dk!-w;rY&vPFG$olpddU5>S4T8Qci3z@ zEJAY&rN^vW6m}EL{xYhaOEcT8P>sE3ul6UKyzLjtBBH|{#0PEz;0J~|Ns}f<8RnEG zYte(xd20AA18zXlq^?CaV6%wxGv?OEI{oo`oD$H1aDD$Rdu98ZX|ranfNFvvoA;*Y z$r8pt+TL@!vK4l#Q0~ei#M<6l_@C{L*I@}_W|s1`XxEz_|4B)AlI0fSz<#ItvtNka z&g3qCM{$qWCpaPAY%thFt%;~<hyNs|NBM+eL>s1&wDCjBqNiQkxrhi%`hR(CSN11r zXrp9U5<WcMrk0k{hhJKW{@o{nT><#;8M3og+pqf1_=PkHcqbYfmQNEzYTJGKcecLp zwg2B>-!Jad7RItY*?QcW9mL;cxnXUyr&$@QwnkhfGkMmC#gs_4-`*2TFq;)c{Q^WF z)HWJ#WE5VUI_{OR_Vw<~Nu&OHVbm8R0l}lU)}+(7MC{9*Kqe+huR|!{EkWqBxTxq` ze46@7-VF)tY_9EcJ4|P&U1~WK5qb+_ftxr|1id`T1fE1>G?)oa8z@7@Dk!L^soAF{ z+{vLJ+dwJ=eN}CthUsni2pCzB8XN!78zAJW@)D<e3;)WF#|I7RS{q$i^qUbm3*CHl zDUaPp&R8|@M%Dx1PdZ=B5~qS9IQ%?Ak=+9eUNVhl&O8NHLFEUi32-?3_y_)sSd-<P zuO8-SsKKe#r@$)*{yOY8@2CfqWpWsH{Zj7ZkL(AoEQCoi$Zn08)j>}?CLpH0t1C3i ziYpsAn}sMXhKYuTjEpBgn}Cp+6G*@TXAG-(1cYek;DF&-G~R^61_v=$v#_)@T(x%H zI$hDp9(6ie=T6^`2Fqdp3wd&$dW(|=0C<=;iEd0*6xRvxF#K5jUU2`jSht1yh7~K# z7yJM*F){Q&n-Qh*5l2jrNF<x&?-=jj=3rbx2?7Cqbi&qt|AmOZ@>OAZ6h$GW&m8>r z=z@8_xmId$LANJnG$pq?EN%KXY5@6(l_v*nQtRG9CY%$SR;}K{X5FNw`jrx&lk+PS z13SjbDeoO()DcVpd2D!C7#WMSHTy5j>#&Se<{4|xk5j%*_qW-@BNN*OO33rqiX(@w zOK(*wf4%MJ=OI*$B^QB`<gFA7Y!XFfX<Yv^7r@9-Fnxuq0|bNJ#3iiSc3Blz*q)P0 zurJ9{jO!|y{M#PbqT1Xbwo?`czlMSm0NnkQsOOm94a(Ve&=$Z9%{Vk%v(qUr-Wrq1 z?B+M&ESPa!v0)d?$?5NU%UUo$u(Co5>?^^okWqIE#LVE8E8h>2{HRe$Bc3UD!rPU{ zq2>b)vDiwCRv_BE{V(6m-Av~#xbeHIzk(DwEU;Q&;!YSl_JGt){tb>WmFiP6J}7Eb z274Dn%P^RmO+^G|CT{Y&Kx+_GpN-GAK0G<ICo=@>6fb`~q$9e?!-L0kQKrYiM<>9H z;ZV1U<$-1?bk>~27BK?<p7ep;e8m47&s{g3y901?yDf-fU**NWCEt6TycT@_!2_58 z@h&e2eI|uf3i;*ln{d{A+9=%N`>EP@)D>LKh8@i3n0fyE7lUP5i@YUHGb6iS-+uGt zzwy);4qU#@(=c?K-UE{zatiXDOn;eP^W3^sm=j6*VRK18#qdW+Dk!)TyF+Z6^SEhS zSw7PT4T_*|L4u6w-L0@au~TMNu51o|K72fvzanArrtldRb#TQgddo^mz-kJMiqg^X z6B_YGks|Wc?C^QGg@CW)z=D1S4rs^Dogb8yX}IK=$LuvUREkUK{rmcnguXwz4~l5m zFqj=6mvd}+U|BpcrA@QOrmG!XV4qSNF|1iZtqJnTcc5xUH+a+X>0mUN`f5U*!<#ZX znygv}`h3A7&%ny+BF{ffl*?tQbu^$n^^mYMf1FLglZRq)kZcSLHfQIF`24exPEl8P zD?F@NYf|y+o1~b^<jI5jb~}C-mF#+&u<h+S2$~CuZu%+K*1mxg%{SKyvBR$8zXPJ= z9$^Og6Zf7NJ4OsaLp0RYfuMl@6eiDzn=puHfZk4k!=TAKqqL+5Shs8qqfz3Q7?|fC zfn|(4X(f;+Z;;#bAWkGO6kC}{yJ$=7b$)!|4Cc9b1x31$=)08I$DN(JorUFXY6=ed zC;5JE_P>+wHIoGL{g1ClU42GXGmrqGwbW=LD>|IPgE)Vi3v=G9O){l(wQgl5$HgNI zpAfg`#<S@%tR4VvM@b|1>G8>an+l~n#~({iZ=xAvCQV6Xn9&^2Tp#>(l+>h79Tntn zu)1_b)Bi_4ee6U3_JzAj9Cx-jgd}yZw>bofPGQ5$tq1ZSH;l@jDcHX~c=#{?P3)z$ zC+%ZnbUf%PU}F*oCCC(F-0w-~QcxWS!(wde)lxGu+B7~oI)w+EE7+xD$AMEkFV%}3 z(XvdFPdIneB(wc+F_G<wFPbl4f{#C=`>9Tz``3uOZup#Kkh1Xy^PSZBr&;C<oN2l% z>bOIy>gug*NEiX{7TDCf(JD$xwOqN9mzNig{m`KlQ>=oPit~c;8&t!C5Ax-Y?89-M z?kMKKQNv+fDP9q}85;Z-p7^XTZ$3BEbBf;_Ze^?R>R@b6dpRThqtmY+GmuL}Ceua} zyF?3*eJ}GL79Vp<WV$exgpAy+`}7YCR3vHgl$YQs7#p~1XzhbD1CHNay~f=1+5H`| z?7^V)LKO9PEqb>A32XAJQ#|Z!ZJ)8{0#n5<jhcMA)IIb<iPEMhPIuPoY^fS{k-HI- z@?Nfi=_a9zLXPTy?kea^;{V8&@BPanD*l*M&C7L{SuL^oqKEE#<9^(yhBKGkqNelD zL_~)AU2rDTCM{`zVzI5^Duh`558Ris>F!$)=y$hT^QO_H+cQ^0`IIA4fgMn9sqJmL zVZ#^5aT2<a1A=lC^dr~#v=h$aE#K;v;Ju2IdFJLOBQ23buUDW2X^!vn!OCf)n8e{A z$@pywvfi0juhL*)?9;O~>D=klG_CIF7T{0Snr!JNh{C=&EVtc_erN#cT9h~m$@cdm zhj-tyLHeWFPzf4T=vB*qDZh!8Tb;m`1Omx8`wmeun|DjgmZEa@F6J`Ue;!ZibV&m4 zhQ7C~`?kWqqgN(6ZHzuQ!a)1;=1wA}6YW2WZ;$g0tIkw5x2p{)as)kVVMsy^2hYLQ z*4A~rrJOLfe0)(**pPeNvo=(4a*&b13bBYW7d&UkY6X6249Pj%K;D)z%4g1R1dq($ z|H|6eot@7qSe-*}Vz^2e8a6c%_UmGAZ;w|auByx;7y8K&cf|MHvv)5;CjfwLY#8jJ zo4<Z6%1px{i|(?QE)ua^{XYI0*nY735aaRg9IvpS4mawJ*tA44V01~ReEXEvA3vC% zW5murjjQMYNy%ZGnnPbko6UE2R`j~K7-*Hi3JZ(Fz#WmJ<*=j{4hTlzaa%1SI)>O{ zxafQ(^HhiRSe#80J-9oZCKIK;QK?*-Z*WGB`}3@&2RoIx=y9@%%4#o?mGtAin7J=o zxpH>LHEY)rvCBiJCrZ`X>oMr!nds<g-Rlj54;gOW-E#<MX7tIE<LrLh&i2WR>QF^- z&cMq|jqwR*>WBRn^hCd|T|K`s+&Uek)K0`Hhx`G7jS<(xQUK*T^4^q9iHY!9(t5Z9 zm6erLv)Ip?Ye{yh81-iV_(N;M+*+vs_xbr996Wl_)y>k2N9DwC88Yy{v&XwWZ*O4T zVfT!6l?lfEqU1<J0diy40zL`7z9j90bj`PaQpoLhM>a}#+R!4s)7-rCjh^z2&!q!E z$7gngtt_P5H$|M*Q8ledbDFbZ_cDZ;R|sN*kT_Fczr@y#vpPoOQEJkffHT(Vx}qp> z6c-vb?B4iSj=9XfcFX52UVQw~&fbQjyF9h~ddeZEB+h8ZB9(_7{Z1WdCsG_=I{8PJ zESK7|KgEK+Ylb2+#9^7w+eV>ffxctWy1Je|T_+GMM9GLYID4le3S|>sHBA)vG~moe za7iSOdgZif?G7wN)|H?C7QY;9d~6&XDsjl*-d4SP$2w{N&0?_n+MrTQfAa-$3r@13 z5IDdJT6sTiKSDbeEs8Apk*)E)4bT6*p?SmDA1)3K-g2Fni$?4D_raT(8#r*%27$2k z?VGR>;MhmId2!(%OZpOUD^AHw+fi}BB7FS#F@utOIXO$<@KPGy?zvyBuA|(ur<_3} zOpXbm<){WE+SU22D?sePW2U62crfdsIos~UHbZXbvRAlFOqew3F41P$BTnTgmkgd) zt7UBCJm8bg>(LBXWwv?p2(qc8cH=T);!T-Ro?6Yhb|0JF_3P<JAhsNs{_4sEzl6o+ zRSrRsG~{SWnTF#BAarB~ulAiB%gV;RfpL;xR!&}=T>Ta-hs9+ZpKg4vxOfOX#$%ct zY)7yHW|Lnycka?<%ZOqhS$^kAMh52(x5pNq5}de)4>$5rM5CFNN-mLFksPX7VSLlM zq@Hqtp&LFR=0|W9mz&hL_F0#igQcWOv8>>3VW?e*r3?mqJUEf#mYeWqyJ8cAU<MFh zTHnwBRU&%OJ;MXq!CgBXb`yL>hE(YFGM%3H@X@1w&o3@_b$#-}<&gNiu9r8ol(E#M zOM1o<rhd5XWw09uQ7mN1RXP#s*<NgWTivjH{%*|Nu<n3VBbL@LX1(`}d3VoVn;hh5 zDXk#C>H6ziLnq9HQg*8<sPh1ZOwwXL814(l6VC^uJ3LD;@_;h5R;1$NoE<x3X9s6q zG1Xr>GO~G(kezGV4NVcmWMYj`H|P?Ss|IH~FVFYH@$YZKR|l3}_ZP>YZH1m*r<CH4 z6yg|y2<LHsvLBu@#|{e$+Bwyh1D6@{!-pa2$8%Ns`2`1;vBz++cT7dF^#ODm54?H| z`$iq~h9Q6x{5l9Lxko@|3!9YIF+^n20_Uh#w;Ke2{DlpEqK>2IcQ*Jn$^`p^HWisF z`+Q}){MGS0JuYC-r15A;=vRJFl;%oB5R2e<KsK)HPB0S@!x_^oICzj&#Kd&$`Ce$o zDS+_>1?ZFfbZ9UkiiC!$Zof&8E8SS-5h!~F@A6qO;Fyfcf~IU}i0pCurR7G0>;pU% zFKcQhx|AwVbI|%fMF8VwHT=+ZqeZ?6qgK8i<OG$EU4hzr>Xt9vSLa+*eDwJ7>*ifN z&up|9)((+%<I>TQvFZmO@5|?gd^yL&Bu-&YZ6mPRzfkH!lC*p23a)+ZMA&)jC(3@a zHESJCWU<3q9H;8*VMx|fYa5=?il#j)*&m9xxN1|9!<HK{_Z-za1_{o;(?|SH&CZk& z`xk2VY8z9pw9eMMX)xAbenNk|A0ioS43_#fHeEfBlKi<ZRid0t2R=vg2$l4pf%oc) zr47;|VL^>O<r&Eo_&BJxdWI9eZLFWz=kSGw(8JN}oPzkHC>#fas;$8%8z=5G(|n!y zbokFQ!Dox78mTHXElM@GVy(bR`z;dx3w3+KZx{tn*VW~6d9i9Zr!QT;+<(9TWt$88 zE}1AKeV-d==REhun!bfAGIOujv8Hv_<C&U_l|29rJ$n71CE!UgGho%X-?3eNrrvKo z&lI*K#R#5n0l=_e#b~P!J_!|=(IGSbU`EeUj=rhV&(PdlQnj<LD1DB+oSdMdE-6tP zHOha}u&(?kWKqyga#O?8tR!js`;4ByU7`eT%lY%QEL=tv1_q+NMCO<aDe@lu;!zp{ zx%byxb&T)`Ho*RGe3oc;r|TZ-{j>G+oL7Uci$-(Ol2vfy)~yxr4`<wzo}?}g3!aro z@-Ubu9#u3{uh(6sd>vV`1{wl*8HB}t&&!<HzM#zF&1$|9;`U<viYt!@VP^@?xx*k) zM%izzcCd3(FndeXY}6%27QI;CG1iqIKW5>)%`Sm-=qIY187d=$0%fjMg}zoX)g;Xb z>`j3Xc@z2#&qr&<;*|M}mG}L;VjvaSGDyYlH%eG`FXYU)T<9CuX&R*L&8t&qepa5f z^-5#;B6#SMes$3uMMM^0Pt;2n{lr0yPyP<-_FTo>KJt%8jo2@DNH!3nscL^UF1Ezy zEYWC+Gj2byc3EMe(ztPRUp83Tv1VhY{%W0zfxB!YWda&0o|{AMiw|h`-`&n-+FDOs z=Xk&>Tf{_W>$mty`d&w244*G1(8Iscy01=u(~82S=DQi7BjjKhfQeCv=FiT`BkZJ# zE){+aJ$kgcwRt@}Cs>9ZI_&zC^?j_0N-?KZLuCQA*nYEfILgA0;t*kMgA)J^5yiW0 zmggqY%Tg*IGvyL2|2J_=36w6%DM@K*z1*Q~i}h&C-h#1*OXK}~UxL$bf1{g~uo&P& zTwHKw3J(o^F@}m9^8LWco7KJAol^IV-SzVER_1Q^L2Jmo;Pz>ElpEtZZ0jvgK-EU^ z&E0n$1PKVdz^3z+6^i9!Xv?x7gKGjY^xw>@4}P&f@w@kwUjS`6?f2o#KKq^z(86k> z;Nl}N+Y`UG4pCWY+wbP}z&~BC2e4JLoxenY@93zXX=9Z#{r*s>V3{RqM}mW))Q52q zByH;2(i7^LIhIB8L4PMIqvdZndAjcpr8QbAzH|E5bQ*~T{Sokkydm4TyWd(`@X&vH z>()EpAzr`rJ>7rsyuDh+i<}44=yd7S>2gNKU~P}UG^gddy4T{(PG<f1@|ad0)39II zj&bolwt(UPTKXxgLs*7P_KxG;-V%Exd=z%Rx;8UyPj5XNv)y|q^fQqf5^NoFLFwa( zSfx98KEYav?hnW}=wV?YHBu?+l7EMDLv1=bD2&?l>(Zw~iz9D`w`<qx^>ZhNm>(~H zjeN5H(`9OFZOEQrrALk9-sfgY6=@AF`mzt(>?=Pn(8iuVEtTEUS43xQZL!f+35#CA zT~x;eSgH36Qu5W=TVmyRC(v+%>u0EkA5M8`^gA={r25jE-KS5Vjx7>XHonT7@bMpj zKSCD%GOfx#<T$XnTkvD6k&D|EPb?o|)J8=$_#)X+dS~B0Z~Iu=Y;mhl!Nr@TB6W3( zU8<oc{JYMmS+cNtB1SC6$0nGyD*Ij+SfUy(r4#_59P<Z=->O>Izxz!(GLAGOAJbVs zJ9g<pyk}fSMp%*K>PP2tV5kG8vncTGpoXX^O}Gyn6uate>5}V-qos>Rr&%QV<Ov(B zj962gSAu*KqBvf1*SC6lN)@@AeadhuOAKz%IL@Gy8~m|Nt<lU$03^($y4*_P{=z-; zpEm7PJimHv)XnLPL0zQHN8=8SHh?#!vPRJ~2gm!KJ*gZsg4EEkdtUSI>K%x$gub5M zM7;iFWKb1?It2Z?V{Zg>erTXx!s%{BZcZ@f=$Fn1j56zKZ#1PTzC7;WC|KOU$-2?> z#ZaJTZ|D>aFiv6gwdQ^v@iI|SzfpOor8UB)F~0{wF4rt|a5OiB?h^T=k<W^AlZt1~ zo;qr?o%*CnTliJktUr!h;Jz<#5`8y6n^om#S?(LWv7+KpF<x*W-vNGpy?Q3!pkJIs z{mjlgu3z^ZI%}|oQOYE_i~j(-Rz+2{=IIs9gC6&ihlROohg~sTyEf%Xa%#CNr)pKe z@D3vC&LuMxq?EP=A1>S#dL(aDaLxUJ?G=p{%WF*^QJ&f}{cP5^s*mX*8lF8kT;}{( z3#80|mfNe0`vLOLSE5QYBh_DTw~c?2rPVC9eO1AaXr^{xxw+ZzZp5d`M)V&P)sxWb z;FY8iXfd2VcTS~#Yh|P2<xm}|Avaej&rD%1Kqo+j>Q)>ztyIlXYxN@r5$ub^fBH@5 zSDm%Js^xgQAEgj|BZwp9B>fpP2pbERXdp1d1i=xUOM*0~!*f`vK03lY;c<{m{D*5x zJy=HKJ~C~fG^AaWZLdBLT!tu!eH0YN{BC=5h7(%USx9{f-1QuMe0+$c1({k73SAmI z84KxPvy}u01&Kx5K9tRpNtz}Lxs%9c!3TrWZ1zz#`C-HC!NOVprVBz@gj9i}t<#*i zR8;<beCPV`wg)$>Sw77uHujC9X;3+8T<&uqp(<;Ib8XV4OQD+!&Pwuj>({JV<L(a8 z<U(4SHvF5QD)p*YpPL01<-UD~#U8qDG)*!r*rr@H${e!5;K5{d-W3QYE@ichjg&M; zMNByzbHCPeI+<jxRH(cy*JRiGUG}BkANwx$oc6Sr@tH5im-*DBFEcOTY;0x}UNz^I zv+=E`-W8r&<u^p4dVT*^Py9ACkg_++>@p^wxmEIE!u}k){Ih$a*5%7xIXz6{g4w$_ zgNx4ZzDqS?%x6je=-)5m;K+yxQ5)A?Oum!dK1yDG>S2m}rbBQ^<oX`ENCdjy3=~=| zV?CDcdhj5!VSG%SEN;XwV80(|*^_a(xV(HK5&^0M1e)s(S$e5X+grKhnDviK7uJ)b zE!fWxic$J{V1~J=X)#YKXtQBw^S&<e&h9X+nU&Cu_)R6C>-d!`-`T{0Gh-^{m&s_d z9-ISxtZSp{jLcaN@m8UYCpnZQbz$UQdcAEWD$~}4)0|OoksvI>>@hMcq#Qv)!A|_0 zc!3+!hhY+>wW^!Tq8WyiV%~u;Fr60U(+Tm@PoF<Wys>}C)JVrooWX!AYRFiXv%cvL zG#FE$(Er4=MQ=|{zYpLcD*LPDVYXZchB<<<pS5)uAj+YI>JoznEt)&`HDfhY_oDY+ z*e^tI*}wbl_tRs;KJ;irGAW_UG%ZQZk(OW9J0tLnXKG@ZZ`B6tr>ou~$xB|4`i3RT zdN{K6Yfo7@NTwPZP5#PRtSB4?HW9@AZFub_K^Fpm@HBhd;_vAfDxdi#Rjq<iI-Pf% zXD{;Yw5hUv)RC<ZLRZasXP(x-y;<J!gqf2`g%34uo^C2XJ&s4zK<{H|!l6s;R%opF z_5`U3fRMt1iY_wh;un-NI+m(dO+8GLmFt+wG<S3lP%=tNB&28e_m8_fkQ1fwaUIYf z@&jkdc#UyvtoKVwq<)0W+thZqGgqy1Q0WIRSg=Ki^=fFW!L3j4>Sw)uGRNoo_e4dA z%a-9HC9=dERr>8c5_13ilA6OtyGFlF+I4Nz9O|4X+vrJ6k7EpbBbcC!DCnf6fZ+=q z4af`UXI+xeWom$>*R`s3+nTHT>ZNA0Ycm`r^QOU5u{m;I#>=;FAJK@`3!wj7_F2qI zsDU*`#gx7?MrelX|J#7Bv{-;Gc@Aovtv5mx6AEr2urr*TI?R30+)Zsao4e6f7XD07 zI(TUJ<97oN9C+|ywx^3Cf+2tZcOVmFogh~{9vB$4N{p2&?KgwxHE4&-ryh-yxBWbp zzc81$g`*bgjOf_R1sC_0GbcP#OKPqcPCC;=(+w68fDV_BCg-sBId{4}Ry-U|gR4{3 zz}+WK+{7q^DNvQmT{qLD-9|+YPM5>!5_{_&PIf28>uQ%qAo&Mx5_kN5zfV<FR!ZnX zMU?HYFe$}od44G~i-PjSUAp*kOR4<wvpUSLUNC()!I*NB9D!^Gh8LL_8<%dZ(Xmm# zn2f~(HGNr&n9c{Y=IMUcA=mESoik94jT>TGXlTE!Ay<3pu2?Z=(*OqB<6mrpNgFN^ z#2-jVV63k%3fv8AJjQErZ_Dp{3a?+fvtG`-uGupokQ!TNz<~SPeD_!!P-1Kf5m%r| z&ioEu!HL0qv$QN4TW^psuE3sbQfy!-FIc#6bmX%m+CQA1pK~+P`>Y$-+2u-Izri$a zyQXi<sb(s)e!?+^>4jeK6xmEBLumyzC_L*wOSGAXo^yB-s3&V6kGb}?pP9_ipFGKg z;KFhec6Kozp8r7;*4QyQ0(Han%eQ-fhzxye*WT1R6cX~4(sLlxR+Knk2BmtBn2DGL zbZ{}vr-v2@vn0FFGSc;MEstT!Wc{uS24SBVebGY#f{=nFDl0d3>_^Tc8aBZN3H||O zd)|r;2=7TsBBuvFURvsm>0eM*@!^D?pVddt3%E65$u)0`;0Pkkc(Ug_e74Tr``ImD zzVXFx?JloB1g(cAJVXq`rpX%f1<0JGp0H_}YS@+Qd^R3o<H`AD>?%;^{ZBo!<S5>Z zkrRVRhZpSAiy4Ds62oYbCx|Q0{Eo;0H`08dy3HtajJ;3AV!ddk6HNH6-#3g65o}Bo zH068i%1syQmbI^DaLWh)(o?DcqXCEPy1(y_66}kQ96LtZ!$XFszxOKiT`Mk!n}+v< z%o6p4a3f%<`)n(CMe#?ZA_(Gk@I}DC#@_cnI4{~e{&gBC<&!51ks9Di1xMg$Xea<8 zgxFawOI)<3$8k_o2~zf}$jisVFGZlf-$1T{OraAGPt~ZbaLQ%J-NG5bt<LhO9|oV6 z&=eq!j10JHg$E`_<wU1$h4hR++#FHE*|WD||CQ14ZQqC?MxX%X7;($wymRyNHoh%h z@_S1sSodtKA0V4{;Y-@;>0qRML)u(|G=jhHG3oKzrOH6GYqxIn-RzL8Ym}CJMa1P! zh<U(F)bkITv~n|ku{^<m9|0KhB+x65m=lRT)D5eP6dkF28Im_iZk@nfhn2@lx_Is! zfbp30h6|-Nb4H3MWm+^UcT7m?Ar>Gshw2mD+R!;HeX*ug{))N_qgEZLwwLE-1K6?x z1~csdY!f_4w6){wXdV5ZOI}1SIyU4TjLWJjy`NhyE?TqZoR5!QMEVUZgqflZAiemi z!dD;&fVqR2A#<PV;!o_v$mLa@J<e`yVOy}fNjFNTmP*cQae?nkH|GT^BumSoK4whO z^XF41ObFdO*V=kBPEzT$y5k152+`ZjcPRuLKRrJ#L3G}F$c=(!A=O)YcFkeG{rkr# zD{GD)KV{>`V^2iUR&Ln(W{iyxZDO-vLHeqvEo@Zg$4j0J`U!u~<yxeK8qWzdRnO+C zkjCfNgm6p29=^8J&)V^*gfQpk(;2OsGGXGxW`T#axhZkNjAo%Ex7=VI;mQJENy937 z@Vkjr!NJXpifAql6=b@<J7SRrl+vkl=PY#1)^9AfU^@Qz+>#FNk5@z2ZrZ$V|Hj_6 zA-}Q5G+lZzQAAyo(KY?qan03{7ca8AT<t1LE(==u+PIUC?`KHu&vWM4g7hG$x3JaW z)m0YogOW)&{1<lLeJ8L6>ODOVhfnFOZ7|>fwc?k@t(e4$rbuE`BdmJBZKasR#9CSs zObA|mjnTQTxBNQ`+x((0z4pCUcJb)u>CRjUZZ1^JQ*rk>1sY-RBj<m2<=g(=oaWXS zWZk8OKlQ#j<;0=um#imB>Qa$P_v@!{0FIh47+}x4w@o(9;ea}^_8<AHKY#uNvGNY& z*c!5})y(sky{qec2Jdj0_+A5*pfN9HNJIc>%+Fx0A2o?ff)DTg=`+;5Y}!jzZIF!4 zzMRqVZ^tEsJbu^l_+1{Jk>2zbFIi^hJzY34cIcRznhtFWT(;=dnh6YR*qt_i|8nMu z?~F1fx$vS3=gz&T_s~j~+Ld$e!i6{W9(+Lx)6zv-Y9IJGYBj1Jz0I6jrhk9N0`FYv zkMQ`U&L90@h;_+!1}4m4vVZ;DB0e@JDGh*`XN1l{PaGwzkZDK*?^=;&I56Kq4Ha9s zy7Mq8vCj<+Qa|RKXDtZ+x<o7D!uauSTYs}tvA*D1@Nx}0Yx(EmCv#S*(Ztc8!((nC z0k3ppx=7R#h-!R#dzF415}<%#@+X8Pu=1uedccyB^Y9YyT{(aF*j6@RP}L?5b0JaS z&Le%_1=pAFykQSuweM~<;r4_ez57zMK5C=V#no-Y#DkTwHf~*=B;tGHW!%d>U_z-9 zTax;!>794IeDR`=Pe7e@uXXPc-?ifF<h-$vUBCV_yFY9s_r>)|3l4ZofIm|Ljp{#u zN;s2QDH4P8$*M;t3pdR2h>>!dvi9yS#c$050^8}lHhsv(U5n6QLU>W!;Jjv1zfZUi zT5%m635&6{%xbaO#%Z;C$?`c=Kmun0)%#)NACkH}<zz*_tEn;kwO~nn&wkx+0{_uk zsp8tYzj`%`L3j2KjuM+ss}EAy3ooa`a0`n=RhkgOmXQ+x#LU9@gr{M~9kpdD{R9BN zq0(<v_13PkbZnQHck*r)H(T#+`+1)zMWh26cU;7^@H>3QK|`mz^qC;-{>Q7f`_qj- z+P}TUmrn@UAfa2kZlyfeg7fRa%~_M?CEJe4@;7Q$(&3?GIpaNjHr0BUiBz9Hg8HUa za?n415C6YiYkR`t_)jF0Cxm#i_i{YD46mXfYB~7&)vHGHt;PEG_9wFZ(aw1wvZ<`9 zdik`=pFgkka#8l5|H3~USIm6ZH%c|<%D)*W%V_^WasBfzt9$%A1=XpJi}vTA3;$63 zV#&X`Do5p9$Hn=tFP&Y!35);wA9yx}6Z&6X;)DO4r24=9KrN*lW1tPF#@}5TDzbUk z)xZ8`x1E-n<tqL50e$iSGx|1sZrOSEd~0ho@>99RaQM#ua@kkp7#<#;TK>L5L9RH* zK80e4MX}h@vWdzCwYuJp^cdTf8ds(CFK%fkqOR6dJM^C>)lJ8C&&_7Rpv%aH3<KO+ zle=8)C<$Yrxh=O(d9f3G$9W3~K{!!ry)?0vCkBOH9>dWu_Zg0dg@?mKAm`d*q+a^P zi?ns$sea>6aF}lZK4E3Xjh#H}hfN4<kwps^vMV^dy0)@pd8`25z&nbSgDuKrhG1j( z=FNj7D`kWml77rcK|I#KzA0WFxfJeZ-HT~dCN!>n{N0&e@Wsl1gCJ0{TGc(=s(Icx z6_wD5>qj(QY{L-Y_jyn$(T}>EtcekuyZXvr;&CA$@yXzvNu`&;<l=b7s*QZ4q<I5r znb){<h@Um#`uG{_J%Cv}HLx3~P@qwJ{AfwH?&VO9I`i^nq+dDt`JgG)&`vnOg7?*Z z+V<-)8%M1TgXfl2`!*YWjO=6-|9*$J1f7N1N&N-Z)_tU;fRm<;Z~s=pI=sgY9Tkoz zEYAi9SdlNm=E5&3(0_ODWFC%X9NC}f6BLa0-WjVCy~!hb{V;B&FE4VXi3Z?lS6-AM z_w`kH=T3o%Y5{qmLt!WKnJU~WDk?kON9pmI@pnR-W)4d0`6H5h9ko%$<OhksO<Z&i zE9#u$jnWq9Qd3`lZf>e{aCLHeM7TTzOYtlwACs``ri#O4)Nm_)jbzO=GHo7YyXst8 z8g8B7Fb`Mz8%ozq{nb1NYKo{V!zWCFSCzzcm35%Jp|EeP&V09|%q<_gT{7j^VEX#a zpsVTL88z~E98h3oaSO3t3OWdexVo)c-%(e$2H$#D*U_5ixEPH##utlj*{5VRzZp<o zN1==BYGrlxLzkrwuAim-nRj+!&6_v+qUG7!vMcY-(pxD#V89hTDO|cl_wFJhb7Hec zW_zdkYj&@U>fCeiKp7b<F7Pd-8;8`vduD?WF%8`1*ijJ^XilZUP$XsLCQY)z>2uN~ zf*W4Kmt&|QIa8S4sx-~=4Vv7o@<e$DcqD@`SdtP0m;b#z0STcY>9MtM_FCN)_f=^x z0|SM_gX5obiw!>f=+Od`A2fJa&plxJGGc`O$5Q2@Mcd=o3-=a<RS!{7g;Aq0a3b6d zy~Zb8E%|Ba{nGNYQbo>Nj#pJZILR?;;gt=uKb9spSQk5MMjTgt7hJJwNXz8j+~LS# zhuVjjxNy9pbfWs8@nP+@ob^%TcE?j6jGUWY`kU3qhyW!h3#$l&BO>(t+-yJt;}Jq` zp4RAEAj&uf(Z`OR&VJA`gi1;9#N&=ySd>BvCKv#2&EQW-$yqp+`C0cZt+gq0i{~97 zbZ~=dK!nH<v2NYEGG_nn?p<Zf$UxzkvYm_!jH7Lr(8a1#K}u{?+pDT`VwrvVy-bdg z#oK;p$mXJnp=HD;_ItxEWg&eJf~ED!yKp+eDb7*yQ?u|$Duul;WXKx^vnd9W5OpC6 zDefRVf&<oTDJl|H=Z)IFyVLSVyKnKprlq;D3zgoz$_z)~nzQg=LY?^7%cB1@Bg|@P zWT2Grhw=WOz)$H22ND)Svl}m;9BLewkl>8W4%eK<ry@-<5tF;c6xZxvMfdF5wV<fz z2OMNJJkXd!G@wyYQCtez()rIdoLq}5+`12(phCnvRS%jnHl&20Q0$k6dYf7et~`<2 zO+urmveKN6&`U^Mrn}8S1_#;S#m?>=A($XsxD2u*-<o~MtDQsAvE#>a(-$o#_HC84 zXh-U(lBhmz6|<|C-`*U1;jypdT_%F@Q$uAu^I#q1*qtU_EyoUL>`{Af+Nsb_A2ptR zKG1>E9UX~wkC0nc^&aP64(xFXzZ)%Q#jzo`UanCe75>e?)XDH;s2`^az?UH#{UkJM z_^X`1QP<cA!pWjR*gamYD6Y5P4C-tJWo4_2(Qh3Rcc3Iw$7PYu$mYC5SB+1zMA7=} zKX71*SL>w{LHS#Mvo<Vy>uNeUAkRL<p#$LGiRAbvmy|xo&Q%$4sDGb6H|<l1OK$)Z zH~XCB9f)fl1vPBd$h+0-cNPt!7&_-a@gF)MKIX=Rfd?#pnGIf$nk6eG#vF_nxEEwc zT6gB<;J(f%l@{306BjG`SxY}OoE=O}OtZbZB&Gn<mBm?}2{C8b5O~o-&}zd^v6w&q zE%@Zhc`a*2bd(PdvB|IA$g$9YW5J0Z{aRn&>-n4S?E7rb=jM-w;vCjXR93KA3aA6Z z7knmP`JM$tLw=9T7H6FFwd&7Ii&z);e}!ZXIO!FAdHIgf!IO)*NyWu=KxENJ4l64v zF1Wl-epgN?9_U%Oo{2`MTiUA~Wp!h16REm%cf+RVV4wjo7-^VX$J-dH2VdEq;oCQO zWP8l=bn_uKB>0Mf*~Jf}`c=}L*3v1^W?8gp=-BJXyujXYFGMME;)G#DxWxnAWmjq{ z_bpgmHtl=7aT}s&w#D{Hfx`hAjap=$3~Wpc4F#4-#1jaZux9u#S?=%VF*#%gMKlV5 zU=ywZ*+D2NNpqf?piF_+%vIs}@s@B=5w=Cv4I@dqY>4lBmeRA28$bR6XDYi6M{gFi z@!v(-@_EnMf>5iF#kpbaTKZaED5N!IbMN2hXXb4vX<_nK>TILd4YCR)fI#Bly@3)- z-FifvFZeM`qsE4A=)i6Jl(;#^2M-z)5gO{j`%`&PL8P)logbqtB?hZ;lXfI)!{HJ+ z3JeSC>t0T;fBlf^N8pgM`QhD)u_iUD+^AWnYI5(9^WwCjd(}~w1VATvpCrr|DQCBy zP+PZbSrtEmFC>4Tc9RixRZUGori=Qd@Z{vxIJ)rVcyd_<b}LqJiaFjnwuxT=HJghf zz(MQO%&Tr%Mk+^$24QbS8tFTn)hJgAy*5MDM4+38?_NbVmaH2-J~8|ebQyjoFg4`N zCpvm##zX(0^cM1mZ`=^%<N$f4(K_SL-}%mP?*@Ics4UyJ%gS6XR6svfLCJw1BBF93 zdJQs1utUte8!Jx61sTnn1*5;Fy80^@qrAV29%}7`ue)$TG76s{Vwxm80?R%Bcm&+c zSGbyAoNDxJ!3k|$N<_92Vv0{Y?6#GY?4>LG<hF$4DM8saI!7G0^vRbm>i{ivx+wC8 zxCy#Ep!)i|&wkw8#n5SGumI9IJA?6T12(WVR39905fv_F2cKW@@@3Pp35#@gUH5P3 z-7fe%o)Ht;yC1Vkvma8_KHhQ}$?gXY+}=M@tzCS%dPH#bq^b}4BRjdL##_}!ZMBG_ zf;Qb2|6{=I^6~{kB|w(;NWdA;V2OGCXnC5o)n?$196NY`vFv+nU$|C{A2)7*x>GUN z3hX;~?JDLStQ`QGK~p^E4^)s4UASlwd=8VRs#h`7WK*UbdA{ve#PyfV+!?T}<*|pn zC+FQyMuut_GW10t5$3-<b<|sf02Q!XBTQxun60h>o)pA2z~zFrmr$VM@&vRQJAPak zViO&)5@?p`spL-;jRO!Q0du|Bo9)~RM||~Xi-H6O3==mYM1Izhef`G)o(UTQ6%19` z#<gqB8pj_5c%2=lUU2{ZXZrY8I<>EoD~D&JM@+qV5gwK6=FOC_0$T<885?Fo(F|dw zAD&t~+;CHz^}3B4M|vY1(^rs6+$YTGdEOxQVhu;9?Fy;|_iMQKv8mf^&DhC{LEhZo zKdNUprPkmW8$kLi^$z-lx0RJ{JoJdzX&eA08I@OXDk+^R+@GYqSgV(u*;FI>@4Mv= z8W2cKI7TUd4blZ&4BfJz(}ISHtD&qnjr}e0!;kGjl|DB$&7Ly{Y4|o=0t9=|q@)Dv zTl#1BXDwN^%H-$QkbV*SC&0wV)CT7Z!Q7i72*kUbP6XryNyc!^zUfM~vowMQ&-U7$ z>CgI_Or8d&Jaf!z5g>gpSJ~tB3F1+!UUYvP`lzBpQdeqBsN#TWLnTZ#YmgFM_8$k~ zAGtSONc|p@=EEX;oG&cjAyq#35pTi1apJ_V0w<O$7zw<gyxCndd>+j6+dLwu_PFtg zL)TyCPkuMXHZ$~YHCX(jryX{_AFGo#CDR~6RM4zjTVq31Dn#ckUk;0mYunZ5nh^A9 zw8Ny`TPxNw?4)m8-dCOEEF#1ABz}%~vSIG1PFlTcQ>g>B6j}Ih4^|LCJu?8{p5^Bq z$h~81)7;Wx6j{w)0vJJ7?S!o@Zna7;(PCUcd024e>D^-!1&s-0I|Gv+2w&8W8oM}^ zF}-7{Lr1wo&Vx}Umx(>q=A7L$H@7s8$!#us;p4|BD*Cm2Wg@`M>JQCEV_W~;y@i#B zj{a0k435jQQaiUW0%foU?`A};<JgvEhkgu`jfs!n6K2+X0KUg;dmJkxd+<s3S6azU zW<wUpT`G1W0eQW%pKie20r}&rwIgL6s3qxyU(EpdCC_#+WS@efn9Le=oso0*qaN9v zI3*&VKKbC83QF=D5A$M+pG2|I-{8aZw2wLaiF~=v;xd@5&7Qn^E7d6vIz*p~oU|5Z z!K)VrH<yeKwHW0$OTph-;R@AgW%g7Hv=fg`=yglDI(=1?97jIcBWzS&pNlljHT53M ze%?>r$rK3Y#znv4=X<E-f&WT-U-u4V<k3of$k&T&c0F6T_hGGV)KLmekgW9hc!Ppu z4K2#mFU1q%y)K*@zkPGJ<&RntxClI~vrJ698Y;UMi6Z+0OeJL5^JnX2huf4G#GHc; z1IFATrV;ECO+e|)($Y_qpua=p6f^h%(4|H*hktveT~xhkNe8STmi6s-D$=C4Xvfff zrDM`A7zuM)QCUzonpTJuc4|j?h<U8O!xO%-_E<#3)yzyFppeK&w7)fSNe+FBgWmhS z0N>;r31Qn*?ReTvgzvON=bS@95Kw{5>xHF>4dBe=OIMcZ>Q#@BPdB~zRDHtI@k7%e zPDy__j&j3o*42c?J9O&6#Mq9*GipWyaN_vLpbH$^v#(s!_BT{JH|8WkmSnnwAauto zH=(+F^(w2Sb`*T+dX>#|Fc8$iw}yIqV1KO3Rh2hkW3FVY1<%BW=_?m09tHl4`emlN z`5cP0Chk{GAoYI0dXulVcRn)vi~l-;CxzYV&YiIc!^F&f2D5_};otuBX++rYi>awR zkq7`0GU<*PHR@1nA&(bY1xf+=4(`v~+|<hYHSIZ78gXH7{uyhwN9h}<E>EKlm0xbj zXV7%W4`cx4|FC?7H;3>k3Mn?F(x$al1FV*1sdpQpKY8A;tdTnNkoe0Ax6pdk0mgQ{ z1(K%8@@FA$PpnRJx@S+*Vljvs@;Pq~rH08=(v@EP`jL@eV=p`eTZihvA0H13OWb;6 zg}ZW;AA_6;6JTM`rEb~so%)bTATIodV=vDc*+ZnXzgCyByI)E>n{Ip2-R75SzkSs1 zYbFe=4VG6QPSO>p+oJIe0EI42P6na{`T6rx?DdR|_kBCbEuns+xZvD=Ms3N(q60&f z0?~<1?%u|6I>V#myPTgtdc+~tlcMx-v4e{qcTd~#Anqh<d)Pr772H94xl&M08tUs8 zWViwNOQ*;A6YVAVKub!-48{?*VA}ivd+$hbYqaR74=c`PbsLKcMuF@<H!o8MAnBy_ z7U)IK)Xu(r5|i1d@$u}`agNi?l0M9xCA7sl)urJrO$`mG3olW>QnJJc(mgeOc)XFp zF(*xoZhR-zn2&o2gYmI2hlSlzo0N=(BZXmJt&KoSIdCA(@f4QOx}s}=i#(IZG^L%W zd^~yCrzqvIW8*e;lby}*-Q2(X{n6p?`&Pk!WS{u~Fekv=R5v&C^6npPX=-eYAt=&n zOPo4TGF32>8dva=rd=~!e2!K)X$2p3*_UCf|5<))?Y#YOI?pC)v$ao|S?tGOv2lwM z%!Zn!ueE$LE7i`v^wS*qGc%-(zxXC)z#0{mExq#2spS0X(C~1C!g{Sj?djwcUpcUA z(S;L{TaGkRc(=^Wc2lz5vZdW@HlCAxDo;TWKQlk&6+_tCo9(u1O|O2`P##$!Qrq*` zl6TqMByqgMC@c0ptBO|J8AH=SU4yYaqoFfwK=3D79+TZWxM3$iA#p=>;y@ETT)>#$ z+&!L6g|t<(gSzD2&33d22690^{HFORY<8D&>U?H)mylZk)Bt}^GTcW=>z=8R95~RE zu?VyfFcV@A;YJ4s=o^@?lX$TEN$+;yMbFs%l9JxBfKQSO)uF>F<D(@^h#3nSJ$*L& zkhSHP#zs&n`n~A&UCj)~l)7j>jZ}RXZoTrjb?s4(M6FZLN|n<`yBG+sJr0*JW%8(f z$gZFuWi&ZT@w?nB9&Tz^wse!(KLm1%#4xXeyRnyS{*)OPLz-p5OZP#eyU%CXF0GsD zdVcZYQU4>+?!-5?V^GPD_fG{dCY&~Hhp+EUXXhH;BDWVq%)cS?b>1Z#d|*}h0mnF* zlh0y+%SLIfn380p5jMc$<2#qbzq*@d{eJJw&p1F*jSr4bs^$5Sacyr%od;1*{kiq2 zLs|7SNrDTFZWsxo*s{ER3sFpAV$-bDGY-e&x1foa^?ozyOt4kvg|F?y7|K9`A0Z`% zcLYY^4pt*i_U|H6+dX1e?eZ;D`%~BKK2uHqE%Z~pdk>G?Vye0GFb(kBZB$ltc^laN z;Eyj%b2{jH`(May-8)Y|b6H$OPpV0$P08p8peKF2Mek&}y0pShHi7f!%@w46etEq5 zRUl)2aGL}D$K8bX3;BuZ5|%7M{)NTUehoD~exi2{k3F?F(lNXcXNxxTQxFEn)5_qU zBnxBn=|cXvEU|%Q$aH~zEd6w+9~<sB_fNG=`0yoRzkq(44k!(6ac9#=Nx_k;@9}B{ zPP=o=9@nh#X#J)tTgmomJmNkpVqFGmyIHXSXPX$$aW%oLa4~eC0D%tyC>c8?_N*R? zAk&^vrR_TJ%6YlwZEoqNa*(mVW6PCZd$<m)?GCBI$d@NhEGP7vQaPx%HQy4<iZxq~ zC$ID!$JE&INAHwv;A&5SX-Yikq4BdmDwrol%r3ZTc{Dkr(-!7AAtA!-Olr)8`>>Z0 z%N}<rx94-0mL9(I{kGd<O-?t#8X8|)P%i$a_0tPMi-P<&TMj6iC|xD}@YdOpZA`qr zSB_A2+=+KLjXgfXS&GV|r3016ZQ=zW4(|yF`1R6vNaYlbShbz&81aMKf*)8)VHGqC zq7F5Y`Nfg#-+Ej0#6$HQE{rNFfeVeF;fN<ENgiwMm2>;Wt!-j~FX2mgwlo^51#XrB z=l8ar+AJ{Ps0HH#;vb&`hec8V!J?OxRE%1;;4VwF4j&W6S_(Xdl5Av;^1ssDW_&JN zYVTrMe(zoiB{9ubO!IV|Gxv`^*^u;MT%6aRNJgYxNdW!<vqZ};t$lsqm)_(Hv$h(E z3Vmk&wverT4t<wgP}~1Gm;~~eBJKx$!K?d9>E~X82ShJxs(iM7HV3kMb=>~_;)e{A zG~6u5E3y?nhIx<ctAU)%RIkjSQ2Z-k5`&3x7riA4x*7i~m9Fm~GEUrWEEL@XYk(Di zaec)HI08p~Zg^PIIaqGv>%`kuPj}+P5u2FkLLsv*L?j(`r;42p2dS>^&Ld^feMDpD zDOjEz-y+NdSztF03>sCgrv5k)sf@WSC(|&sS&=TLYp=fFEK)q7cxrsfLno7!A|gsK zy0^i%p>PbJyye0Z&G7hrQ9*Em1()!$h5fqg|32GM`P40aT4EQ-3Ir$cKrI-!<N8ay zK*8o^CYx3lS13`3AHHF4rracP(yLo_b#*r8sjP?D?bGG-*?_FAWs0ipEeCsBntKg{ ze}Y+cko67(GT}LP0_FB;CY2x+ji@Xra#<Eg<(VFLLN{A<`EXLL6O+M~T^~zVlT3hw zf%VQSb_%=jt%8F3y1J+lb5}pPgwWITdoNiBWMb!?VJEeMqjJrmw2bgRHf5`IYcGw6 zi7OtAP8hk?`OclaW=WTgX8*=GDe%{nc8YPH7c7I$7V00|ywaGK#?mslVeNFDJGvk) zO?GR;EkT@gRGY9-=mvA=4nMlH^g{7vt$g*VQ-47(SUC18*xbG5_sOd?<K^0_wc0+X zqoQ5}O#P`cZX7!E;Q@JvTJw>y(Ugqt^NuBUB-3WWxYAMYvVOL#2=4Ht;_U!d35Cv5 zwWCm<YA;x_lCYP=aF&V&Y(VyV4?Fi!XG0eC6p`uD(#5hxrYJ#NMCUR?s@=Z6r($CP zUJDlG=`HK1yXSZ6Swc2)I)}a+2mOPY27%z}-E}<n&>@VTRdmql9WmJ8Oxnxp>X8Rj z+IVTh_57#q7|;FuC#}qP{hzclh6U8O;@=ii9*^*r8!-aV!Q02Dm+qy7AK6qXE4yA@ zq$6L@vFrZc)4&d5W0x^(%4H6ajN>nI+fw5*7CQ^?C8*t?9if5;PCwt*y5LtNIO9%} zKXAqk-`~b8$AqX<KBL<dx{_npUmnxmWd3D1VNi_es4!3rt3#&64&wRq=hv@KSCG1y zn_K6h4Y!H0cEKRcV_NPmY|1C~_h)ST<pq*7LHqx}8hdM%3|SpVIldrUFesa*s;b|C z116L$MMZ=R_UP8_3j7rwjMUWiY?w}GC&wq9Hv{lSC6i8-`=&}r4RQtGL8W3eZ%Z6Q zEOD%C?%esvTq9^yps3F^fTA9t{MgVDeaLhIk2{*OS)BYColYjNQv30LqS*zl_?0;8 z;sA@FhW$xui^awI^y($>pfD=rbA05Nf+rY{NCknUFMJJx{pEv@zWn9!E8a%1s3Zi9 z>CB0f7<eSvAd7wRLWKrDAvC>IQ{V+u6-pxuq<$JQah<o9jdY(r5W<)>?7|6!GPITH z){J5IXo#G%f@T}uXgdE6HiOQuD5J$owbI*(C}7t{i48af@G=D5c9Sz@RH3N11key* zac^D7N!S~f@tJ`=79u34JK?y*l)JpV90?by00HIB>IcAIwGI~ne2n2#!(W^T&;w?I zP_E{RVN}k^`yH6a0xBYlG!*5m{!|=&9heMhD{JQTr&pS~AcsgKfAFlCgsLn7j}U<4 zapS_tPYSuUD9dwVkrY)6E-5s@$YI~UZ|@>+P(9-uYnAW%o}Lf~QPw;I9Hy3;K0Y^K z2PN24%l9r_avu?l>QUp%0j);=29p1|c;{y0Tte50kSgT6GpL=NT@-jP{{W^3Wt;Xz zAdgL++*KAe9KnUHHK&d{WD`3exVX}axzsN=WGi6u2}r=Av@oDJgo9Cf<|RLiRfx`0 zmyn}J`$LwtwA5Jt<~IDHdx(o4KZZw&Kdh9LIv8HqoWr$=uHJ!ctmNlfx4PM_T7}E` z3d^xyBnJ$zv9(?0>gq`@U_t;>Qaq+;<ay<9`!ou_Mz}%6Q6B1L)8hUo+S`g>T9$)W znHnl-o-On&8zbzGu-*a!?h3_zGhvv_PZ1u^wCXvG2LJ`A7ihq<XTYalM|k5MSG#uG z0u~?NMriRli{60;vGtuSp9e|=&d;<n%C;pOfu*FR?&Q^{w*J2AhDSY^7M!KO-lc<x zsW;=Nqepw`R%ST{zy;TCFB^kHU`FtT)2H`I5D+ZDSgc}N<+=A5Zn9(c89ewWb84kZ zFbj^mSL$H7jASwZoie}mPMdkEi=^(6v5Ty2Z3Wr0i%|nj8l!}z$VIaJpHE=oVok3} z7l2nm#Ia+dvTVNm`N_hWGP&`2D)AvtOP+LkJCfBTF<`(IyPTcK1*sl<#W2R6e`(E2 zR{gTxrP4x8v-ml+BCB!1m$?b+4;5O+yJ|)pQ+;<v%V|hNqcLY+M(!FnH;cw{_Lwxo zFw89I3K5ME82`CJwI9VW+bfL+D!tTnm;T-L0YB-n0DdbU%Xnx<vI+C49py_6%SB~T zGhVy4Gw-#ul$7ZxixmNPtGjh<KWN1KSx2?Bv>15iVfDk)@3IVt*+i6p`0H$0PE*b& z1f3lpFQ+BI5Mk1^CbzF$(^ZgS%QMUF<947eOlfb99gG|yGr(`b@<HZiHaynsjPD*U z-u9FPBj4-7bRX3i$b<Zlu!n{>-nlA^Y`^LIQ@D*AxQ+4R{B@>;K_ROajGl+5CE>Ch zLj(pr>H8B~l|Lz0nGL<&{7rhw{kj^33&f14-MXcVojDVPF%QS5#<%DqI~B}DFkU`R z6{_U@W~|QCX<=bpHZVmzml8A^T#iMJcep!S$+>*h{>U#McJ<k<&y6v7t|uZAk#GYN zPq0c&C-+@pEyB12i_@%I!^EM({Nweu7aSg$-f>y~$`KL~skm0E{C2L3OD(Bx%=MZU zNr+s{vHi!73IDH^Q?jw$i`03hrV`T9v7gL!UR#0uQ>~kupZK&hf5*R4dfNZ18{Ic! zf#bBlYah?ffBl^z|No>b{mV!E-|?rG+pS!A=51<it;_!V7+MN^WHko^;8H|0^nWhN z{}**{9+zYO{(oDOrG#url+r>WB|;KWQQAm_EJaEog;16viX<({q<y7~5-Ku=P)!sU zCZw@MvPY<t`*~&-GvCjAzQ4!gzVFBVxUavy-}$Jn>pIW#cpt}WJ0yFEUF6Ki46LMN zc-XTp`<JDlOOzA;5R^>1S0(wQbyF7ZbMp+AIX!wnkG=N4zY7_OenH7^6xwaO=6q&~ z;6tmbY61J>oR4e~kr%-chckmBM{_0&$6dQdJ2|diErjPX#Nd4}vXC8qFpqf&)DQsJ z*yqy2HT+2uF_fglf%sTTBuFLhpMhbX8_`J22b`PqOd?rZd5QqWvBAI}d*!xAMqR+~ z0op~tK0kAm%zy#AgOrKMqJ>7A6&Cj4<12f$(SJ&(vcr}9aTiw5Jfa@pBnms0lEhiP zm2t^No9?(>bl6@#@U{7~_R5^b1=dWlYI0X>7jq&v*K6In7v=GO2M!2tkd~OrI-=FO zChhQY*|f>P&$LL{<b<lIP?UCTe2+&Qd68<<Z8R#i_ls_TAOiG%Y57!*u&I1x2PiB% zdwW55l8|6f?X+@nm{v@Jd(YhVnWhIr<?b<S@?!8~prddsLWEXtdF%Ywmem|*>Bpx} zpRQ73)VSxcS#aIF?PgtX)hX-F36Vme!#SA0;f=eCOLTa+7a=-mx=Uw(K7$_vs?x|H zr=*o6PiAn-`lF`{rd3(T?szXlleo19AiH6#YShPj*faQeFgIgyc~;H={Ly3%pwI9R z2tcvQR!HhWS;;eO*YG8f^7O8%fy)*z4rxn*&>{(~cnvm0kWcN^4;Cmw1oj;>pod=U z9C3k<<+i|G5*FDAVC=Et7?UT)nQU&5j109`I@=B&yvf1xySyj2@an@gPx_4l{Gh?( z1!FRh!~=x53l{ufEsHY|8jzACC@xF_q#nI|dF<UTA>(qNs?0r+nC>$5F)sJBNr_eJ z|G1ru6n1DXo{%0d#kx6mzOV%R(CnvNCE$I-B8v%iDFeH>6vJZSz}acA1d#!tOWuO4 z&!^`y!U@D{Z4mR*CZK`(OOWPt97rDe_USWr^@B+g3R|ACTM~$mHb`6^%Grq}BZad> zi&a+ZDpkpON@kh{)XNPLBAcYlu_Lg$noUCZkBeAq(Yf=UJ2D{rDK96bp{H0i!_(}( zr-$|FZfdjA+^1A{@8B_(l#r---^d{eA;XCUu*)2@^~<{e$CKQw0saCRis+4b3>P>} zz^t>^LQ4L)(7&A(+ZV$GBq%?16N|0RgDKHDn#`HQsw2um=)wU}GRMIFS#k|t&dX&% zA@;S|c)=%3u&o;Pk<@QGVg4!y1dG^hmMoE%XTRg;#zxXxz%LimwR2pVl>G8=jkus6 z2R2ah|FLovXAbRhQ*$#vbqAV|<Zn^)tA&pqp%f8lK|(v&HIJ;D<9z~yF?u{2I;T`2 zn1kyB@OVicYvgCJsN@8=gBPdQbB)dKY00^^*XqE)$9>HwBcCZwPMGR}c%Feppu-)S zS9l=Q;<Vjb{nH#>a=m+p9zNXMaL0j)bPD7j8U`etUK<b0T3_E*{;=cuTwrUclDb>i zR!7bMahp`alTXJ=#A9>d(*zD1RTT4qpvl{?R;G82Y3kW~FA83Qz#NvWnS2VY8;v|9 z_h%G^xXh`!$oY`bJ$v)!JY$rBc$*1wUr>-e+*`@n+8@r$eVXRp*E+(y$~WPCr>^o` zS#EXiw*<M1B*;DHs{`cS$`io&tagnth`UorH(y#5NH>#FkX-lvwRx9YHkEVuR_gku zh*cxhSTcHmz-x{kAlmGbjMUm-_mjYZmS+}dXrEBq11%~RI9*8OzpC-$FTX358f#FY zGOh!x6o)Ed79J$XiHfgZ7o-x<n2lRn8GoLK*{VoK&<#dL66>3ql5%AH+NI=pP;1_B z6VkQbzh5)Y->kc{{(`d%26%tCw;6$02P58T2lJJ*v@}-RlI2gHKPT2uG1ZrJhX=({ zd#2xwBpRe$t-0Q*14yP4zPK+4@3s4q`SgnUL2b&Y@=;S_X1A}4=NTqfe8Jhbt2b?G zLMSUPPa7PuH^otuIZw7+omEmO0eSp(+SwN*B{>o^(L-z*Awm99e^=)`($1m>a~yI` z!5_=VRxl4}0;ilxk99T!AFjLn_}#}h)z!c$n3e!yEUSxF8d;Bvsdw)wP|U_o`%&I1 z`^!%8{lTtdVoJ&`-RtmS;ekK>AwEi$yc6hQ?fqz8RAT;Ib6W$i<~?S;!*so0RiCfE za%JY(FZCd?M6#eCzT`StGwK(H5?m114~?0&{?S3Rf?Ln3;w3Zo3-wuRq|2NZ{sp>L zz@jDyX(ma|>(DzY$a@93N=$#IY2=QB<mAl6pMypc_e2>X(~)szEd~Aa=Z$qcmLW)D zMi7!W5XB&WA(y83xno@rx9lS+jYz_sgl+KL!$erDdT<s39P-JipODUqE{sHwGaKI} ztm+G7Uyqz0kpaQlDylgO)OgG|NY6NrS0N`Xdg!U9aJq96jJ^<AgUF8D$GIC`NcZn= z_2z*qPJ45ey}`lQBv?HYx)zyD;payJA5fx~CBaSLwg1|$yQB;j&IddY0`dtfLNN%F zTszZTOZtF}E2+O+77i`t;lm&BxHEQhYrVX6G&14mqa*ub#;a;g+tM<q*y8lKwfeK* zx8?m=oM|OX0})Dw1e>A_9o~KVgoqLiZ(^$(f<+V}xJZ+i*AhL%_=Kc_DY9tsXvdot z10RmXSDTMB340Z9GkbpY$Z;PlEh{}`JU5pQu(MYRpB$kZYqIFKgsh}JL(avus;j7! zpXp(#>>fTL!@hI4lJ)6W=h(RW2O~v4`-_&1eq=wk%ir`k?kPx!kGzr0UFh?}9n_^u zEH>9M&2t5S|04uBjT5<T-oYz!Dk&~;*MgYqCVaDZbd?7yA^Vj>w2G})0T(A=TmiyN z%c(~(g#;Y*t$<>&d$%}r54a(Ms!)@Vri9P&eZ>4&Y}k(vg+nR}9t!gmQ~Q15eMPPt z(jV?l=syu-<gdTZ7xSBHXl1=z2~81jK@SND?voLcNmjk`)Q1*dzAXHptR#CapU`Z` ztg?{XKT{k-#xQyRO<8wt-n7!}&>)CnxU_Mjw62Wv4?*pzvFPl09i2~8zBXP*W=g0l zjwBx+pOrJdU1D|HY)9aF!VM{Q4b0kn47AcmpPX}6o7K4-@7Xt9NC~shi2bS)>TVC0 zbWQ}>VBFyqx}7S$MXwsS-nc^jp#wl*sM$q5Z5V<i1CX~XYBv;Ye796D_N%ZwWWa!{ zWp+-T&Y))|driKRX_5w|-TibIx47Kr<`0$uj{Yte;l1`2usRNFb~HeYrHPk3bDA4E zdF|0(EUMJfM#ks2OmFVgH|DG&>h<0Rmsab<9od>}x2M?ABX5D%Y3qx32YW8^X=}W+ zR9vc4v~aJ*n{%%jith;wME4qjaDL-9FHS~-tCV~Dlg=kx?`WjI@%>b_fn0Fdz=Kar zen#s+5@!E^NzB%KHK_bNj-NvA_Tj~yQDere1>`e`50Mh2oo<!chIR9rAP1xjz;ZIv z`cXdoLnv42BXbn^+4mnmzNWvm>wDl{2VoRI(8&5Aj_>4%ITkiNAp8eAhC~T>!IZ$0 z-($e&ZC4&!jEImj*d;M&-ok~Zx9o5QZ6>N{7xQaX-nyB7Bqz6P=flOOpKJK^={()y zG25IpXP}HJ9P*g60MO|F=FW(_VWB52@85$|RYrPRu08?$%NZ7q(NP^lTe<k(99J^< zS@9Ea2ti|qU5b?Pa+U3Jk{Mg0Kt-h?Za<47eBxZN+%bIsCqD`Sf^z%y$EhmPAlVCK zYawrIYVhgh<LcFm9d-D4iFmu*nN{vR@9Mj{zWJ{ri^GBXWqxMSS}So}F3`{cuLknq zQdqW*_YduJx<vL?a<+fn$3Cz6gl(=574hzovMDJmV;S-9)_CW9t6`fim(?^#Yz`I^ z27q6rI(BQTaZZ&?`D^n*x3J(i&xblkX6)e8aEn_NJguudi9JkFeqs_tHdvnaDQ33H z^?tuR{b&G!tkAD;2}X*&g+AN8+w0e_{X<YdT1EEnDo<0y=}uD?=crZJy6K%`>M@3P z10%XuE%)&*`op6-!~|Y-Yi|NV0MX~>;vyp@6%rk7k~07l@xq1e#eDfumG|y(v5s7P zc+4)><gCdP3N5nA=dWLzRi!Rpv4Us5fF{G(Z4|=_tc%Gmw2^HNpSV*MviHn4ID<vZ zk|nzA?+Ov?8F3xLdl;&KWpk>W%E>`{lVT7yJtaz2zvUBxc7jrR8-PvEJ2t-;Txj2^ zZKGDXe7~R~M*^%yB>$W)RoP|Jc-d=cju_`gc(2YfQfy+tQc8@9j@Gb0HBw%Fs>iPR znSWj37bX0yV7bY<P9<R|rTQ3vA(N1x-l|2Y0cQz4*PH6|I%CJaKr~`*9ugUO2Pzax zjC6APmrI$GW_qcPiWd`}Y^OPkLNSd6_8oyD`bqOkp4j2N_XxV3$VfpuK?({f%ADpb zoQwf;cPh}1tBN0&(Ni!$rRg+aZFO3_cnw`NouRorKT?ND8ZIBHep>wt#0`%|_=O5k zi_q7o+mBm$!(T>2#ZK4H?)bDVH~ZD_kXTlv9S8`u8D-vadZm1KAL|Lpaw{xsdl{;; zw(%StD$n}t!{bc1B!>s{m<yBlm(_N5cX`k3`%;jMPw^#*DLvi6@aSZEIOKcQn*Py) zxe2$~8LnG(6T7*=Zo%S|lQTZV?);@2H$u%i1t!Grp1*P9XL><lyAb{Ql&@dL>gg>i z##upQcK+XF3#UgIe!GD2(a|yoj1-$o51>#<e{l2W!RyZiShI1-Ux`2!6?2?AZM&QJ zt@L{B_;2|>>B=hbbfi711Ydu+#$ehs_D^Xut#Y`inanHRWA7APXSv8gqG`{yK4F?n zk93Q43O4n7B+=e49*u@Nk8WSh-!4;m{P@pci>Tg8?q#-rC7EmC<8ucpTi>nDR0tpL z^DQsPpe-<{c6JM$+N_<7S?Ugj_uE3#>H)ZM3eyR}$6ItmCyHCEZqMAx)XnMrm*XI# za$39VifXO`GwvG{Y-eS+rHevY;MG&@oM=u(n?~{MG9l=-EJcEf=hBouo9!OS$;BGy zXj$GNsN+`<nN0&tu60;M1kzMfwY$s!j0h=fT`9NQmOBT#;X5eay82-##^jj`T`UG} zPjFUI=*N)CSpCyaKLM%~6cljPA-qt|EOh@?W*_zXOxp;S%6)fs&BLEjgYFrYChK)` zZ%5s4**hc~^Wa5BmM%(*q3P$0#nlk1#U27WBDsG3gm-J(X`5a0@0V^V8QqYF3|XKU z!~M53zdB88c$hw|=aer}7<vYsPe@owFABdpSj$<;?}EAK!F`m|{0SMePWjt?>{B(o zmc_O-Z`c>#$toxRi;!U)^Qm`%c34$>M8@$qE<lWFru)(z=ne-BI!xo6o>$zyqZlC- z6UUDi(4wlBC~;vW=`L~*QxWfEAbz-Pp5~`UGSh}1T)A|qg12!Px&*_&L;#L=ToMuE z`bi~B-L8tO%5Im%0&A}k3d#BTo49;aSi^+SfC@6CfB%{9g9Msxb7c5<tm3rcM~}KP zV<#uqP-oJ6!^&-YKz-cu<?{h41n`N@wvyq!YT2V;OZEZhDSeO*RSJ6xPrAdIHSzPt zc21i@+lB0d=6}RMqZJ}kWy#ukaB`WMnLzJPGVXG0vw#EqS~DdvaT&TQvm=wzztkKM z$?UK8p>e48nYq*a^n2Zj6A7LmdSJ)JhbsG}5CXiJw|z#i@98eD;&XGKJ%4VyXi?$n zYQ42rkwZfi^F*QY9G*97|It6=a^mCVV_w+M+e&y?M_PByeWRRjQvNqBLsG;U6%`fd zn<-`7or)dPZ^xyqo_or^rFyVSZc|g1EZ@MU|CE<wN5U^1Pc?-PNn}u$bqvEMg~F^6 z@>OG>iV%F3?u>dqJtISgbp6=tk*2JNSWfg3^tb>w<_aoQL6%2^OlW9=tzps^#(hEi zi;9-aKt@^Vb9M8_{#{P6AcSj@Hic&gv6Z2C<D;Na(#eUMJMyW(r_rUg$=|gA3G$1j z<Mc-J8Z*WsTdJ362!(KIP9>OSzW}s+@N>+;v&#C-j@H^E<v|KTO;-X#zj62tAJ(^V z_=q7RO2nJodpm!r-LSb_4#ztof;>%@FD@Xx9y?$!YtgQ@bo09azG;X^v1~?!?poK7 z#QY?aG@mII#ycn!4xHQY$IBtvns*iOC8PeU^HN_bN}lBszbgFIyz3hR?q=yxzb+bV zs5=eTL3;oslf60t=;0gXAF}Y%v<ZKb@!m@e>%IDC3)t(R70kkx6)bkZ_d#l34)<gI z#!1Ed*;kKIi*RXQ)|nMIi=5e&E!nM`UACjKt!*W46z#0t3*h>&Uj6pIkrfE$A5JZk zz^06|k<It-OGlmm<@)tI8-E@|t?~?h`s=RzbyQ_rQO6bNY7Q>%6rD6<C_fLw5%}~c z&v4akg#!i-EN=BDcJi-S7;TrS9dK%`y^3XzNVKGW!Wtzx6v393p)dE_{zcr=pA33? zp6|$1+<5lv9xPVt-rZ{8)N0cX`-YUc_tf2f`}U$Xf?cWMhE})zR|wEqv3BhkuY$cV z#}0!1)gCvl-}yEEr8P|H6%QU9DW52`_?lC70c)J594N79?gZ<8R$QJAm)N&CWIA^1 zrZ#F+WTqjx+D3}eB-Cw;(~uHJ{~Q(`Zdi3ODZA<$Sku<-)oOeens><nvKfsl_cKjU zAB6ATv(~(3wOMG(BLHgl*+Ap2XBD%R)lES~0}vD!r(a<MjSFuEMCNa>gipsdL>4dK z&OH3mdoufLnS<yWiOv>$b@0VevzODyBZ?7l4aAt(B6N4M8AI4qAkRl6YcZR-A58-g z9<y1JT;r`{3V{TnpbXkT<>PLX?Ag=i(+iWkZai<`{JgUeyZ8P}ot$#XEJ*(eYPxjr zXsYkFta90Vw1P2{H?PN9BQ*S8b=KVWOk~t6TtWNy_lyzO64-X;I-brlB13N<69hy| zmNi))k6oPI{zEdKfxmHvP6PQfofw-*Xh<lgFt~y#=*^AoF8?JIC1UT>XU~XJs?n== zU9sXc4p;*t7Z<hM(DwS1XXf1VGmFd3J^kNl>StpJbUCxYo!ZOW-?PV<VTr?vS?DCo z-_$xYIR6>8qASe$Cc}+V1;{o#)~F`UXNRTosPAHGnh{*4*IUWsDru#>DbGIiBgYR6 z2YrO;kx5adHG!kVGFF}5R4`Fw+Q1hn(=Y!&^WVqqtj_y~&~h_TlFG!ZzIt;qCyn~Z zkxwok&&m>>%2TVN@GqyPD$B#@D|1S4NFB8P1@4v&dUU85$pd4PkTY_9NPXM?*-ST_ zUUr7M<UE`VAnbU$K<s&cM(WEG+zrF#lgjGncTtpXHDuC8{qsMR6kWay6bR}RJ8^@V zdnbmf0!N`^ZS(z`AFbW*Mo$LZ&wa{!OAkT!2<ua^U;he}$c+7R>T(m=$IBEkuef)* zZn3n!!@p&T(34bbc)l%yuA09n=vndyv;fqDZk-^qLiPfV{yTSsP#A!Wh?Y%YC0?$p zY;B_ok9N?HEa74IzkS>C-!nnZ(FUR{_-uNP+Joq?iW&QJ!wG<8f2lgtSAg+q>%wM- zNQNsZW;E@w4!*0b;#E)Oha&KoS{ogDDJPzOzWMD#KQwCx5B8ByLbpUxlXUf?^z16@ z2os08V@(u23Gs^+6&4jM0OB$Z8@&BJR^%-aMokVY;q<}O8%)G%z$HhH9La-?I4!d^ z=}w#iKikg#<FC6eES_&~|9<0Hz9{VPm50mc&M?O~N{AWKou+9ruf}#RAJ#AE)-l_$ zda(|$q7WU;zT?xrej~9-{Gk~WwYW3UPgm$QygB|tMan(D{PMeZUHS9$XBa!5XvB_? z5~tWRYC$<AAIV)jdH^)nS8{$y_ULQy{!*sO%*syB%`FYa7`9Az55B8tbaK4+Kp7b! z5rY62##fI!ovjO#jXG8jK6zYEUx@cgYGV#XLFo=5LB)=!?H9eC$%**k%^X~`f4)Mx z6ZWvLYgOmi_}3_Vi+%Dm<sG4U0`)kf|9Wk^E|uc@;yAUVvAMalMP=BqY1PSpTW_{) zQzxtQ4UzabzI;AWIO{LsS@<Oq?X0Q=((n71+yD3B6yLv{{|D1Dj%;UnL&9}bk=kaF zMN1`+BeAHOhec=fXd)1AEK?#^hSVQ)5AN<+azXL^h-`WDX7$RIQ8ZC+vUywjF&U>X zZre3J<&UdSgWu#Em-Mjpe(IbdMB@o26;c2{S`p0#U3Isza_+o&+4GMPlMON`vg}M_ zdk0&OQZHf8I_f26j91^7R^4Cj{`Avg)E$AEEgzmA9Jgm|)Gz$6Jb!qL()&dVpm5#s zd|9E3$I#)!(JsI*1M?y-TeoX+BF=>zi}-0>_{#(U0Ibuw*?dWVa)=B?<_DH9>Zqzd z=eBey+J5)xix;kLZs&k5X#I=dZvEO^&2wyd0MT=pV$px(QD@CCf3QM7Fu}B=n(9j3 ze?&~QpZw#z_}rD2H<p3v{>B>t{{d{m35IIc$dEGiKY}EryY+QSs#j4Dum3B2!nxnn zOj)m7HUZ3xc8FhBZ@I`w!es7>y11tC%^ln6cl^0c!4ef(TuOWV@pV-*TscVtAuYl( zB);P*7&SI-9MAssapN>tpWYTWp*uyDS^Xqs*F-_U>nkh4WLyyglx%%?G>91>`UXci z|NO@AweX|x^1KMasy$W2R~~odXz7w|Bwr#{W7|Tne*IE3vkxA$a@(8U?n4n*3=jZ~ z+%Um2$Vxiu#qfjPNFyPCE!Il!Yh;|n`A;yj$yiB|9F9{EbS{O#Rpe>5mX->Qf-DT8 z4}GR|@;KB*m=P#j5WFa=h@<YkhcwO4)KRHTK4O=`R?C<hc;7^TrHc?<MVgB?ZuNs7 zN^4#VX%NAKn>4&0``=EP=DlCg`636QmUC<~LZfP#KK&B*yWzo7|Hi)-FWhV1Xkiz~ z>I{xcs9_F$K6dKVPE8Z))|{SuG}yDy;Qf>2vmr8J8P`PX8`gddxbFX78P#8+n&f>* zQK8Akm}6^eEFLvx8H*dkuci93HusWiFU%t3t?Xl5V^P7;@dkiDnWui^K_V>LKK-Y= z*QAAKPZ`ig6Q?5ClRo`B>G#BS4i1m@9`*TD^=0nMmI-q#`5Ft!JMr*IgaHPZ?rnhP z4<Ai$DB(wsvT38xPo?$k;+e(3jT>fVWwsN)2_QdN&q*^1B_)5IHY`4h#>k5v3wAm! zHVaDUKFuG*J&6Eev9WW`U*A@5+R;R1bv|DYtTRi%eIa&vEZvxdktZO_<4F@TO5SAa zjB|F=4g2&fcqp}=u~>cnk8$*!2qbV&A4cpc=u>DX#Giwp>FfW*|651^4&ruhM@j$^ zK`K0hwZpiHH8WSHU;P&65UEsSIdJ>(;QT7LTN%S*j+amHP9K>hmYgwGU{G4xw~M>5 z#O3W^$UrC#&}$0Xt5@oRu~f={+Mq0?h|=6xg{B}zEonA^84b92pxa0_wN0NKpnit> zBcy*G(+Rk$p)Y&^&B3Hmx;63eVP_A@A6A{~E4M#YQB}-uiHl2#qf54h@U%=#oYKR5 zf{BIed^W!Gp}31R`fmS&ylgqqNB^8~8DN=$92{bf9PuSF(ZC3HPAL)NDMvc5e{iPe zQ?}GzX<tQ*{@-#GR0nOp{)|x(6glPVsN(TF3ZeTu^DPO~;+E3ysKrvJikD+!Cxjms zleVbzWDz!G5nAl-xk+1$jf+t$5S0MQ`C;M58RD6ly<_Cqu83#GEOR?6ozE=3(1CAY z(Y?!zKT;mB<Z1?_(0Q3tM2_B<ohz4IgqMB_3)(43*_EsEjMMk(kDVFw=9Fh$+WUi% zB?dQEH|E=Pxpk#-h|tdFt{50K`zcT-Gz4_jD;8g^UcI{5H4Ifh!$8vI74%*RE10G} zy?r}=-P66SU<wMF1wlyf26UJHS!ArGtJ_5BgXHGnL;Tw-^)~k>995TpgcW4xoY$fN zNDdk|5-^!ig)w8^(Y(TxSgs8N8?$bt7kd5txi?oD>X(~SP!O(Pb*09Gcso4lKJ;|3 zq|~VHopyj-x{XukGHZ!z1+-V2sTwVDH0|xSZSB-#f{LP9Mu`t>>C#8SQ1jqi0nZ~? zf~wkC_bX=Y8rpmHNv)r|MeytEEFxACr+-{B-7p<|Q)A=gEuYQL_6th_9P4es)GeJ{ z&Z7r{fsJw2wenf#;!gbdV~EPa_WR9Z8}Fyx*NWR+lERMep7Kw40v`#&8}_`{Y`EvQ z9MO6D%M(1ZTRy#B$P%gXiX%q6K(a|Zji_dN-ES)yfP(c0=PSi3A24{PQug?rkY<mz z3MN?0PyR46;}7eO?W>yS9h|$iKEcWekN+$$bDtW)>MR=J@>Pr}v!8e;4qpX-wAp3k zi31`Ex1k=?IZrYs*lCCtU?&a4Nz?@Z4BoRRYLd4HWIb@!o=ffA5tXCGWpX?JwRIxP zXBryVMDiHQ6+MlyI9uItatnL5^!4=#%H`ef`6cg%La<vp3UCsf7#UENj1Y@XyAPIs zLS=e1zN9o!BjXF-x^TRaYlc9WW)`{bIWo3{c>xwx2xVc;y}|rN&0(}f?<&FWN*+K? zirkzEdc?TGxVC4wV%2=Zok2t1E+jY(oPo1|6PF!k<%K?*5kBONvP-m8+qP?G(Ngct zn{DRJ3*7pfih=sG_ifJhZKz)Jr?<#&SfU*Mz6%j5`KRX(l~S=g&I;NHsd}U(d9gR% zjEx;sb670Q{DCKft~wc6*g1Lt-V**A2k#R)Xs~|Aw&FRT1#%O0n0xNztN>&v#f}R3 z2LNmqqbm@jh`!lyLHkb5Blovf_o1Iu_}EaJQ;?+_1`G}FB`P^_YJ+{ctn1?^$y4RS zSHwH~Q6`UAZLSmM`?l?QfdbJ?O&&=C;XChOnHR+A{74aITIjv?1$B#LTY^ds^uT3) z^!)j+JQ*v>qLrk(b(Q}ctyk2&=XYe~{kdV!U))G8ZBvehUNW2vZ!MU`t<Gze4%_*6 z+VIP2_z=hU1UQ_;Ggwq4L`G1dF^r|ww-C$D_1p1G=<{VJM_+6go+!Og;^?j(1M86? zLNM-`M(>rVlD&MH^0rMvP7+x=^dg+FIj2q`q+1DM8v2>XgZJ;sa1>e^<M~M6EiuJc z8D}59GmS_z(p!1#IU+5NcT@16g!r2dhi{gxR~}Z*pcIhmp$8AfPV!b5nB^YZzPvAL z`E<k5;;pf(|Fn94B;&04_|}%7>(7FeZvkr1;fTxgH{^v>$t484BW7%c>f#XZA|XTQ zmk`5)PU5Dq!)puf^GXmAY`cJA7_>jys|`y#oakY<Ua_+661vN4I|t}mZT`Kk3M&md zcer5V;N!&xmAWI@Xey~&7#fU&AJ!%=pN+f1aN!6=e<}rl&sy|4)N9tJi1j`6jZjn< zk_-8sA2r(i;oAlc%5?WmqI1bykY}k$Vz8M<osD~8=$&;{RaIT(Igk23vnM7MX9Lfs zi>(t^CGDBBWJl{@OHb`%Y8o00gSjy=3q3qE`z9!UyC}6NnOV81=+6UsZ2k!ag1OW> zM3#E3S%Vv%Q;Z0Gl!4FIj3)>zbiv^mGugCdz(&k@j3_=|ThB#B*<wPVdqQ8IGCRs3 zQ%{Y3-d|fb7&@#NJwQMn*Ni88)N)Ar%dzcpw-+rXd6V#n^fhXrTy+K8_I0zfS0)nR z6pDyg)>6`3LZd%>-v~NlMd7--)jm|pgFArwViu+81mo);g8Y$kanpDK*M=}+8YjSJ z(Nh0x>lx-cGiy%1H1b#{YAl{rW#CdS>6J3?=>D8392C+5cjWCoaKHe}w?Q(=y@VXo zTNF!#JcDTus?L(1)@E}Ss%n>0u6Kf^mI7T!?g<L&<1k0G>*cGDoJyfOpDIS~52N(} z{xI3aMNA7Hl`FnS6yuC6uDq~>FW&rmg{)YbY;vv3{JwH>g{Xvt`UrOpcD{H2ejCk( zqm{pQjgyNe+6X%YOchc~5L;mz1ib02thisZ7EY`S*9oIJ!<oJy&%;o&m+soQ;N*W< z%K=ph2rV;y&2RKmN~>QbrwLzpJfY``y^FI{X6;n*p4!p5U1nw<x?7piiy0#dILfi< z=noY(W@5TylHk+I<2?BH9Uj<a!<02XsSNJjn<Cs>Mkd2q>L}3s1hrJBnKy>clrURV z*U!?=@>Y~xrrxzyI979kV<m1voNL7EKo2scDi+t>!L}*&2+>*JBaxBH-ge<Ws=Jq4 zXXzT{OtOSn6KvaV_1bNVI4t*@S`Aywx9WWV&)Ye0&z^yZo7gam%9#g%WsD@HbChW4 z{C;N>pdcCoo+zX#Ar8Su#Cjsd;1IUa0~Rs^FpES)3@=a|S~fn;0iqCfC0RMOaZ~*U z^w?D&)cWTRj!I^Mm#J#aJ@nns#liFg%UV8!QuLP!fA1LA@8l^n5(B7r*y>O7Xdrk1 zx`r2-K>D?}_k;$8kN?X;i?q<N8oA`}sXL`lZAE5SOuzCo!&ZhQE>|9v+b!L8qG%sH z!tdYfn1&aaoR=-@Gi1mpz3Uc2q7cz6WV?QTw=B25RnYs8Og*!1jIB?FjW=KFB}Yw` zIVc`~PjBdRT8J4H>3%EQgC&>!i-#AFbJ{KF<oz^2VBFME6EWD<nWPkbRS=dz@Xawx zan6s`(qe~$xpdjzxF_qZsY<7>w-bfZ6WQC_ld)J_^n~KUmN@Jjg|qJb8kg%;!#&Fo zoY?x*BM)7GZ|j!{USId6rmlb^;xAr00P2mzS<gk3hWlA{Q^5}jiCVdiAE40$F3mz7 z3Q*7+%MKdU{HUnAWI*C114ILM6K=%Y3U{TO*&?m(>82A!r*zW_Lxmx(uJ7=cG`vjy zA+Ra0KReLh^xvAX`+jqJdU(kB&yTwM=<GOB3M>rOmGwzwc%x?94S4ML8&Geru(S^3 zzNMvwrFf9RFNRxfYl6=uZo@xcs>i;be-K7{LffLtzF*()K6d1XfoZe;6I(Un`K`Et zC)c~ZefyT+Jn8dgcUUe%R*K7oLoZ*h67#EI?LnTZ$^?_Y%&6i5Y{yW~{ahkm_tYpr zY_PGPZ0;oQ3e}{DSLR1SEK02S$Z0mUW-X`}E>%@chE;&2txH6pgsBRBdu8~TOQ1z_ z#7~?$711NfJup_=wV&7Zs;}XD(l7g;lze`45?s?zf1^UbKq(>b|D2WpJ&Bb5IQEw% zJy;ul<jA7AbCYWWXZQ>%ZJ)-@N~4d;ztBwnx@x_UayzSwE_%#l1FXERxZ?AI&wVp> z7JWq(p^aXi`$9#<=wsF7+OcsPM7pv(f{#L2fDP?L*kNsf^FAp%`)4!@Ixs10QUwe* zm*-ICL1yh*uPYDVZA8#Kl3a@6OY{ElZ>G-)ACmkp<WrUGbMwjrT30QeDUS-@DJmT7 zGRMtk$cnAhnl=B04=U%A<vF0UK`J9~ChX6H1?1U6Lq$dlD{qB`J)E5Ec~l!QqLi}& z>J*mq%9YgD_Y89CImVGHEKpm+(EA}^DgZw%I5BXveZz<Ey7G9!#EBa?^a>@C_>%Si zI>iMBi6{khU(xiR09&98;JhUZU)cskb*P=i5KrXV8gL-8wZR?M<Pna)f>qE=H$v(f zpzL61w|@<vPZI}zLL{v0pOlhPxTztKv!J>#rnH8z6Fo)6>1w%<CLactqvTDZARue( zZ2)IJ(X)0malG_7=(b*byG+WYh*(%!vV{YWseth<UObxY?{@`e0@05shDTmb??2?% zf5?iBbzrH9uWuommy*PjX5Egxmz}#_(Th>&U}U|)ZPQZM6tuW)hx)(9+8YX-41WgA z+4lTojj>}7+TB(9Tj2b>Z-MhZ+5uuU58pRt2Q6G(nZ2|1lG}grGJd!v*m2BtYJ0Zz zRhq{zGFJd87R`}=*2bL(sat`M?wmd$yUh;#;6FyOf1^+IyU>0JG3vfO$tu2uj#|g< zuA=X12M*x|-Je(qFX$kMW*g>z)yK<${eMk8L|uRm$-M^>8LvG{*v#-d<x*Ya@&l|v z_Z~e~F}=tq<>%|t@No;F&6eJZ6#09@o)BmA&9Ilg6@q~PTM!nl;2XNCYuuisogJ2b zc$s?4*)ZvBce_Pn88?3iaK`KEsx`f&_t(9)_kwd}wo<@F_Kb#YdDGz^DeG=NO{=6Q zhX;J`>pL&Z>g~MtJ{_%Jqhi>+q{km2?HDLT6DL|{tX?*uT`oJMabUb_{DQUu%(m&{ zYu)lA`a?(S=wM}rh6(do=FrBK9I%UYuUHYMN1`PUKVv9U<IN4WGE+{T8i&V@&Jkh_ zA4S-Ll_;lwXHt?Dok3;<;`q%+myoZz=2cBv8t3b>S21U0Tvy*I1l*mLxZ+QC<oVy@ zuth^i)pnkJs7XWkFyFnL1)Ah<um2mF*nj&y|7Rw%|93;W|4-h~mKm6x<OU78m$z;O zsHo_DrTdxd@sDDs4gQYmsS}$8&!df27)LgzCy+4FfGVg1Ef)JN1LJ)Cx)pX5oS<Sa zQxOGp$kFibJOnyAD6N~aG}2Oi-N%dhjahkvT$-~y3qJGuuI}Vz{bF0kc3$g(|FRIi zS~<Sq-rsnTx?v!gtRE<8xeao~D6X~c>1^7Oyk0`uG?FIW&gN0Gs<a#yf==mfd>hB8 z<m99jRHV!1IJ)Ee`gsywj34lP>002m6M)$Omq-k#JG~yrU?DM8{Nm>e=A|gS`Srv! zo5*mbf`jNFS#U%mw58<@dJJu&solyX)9-1jm`qjP?9ifxzysN#%AUCQ!#a|Sf6|$f zY5B^u<%Z&|76>9D6W;<VQEk~UntqjWj9*gC3BVGY5B94h>WDqsOb}${9HiQi`OjA` zP48&d(XG!m-Nfp3TKa>@C;5+dxv*<evzoWdI`5b1DS!t!-!y-?@|gXho^U}T5gUnK zV0NaTPKjMbpF%Bv$2c52eyxGpeH!hOk_;GCJ}!Jh?`}Jr-2FD0RHU>wv|fMr5B{ba zg?ssi3xm}ELC;LBmu)}2?BcNmzl<<+U~FI&5Dt>S)zs=h`X8MIcT1_Yhd?09J6t05 ze5rGYUYU&QN~NYKwKsuwN8ZTfH{JeOYa$n0U%g^YosNo18g^qE0O0&xo`EB8>r`(U z_Q@VNs~IT{kx5ar8@row6bC+ia<F7UT}q>fguyG%-fK6<jQ0Jq5uMO?hPq{j+dT$l zz(zsQTgK8?2|0H(xtn5}ZjCamQvK8ZCX=e~yy5EI5q^%{bSs<dlyN<SGpXz`kKNzH z&hq5*znSUQ#<BG^_Bw~@xx!hQ#)C=I)YwqBf#?&C!P^`A=#-D+IeEowDlG6KZ^u7` zelOk}ne-&~mcXa5CL%C!+KS!DE&7rtFZ?6_`^zK7AdE<jTYRxld3)#O<h<wkp=A^3 znsQ?n`fa2|$3{kg31(#Y|Bf9xu<ZdyFZGnbn2FrZ#5ZG8_0gHplHhoAn}VnAE51p; z^lII)oN{nM7<Qtfp0jf3@na#50pO;#U_rx9y8v6mE^}3xpFXg-nhi=NC3R#n5Q3+m zpy1p5O2=R~SVn^DDE|<?*5a6^<nyIzhlOjpS}FQ}Uei|<|1rrsdo622-+?)qbY}kO zV*t$b^WxF1sZt|_=NW=XG<mREak4KXwZQ2tw>l3;?jHhyfnlGw1nOY8J$t&s0g_he zozV6)REag%czDzU(sh+*oP*o!+O3<%+O@U}>STaAr^NXLhzfg@Sd~9~U{l?xbLSKD zzkb~&z}pNBN66#ge0?O|(0Dbj&m+@0>hTaWbGB~%Dy)}a@Dx1w-Q5@iqxhEy4hu`| z_s5yGYo}-bH;-Ia6Bp+tDrfw93|k=!s&`)-YAQUNao-a|887!O_{)ptyMx%#wSrgR z+4b|7B<Ph&F7+QdUtjz{(}7!zP}{a`161AewdE6h8}X<dh~x*p|MZCvi}Qu|66Guk zSL*i)k0JCpIyxFbSSAwx>YZ+1{;M(XatCGUT*(}do*9-1BeBX0(SalZ&|UJ>qLLND z(gpqqmhFEU_$v2{?mCG~W6kzipXwbmd+vHe_3IlX7W%j@i5?7w8253s_UB-<NPZWD zJw|>P-V(q(2xaWkm>vg=ri&NzK(#ms5)8Xsp+3JXk1ATqcXw6qmkiDRO|Wao&%&;- zVoX*tz&Dy$01~a#LM}eUf-%QWELE`GU4>$>7AqmtPGi(4LCcw!H=*n$!toNd_Zug@ zb3E)ACwh_~raEGEu^nq&_=~*w-YA5Bg=1@L4))Yds@KT$85outcl*IiaoDR#a&w$g z7HHTwY1K@O{x~R~neG15KbR}y#sgDd`(~cqsyUzsNQL1Xvzy0{hjwtDefBv!uK6#p zxnmGC(s_TXtr#|b{Crtc#op}u(qAv{y!L>#yGi)D1dR>$;kB#84c#n{t96L&8C~%3 z+4^9yw8_xxtP9TjEPv#~hYu7o_Pdd<H*nv#yC^N_%40lk=g}O}xovH%PhREEtkV4X z^X}E>SZ8$$-4WUWRAA$S*^u+{=3@U4pp(Cnwl(knK{nNSzlL?mxbFGt?%e8E7W=<Z zA7-V0SnPy+@9q!AH-7$%^R<--dr^m0Bm>k17XD#%xUr$4uDfo4Z6Kvz8Y=LBk+5B- zZUAbTZ_Jk9RyNpet};6kv+r#Ne__lzs-K=)nigIdDq|dD8+Q8JjngzJ!6L&(eRj@K zZXA(XZmREpAhL9GhMKV7X(cBx9XBDkhhL^r0U5Tixw$0gacJ<~wA}7mt8KyN!q<pf zRo>tH*&9k6N4o%?%$OlLP;<I0kNgq1FDeT25gy+wRBh%StoB=pm#K8s;mYmbx9?SX ze8+!fpL!WE;a>Y;!ZNtCM~}!U;Z=Ye+F&<82L{2HJ(>Wu(?^gj)4zWt#Fb@aZ}L07 z*$6ds%q{!`teTPoHH^K_;(;eH+5ZUcE}fx03uuCNfJ@3O%1YO*@R~p`{epx%72fC- zK+G#wzH)*1Ha=KIBqS--Was9xk?;#yCK%Q;=Gj;zoMC5a`Vw&8+7BwxqPiP*Bd2P1 zuAI~Nl@I<+Y&`_e5U0I6D5!uL6ue(4RpHX)3#2Y1yygvXUl(j?%zoK(G0#K(AiG%} zpIlu+r#XFn@^69ab`5hax7{_jusA`KDisA0LEvV|xx3)>B*rDzFS58|Z#AK2kU^mJ zVbM{Ho!eU7chllj#ku#lDqOU?UcO(;KWV&=zWoD53KxM_{iWW;EMe&+Cs7`6OLTnF z_kr8SRa(;;B#M{GXqQ`hPkFs!=QVnnunl$@=Lr?5EjSdr6ZA~V0E2?6q^*HRUqqGd zjHgevhBRZADt~&a_3}*b{mCj5(oCM?5vItXkGv!gE(X`->EU7N*;vuGK(yFLN2;Po zW0;PQl6L6k<?%O7Of-{k_Pte>a3Eb-efIg^Z|ALk005Aj900uxK;2N{+@u82`?*G( z+rIq*JTVGVVlE{ezN~||1wO+^{}STxk^Xl5-|Ff}j9*vxv=Gb_pSQA-QVT7vtmKtD zcQ!!2z+>WsQk1_`US7_!LwXVnr#$=Cx`L$4$ml9|Ew11Qvs1_dI6uuWP8%CHlH|im zJ|Vt{6a;!{`uBn}XUs=!$@mAU$og6d5SysOhu7sTNLQmp4XTzdTAqVU5jHY_eiyH# zf1BxFxU1LX-3J_p7G4E)L8r`#X(7Fi7Km<_$Bx8nG%9qSOEFvc`s(HGNnakNvw9Kz z2Uu%Nc(`!f;i3?53Yp!pq%)2hB?!@Y#`zyUvaq1rPEX4Sh{N87>Z+yR%#mpG6&3wA z-M6wyTbYUAGUKI1uFmFEpMjTDjdqTxZ1&|5=l&b6tW1({E?0nBK?U>h^dz=RGhFgk zpQqPiSnqlVRS^;Y9DaD2$WSd326Mux#;bDI+YPeY%w3=Hx};gz@4~OyPP0gE;&8<0 zM27h|=khqJh)LnJNHd>s>9`1p1X2PCPXO%H(bctEAok90(+8d8l0WZ!_bXDTjn8F> zZ;`Bhvupg!j-vMcf@;_)WNVvV-z7LfJ|Z7;t+3mp6-|6xpK5{LR9JM<iumqCXK?<! z#gBPVagOtdIvqT>_VElxF1jDKvP8thl+}1VBZZnhnK8P_Z!V`fh^nBrty7CK#k|rP za2T?AwHY}%WrTR|PG=WbPL4=;5~l|7TKvE#{0~laR;A6guAO#pRbcJyEBwydz1C!R zx#cj!75&09lN7Ba@)PPu%1rjj9o>=zpkjVhbfifj8Sx<p27aTmqqR%#+_8C_UcI`o z@iKv9G`OO{@9J>g(E^0ZgL#652@ynsIdSg*`3c5PpFb~l)Jz}p1OfPW7RMJy{vt!u zau1{*-}0w%vya!CDJ&0~xFHL(*b~tkxJ1$r(l*pm^#3qFZq0{QsVksw21?=Tdyt-n zMpl$Dyy37n!ORqukfyBr`nIfLRguQ*_L9b%`b>NmTP+R@5(Gs;WOwpf?u|b(yG_3o z^>^4iWJ)V4?MKJ4S~`*(hlO0E@&&_%po8F9=Sl+fnM`pSqol4{bmN8xASQ7Db)s}p z#>jl3KJq^L_3cZy$~30$y+1*vF2u`LOi9(qC&~HEI!{koD3UE(z7Uk3mTI?^W{}o& z6Gu=rT{&ZA(HNjPylJe_RIID!&KW$x!x22|(VlMM6J=T?GN)NKYa4oh^<2A_kTnP7 z6x=xJfnP{|U;sX_Y4^;Wj<eiI@r)u&6b(YyC5t@O=N|%fe~r#A7*Ir>lAlEU?nU`Z z+e)fJev_3jKaAX_=;0c>To-Nk`{R)b!k{5VRoQdgad+}OxJ6-4>bO<&Y09Ct)Ba%@ zE&B%#t9F3uI+Ce?!&^wez>^Mn)2YJ+l8Tt=SNq)QDI;HLHmhtIOz%IvqCcz8%e{ab zdA-4bO`<tNr54xOM6BAclp&d6`8`?u@H?{jz`iL<e(uDw;>o?_BO?m--v1DO$LMvG zq0<P}>(*6SX_`ToO&!#a&9i}7Nt+AV*saqJc1qS!C`E3re|kqlWe-}Amos9~@k90O zoJjAx2Lk+anNIZ==mzXrmIH~{+h%ulXMS8YV9L9)dfJTCMW3gNpUBR(LrV9gzi_VK z&pSwdSpWW?h!~>_-hKW4uo-(PM*w>r<o%;3{hI3<`Pn-XgFX7S;2~4kIP!pbFs=jX zbLjL&7Dn5Gf4+NUh+G}1&buIsnE<v{R@2IMqNsrO|2+`A>Ew}L`kC*;$e9mEBkXTv zc0~c~u?&ZqaceXE>H#CsS?_hlKVj~Ar|o2Lm9oZk=FwR1R9rBM?3$ZwV?&Ji&dEtv zHK<}$F%Ta|);(Z`p+kp~L{K{Kkw+fA6=AMmd=DPb3BQw-TtT)LlaktIX+w(u#ghdm zKRTI*?r^*i_R@z>I@Di?mJf9x5Bn!d7;;%)iK2T7Sb-+Znkw#%qhiUD_$RB<N(P&b zD%dOXHMMv!<xi&E26+1^6@@|;_9bF@mx#MFTH?Z+huO}qNlCgnqHeKk$?K&a75AkA zMfZkH&~jJXFs<G@HnF|SJ)WR{M1os)(w#Ok`r_#F{%G5l7Il*h7}l6$t=L;Qb3-do zkVLB6N3a6gQQ;w)I<T!6O{Wr2uCDUfDdHk*+Lx>6#f<xJwpYbFS3AFA@xt$c;$}Oq zYCI70*gP`EFC$4n28gm|V`&rXLYY=5?{lWKh!FPHS4TvW=mgtBi(s!bC&@Xd^s1?Y z(>}-RBh~ELc2T$9Fx*zly~$;XSAi~QN~Y!Nx;y-epMLs{cPdH?YGdB%!-c&#d|RPo z$WKXHWWojsE7>Jn9tKOn#qe@dD)(*Zo41FAVzTmP+W9N{1}PVc4sp*goEDD?9I|{e zf=Lt++U!<?CGBId%FT_f7t(_Vn;O>MNbW9wsjSSjKKv*k#V~*DnSs-wcP@?X5(Wl{ zkDZrATSg8&0hK8A_1FItG=ArFS3gRd8)|B(Ju(W3x{e%_3Nwqi8f@Q*BRuWhK9QOd z`GeVR8eZ#UwIhuePECx>9uO133bzNG(L^$FoDYB9`>ykytiidVd1s=LF-VOH&OAHQ zBFxh$dZAsjrplb{30vM^e;MY#d$qgN>5tW0zrK3%M8wa(`?CGzu#s&#fpHo4D?VhG zUVVK>TB+rr-Q}5e>nq@8jFRKtZBL$O;bqa9cC^IQIMqgU;kGb=kbvlTQCQ{L+tS%x z+_3KJ0a+QP@B;aooXH&ar~b2{_uLbOeV)7Kdp_DGNA(mI+VhysEmWhCquDj4Nla+p z?!U)~8+VLT;ucg=aw4Yc(boTwX5K%~0?|h=HeU@>Q0uhX|A5lzD;bm0OeSzmx3%wx zFOl36lya0_#uoDH5q)3MDGT!6w5h)F3yhpf<DSeiq3iW>ot_#Vwj#sbCds?d_1K47 zKijSE0lZu#+<8LABR|YbVc_e>kB4bD91aa-Yi}ndV;>Z){AxYV+K?w>HI{Nypf2$b zp_N47idRZWLnFA!s6P7XH~Z~yofeQLzzIQW7OgmFf`_8~^s^dSWSR?Gm8|OQxuHT= zcvgN25*BWwq(W3=j|kGxuycdr592H0wm4q7y)l9R3SUYcnl$MPR_pwGi|*3zE<*Uk ztW>zFQWI@f`okdH`6%XK@TqgvB%9EyT3AeV6F2s7uu1u%*`+M3sP^O&l$~k!x}(t~ z!Nup*Amy=R*MXU^o}Qdmb#>D^gS>h<LyH^oE7z}lRT?*`b71|s>uo{pC1zc%&SxtQ zk(-;hChJ>8d+D2*z17l9A@|hwm)Fhq^&FX-0XOb1Rdagm(feVZn+yl9Dg!jmi<#$Q zUoI4~uM{#9wG9`qf8iv)cWE#dz#L{;luwH|Gmto5>Q&q0MD3;aKJVVYKa7Hs1QyCb z`1EyNUhDzdIDh`3moF5HQ29KntCQ)~>x3}7US-$WL>_vw2wLA>?1`48DN995PHUnY zYnT{Q=n8b%k0Iu_UA4>L-hZhlM1B%yZcPikFE{I1oSLCxZ=`F->EM}Ymz<anu2tYs zQvxzUx|~z>9kz&Hf)D}?XsWSxjXYrL;3t#5N+~=l<5u65a=J1jd~$z`5FjMh9ekH` z9+~g2v-qcWn>TMR)()A=gc}1ii0%<mf27Wi&uew-Oq?Oj^Y`z?4aavN?1$zQLiRY2 z9)xT;sz&;p^zMnsbORT89|aIsMi)k5>OFYyE4;bZ){5SFV|i?7{ApVTaJ&*y0O&~= z`p7)FQG<~sTzr^jKRWsdeIvs=;2;6u!FH*3_=$cYWs6TL2yLHk{B_kSv#eiTLb6MQ zI&_5mXo|QNUkAFbpcR(d^9bL+H8eErlS;Vr?>C3RvNt%KU=6|+7LjrG!_~uYtan@s zPC2-6#w@kwXFLgP?*n*sY^YpyN~|Gsnc$NSw<{eSwfuNmPy2(lOQ(qr2DUS5`sI2> zJ1^DY!&B%UxCWuy)dJ>gJ>IqmTl*KTDazg{U*7uF7ulqB{^7h3U(QG97Vo}u?fUh> z`}X<JLZG$yORP~%m_{rn1$4z62a4MBJCyfmF`Ffx{+(kv{$*Ko97)c9NJ5gEzmtU6 z>{qEf;VGHn(dR5Z3(Z8@`Md=Jmnnee+NOwJ*w&d!gP75r;2JITVcJ=};!it_$dE3} zO1mAO_^x7EclJ<HS6n(C^tI**HMok|Wy6<Ib?v9uS=rfYMhU>r=+WX55}CJRl|(l~ zgw$f(nwY}ra4xNIa<MHMRruM!&yl4I%>G(HFUULTvwpx^_i;=%Z_JG?S#3l8K0-OV zg>4=s->@)!Vky#S#r|Dx=iwJe87i<LoOk`%2O`8B6jGbX?(Mg_KiN62a&8WH%2PLP zM0iM}pAV1<W9;?fw(2IOcuCdg7G5(-HOniT(`@Uuw!Cl%-HukA^Kk?#)304ii5=WB z*tB?8mYZkOGm;;swHCb0IV74m{#M577(p7vna`|lWodcRcxL9J_$!&l6}NVkZ#Haq zX$`31ENUB&x5*KofL+N{Ba8;LOqBvN@9<c;hKk6Yv$A(u>S_7`JcDU7y}4z12$Os} zk~K1RK#$_i9__SJ=A|n6v!Itk%=o(afz30<;7iMMxT!}9ntsqSaElqPL8{M%E2;*; z1U6VwXz3#)fQ2ykXV@?P;}Vv&*jXgkdK!B59K3I@ul;=Gg=|vR52)2^V7+7?98DN5 zDrfek`2}48OS^sC;kZYhfq@Y|1!0>VOvlxQr>z2nj4MRFHa0eOKbL{?7Y$)<-8W#& zQov~to6u>KhaXJ$P{<@tchdtQ2}{j3z2G8Dh_L)Da-SfBanwk)Jo+PC{xr=WPdytT z>~BP%$i5$8^X?=4KW*B1kM=$3ZlRSjwWP$}(vsRjqz7;7{E~|TY*oDa`46FTb61=k z*)ita8@^is=MWcX4Tsd~<H%axHhv+oF-`mCF^`#v=i^;_#<Y5~?w3zWr6Hu(Ty{K4 z8?P7kk%T>bZF#em>^352*g;}fDysbu*z}{es-64pCaYfU#{58Yx~FZqc34x_u}oLv z4zmR?4O6Zpc<o=}nu^tPk^8Vdj>p#ED%zD~JyHy*Tt>5J|3D~T-_RpR+*czYHyu>> zTHiqYPak&Hs~sP$*V|QwZ~P|T**mw3OUK-o5wWq=WB{fAO{UYZvtB6dB{d#CTeiqe z@%;h^TKNII<S*Th(Jmm#o-$f0s;b5x)sn4usBIXS*V#NwFGl9T*U33)tCV!ZEi3!3 zTwXE%`MI4dg)V_bEl_6c$dHwMM*o~W1eXSwHW6*hkh!Zl{8&Nz<+86k%a~klsin^W zw@>aDUv~8>POW1Z8KH*>;=IKvo!mibMI0bUF1Z>=Kda7foq}IcR{4L4Q@1{K8Ah5x zgV<0N?f$+@U^E$%DGmTmDBzj%k-$kG-zq2zfA~Sr>EK4DezQgtxhg0e?pgvL0(S01 zN?Z!oQ(2iOfX?R@zofTeEFbG4QYn755$ugpv1{i}{6iPex6;l+O{o%Lra4N&a^8bb zOJqho-V<Tv5E=#q1l(~cP_46&4j&wv)&|sejow@haL3fAN6H919eR5~$Qv9S+-Lag zt7T>TcJDSnnx?ivD|eiydi>2PRJs4?UKg!#DD4;&L32XiI$IoWMMx2+P@XukmID$| zW$u<Ik>xM?HY{<qJb7QLAyuK>QURF?#ZM@Q7!^$`qFDAI^P?bg_z&QtFuVjI2D^)6 z7ntLjM;=ZY*2x}d3hQ<vCx<?4vb>_UcDUX6>B+or+B+wX0a8uO=F9=eC&=tE#_HQy z3xhT<(4Xb0>o$M>fXGtRS15}KcOY-?nc#W|4CFne2%+gb^uRa6W(F(zgXwRmEnfnU z&pghrybUMOS$Fb0rSHAtYL4)-Fc%9nP9wW!l%QAwG#%K~h~a7o2X6D#<83!=We1fx z4oc}`ySL1<3{9`kN;@b~u_k^eOs-=^OjAQcLuOjq_^qvH@6REH2(1CA{9H3&feui$ z23*!@j#GTzKiwx19XC?6%x>461dWBxn+Usp)Od))n5K%@CyUZ2Cfy_?ScwFE*Hcn5 z#ekian7^i{YSUH-QhQD&<H_q9Q3H|r7!(`MUS1%u%qJmB`RYV|qrSnr$j|UqFu#Ls z4&gTD)m6v^g)oNRIF+59kmsc(BxMPKberZXJCOxL`V{rQv@}R66orJ86n4E;jMYwy z>QatnD<vPZKh1KNB_L9eej!^LvafM!`OgSY%*Yp}^&PDbaMxs@SU|choHG7oT1E5F zv~XgnjvQ%y`eexlEiWBUb&JX=g!dyO$FBYqz4-Iz#^MOdjM4Yf2PMt(ah;30IW0U0 zR|d8n4mOIc@6%rfE>xeMl5Hb8$mzCx8ni&W-4E$*2mLR~D|^VnUw+vurO@znc{i{4 zQ=9~L(n%z%FVChU#?p3(uL%Y?Ed)vt5Ir#Vb%*i+F=m@-LVo&5f2}_(H?*7k-IHC9 zAIVhuPLrh!eD;?nE2Dqyhxy@Y%0m<#&XQ@zl0^Hq?UxG{+^4f<0k3M~-}BO)gfjT& zT~#*EGK!S)@9wHGvV#Zr_4!CJj!*yNA75PmoBh1$^hzN1w?U%{*RZL}PG{HeM)b2g zc64yrxuQ}Q(60F58de`ERrf$az*7xNLzQf}Hym37mKe3IG09w4?cZu^1*DR873lQN zjGNk;EMP!OH)F;OFgUxc{z;BA6Y<zDzgY1+c8i`6CI`n-^2v%ZWK;SXyRc8)B-Y=v z%S^mHC}CXily<rmyXi4EU0QmA3H9=`_aoZ;uv0GHdF=C)BZ#1AtwS$)w13xW{djGx zX!3S_Lj4z!84wk<C-U0u_H}`#-|X@q7Dim&bzw29i3GsxQK>6$08<S2HhhcBf~YXl z5S1#YCztPpUIuM0@9R3qZh+nj-g=Wphjz6+s#1LijW}Q=1X6pQzr~b?dVnQ77V8&~ z^B*1)L$+96q!^DFH(2JIk3;=KNLU^myg}Q{)@hc3Tc2(_^Yhm&C=Q;tb(~fViE%w$ z*Dqcv74|8xDMwpXX7%o-dB2~=(~uDYRWDj}q_BI3rUMZXDV6;z-1PUu!#DWe`Me^z zb-{_1TUb3oSD-lUr0lzr;YMMvH9a1?8b2NzWKtWLE1}M*x344Kc;}7a(!#VWPQl+_ zSo(+U`<pULUtC@cZ9t&j(X6c78{XAL(!)xEHuHtj78OC~GG`op(|h|S9v`^kMo!P` zOUAsv{3NGpP3*LyDFM2F{zB1;k++`}>W|c4R-bqNg^fD*_AA639AlgjB(D$!-mp;N zdqr5;w*YtI<G=f_dRA>pxwlyk-~C69aIv2MKNZRu_=uQ9$hE-h_@ZE_m-V4dbE})u z<;Gb|9(iL$+B>(Mmu-gq^;y%#9%|az#AYEOwhgs?|D@n<R>$k?kK!%BsYU4*wJe>y zDq++7r0eF7?{&+y83xNnvJp_Mk4-PpG`BOTL!TE6m1uXj+aJGnTXN+c$n3|jU;8p~ za!F?Gf;%Vi*?8AC5!cV(T>I9$jTAG06jW4%<ubs(io<5j80K$nV-v|;n3^hRKu(^t zJ~aSJu&gYT9;Cx|eZ}52Po5w{dB&tfR+>e&rw1${;b$q<i#YUU@wN-#PM<zbL24^$ zQOL{)?G~1KmqV2M>|j`!^`b>t?p93CQP-ah;pj&SZ21mgh{#h;D`5dJx22HmY5Ec9 z1RG+-;+xHF+3Qw^=UQ~%`uAJ_3u7k*&Mh8WW{I%6j$yRKtQN+I_=ZO2ZvS0U^`IzJ z@!4vl6%-8ocFnaUT=YJ0sPQf~Ju)CNalxMo0o7^+x<5H;V*g-95fZKkk2~<$!LW;j zM8fl=$lfwnPT1Yz8N{DuYj59u=g)Y4DSHBn(>Nw|ZTaUA``C&Jzfo`Y%4oAJE*s?= zjSmxG->o8A3~G-M3{7un;?cOOdG<L&w=*CIQwW2sc1nL!J}+)^i=^k&SspsEcD<g| zRU}^dD`a4IN7rT>{lqcA6euFW#Sx}qt(fdxKiy(>-m4xax|yLCL(0VUhsYcpUMW}l z_?@7RQ)#7ad0=yMMlvqsMrdo7m6Yg$lECh3ms&jQrShR?bKMcwuuG&s(;o(ehtHil z^#cEtE1|eKc^0d5hv?nEb}jhI<M6PsRd-LaseMCWy=CRKQ>RYB!4gq8T2r&6xHu1P zDgR2peLBe>!yHX>hGZNY9Fv*ydIryWnv#rJi&*E*4HQt2Cn5Ww2btB}Bsgv-?!Q8j z?|oeeoPfZaF)juTW9RPuh~6Ht9|;B@AXs2O#dO)JXqTJ838HX-mS^{c#l*1CjDhl! zH9JLJ{nb~s^yRPVXTYAr0#~s!8>$3Lskznpz#EGGUqIQj`9B}Q;IZJxk-nId;KN}8 zEPgw@x^T?s(Gagej*i4NVLhB{Z7r}@{vn*=!>wBVsxU)YZm5gA@)%d$4f<j!!j*lC z-|b7dOPUUHzOd-m34LZNh3_FdIhZ}-*k7^bTdoD_1To{r@6)RnTkuYf>LLGxKbL+h zNYC0wz$qp)lsanO$+Slm{xSCJm((R?&9}v(yGW=fa?h1a4!$Kv6cLX&9BCh6H8?!e z1X)S>Ct!?pIvIyGYY$uwxZgCpru_<93UD>70b|GBZ1WJTXw%-kjEmBX(OcH0WL%ru zy`4;K)9CWf`&28pXbn?Yx@y%~eD)-P(zg|>7T;~{TR#36pRu%*DHl(|QI0oe0Z@uK z-!u~o(Y4sIH8JyQ(&m&dkvB3}b|XIRO7x*aD*2u>#Pj$??AQ5k3Pb0RM9E=B3G05f z`LrN$k}v9g+`=5kEFOcjr0u<eazI+zdf`I#U_nfXi-1&cHY$J=LyzJ7RgHGCesGOO zo4!g8EKOc<;zWBDY38LlhekidpDH*If3YZj9aotm>RMxa^Lc=p>&$f{j^+wpf0zBk z|3`#Aiof1lNnO;Tb;p+@tmy$D=L-yVm~Cd(3VYO5p7H{s0_1;}2#h>>U+RX5VWI(7 zLkL4Szx6BUEhSl5Svlz0d)Uid^5@Vk0n(grZ90k%TuMPooPyDzLkD3C7II$vG!h;J zS>y5M><5LLS1HX1)E1ZDA^exidydXf7b3y`rWE|T|6FshtAh6zF}<$arMgO87@Dwj zN`=)il}$T#>`T!aRFpGf#Tz-b6;mcR?|EhY^2j-P`ry9O<}U*zCR-=%-XWc=bbUzk zmiHy2<O>cPyw`g(WlQmL%^a%@IXM$2&THH|b*_b=zF^HrHB3coOTDrb6_1?*IR9IC z)Vj(8HG<cCO)d033tnZ9q@Xz{AJG^U<v7v9ATG?e&(|T1hvX=YiyO*P2|7YkcCKcQ z-s`L|0o4PAhU2bYbUY}idt@o2+p(<myGm=gj~I4^2i2u-N(8&9V2ty4{=1FeoTc$= z4;h(GH;qRm&pG;qlZ;~0Og$kTKs0P76ZCpd&o2m%M+|LHGpLe3t+q^d4LB6PgVphb zA@a{BvI7Gl3))p?wTdZEM_f!P+dD`n>&%$}v>I<?(k+$q<1{YUEwehG@yibr4oX=9 z+nzs>?c3RU6yqrI1I&iB`@isH*ycPHxF6GKRM1qX*Q%W~a(?()T02Pnv2E<f)SW~9 zes=UrDZ&`LY2!wftxm88OHX{pNADj(lp%V^GL{ZDg;yX+AlMte279l?$275KX|KNe za)*~VR4tS6`OMw6m&kVh0_YEamXC6nO@+8#7<c&a>7yye%){Os@)Q~HlV1)g_)OsJ zCRUu0&w~L`G%1bnWrhgs%AT!Xyz4H=U49)mb#7fZpBt<0${)UVZGLIpJUR#c#)>Bk z&p&wZ074bkmJ^?8uBE?HZ)3_lFFp&?2n;GxbHPmyf3b5ho(x{J`izIP861UU<u6^h z@bK#!tw<rITW-Gq<bW%fzsErbXDcyi9L0qNnBe$xazsqKWbX;bnY;V7Ly3sF_M0SG zs+x8+w<YY**vw3TC8#F|PZ;A1gu{AN9ocUD^dR8DDcxq5Z4rhF5O+}oBiM(pd`US7 zqXlZ~g-xKj%6+0BiH2d=qS#(LRKR;+uH;Sow0_}T8;|UFwC^s{X_kGB!DGQ=a&pEt z{1`n6B~iMy+LVT)HP_hFB^mIZuRH8(kk1S)b_E`y7ULuL;Ho-_ar|j&X^F=B5~C*F zZKd8^jrpDFlH_{?T;zVSXlR$e7hr(Mi{%An<DH%R%~s9~(^DVUxpcm!)4Wa4=i>6T z&f)6XQ3Q)n!Oxr-Kli}sc^Zes;xxAF>)(9xt7Gi0{ApRMBDG4F=Z*8a-2Mtn&gkEG z%&hluYG~MI`(J$6sZ*yPXYV*s22{vtRDLP0QmTD@ZI>l#+cIn>T>Wu^R9c4kWeww! zyo5?msd10zPEeAlPR>}L(A{OpF}-mOEOW^CGP1vX5?>BWUw>r*H}Cq(N0Y|B=C6<% z%}Tx@1QO0UhxX4Km6>I_C&H_4@^i!AZ|%1%(P`3)o2@6M9L*2yt+hWkUBTF5sf){9 z41Iv_mffEUB>ug7_UktYJtlH+!VEF(Xc<{3x0fC**<3f{>VQHH-8P)pa+)(@BcgG| z<&kBjbU^jR1*YZXSv9*Qo%nObz7s#dl%HaKa^;OHM50>@>x7a{jb7iy>!@Ww?ZM?Y zB?qp%GT(KT8c|_!Kc`J@D6R3}?)(a*$D@x52DT{Zo#tsZW>MNud4Wg15wNBCqq_X` zammb?cQ{<HT)Beocj|<<Tx<j}LM$y%yo9CjThKJ4B1YMDw7?_f-adL^9%*(#|Hz&E zGDsH&5R(?)AJsqk6bm#*ZPEKGkV$YCV>8jyV3cU$7UnpybX9&|UoVhF&z^07>yz96 z>fj?Rm!eYkw&3y}klQ=dNRhk8AikUgI=#I-%<R?N$Ukii5ar$<m{Ev%spO03?%gJO zO`4jqY?-YlJfn!R>b!p8#hW+R0ikoal1G2w=b55LXDs~O>paZ3D4IV!pXT!cbH5Ow z(ir_1CJs61VXc)0K5!OO0MFsHh7W%#oW0}RLUT_8A<>4_@g>mS!1%!D*Xt;pBzjg? z_b#*L<;zbICh^ek2?|QoC_$SDw#m1SwVKRnUk*_s>f?RtH=bpjMKwEIQIRNElr#cl zLN{4{X0o}on1tJo=SkraQT==_Xh!rfP42_?@qOX_V{OvTaQjeG!6`YE#_8#`qCuqR zn=5Xd6ALpQ6dVlLl0FjWP$A49K`kzKvefVWN})xoiwf-O4HRmbhY#Na??-V0K(vlV zf9Fx<8qw$yS&zB7OX#n0OV>>NfdOu2i&zAXKN_ukZbB{@oWi{0i`<qhIRSFqXs`8u zG56+SIq&WJZ{}o53S~%yG>}weC~lz;X;3OcgG%N?s0<}35)G6oDwUx@p)4YV29lzX zDH(1FQ8e*;eOT*RYki;JZ|{BVWB;)`p5yyG-?g~A@6Y{yU&DEw=Xs?UbZ^-_*|LYy zE4raH4Yqk~;20G;F2lv-?xArYTKfEoTwVU2O#l81j!*4EI^>=3L-rhXPFgh1aC7ID z0W&3ssj9B_^rWD7WNU^<ltZkeO$i$mBj3ZqvTgowW9`!}5iL6|Z%a{3e)Ue-_4|l~ zmqW8AhNL$3Zc~B>0IC?^b*Ux!q8Q+6e}Zuc*sZlu;OC>A{q}G$y_>(!@liU1#FV?h zb<9_M?vmGF5R`gP>u{axN*l?fqnh%rD|-v&^Ypmd<P0<GJ%JmpOfJ0?{3xVZTr;XN zC3(4D@QcLKwuwhvYnukx*573@BddX-lhWj=jtbNYS?(4-s^M8xr}E<M?pfQijNk6b zGFD5Uocm<t0|kdT3NQ=hj9!~a*0MoDUpmx}u{^7)pmz=Dj1;STiErEFuIq0aSr2MH zxy86&2#tt^^TI?6g?{}o+!2Or_nvK<?<{V;<vHLjiCM_MAh}GUJk5%<>2|;$(0rkQ zRnIom^`0|Bc`xL-fbH8sxrP0U98$6zIHYODHOfvHctFn75en*S1eVjh@zvQ=Cg>TS z);}%WzOmrS6DMw_T-nqqW_W16LG8(wJ1Pgg)QpUcg@qj?M8Oag|9Fuki#2h*vsM>o zbnQRNe|T{EF?TYtm&FWa8UNWht{~!sFmQoGp?~Bf+8F9YqAII+UUJ#_yO8IOG}}50 zo~ls$D7Ugv)=H=0=7jGjJt^tF7e+4>kFl|a5j(L|rPu|36qbQfc(baAi%+MUq(l1* zotA6pg_A3&`Ol`0*&UULcVu^@#QZK;?F*1ECMLQPjo3w#xaS*jtZQ%00jjEQSatAd z5U;FVy?U?j#$C=_NsVn>N!1fm>{EgVPd0z&w+G#b(CaeP++ek<_J^t5Xw-J#vWK~5 zd^K>!g-im?2OJ(px$^2a3}N_70(KBN!rp8P%OgR3r%1lTc&U1t1u?3yurRS{L81rt z77r+tXgWwBOyllDNak|_g!0-mGj%(gJ=k+HsS7m#tv*{E{d;43DOc}^Oo3<Q%jky_ zC3y1m>&G*2b$4%O;pM#E8fy#<o=b}qblvx}R2z%U?2&A}<@``D<vkq6E^1-dd-!xz zPsrwT%AD!9;Ph_q+AnJFUQxxm!H?w&w@ZFFS-VkWAlXACY;D6;p?mjL;*w!FZX)c$ zf<szF;27FzvcV8iZp8e(E;jeno4R{<SY)u^_I=~xPl|JH%=XyQ-=Xea2kD?2C0&dO zh(3CGd@#%*2#RXHLBf@l#;B}$U@S!qvDendCa>mZ+^{!4wHl}9uYYi&##O0k;-a*e z2a7D!djhgFQQ>Jne4nr}DA8%X&Wt%t618QW>Fj3|1yHzeSg_zJmz3z#_~KfJEfa;c zw}FPMdDp5Eb((6P{aISuu<3Hn?d?g&`!ua)zYiS=v(U8ndlWo6<R+;bd^J`(KUp{P zc(P9JbfKj;VzW_WW8-w?y{xAZ8R60gWre_{9o_hW&j49Puu5H-vji^a%a<ZyAViyl zdg&};1Cl$%+|+gun_H1_?;j10D#WoNw0$Dl8puP;w`n?filgxt8$H^}Qh8wLE!a3d zGw=aQnz2Wl+V*8t)szXow=X9MoaFuc-?G>4x0fC&|I;|rTFS8T7mS{ZG@|a)q;@y} z%_GCW#B!ZgTjn=sbPUjqa4R5kuyDnu4}0juVjIj2$IZBZ`;O_7pMXjNEF{?$U>S4$ zCrtlz0!5PL#2bNf;a-+P2g+#t2k0_6MX;W2-zhuYt<;U~kt+ui{a9_7F~5|74tr?O zqAI&3J*N_dtbRyu4Sd#D0A2JE@R5fZ)V&vrlTMtNcBu$H<(->1-+;#Q5r(bNcji=6 zu%_L#<W&`W_T;b*d8Qyl9Xd3g>aDF548qzOC8b3akR=O1nH;#}Qr#{?!+k>w$-RqQ z)_`A({E-KiSH`#`$j!{(epO$iackTN`NruZR8)ZBHp9%|tWX+YvcSv5X{kMY@IaSx z!lv~W>D9a-o$OL>VeQ@9_o|21J$=bHl>c=6hwAEPK}Aq*T3)h(z!7Jb*j!e|$6|RR zqE|CtL5@caPd$|8HRO<XXG`*I_+!l(3>mqs+2CX3@Wd?OmwZ;Ml%KX8-H>RnvF7@i z=Y%jd`w1~M9&8Yi%DzVV#Qmgr+}=%bxb4#emkY5nn}F(;sV-+5u59!s_oy!22V5J& z?Zikq@rhIWu6<Ra8=d<0NLZMpx;1si-qmMZbo==gu8-TYy5F+r<K`|Jnq~Tw1C>TX z4>YV52GCQf^=8k$%UuSGqWt$y*6bg)MY@(AK+)&>Bz$s)AMeAIMpzTXz&%mpYgOkY z&BJwxo;H$SP4|x-?RbmZyAExeWh?p(yZQ48(C{5B%EvYRv}{iKNv`6$pPGNMp3sQd zXf@y)X#+q^AZWDv{vtq8QXsB_=5RdOT%)7oNpu83jc*<1<>6p{he`>nb`C}#4Ahwt zL&%?|v2be1$FAYl;laXX{V;Cap9vS2sT+$|kzPTOrc`LLz_7of;xpD&HrRV;QyxuV zW2B&_64rO4@x*mJaqz?{D%ceiP-zCh&6F|2eaFWyKN49e9(H`lQYV99rPB}D_^9gX zc~NqLvmSw^K(4bK?1-&63W^2|njeLkEoN_mYR46%B>-@p=Zgji$Z)wg5YfWgdvhmI zRv{Gm0^kB+CF$adYIZy^>>nOUH}WXS@+6h_mxg8{dESUm`9p&1I||O^f(h1!x??pv z(o<7iOA_w!KILo@BgXAJcu-J+lljqfKtevp?_onB<u8p&NuIMzpd*wF05MzgEF(MC zj|f$CxlCd;1l6TfcXVy)JxTOx&w?ga_@-d~Q$A=h(_h4vy~nR#$zK&_i8#8?o;{nl zSw8MCF7C{K68m(5+1ODDg4|r4sy#=JjQIJ6p?a)YBKfvCmx7CqBF|p!W9i9WN{$5U zv`eZQ8XWx<{O_vl{n#nNC}iga?0UDL_Pw6Scj%HK)W2!QL6;Z4o3TB$nAsaLT#C3V zgzp3`#xzZQSmE3H?z!R3oqpxxrIeI)b?X6_DbL;bCUNho^Z~;Mkz$a&CBJIAvP_Jr z%aSGQu!H=i{jp*HDHFf`ArE2h^1B->L!eZ?x_Oclx#>sqydUQzgxeYxU}rYBk8>i7 zFTXv2ws~SCUt`qOgEx4dIkTFCii7p=NLvew*iRa6K{@6jAO%e8Ss^d4w>tJzMB+~8 z`_5smy41Oq17=!y9H6<%Kc~67W64xYxvOP^jrFXwqr2uf|4}?KbGPoN35h8^<|izq z!Gz^kYfGQiQ{7rxQ8C%gdFy8@326})g=wr<5cs=%p#;W(p>H7<9$z3SI&?%cVpLe* z=Toy!-xnPX$SKjoOAp>RCogfsX1Zi`gk5*vm@hqH**#pV8o1&Mg$iwapRpb)N{&3$ z+WfXm(v9Pax%|Ja&T_zv9zWhl;Rsc?WUoQqw9ye&&2&t2k~KDR_yJxh5fVO#*9J^K zH9a>r{Bg{zvH!SwEbOWK`c+VbZ49iWgW!^rN`8_>w0vOWZQ^vMK`R-QZ@1|?XPJuH zPa5M=bd6b_OBt-PJ76ZGlC0sz{WiEhJu>M~yh`7*^WujK!fFU--@ku{X-1wrQ=kb5 z!!h3XO!Q@kW*4!xsNS?|(=iNLd^|kT5i=VOY+w$WA8ZFZg78j(Cv1zXREVxUv6sq9 zo?R|YcG_+wJ8TX|)$%1VuNbC2u~4{paH@fTpdTca9?p1jfI*O8-~Hp&mj()FRHDN5 zr^QOx#W2yD`z4r-P*#!psr4c<zYd?!sZ)^f$@xr7njqCNrnGQ*OdGH4hlQ8<k1jV$ z%s-Z#JVh}oCWSNCH)*l4wS^WSrXer!4x-!hlWx3u6-Ebv-uA?-e$<pnnX0E&&|n?k zqvPh;&)-%ZSy#OD7fMI=xqFco_)UFLT492>ZD~#Lw(T}oJ&LE#i=Sei@^$bvYl>KK z2s*oEPcC4&Bgo!L66R3*2*eZj4cnSm>}u-;LNMp>^q6w2O3UDCaZkZ&$Br5E_WgTS zveY(gB2@_G%#<m@lCr706r{30gdg!`CKBrVX!6i5ljW+EBEw3z&vRo9u9D$e`*u?< z@A2F_sIk=vW^1b9s>x%gEDN>II>*vWk}S@aFwp#JXQjE0aw=Z9LqcA6o2EnLqESPn zOXaTiHi&ChjWX%5NN+*-v|@?a*0VigiraPQ&_`b0pS_R@UCNrJHUq=zjT!S*TndIZ z4DTWJp5`mu&YwSjqUMFO`Vy5MmGcyv?u!=saX-MhLXFt;5ibs21x!FtLP~O?{auT& zBRduAA*NWJwyCPF-b7tNG0rds`Q0fV813!x<u_#|+d{FT^M%xU^s-2!VH8B~PoGxi z<{F#d5ok`DnhBOCBQ9NPA-AKw8p-5|_Qdnz<iT?XI~3=AFdceme!fsp7HN>B5(n1- z*d`9^B9FVQu6Z_ryq}h%q*5$_51avxAh3VlzEHwyt<?bpcb>orOb>;1ua8=Z+x5ZW zC8_6~xHGG%tz7nG%|vy{zB=mXX_vMn7i{}V9($!Y@m}u?zl`RJt<^!o%mMhF)M(~e zv4*c6jaC^m&!i<=t8N?gI$5J#Pm?OR?SvXJjVJoge;s67=66p&M(FG}eNW+0XSkIz zLBI_F-TB20b#7kO!7~>vdV#h`*!W4BMdxwRue-cFE^pVlR)F96J?C2Dr;`VP1{aT7 z78&v<*KsjQ)cQLS@oxQezEI`l=xF+(o;ecZt#zKBcw;-ks0j$@pk!FTw>O8M4Ugh} z%7}c~`{D7+415FEA2mbbx9_TL&3(cn!Hw9?y}sC{VNnY+Gst3~C+CQUWYFo19q?go zkt%TNso!!mX09f|J~zF0r-;jrz18Nw=D7;v4!&{{4T_&%tjQ7P$>ZCb-F>YfFQ4iz zL5inH#@BU2<JZKqXV<WW7Pl@2dc%g1e&B$nv1;|_#uvMSbJ9<0{UetIx{0Oi@7}#@ zb>U#l<G#bXjlnEh$F0Ql>F8Qt#RqJBIr>2D{iBTc9LN0NgO>|ciq>-v8Yk_~DRZ*k z-H}3W<d524b=;~yRI_7S8MQn7R#df`1F~)%6phqsr}SWp7OC$c`=-ZH`-1bVVSdM! zXSzw&L2tt9oRJc8PB+s#6Bmtt@8D}A8BF2EvR`{^>-CVnv<&LLeCab`g9jU7++Uw^ zOWM51mq<-zPEA&lwTb|d&vce5w;odNc0WI95ucaJkO%B&&-UGH&?h7hQM${f`@R|O zt(WhkOkX@??AQ&QSqh&hfP9;Z7@3oMP5!(G(ZBA2o=&_E6*a9Wkdf^0p6tG&rI_xc zF>fjWHoB91=%FO&KTs6peiC%J#Br_~Klqs{PT0VH-tw5q9m;bCNf9`wg&n?HJfIFS zQ48fiP7{psjz;8abi?|<rnS}F6gN2?oyd5%t{0K;@-pam=hV$iY3;VwZWLWbaNPAF z!LtMqgf~R<w1!<hzxQE<2N?|=Hz+wJMN>y719D{TI=Qy(+e2wJz^y(%|2-{8($lk| zK_f<lWUb65UjqyvF(#+m`V5JV(!{eN{=jJi;C;RvfB+0t$%dHUJ3Y*x3xN>|PcP5z zfhR~NSCpd#h#038$Bs?6T%)I4Ki0}{zMDOgX)IRXA|+vJEJ(rFpF@Lh?c(y5Dh~}> zvdMgv&I)er?t5KR83ph@!(7W<b^ZdbC}~32=g5}`5OcdmWV#@8M^vw{!Zssome9-o z+QLym8|K^i?gYi1PgDIa>D3>fP7v4Wa_I9|iS%5fvg)3u(Y(oLvh499t+h?)A6rzC zX*ayCadT~cXwK#@Tx?#Sly-ZBnj3~);nN{ijCjnomywqK#FkHN@f&F@N*+g9-mrI$ zo^$lGbStf|+ccYuc8qn{n&n}8FRx`s%G&|Km6i>IyG&I5WY|l!SH_vwxTXx5xqsra znB{9$d3dmu*9RpV{QBDSdChVXetU#$o4F>SF?-^G1QyqD4QR}qt2)c(p4E>y;eVyQ zlz9Nj4;v33#5`KFH^9IU{NOKKxBz`QLp-9F#nWpTtJ%T_AiX)-(iKvlB=bBVu@1q9 zhuJVxh?3bW<i&S3Ha;F$s``c?!)wwPn){|z3$2Lz-npe+Gd@-;SP3I0ujgsq#Fdqk zB?aS@h@V2yoi@9C94;WdFrC_WBB9pD!I3j2+!3L^C#I$nEo;rVUSRL|1A&I19sFS4 z4Vt5gNlU|<BRDFb3Ti##8lW@(^WdI618i@bT1`Qt9H~C<82xm1dfmEVT3Tu8=_TdD zoGMV-Y-Hq%F@0xo54kZ;aTOFU*lwcl;eA}Co)lKI>yBv4kRX~a9h4hJN|k-Gkw%H} zv;8capjv)iQ$s<x24O0U$h^aCHnueCG(6jRTx$LJ1r+rVnZLu{&(pFzzkI&#Mhf<y zdw*&)sUQFJ+Q<tOl9k45aHh9V#Z5LP!ZSwG#YKMR&{y}(PA<$>m)8wH6KwO+*5}c2 z#;Q___=aZvc&J)d{f4uOOT#n14Net%8_LrnIQDXZhJu)mlh5v-+>?FYom;dgZM&Ui zg7@4DUmiYsWV2{iB=Pp<4k;J0RGT|=CSU977zQYH!eeonyE{CuVFo{VSIsmJ%r{{J zS*I@c&k3>#zkOc5s;N9fe&EFI&eG1a&yL(Oc$sRHlfmAYcLTmwT4oOEBJr~y=?Mwh zdX0b$8!p0l0c%a_KgaTioJ1bG`UI79ug<P>e}`Ew8%g)0nw}~H25gpI{kBM{DkN*| zhejTcKp-OO=6$q1y)|!RSu(?*wQJASZp8@tW?9*O=~|ph*-d=u%arY74ek~cSje5u zsyYQ=!9HNycL65r60RpX9!O7Go8Z0V;VCn4=Dd!N6YZJ!0?0$q9hPj$M$&x@Mqj=> z_J>ycT}&FO@R=<^FtB|1Tm@K^1zupv%tT7gs>4V?b4h5M&%$<7m9TE^%a`MF=+-~v zoAA9pONd(~7OH`Cm+q1IsD-xQnUPK92SXMRs_^dJ$O*out{v;ore|ST0}!A)V}kDz z_SyFB(c?bn2N5QK;l9`U61#>y^U|b6QP6R_bvRx}Q&YGD$}+|{MbhpQG#?;U1}t#d z_ZDn`#K9&`L!E_ggLG0S04VtnJ@D%BS}InW6=dKERTC+iG@5oqo$RCI7FJt)NG33r z8%?44V^BlnlcEbgEm^CdW2dFk)_nZ|;LYjWvD(84Q@o0bhU}lE5_=>5cgI;+P#{}> z75gsQ3^Hb@y>A--tM=?Lct6}6Iv))kjl8s03~!|TMIfK-sV)EVw!{}3Edfe&yXzh{ z?V8G(TXB<4OPXj5QaV0f$*{^|(e1X>b``I8thy3&*!1g{FZ<fDTX!>yJ`UtNfVR+} zu^E>ZcKSJo;APuw?5uopW=AWvc64dKsJ^VPq;|Z?l(W^-+{a3`thYR4+~&%+Ld?c# zO-p_PDeKq%jKX$7Nf{&z+?!$J5cRHkM^BNTC|Ie6J9g_fv^r1Tf}C&uK3)24jHYKC zMLXVds2VIT7nhO}7}~L|eJo~S1*LXvTW`tE_622EbzdQ8R^n4;HM$ccM+(i7pq(lR z@>qu;jOz+VQlQea0zssm^-i@GoGMC6EXqH6HyrQdpa)Q`YVX=t+hxz?%RVAe>$;&1 z>lU8MtG%Y>8YP_BCFX)rzufi@Tko>)k7*$T?L0+e<-LUM5I72aK$?!__l~uzdo`V= zlW&9>{S3=h!V-06am@Pq!srDsaeB-IS0j3f&ZtpMlx#wHTp6dYt(^{Mg^!8nL^b9y zbb~0RI89(v{-PH|6mY%CM+R9Yss;U8;{ei_T{{g3pW4!*>;n5=EZ@irpSs`(`Gl&M z+E9ROBO-J$Wh?ie5i#YoxJpIXb`leDTPElR10Bon+MMw!nW9oFLqk6>^<BH5J#5T# z2t5E3g2^CW=R6~J{}9duFN<;GHu5!DY^D^^S@uY<>n@qRg?g4<vnN7A1TQVe*;Cz~ z6HSH9F(7^jOfV*xE8@#z3G5PzYrztqcNZ5Q519nVo{~FvX8HVh2k6Qj!8%oHbWf-j ztJs9c2&5xTX>hRmuwjW-u(MBp;7<*fxy@XT;R~xaU*egCBm)dpAh48d+Z<e_*t_@J zmoEo~8qxCmiDKB;$#an1a1)GG0N1IMk*cwIk-UgQTf)VHA<>hzd21dzIy=bZYH?&| zhd5@+FZk1ppNwYAP{Vo?KL_d^0p`%Ku|T{xql#Zk?@aCck*o-19>QGjL<=INjksY} zM3(_WhB&i12mk@Zd$;?&%HQ>TUU~TesiVtViDMU~$gg$<c?J9#H+C%R+P^cogun#e z3T$Y4Va{_31EB4?PoMVa)DenqKYhC3MgL{LAXok#oh(5-L|Ud-uZN)eII-|bjKH5c zO~tLH9IFAYJ8?3Z#mpwr)Vi~$Pj{=xs$&#JXR*}LQC40)QK(|Hg(}9nzoho@!qm-9 z28-`cdVBNaY7+&C%MNt&wC2iw%0q{mtEp%%9<S2o#<gpM0Q(0>Gcn4=Q3;fSk6An7 zmPDa|t!}iD)HdCp#hjcyAK{7_B@Z8h-<+K|;5(4*%9SZOCrWxk2V`st{v<fZ=G4#C zpYkEV+w-h+&z|RSRtLNK!KdK*vbd8pc*gSN1MW`Z2|H4t7c(QE7WaxQBv4Nf(*Pa- z2(Aq@d+|2c`VPDmVVe%~WKJ;mV2HFN40}dMOz+usWYq5X$FA;4X$Mng+gOfsEa=xK zI2@+5X=vH379biLY{1<!1+&2t^ww5eGtKk;(J)PS*H}kE+_Am+>;2i<A@>D-BULWq zb0Cyr<`ap#!1{rwj{mTy@P;2kc%kBM=+y;hJA_H4jB!yG);|d}9LNV)guW$z+{e6` z^DS=)Un{N^i!LG<S>WRZu#gn*Lr_nMn<CYz)0)+*f%>@iJ^S|`p1oc&|CsZ^M!BFH z^w)lSK$TQ{8#yx{eZ=_7WWkssw=uNP2>A~8UibjzwzE-JB->@C37#h!1DL>Lq!JPs z$VfD$T8+z(=&=Prn1&=QG&E*aF<J?nV4YYI1@VBhD+zEUY*g&px${B1kL8Ap81a!h ztM(bBKVfMlRnPFBw?-)8!#DHbm{s(~Twr(}%6>+1X5s_$MYm|MiOwg4pP>!U4t?j^ zpSC>Nvt<?rIau(qu;|K-8~z(gzB7*^bqQN2UTwoF?Fw!&4}#!QkuVm#4jj`(cU$|W zg=4So@97|r4ZP!?U08LTuYp9D_6bE0AlYNS_gCM(FvOrs?Ttu0L)ME^#;I#Q-O*iP zBA%UuXP|!BngA+WF^X0Sd~KCQ^t`&0hwlOhqqd?@diGl+ljq8=CAjsN5jtKK5ajrp z7cVAND1YUj(Qs2Y7zXGaQ(UP+fvl#YvU1(J6F$lM>pv|7@Fd$Ly|kl1BVaMp`$(KX zwx_$y`Rdko<f&ta?|1=gGuh3Z-1b&cx18!!J!zMjl{=lwL&`j)b3Z3F?`^;NqxFIX z{XO@&V3U-eoT8`FM#+($m_z<+*90Uyrduz_6XBQ4pLL{R@SNRg3k}0YKK`fAp9NtR zsJyIx@xzCVCI<W6YH#UP65G#nPHMsEwvj#jWiu4(OAAFF9$yK|Cz$W!*XEWFD9jAp z699eQeu^(L*kDb~BEd9nZ+JNSzc-b)1W8RBoxA!D0&XLtw-p!9U%YrxJ(?PKJ`fEZ zn4^+wR-5P~^`Ywf;#~uRGaUji3$>oA%uT|4=@O~r_~bOEzDrA!28SBK%PRZ1I3TIu z&Yj^<0W~#wS^?pgMsyy>qD2PH=)O>JCV#eF;1O=$HNc!w9l55dsj$_tO6M*SxJdwJ z*e?LVwBbF|PR1>jE61?iQ0iM{km0~o>w|2EJ^ekYXQ+|mqD7w@zAUj^G5X%ahm@}o zrYf<4+0%78_N$TczM3{nK59DhH3A1K0ZKk4d<wdOdkIrg>}Vd+AL2yJx#3DZWB=Xj zLA8&xC3aaJ+Kz^TnHQJ!?Xw~Wc782d#9qil2M*kR^QDrXmoHx_J}J?k=H9-q+X^O| z?^d{~_VA95SviI)C58zG2_%0(jKwgGS51>gNuIsAen8Q7UAe-t5SOt#Y%0T-?`yyL z=T`2vahzGhjK}V8Us+xGhM!<5fdPo0#y-o=Heo^UyN&638g1LD6imk@1V0WT7ic9r zSXl3T)VWDv$yJ=^0W_GDBrVvweBnY<@|o7%T{>g3KCd6oSUl9o0`UQZXUi1@EtfBD ztIs^1D7#tpPEk=x+PYQ}9@{^dXIsvjHLGjQ1;4z#pzj8KEJ9%c7FLD}Mir0GeSjok z(Nd-|d^l0u^ME4U_odBhL7y*z$OAYh92|Jk{j2}Act;o2`H;gKy;UY(@{5Oa>(k0{ znZoAWq*>Q)<>w#w^4b#Id^G{|(r?e#uO1Ykg`2OfUXg!2zL1zwr5Ro<x@<ts+W56Y zYYkWPd%+s}Qn#h_P0kzSD)IfYt8V?=MEh2jJ!W;w>r>fkR`h+5>E@hMhGvOhDZ9cC zAJe^dId>i&Uq|gno=HeBD$Pu7KkYnKajxv`Z%_NB-|c7ei~rJlxzk5zFl{GHxI`V$ zLj;>qb)&t+Wi=#p+=ZyHW4NK*iP8y@K6W+g5~usGABCp=ha3Gr&c^eI{Ec2)b>lQu zmnC^Rfy5T%9YV&U?x1X#HGR5jc5v7c)l%i8>ftRNEd6bY$d*VDh*Ippq1C(f<_juY z^i*f;v(Je8i7dxY`|J0RwoF*5nRE<QI+$<X)1aM?53Dv3zGC7p3SFUr0p^-}Mt+!q zWs<Q)`Fyh(;4@Sh%m|!5?wFe-(vX#t1CF`LG~>~uEUG8JJ^X443pUV;wtZ`~@bBBo zLg(4d^)U2)|CqKCG~h}46t}icAN&9HkA?pZ>jeco?`b=UBKbew_xk6*kvRJ3+P{sr zB_?M4m&LW)e@Tf-`~O>nBq5PBVP?yJq)oqmg~djMN&os~3H84g<o@HInSS`M-J}06 z-_YR&pxKt*bIr_-O$sJVknH+)9m*L=TQd!;0<ZwsjdD;pD*Pm!QT3D(_Hqb6a@%iK zTGkJj*nG#O><C^tCHy(ccCxJ1i{s3;*fJmtswg=Vs-JWp9yyL4fDli2<fhoi<P7M$ zL{f(EdZwYkm5)fi5Svlo$H&D1I#*Ggr_E-Bl^dcsyTx8L92iW4p%zQoNIh=;TWTGa zE`6Ns>-&4d6~$}5m14exI9C`pMMp)cZo*7IJ#EIZowc7oC)%E`;TTeZsBN@Q>XB+) zT~h;vW{|8DPz-Adggsp4Clu1%ih56vz69drg|!5)!|Zk6GK+NuvQqwxx?o$d@Wt4~ zWCHLZCWTdPiWDz6y&V^7Gfd_|;pVCxH}?;8h)Gp%d#IPXw_eJy+p9(UaE$BASS4wM zkX+ZkIXTPifcG_=KvWF+0%chqp^q~uod#$|9u$l>;jYT+gI^1`h9__`XSO}x29J#& zS}9lI$*D2?-({qnGolNRu;}!!M>rC1RY9977EhOKV6QM~A}tNqs%g9X&O@6mxBc!L z22E<d6jmF6koZx*Hc^jVYF*GZ8!6Lwoli-TmTZdzlX9t3lZ3)`LF!+nR!cn+KEJo+ zZc`OI7Pm92?5HH{KKga%=48Bh|Gp2J+l34FApDPraCUPW3p`N1*!i!A3BW)dg~2h> zJ~zs#v=45(4p4}7?bs2+9sm!JFIwO5>2Vw%{guxp7Oi_8U$l;uG<l01+}l@A8?QU8 zSXQA)ROCe`(<XXTc#lSbE$j{P#PV4eNy+tJ--e#~^;8qKB8yPl*h^yK5^XOr5L6c3 z24y#%Omvhu1ce_8+G#pv^#q7)FJCVH^X9oErl(^T_>CHf4<FP2d&;?UPwB_OKR|Iu zWEan-%p!;X5@Rqp?2HBT>eaA3%JEVuk!q90c%*yZz6TE<7S_Me6v_AL1M3gr5m!rC zrsv+;MS5stK1T=33V{uyc2OcJowI(*KKnAfLdK`Gm}jah5@!h(^)fPoWSSx91fOQ> z7v^1TbX+>eosOW-lo7E0SEG~0Im5adJz~TPii8sXWCA3Uslxpu1@lBmL+ah0d_81z zTDIdw=c5mVGwB_ZYOwL%GOElr4wv(~c^C7C5N72)dz7+ho3%PxJ^wRq^G<K)Vw;}1 zps)#|cQi9=+yt+^SnuVP`tumR4V8t1P~CaW^NKOO^<t%Ue9nuNG>;eTUZ48hu!$wC zPct7Jm8LK@RZ(9Pz@DmOtBR$JRo=`$-CDTl6~(WWC-pya_o04g{tr$T)dO3ptV1VY zi^s8hOg1D#umow**tOLviZcg>%KrL6+_wOyWfhgTTyM~L7;C3BkJ>_`q+tMJh<)(j z4pQ<o$BqHlI!a0|l;123|6BE^qg<sG>#75;u>@y+-cQSN|2Y|w{yD@AENul6^sf?g zTxmx@G~9(S3gFu19n@QRKWUPc>7#1qd!DrF+)BE=$Y*D2_CwagbYew$n{G&D#;mRG z9ddKu>3O%-KX<M+6vy8x>x}hdZ*xa=ZQUg!s3kviib(C-d!GvYHE5u+gBh0b73*Va zn(;cWKI7E#Um?H>GTZ9RCm`Ff{%ZM7>E#iIFFxoPx0~)I6dD<1XMv}4|3pajeZm0* zA(%)HZr&V9l?gqXZk?d&`Y3%^$jv^aR|p?$y`t==H*|4wnzC=t!~v3ByI$sk2_)jm zN(PT=J%gau$ZaKH3*ar?$Zk~DIFaqxvG8DC+}%20betsZ&N`d;uYl5451Se8YIUcp zg@qr;!r=Ry<4litdz<fe#0Z#8K-}>$dU{iMchjZ;86A>-`TBLwe*I1#^aqxlv&6O5 z7|zn8vNATmJm=N<P$h=R?b`{7FY8!~@mBT2G^2j(+TrK=bvsxoz(P`AE`q|+X7>Dx z1#WQie@|9cz33;Q8fKw7*pH1eMSk3;n5R4ECoh<=EN62B6{(?Q=Bmo=?)d~52;XWK z?IT7`1WSaki)2ALI%Y|;RNY0E<(y1gV;_eVrpCOq>v!*d<a^2cwzf?d<W=Mt=8`Bt z6AL7QO=LYJ;|li@55ZI*App(G9)41^u)t!yuNc^<;|Hx+sSe9?XR)OyxNzdO?jib9 zx=5MCNQZ?if7DAoy5{I|nX$3Ui<yd1#KA#RM>UYIpgkV>aqaQ?6`DN7RO>(BPy8Y{ z5@l%1Suv*(m0S>|qlR_r$dRiUXl>GGd+QRK1Cs9eRWI8rT}MR*vx6W@{W=b=C8aw! z5pLU;C_b4e)3zUB7zpx3(+VsD-0}?%b0g)vL~3{bzjg15g;iIaJx(mJ9eRu<0JS0` zHuTIrZ3BC7$l$>@;D@8qVmv_{(at=2w+@mO7xyi;zDS|+FAwY)M7sbHb9zPO&3I}0 zjQ=yKwzCrGt1_v9Dw0qQ=ZRIi&EG?%7rVH)EMGocT2i*Y91~!O$Mr+Q4dMBb(Hdx# z+^iCN4C*4)mNVorrD<Q=Job8mo$n6|6Cg*bTS~?DZQGWWmv`wm7Kim@i~Yzup{?-y zsv-U|GQt-cjJ|fsTml1PoxmMC#(0Xu_)y8oAMweNRN}XttX|zZL2`WmyQr^Fe}101 zKPy@EAXB?*n@27TW~m(+7&PZ{@VJYRxRy9MjchOQYd@qcPTg;_d+%qp5;-sN`QAkr z)_)#Yr+7*!rl(k5$4!#ljHkh(&WqfSg&*4XQEGa0+}~8(Z|gqXEa17xh!QNl!iOnd zkRKPCH7w1wz0L0RQp1vLUGn^oZt}Q)d7;kRu3wGA)EZ-9+5v*WO&Gi}!ludQ!Q~f( z-M4!lnP)SmlnGQGIB=`9O!w{r85C#pD78U+XJ8<I@C?A(5;_GjswDzf(>VVYM<pyY z`0>3G=mE^vxFr*G0el9G<Qf{54JT`;?ar-uCcwbN@QBRi+hLOlyEbHGriS!48JrIC z!Ff`9<^+{o4BJcmT1Rw?%W^FzhvVb2deV{i1P%sGR9d%Yw`65zuF8DEsZ1T=C&<rw zkHjc5wDAiW4dyn3qqs9-%J_eiE}iQpV2Q?yG8mj1;a&LqFo=c@?dT^xZrnv^2kZ?X z?(Vj!b>zN4JBtDlfc%gKrm4!B!@K-lgrCP(+W#?=Tom4e^@IcBeO@#PyWz=c#A7-e z{F{YssRXvTj?Wm{5vbW&b>FVgu}AxK$K}h<{NbijcQnLW{Z3xq;?AF_BN!urq0@P! z1@Frms3<M1>G9Td%S2ZDaSsdmrGm|UT7H|$9WX9yqoj<(DN?ShS7FO>?^xLNo_fPV zB6o;Qx!(6PN7KtO2%^3NeVH<S`c9Cw?-uzZ1uN3hQXTfx12ok>cJ2Bk_>fVBZ2m=g zl@qtpid>{7HN1`YzM5p)HEC~xM6hu;c`d)2l}!Fj&rRWgr2RS|5gW|27pGnTb^_@* zwp@P3?Ac@jL6psJxiE5i?*04wq|*dSVw=JLlae@VS#VI$zQQIM5ffhq21kJ3=6tyv z_S=KNcHX>jy}HLItwxA$aW$MeQXTT&=Yg1|l;9Os{oM5F`4$V+jFgn3F%P+PusSH1 zSiBl>NM-%{^#XQj;Ct9xNm*I>)|qq}5nS0?ppJ^+(vjG9@(nh4+5dI_t%i1_pz+%S zQ+UP?%U+ygdAy8qd!_<|4|(z8I3-7(e9~)g%fS}Hn1A@t&9!xq=|Ia_@O|0)B1{2x z8v9GM-f{(3YBZrRIiXZDncbxC3u~=*!fun^MN0icK!HJUWY3w~wr$<YK|-{{Lbc-j z3dN=|zr1STcHGI&N8Pj!fde}&pnHs;Fd?9eKoOc-9@o0`FrU;ybw1zZ)Ty}y87fwM zZlKXx+1YJ+dA*}9*`-}v;r75lfkK3Zf7OzEuUtntuO4%dl90tyr1D{#4A(r5|489s z{j~6C!T2<F?I@Aym@HTO6mdiw6Pc=ABVGSPK)ii;{XJuirT0GxfpXTRM0;4IbQGXk zC>x_6t>&?il0j^Ii62frale{oZui)+WAk)%Vdec=G5Q!{-qMB@7(~g4WNXedqaNgE zdSXCcLfm-Snl~Gu036uzFNU00de&LxPSJL3wGpsoz8!vJ{MvXf0NKT2s&&t;wQX7f zD(0P^={AU=K|xhosj4(@vPf?JA!W{xw219%DvI&3v9Ca_Q_r6lWWH2)a@#jFB&f=* z)NO6rj>~=L%9W#}CTe_caG#NjuQS4`>Sg3!lF+@bwpSj3A72FztbQAe%KTdOg8@sc zk!N6=ph4^pZl%3r->(hJI9rrY+oW%xtQ-rwozcgBouzY~BBd-gvXA-N3y7@_0OBP* z-SqYV^=}UdSXz`c$w6hAF3d4}0!1Q`?BS7n?l~76)OIxk!=p-~4><X$d*PPo%RTN{ z9bCP$s-kmV!JvGR!}yK&776!K+c<1=ZY=Z@$WoYBHlLmR=wX^}mu@f?-jqZ)*45Sy z^lMA?(V;{B3i9+^ow}uq7ysJ-YF>6YG*rpAOzlfc2dUY|i$`f`A=i`Yrf7clMlDDr zX_Uo0b`}<2fz!c%d-d$OdQ4x9HNrj(^xx~&t#cEfXOQeC?Uu2m-hY5?Noq4G%*B2H zU%*kdtg*&NXZeLGzKOfzFA&Xr2g`J9nQ=n(xqI8AQn)M+uRFrP9?vjD5Ni=Q(7H#o zgVo$Z%3_AhW)&WLcw}2g`Su=0s^PESym^=~XY!(pv=K_m1_nn)Zf?Iy)i*9BW##R? zgXw^gZgdE^Hb<wS)fF??FNOolQyl`_XYe`z;H(WTVl+dQ;2EvrGILw27umTmDk>^4 zcDzxmR)5dIz?rS+@L9&Hs!rDp9TM{TN?}=G$@Ema=vLnS<vZ>ATs<WKj9M?Hz{+dk zzH|nwkZ>3zIoW!c<tvQ-Rd*fDElH+mVH*`}hU)Q~Up{|clw_#}-`c-}iAqV;6smu5 z!^7Gy%nKokGygZJI0-38+MRdtH&JMK2&;<JUKwq(Lojv7z}JU43k@{66_FhdSr?J# zx9hbPkuLH+cTtk<uLnMv2mZab3QfADPlo_jzBD{*`w1CVrrnvqz>W)yI!+u!_e@Ho zoUZKyE{lcd+w5CII=_7YxJ`+NfMaNO(mAZlEL7QgJRzF)J@M3kNK$l5+G^r9DWUkw z(bkg5Zm)>#T2rFz*WN@{dwX&GX!4Wj)_<ry{gp{L|D^Vm1s?$a5Of$!QE-^HdHu+< zR`#!qlPI4MJ}p<I_N98t`F8nfeM_c`&X*}KTe9RKL}w)AD$N6mFGuJsUC-gF^2^sx zV26&9pqaA$F+!|oB{p{|N!voT;o$Y=73%-NKW*#hO?@#XbA10~vW3790g7=tF`dv? zYJ4Vf$tL0}1KU1S<&Zwhy|$l`iYa)klsIjxY>f#C<n?OoGq?TfJNp%v8n>?78zkr_ ze2#C~GKnI977GgH#2?>$y111ukuaSCk@nUt$&=45I)PPzSgyEt%-<caGipLFh6Q!+ zxBoh@VDR);G@Lj77~%2}@RJoC8x;LI*9|&kbJKF$5GjSpuJ<>hQ$|I(RIg-bFOUr; zO>^s1G%NR)^H=$7EgU<@fOCCXlC=EWjCL4mHu^@bOMCI_(A1)`gO^<9rMTxYknz~z zR1C$@Z;t?AxIg6Kx%_%~0Ut_|X$q-JuuTuMN)QZ`XUtf$YSo+t^4p|E6%G0VHzUBb zeCEugD#p@&(hZS|q(xkz0Y6U|4jjgpNc=O9H~YRbH`9kk0Wj|1p+h`n6G=Vq#`HU# zUXaKQUEOpwG<HcBBkye3#l+INM@-i5ZY}QQK0mI$v}o$?zQcTHD#D>KQr;OH9J_ql z@uzxY@dqq$ZDmSQ3-`_Gte|aVZ*QQa6qEL?>wYf7VQHqQLmz8lCIhlcx{YWhsl;0% z0yrt2sC|Ez`rVo@2z1ACt=E-r1MtmJ4M#q?VC|3rJ%cs^^h8BXH%Ur$Ej_BHvTOqo zoMMBo2`qK#y?gd(veA_Jevh6G@e>Dp`u1%_X_8#s5@b+lK)&%Tu!N}U6`G>Aa@5*^ z8D`2^JoR`Zdl&V)3uMvm_ELAy(|mohIb~+nKZqFxC%rXB=?Vd2=k>K$mk>AgkNA?M zt3se$GM~pr{2|`)4WkE}(s$Fe-scO4g2C=BRUMtu>(^u96wo1nSd1+&Mso_FO0#V^ zFmUHi*3!{}L7@sYcm+tnMFu+(Vj3+ZA_iW4HW>{we2=~F$$YeQC&^60pJ}Q;eW#O> zfq?-G0`3I=5<Cr3;vC30yp0VTvV_e#H-Z?Nx+3<%j+Sy(_x;pAqm3=m<^r!n*~kOG zK*Hx6-PF=pdgsn^!WA5NxTY5SIU1-kk5beDvXiq(mt5Ji85!)s@NnwYW?~f$&<iSs zGj^G^%)LR;kar+3uC6{98F`+@BJb(Ag=pk@%gL3(&lDNK%VNeXs2UF+{z0dBw(~*< zhqG`zL`JAaGCH@Zv=WSor6uViPy>-x1)3!Pf!l|H&#yD_91Rl$rT$uux2VIh)Q69U zhqJ1*WY6JtM(q~5A3Hi(W!Z<3yAQCNS9oj%1-v&*1%8kTS$a>IO2(EuCe^j8^BMuY zaf>tZxYxPFB=mAone5h_dnQBM&9Lw4UTZn4Z0LtShyD$v#(y6J@k5s6rlfpg7~<r! z0rnV^Q)cZdvs+}S0z?>=^y}T5M$*D<2J%Nvq-QiTti4RL=|AB_u~4wP2vwFgATnYS z6aBJ(Pn1vZ;B7Nej;PPvy<-QC^-;KjXMA7dC7VM<NU1ZW!h{Bx-BY*z=X_UsZ&(<> znKrC8Y%+2s|17BVD5%tNxT4LahJoO$rWBi=4p0B2uqle;mMDQr2{tB2?ptlGxGZ&$ zlA&t2+532j=F!l>sldP1R6MSzIP}PjDwR{fsRL4o=U!W*QCz^1c1mo|%z8mN_2%x~ z+qW0V4}gJd(~DDjq{<2v%CG7D#cmw_Kd1M9eDC4mbYrI+?PbT#ozr1#`=Q|~JYsNU z!@ylRWz~}cOdr`S?mH^+P0xg0$z)Y9eHl^SrX|Z(uGGwLGunHonc5VwfsJk(PxIIj z+PeNnS9;vHyjmRACV#JbH}!pI<{aNnhX<SCmy&z@qjhU@@AVOk8CG(fEWG1Cxoucx z{&J=G!D%&FDcnF9%G%r5*vy)T3phj#SkLiZ;ag#a1>FFpE|JNTn>y70%8QjSW3IjV z@(ecZ&qgVfO|Gs7_U$`<b)2&5$%!Pm&BsoT8jLOpp$I_^fA<8Nnwj?Y*$@Jmtk7Fy z#+r7vtLg3a<Aq+pNLf`~y_q!|?Xsh~dTebR7Ix@R3)2YCHYj4Kom6Mn-@iHRAA{o% zD<6>;7!c%IA2_0n-4cfNZ5LeFA5iM_;HZ)NuDt+k6U15+N$L&`UeD*225K9H9$Pi4 zNPS9Un=TGY31fv;;n})%Mf&T4kB^=h?&RWPU4BtQVyyY9f4kqA#w`^0dcHB|bTv-L z|N2?>|J4NQ|92y?|3`1=kG!X?5+VcyB;D0qENFIx@xmpBnNDMTnlBtUAYbPTW=5rD zS>Im(!2kRS>ov1w>kzPM?1wzwN(<F+cG|iQNj*Dt>cnxO$p^X0dm8z%Ri1ets4qHN zTC1UZq^7=Dom$k+!hklCfxW<0AuThMOBx%-vajDio41>1!w=_LKV)!?$JxnGp@$DY zg){-_B&4sN+3R(Q5VX++BAkqrj|Y5Vh~u}1_Ke67;w=ti@KpyHjRXi{G-}kB7uNzX zURF_2Ia)67M1uNR{~>ylM52Wa>V)v{I$oK#n7A`w$bK6qBS}GL0>~(*f7<-S9W)4w z(WuMFz>2rHxOQ1o)FZq$R;?Q8-M>^rJC88T043-0E8;WORCM}+z_F?<AsDYWW42#K z3an!+uMt_nO*rv5iyaBEF)_l1l0*-=?@di$Z2<uR^sV+jP0Y%8k-U#V2os@8sO3Ky zsVn0jf*=w977HX80MvkrpTWRcuE%Z-v@_^x%*$;3GpFXBnbxsmN4x-<0K0xRyisiU zpzt+b>&u<hk#BDfY-}!0chs1ssej}dT@K3vcHCH;Xb}|=(X&q<*w=MhkGIXrGp~p( z4|$QKy2JZtoUwmugpiPA0-4Tysmkx=|B3bhid7cOK3)RL17pdNn0=(CE}AKMRLYGc zN`~Uo?tV9Os)|~XHKi>8Mmd(^oQU-FbO>utkT29HX1$3^%9-f(<<~s(Os%}S()9-q z&QTO_DhN>o^2p?8TK7hGEPUBK;&`HhN)MZbmfMP*jWf^U8i*`9LCP0;DjWpyPl1KL zY85j=G(=fc6yzyapFyMQyXzh@3jZGi&}R7Vq**zUAeY@~s3MyMvzIZ%_3OAG*D<$b zToBgn=v+Uin!W7<&2UkLKf{R9R0Vg0`LI0+!d3T=CGSvu+)s5#lWgCIgkkah-<xp( z3I*vI9Qwt<<DX)cjf+K+c&onLW@#bWKsRO2Y?Y?K8~prP$&d6#rY(*=lboE5<GJ8b zCBl0H^N{bG^p##AJ)y)n#&M;q<Ui3#5)3P-Zve|;L#8SHI;gIY26@+V`Wflz*hZq7 zTEzb3kPxBXa&>b9Dl|(B(+?5%v^mgw(8y7v`tWBctqz!HTTEp$(M<cpn6!bLK&rZL zSpj9V<l41LGBOC3)Ya>YKl61$5nKba4{jw7YOabbmh|TPW>+=dU`wt3k-J*!f_EAE zR3cZrM~yAIMX!f0i&nd%5^rCO(uP*>sck#$U32@_RhrcIm^C&3sdE0f{Q1WegDk2d zQwJ{{wYB{5V^UiQTdY*WdHpqG`i2@|U-%7fA<kZZz_=d&Unf(TrvrGNIB_0#hK4KH z2vFYv+&oEj=-^NwA@NBOTHARvKA6*sZc%6{%LGzPLKYO{uk6ZE4c2`VSG(wFGxM~; zGa}GXf)6qr^M9WL&<wXuCh!#i=kJ=AdFq_Y0pU6E#tD7i_{w{iZq`b_qRQ}Od(xfd zP{qVI2PwTGUX^@&0;s}o(4wdvJUEW>0{b6aJS3&0REG_l^Igh8aZ!1oMdF;}xqLe4 zYw%!Sy_pAgd(9_a5SH<a2^x%Wjvl>o@7^k4yWi8~&F#A<JsR9aX0YG)#>V#O6?^xl z%Aili%%ltwu<p0p*4-`7jkB0p-*NX+=AYg!T6Ig8EvtZiN-ec<qu@7I`1Fe)siTMB zT&wln-chObmZOAr05g8e;jF}_fBC}Aucz1h(-+Ql?Q7UJf~+$q7vQD*C#4|7rzw&n zwY7n$?xE%KLFEHr+(l8}?uVNCwp8`Wi56}vR(yQ-&a3gOtK~-ax?Znr`8nMkW+Tr^ z@P%J=t$l-C@7}$O-pn~GGC#V{NLG39;5k$Nciwkap6dYTaMVX}Srur_=B(k7LUcjV zLI)cHvxd4a`{$319B?n+Q16;DZJC{LKKT4x8E^*j5v9u%NwyRM&yLd71>fYy{Hd+i z*Ijd!WjgwclEfq!Dmw$;A2TK4p{+pCiOwirVbPIwx$}=%Ie(CTpfPV-cfsxy6fk0X z9J)=?<QPl+#i?a?@2(&y36L$80u*3gVJB>i&t8vzKeFCl*P^tRnzH5B53zoPZ)6P# zirB)9`C0egDnq8V#O9wzkyS8Nps`+Fp5~v`2v_V9X9(<`u5-bUSz~l>>df!gG*N>+ zYx9^ck|m)d2^{rLXyvEi2FYdw$dg197M=E0P*9MS^`LX){Hxx~{e60SdY4W-P}KUQ zLYQtJ?L!l=y1aI6a)TP5glP{$;Q@YtRL*=7z`tmgL1L>+@+B0sV7}O<4QKT9rzyGm zIX`YKi2r+*zdF+neF)|}U;~Ftwv_xm*YA-^$46BVjl`MYoM@X~x-+F<e(``gA|rkU zTbS^-NCmbgxT;;h!YR%iXEE{5Q+(Q`_T^*{tF8fOku!A-sI01ro0o%a7BwMnD^IcR z-Tj-e9lc%$nuz&Y2l>$-Se(nU;W^M2!tirh8&8XHTn0C~P6I-X2(kP?s^ee9&pL#i zO8_?ljQ{q{Yg)bYwKz`bcfd>|1UlY?yLawHe9+7gzay>X6|^(yucM}YC~W+MKtnT_ zxTwXLgph&gi2x_Z>FEXDSUkUUzWaZi@ElM4<%HK=EqU?fTl>f9?(#!@KM;;PM;4>s z$f$3Odog2~I+b23%*3;3^dsnlf|ms&EF3ixfhOs{$mw|5(+MZ8tW?ckp0l45S=>24 z;#7@fZq;g*1{73&#!&4d3S+n0aA|0Og3Bhb<4(h4VAbK%ypp1|XSiqeclhZv*-`@_ zm1d@#DE?#4LO1;;DhjqO6d7-nNLa`?Per!4L(%>F$3w2uofQ@B(GQ+Dz*N8UoX79h zZGIG>m7PDtXDWnFC~Lv;CF-j`?A!ja7-=P~tBURXK`iQlUgNii$z@&#hc$NhOH;d* z;pa__4{x21`IY7>ybZQ^gfUz*LdRyXg8o1BhdurySxVshb!Vz^N??!PC)-<0>U7G? z^ilBJaTouGHQv$<R6skWSATsw$1OCtxY#VIkRmXvKvup<GJnv;G@c~A|3c=UyxZEx zQ~u;q91=~nxN-JRD#Y|#|Di&_0W}{jvb<;*)^$N}Ae084+@H>QUN85VOtGk{F>O_T za}|80q+aYoMgsy^Oy}ptC4*)Q8);Q$RDt4`^?&dQAD5MBuXt+rVh}-)VpS{TdT=6f ztA|K7!ml)wcmyLtT7;>cj%03HXQ&ft#6xb8FpFHe*2Bz2&a_t0#yoDy+tl~qVE^gx zo4_yrbh6w3x09V^x4m<ld*xqG3)RN@ibTjUDTjpZT$NkqBA~2;1_`E<fG4~Y7@=&L z%VQ@XYdEMvtCt!ET#S{E(3n@z{S=6mAYEXi=9;TtsLX}-3vdV8#MlwDJ@*YC8dYcC zXw$V@H{UvOcyh8JAy3pGD*!V71lxp<k*_mOB8%0NY`Fl`fT`iIc=7UQmoK^AAJXt( zfrZ5@u~@(wm|vq_0U($&Le^@BGV2K;f^ax^Ps|+|(1v<bXE$La2Xc*N0Q&>MDcBsc z8~cgJ5P#ple!Ujlk81*<%r48rxIt<b1v0RLC#4qX1it}mrG|?mEpB}L&EnX!?hcPO zA!wK^wwkma9BtkM6B;@KK1l{qy*6}Rb=f`MH}MYE3W0_x{X2jLlSDC=aVw71IGR~6 zHEb1K88z$9{4KByp8|SdON*{>gl%Wz1-u1GC3=lL%e;UWcwrbsqLz8o^UUe_X6_Xf zscCo29kV4RL1AGxjTD)fba~gJavY9OmsXb=SUlEcUfeDLg{YFD&$6K#f;%kNowhc{ z6pBU;P02Jv!<A$DHiRU!+-68?uP*go!hGGr{F*zC@=Arn!@WKoo6Y?7pQdtpxjPeH zR>b^qHl$Jk-s}jsyJ2I-j@^0V<uCY?#3&rVak=l`y_++mM0LEb6=Ow0BCLn3f=U$! zaY<D;3HH6C%#QYTdj?k?a5-?*IwEG`fHCl8IU$fTOfF45cJOU%k!t*_#A%`Fb~i0! z%o0wx%bkfa_f6Wc`h42ugkYyZ?*#W2<?-X~28O!KbqU^8&)K7m=+910ie2hCkTOWQ zSQCN$#?tsDSq{p2G`KLu{kC}b!jcuSJiT!FXbaU{yLZ1{ImSY>BH~1rain6G#u45c zzdh=>cD&UdBDB`bBJtr}$x*1i(`oZ^#0<}wl2)zGBnCaj{sPLEkI&`i9Tgys0EdJm z7t$2?F@V(r#+kCa2MHqcQA=i#NhohqDKovjTM+P?f9yBZkDBFAdpL+l$jy*c3G#wP zi<C0F(US63y(!)JTxbghOH2M<D{av5oxOFo8E&5Z{|rI>w{OP>Kx4rl-&rboEaVwR zDJV|Z4&ew<<Y3l*(E(03w?X(SATt6OLVAe@h)p~1HYap8t5%ULFrS-841^;<Z%F1I z5*2Dc)cBgObjVGlHB4KMWk1}RGVaW~S5M^L&c{g#{*T`ttzJ|9&H8Xe6?sUD^re4f z1)B`r#8#Qcnz<ci8<Sc^6t!0CH9fjZ#@LJ2>P)`B!MJejmI*#M0qP#j0R${1KgqUR zL3;TfxYMb|hdy5^ti7eb<PN30Hp+x5yM%Far%&<Tnbd7rTHn36TBh>q481wx2CF1# zl<2j_S`Jezl538BsqXQst+JWZq&t{}Vu6ORJtj%QY1yysx|e}VWq5ZdB>TuT!I=Fo zUToqiJ4KfLap_W=**o6CvSrJ3j9QR0Qy<XRa*c(Ng&?<B-lVz@Ho*RDR*CP}waZfO zGF%b3utb|-g{?<ubFP)3!x<@~wHZTvAmC6XP%)HhEYbBUIaMV4R#|2P$7CsC54KEo z$*#A@YJ{yzeEk@jNcxN1=Jyiqz*Z3B451ONKhavq`4PKfDd8-#6ng3BPqjs4!dE$T z$PmH3U0d6OWq492dz?+|9^v({)H-&v(~P<6+8$350OF+LxVbNuBNM!nZ+<pbKJjr~ zUUhbG@1+fVX4*ldj+~Ibw479E{G-x5$%%2~FdFMjx@me)i+*G2UG&%m%63EXU7+y( z+zM7#k`a%eOUHE)SqJ_jLa+HcnCTu9@N%j;v*h+ix0>wNTts>!rOdH5$OgF1`^*{v zv(XDovGAO4YC53lB^}alBFw9cu}R<MsmA_gmnJtbH6ue<W!h7BfFE?Y7DjH|sofEs zew;N{_|a*s$6GYi?@LdP#>x(g!=32SACV7gzbNnfP<vecmgNU<lltj+{BYaf;3e`e z4tqFaEf{Q@dPfbp+Ixx95{1hhT((%Yoo@SvWw<$&pIIfT@|gDO|H>n*N4Lr?wx<VO z#H{tii8ow$^hQXf5W&q{#+Ea3WxLjsoSnhiM^moPzO;5%C?F@_EF4<qB4yKzvS%c9 zU7#H(EMxTBgKHM06a((zk-)oIq*1Qf*;6~*O8VsuY68|O4f-cRC9j}B*)R6Q321`f zSbe4}GwezIjbaWj%W&|=TPIf17#{hU5e#2%Y<#@x?3Og+3AB_01}tPs&DTz&(?p7b zrEz)b!{LoRwCEV=VsEYBRD>S6mH^w4UDT3F2yB^OP@&E+F*(G87mat{nmS^#IOZBt za-K9V;6ooBJiEy?Vp^e;$(C6I=M0dRr0-y43-g1s+P+)=f;V5FM5$(not!1E;n&h{ z30_>DqmS&`Wx|~6%z{gKWl8x>K`4sKjS~83>b#Hj^E^(pWwJ%TW)JU=JIL?=PL(%B zKeLpEGVA&wjeoq~q`r5~$-!q8uO<ZeIF4$`OVHbhHOryM6YY)9UM(9_{?&ei`ckiD z50A6Ge6xhH;Uo(#A8~sAIrn++QdrRCw8l!JltA#C8l!!F=3t06=Rf>5;mSnulBQ8| zx;G`mz6ojvqoX%s?n*00p8rfET=J*AnCji75%SqNG8s6j)cO+3C#r_qSX<v(VIgO5 z9PfPoDCL~co!W*CqKeq<{xnirrcWQiMU0w5*s`ssH?OjG$v*AoUd=FaeklRz8iw1X zt1!-2lAvU$zo}oO@lWPW!cd=Bvv<@vVc92>gkpE%Mow}oPV)CnKL}w0Vz}~tJ%_Mc zzp;X2BHgTvh%4GdUfx(yu5wHC$j!ljGi-*&Rt+9Hlz21-F(5M#I9T8|U=OulzxKt_ z!^TFT#pj;{oYas#t0FD>{ox{m+!?PI_U}>@3GM|<&d#6z#@HK8)$D^~u3C35O&Aw8 ztsV$CsUKED|8eD_v{~ks&pYI({^`r*wr3N5mgFKBLy3X=sKH_A*#0OxHAzg{2Hy0T z+LRg-b|SqhSI4KJs#m$(1gF3Jw~l>!8=INgz>;`JUs?>@VN~poIrW&iO$&Hu8i5~k z5x73o(kCYAje0$2o5(zVpV2GCbuPrKGy^6Im*}zl<Lo@m)|D8ZijMB1(>>qkLsjjM zfetl}Z~JugygH{cGBm|KolHW*K<&A6_wFHn!WRbwp10!uqVnjsU(S3<HR|6KQQ*_| zxKG!67Om=zTl`oTb|%k!TWtA4_k-?@BPK*-Y~oi^reYI^`yu8AN#UI~Ctb<S-QK(+ z!^<*EQN92ptL&ESzxYUb*+z#qMA`o^5d*V1ooT+?+kge`$H+tE(UH2k@n=4&obrrU z^_fafVT*o*@0`gbTTNe}DXVI*atmxNcxv7A5l5O7f3jy4!k9K~wt*1~I2zHOm1=Mm zVrwQGOVK;y>Ra8W;!m#7Ni8$mw~=eDN|n<Cdu*PNekDmF?(`a<a}XzW^_f3{=h)l( z!lcHehs4O{y57`gd<jTN^_M-;_P6a;HM0K&`8K!U^8D$SHMS#DwD9cg?CRP2M-*jb zinD!xg4sdu4bsmS5J1pqzNxB@`<#P0YT8B?1EgW-f>>~vw>%P^meJ-@L!d<G)wnZZ zYDLWWH2ZQdLHZlL!F*E5-VGG9{M0_Cpwo$7-T+~Ov(~R~UqBsroUcB7I20LqLfp8+ zCK1=#ML^EH=iXcaVfD-R%5MG{##NxgCO`CKoc<4XSeEWvT}`($6(;SMabp=y3P!Bs zjxR1ap5-6ET-kk=wOo!sW9HSFCm0w2*gSL^o_u;=mY@qF(jywOAXKsm2p%~H8Z=F- zW+gC`$>}+qwmPW;kVjq5y&gsSx3l|$@Wr6Q+!xt&X2Ioxw9)t8%zxt$s-;`8rA2b8 z<rZMQB-Nv@ojH~s3l1wN7q)k(biD8TE;YFdFo2ej5I7_Ho#N&^wvVWX8ojk|r)rxz zPmUSGv9CS7L`K}1=I)ak>bpmLCLIm8yHLai#Ds*mJUYgKs5xJ)93yqr;>KM<lN;3l z*!2hAkwC}Tw-1_uponeI%$v58N7h{gCZatf%$u{elDI22AV~%8-i@H)1B@wWWX+wf zyuJ|MlG@E<#@`&NaXQP3>~CBC`>bIgfWm{w9QJICdzt2vC2y#CNkctEgn&qZ{h86a zAE?vO^30L@72YIn5HfyKq!>)8uYq57!SVK9LS{XqqiZjU?5Y`n{ADzi6>8$gkV0G| z6Kx2&@lQJ`TmA&YTId>^;dMd$zGr3V`L1hKSWDiWo@A9r>@v=vY&v%i0l~gQ26OuM z?aOs?TDp|AzmvPvKS!9))A{!4lVrDUP)cvYeaW}`WO}v)Sc|76*gwMcMK&ggiESbt zGQbd^XP`j-Bv*1~#X^P17nBV@=%?Yf<2+=Vd`aD4>@e*rqlBPGC3)BKFmkrEwodqz zU^;8o?yjR|*so(Gl>v=w?ONoBxbKW-|7HF<IjiPgmNBl%ByL*HY;HySpwck&n?p}+ zG@nwlS1Y&X%IdZP!31v?rZ*NEqY$Hx6YbF5cqVDQ+JJXjuH{^DCpW#NhqCSa9$gGw zBK+6l5SK4I+lmLg|M20o+bT&7nvycS@6^@Z2|^b3_mO<RJzTwNOke#Y$tj=df&iw3 zwgVCt0=b?F3S&7GKpy$6RgwoyyEJ6is;4$hu`jZR{DbaAP3N((Mr!P5x=X%?UzSc6 zm;GhwbXQBpe@M)}F|EobcRFRLvaBCgR!g7$(ZDt;*;yOl7P9u7an9h!X%trgxpfdd zDaGBNzO{J0CE7{C&Gp$YLnlq5N<{_ijo$tGwNR@FY?&2u81%)*Ljp}G=u<9`hyG@O z<y{!Qdy`+(2N{QBjGma_d}r9wJT+;3;yYV9=f;W{yR-J?2T;11hA5b41Lyng;q$AV z+RzAq%Y|zC{@q1)%}Q!4<~z*90ijsK<JMwZ5q}tYv*eu1#U~EXC<8#TxJK|h*Y0*H zTz+P>o!|EDY~8_v>@L@=)OhOKcd<pU2El^@mZs>IKXTV<%qX(wIiTHkuY%%hz;QSf zxSQEAlov@h<*$|dIYl8!;Wo9d@Gr#TEEvw7ANy#W*gcyJrn)*Z&+vXf>)i_x#~h~o zLz!al+Y;9tjjHs~)vHQO@%8l=M7OA)9j`XT_0Y-hHtiGCDLa2)pbLnp?Q^1y(kmJn zKITu%P#6`Q{xad!=k*-(pWi<pZ;ld!PCI>>FFxSl|E3LXcjCHIHK8P;Zf2z8ffkTb zEB|h`u4}QO(n?Z)Vr%t}oQtWysA>t~@!72(3HClzayB?B+5Ygm`-VE}k4+7GTTC3J zOhiLhwN44>X&q?#XsoQX^h8NL7Srd{3%7I05;gVtg1sME5;fG>1FIdzue{%O{g39% z9EXbt9SRCg{b{Fk<_I~5{)lBCNp9^4p@Nqi3rMu!m*|eL+8bhecK+g-U%?Il)ZNO{ z;+i)sEEzT-qpL1G>E{~Lr{&4j%~U=K0r^@7|E8@yTPy#!CsIv^KBN%71&C1Z7|H<( z&U?K#w%UC3s8QyU3!R*V4T#Ja-@4t-_?LN-Rk!@k@lNuBGW*`KDR#rxQIC(ky(4&* z)UJ^*IArAIhsgv2Rjb-Bhr#`$xxsG_WWkEpGvrMw*ukO)<(Ob7C>fodhcvmS?EE>f zi{&n1>J4Pvddosg=@1Q84^q$m>r9k<=;}UIQ)D!E?gL;0ShgUS8nRMV23nNrmp15x z+-w5Nt6Fim)Y5D2%;GG|rx~41<4l)khA8Mv_iAyhPiP82^%uKxpHzNK_~HN1@t#d? z__psJwk(5w+RmTo3;-f^Rdzw2h`oCmfSxiP0N@>Vq=lHa?BSUTpt100txkQ3eKF1% zz+uxwrY675eMC+l`@NO$>=SV0$PxE^=I^lZs;nj>wtDyY{D?YVU6ZXQ2PLAwgxyRZ zWtmaF(Y7iN8KV00I_`U^>FMr8N4K~K;m6DX6ji)V;V?EwwX^`dOtJnd%!T!HxG*8j z*+XU@o+)W;WP~HdD`;jN8NC@P<?u`%!1Ar%DcvC1QP`n^&0_^TV3wxl*&W%gFVeke z_~YZ%Ad_Q%TNWuwB0ivKB1e^EbR}-&Rm8MTg8*%MDaBj-5XRBnH~5*08U|q-4{S+O zR`=ntRef$(8aJ>BRX;oQfpv3r+d(K`b2a#%Gfe7;#Q!_Hn^UUm{$(;WL-M~IjVz~} zl%83kWx=4oPyha~gM1@0a<xLD<f2;Zh6+6eWL%0~0@y{bFV584Tmn!%aFl*5_n@fa ztW{(M?byM12?7UWz>wxVO;+{-VS(8C?IE5Ex<8(2RpXRhYo=L@-YZybF@C^&o6iG) z3`NtGDSc+97pNM?AFa*Y*H7J^xyUCbb+;6759mVkoj<q~_3J%Nb2^eK2wtSIRrETf z6^iRMnNI|dgsdzn{~T^G3a+V@i(^O3?y}dp?=>BlgLxKlf`>@$^7RsyHwjrCU|aKG z*$zcVL+42WR?cR*{u83Sl_|VQS1gNo#*BzLWO!7R+v3H=Fkp}}Gi}oNW;!qws=`GI zH6Rmi-5>B%={pe18lT=VaRe_gVL}D-Sy+x(+iOE^@$jfFirJQvQ$h$JJBjI$A+uAZ z!W(gfE&1um2g-t9h2O`gT)5IibHOp~e{uKbQ9bu<`)?VNh>$5lG9)EZh9rroB+V*w zDk{^JB&0$v6dE)rS0b8IDj_m!7NRtmhiIaNkg#7LuJL)U`~K~<*V=3Cwfp0K?)yRY z{e0f<b2!f9JPstUc<_mjQe&@i6Yf!Mv%EyLU(I8N-@z6KBl^n9$slc9<d6#+kF=-7 zhx`GwCGT@RCr91!jvXs!kR2iAPV7zN;ehJ6PXPTrL!pz7J@@|7Ze>^HlZn$E>wPg* z7O2@TXkGuiq|bn0rhNn*w4C`x<}vPz?Nu;4-{BSC^FQ($N6n6h%)lAirriXV@#M+U zo$>L?dwZywPI6Dvf6w{&cfzCHrTYG(qYK@3`4(ugGVtN5+kc=Y=8w4!<+QpWj%JCS zoI}CEjO{ZBMez}zmqxX+L;;56;Osnl@aMIczPeQx_KpygeVl$V*~I;g3%_QS>4c)- zL;eN&Krz%%>78TO^iT9{0)RFBkh`$BIo|r{sHMI18T*3*fxQZVEiZlbjr@GJ<gQV- zt4|5Lv+N-|qJ5>MQM?r<1<g;rK0WPJDP1LK5q0g~e0Scof+dsgeeRoCAZt>h$Feh# zMw9ZBKNg6SXU`hnpSHDi=7r?68yCv-kJ+0$?29ivpOQNiK`mA1**o4`p0wSB&YNjM z-Rsw{8yi)&*cc5B)b#i?mPXC((#e+KBAU?tdFzU0Mi!YX#y%A_@9}TcM?l&|58eNr z&6$1x>y{qk9l%NXdf|0zpdll9z>N1xl*Wt^U`;j=FVM|oXN$|B<AXRKgXz#EJD-u$ z;Yg&5Do&lcm3uGIm(?~+f$$tCKigF0D^#eixMv>@A496263WObAmBD??ZURk9H@Sj zPgKnxsSzO7-rmQIt+%xF+4JYk<|l#Kk0r;!FsQqmovm5d$Iwa6ICSoIEhCYAM>|?h zhY?#AZ*mQH2Z8!EW|8SPHFN-g)6HT9l^lu8YPtzR%(-<>(TLm7d*|jEW1(E!-Sa}; zPAE!fbV4pD@&Z1w3`~s`c;ShqmJanAvj-i$@Knk~x&HEY$JaI49zf9i-)Nmn+=}Fv z>jorN$to)SK=#Ccisz7Qk{TY~?GRQ38%J%z1h!F8x(V@=FjbCUu#((R{nlNgd(Sj~ zpQ7q}N%Q9ok+NH{0+Pynw>RI{L!?t5*Cu48!P62qFRq)G)Gk*FCrt_+lehDmk~)kY zS8H$z$1Zjr;c{d;#EL2&L<)~cgSrJVn<>3RAXN?*fB?z17N})?OP>vl4Ey-Oy)Mi? z;D6Xy0Tvc;#L>mE77i_f%8#@}$a93P1(5~{!%W5pKeq)T<T57-$y)mBnghRn7q9ER z8C@8-!t}bU9u;&d>!vQvZ$J9+>HF~}@`BM@YHqsz?dzS7NdDl(ED}X92)S<H+oY2h z$LzWW3{1)8W#72KzCr%IXt2E9j2~73ESFsH`o8#S*=Y^`0LkhdedmCi(Ot()j<mGs zp;~rs%F3v%-i-&*H?(iWRQkroNgulO7Cb;Gr%UBkL3(l?$cdQGh0#Un#QvVJ30bP5 zt*$%wD`Us0f^^2m-(^UiOz}xr;@#N!e#a<LX|**EsPymqNOkY-&(eP3BUuq|)!$%Q z?C9P6H=bjnyufpuu&P4)g5C}(Q`x@mqTb(kgXI*gu_;~JL-`NRB5kBo2eV5@_5f{| zqa`9Tmi{xbVUdW)YMKwhs^sNM%a;9r{&n*W?&T_f{x1=c%U;rtK6GiC`qZ)op!4rv z-lzZHQ%(85MG^gfEaT!`h0y!}S=on3{1-k7Ogy{G;?g?BM?Cdo-}4F!4PLzkeO}n- zlJIg@{9TtuvD3U)<6zKW;Z{$E{wcf?(ifuz28K*40RE=AHw~e6Da&<f-YT7LlXavW z6Yie^RnKQ4ug4$_u5$Xu<BD&Vm8lGjT)wJcXyERm>OmT=yQPAnqEg?<BITG&Z2F<A zC>iEAV6%vJUSi{0hNM5go?M!BE#Wb`77TLhkz(UQSbU17s^OPl({js)h!FJqg<WG3 zzm*bfAQCo1V;DVQ?6Ap6N=lOMotG~+GdI8f{H*|3;=+*qmQ)0Jh#};CsCNC$g!PUu zm-p^Ojddatx;puEyn?P)lOuH)3olYkzXJk{v+PqW&5pKPTbZs~7GtMaPQqt2ZSt)Y z5<iTG-$|`kXG73L)gzH9+&&p~Ed=j~dW@b4Nw3E%B#8@ao{V=FfP12^z%W#8_w?!E zn@WC7G+LBosmzSwvocWmXeFgm{b(u^;rW9$;bO@!gxik~kBPDIk!v0y`VR-q_MbcF z8;Bg$oSl~{*FD^ttVzA5vheJYfet7$g8D-&?xn8%`a#wKDLl3it1)||+ezg6^m9`e zw>O{8ROvMp22deY{@puw1f=sz%j(LwRX1x+O{;JJ+GJ##+KR-zqISqd`uWY_cSF~j zQ8A3K78E>pj%6#2JAa12hBGsjn#Up0jtz4LDZJm&v!n9Kp+`?yN7pt`i1MP4(-aUL zz-h1;>2{}Bg38IsLD6OO=z2~iwT=13fg`Uu1c&-p!U2f#`Uczopo3`5I|XS8B;1cG zwvpi=^V)m)=Gc<XsHl$`GYCFUX-edFT9`<+(`U;jX{D`RCZjuN-oAe0;(jYPx79zK z6m3^d`Y?c^fku#`P_Rx-&(OvKVb-vo;|_<RY4G1!kTzO$R67tHrY6o{ayQ6-J}Fmq zBI_3>!+J7-I9Tk-rAhC8V|U*3ef`J(Ds_i!zz<W5Q)dknzKKCpYnifQIcS6O`nvLK z*N%}60Wc3ljUi>VA=XBZJX`!T8?yTPd(zUz$=N}G<GBgesRd(3t@Yo(|M0}MgARSN z$k7%z$@gn9-{8cYitEi`ChZ6W*Yi`=j{P@E>z!p63y<F)6epS+!OY<=Mk>Gxnlys2 zv;FI7#KVu%(XT|o2ZK7F05}2cFU+2uM*%eu?`euR^L`UnxK>4d*fzmONAL<@aH%hN zOPy)nV3jM<Oamj^v**yBdvJFIIYMia8YP>$93n~nRXCIk74(J$ktOd}R&Ls|MYvbr zw5A=2w`kU`kTmF^eA4#lsmddb4b(_)-@m6IGMYR0^_`d^N<5tzGngL9br}nE&3Rxe zH17CuW~o)ESfI8-odgn4=$O_&#va5e4dNP29(Pc6g<JpjV_%lQS1U{1qLWV@WPjI} zN(z9Rv<Lh|0HKJTpspShE^RkZr&iuhsij%Ls`Xp6WlyK0{^9nrX|)YDKip<_me~Ef zGEkQgA|y-LhSNUWXLJB`gZC)Pgaaw)xSBpvh(^77HIXGV-mI|N_N~7$92=c{NP}E+ zS_{6y2LM%2ZZ@&4I^j!#<<d~L&jA~ml~UP{K3bEc2}}iHhM}k~;<P(=Qi=FV4V9Ka zPu5}8s^n{<T`3s}7;q)}_s;|k#Y?E5z>zmfskW^DHG-%x_Sv})I9o$WGQub_FmN2< zit}pp+oZP?3;uiemg@Vm{RBnhB3vy!J@F6PhQuUH=>$Vj*_U%dnrnWMiT92W61)tk zIh;Mf<p=0KZ791{Rka!L5;c1vDzwS2{XL>cs?jmgJ@NAJ#~t%7S1VUUg5{Y*7+B*~ zSU2B}`jN}Rl@Z!I>^5|E{}*nhvXc9dc@Kj+U0q|W(<NDtMQT`TNl8iIuZZeG;e&-i zC6opAfjtF)Gsw1Ed;$b*i2r6y9CBd!z?kY{!A4nU(b>_xmW$+SqL{h)pKi#dQGCOH z7#JtpC#cTKw`!<1Il1?%?ulWgI)ld_(y+Z-nVBq2jpBQ}V1XR(aq_^M^y`xc?#ImC z=5cR{otlH@ZIa)0?daz|QMdX^>{Js)s)D_>;7esObNc?;wmyqK7+X7_f`>4y)f?xC z7u>k<fR2bdT6bs(gTfb=kW1+-C$VwWsI~ZClKMukuf_Z1cBk0Gznag7mWvQR0|Th^ z)}A}(+Q^g-`LZzB`jEz%|4fH8-_;rY394DXXr)1ZSw;P6JiNzg{Hoy4P*3xrAqE@H z9;kA4Du(HbtvuZBN}b(8dSr&>=XZC6%{J}Ju`wm@CvBGbn5Sx?UEEGPQ(j8E=GLZs zuLgHX<42^gA7;3{CL`QJI+ybSxHQq~cWAuE>szhbi!cP`(;z%a*6;*g6l2>HIGL~X zX}nGvH0ASK1aoRs)}Ft0r*|yv1B$><j>~NN3e+P@Fv(mu36v#d(I5-)LqWS#$8|GU zxvh8SnBv`O8C3MY`vY&Rp!@mDAK2WRcC3dEsD(jC1!d)!Di2O{kzwF3!J&}S>cPeY z<H^+2B@X6$MJryI3=KT40Cy5Mp0`XM63VL1E_}nQp&%e8<T=a=NHeFqQF4p^_S8S^ zLBB6uz6>kX{c%7ZY<fMKTXbY-!oR!y7RC4-2WA9}p!a5hVGlzg#FGF>Se!)luJHL= z^zFR3oq|E<*|U6d8%VWYVb`8^?XL>$>vtbq=ID$L0xu2XA3z3>?cYBf1$kCb$U{JF zZa8g8(R}=i*X!uU#c-`Co@jxVyi80ao(qQM1OuEkI?FNkVgD!QrWTW)p0ctRsEJf3 z7OHBwywLmHz?w}_`g(o@<%UU2+`zMxN6hQa5t`ZMWZFjvJJ-tv%(fCGF$U^Te`;sk ziHn&l$v8KnO394T-(PmLnFi!mjxwrCJY5HXnL5w;a|Ej9`JRwj&Tva0J|M?uCU=9B z%5S8Tc@AyqxO;n$Yts=gjwquN;#n3-zT_vBHfl?hX@R$q+Zhq8gPX$>BvIY&o9yAg z+^kF0NA|HS?DDMHwqdM~!w~GDm$=myhDm?lk>~7fF#X}Lx|h1`YU>|4VVU+EXsANk zdiU<U*Y}IfU&pL!_m{zK^Z54?^%G4$b{ZffW9sErSGq?E!+A+-Z!oC~Tfc<9J^lQ< zbZ$_m7HP5Jr!M>Y+;O;GQF%z+8E3TFpECuL9uj+;?s<zg9jQ9qwrA*vcfUF8Ti9w6 zLGVYeK~PUX^-{HQt6kU2TK<Jl#sy~MRy#^C)_XvJs2C3z8H9|}$+azi(v)YlW>ssK zL&MaLt+^qw;riKkRX?0AbWOiZJP0|*N{L!{njEq}wuo6XQpnm+ADY-ix<uKTXR#Km zS27aq`+W!pL|5{i*{gxTdyu?pN)rwsF;1{2<RSg=;URiy-3Lw@J8G08_#&f7AZgrk zPG)3aU{*un-dT=!Cp&hjwz+vJ1v{)nnTcx}Uc8ujq02wyok~xw316|V^ypV!g8iH9 zAEZQ7KHLFpAQBNfnFI>j-@JVwjR2`;<`lwl9P?f6#?SdOf6cA&(IS2hl5I@C6*CIA z{lyMsWdoYJm)Ccq$_fXEJJOkGX|Kcafn7ZE$45|6;&-CXUq{s3fn5QnKN$TE90-!Y zwyv;VFE01=>C^N@C-h2RcM)h2sJ#=V_(2ee)>g)`woqC5nFmPZ)9|<){Oh?$n~_k& z@SGk?Gg3EKu~3x49JOCO*{{0sJAJmCo_UK$!yaBUb+<WvfrC-F>dx4uf*AAE{b_x6 zk7<<`@m4IIM2<Vfa0bfiZ`eapB2(&c`30mHikY3<kE83G_xvpg6Bt=P|K{}Z8p_wa zLy=t9`-*<~yd5HFPia)+UYTflh=saQax+h_T*0ejTFY1UHRR8Uz)S}<DY4T1jwdcn zmRUMu(_g80ihrKj#Y2iHg%Q0te*pBn=37NY1CUOj0HbS!?-V;PYD}OWtzM2xC+S&^ zDCmL6lz=i=NKPlPzB1YNC-X7B9#N*cO0&ei>$4WJ0p-3%J8I~1pS?LLSA>|VR-<A+ z;%Kk;<3^YFI22i){zG0l=s&1e<&KvBZ`xEfgx0^bsZ5J(1r0DxFQWIzxKQr+1n{9~ z^PIREkg$t5ZJp&{Gj5_ope?iS{FQlgsd5?x9qS2$IpPo#DAi+~@?_LjYKsTHKB($6 z>Ir*1f!}4Hb9tEQuiiPS=z#)z4}V#xnw;%*!jOMCMnNG!`RisbID#C|x?0TUQZ@_? zRDxW~v*PBEZz1xRO;VP0GJd%5c4=%oszegTTlZ`(Kv8IySlmE)uhprgi57FR9*wpa z4dq<m`^F&j3um1gm{zbEVf`pq*Y)e4yJR&_a|s?Fg5U}wG)ar@B%3+c{tLIW;(Zqj z+<bmFbTyWorPL>5l$C+I`=sSdUw>I1UU=R?^oR^KSTVeip1pb{OoQ_;3?5;aeolDY zSW6vH2BCS|tyksvcG9^r*hEtC5q-7e)uN~p$6jKJ4+X)C6E;X=v)X6lAi@?2*O9nD zrD3vwy2gIKuYG)+-*ww@vD>vruKYcK-h0H8^#mXWi#ueFrQ6BO%;7%$1`Oz>gA0W! zp^7e9fLno^;UTky!;}09lc?f)s-{6N9eNkoR`Zjs0)v8RXo4^0^wS;y&iwSPd+9Z~ zU=%^NNd<+4^_7vSd-CLRwF|Kj{>BCdH^o6q_Xea@s84De7kcR2*O(i_T(^&NsMff1 zF{3^^6qM`K(MP4J9BquYNxtz@uF~5=*=O(~=cQ^A3*YE-Z5hNa4$~_lU8#kh0b^nE z6L&qnOW+?;Relj4W9Ug&0KmYAr$m8DMm7Y;V>whG3+Q(7Um^_aj6CYf`r1dw&Oz{Q zHF$3?9hMMpxOk49Hf_nbTjX<8q+wLFj53{bmW$1_c`LiFu!*eD*35NuG~QA7a=ZO% zW)g_wKfHe3jwK~1V-itR8b}@bq^*npIQZ^Fn?-=ypaSSYmzJJlBaPwv%XgpQWTOQR zHcj19OS#V+vO${Nr(?jH0NrZgzI*nRlyx|o8)-8K5+Jo2eSpixje=M=GacbqVeaJE zVrb>$Bv>liOa5wqCB1v{Rxc&9tb0l@>)F0d-?T(0pJT$vDEXvb!$;R_v3RF%t@SDp z{B`m<OlUYE?HnWJ{c^9-iLu6IdNFsn!wIdye|l>+zL)d)(-BlEs46<!R?^$ST=HkR zc%m1mkM*gQB@8$wP%ENH7pV6h8!TuZhuTtyb(Z7MYI2e(%@L?D5EsTbC?6ck51H+# zgUrewYFr~*UW^mFEf#faFj|%z&=-wI1-Fs^!T~%wT~R<c&Y#;gE!V~D%%$LPAEU9k z$qQ#|)HZ0O+S7uqj-U8}J%WU|xQ*{#&aHFB_4psETxv_8n`E{{m3kyzeQjRaHu}T6 zU!~Zto*|C;!cmWdjOnm-$b0liP?IH6bCUiS0d7N_XTq^b#pgBRznW;ZCHWP0`*2Pr z6u9{>Q_DKd85tqzz#=7a^C%XhxK6-4j-jDq>hWvFRFpcv&ZZ8<`FE`Cb@9sHD>kt& zV|{Yzw&oUQR*4b{r5(@uZmKm0U5U>OwjZ8FgHqXgUl_)4Zs1S=sdbj4lw6IP9^0R7 z@>M^Xi)LfIB5$8Hb5_BKg+Brce$NKUhYzw?38CR8xD_(}^kaT!r5-W&N@8!T`Cm;I z|2#Z}-8;T~@j~IT!S{y)Q$-Uam=L4sMwl!@=$@`we%9WD7-F}z?s~t%wc(of2UWHt z7)RmFXXdtkv7;j>yu~271m#4_OP!3v5~p|m0e)?G2H}L#i}su@fE{Uw)IS$n5E?7h zPe4xuqu}2nBjJ9_Agjnz<KU>TedNI!gT$GUie`giI?Dl2Fk@ghH8Dj>RqXb!?5u-u zcIk59(kwYC@ks-33aAAb`Rd8g<~eaZDw#opQl>Ak72?l^#V6}p!c-63?wortq+Sop z%2%0P=`|!j#9sU{T;kjF^@HPAyJAnF#|6=^lYax6MNZ6fR;b48ql2#P^Yum3@Cn2U zfjmbtV!la;=0@(@x<9_J2nO$oHebr`+zFBj!Y{*OT(6(hIID{<uV6+3=a-CzBRg;U zGiKW?YV5jJqEyR?>)54F14QV}l_#%OiWQwwi=Vz>{gv1W*ag$J>x&D07EN}D{3x=Y zmy^M)r=_8Z9|4jqE=Sy=6n>0t`OKl1xOj22uYUN*uf}^6rdbE}|CrG#C>gXdloCj9 zci%WZNZ3#fD#F?Mr!!=5mfggu)f+2Lj<O2fw&DKZ>XK5WLs3Vn-;VDsqBv*zbWx@t zLbF<yFH=YH1nrq-XbKZ7o_0~Y+fgNH-P@P#j*5CrB1R9^u6$i*Inx9+R2j(b65D9y z#qYXzxqSG~bHT2)QIysN?glXPv$yUHC~=Hy27Uo9iyu9nB5S>yTQ^C`hZna_k$Vxg z#Irw|bkx{_#~m$O#KEG0F$j%4eE3k93151-Pcv7<rupMX6(uDE4v)9xMn@0Di=KVN z%1{=h1j|}fcu2uA4-^Xe$t_Q-&t6(q_oG@`WowxtAL;5AS*{93G2!oYJhQVtul`an z8|j+K7@5uAr0hDSO!L%LBjBO`8y9V0wfZ89O@Gqhg6D5I2HLw{VX8;+Huz0HwpDvg zsIR2b{EO#S`r-@~>V)}5n6A91wd^D&W^{1uw#_llpJQU?-q@RI{Xb0y;Q>UvzRxI< z%`AGNTP{81R&y{Fg0r$&>;`Q^s}gC07C>}xOwc`n5Z-tp+I(GHtiWWXNd<R4!$X15 zmbkcc!P9kY{~to{#;Wylb@}X-#s?;ru8T{i>Y!PX=&pfZ*Xv80NGj6QbTA{a<OzMO z=QS%&tE+k6fAHE8*WLNR_x^)uSN$i^Zb{{oZja@5{t+LlspXlQ9sQ;vC0<va`W-W% zx-||onm{hxu7Y-rRhgXW#nk#sG930L_BBb6iAflKY@{LEAy+#%b=feRHf=e&o*;Vh zb0pM6`G;yZW1({p`=O2>T~{ke60-n9K0okS&wgLTLi4^w;*P$HdhhEpK|x`+z1Pvn zSDp6Ey^&a__vL2FI~y^?6UD-|8WX&A@>vx>)3&5^y-R7F2IKzmI{DqFwGFvcf?OiD zWVE_CSOh%&26>Ctk5^_8bBFn~*?>yTo*QX3Xt-G#uU7BfS&l76A|XRrg0hXnE*ozX z&*Ehk?*DKc9JD!Q!I_lMDN-^rC}+09gJPNQZ1&wdsxMWY54cbSu%>+Lx5@Admogoe zxwPs7?F@J??-wFY)e6fwrFUbf!Fi|qVq)wO0Npva)?!_p141LZ;zvFAnE1zye&Fi3 zdiC53*CQk|B`htTG}p_&hZKXJ8@olZnq@rq)i42g>LDMsM6}D^MhUYL393K{dy&aa zqGjgXe)t|Ai7J>|TYoN__HT-BG0hPcB2{Mng4y8eX>eW>RDs2{{598q_XoV%ZUYbR z$+}6U+r0``&Z>o=GIH3k?9ds?R~hm&3F{H1=D8wOcFKPk4(@!-m;)RT#4Px+UZhLW zrA6DPN)9zwaKkEKS^1J0|C3cq`)4Hnt;D?I)-$J~;w&EqK)7(UIqRCoL2A#QRY=`? zbl+bZY?bz4=P=PxfQ$$+ahII&(_2re4OWl%-RdITG=N0#_JI9qqaa=Ag<|dBEd}4j z^siH1Le93$_Qh@(_5|Cg)idx+b<S!}>-(qI;H*t?G1fQUXC^ekw}VeoLIPCV^4N(1 z7Y7GvEwHlDTU$QT71JcFb8{ohPLz8=4cz;{nw*VJf^(6?0)8E&qCXLh>ORh3vEuXN z<sVfg%(}cURkX6$R+Q?0n?*8m7~75rEj4F6{ENKT)cmNENW8|k43L}VALO^w<5%7u z!g?X=s8Ax}hy2u%3;9~f0EaC1r=8xX1l?}LQo9Ar1(ynIda|QLS}MB!UK*~a6$Fa2 zfk50aay0_GoIl`iyJbE)%fP-^1di{li?mr|<6{&d>&#kBHgiGbzo&u~_R<j)kM|GE za(`=^D^fTr-TW_J-IC>O-vt=N2$YMj=lc5P5FYjB&W#!49e?OY>uXf1*_JkHV(z!A z?mlJxiViydxW{W^C<%i{pYEcC+QhrhZGwQJ7jK5NBN!JznpVs%))_!LpF-6@QwL|- z1u6&exr#;?)Q|(OrWP!*o_3ZH#4vM`y!^ErH{kb82LMX{Acp)dIutf%)=UM>r-)^p zGGx=n1^;LIn8|_LHiC`~2r9ctkfHkY?@x3$MQeS*g8PK)(P6I$%zVrL?PJ$Iu!`+L zNvPmxXLURtGhH}KtS_gNOUWNp{}2Wv#kL3zrW8fDuUvV`*#Yen=5AxgOqhsbZL+nE zO%)6Cr<6o9@fxDiuqMD>qPC$&K+h#T-G-j$YA*ZxPMe}{q?<uLI|tvcw0%9l7OKlo zMN~3xHM1rQNYKJu5M~FsDRV_6!f(+VakeRXeFC^{=;Sauqq|1T<t}Wvl9DtgH=xqz z6s;x*M^!2|;^E0<Gbjb9dT4E^-iyI^kzf+!(yFR7KpUB@R|&p5eZN;fSJ%!G)PDHM z|4lM4UL1DdA0~B|+}~ny>BTq3BNW_@dQW0og7SaivTd|~C6+jK!j7IcOLcV|>rvI8 zjYPHfkd*{hmWSAQL{Q$Y@fSMA1#A|Q#(=aM0nUh=+~e{@3uhiv>GFPm*UuYy$i!w# z^QgoR?AIl=O&TTl;y<&}`gTA}?+=u6_r*)WOCF~AhsW+e)!4A=$2|Ay$;eiqa9Hx1 z8{aGpk2<Wm$pywUlT3}@T89ft6#q@Bj)2|t;X}yOL-^8x1Gs#i@#zm)JpUG$0jhDH zNRj--0P{2Wg8(M%OKTJmxxy#?@{FSeM~hITCmv`J1Gc3yzUiMjd{bRPy9FJ-(DP|* z8DMOu|E*(mby(=RapUjBZpTRsowaU*wb}p{Wz5Y?OiBPEpihpq%a?*_!I#q)VsPOX z^^`)^#i=MTM=?;IlB~_%V(JC-c{VG@d0M;G(Yw9kB$np>V8N-r5J+{--!cu!pfxm3 z!1Sx;us-=aHLva#=asAtGWENwn}pO)$-kEFPIvn%6$u4Ujq?O3nXEk`89;_jAHGA7 z34pZ9Jn(hcP!aFC>S<fD#T4d~)oH&$MsYBYJ1yO}FGS`I5ErQT6B;h;@C^tHo2{%6 z5*0O15O(=tx~7ob5I*$0hbDi8E}Ch6oy=PSD!3IDg$8_O);1^q>LWgVtOAXzss>DP zTSZ0OS&mFk(T7-yz%y^S%bo$%IQXYM5L{^}<sHsb0$HRqs`Nvry5eM|*^bHuarvf% zX2uMJFn4Cxs_m1l(w=dHaZaEO^9dlCfJ_&?Ib1qKw^h8q-=d6bgXJT>nR;%>Q+3D{ zlIi%LL*J)BfC;UJPs`qi?1V;^V3v3Lwm`}%T)zlH6bl)Mae|?hO5F0D{NgW#zgwSV zI{##oF;2r_v#w$GD?n;y6?sqB@kH%5-Vf17At}e!;`5yo&2#3QIN0Agqb+^j++9Mf zA@J{AyXSO926wGX*RG6(m+gFg+(z-2?v*1kiUw9e$R=S>T%8Ar843aokolV;lT)?w zKWT4|9zBW}&R^u`jg%5+u>+YMi;jY03Ktn@eogt@cHWBB(>!^TBY!aW4TtrFHs$%L zY5JM9hj%2VQt6o{nC~d?tW#45DdZOliR}C-<>bJhrOko?(9_rsA>siWsLhu_3F>$H zS<}@;-FD%yBzQ<8E;au~x3DF?KS^dP_@O})P=A+b@0&Pun3C_J=hp@wb9%Vs)Z<MN z2BPuLK)!#v@Kk7hSg?m}BFcP=tu_l6wqeE=kvb>FbZ5pa8IZ2(t?vY%Ylc&mKG@}@ zoP1aH$3v{LAG{Lo!i25kRaEAUoMY&$Uo;ELnfNnqTUot%`>0*Vo_l=0<&6D7U<=Dj z5_>*bWM%EoN5Ns^T=NxjLEd<>)i(_@OI;(gr(dqQ{0?xhKB;-jysUx6cMh(i%dR4o z9QqDQt=h4=7Cn0Q$w_(p)ZZlYjY?Ic=I`!lhREy%pQps38b2iU4BNzM{z=<tRf<xd z{hfLCeQw#(D=WMcbMdSIIs;WoPQN8F|JfkRuU8Y?siRB%R*1{ZPgz*<dHW5}g&^eu z7e<%aV*P%yr})o`Yuj&$Jnr>RW3aZ_2rmBrU5WAW9#HmKc-$asl)kY;qQWVueMf6p z?$!PC;fNTEx=#Dx?C1!}Q$b9X_|zxA2650shwAI==eO)PpIlvas$%BNr|X!YeW5GM zs%~0zI>5L8#EV7IUlv<b&gg8@V`XyT={iMmdnUI(zb@ZxaHgOCyL6%naZBK&12Y1# zo@Cc$ZCc)|cg(pf5rj#zQVKDEcLfSZ-Ng{3P(Di$^Mti@I;G!ZOdaVn*%RTyMNQoj zTQ^#5!`xnze^{O1^)P&RHMKD<SV)Nd!wDzoQUyc|iWc`|MgPf|5>4IW2F;ApqiFAO zgFuUC|H^GUV&CSoq04cTN6&wqU`?U=7db6{pZx6oYHDf^&TViGzqX$}Q`Umnh`NaE z^gDNHK}n2yN$tz65gujcF%ccSjgDAk>`HI94=uY>d}w5{&?hrQuH2=%kiyA6N_EgP z>tFxXa!u~v^#Ds%janzPmmqip{+(x*0W}0&OQ%^DB_*evjv7w_LbT|CDH_%4h4c)I zueZC451Dbdk`+}bNsd_QGWlR2N+c}sN_=yqaMDR(;|ubD#A69bN##r8>Qn9+lhI#2 zefsv+wC@9_xEXq$KPNfw#MawNCacq}A1My`GO4w_h_-t4)6%tQPBFg|pi4^V!kg{J zZ`tyNH3wGJL6YHLb=xK1a}O;7tEH2d=kBE*nBUUPav*{?m>^fbrr!FgA!z<>_tr&8 zzS&6EBNhk(klgT~-kX_{-Y_R&xHQ|;$S$Pfcm7!8XQU*6`_vD&mL2J6**7sAQ>3Zn zO};p~kW$$Eo`&(U++Hgsp&o_b2ubR*hi6vq4Dre{YonUYQxd<<?~N_tlPO3355jz1 zpUWM#@24=5TKa#>@Clx79~|M(pc@7}NXw08FT#G*9fZBDPcDlVKeM~*pgl`LdW?1Y zan68G0Px-Ny0EDc(Z|-70b?fKtm`btU(P8_Jy+AI|B>4pTaZq0-@F-5;JDaWx7s`Q zs7JE^&nEE@8Og*|Vl7CQorF85rBl3LJ(zhLmSPWn7{M8M%9uX<HSV6)%Fy@;l}c-? zBexFxDvGV*e`IHAU?E+B?=o&1K=jl<(*&`(9)3BLsT_8}B$=g3&;Z3P6Gxj<F0mpn zE=P8tf{+1$n>X$2DXKUQ)o7p6BPp~$@$Ox_c7+{-m59cs<`)PMvf?`Gmbt|gw*G{n zG<^;4Gv)6Lt|EEQ7Uh#wftg-RM&Z9;@<tk?t6xPO!$ZT`dfoc<W^cslL>G=>+?=7| zFDQEm0)RRvq32tCNoCUp(({Rbn9jw{U<r`UQ3E}XA30^yjP)xmM|Z6W{ht)7w(k|^ z8@)#aef*{EfRy+)kse)#x?MkDHeI*J`wpTx?PrdfV654@_vA+7h80g&t(g3!a$b&0 zOUiCvU)zqOd?l~9Q)p+}@wnbxPp=z|7an_<x=q{{eXCxj!q6c~03{n5Zr0Q?C7O!m z8jp$^bGA6__So!f4>WT=UHA>^2BfuO3`0nT>4P+e-8$eIDGC&ZW1cf}2P%|9FPEpz z?X#&Quw3x{0Yoa$#Ir0H$>fV$?^g^czhOK<Rm7ysib*KjjL=>LnKcB%SC-h)Nzvc{ zsq#MdwA-g>f9<B7>W2>>(88kAn=#U}dc66Qg)<I9rqqd#jh*Fsv|aCcDgC4uB&Z%r zSX1}NW6~EEPFK1~hu4?izkle;(&R<wL$55w!>-^1v-?F84$TeUTkPPxa;0(X(Hp)6 zcJyIEIks%=3iOM!kNe7*8ylY#m^$_4h$0EfAgvl<MfPb{L0$TH75hBF$=SK6HTcR> zGS2w$(&6(~wC@ciitzwn;J?qFKj(h2UvCE~1*?)!(`{RorNrUM@`b=BV?yQy$efJv z37~$<z8_E71?g>_iC<!BYM$3hc5uc&j5Sv9Xnvt@Z$EsKYV!rd!<gGWb;*)gk<t@f z1eZk)$V64u=+C|RID<|rw5l5~d$D0hy3?q=@!#QjG1!+xHgn7vHy4*@?>;lN0KW&t z58CkP;lo7=(!Oq$iHcE_y*iyS^s{Vhj-7v`X<WBm$6{ONN=KUQxmt2(t(V9V|8!*w z=M%HkZcg9*=)<0?d6Obr!e8bb*RYhls4oDU1j@HE3ju#PCp~n?lD+57a&ZbBEorO_ zq^qoa0*=U&w9KNyLh@VA(y`E-{Cf@5aLwn%^z(m9R^h(zWNCJ1j-arNZgeqush@Gv z;}zs92$)DA3qpg;jB>lhO+Kom(QLz`R2?ozNQH+lI=fCZw>hw{{SFZY=VVqfaAV^) z8r1&S*|Y8>Q@Cg7T29)Q{o@clf7`F?EKAGKifu!jdj;PLxS2I8QMA3-UK#Z|@DtmQ z2{q=LX$Sg#?I*oB;p(AE5t*g$o;I+Bcw|%H`H#B`?DqE?_e@|64%Q+kLQEXmxILY% z_x<~U9a0%=0XI+xAa*QZG`JfSTvu0DhpGgx2SaH+LqqhVqCs=4B3M^l4Fte|4ltF@ zi&e;Bi-J%(T?sOYZv+Q#__V1ADMR>SogV#r6`9rWQOKigF>?<Xcnf_5jFLWn>SQXQ zmRzukyu8MWv>C~VB$i0c#8`;0ygYUwm$Bj&-ML~_3zJ$1H3AVDeK)2~G6M#zWigAI zLt^a_1M~UwSrwG`LES63vOFEBWPDnxw#>Y^PpOYHFdXNO49H31^y1SBAhWfmZ{~3- zA2eH=shapO`~{Q{nbG&2`{d1=L9(*S)}=zW=)1mOiX2nnbW2Q}Syz4!B0@ohru?c$ z+2OZd^^(11I$q8x5=AN!GQBMh21qQ9`n){Ip||NHVzI!yfEo?L)*Reb>>6z-v^Y{6 z=nAbj=6A;*ciO9ePdnoL3@6QD!c9n6$a?%?mvnA&yKO*BK}FT*Ozn<!Bm{w*@#`Bj zTV6<PHmP7~m0?0zv~HKQYO=4ONU%nypv&O$_1stx5t!aIM>%<U0t<w<7BulXwZULn zSyJXU<V$!Dwv(f7UE=(6qJ>pir3NPc!1^?^dxpCj4VRedcRoUTB{%9imtfz3*{5QJ zr<k=qu4eN5t(g(uChu;0pgh_u;`QWBUzEyohD{%yB=&fuN11_E&CZ$x>u@z~eFkDP z#2;Srin0m{4TVvb2hP!J&h=c`oO$hg`R9|^&<m*Js$B2bIZ`v{cEb3_hd{-d;WLq+ zy0z83`4=bc?M8%TCw;UebdELwf9$*POR;}D$*UiKP0uBH<Hlp`dh!CAJ%APfiGiA9 z{PhM{G|v$EzD8M)L+f3*LZQ)Qj}*prwBUFlI>P>|7%(EZ_q^s8y5q&{EfXsoCL9#2 z@EEtQ1uN0p!3AFj+`!cA)++`>(sI&_Ng2HHt3w_#w%knnOA>`K#S2&jk^_1|bq5g5 zvw4LI6E{k?S9ck;{Hs@iPo7Z?lg&x>3(u^P)v4jo&6Hu>!Va@=@sVTA&tFLe25^QD zX@E?7t@XfmW=^Ygj*ey34MIK-@!GBWrz>CG2*1loqd7yOlF7*3oE&>D->0kZK?iwW z{Jr(-)^Q&r2`kz|E@$CM@c8j#%r<KAYFstpK6G`ci#!8L5KSXND2gEs&U9_O00J33 z9<~~&fNuHz?ZQfPm(@oSpM*^T0SMu0J(-fhLblo&fg;UEg}$Y+?uj=aEIb?+0kcJm zWZ!Nmj1GPA^l1ra5rG$&_H0YQ8goG!6pH*zb0i3;#s+qqoo+XC{yyj3$!E6r>zd2i zq<i?zLxd&|YXamF*uV7NJ>L<%iaLCs0!1565d}5(1sa4c91#9n8y^`YZ;#5IWSv6% zZJ3KdA3_+sKfwZOi(L#7k+sZ5A;*x!Ef+1q>+CTH5U~LUSx@QQ-<K;`ws(BfP5(y@ zN@)K^JTK-KR%!W5L_EI<24}y|dT+5P^X0LF#58V6IX0q59bDJZifY6vBq(V6{dvt- z^FBPdcW(lEmQ$t-cqItWgW3v`$gX3W2pUXaAVTw^H!(bdqe3BjZ7`J=1o@tFY77CM z-75o=27Dzi>A%o^Wge}4>QmV9cCWjO1XHKIeE$3ZlCwm^hzJ=pWY3+`c-F3cLWbqt zX`KS2&f8bd%a}THZB+HSgTvzO%AQO?!kii%`%DFu&ARi73y+Hy)-Xe762pc^%~f&} zuN;6u|H54VC`I{SFI2z#{Hb<~R+N99Pw>Qfts7o$Sr0q3ty8soZ|%L=x+5)<a+*GS zpmM`A2+IB-Zf9~N@N>7oa;rXm!z(9-Mn$cqVz9Lx`uPc6SYm~o_ZFv|HR}p=KX)zg zH(13OUUSe|0&!6FEbF(!<}FrRZtM`_yV_y7$;X%1DhIRu+iT>;@<z@l@@q3^cF<Aa z%1oM6k(altSrbdj>c&R@B@M(7(gjMxWY41&N&Ue24uQQgo&6@1bA<1HQ#YTgi7X~T z&>{3p4WN`!Q&PG?-Qd)f0$f|X$3w9oifkzzy5*jWDgX|deD{1@1sN0VH%P^Rs!bNP zyuXjH@2|k18$sg-kC!?+);2bJQDZ?A@knif-VXwTbI71UQ_8PgS;k<3q7Mh(%bg*2 zex;r3I&hM4@?)bEN%PK}WTw15zD_iF<IKh>!sI?u2MSi<(F8KO11+0tyEqPW)(=3p z1@ZrSTr{O>Ara3Q7OUixV8X@X<Gf+s{pm48cv%Qz{?ooSVW+lCUjwpL<Kt=L#{I&x zoh0l-p=TO$GieaLSa5P1!DiT+^LJBq3YVu@Aqhbf1?$W@+x-{Pv9)!$ohmzK3_Xye zBPGgSs`TJijWUZx#;G1Po`>0+#ut|rByMYtP9E^WVva0V$=1=4dC7LKwMca|13&^} zE*#U>-)*N9dWlqm@}9~`69y0Re^pyM>Ku|uODrdL)^8;a@Zcz=OH!5qxQ;lm>FqOJ zjh+6Nnqe>rc0ACm&sJnD6h!72{^*|fgxX2}FI4Lz$Dhv3#IU^Iw|pq8%z82QgY-SK zJe9|1tRVeRq0nrPZONVQLq%MEGF%V|tc9>}{jkNz_*Bc~!LNqQY;2ur`7OBS)GalY z5!Gc)abmaC&@9|l>_AX(V;vvZz#13kL1$+5Ni)m1>gWwxx_6k$khgwXs3JGdIzd}_ z=+FWfVC+LQ1u^Sqvj*u)#tvD{!DnuY92pUmX|p#qRmCqy<CkYMm(Q+JD!897q7Nu5 zSY-O=$!nA`ssZqo(qRX0rs~cC76mgzK9=GR<%tsHz;1DfmN35nFZjxS+ci7AP3A*= zD4`HjV{1ArJiOrf+v{2}$?icTRW!yaWSMrHkdYR@_V+?BD<HK#?3O@s7M3ADg{O1< zeSA9L#9QJ#DS@hF_ks=LN71~c9zj8gX`0g1sgYKP4<6Ke;5Jhn`8e?YGtT8kYDvDn z5+z=sJ|m<hfOlh3`c7Lp&vl>PRau+putVZUKYem9dGw5cMvY6MYWCjodPRj5n?!`z z2Os>V%xQV^a8C9yGfPW1G7-0nkol21XWI9+@jAk|Z{~I~0QwA+F1|a5m5V9HlII1k zR`qfRhkIOb+RT!treqt+pGByRzFo_Rlx%X{b4AeF<*+GGpn~`XCH-yBk|`&Hb(Pf< z`K-~jKfy4n`}QqIjSMCk&Oh;qOLukczg>#rN2<pHzKs`R3546iMuQV=(OYxhCj~S& zot(qg2=$MkR1PhlCp0Gf#<gqh<=%rG`|e-46@DW-Jm6ic*%rHZV!ejCv1ssy9obF^ z9awQrPq$SKCvP$xML13AQ1Q3=)JwaEo&$QK3P2ZN`xZlRY0x=WIOb{B3@kni(`=he z16O@R!>;<}smbqYdl)Z}@PM|azFnUWJ@MSRR?s0=iNPvtZdY;@O&Y4Jt0~?-zJGrz zJ$*A0FoCOyCzx`9)p4e%3J)4$9rnZ}i=Kp5lzd1H&vl{aQtDI0JP)@Eny;BRg5!GT zM8|yB6?vhG9GA~+pf$S>UxseD=M>bIb9h1Y`mIApdl|S^t%&G*pw3GD)1WqBbO3(w zqtF0StkQ;}Y^Wq!oe=IIb3{j}k6(e^z0%U%%6W5!EoogbwjXkWOEW3~73BJ`9Y_>X z2pDM}DSAXy??hQN#XR|#)$}J9)H>#KM-l`+5>^--koA;t{IZ&Z8VRA-$A8)#dct;J zV(E+_Q>T6<&GY$@F`F=UENqOy$g*%Xi1`W{Z%#$19@kXtp+i#$sx?PXFQC;>EYf$R zTXS@;9nGUdHjW?QXESl|&2ONk5nVo?6J!k4)zl!oYv0KD^yEr=hQFwg340~OmRwgU z_cbsw3e8?H^7Bj&2zD=yS<#Pxbvq#zefaPoEzu&GPMxEU>%Z)Cb>ynFjPq7YhP)Zn zXUnH98%I7*mG=QX`&CLt)BR*k!=X?1wwhZVQ7n+snfX|3)&o0p_x8P)+u5lRB%VEH zD2se(+LW7x4fWIuaz6dK{z|05zJPq>v2`oader6x;dTQUk*CvoF=J)}`3uxO8kXpZ z%SQRxSeo0;;U-W!u^zIbx7*ieZ|$xRa))rK9@%JW>6w)nkl4V$n$m#*rF(>3+B^>9 zuo;O-Nn4QcgRTSWVLw-6PMnycclw%u`N|=zPxKljFI)6e5wd1?<=LWp4<E{ItSpp? zv9|b(eyNIe`b^h7rG3xV9;dB&#-*OBsmUB>rxa2`5QhYNNh9rdm!aJDkiFJN&h_Pu z{?NbqS{Nu;qOnlLJ%6^#3CT}*HEZ!_3ktGbyEZi;0n^bU2O$YCiInQy+n(ot?3ldU zNWbQlrju-Pss@YXKRqoyPh8Qj)k(d$ZCqh}FYC`{(Ra1(W*;=qOT6-NDbb&!3Z``` zBVz$?jgpdEzp<o;^r(5oYIj9?168o<7Bnrmsb@jpefGdRNy@l_AO__<sd=Suy+UNA zNN{Eq+C6#CVPB1M+y3pQ5X%!Fjjdd}b{gYRnoUj9U!X)|y8`S~vqi>NJ<+uLHX=OL zbdT@pl?@2oaiS3V--vWm-A!6{2S)Sf&Yk1^nyO3*Np&|}Zv5Jyb`>>H{qHr<dbuU# zDuYb1Z`3`z*8j=t*K;4qDpV%ycznC(q46Ourwmyw;~Fp-h2e}a;YFhGxpNU$mgXDy z$2}W6Zd{K@F;nS_gCnA%RL&XKxh}L-Ilr5+=j`wGTYE4A^;hZPx?uww9Tgo$_U_%= zcG~3^54Ce3va=UE)CVChy7^_xmmiCX8GhQIMmqXyAdrC|TL`#F75eMD;}3FKXr*L; zaD|DEu;PUl2zTzfdkJwk<b_tw6myc!&W?T`(<_|AhN(pQMJKnZB?UN@m6h>M8YuDH z2N|UG%$3t0^w9l4&f?g<x_=$L{F^t?F^bb3!cXCH1PoNEVFUq;*GS;w#~`k-aM2=k z(xAT{i}grMOq{tS=-AAlZ_oe$u^D+>TXc!CWVZOz{VOOi^o^R|1068M!nN+il1mrQ zos+p_U}QI-SFiCbopPmOjvt>iWeP<Z3)$&b$rRQjN5*08$V2uCuqs!nE;+vLlyBxV zkpQ5<Ug8~Im~Bf;wY+;H>g9($$!()b9HSf;8zwF<d$OhJ)7#~3dAuKZaRM2eh6;|U zRA+^sr;Z6N&pfF7-C1j?FP~W+o(Ok^k4chC7&fm^qrLaJl7uoEv!s-iizt39?{r_O zpe$d+nmuRsQjq5T@}WM@HVvglL4Kbx4pIswmFs)2G<TfPz|&>1trepqYFMDYf*GEL zEA&QoLTV9S?}>$3ruQ<M4J<Vi#>KnEsC7v+iQn>P<#4RNJU3Sm6C<cx-_$MR%o)Ky zyJlTv(6BtQD`xijQ^r4I-81sH-<W~$b9Xd~&{_EA$k#F8K|%)BTcCP}*%YyX*PZ<& zE^l0Q;lc&`3nm}&HyLpNd~kGCk9<4TxB2J5YJwnW3A?aMuWV<64yP-^D&@w-P{GVE zJ6n_03Spd*uBvhWU}z}YnOCW^$f6E_VN85LgyaUz4^5AcxpVJcp9R~UhkQQaCbr{> zLq=_COk$#ei;6R-<(aT=UYxkX3xp;bH2{N4Ut0zo{uJH>Yiq=TQIo~avR4va{z^GX z%s@A5N=>O`P-09^&W~-(uv$JTy#sh7(B_B{BM99=4Y!Ofv=q(F%+{li$>s>OM!2t> zDD0%QHoxEP`LxJ|=fcy#3Is!sbLY>81qVw-jsYM8NFy5yRb6dd6bZ-J!eXZsP6&H0 zT$p;Gpn+qptK0E&eNd3}e#`LU4%&SlWHSi7`<ths<p{mV5VOqkk*4?87q(ar?|Z=a zgp9{p2E8!kI1ajf?@U&|tKZ(do-4vu9Ih|X$D9rwJczRq6Cv9@NlEo6*!LJb_<P=9 zFJrBV`s3%BnAUd{ang;mr2j>L>H~M9aN%-~SJEq`yv=Fs`TB(E%3TTqN?Yp-CtYPM zvSeE7>gs;`?KeuQKuy;ak6+c+!vSrlQ*#FU$Jb{bH}!1OjM=ec2A~oBG<jJ%#Xa5D z_^Cm)V!YTrkwYpHKNGL&WQ~0^9#T3G<R5(XdOGoPQ(U?$I`*sd!7l=@-!6P%rF4%e z2qP!K$L!giM9B8TmazI~xq9^p+|phg*(rXMdXleKII#{JreM9_{rGi;kwpdqEa!tS zOL&b=n)Q3>3hnC1NxuwLR$h(QT=bRE8L7jcPN|YuwH)hYJ{`JnJ9VDY5<B+EG<Ux} z$HaZzOH$}_ueWndZ2doFu6?{XWxqvs*e^Fbq+LiJt6`xxmzAu;2M)X|Qn|GIgsi{) z*K6IU?H*Hl=MJrx*``gOL7i&s#$<{qo}N-uE}3AFbOj*uUU@lzgj0d>*Tvb%i5@lA zRGwqPCJZS#T<qvwPaT!h%}{CR(CEZO$W_Y(4k+VI5ZT>f(n*Plhqbm=p`qmL>^vrH z&ff4%l#oC5PymiVO^d$dp14|~m=P|Lzddzl)5%*BX3o{-FI#6mYWeN>*3gf(raM97 z2B1m8_#njpeEZU;jB}v4vVbO^=2Psjz{-jMzkg*a)WVbOWYOAiFAa>I$5|b=J#y1q zY*vOPMc*JfSEx9-`_J?@J2G7)m>`UF1c<Kv@FT0tt5;X_?>dY4!xX{pwR-jV<5AZD zBiXkaKl8~l9mWSpqBS`u_*!TN^)t^j-P9#fPW|#rzik;PK6uCOU2`TBS{Din6f(nK z_1VX^N^$Xq4I75{pF**4F?wPHeG|$Kg0EzO<9$6EFItG!*3Bh%6KgyM1c5?fIpeT& zDOlF5F=3-y!Fx*p1gw?rQB=ye>V?^^i<^UrT}9Hc>#ub+rA7~W5lVVJ@j^^76*VQo zso{w6YHHH6lU`ixb8YEZhMT!h*AZz!|7%tqt7wqnT(LMbb2HdhA;FTjbp4V*pyvL% zxwTNtGzB3&^ZwGA%blAaeZH`<@$ie6!1D%`kv>w<^LLiM;ARMAv1&M-PVYsY___NS zYioPgJQ}F(B<-K)hXwKHPjPmVGkxE5D?B%Sai)wRm(kF0FLp1?{+R0=X*xDCv2fQ# zREu~jEY6)jdv=HqE%Ho{;}zTXFoK#rYgS9+<H7zGqa&1c6p*4Ssuo<&Qd0K!E0OvB zw6XD)Lq^W5EwMA6t_-O(6tTN<OAYlb-SC%sCqm4^>w5v=Mz&Z#^3(5~BI9xG6zgg# z&RCQkOGpSmc(9_PMAYe1$E`@k*cLFH<d64^i^4>N+LYCc9@5gooC8EyjEnO67VdD^ zc!l<{V`fP`bZD)AadkB`FbHZ})V=1|Dm(9NS|K%f2;eY`8)v4PRIi&v-a~Sx)3>l@ zsQ{0U%ek}kE!UrzD&7iE?Np-9jh*o1d&K1RBXksKlpuzI(CuEF(`(A6z`P?tA$L}J z$m~4#M};qYuDw=w@<y=(?ZV<_c~)p?Ea3GD6ZrJl0F+?A(b@?nH&kpOkMj;qn5!TS zY9DU5Uov4dwA2#9kY&n3OrF%~8fkUiD3jykcfVLb8e&vIj(^S_<@e&~GUUVV<=M-Z zI5I)++kHMYSQ-gM7*zD)cz3)6`vvTyJ0VPy4bHBAL%QoV!Vp|UO1uN@8?#neb1<ZO zZMB}8CTYGHn{wbwH25{y%n=y0S*Zdz?+QO%28ih)BB#;O?Yh63vtj^i<}P%5w5=2s zY<KVPKYrGnIez^%29hTWZ{3>4cc1_c3k+PgYSrGxlWVI^?TOz85J*D{*2{<RXnL{@ zmK`CS9`c3E<ng$sff$#Sg;W&rHvp5&3)II&DjwGYU?FC)lO(n16LmG5g1y8cMiTt= zZ>=Aa01R*kTD({gd#YVA#<G3yN3uUUW%c8j@}PIXNP_Zg^!S-Q?X^J50ipXYI17`| zdP9)vR}v^x^l7+O&=h#JeG2q^dSJ@>mwVZvq8}PISc4f&I2K({ycaGUIL_CdL~Uae zk&!XpXvo^EQ3Fo|9qR0DPIBp|?qm*FheZV;s=ls{9WiHndv(;hTf^fsT@=@E)ybF| zcUP-u%eaKA7CY8j!L6Xu^#BCmLL(RJGHGC^PD1g-6oNURnwzV)4dZmSwn;NRbSRX# z{D;Rb)8V566!*{}qJm01TQ^BKai>-WR&0FRlh4XHOx}m7>05D$7n^h<Mfdp`oydiz zanNu?c5~9OW--y*K;_UG2shA1YM(zpcJwGy2Bo&=`;Cs(y?WIbCuw8jv3SgA?7B>8 zGI^j8^Cg(xye}dHZSq1>Qy9ob8|<j|O4RR+8dvzE?|rPQkZl^0tTXq|SzzVS`yc9` zKL?}V$`(^X)MARMv14!N<;}L-_ymHEtE(#}q)nQu0VB}m9s28=<7iY_4D6Oi<xB1R zwefRuKtKR}Kw+x^Xs@2$Zma@$F}o+4cW8G7V1ehod&T=;Hc}%30|_?>!*35`1MczJ zU)q0Pv}DO(Y3Wla!hi!l@CpUx>DSMlDa`PR#>1g@j>VpYVG4OeF)Nk5r4dHI?f#yU zlti&loLy*TWo2pEr+Bpog%&-;o=9Qj?)KWIBr5rZu5uX$BX!T8_v+Vg_sFmGw+pk~ z(`w!Y5we9f(sQl}=$)`CtD`_Url7DAwmFAS%`Yt_rCXyt#edtkX8?OJu80uxsz3H9 z=Bz{Z{6x*xq<PT?*=WXT&J>|cIxkPBMR`U1fFlt)aecHHEON!{Df#tc_GM0E;d_H% z5WE10O`Nq@ly>oH;VKu_wZ<3@W`x8bgYkyurwoOT-3+htQ_*UCnCUz}ZN6s@9coSi z;UE=lNf&w=G;`2f8CKONOJU#%RpE3)qXwmjLex1dY(C?_9y&TlrMk<@_06<2+L=0U z<>^<zHk(vNSe$igk}SG)Yo4K@E8~y}tNJZAU9eyafr2hf>h5;$5o-#9hV!cmJ<}Oy z@V?V%V<KYh6TqX{woOz=uMQ!g#p^b0n(XPB5*@wWNQmjrqlK8x#{*2DIi}B9)evxK zY7hrm8bTX34L-(H8c5(U^#mT=F)jLT{IgdrO~GZZ-L^3|?I0%BvokaV^19#+W}9nS z=J506&RqQVy3t~_1;QXM(IS3E`&C-M!Ko2Zo6?mDl691Yg~g~#?MQoo_Co09RM=%y z(msI$7Z(<qzSNzF$HuF7^oXqCDwX%efCk}KM1awO*Y&!eB(>uTBy!0x!G9CBX6QhJ zDn!}YQK17qa>TpXfr65f%I`wuvCCpr6%`OgK7aW#&FkAj+50grF9fm!2>KlAFjH}w z-91K<FI=*y;%FSWGKH%mk%&g@Ry90dCr(1&)LC+wYB+D6^`mb{UpVdhYO-o$K&hmL zMUtG~oBPKuZ`&hiBQnwu9IJ@Ocl|9Nspu%Tb6x4=#M6WLfg5VC#<N9pp4!aab+zx( z-LtkB-O(DoX<WjM#48)O=h*g_k!g0%raA|{SI^9<7m@v>r-Gz|l2Y);^TLD!nB&YE z{bnCwfoxXzEU_l{Y}gEC_wGT})w^(4?@_#Jzpk`11i$<bW`Va};qOpZT8hS_UvXJt zbJtO$PS2WY^VTjhJNRQ{x!a^KI~x0YE|(B#T7Bfpz0{y4^Yt{IE_2_EMuB;c?bh}@ ziaO5;W(v|lm$r|PnL%0KLx(hzSasRK$729RtRR1SxV^o}oM^N5-0VG_y~|E*Fo-tW zDRWSJ$dJQP7Rotpo%A0bG0XH;m7X-VhYr#oIEa-KNC%v)HB+*&zbG!Uhw2YD^YHN| zLao~{tMahf>01&@3>7aqH5D_2;MnuEwn5wbS#Z{`VP!2rFFJ1!^KRT{utwVBj6$kh z!2pY+#-CU!+ce(>Kco7zX(220^wZRb-tmoV>)xrOW$RS$AGPV)_8DpIKP?^`Zb%jH zQQng+{)5xJv~={gO_#m0Q9M!VlcnRzl?Wk-$VvC<bFU)p4?^b8|66R;{=$bYYU=7_ z$S*Lxf7oN|OgO|lUpvU3Hh5~tjf)4^1E5od$(8%a_{bOoOSyPCi5<~qQMA3N1qk~{ ztZgtHGMGDeb;It`j!r%P{!_fgj<lpa<_wTl5IxI%bZ3^OnOO!10u({g@W%Rkl0R_q z-n}<K)U}VDI)Y7f#Jkj5EZeD@rb|qhH0dWD*~(BgnoCLeK|3d(CSkyof$H0BI(Vx- zvF-V{9~jY(3MO5P*2Jly>2Lpk;lFyHg8?+rO<Y7IWLuW!-{drZ{=FlWJ5rYXkADK) zspUxh-&G)g{)LFCHLZWrTmSes-VWW*{eSe^0xB~x?E7^Z(Q}`y$N2Sc9!!pYPmydt ze1}e-85s|>$KQc=#NvS9Dwo#Y@s8Y;&<S@Xzpt6|7jv4=seNpDK}ba2^Ks!fKzoP! zK#Y)?^2y;PxgYS5aU0pjF!qMgMg_ZZYDJQ2@>Cv-)A`SRvU&%))!u((Dz-xqRO2|% zXL~Fk@Mxw%KedgLUVCrb+1jew<p+>*G||9JTmJVKwEIA6eP6lv98wPFoUie0&Y?9S z*eHQ6<Y?WweH$()a<h*(jyYN~I7-v+>D@cak>NISRP$R;B_>L|@(%-k;I{#$peBT{ zYoppV$YW+$)8{s!if*VN$jrB}faO18<VbMoOWD~A8_utqumx@pK+@B9pCLRzt(!2R zg`pAZH)@p(illV-jC^vJ-l{!X_#F{}$>|B-a5GBG)TGpf5;KPvK74qA?n=-ADlYE5 z=nYhyWy^YC2f;k8q?&?_9T6|ggxQcoV!mcJxaNtJls@-W$SedYA~4gs_ZuZ5U3wKA zPf2-0amuRKJOhKo<m6%Vl(J@J^$aMTs89Y3wlV$$hP7pihQ?{fyR(L{z#=W+eQ-l2 zc?QYvemN`fcvz-${-~(-kzcLQ=nW753_4iy+-RGf;vQqmUb8PQsFpl$a@%p&aOXhP zgN83z0b(aT!u*US<QlLRcH2(SKUrCQ;(G!|rnN}1j(!HN7KiBO;i>m4Om?g_n=we9 zsZ)iZws~O-|Ii@(EQFt*el~+$ziwZ<2i`POMS<sg;zT4SSVRP{s2)*;Tc#%^)(_Q= z3JEDg8U^AMO*Gxih;v_7jtH1IuUVu0b(mI+QD@clRvj`jsRpw?Y|x-`u|UE~A-}^H zHu%yS6^&nSQ!+lNrhm_BOxP5h6|8H?M!56LZYz5AZkOZ$hh@vIRJ+hgv-@stWu;Jm zo>R=;0#!~M{B~41DT4Ic9b2EDKR~4T{rdshg+pq8+pJKZxUl+OcKmUXaX}ZvPH<Me zU+TO`S<({{iNIF6ee@b6pq%;FYypXshY#0He_n_tDq>*6Dxqb=>NcXQyBEjHo#a(8 z55g?;mia_`88LmWPitjmBY{AcW13_*A_Fx9UN$o{r9NHcf}!Hq)hSkOaaytBBV%wT z61dMZSOjQ%{+4USv!2N6G#RM6OQ`t$J9kvajx}yD!xI9gsm1*Her{hC`&d9ti^FxM z@>0K^J@2ry&mY6b+&yM6wJwNJn3DBXJ5{f?w*oofm#hbT|LEn0mfHZ&nXYu$xUuBH zC^bJlL%0vr=FC<s7A%+(-p|BhWMK!}4|9W(x8Er(g-R6Z=hsCiJ~<g;pI@<qybtDr z0|pM<tLHx?Vu0@W3pFVw$v0|WX-~UFhTvvD-z5?}FLs?zdc-8_^A>3*jul+Jx;^iC zLfs0nNH?p@MVICZ=nE7JAw~JzrW@i}khY|BAhz<-`Xnh+{J}$@kcR!UJ!MIgB!dSu zY1oe4Co3+pPkY9U<tXPec@#g&LFn9}9i0@)ye$8H$7XBNKGnXb3K#YjjbQ7P`bF`_ zVh{>w7&(#<m0JfY+qcVVK5n)`WLr@+Q&J}agE*n1+w^jkt;2L*ArdDegNhvI6<`Uv zeeQnQ^Gsbh_&pq@<6E@*C>Uzkm03}RT5nX8(&0_Xo%2LJMUeA=)=6LjsR3xF3b&q` zN)*E-joVRNP*97r4(4RSz#6M=I^G$x9*NW(4@(jq);;KD!mjj`LW?!Ueg+Z&E~(Qo zTNgRf-^99nEr*ds4fr{ZD^{#<a*8-`V8%N?PU+eCz2zX%Uf`GGgs-`OdY>Nt;E6FY z0KkmKX;~CoK2UK#6I_C!UEsi-nTe&88th@V^#rLhM3H)amDr?3=;zuZrn?@FrGQ+} zd^4&Talnx^i<%l*qY+h&_kkb*raJGuN>NO>OJVI>?)s~Df`NCtc5M1-vI~%~cJC-{ z1!)L!n>KG=e9m=`X3SL+f=CUeC_|R0mEUb?hVRpmELh--w1J(f?!-$ZgHH>nacQQ+ zyLN4(Y=xhK7u~1`fhGK?BflOPS{Dfkv_@<gxuKD_@{M%F?%q#D=Tn{IejaBSZi}%* zzkUjCIkU26S(HsQfvRTO1$^RGPEIvFG;^^}uLGz~Cr_FLLv(sd&ww-iY8zxC>{Hft z8@9=bjTspk!PJ@N4e}(N5<rl|NHbNPpb<v*)>t^yE6in(eEPJd#iC2DRm(z>;~iDU zjhl=n1wzwI$>|{3*VaJ{8nHcNW|7UFUy<>X(h-ib>?D!IUx0X+^T*&A<TgY^Z98}k z1r;o_2JY13t;mXhWyt}X7GVrfl9yGp&?Nr(Iq?8I<!Sj%$c=2K@-Mh9V8z(p3sg}6 zjl23o)*gOe-xXugcYsYqsK~>IyLInZurs>`wH33)i!Uy{(ynd65h#7jmMtTNab(0i zC9JnOb+_Ag_4tnCxqYOiQ54Ygv?r=yI}26w(_<K1ILR^&c7s!9d#qR=2F|<p@0qzm zOcE@qY2uNI?2jxQrv+x5UTmDE-3v)?qs^NJXgB{JW3!2|3QN3$w@BJRJr^nVD|9gW z(9+^CwjY<=er!L4o!(!v0{i$h4VlF0;!jILpj}JFCBt<I*7op~>M7pA{>K;R16+hx z1Be8>7&Y78i{v+H@u4`k??~E&!#-#@&Y!<){mp`c$<!ze%f2tE92X7-WtV2fB@smb z-YnA<#~5H0AC+4|1Kpr*Z4Z_%Ol4p);^Df=U$I9S0h<Pbz|pU(SQ^XLqH?ZS>41$V z%~!F_+P~k3nj6?cf3eH(mN`FvLxe~PYYZruK{3rja-%p>r&n4uZ7=VP4Gd6Z*egPV z*$ry*9K#<6RYR=Xz}-@<0;$796!P@V-zN7OJXmGER&yWu$VJE6Zie&?TtV^h(|R5W zuANfpXU@zY5gyb-@xk>`r#JLFRQ%E<%QTFjvgDp3-2l*bwXd(|6hkB!K0S0zyF9FK zPbU8tFKR{hKhGZmTNK>Y6FYMG*X3ZwW7&g(&;o||%Ow?^c&22ks?9LaZ1)Jux+o1p z8@asdqIR{p``-KwQe1!GUElN{(l}0cMU05rbSj1)Z1;O6|75$r^3{<o*Y*AlnrLX~ zJwAJrg{!r7Wuiq=lWVP7uOU9{m+-|*{6DkW&k>lBQSNoin}Y~6lL65rH&;yMsM%}L zxyA>B^PQ8mhvWw@<;%gr?djEyn(5L93Kpi@=|ia_f7iO6-wZ0aQ*h>azRQ)(=U2st zMoLQvybkrL)pGJ{MS^Q<)x2%v1{Dq&HE*h`(QcQJ1@EFgL`~nQuf&gCL`@~Jw$)xW z98l7oR}Q+!S{v-Ang?gi&ye(9ys+~L*t4f|aVo`3?!$*u0dmMs!`45u{cp7O)SzNv z+nzq0dWVWRIX1pSyXiP;aH}*nzA;pCUAIm_Mddp<kdzKg`s>Yb4G|zvXu7jZAa4&5 z)-V)D_3uf8%)uU`qB0ns8~?cU!kA6<14R92KdfnA=ldptx5t{>ob=m>q5(jzw$8Mf zJLMxqx42y4Y|)xwW=cAl6MhL=Hojk1vM7i#Vi7EzP`oNHJR4Bc-fhDMGzrQvrEzh= z%#yE1XVwnZ*_~rMH&R2LC11iM#WXW}Aa{y)|HNmfesKR!6RJ+0oaEME^+O9)^UXwb zU>;-Z2A{b%@>z)e^yndXZwjl3|3Z5&FE95y(eAsGFGM*|Uw{8g3~QlKj%si0at$<G zaD?Q*1C{Sk9T!$45TvO9<cAKOIXF;MTVHYVEQMbA8oQgCy}d<#Gkmn%S5;9YLe|4{ z#NfBvZ}!%mvG~2`nI?sqe2bBx=!PJ}7U-_GUv)b9nhXw9umAqGnWt{gNR4+FMyaSQ z!5$bDB!0x65_=I@S6`!5Ge@^wp7>TIwB3e&`R#V<>u=lf@bTj%3er7~72}x6oD>0u zI#5g3i;tjFU%jeRa<qZ`#lVfiZ)E*Ojn6+%->9OQ&80K?A0L)x*4=)Q#gPXQeTR4X zvjW&;Qe64)2TA<-L|Z-{m2^b@|Ha*#hvm4oVc#JnN>ql>K(jd!2`NMK9A%1Rh=>M6 z8Yq<z4N{3@NTI|smP~~rN+@HZNJ0`S#rL~d<1@Y6_usp{{qa0&#j5+huk$>H{n+>Y zi0gV$(Nt?pNG}?h4jWg}3Kpl%TX1<%E9j<4tDU+G8d09-ZZn_0lCKHQP@~~2UoNpY zJV5hFjHxf=oX5<Rpm$IiP_00lY^mPu{Ic+c#Zg2HX$M?xfZQRAfegoXqqKFi>mTT} z%^5rzLB*7d&sA3yat)e%$L|pjX3sJV6*$pUJQ|)>^XxeE`eK4$S~;$5x3p7XQC-$C z9N~zjr=@|DKjr|?i3p~?*p5nuY?R`~0I3;>Em*j455@zzVbZ`lhGK%~h*S*PB*YiM zZ*DMtp&!q-*Mz_X_s(VMQkuGnqY?xQJw_PM6{b@ZQfi!qI?Co{awHvvpwOh)>EyrT z@?1BR40rAbR<44<6$K~>8AhYx!&?M?e@Mh6H6|HfNuuOz!Cv6yOGEj9$UfuY<OEsa z`dIaHyx2a>F+jz5rc1C&Nt@fo>i%$pIQ<6`gJPwJHWsWiv!2pk|I?K}7}6-^jP^wS ze&qIIs30Ue8=L;;he43M{<31AXMw2i_`RsEmM)e4TCQ=i|0ci0re{#~Uvk>Sl+Lb* zjLn|BX!-JOQvI*pjyWUQuDjJPuN(IBn|yPy#pFSRWr;Vw>b~3{&P?_DLsMWo<2?>I zn2hNwS=jMoo@8&Ic1cltvdxq&$3;&x>9L_qC^XsnRv4b$KJ@Sxx!<rw5{d75U(atW zrpAH#+{!?y&5TndC1Gq>H(5IUMYo+WYSgr8Ykx70VYY;N+wQ0=NwrlAD&n=i$t^+o z8^lVU4=yT~+J(H(i-Au9bdMnkN$sRSmuPH+d=WD>_}kv*FYng1G_DM?Vvxe84MrIt zb)E_x7yt@a#Lbfwg-F|Iz3Z17!IEGSh(c^q2AraE9yqLjsju(8J|^zAoV|T{HBn|4 z9`e*ffb;C>UV~3y=5<+Dn-jezuQq1@#&9+yq+@!gU0GRUqw<j(^-t_86RN-h%GKW9 zlf^(oh(Y*OAcN_PgDXi|T-nw*NYm|w`qk5!nZ1dvzP_}RB_GH7Q|k-H3>2Y)XBnqy z>g356@N0%<%Y7kms(7#tq?(B=QVPRCtX$igz5kGHGgJl~x6gx07w_h9IXF5R5AtC^ z!9q4()sX%WgJ{OFV1@`GyE=nCoc<h8=L~&JU9cPCUnh(n-Aj#$)h$MYbeka|S+TMl z&ux#*bYHHeu0?E$&D0S57HPRo&%ONB%>H`lm5w`lo!h1nKd^n$o3|w?T@wmv72XLS z^KY&vUGlr@4GJ0Lm9B2*F<bP8K-r(O?q$#QjlO=?*4-9t_&XCh-sgo%{e#{j_i`bh z6&4PL?a4%KO{YTLF4X~7?8d-c=@IVzBDa%sK2}-*Qkp}DGC;`sNkoBTItF<aJg)<< zw#USLhTMP|WwNvdq6?&fN|64h_712NB4YiaSY@A@eO<Z_81vccfxXJjV?NeNA{xIM zA|Gqov|r|uocxcwGq|#_V8}|zrP7-7mMl4s)~8tT(nx+fgPkSuV^<FmN^;CSKLaPI zsV(A~H+&*vP5Cj_Q=08gcWFgll#?Y{h@SjoTwa7){&w-zg=sb2#V>Y^2Rj9U0)7&h zb|mb`{OB#Lry4h5f`aAOfimJBTlTNflYa8~ZDpkwva=zvOXtl)y3#pPw%h2w+hSs5 zqw=+f4TF$+o!P}hw=Zl%Qqhf8sk&|7VNaHwTa-rW;k4!{9H2ayM8a?q50a70=diw| z8DpN2yQ4(SeRyPTJoaa#Ww5I5iLGKvY!|AjS<<piV}Ydj2f=$c-Ra_<MttV{_{ftl zcBwKs<QtT>jMMw2u1;U9m3c;TH$k+E(1(&6?(B~HZEP_M0y#i>^F&`s&d_C`BA*Xd zI?iLJ+u4N*o8U+6vkFbHZMayvq-#IjN!in8IywEId1sxeQNzr})L<&v?)k7X`0eAt z-l)+qrL~+UVzPX+-}qRM={0ZPvZr>ClG4Nz+u9^4+xHtFt}w~DQuol}beVudg4E*v z-Ma>2MDUd~8EXP0tT~DIR?ZeRI_@w?HOkS}cEIVrL$SDz?j*$^s*cHA!zbmPR-8gP zk&TzxDBeDy@EO|eIR+Oc+nHGH(!9R#B%N$xOpHpi;wgGQbdP72&-U~C4r`Y77v>nq zh%l)FtIjw3FVtW+cIPygrz<J>+)$Sa$bO>|mbkWBG%R2Db5ZJ%f@tbP{Wdlm9uPP6 zPwoe!pxKj<*viv-KCnYj5ikbyDfYSqs)gFeQ2GDFWxB0<cOMBB`7QS%{1IMSq`PHg z<;LqHa!cC;0n$`lp8YZIJ2-6PLiO>Nqi!wO@X5MK<sKmcY@XqxCsifn_)N=~2*j() zA&tZQ7kDuA55hK{mKNXaY*2H=B8X^EUJi}QKQQKzCssd#(SJ+AjvblMplJ_*ehRMk zoag*O-a6g7sTq$d;}(Jc3_pFlDDsOFY(i!#O|WK{ga^uPPK+?3T=_at(kFa}Zz<!? zmFWBM=_M~4h{Yu&2%DX?v~093b;nM}G}M(s)Ie-_uP%m$hTL!vil*jfa=-`;4dZ7n z1yc_{Qr)KI#=#3JqC%Q{5mf7I&HaH4-^jhMnH?4Sz{VtkP5`T*8)cayC1b|6^zvQ1 zdZo4-z`%~be*_ORK()ru0h^4jyc`rZ&g~mJW-|N!Ns!*Sv0bKAgr%ZxOSFq{CUg2( zjv0uUF&vsIuk5~c+Vim~Y4aylY&6<3Yw?^|)&vHK7*CpLcU`71rfpFJ4gYLY(<7|q zV)+7Ph#<VCAm6sP`N|*7Ijac;vhRMa7b<jC(Vb*&L^&Az<oF7J7E3}_JQw+xozeEb zJVj!v$NTs1_2jX#G;8p{ns->QEfA~SAD@;OdU^j13UAz~Om}`Fs<Qk6VZjRwZ&>p5 z`V%~6)U&m<wdzh5+x1*z#Ppvv)JMuGtG>Nwn3Aq(OEPcU-Y8D(S1#`->(#o}$44oM zoEG$LgxIrZ&(hvCAA`VXVWDcgJu>pe+qdCTOP~RxP^7rVzucvCD5#~cJ8;XR@*V(u zKg0;DVq%IrUuw)|Gm^_zna%ENU-;R|Qmzp_9<re3mu_sps^ERTc7VfjL>Gb&<j}o$ z7{On^$)xP%ix;);-tobJVTCWYY)D8<1VXn6)VH#><`O7*>$wyp9_gZ&v=k4nSxfD5 za>8<^8l6=8MmYhfEcB(YGud(|Q0K!Xo|{=bb5<@N$)9Kp9^8+i^ZVw0<9$aP7`gqn zNH}>kL&+VVlNki`9O4{LuHwOz^gmA=pk1K8;=>gc3iFlsi%pt5d8_<5T}TQ@9PwsA zrXh$56u!@BBak&sX-;<zb$ZWUWLw)$+(Tq81l<lBCn{f>sr+Teu}XJS1QJ2pv$C?v z>bZW!(=4<^RCM~DiK91D>HX;;AQ+T8(1+;zA0z{`?7X+A`$~oFc)Kh4oQ+6)4lI<H z6NWhD;KWV+@CpcHsKfC9BmLhS=O8QfqlXU{6&H7#xlL_o#^J+BW=Z;ca=ZWJ@`7#& z{g<ZZ=4yX~`g`;AJBiy?!AYAA{em{QIGCCWNfyObuE1Y|Rm7Iv0&4ww*EP6{EV|tn zO#;)GOoyZ7cmXqFLVw~!_aA4YCf6wK*B8=o_)*2-jw$lG-u4w9OXtW8)Gu(`H<F-N zRIC2@GYiN{i1$RK7Y$)FJYP}$z!<K5dTNvPuU+)8lW)N+CTulaY;0-rWQjGE_#5EQ z=rE`3H5G5(Jj6)ZaX=7maD9xkFQjzG7jd*-%h`(;e_-ad>9vCWJiD`oXQ-$eD@N)) z8UZos0;tqyeiQUOq62-+erX&?QysQTgk7HdeE5jGw8P^0Y3^s|JG9{}@H8_|pMKA< z5wHhI$UT`cP3a(e=T^Oo&&bGNHbGzV<jE6|t-R)MeHOmP_>roG70+gtmJtV}XD`uG z8Q>P6YB8vmSrb#*{Ne*2&*oNIzC3jBAnoxAAXHi+!7q(>g_>PmSO1Le(OKv2{#tU* z>pOdW2EwJ^&O#+eJp-#|aUIhu=OzRcvPzY31TXdZQQ+1H+C;*bM`PF=pR<dN<BCB) zxvzfT2o38W!;*sdL2D){E^f0_X`_2W+O}>BB>N9<h|rJ~Qt1Fq&9nmt@PwV_rIa{u z^R)}rt>ek6#XN8VotND*X=!OziX|qRs|B|8F^Qb9NW^L&WIARPtm^)b;!mp29m7D~ zE&zgdO33z@)$D<4<hJk#?J$f|JA3=EA-NMmR$h$%cOq|O<`N^J&#)RaSJ!AmwDPK& zeU8(s2A_E~Ij-#i(O<Kb;MB^m>;J~iEfxKkvQ_Bz$QI}|m@ABJb*JSd6$qjLfad5h zi0F(Z-d0pF7*U=8Z<X}D9zzpk5xS#R5K~~i3DzO7CztHkR982$wB(3n#l+ZyGYP$V zM4c&&fQHQD$JbC|oLsYS5!5>-33L_w+M1c+&Y!o=qR=%6EnKLhuaUo@{39~X#XL7+ z-j%CYH8S?x56pLY(etKVq}dROqTI0Hty6tkSz|t_WU;F&4ExmV>=u4g=#n9iVXyP5 zp>zN@p-W3Ut)F|`;V1`|VdQrlUvm=*AS-q=N4?vz;iA&APDBaWn>D02F{K6D6!S*4 zko<_1bg>M1PuvAOR;7?N6!qJ2gsy48fOd1*cQCQJKRmf*qVlHO!w=Szqh!E@s%vUC zZ=2gD{wS<p*Ck87H@=L>?LI1D8Ko#SukQl7(?C6yiHU6_-0(uB_oaQ>Gsg2!<tz*F zd-D`K%N!El`a1>JIJ1hA4p_QIu3Ovh*2bPPf}j*BdgLOX{I0?y9zVDJ&nIl1ly0+= zO33ApO6XIvU1`Q&JlpFd_>h0`Y-9RL?4Nh9v@~PpnQi$lh`F`mymU?;IN(BbVz^5U zQS;>72%i_6G^Q*VSGheoyW?inW<Q#I1TRy1gbPHp(D9Oo3}^~xQ}jjU?`Hl`u%Eet zHPsRH-Q0zuw_qcgoA(>;EE=AdOyM)&ZgFuZaq$@xE0ZS&&l>7KP(QPI3UH^)Oy?y_ z1f39XRr|eFAQ%HhzBf63<;sa-FhWu*=Fc703(+VNH!Rqd-D8T)RAW0VexZC-Sgl~7 zuBfQr(DMc?Ra}12B8``a#j{0utwY|zMEF!pd+fgsrj-^JpgB1WJ)cYg6n5yGz}mfn z<y_c;V5cZ?Ny#4To&?qh*mzuJvcYn)%M~lAp_Pt&rI<R^=0_<QY&QcwM9d*bA$G#G z-@~;J?%IF2M?c%N85$y6C-V#H?Zz{AF*h&7=Hl8mNvo^vx;Hj8bu-1F`{1!-=3N3N z#fd0Y*3<~5!zH(*Yq~7<BH<Gn*<>RoF3#{d+Dt#?QM>r0VfF`^b<#_LHb+iK2W>(d zLjDcyY=joQx_Vbs)W#1XY=h<P5QGhv+=c@bj~5q!<nWns4r>d9ftGqniPEYXrLK{; zQ>Q*Vuj#nFFuuOMQK#SGf1Ce7oz2yj=ivLdevWl0psjwnyo(9{PH6na;Y^KX<OgO& zvXY?1#}X41H!1E8SqNZ>1pz+nX{DZ0Q&EYDj$SdkFEI}#Ri?WTI5=2*L7F4>&se)w z7i|QnR6;_Z*qh_n`T0K2I;yO!4EPgO)nUCfdI(g}w=q0rTIH+&tUq+vFsat^Fuypn zS47Lj^X3IgF@?bBk3aiR`KX7_>U2BET8wihiLD&Ho2!hyk?qu}YC1ZCL@P3*#U|a_ z{<C@X(GBOxyJRmoaXS(Hl7|^T!sJDlk>QY;%!EmMVf_Fjl{|HU*h_t^fIky}Ez0b} zE5<kA#<+P+(&eHe%qrg#%OYF9YDZ~oTqwQz&0Uq|&wI6M!RN`l3kh|+G!AS%V^#(k z2>uu^0E=xap{k_aMaIUuLOs70hw0OC%&DjMptACTJMQO~vu|Go7y<m{dsv$2E3Wy^ zoMnlNC$~{WvIr}S73!iJpb`v;eT%a?E-0BxdjBt$GF7SaaP^B70wt0UnTnS^l`_oD zBO~e0koesLVk3WfPZ-@c;9t)DK^`Yf4p06IA0+4_E9Vf}ojmF3<8!WZ!LY>}z!(W9 zo4P7&liC~+ft>48P$y~Fw&<ZPMg#^2=b?n}W<bTaM!8*mhCb9;Q}j0=k07Re<n%Ay zzsU^Ucl1lZcy%*-c3#cbisKpf52CPKU2{(ZtQ_7l^?ILPy>NO6yjmfpqr>nX1RtX# zh}BzSnW$mT%~@co*WB1hphox}zDsYi_PC#uU-c5(?qfe&bufM{6!DR<Gd~@S{4-rn zPEB_LBxk@t-(k`!*rnj=2`h3^>ClMlQMD;gIFg0wU~_6?vayhxX?*_FKUl7?S?=af zRg?<aw27Yl14jFqXU<$N$#uq{7eKY}#tp@t*k5n})~s6>(MM<78YliXEEBy!gSvE$ zI6CbQeyVbk<`&K2!!vVo_T;;aUsI=FyPwh=o~7USmfq#PFAFPZl23x9@g=a#Bi|O9 zwqKR5Ox>Zk!HRrFre%uEHMx5A>Osj12EWF$C&X(gsli<k8~3;2p5yYm*V)s;R(_(U z#+2bm1sRy3#l5s~f{qAAD6kY>T!bvZGlaO>6MoOA*TV~43X&e?G7;YF*P0?Npex|k zBLR_dFH#HweGncztpnn7X;=D{)AO!&Xz8$oNYCbEem)!l<G%G^NDL!mnpul2crjJ1 zK={j7@sBw{5}i7^K0Kk48OOYxj?|O4vwHPZF{EGphYhPEE6Lo{#7JPkfU7v5C@YH& zWma&J>8g)Nf%_U_GBJGWR=Fy!Hcyf?9Se)calL0yJAJE);mKtam8U$LZ=wP;mkAdW z=uZ$m_8HY>XzH<J0@sL_%*e7FX~c}3z!r{<V<0m7>U^Q1W$sB@J{Xsjo!vJg&Boe# z;_HC|ffm{Zh?BmUapK;{>Q6~}LqyhF?JB@0n&BzLO^S*`_e8-JztvZTU%YrRF|nTk zD#68I^tt;(8n2(K?sA!fM*BZWj0!q0H<v-_JEC!JO7a_5d9C^m`g`_7f+1@e#WOQI zZ!%|jVQiZC_U^x0&u*LOCy(Bt+Rfcb4BC|EynaH)N?2(y4FR~RC3td?Ul+*r>IGHX zMp25l9sX>z)JdF*6%-U;K{{SonKsxZ-g@Nv=&A=#hR2x^#d#RnCv)B{ol0TKjwpZs zA3$X~s|K0tD62+2#93|GvUhMnjE{Zk(qTWKfScg%+vko8%93A<+L?BC%5Qhbja;S? zasB0|Cgrzzu1uAf2Ii~jI}htcS%!lcM~9Bh>)Ng96`MY-(Q6r22*V7mSbmEA@*CYd zl(!S$tG<(*tNYq&I+1)Cfk7GglOS6hry!|4lI=hk(H}T4speB`WhW*;$}-|A?%yMQ z+mm>Es7G|xSCCoQuITRFCBzz7?znDM-<ywZQ$axueJj?iYdS?-XNS5ye+Uo1@|bCU zgJ#zNy>b0cSd3F%yl1UZji%4J^`Gp#-*0*#@>53BXRN45K*5dH2SYbrz9g+oYhfR_ z?nNO}X_eNu$6<ifzt`obsYc~HTgRRg?;NL<b|}K{+{mSvKLI*t?iVo+Wr}+HwyLqB zjCfv+86PKH4>^@bu!aiC?|a>S{x0(C{bjPtM;9u#vFiBy=O8osP_*zl98OOkf@+7I zAersjY#umtsM_9@o0J2q4_jzoZ0p@YyL0sQ_DNmEPqty$WOVy}uoSdmDs1W527V6* z#m%W|vpprn@Ih*bXrXOa<JqmZ{oke4Jdya>H7uO?{ypo1M(E`q!Ka&KH~)J1?pax@ z%-viTIwozOTs%~Ve)Jz-IWy}e8r|I8BT_8&#aJ@(ZDzl<)6KC-FzAx70+h;ezLJ4b z_&&$wNxg?_Y1Ncp`~hAUf4g0Z`7q_Oy9>`(lrQTfFcp4%1uPWr;M?K(%>F2+|M=eT z|KGS!pYN4-UpOB#r+@v@cP#qc`Cq>&QYi1$+V)?+tADcN?2G^UO?qsA?tlBP_PYOz ze=LC9bTpb&M`dM!+G^$(i{uoq5T<Bzj%Dh|j7p1JHW`hnar+V%!+(AX@!_xTeO^kE zV1)pM!~KOvQd3>ofW-AJdz>QY5!2nmjl=w5M!es?)UgKeP#BRA_0z0RZ@WB~;sbQL zVdkU5ALb2=w{tVs+@;zFO7X~h2mj9S)%O{cm-B!g8XNIh7yS_XU6<&wl**$gXgl>k z&683P4Miro09+g0(Qj=Yq$8J^f2~VU5#WqK3LU@f>G{vp{eqpHv~-`N`qk0h6LZP0 zB*SwvI!h>V-Jvd%q$ofbfXm#Nc#AVgJdEySIc?<fhbImS+|WpV!8DkBLo!dEG!$cI zDW;^&Vqmh*j-y6RR(ZqXZh@XCtEfCZyV5ZD;pXMh>Z1~<Q=dZuz$fYFa&R!vbuhdG z^^>lgI^sGoHw|HgppznD?2V4Lb9B`BGCR1dXS{j;1#UQ7&?BR>geMTYWwW1_Zb-t> zxz%o2*>7vmV&kkuM)3CXBHA%#QjnF6Nk}-dZGDJgT576>rlzpZfjVn)6!DG%>O1Lx zk}`ISw1S|Wi9Y(6B@`GykTlp_4<Qoe25l3w^`1}Li|wOg`VU0b$l|s|+1jb5oki|l ze)0r~*kvXxXc=x77G7BY?R0gORN~1!^*t}>`%v@{pm$_1htC_080;O6wwyK6clXZz z?0SZ1ml+Mf<zB0``22w$0~8Ty{5vny$ae`6EnIaWN>Ul}kn`=21ZF4w#*na|YR0GJ z|4cx2v^HMmFEe^%+2hBE<;t){r`xAE0jjb(WLE8>?w+@QP!C<Tq4hBZ_Vp55lt=x} zQgzZ>-|Pi7ch&-n6EmsQ-vJ#iSu(@UjzW4r%xUeynTxpJIX>d6TCqv}3=9C*g&*#I zv<UEFjUJ?4$E!!T!LvvhC86Z<)6rSI_bpf^K(Ku-ygg&AByMiTg~OIV_q<tU0Su+e z8{JgC*)Fi3uNu|F-t{jv_rq^i?Tn5#dUxyOsZ-FM2Igpg{rHhRb$#+TM|V9nFLb%g z<=eO4!xhvTH3~Ns@=uoz8?V0vUgU@_r=embD4~!N9NeC&)4S7<)3PVhto}h79c0%y zEajo{-7Uw?pBJQhn7dgSYdQWpU}Iao(RK=qK7QO3vGpvoN>8`2wCt)RgY^)yv&_SG zCqCqI(m7KZNl79<FdrSw<Hn^eb@s(Zhi9jj##S5rpV+jU{ciw#F#BX9TYDwDY16>x z@)n-#X23vMLQ--HA9TDjBN`%9*12;^L0ltcDKXrS=!qyCTA|@qXnWmWTj12tcEO5s zPjC#P#q6cT!aJoG;|C?Snp#Yqx`?)%I+ba1^7;;d1BeZpU1SF+4oA;`y9#A41`J5{ znKgo8NIjj4GYwYnvSOl?6^I&WcnB0i|1f`Q>#_}Z4;ePC+Le7f++*d+P7)GTAJ>3> zQG<Z>(cN(IUjia2OPijausKnV$WZm>jpNLj2~klc7ybQdKR7VZ$DIPT_QmbXmW{B; zwAzz>W4h+_e4SzSWehkLJe@H~>?uRU)vb3mJnNszv57@WN&wzrlERL9`Ems0uB4<S z*p=6YDDe@M_nUm)kBd}J@&^K?hQiz*viOuvtuz>LMFoY(jTrG@1O5naT4MXif@wNa zK~(ue1F<(XHON>8|Juk7?8~CV<hZK@4qE!@nZaP{1(PP*Y=xV!=+>@oy?Qk=mCSHF zsmkD}HcL)Uj&2Uja(K>K@Q^F5`eI5;m%gP7hX`Wrm1Cn~xU83RpJ05o7EwB3U<#&- z+-%^GAydRYHu+M11Ox<7LPelYt$%9noiKj=T4eqA(w$Og22RpclJE2cu&KP<pMe%} zh9cLw=i7SuSK0}a3d-nnc~k=7jp;fnL`oGVO~Fw+6qcXZuw&_CjnW0q&K|hV8X8{3 zBoKQk{E364VsG{vy&?&Zin8@9VrsMgE6;Xx$M%49LQ0{iXRsn@gP}~)5daDU@v!O2 z(XsbOkqnXpqz;;Wx~Gq0=P<$cSh0dp-$v&n&@_rfXla<251DmV*i_+Ln!!f~?Mj$W zL(-qL_s4$EP4?fDd#We#d%#J^R^DsZo-dn!x#4TZAV#}}V#u#Thq!3P!9E3C1PpYo zJ?1Vigw5fYD>K>W`D4NKf_b3xUTjc@&iD-;nmZpF>IJ54oR6;J;%gi0l)9YT=VA58 zOTAn&s?<lYI1_kM$LF@mQ7fWz=OaSK`0VV;jcY1n6(4?AU$F%1=l@9{y)jeOOUo|l zg>{e4Rr%o_2R&kZ+YN{~mXvhq>Q%$~nLKZ5cQW-s$5)kEr^weJWBB4V5nZ5aVz|^} zki&C~8?e$N8(kZW@1IDy(&Sgo|3Wye3_CY#Nbx|`^V=`a-R^5jQ^LK{TZCk*GG98i zo$HB*ZY}3y3UJ!^ixc{4dbQ|&2aWtwalrT7m>P9yleU3Lq<FrtRs#m2MTGZ+cN}z{ zg_3Yrg1ZM9?9;N&x8IrvHJFFpeRc!^c9PvMrt8PK#s)~!Bfo9)4M8TyC`mP{dDlVD zMxzdjr>(`5RHM#$RGIV$KLv3H>%EtLPC-^sOd0l5#oT%Mk&ZC=)*QvI_Dc>fIQfvj zk#cUS*d!H*GUk?+6F3%74hS~_(+jR$X0CA7-*#W%#!L9M#y-zI@zLYQ1EaRItca4` zGV8I$xpcO+^pcYks3))(ei}Z{nIqr3H>=}&d)JNy(c}~1%gRcMZmoOw`ZpzNv~^54 zbhB*kV(dye;0xM?PytWam&;uP^|wbwc|y<v#go<`HT=$W%^de9(>0?Ev0?btiWTQ( z)oZVCZ4)4VjA=L(N3Om<MGG*`6fv^nbnV`WBaR9M!5q}=FabG>ETCEc>D5-3wz}U+ zFJ02FAFLi!gv}+$r#F5}=H}+bReJIfm*={`&;9PSb#^b%H)qikR9B4Tqj&CP{6Bk% z!mhsvstXqVBB){*3Lm4-*e~u<(W6wV9?vV#9r}vjNeIs!dYu~rq_Z>6`C(aE=)vgw z-;4A<OQSEq@dHZd$Co!b2HZ7i@nC3ac1O+BM;x#fw5QQ|20r!4vou;G-PcrRb`srS z)(KxXx*8@&m-aVUFCSmE{2eX@2Gzg@YtCTq@p3H&RS(PZXh@!~Q(j%lNWU*&AWsx7 z2M#u`s;X2T^jrY*y<b1JR}KX+!qy0$2%|;x=4DTw?9Ov8+%^0q$CKL*1c3RxR93%; zJA!91$|k<UFYl%6b@-@J-DYU~p(<1fkFk(PS&CgZQ)iqqE8pGS&w|8QD)~1sI_6~W z(o^vnRuCOID<R)G6B}w4WRd3S@xM{rfQvztnmTPQ*B$Um5X(RfIyHH!`ryHNQSCXu zUvTt7UBv`C*dd<8&)7JNNVa5i;0d`X3YEzMfw1_8__LRsHGnLNbb9shh=}WFN;Oui zhg=ml)e`E39q8M)ABTH2elNdb=xK30Bb7xQ`;44>DF982in6j%Ke?|AnfNePtXQGA zDk>{$otM{dF3Yl+^g+z*t!aD^Oy}Pju6v!c4pGl=3#gr$PxUww*wEEe*>ZNW!ec(% zZU)g^b&8Bt*PbozG$nnRn$vVBYRwqTf@x6(7d4$X`I6{T@H;s;EIVPN)Djj<@!Q#Y zLGh}Q^7`_AOP%n2Pbb<M&g#xyPp9)<_(lxDv>7f(<QbWYyKMtD1>QMUx&QPH-Kzx& z9n={$`GN~D|Dt4x@qIQ~Gqd$EY-->eSRk7}7kQq0!b4)<rQN^3LG8ZYzD?FR3Y5(( z@3LKH!1g@h@a9&c4T9{rGd_t?ir7Bja%ofe>1+@(st*`s)$7mWZtPa4*0P(_QRQ)J zLS@Q#j6jf}ZkAlL6O$TrRg?g!6Mksi4AL^h5#V#><T-<)agIEdXpyhe!)N}duV3Ls zP)Hm)*A$&4TdGjJSMTht1?G+dr}}WrlXm0BjvkF@kB_#05JwDanEOood8XYvk&I#e zLjL@ZKE%4OxMb9)oYOyjh;>$)t|#nZ#l+|We%`#359u1Hva!T%qIFXlaCu<&^-psP z3y*>9(<I%#bxT`IOAZ<ypf}~lq^q{wL#_&9j)a5+GBBbxhL0)(|2XFCuY1Adh6;^@ zj|2&WODJu|50s@T!^*Q(XTUSU-^_2Fy?Na?Gd@~O9p`bZ@fj5mXWxRKG+A348?6x| z?l*iHwP2(wVxH;nKtF3taIBL*bLy0Ym>3Yuwa4K@&GJ{PZ@kQwjHMi>y?Q>~d-ryo zJNJ2Y^%|mDv7^QC-%ok)P+yj1Xn2RSh>t$tfN>O{c8G!u`s-0zT9`#RYhZMco7UIo zuyV|4P#R6mC6E*es%H&n)XL3BpN)%V4{Fw`ss%Xf>mJo<y*exX{G<t|1^84hF-beB zTS%Y8xs{Jr)qArzPgF@pUf$xNtEPLC;=^wi-Tl@(W|q%jT-l|=OW10WAqm1_47dPy zb`5W5DS6;h&85|y&)lI=JIxaf4Lyr!7+_sk2MC#);ah0VEXmj&BHAK7!g&q$wzh^o z3)DY%IifF@bbyEVd;-v_y0qzgCyayrSJL<vf7B#g-FW$tn4=jt_(}f3hy%R>2Q~H^ zIcqZX*M!0zOAY@?v0V=x3T<bd)rKV#T}$@4j5Tw7tpQ<aKv3QB3!=^Mx>lv`g)#d@ zoVtNg476>d#QLyoA!Z+4bHZYdvJkUvl1`frZc^Q#H;Osfix>5E6^1V^EYeM|%$fP& zY1Z^PbH=kYSx9}&4PjR+1k6`aO0bB?>`dUk^wsEndO3U<#v`z5gRIaBK}TgpRb`bm z{Sv`VP&&4JfW09wy#PzAs)92%BdE%DFCWi%2*P|tH-P|)(20^C<NGZiCNsblM7!jf ztMj+pTszH74*JE5erLIJn}UPSWn~>X{x&wxnKT0nCXsm%v5as}DirUypILWS9Q`H@ z*=KOtP!$Tn9nJAcjBII8FgD^ag|;!hzmFQ9X(1&8br&}0Of4Z4O1*0a24AEVms~o9 zy;>zDw%Sq5KJaM`o}c8nRd7#(OLCqzzU=^uA7383bLpP4(71Ya{_4Yk4IFFG6NqV> zBf@`~3ftFy?iL>saZki$nH?VjZkDalK_PYT?xjY}3f32*G-|-Lyji9=gez1uM_ST< zv4EK!pR6`$4jGd?JJ!hge=>Td2mBeYd!|qD>QHM_kt6-Gy1I<i+0wUDq1)t&^R2`- z-LQy$V_&^_Gsd@Z1uiQ9gjh}3*6y1xa^rLDLr<Kl2s4f49MRpQR|;0)$+IsCl?&F8 z|H1TkwqcLdMGo!n25g#m!api1O2@5CQA!LBcxVH?9?b*T%gtN2DnG7qK39?Tn&N*i z_Gcki*$gdgBtThF(Wd9{$~-ZbCWr@823!@2aEcZl00anVhkD*MG8S_gMEk4^FL$R% zF6x~+!|G9*!Cgt)2R<H5+_|K5X=HB29(P^+tM@j;h7krg@)1)TI-`A~wpR**swkr_ zQP4$W;GTO?J$;0RvhvtF8`GSyq%DP|r5q+K&o($Dw_N^Co`D9BOrnX4&y`%^<puNu zo5m0Cm-(?Eq5&Uv_|CrQJKi6nAcT(GJJGyu67pzW-OY0{=5i8~$4$Y{f<p-T=}>ja z3d#|z%jvKiZx49?n6h=~M@bXvF}xYLBSK#ajAFfMy0x`Z^9O<o#Wnwl_|48;F9^F1 zIiP>>bpJTw^qh3<CyyUzv1p#@foHqv5}vR)2%@aMzCNvyxM>%q+=>-22<XHD11Cac zL-2`3=noWG^hkfwZUuX`v)AhD>VUg*R=tzku`xCE4cT|nClqnkXWz#9jog_=Vx~Qa z91(eUM^w~F>XOXa`Z<Olk3?~%`)>>9=h6AO6Oxk4lYJVEB=jFlsrYJFr>tUAVKLFi zzs72l$;rEEE~U>E#yBVF{}`6y#F1Xg0EWOG=Fb!f4*<31&Xdwzl!d@t?LM~ZeBImA zUfVQe-)Dgluz04YQf`$;;jLRhF^RkeLT>ZJ%~wK{hTj}Hifw}Mdb<CRAH70k`aNi2 zV4!f0{UNDw|5;UknU)Ruyx8i%Hs-XYlMsZdj~T;KU58o?g|okj=&%3Y`qhcKQ&15_ z(Db7Y-DG7|b_U$;z0*RjNZsfQX;9CjGIX&srdC89q5hh)cplvb!F~{Grk19Yfq|Dn zh<nM%RC2#?sVy!Zd(ktR!_7u58S!A@F5J1}1RssFfd3ER7H%%Q$UDxNyUZ4vn{O>U zgRg40T>)B2zuAW#5TLuthg!Y1(77CcSSy&%bap*GAv(qH3SuN);YZe`QoAr^jJ*D` zl^G*FwZV@gUF!Sa*=~^+rRPJp*_3bk?9mW!S#!|^Zde6?&~YDfJ=4>4%LMNf?mN>* zi(SJ&*huU3)&<lsBA<6;ye%d485+Jsx!kx}RH@+~PQS?-xYAAfkvDsi^Bv2IAu7J; zav9Y2F<8u{=HgG1Yq=}i>MF;;45!@tWP8S3zRRbT6xmRfDNvF}MBD+edinCDZ09L~ zHj%4G{3n~<$ghi-EuLQf^bsrqVdL(ZmG*~ejMj{v<$Q$qKe3DQIwC*B@wIE#u;R0` z5(|z&)k;CwidRb@VT2If-*MXJeNI~s+RROMGQbq>-j2D(tJLN9PpO@l2htl}rT?jJ zhit&TtyfCVDxduPe2K==?Us(}h6in3?N2RT;d)cfE};I`X=OX|Oe!IR(93h_B%v5= zgGYhPf^sgoRbN{`R2n*Ow!orbh;Kr|D>uuuN2^KDe7?%xsa8N?>>J<BoOLEIzFZ(h z=lj(~T!sE3Rk+aD7)K#fC^8j5S72^Pn%P_gl_H~N@$}1Qrq&<4#H=fSwaoLoZAC`L zvDtR#&S?y7-__PmV*xKr;&QD0y+kMLE^^Ry)!(1=<YF=m*#n@d=)~W4*T&2d*-h?6 z#)sP4UP$)=Q4%Nk`^|S>YCF+!i+&Hu5X}2%jxR2IJStnXYorX2n!NlRIuC|?cZ%19 zWlty+8Kb^Tw!dpg{#!ktF-X(d&>^^zCx7Tr<VN6?`=`rqna3Y4zy0!0)+^r_VVCp5 zcyN#UsMzd*G3Pg{ZqOQqp}l;BFz;^O99-Wq>(HTBNT_xvCbBJD8X&q?FF`cLwZ<`F zX6?k8oXn&)H!!rJh>#LIci#spGT{&Z>}ix3x3R@8C4<Gh9;;XPoVkasrLPAq#nzDF zD_&$oE&;Od*%Lqn_1H*RTo|9C-4Q(gu+^gB&lGd*@T+tH1f_D9?9xRrf6{U>LY&I1 zI(JHFzX^VN@{PjIZKe&=d>j`nTEq<AR#6Jd33RT|rvW(-fPo)rF;|p+_-S|MJYpX7 zLOkM+Xv#O=chH0ej(b;LhxF*(g~1*n04L(2Z8N8<srb(>((_err}$7^uOm@6?C9`y zD=n7^AiGc_B$^yao4v84%FfSz9h&BCt4uXj&J^qtzJ%)`_@)D<;J~n{_id+im&%Yn zts9b`tSa!XXf8RuY^Lt~@kf@FBWe0~tKvtWO<%tnu%p9|TGqSD4sK%8K+9CN7U8Z~ zSxU1dKzbB0)V%Wv6zIp!l&$$JVl;V7X8Tz)M3SaWntXxJm-?K(j<NMcwAlUIB#s!A zsGVeO_1<a2$&;V>EHDGq@P0of6>NX{u^FG?YB4hb6{>zSNgRwBWD!?NevPy#jx9*V z$1S<1PJhk!@zbaK&vXZU?VmPc{PtKY^`N`cWFuGYI&u4EK?z1huoQV-llBgeOljTc zzeGwr7?3mb)G5s96vFc$h37Cchf;tCnQX$>L_I?l3IOLF%77IYZQ_qCmho~HS}AYu z&*c1270oea5U;9hYqJHw_S+YwAVCL3=wYb)jo2<GA+fA>1BM!PPj~#?``7tQ9b|B# z>%0XEaEA3<U~pMyAdF7gb^AQATLd^moepeuS*IED^8K}EK0<^i&3yg(^@m^sYqnQH zYD?QODgTXnyW4~F3Tz{|Fd{Ufr5(-gz*Ft*XUx!?Ha?l@3%BIe+qX;k^+<GBjsv?W zZ<FmI!~7+;UVdcHo#xuW!^#EyX4u>3xo80kOwL-zE6J<3epR>Qlr_~;T|+}H64#@F z5v13x%Fm1hH_tM+)7krMrp;)cIZ?ikyiP);SpPA%-ju5N%qOnf|8!@G!`9tc!`OU^ z-`RZGF8QZR983RX{7xNnX@~BY+3b1ch%$>55NN`_^v#u@uWqz9T>^u_+k524$`8<z zE@WrJpiZF{Dv6N5$QkKN_^DIgeDHvyolov=TXmV4r-bTHHn3=f(ZnRZt9Q-X$tB)v zHN7-I`#Yt$;8i?lgF^7i6)QrwZG(yCZDqB+@(kw=*A;=U@a5LS)ux%wq7IxH$`(eK zlX||G8n{v|muG<jlL~55$0!}#z{P_ZY;5iK{Y(dwnf-Df2_RX_KTLr`w=Fy5@XgR~ z$t7V!#LBeMeJvn+Qu#*vJPA=Y3?8`WsPhh!+RDkE2R)7@2Ns7F;(f|wj%(60A;Gw5 z<5MhmPMoNx8_$iT3YR3*5S9~0ElVELyN3|zG|ifg|IR9o9r-b(;F4iKsN%B&KVZ21 zH~MYFI~-yTXEh3y+%KbD7Nw2UA68I_``=lX&iVWMLybqFSsVey=qoS-tbF@v)0it+ zoH{w6B=BF@!S`1;9d;SX`Vf2!(rV%koit=~Q^0qf+7T1ozDzyvq+-C*{q%0XD9lP@ zUZ@)!=DP5Ol|k;}OO1I}nb(zhmJult_KJ3?G1DFl9oT+VArKn%8}7CU&5a_B$KBeY z=WYC~3{OWtof#_m(HiQGk1ei)&k-0QubY{h+xO}|Wl{Ox{D@-)bGi|!)4e%cDk}zI zb3$b^D1IJMm}^Yb#eqZZ!>joK8e&TM-fa|zQr#sfVK&B`BF())vFPlLuOEPwewpl^ zIYVrqoN>8ecx~=5ej1-jht`~3&Us?TK~qjR4AL`|Y_m81<1TH^V#&RG_|7PVSw3_- z4bu*^GO0sa-{{l2p{K4!d(XKGL`$_9wR^Xo=PR?!CP&$&{*~iCLm;FPNnIf~J+q7K zku}PB{bS1V!*82Z&7N$S-1{*XyPE;bMwyxEEtfg>H{qsaDwQzFV{aIpi(D3aBSm~y zSFdWVdGiLeLV4s!dyk_rfT3J-Qd<6w;guWq?&u2dHp_I#19#;ZY~XPZLBMmtN;)yu zz#KQJ^UitVs!?O0L3R+E61Y2WVcLzKeBPL~V-n)x&he-65oaKgjWpjr2svs2PY?O? z>{+v<3;+OaN;XGlT%&Mhao~e{DfP)G4Z#Q0&aJ>k%GpuFv+>5G!~dP+d}{u6$rtB) zbiEMn)Lu2zyF*c@nC!a($<Fxg&h1M}!39Lyw?`IzHaXd#A;v28fcz_u`zq(0=l`9m zoY8XEOw~Aj?t$fF%{gWS>gOv)3mZp2wAz>C9LdO_wC)#`Pno5%BvxNBbjud{PE0kD zr*=#z#IHreKwVF7w*w;O6aGK^AOb;Y_kRB*PHz|!sZ15RGmbEhSDm{wc8cx@cyl<6 z_gi_Yob-qFgg}ZItD7_^{#)t&`=2SjulZ;ECvRO2-Sz&U0+>)4F4_?JK{OFu9$*A> zFPb>1o=1GgmlqcgS5xcgWdCB`D8Pl#48iXhh~|NVxqfe}M<&T7LUSt_GJ=h@OxB)T z(w0yl|Lzq$W|8=UZ-#2hnIkv9xtCgka|DHHm_kJ58x7-yMkz1C_GGJvw=W*;W1SxD zA-gqnp&J9N-;IQ`qxQF4X8aCqaYM?XD-Z*Sv2dLAK8X@?DvJBn39=ryQQxpPk5m9) z;hG^8Yvt`uTd4Si6Gw2T=WPKA!rB3#P}mL6jRbH1@<sJW`v0KQt~@x6ruLT!?&5&C zGB=w3Gb`6cVmDrju1l99+P;CKHq4UAPbaI@{3~Nv{R@5n8$wxL4@8=Co-H+xzu(B9 z2I0qkhWZ9KP|^qtW)_C!qgrH4AF@s%X6mAlDgTYtyKMTaI;Dq)!97>kmZ3`d$O~j3 z%W`M%2*~p*Jw0D~oTFox9#@Gg7E~DK?36bcg|$O})v;p;cQ(}9%x06x9M^%GnwWC) z<k$<!>c*pZ0Vr%yDIfVinADXSEzXf4=VqDr_i>|_>(9nb2?^f8@`VdkA7&Vj=&j=O z_ITy#lCQ8cy?BMso_**2@<O5c<9tG|!HYzgpwb_IQ>F@86h9;wUhq1!%h|$MnG+2P z!`1yt(!t%6N$R^7FYZF*;n~t#g}o98Lku#QLG1ze1M~+F0wlxC78X9huyz%w1u$?c z2ag!d;28}~7xuL|Ir*b><#mWh%Znuc>{Q;AWxj;|%})f3drPpA40(xDEwVG5d!Pb9 z>Q@iH{r%MO;|^>qGEg5ku3uLRLsv?szLIK8b=1_RqU7N@3Z1To#zXeB%y%E&*h5&X z0ou>LV~VOyUAyXFF8LE!Qu6BtN1o8n0=d3QG71W;c6p8FsIsbx@;y6q{*Mk5T?d9) z2v{lRPJdFGkD{C+O-hCcZaXj@!j4&ZggGmPrFR?pv93;i;6UUO!tm$g$71aKMlS6! zd~mGGT9eA&Hq(Ulp^47>^n7+?*fm8?S7^=z!H3+LKi%(5^cZ$49w(mxOFSpcgHN*$ zhd0hTq$-xZOzyZtuqcr0@bte>qD^iG!XEfHPvDKWS5r#=jm|4y-T5b-_u%=?D^YGu zXl;n9uG~@6dCIfhaPddse(>URB3YB>*yKXNWjGJ4h8qdAOWM({^nCkwPI5SwWRZr$ z1%=YHbSLf<CEKK-J5ZJ3@Ff_kPn)(7kqH$ieNx(rs~W2pbNH>SipX3-U-k59Hv<Yv z!S0G$KktN1ZJkp2Va^GoT6gykf?y;^bSE=9uQxWCovawL!kG~Mh5hJ!1zAzf^3#Yg zd2^bTyT+WjI|NAw@2auQGjyUf_XV@(FJ2rv^>Zq~KO<q5tU?*U!=iQK`CLiQW`P#= zd*8ikHQrJj0R&9B3quaZnZ-Rd_k8>Y5?&l2Gi*0lGQ4=cKGuW8NSB1Btt)3u>pY-6 zRIZrxvMy_q7@~_UY#XD|2W`wf?93D9E{*l7-d<*@g|CF1+*-nnlV1~)D0$0aTcFC& z;g3Yu^kW@}FbKsAN5^iRhzEisp#7^(9rQH?%&8wYki0^YrSaVq3u&DfyNJdfEZn`e zI^aZgZFzmYhhC`}t1b%NKy0LX^)fQ+1Y1V%BZNM6Id`wVy`acoK?g-1qpKizFvWz0 z$$L-Cz$^$tlhBV2%>!24Ib=4d#iO!7|AeI9VkUmlGoADLV@c(jh0_=)!!--qe$U6} zjhFu2PR3qa9WWjua&$AGTi`14e%F0^CGj!!=dtgf_R}icc90iygn{-smG?syy8YeT zI66KevLo}z23Xk)zy#rcb|sOAN}tfNc0dnF0Y~j|_1d*54;I0z+bS)+vG|aApCPd` zS+AFvIJoqrH3RNDuY1bM7W=1AJ*%>fu)O>S_cQIORQnCqQ*YDN1B&4!thr^<`rt#F zHKAB?FJioY@yGYE@<EQl)wNdg5sTd1aOoMe^mHGyXIDeMPl3P$Kl=o=IKUtbz<6!f z$jWaId&S-yIea+UTl>*=1tvEs1<x!mTnI7pB#Tk*omm=Pdcb*U?%Xwc^6&M&V~aU& zp3?9|o&z@Jx@hsy+^kr^Y7r8Gddb^=GQv%^oh)?G;*3(rVT0u7H~vZ2wl#GUPBTP` zLLCO}+_z6D;yV2fM#r|c30acrVIDtL)!Z{ymnnGs@XqT`07u*h{O#uzSSCsG_yB#6 z{IqSpvR==*?oK+zVoSgPtAXmv78L2-DM<VDcgD4ZbY!KRkKP=-f4~}PgOuHOYDy{j zY!Z#!oRSk&x_Zvzm~!9w^Iw7%q3F0g`cBfr;s+0w*Gh?qXc~S!R=x?=XVuyWb30s$ z#WUK+9LSklS#a+3=`YavU>%eTuF|ZNc(H7<EG41qdoQ1^3eA1!OZkf5xf5G|ipTT* zKfcpMn_k#H7z*{K8`B2y5o0kidHS)O+559qWoHiPFyKgA9cLq4OVb_KP?6{RPwy<+ zw$ZiYJ&7TMMXW;LrBEsHbxl(AaQmw7D%a|^n@*hArfL2*5%ttVhc@~8Nyksf3NX=k z9k}t8&$MZY%xEdtm)_W}Tx#T(dQ?A1JL7_}=ALGYIpsdfru%)WNP|eLZ+pqD79(AG zwnTF-;bTqoA9VJRW#(30#FZc(r6}$x3vsg4`7%ZO&Fm6Rfz4&@huaC;e|-hKGTqN* z#M>96&)PaU?#yR841Qd(L%UfzQy~o7$txuk-oANLaP2wMP`l?!A9QB>iA#Y0G;`Ec z+9k&tpZ)t!Z+v##!F*+agGhjL{EJ!tN~cb0bBXWyn$Eo>P%i)Z_5X%F@c&OUWBn1r zMq}t4BUj0kySMzyC!(A5_UjLUF7oy32VkN39q-<o&-3(cx6<#<%md1Q(XYF)W;I1S zxUr3hdEeh!8YVgd`uy>AX-Ta}^j(r44a7StDV}4&>jzL8AvV`SUE~LwD=Xi>b|`J@ zk|%SkZJl<*^}u8ew@=~?V9X=_+XJefK7NEuRLD@0Q}brgv;9-MB3U4o6G7l3<oN#> z4<M$aGyT}iduG59N<l6$7vm4tt&j?L!YLFt#YXpiRu1;|`1!LmiR&BOvxBH8KGM7b z#<WJSMlF9b8hsI!9$-k!jj6x$wdGEn6%jGnuygNt^?^ylc+Y_Rw1p&<u{t_mk$Wdk z?-{MOINmkj{0^sepPE|cUESp9-~f3PLKw#!(Qjns6u--sa~6qk!AYK=K?gH3_QHq4 z$c~D8<SMJePCf?@HYLa$7L6Wd9{Fxq?9D_ypA$zLnBk@$KCEcDJvLUYRIbyKCD)7} z2)p4R%)&ij%7o?)6C;C$5+R*JeX1QuCpvv<YWLtnEAHE$oogSt(Rp6Um^Vo4A0y+r zckj2uhj{{1Av{QBWhJMT$z&;Dqb+jS>eKsXLi+CptFi$<iN4a~N_5bf)R`}jzVaV! zR0VEuvG%MXtKp;Y!A%iEH68lu;GX~K?F#qYz1G~_gEoUGqWNW`$y2*EqeJtU?643= zHEs}ls6qG{6SBqxZxP-mX0hE&ufF~SELKO6P0w-ip<8N`Vi1^g+h3}QiT?*bSc$4m z@vM;?A6@!PSdPu^45k7=TNqAIXtIdFxO8ZK`w5A<?W7Fg-{8xlCy&>{;S(qBvUwK{ z9ndFBQXJ-oJkZ-deTMEu<G?h1*Ak^8{T{Hu<nv1zCDv{x;{H%Cdg8oa{!Bk_?U$8H zXW<u@lCtQhhR1^9267)EjMM7Z|1u2j%6HB7XYE$*)0pNhJH)}hD#@YD%R-kn97ZD~ zVqO?ScNi?Jz(!37HfKA}ZS&Kvw4Wk&={~DlpD``M$%oc%tL!C)&Xk8Nwe2%b*}G9y z$7DF=Gdzoen>Q1*7MP$gLY2*d#h4P-nBc^)`_SL%p}MV-29V<6qf$lF_OX|Mv8htf z*;(%yTzqb5c)o3)K%S=k0aM*|*37+Enr>g0yuI=9x~_MXgSMxqFNe*=q!g~OFlnJ= zU}A&(5n7Y!s#da+R@^ONhGWVuidKv+H>(U})^g*7paO|M`%fQKHPpI)`JkQxbClLF zwkYyA*hX`z&%1H|%2AE(9qCk8k};zE9N-?iKyc6y`Qh-M($2x5jM=pNle5;;$z{bO zy(?pO-gdW1(uA|R{kN-tBb>2Fr-!GP_1SyJA7?~!a|xfeKBb}eO14C06oYh@l#EbS zUC8L4BRP1+Z)H@SD^}DAR;PMC8>HCE`WJ^bz~<l}(e~3!Mp&wNS~Z65*L%a}^bv}R z&&lW%TI-OdZrXGW7j7Xtx3;2JIq=sV+_=HB70&6X1oJ(cZdL)N<p)E;ubjyTM?+9K z#&dMv>{UP6sZmfoQoDJao3-FYiW%FM7!(dYy<J(k?-*md=*;^N1}9*01ZJ&qRaJcR z_tR8mfP@97tScWI<n&ZGZKp9~huzG@qVDeQSQSH5dtUJk`zAs4ICmJHe3qiCV7#*; z5BxmG=hG%X$72qeSBi>OaD*A|Uu(?~+eiHd$B@-LH#GI>yzAYnbd!{02ined?V-^r z_0$fQS+kSxNSVV-?W;S_H#KzaSbyrqW+x^<1bFyHGBQsvxK>v`eD-Wvety`U*K9_F zgfwRCSkr}X-@hM1#gpa7sJpX@Sg=9+&7DPx=BnS>Qtorp(k;n3ZXi1t%x9qe0n!MI z-3*<IqF{?u&Eqo}i?t%9f1BkRu*7=Kx)Fb;cuu>R0o%Je!6CY5i}u@FtKa|5<UEB* zk~`(kP3KIeaB^dRJGAY@U7KmvNd{JrqHjE&2YFTFGAlf8-Ks@?OZ^?)sdDxJ8^aM6 zi?+f)r-p7!Z3Wo|CB_w15U7g&K{pLsmKtvoW1*xNR<gIg{SjYDafOx9YKh=fib41w zZTxDze*L&-Z@A@Yo6Re}1#%GrbeY;cMxVq=LL55>a{UPitV+6hGraL0)^xhM=MnDm zZK#`MXXb0%=HutijS0_-N2CObGam`n%a_117@=v#j~MSrgGVg5cKte=4d=m$b{<3H zK$hyuB4L8v`0;xR7rv|_=p;97>7z45Pfw3u2?dc%0jvQ_-0MZ`(skr6q`Sz2xZlZa zrrN(B8p6~dlb}h_VOd$<Abay6ur>%fh=$L71GUq<2?BIIJV$6A%;`WOkDodvYp!@C zN&VBJOa~woDt4?a5n--p+76o*>db)nV~fW`4JhwSZ4TR{v4NzIoL=Ta@lmtMkq6B7 z86WHZPsXC2s1*<ij&G3vNtq^J9By*)W62ay3H|8HqQkfW;4cv7A&PF_wF?^GWCp7F zvy<xD9Q5^$iMjYYAv900e#v=t$hJ?XH50Do<yH9O47ma}0yTfA%3~Tdk`Kqla)et! zVTxYg#ivI&f4pfkW5#B+V<=>g{en_G&N0|eb``uONRhlG_MjA{y0e6CQ%iPO&bOTk zi*QeM!o7`fm`l5+th^hU0@G6EgK3YVBpcJ8s~x-%QXn;M;=rg5>S6Vd9{-cIY4{I+ z(m8ePIa!or=)8YckDfgT1gR@nw2h9L7N{vM)8U}Gao{>d7?Iefks&s#B+c4ikg&2~ zq)_=GqSeufbzlSC?^I4-<A@J-?CluokZRLoL**OGrVaMvJ1*EZx;{$s**W6eq_)|% zp@9uC5$2h{PHX&))tdO`uvJaiNs303Cklh@43#^X03K)mp#RO|-2D3Ad7NkT6)%ke zVqiPi1PzTh*uA-pdQ7{@`Zgd{Og8j(oIG}H8PpxN;z3^NW<YVX=3MnaIp6?FMa(z! zysE8Wi6EYuJ-c6KkNU={N6!ePWONWNmxT*SLH$}kcuX9m-0}f%4(Jh|3(iLowqTI- z_@_F46+?|fj;D7aIt4-C@I#1qcXNZ=asz-17{1$usVBrYYyDtCiLVkBXbq{7^a+`p zIcDzY-y*Bbw)qYn1k}j+CQsA;(!UaLK7epx#-M7ptB(DpDgz^x7l@nNa8?;7@HMID zp_CLj1B6&Hr|ZIItDz~r!^4OD;Xs<dNveZ{oC}L5x^-L0VWu49RWqTIRPtil*ng{5 z$LRX|_S3$TIk^3OC8xTv`)|vnj^k7_wu;h+(h0w?F5vl45tJ4dN@PgF7h@eM=xF20 z8M^aqVWC&(pG@o)zE{+5SX+gDcxLnl738AB)D9Cp+tH{Y#z{o~lY!r}N#*NrMvP#h z^8UfG$D9HZBQh*qWJPHCZtogC0K3p7scByhw98Q#)B}yikwb^3Jm@OAp}NzIIBk97 z%F<_z-U`_|zo?s!`}vMnn9z{_`qRf<+r5S~PA(>`kHOp_X#3HMnQa13+%1?nIS|^< zo9%Dq#rED=y>g{bW8J=^tLJD)Tcum~D;(V<=QwDm%bAtfSAejFg+UP9<}h@AyJ*b? zN=AFW+u0m9d6jf!fJN;APmm}Q8FuU_q+Zje_myO?$C$Q(&jHXix0nb1amY(Q3+Df% zUFRD`e=;k>=g511c($J6kRLN3M~fpjmAwi>hqg?41d>a1T(orQ<6|>*^!#>EO5tb4 z<Q{*Dk6Uk(H`%ARfTDsZo_i^caqMHEE?@RYdFd@1G@VfR`8~pJi6y1|5*u9)Mf?l# z(R9vo&fso69}gRw?%%(1=LoO8#&{g4?q{!?N$I$?kIsA0$i{Ne8}Qr~M)Gy+b(x)b zZ$tk(f-;8iyl2EB$sK+`PMfz%nCA2({Y{CG@28*upTSE{<`YK>YfLQ)IV=^tp<Nc( zDW^tjXd82+A}36!I~n9V-l;;tkFsB1tT=967o~f=+x!~swGE4t+v(@GGqJxPvv3EC zm-_G^*oOsU!F&*|aGaID^G9<J>Lnh3<2HVb?$RAwoIu{rBa}g}_}pm_jIkDUPq>H1 z-c(r_u*%buqGEvG{JFmfr(VW9<fD?^Mf3+GXRn=DR6ig{ipHz{>sLz)i)%jwrJca` zVFz84*bq%ecFg|=Ze~8!rSaYH#3WgZcK6<eDER4%(I!%-KYjKLvkQW^piu-vA3f2- zqaO4TY|6w$e2&4V4NlK=KP9r$)63J-)ZBbMH*x;;yZ5Z8%^2CL+TLcO>yh0U*oWuo zu6z-6rIY$d-w}KMay@mj`pfk+<onkRZwLu$X1gv`tf1J(*=7YHgSUS;)lQ@H#QKJm zv<>#Ei0)TLswE0MI()}?A~YRYD=IdyynOE++|-7zJahcAvmjiT+vMABykOw@tTVWO zoRzvZ%1(1E<t@ER_x+Gq1dG<Zc!$x-ukD804Sm12OyF5=F#W}|JU1)7+N=+xQg9j7 zbG>1z4ht#*!*+Q(=AiUNtv3sd&CHaSr}PgZb1*u|o8q_sWO`7L=!<00pF5y>_AKQ( zA<hm{jhbOq*%Zr?<)x*!*#TmdRA+8kf8lvWMW9qOjvQecYq}W_g@C3%<K&x|Gd*y# za*S56DwYwr@y5r?Wmc^Tt6Vp^0RgH~P_Ddu^yDSpm?regob>B>S?n;GoHFVQN)zNq zUdc~>F*SurU}oa*pZ=&dT!7-P3AbNG?LXNgzp)e3nSz2eYAAde1vg%Br82iK^q!%H z0+kvtuF-sD(DvZq$uNa@4vN$K8Lm%nb;{K<6bVobuCHl7@n(dSf%=dk+p51JQn_{w zdBI(z0H`J7>ZezzNG*N<K~ivrA@XDJc+?@Yzow?ipf*37(4tF>T@eX^ma&qD|HYD> zS-=HMcp+EqW^D#qnMzb!jZV!yTcW)?NTEZ*$(k1lxk_&A&V>Qlchf%TXlxffc+BHZ zqT-1;my*o%Q?27a633`_1S1uSMKL8t)zA+p?z_E35$6BX*T;{cHFtyeMLS5uqhw6p zW^>S1%sFL(Y>%T?#vHB*jq<+h14oh8<=m|I5U!cQV0n{DO6sspkZ&v==5c4-TsOBT zsCxt?=FOW5&xA5{d_;RE|JWH5BRsAxSB4%zWm@6Scx{uEoZgz_)uKDkF0yFQQdd>o z<U4wn?_){J)PpNpOb*4G)EobRxrdd_hx3rTb8{l&;~!DMLBa^{k#%%K|9pSaJ37*T zx`EcM=RgHaK=^U4`U)wY2MYjnYWdUn>WB78{f!T<*w-yKKx`j(1{148IXQFGWlW}t zWCy)^zCH3`|DZaFiSeF+R@2l}x~kjTPcLXUt%vR@>zYaDnAuYMC9w>Nqc3Fu8Ucny zd6OFxvan2BXK&xC8AhtjaMMeO++qIkBBmX6V7td)=X{Kr(eYQjf4{AK;m(ndJmJN` zS)3Fby0e`~(wijD&us@!h+JhrjCzmmo+1Sb@|CKLE2fG?NB@i4sKpll(8arxTo1L8 z*z!-y(2f0nw+x+gspR7Gl%pd8q!3lpA>*oZNle=dxFV)SwY|0wjk2=FMqI~mHOf2B zC@#QezxGSs<!@)sC}_EaMny@>n~p)DtfYh(T(bPMiK!{5N8cTE2O*m_ZR<7M86h}B ziRnJ6Y5Qw5_o^+BOcS43W6aI-WaLEkK=KSj+|Z?qK!|4=j1FWr6PCG|0wO3eWm~#a zyLKC?5E#9b-n*CW|04$@uk+_;G>kMitC=+o%tLt$J>UKx-g86Q+0t{|dXw9`m8M{< zt0;9N-Yk4!i+GCK#4f)bu0N62K78*$WexR$mi@`eLe}cltNO(YVeuHl14bQmm(v5c zs+4!;NPv{r=c)RR+%ombj#HVTX+IA|SdL-Xw_9jtaD^-D`Eg2dgt^wthKs$Oa1k?I zbZb#T&4J1`2h(ayd@dCjq>N&fO%*z>1q;H4Wd9p=F?aDD?W>2L_{PX=yVsb>;Elou zod?uvsI2*If&okbTt0y;o?@JG`0$PU_fO#%$jNrj7noH}5$!~@9V=g(cbVZAw7oJ< z*ymFG<MtJC+n>RNk@%J$XaAi(_<J~E<{{elGVM;73ZEcNhy2JT(dW+jELoD~u=ZC7 znTuRZXty?R?ysxWW=w&}krsCw{V0?7A|lpQ)zqXpWDy}nnT(+I#<6@prAvm>gdX8B zyLbE205KAyZ8u3QKZ70)yl=vfmXl<ijhC(J&l%<$*iOA~Ki;ySuU+@kN26{dwSx~M zKwU^zf{O4J(1mvk*82lO5ZIc8bRP~x(e}#f=Go^w4x$ACrlI|-d#b~9?S+kT@5WUr zNE;%D9$XI^o9}|)*)(ym;j_m3XD*0mn8N>X>$GQRP>bL2!WQ^ZJ*d|KUTJ^LIC<3S zG>pnq3heLCX@sK^l`oUnrv23c^3tBMY1^*^L;f3hu8sj4SDIoyx!qS(i@(;{>wYvU z{K5eRfj%y*Nmg^1m!_NKV*PI4<(~|{GK2a@=#B)EVAIm$kZ=i#OxF2inBpRAz6qhA zgZ=Vd1LAMbaLJ2^*|`%WZF>eo`hol%ZU{X9qz2|Z{d=qR5Gl&tu~+BKq76B3b}AV6 zF_PF@RJGP+YNq|h59Uy`jEy_VCvVh$Eo!bNv3M?ndg`phX=&YOhx&)zSi53UU}wKn zZw#(T9zQU9Y;0_V&S6-wx-mzG_OGe@0H$TjWKU#fzIk-&EwjJ{vm0zwlTtI|Kb}21 z+Sz5OWJn2-Ejn7pk&OuV@00H_@+0!vyn3B|^v@?6J*$1b@%8`4z|+*wuwL!P!_;rL ze{3nGj-2*lt9kP(I39+xqJ_n7Difd2>p-qa$2F{FPVvJ>GTZiAthL|T(P+Y`%r~yx zgup7c56bZoW&a@IKjk%njgcTpf%aKFr3@%kr--%IUG19OnRW1x6Yb{A`Hti`MkcjB zSoJ0+6Uq@g&ZatdN+>*y$tRizt)6emdIFu%({sSyGrLsn`&rp&l*l~Sxsxj&<py&$ zO5=i3q<tT-+1_0?-3#;hI5r0n%DaarQ|K5Nkmo#^zO=Kdd&Tx#OIs+*>(^gkzDbNU z5PPrHuIMNa&b9f~Oury2O0c}{m^I28-;&z5jc2zNr41IZ&Kp|;4!z<qvF<Hmv*o41 zyN+6qlRf)9M0ddbe{kROo4N%K;)$69D%)8-($w~ASrb%5-j%h`x3yh-4d8|MZ6yDG z(Xd`nUD!uvd!m27rna};?5a-(ZcU7{-@exiN;96_{YPniqHkbXk$iyFv0q^~VtHxC zUmUmY-4jy{dY>)tKYFx7?YJ(EUthUg9^q=vg7$h3^Jk534qU(5MYDX}qzR*N*<$?C z?FZYP&cR_JsnX`yYWZh2X@a+bHM`FF?D2;S<VKI7Y>6kuN{Ne!Nws=Gb;IErONV^5 z%X$5+4;8sw{vZMsAgn{iv19#YWe=KF{+*X*mGgDFeaC3K0`2w~)BQAy2_F)jeZj&} zctF7h^L%}?D>b2vKFeAEmiYSO#Re%>wno;^JCeP^=tW8@Ct6kY8tfOW=L8E_BO|MK zo2Y`jH~B;za?h!n`cpjq+t*S`KZY(46ry*xbErDfp?ny>AV2dPBci`H(92@(06!W( z1;s~(f0$kxZn=Sbi{PIr?WA;($7mRJ@L&}s8QX8DI-_@6SFJO2biLn@AY;`2;4#g= zm}Grj_i6>+n>kK7+WlJ9?ESl_j0^XS%fdTCPY+*v6ko1nFo6VTrj=YKXDq(e;=b(I zRt?AFn)wqe?5*~A@qsfIXPt!pAS}x8t)QRezAoANvk;T<>gd};OjK~+)?QphtbuHI zC?jJ6z9qtz9a&iog-Ps6<|tBX3(O2aT)LX-w{MZTJ}xUm7*KNOH7z8A2CT6B*<r?s z=hy*P(6tFFOZOJ9yL1!(Vi!3*vv}>B>pS=E^`{9&(=-$Zyt1-h<*LtqbCquTcHOJ~ zB0vzykj+qWd-u9y>ViorU`xDVzviZ<;GiHG8JRBfdb@l%J;3Q6yf%s{&KbURH#u~t z;L3geTzK>5W3=HOpN;go1C#8;SndB~@2#V{?9;tb9urU$2@zDJ8&O(7S|y}GPzgZ^ z0WkoPHb^l*y1NlXz(PO)l}4lu5Rg{7^ZnfV%*>uS`(5u|=lpZdT8FjQ%%0~__;KIg zxUNrKNSKuJw{>%K!|p@V1cuBB(Z1|=)}ela^%E?aCjc&pB|-Lm{(J_^9=ggO0|U9n zB~c!yaHgkdr*SKx3a+h%eb@jI3m~u%mx4)u1O_Q8#ch5G7`prX*nW>W`A-0Na3%k1 zX1vzo6Fp<`ACt{AyLOoZMmIIR3QJIC<H?AqDC`15+a74RdfN7qs8RfL0n*aZt)u0^ zWEm6m7`Rf2!HqQJgl=ZkEBAjmAYOJe;L!g~@?^L&O!BCYPmrdjr}yomsS;R7Z1|Y? zpK>jCo|l{al5z@1met7FP!wWJ>4D&CHs|DUwtp>BR{5%misYOe)S93$nlZi|1RLbK zl_?g$EPq@P2cC-sh~f&15r@4!Y&j@rXpLE&6SYnmRX4{!+MNApAI;g#vBB!N+|eKq zNGc*A&?G@a0R|ZH@z)^GxItnm@{Uk;3GY5Kuw+zZP3v1Ri5hNZMv;`Ag99ur%3C5O za8X=dK><}ZE(gd2CmsQ~L3vsg>MzT*fNl#lOJ9F~D{xh>KuxaKNZB=;Y*sEqy#*wF z)9)_~oaU9%;;rw1Q$ZgH3m8)=Pvj%_0PPu;GC3Z(j=O{igM9rq_|M$;sEVK8&t_B> zvixxUi+Kk5K=93~p~L`GOPUBg6!18aYJ{AEyP<J8N+Ep0r~gYr<6C6E766F`zRyGN z_P@)4yj4x3cTKiB>52}5f+fLK<8L6hA79K~P(h(VvuKFnUdk16zJz=3QhV+<Y!UOv z>?|y1V2}|Vabv==zv9%T9?ka}It~sF=H{sn9yFi@N#XcDc>_d&**08-<lsq#MM4JE zqDp(h4oCu!!0<X*S(3P!=LretFa%&B_M&4RgImS_PG)siZO4YF1gIq47pL9<nMI4h zj3T8FVzgeehfrRv&=^5^HA(wun@5HaF<l(#j!a%D>M>+SWg%6({MuhGYctV?Je$I2 z#KuL)7;NjAvKum=yHs&^-s64p9wZCq!?AdQtOAcfBt#6<@9k~=d!D-*Mmzoj{0@*z zv2IuP8wPIG(AOg>M_0LZo@CX?-O~GbWLWXUiAI1HSg1%HDz63XCGNSlf<2KfB8nxJ zkbejm*9G@e@EN@f{LnYKxRR8_!ftXpn33Y&Bvtnhyw<*%mS%wikbe7d2$3cOW6dUY z(uf=Q>~o6(T!x)04d)awlrj1nJ}6+;oE*&VRpMwg!B}jV9t{ubcf~>)1xqRT8BJ|% zd3&63@GfHG0}KPgmXcM<bvlSk$Lc9EPr$q)Dh}hpLN^KA{m}Ot?EtEvZD5cwk@JbD zK{sb!(YdLbS6HaqMq|TP)bvmJR`G^a78RezkBYeHWk|m7J?_z!G8}EY2)`Tr(a2U> z$NjByi~5xyE<3W_0p?a#s9;eU;UjDce&i7hd>&OSXVL5sY}T4wAwOTRzr^jfk%2@x z^<B$SG>zY_Pj-rI#9R7`w{#rC4`F!4Zwz-<rjyPtd5E;Dsxs2jI3y*{+Fm#Cey$ZM zALzKG!=V96yOgz|qvHi+qS!e%Vg@;A_mbS-Q6{#TWI?p*8xf9p-wJwHuu$k$Lq?lg z(vn|(*okIwr_(B6a*f58%y@5qzL>}`mU|)W&|XRW?}UK2=VnIR$8j>(7j_r^{!9P( zgZS^8X(t~Lv%wRt0)Bv>FMqKix$SG;zh^Yc>TJQTxM`7$A*U=XN%_eO9{3YCk82qj z#m2{*Afuy$pydAX^|9sc|3y>O%^fjHck?n?-T#xE$8{6e`TcZ=I{C|OO#H!)t)wjE zyDGi7-W_k+M7y2TZ}ZQ)T8G=L`0~R$?&ovNS=r{>nC1E1rJ&uV#h1~M@kvstczHFy zv7pQ~_vbI#D330I^}v#s-#W(|#_H;SHf$gfzOm;&rkq<%9Gdy}V9Jl*O^4|I@tgks z?}WD%AOAgjQudB-;=fN;zqw_n!hguDC>VYIV|Y4))b{_#yZrruZbn@LoP@)<#qpqY z_sYN0Hc8%CZdNE;Z>*_7sBQ~d<y;}{?&(u`g41L_rgi$^yu-+3w9^uGcO=Xcq<<VB zNf1r!B2*E-zpRFCIL7`}B!1)wl*8s|20@SOdtL%<5f2?J4j6!gx*AVYI$vM3P9G5! z`q^qI4OOYj><E@<D0DfP4TXN?t|tb&4IzpWN=sZ=*d?B8ix64|IeX*!rsg;aAWYn4 zCZleXh;A;8wq-Fa{9cs)-&?Nvv~q8xT1<biYt}PJX$Jfhm=_dYX(=h1+bYV-QDr>8 z^aVG6YP%@-9B7Kb*@lOPHjM^7f!rB{Zkq)}N0lNWOZ#Q}pqd9n*p_r`8|1<uxeZHP z^j`m!{Dk6-AVtf*f%iw4D?zA0nhwqh4r?GTn38B|oLD~hnw(;-@iZ!7gw&xGH^x`H z^F<|ybP;daGc<%GY6G0#sPTXPv|ZBie#a<G+GL@;bU{p57z2M&UeCap!OzWYsvd|z zMJ>B8)}6Tjazy`9K%HYf>X^%BW-ODTU>VvJb%zr&4IT7$@I^0anda)&Lc)OGunm_4 z_-anhK{(oAWuV$GZaqLzkN2D*!!Y*|b2nhUdGh>uUiNmR0l?ci8CBX)pi3=X9jkpB zp(#-NAcq#HF49wO-?>A8n2w{TMsyH*2k{tukTEea=vGm65S0Z;4CG3kGvIvqVK0(2 zagqO^SZ!-%*0d~!z=MdpaBUmW@QIw(*v~qA0oW9wIlOu`|IQr+O-)UxUUhXt6d4fn z02f6mbWK1-fSwArE0A_#(B<zXZ5<pI)`q%t<Ax2S#FQBM#3vBY5Yv6|Kq2VP5GMaZ z!q+TIVQLpcEe{&wGnNr_6<9i0bvsa-<C_w>_OEGqY#X!NzOPHsGcceoEyU~d3Itqy zZYaD2`kIDFA>YP93_yZm_3dxw*NbsU&)}!r9m-3hKVpC4&Y$vFr;=x3Wd-9JNnN#f z$-MOSp?xBvdS&Eibq(6@F&;hBnP?K4tg>0HC@K5eIkMt^z8Q^3L3TdAoRkzcZtm*N z&LeDWDJZlF5GX6_lTz15DIA_Isir$ujX_YsW`~?Q$Ix4-*8pJL-MQN49A;h4`BEn< zzpyYy$Wk5B0!YKrnPHI=8ami;z>nkNjiCI5_8*b}JW%b_BwUF^u>?>WJSt)*bi3?~ z_HPJ%o}HT73d=g~_>Y%{T;fc_7B!TV05xu6u6*+*0SS!wWYcqVXdo7e5tc|cK+Avu z&qrrQ$HyD{ui>AZ5O9XI9qbAFBTV#dvB<$OK*SkB>joeS&o*^Q8BHFRq$mQR01bi7 zxv5_Laf>Dog;iMjduI^IXgPo*rfI|*8yebTejLOcU<Co~<EzFny?oA%LS#YaDD*!> ztr;zRaSEl$*W)=Mczwi}HZW~O?8Vd%|H^dofTLEFN%dPQs=@Z)6S1v^;*>*Eg|w-x zq@>$NZaqEAcJ~3pa#sB6ZrU~?EV`pZ9H~5nC4^GXTTat7*|sh7iHGisEuoF#-qFPH zRjkbW_u=g`!<xl1gyJ8MY##%|E6Ya4`#=6{D}7yL0TKfa9_+AZfKdxjdPyL_Vz*jU zy88Oz&h>Drw6q;#(LxmjeNG+zK0{Wpr}r>a9q5|4@&lPwbsOlfr5?IW$OS!dRH0U( zwTRw9v+Um9)`lQ<P3!cCdGAFou6tXwikL2nS{33vmX0sOJVWcHQrOy1y#f`$E7c}L zc}l%+-^p%@31~oYdis9oLwC=;_vlp-2hz&<GZumaI`^100gGWpXQ_F;8<^2$u3)Gx z)8s<T4ZiAYYKSQb2*E_Lk7zZFbwn|P@D!vWu$FwrZxy7(COvZ&_ci}9HmXd@gCq+f zPi!~mUsTPA$Mn+^7~7SrutBpA1Dr}Rn0+ZR3B4mU8C3G<rJ3UHB~m2lGJNFozCVrM zB1j2&Vk{$_qcDFUH6lPU2`p|iFGM!GJgHPoT}yo!R^s=7YR699Lr+g2Quwwxqd$e& zpn(LJ3q%74cqrpMJKtSm2|T8pt_GSKoC3cPl4Ijx(Ff{CPR&((th_fPKW8cQGmE_u zD<vr$u_`KeE92TUbvrlRQquDr*?P)!wJNRc)USIwFD_zyg?truV8(e}BO|r_4#<pB z>;L<ehwLRncuXLLLd6eR4%`r)c<wM)eT)a`Hips;Km;~1va8IH1BNyiWg%uWyy=^S z`rrzRFNh-0C_}6YRck<AWELN=%p2&d@eh&5fGHx%Ih{ljThk=e4TvfVc<`XDsVOnc z*W24a&k_@}fH)DFMtpbNWaww>`mc5VFv(n<ou5aMSqOj>5gxG90NHy6ccVnML)cIR zMhC<J%R@U08771lVRl7NstH{Zj()V-2jFI>rnZL;4RrD3rl}37S5~DM$HC6Nz%K$c z1E>O~1r<ZR3<*O(-YKbux`>Axd@JaMtteNAaWBD2!QQo;qb~O-P5tAA-DL7rC;^7q zfhIzmvAc{+)=WAEW3J`>%5&W;dVSB~<3Z$bSVSaLsQ`BkSS{4JJhT@E9&x)5osLt~ z4TKf!#A-E1BQi{CEDV-NvjRPx!PRDnnTgu8o#dh+H0&72flHzHBIK<&dG^!Mq5Dfy zrzg3ou_yWzW%M(z@&Fkv-4oREP>UdF4+CGWLRE(a0zn~mL7Sr&i8ZaG(C%s5eZ7}R z96#NRq7iL?rw2ZdRZI+$kVEldXc&{8&gnR8gPaOQ#Y*5h?@kQSJ{z=2db{qA_&69i zhv8+z*tL|)KQ?c{#gDTad1$b^g+|`2zpVX{M)52&t@_-@kDAy(<Bs}RlV6j_f8Xyf zj(Iy$w9<px)v?ji+p}qSM1%E~dF}z)T)9}G2hPncZ$(5!)2KDKddDf5usSPD<Fp;w z+3#^@^QKLxxezhMfr|xM&R7_#VSJbi`O1A+l-a9s5MYx=wCH2p1Rz#HF4;r*KRb(T ziEXXDsLW1USfoLQg@p%U3@&_cdFG-4*g!G50v*&9EDK!75T-$nKm`Axt{N6`y>Wxk zsiviYrwydkHa1r0r}I>CL<NUG2s0k2@63!0qR7a~N_t)%<C!}5JS&R_tuuT}`1b@5 zzkcbU(gpt|dlaJtg#{%bnqwr7;|E&SN9h?DU;r_FSbi$>KA3`x!OetI5-mNf4n*sR z!)fR*9_L%yFV;YMV-Se|zB|?u-V;3DxV>j|pMSb)@!pMQpfMhsa~*I7t^<fvorXRV zYCPDaz@EX!p;N%5tix&bDN5`zLOJjyP&$Dn3-Qol$h0~iI3c>wt13F(k9|^s7<&aT zAz%&7)2X;x0RBt4&fR-;ImA4WHtgiELgN(M)XWTqA*ElYF%PyB4X2|O<dZ8}5lVQk zn~?##q8)xT^pJ$aiCR;Eqxa#;1`?%n&E#gyVVXB4Iq!~G$rA&2F_jKa#1)yhLP7<o zO)xs=5#=?c?7ezGEqe(71H2!2#DVi0Z*g>O(d4AaP%!O_`Ov5A)Ng5FLD2pv<8hLM z{C_pvj0U&M?H>7;X@-jvo-P=zmAQUy2U)6Sqpwyt)4}j;FiKY`w0gw2GqyKbC}akI z138a*BG}<man5=XvOT*)k6PPic?|IL<k+wsr?+9wBEQ2_u+(gO&R=&m;|c|XR3DqD zJ8A|L9+=^yc>FkoRG_ADx~Xx|0AhSPFy%7<I<kei-^Zgp=QO6Dsx+!F(9u1|w#9`q zIiQ6O9i=3;q>|^m#>PCHTlgIl8C{47RTOfNN5cAktls3u&!4zJi8wNp3R<xbq29uo z^c4yd9H2^#-<FWQO=PG7<eEx5=4fvZ-=Tj%0Ls(Cx<pCQMaxKO78W957q8zH=P-WD z$i9J*5eewa&@X6v`uO@10YIS9dcPIfPFX<u4}KFsq>iUCQuMIJQRYHwxVt;1PWEtK zH>O&n9Y(pI+>8-I@<qdzkq>WUwh#^&s5J?3nc6#q$(16)Pz{d)U>tr`oph$^6!niO zNW)WIUr8A2Lrhkn-3Sy!*wAcjY?U8AWK*7uL`dpUcpwuJm?lkI@SF~Ys}`N^+#0D? z9r7kE0f-G|mY_EYRZlzA$k(1D?<4Za(;1}1@XwzyNSG1nM}pzh+Nvw$QK(F;shH&v zog%BJN4vW1E(;|of;9L`*@T3qQO-y4u#tSciEEtuHObSL3%s`6yX5i2*-H|^ah@Nd zlfDEL2&3pPVthA<lqk_l5<rqb&ic$yT_Oo>{(WR3WU+K*O7)hk?0oCgq8svT<o$wz zb}|3J&5olTA?H}u!7s_Ye=SB?O;im2tQ9C@^P-`ngH*f;THD%wgopnE5DoRA?gn$u z;M)?Em+tSy<?`?YVP>o$qcL-C33<Fk&y{17k=TubXUASq3=9<D<;7DyOK7rDW+!Iw zY`<MTqS626Q_AQGZ<~)T^qeKbSk(ZifFz9p55{q$i1Pxq%|Jt}>ilkNsmoT3Ak@BT z+m#POr#G1&h(^p`kp<TENntpcXRhpD9KV-|ox3~!X9z=2Li$Lmk1X;m)MXsBb#)yu z01A(IQtT2Y+T&+DFg=upZ{QUOR=jGo{z9;)<EL6UDHWU&spN5-MZsNiczSR2rEeG+ zU>8CukL^y(ScK%YqqEbWGnk%hU=~$324kU5`$VSe@r!F(3p2x5yohpshW7>;Gd#u! z{2ppff4DH}s>h`ym`N>61{HK||0!KvCBF2qq2Xa=zQHTvD3Vb-oG$Yyv3?uEjYE%z zrv~!xD9*?ow$9FrNR|m97mR+yeM?Oa4uBF^uonWZ(GEoRN9k2PIX<O<peoF;hZjf< zXOjo=B~S(+D>28YIBdr(&ff*MHK%U(6RX4MZ!ImIpvLf*R6x8#_?o~ZUBh2*EWOQn zm3lS@*1t0`RaNftK_NUMp-v()3Y+*>oaTTPV0G9H>Bp{J%t5lIdvBUEd}I>6KMfla zT!HITwE}>By(n+VJ^`}<%A~nkk);Xe;touZx2ML*CerfVw-LK1Qi<)%%WLf6wP3jW z(Yb<Y7_5(`qoR@zSyv+;ku4NKn0&hD`WhscQ;cskBV?K9PN<o-HpZ2|LPn4nRFu%M zy3PGO4Q)<Q(Jby6oG%vU=6cjx=G2=8Ml@pIX#aCf<yjNyJ*Zcq#V4j7oIh`mKtkea zYyN5JB+_S8olsSOK~t8ZOwG#5nq?Opv4t3`+v^G8{VsVnyL(A-zL0^o5aDPnUJj#e zYAgFATdHDi2ytP;sHw4uJgLYv<q~bx{*~-VV~%0TRb-}a+HmXX7Z)fSD)o_rg)X84 zSjFU%+HEuyO9%}svu@2oMlVsIVkcqs^6Xp{Jg|AB8KS!Yft;)?7YKLYkwJ9)P>>NV z`J<COTkqR#pppkZj39PQv*4%lPuWIN<P~=yS`;S`8ZP9Qsjgg9A8yT}{DHEG7?Fw8 zZ4^n&UgF~7ZnLfWP_?8aRZ3U!sitl6-mEtea4mAW?pl48xdH29I#%_s?y~qbLd%UO zRC=wSyyOQ=BEWPYT}g?v2ow7<4R`==fwNRmY6r>0Y12+}?Hhkxu%EPS*8Wr#x;x=5 zJ+$-jjh9<8f-rF&pa9A%BFAoW*pv3zUj|U=m^F(-sFV^O-i`%1`0JNi{bgs=HaHht zU0god7aj`ijML}&>*iB19pd{M@W!FDljToL+enO+$0-%M`e&IOMAOAY`4b?n@nBr} zCh~k4Yw~Q5Ihr;RJY7b?3#75em`d>W_GUcdC2UAI#1kho+7z4g$`nraFbIcUiqtEB z3l%*WGIFqnuA@JIR025!E7^IaQ4)^UFs#0x{&OuJVfXO>)rigiqpwd#ON)pjLO%q2 zf0C1wTd><)Pg}eE3D(#7sqVv6SFz4}ThnKvh1k#$k$KBI3pATWdWJR&C0N?D+_24j zqdiY6xJjjF3G!+LBg=sP1Aa4Jx;%zo7`Qx~K(ELpYu#utWfw_~GZn{mZ6cz`PINU; z9owwT5qgJXErLUYkCVzDs%W-SrC%WqT^Osjg30m73Heyo(f|0=W@u>9dI9xG@X<oW zr%ak?scv!Lf;YR)hT7YRfgx;E0N167i^<kUB*Ie#h8VnE@XDaA09T}1E<+>?kxo7e zP>`V4u3ZDm1Zg9-3Hu{VBbdbd82P!4#7)rP*=-tQl1{^w$Wg1Xy&D$TFpuTtQX@bP zqPs!gK%`H`90^uW_zlrnQAWRisl<jmD$3W__qY6tFgc)CBlLODT6m8ehP207#*@fy z22l%@KEyIfghdgTX%T=KT<>V!e&YU#3K{u}L=+>8Q096dqau`=t8y)ao9H4lv>nxO zdcyU95(TM#`a67+r;_QWZl9t)roX!5Fzy|tXZ?Eh*oc_>(fQ{nA!SB0dH_;GC|gnW zmLQR={%?G4XULu<qo)`A(YE0}25@rRkq@U|vl_djrcofw{?^j-XenT5L~NmXDZfJJ zO8eKftk?YDjQ!bLmgOUsubj?ZNB9M37{aE5YZ^oNN}-{~z1I{xX+6RP+a?@LlVS;) zb@lbtp2g`Rs{IMXNO>32YuBDaCXJW2Q0a~z!xF@Wrpy>)frvPJbfpjyseaAju`jC0 z%E&+=RGuJr2M8WaFM#IIE68eS8rsWQ=mbI*rElWSzN&NoNMn)xtIS|e6-4LbuSY(= zHum)hiUP2J5U%p_W<woy_+$<_NkS&Nv;Z0V{S+i2PyxWvXT6(}AzG9qS~%e}-`+v= zzsZ~qP0h^(`T5S6xnQp^so)xCzJa6_1C-q+-_b!@Kx3k$H`cOeW3AavhFexPfgsuO zF&sfqJ5y+RlNo6DWK`p|rRo~#AQvnw%)-(V!)jWG4+qi}Msd9waq{Cfyc5-F(cyqx z0fgjX3l6j6&903Vj{~MI0%VKN^$!Suv!ir0{6n83u6;>KB6%%gFFVTJRwa&%%+2UQ z9}l=>EV{lkG048Q)|sL|T`EO8#WCq}M&1vD(V2gsnPE6B!^|cr=?Zxz#91ssR!DS+ zI!f*ph+~veo+zUxy+QIcG~_~NarCGWE3=-A)s&RWjMCY&%P{h#h2y25Hh{9}Q$8Vx zgj$v8lbSVTl*>pJbutFc5g-DY62t_kBh{XB+i+F!ZF}VFyVbWMXfesq**UkVHekzi zBSEx7;Ei(%Xb&0l(1tA}7E#ul^It9qwKtK-Hhuaeh|}=W(*qgiwhV(**rbbYr3<PC zDcrV=?do?9NNeEQgrK5jnaQf9akn+k8QQx?(Mz-?pgyCLN0@TXwGCmq;?@j#OF-WC z?MTOxgtE$dH=DCuwtrH#hi^o=NJj9b0W~p1>&eKNm{|<W%sA}uRZx4F67)LJ8Qt#e z)-Q=Ba1#To!0psUMdhjEEs>EJgf0MO$BM?l3)_MdiCrlo_zuGZQBM~wgQd~HS()9u z>)r($5^9bi8Kh%E9~y^ThKPuafhG1X{h;6DnyR0+W~Zl%ffxYl<9*^5B{UKA@=68< z5ew<)5vWNw;ic$K`-uC;WKat`XM9Ki4#*eh40Zs@%MlGEIAYtCxi4P_I3OZnIe-=c z`5OH|%%GtoJp%QV+SW*Oxmn~l`y+O>>F2azayT8uKzu5Wc|bu}T<+8LV)*5t$!h=k zfaDG5ah=CZqI8}E5)9vkkdw)K)TtXA8uAFphDRiv5+cgqza&g0unWT12P;#QF+rR_ zsIa7g`udCw>g!=p;aFJ+9(PcEQ(jI?UIH`MB0N>I+f{RG(qnEcSu{$cIHE9ZAViI+ zAlvt^X|3}*v%JN}$UZsVmt_i6B4*yeL%Vd;ChJlVvz6`LT*cXRi*sZFOIke)y3&0# zb`roIFhegupfn*I!K3IubJ4OO_~ai*1?@9xX-sCuZh`~K97bcr79SE7otvH}rtQHg zvJ~le_pSush{m`{>O*%(NR+oJE6V8}MHcjRBs)U1gS&6*)~yI~0%kZjib$Pt)H&#` z(EAZUGz6W1o{*Ni0)Vh)AYN?=%q|WYycuMb0(%C{eRFZ(>g;)Bi8*7dl|ea!QUvFn zZaW@<O=P@`MZp@{QH&mucAi34)Ld6b%xuO)k$&4oAb4@V4ZWv8i2(9qX2ZvaRu1Np zZq%8$iNHBvnZY0wg5(%XPM)m^x}e@d79~ZPB>nsnx^(tpPz0P#&`g?NxBz!UAi&DU zCFZreVfw^h1sbE|rtjjv38Qxa*C_KD0?Kj>zEy~73x=L#Xsi)8t)#A=7T&HIczU-k zg!Yw{im6k?QmV&N!lHwO;fRC;jxPNHgJRUL_;GBzbI%l!%j_hPR`}PZj!(o*OoS|< zK0)71Ou31RGe)I^L*Q;e0N8%r_Lm#qMeH36!IUD<^~lFX&=CT1;9Z4Cu6bM*fn9J~ zV~{#(iag^I?T$G8g10*pG~t7Ug$2){5GWy3@rZTDSWRN6``Y50w2nJzOrN6!VWvMA zUOS;Eps*p*=;-!{hYZnKCY}6L#~kaS*+y{&DFSFF)F*f~?ZA#<-Nnzzetm2pft&9Y zRcrjxEpr_ip1M$L%YD&me~%jN#-Bx007!k*+&~jLK#~x1Nu%DJuK)WKxlc8|1Z*c0 zzb(2gbWm!f5Y>=v+eX;6QG~QKet=ULf;Z&SN|@KsSSuqZ8*XZCUPLYen2iy=bS7Tf zoe+hQ?($cJr(ctQ-S(3Jj3EdTMu;Z9AUDmTSbf?^<mN#%1Cg6TNg2jsx&lVG9TU}i zv4+kNV^zXEHej-NA0co#Qom!?PJXF~r4EPBQ^;pfi=eN7=E$E?+sJ4?J^do$BjJV4 z+<nyfh?bDmR2`l=I4*oA-8<vZra&Stz{SPng>(fxaZ33MrOd}obs*uM8EI8D>jBKs zPoY3GnLyldWwa>P^jdROk#BnhuHpXudNld{kL8TxY-XmC-mVllU`wD*LX<RiMD<Bz zrXz`pZTA{xCxO*okh+*ct7u@jLfh6v5+4l<1_qFz!UV^wsS2ee3OH=eywA0A33G>q z8@M5_x!Cpk2y+ThKrk*qUI5{z$nYOLm}b|)%gxQq_j%e{bm6ZKNW#qV0IjSt0JSo+ zadKJ$^Xhf7;N_c3kn?-CG&4Jk2a2p2f&!2ymQLNC2gK6x<`--i!Omn5ve<5P6>evo zzK-}EW+ct@I+DsW1nG?YM>JO7Jk2>k8>h(=bJbSV9se2yCSfSY3DYu#N&;1+;VTFK z)ij%28RW~z_K5=~oRVH%m`t9Lza@Ll)D+R;$pbo9pW0XS2w(c#0^Au#6Y8W_lPa45 zT!Rlq4j0Pv8MW(K{U)X^Q2V0q!w9vO7F`jOA8!ON15U-C%Ff9-sjRGJJ!L#F3sEPo zy(+-Mop%t^gPMvMBN!jwIK@RN|H9A?O&Ta6^xz^QU)cpXM>eT30%<_?ggpTg`Tm7c zyv;ze^K#^5WCTVF`b}@IQbtp)DnD3y+5P`z*Y8Ez5Te>BNzoVM8&29i^YKf(dXSP7 z(>M$fYZMm7F-?~X6}b{y`8k;uG1MRL-~054+1^=DTdI~V9Hmsy-znsi{N8Xj`w0PA zGgkst`TF%WP6$Lk_SP5ij3-OTX}(<2S$EKU;S(j<hn)y@dBEMf8P0K|dR-(V`)0q= zkhn2~FhU&>Xo=$=OhvcH@?-7!`)vm(j;{Zf6a4;<n(~hVZ_>Tawi7`9Cf|yyPEMHI za5<qb?ce?w$wXwc_2<IO*Tm@C5eZkA)=?QjONlx42Z5jFPEQ>fIPlMJE4vvX6S)PD zsoo)rCoB^G_>$I%n4tfzbNk=_DgNAlucY|LU;F*v|8J0X{Et4+h&O6(<cB5Z+D|V2 zm#2bXQ)2t-nhcf|79x)NR}D(;jb}@0>No=%w<u-?YWqX3(ZO~d<1-2hT-R2d6*`Mu zB0NcMGHBb=dH(Zff8;YZvXtcq*#l&t6A%p!mR6IqfNNn>c?qHp2Ucq^-$l{OQJ*tk z)o*td3D*E!gYAmi2VM`HqdmC3dgCR;#es!9hK32GGDZl!0FA4-;UWNjAO=ic`;c`_ zthi<lwJ1W7gpLW6Aq7{8ZZFU`SU(I*&EQ}G&m?;>Y|FN1ifh9gRfrQCokCqz)eQ(o z;U+9P#K(71U*8FeGsK3vTvG7a4%DBhp)eAzgpmy4oeK+-=P&teBauEU;xxH6gEM09 zW%6vtu!{+45YpldZ~!NOb2*Fs+&V2Ss7fJPmYrUdAdYbuqB;lH3!LXMayTU=qt`+f z#kj3@C)GciskVbG7pZs7!w?XkL3ba+#LB9W$^S{X>vHmy0I)|8UO;DnXh-y4(A>UW zNC#|Lg3GE>AC$iVwN~n#v};X|o8AzYV5g|C@XY-DWz0Fs&%cTYHK;>_BO<th(r^jG zhz`9dgrjIvF>NV)C|FDA58Aof^u*T#{Q=;lk`i|#^EXXRT1=FF`ac}wQllo6$3kkB z=6)5UN5$0BsHl;Ff!+J|y$0lkM@%J;+XoCUBPAsUUTbI|%?hX>Bc#x{jKcZPzJH?5 z_)rX<RCzz7Y$KtRO}gmmQ--514$xS}Lej7g<;&Bjg8uQxMbz$WKFhK`^H(T_1Q$UB z0MRZc6oL8y0g66BIVJzelL(YYs2}mGXMnG;Kk5|-D(JU*N><I5;qP}cfa>$VN;{P1 zb$Cy{@rdOSTaeM<QDo%8--(6&Homd3x_a@q#T8GK?C4DGL^O@?4zM3x)pqC3F^zNb zGqXWqE+iCu<kss%lYv@QwV5x6E?<Sb8AU@bPH$D!QDjG=2gWB_z!i>JR8W)u{Fqmx zm3lkvOw;4xKQCr(cGl?0xm%d=TwRUuwqG!FfzSm9Vvm7B67?b6IygZAv!Gm!iH*hW z1`RW+iWj&lXa7cr#3)>c<{>bLKL*00jO^|A_Df>Mi?-X)^M6Qp?n4xhSu*&@7{C_# z=#kll3x#O1@PFU12f^AwS%4>r`URtncw1W#oJ`PYXebENJ<>r3LIV_8Fjo>aQM`m> zR<2XwDRc^sLmzukP&wQwzHXIuuC~@wUcTIK7b__<NK?R-xHV#cRse`YE{hwg8`O$m zDTWhGko0#j9QDo-mui50NH-A(%E7-BJ&&ot6Ut`YH_m6Yg{o|1Xh(rcENgUeU=xCz zRpZMyskk4j-?DCb%)4qMWDN(m?dH3I(h6!}kQpqK+|!poy=qua-_m4pr{@CXYT$w& zt<}IF42>0z5j`!fw=uGv{EwoBpPP1>{U1~&RJdSsv17oZqkXm}h^>V3<04cB-Y>Nm z@7a7VyohXY$UZU|Kf`l?-*6gI_Z>TT;^(q>!9<5?Kai_{PtM1j4pmhfNa@ij?4Y3d zR$%#X>2IEPFKzcMNH%;`#JvCb5fWHs0f@P`ccZQT*xG7tT!4u3BF7*ln!S6^A~0PD z#y_8tA1EJCH~>0S;k!^p6>9He$X$09apbcH0Qe9Fjn1@<?>xFuzfo-89`c!cz}-}u zoIF`hmtQH0f`MOLJfd;%^5;VTs8VDq5kuzTvj_dCdmH2zCQJI23W#uXUqlt`6$nz3 z>+1|)0I(fEGEMF58l=lb95{F!A5`&){zN{^-aUIVL@9PeyVXdJchK1mJg%z!zbzQq zcZDRQvBj3><H-8E0|{~GI{#h`QBcXgfU*X@fdd$jgOACB{A^Hyelq^46TBnB3o-|6 zS#}CuefgC*Bxq=`4^Fv!4S%wrM$X`6#arq26ip@@H_BU(z*y@zyOYZ|)z}5K$d*w= z^WRm(YTK<f?S`;b!tlvPg%H*l6%@DsE(PH-S<O6P;BBM1c<&2FVqdv(=o|m^e-+bc zsX_%u%8c$a`GFSRNT}HVFAn)1i$m%k|M%jMuu`&{$0?ffosWYHy@DPAA}}-`=IW>I zEt9kdN$vB42EKp4f`;Hv++lz~`hzMQ#u+lOfjRcq&_cB6pO*)E53dRo)=$<qZe84b z9el~mL4On@?HB$JijgO8NZzE&>8N>cA+Gx89l~9e*^Y!71T8U`FA0o<0v0#CY}CPK z^-mSZ@Gci`lc4vdZ`T(!neWL?PE8>T0c^4oQqJl&@xTNe%KVu;^U71~YOFvak~R#K zy2$T)9_(OUL&Mrc&&CoqNUshaY-nx{9wAR&5(64;%}*Rh^0Vn4=YH!z)XnTh2<;5% z>XlugTPM3&TjUZsKjr!VX>A>qUUr{DoDfPclv>IvDuQBSa2QvipT-9wLLf+crWfJ+ z1C3{cbYI{`=&*qg68UJho$^IDU`Y>-j2s>tBQjoLL<7>2sHybW84WBDO28Pz^d=Y> zl$5HFmkP4N0pO}jJ(Qk*nqFXHY+jI9=+wT87e9^EBivTn+Mm#LqU*!>31}UM9v>Qn zM(J@@)?GipJ)*YAIww+tsyw5&QJqd&i^0`{Y5`cWMvORul!!1NVAsg=!^kxsb6ajO zPI$GDK6$`yn3`%1xd@>!gap#1PT4qtCf5^ZG!VN0Kfex4uLin<As5e|iyd`+><|-q z_<%PYnLyZNn3;jXP@ryuyOWr}39uL;w19A0_>?{Yv?&BUf~j=)3J`EZXan9p0Q1x@ zljt3gjR(?TswM)cYzdIFt(!JsatWp{|H2(z<VhTwhv@c_;d6rIpz~M6ObKp2KAQC^ zWSYsy#Fu8zpc%){B_$<Ic(C~$uKy1o2JtJm+|RdVNtk%8WANnkaRrw3?HOnHWnA;X zF9aAB7cODvQYYed-BYgUkxW#7)YVCRYqav$2<O~=u}Nzq3^hrcn7A?`gBqEK4YAG% zc1wl$&jGIs1?pE-prqtg@!n<CB4n+5wfEXfG@?}Plz(&Vq9GEU;KC6$45b49c%;5J z8I4^&$I_*U=kP70_|Bsg!q@_2GQ(ZVak$1{8=+F7&61hjnEhM-0mU>a^Gr++N*6>l zFdjBjL<0tcJ>u`ceR|3F05r1U`X|Re<b);|cDfnGWZ)|hZ~*C{$$O7T+oM;$zX7VX z#0&E@5ntJyzH@fp7s7vq;X^$=O<8)p)@v+)^)N0ObfJ2bu>XiRLIRNxHwY!Ey4o$( z$0HvOcz%WG2iQ@6y#rCUf+VG*BdXCz1t;67MnQKdxNr-Cw4Fn}1sqW5Lw#$jBiLIk z^OUviJ9omzr-{||ZrQ%`M}1e92ZU7+$fd8n2J?ZE2;2=^YkZ|gB5#=)m&M0-qs&2? z#qo5Ld^2xrp&GEQz$(%FKo1EJGc4+^Grk)DrYOJ-z=hf$pH0U(s2rQ1ECiT(ZBg!< zs+Fm!oY*YZd|q;LGt4xY1W7a)&^T6CSCcEiIfLhjG&FoaQNW&Pa?y52a@!1@yztV3 zVcG1wxp@&FXq4S%m88~o`=a27#XL=@WQPU747eb*5c{WBp$rNn!-L^=AqCZ((bEs; zqaP~`n#7^Lk&u+ciq|PSN?;=Yl8wComu$p7;6G#|eDfPf7&fVi&@$BEE-%%3Hp!v& zI6G#`$X7rsKrH!b$dT`z)<UOeGqI6tra#<-N}d21?Y?5t;=BH9@R39I;Qpg(7tdd{ z-6;vX{GPoBALaL<4?9Gue-nADRoVTMVCxaKnJUYa@L@B!hk$@>%#~GDek=2THDho5 zrv#+EB{t}joX)@2XOu)AFe(WDunfRgWwLvFdlMWP03*P_h@STcjd;eu0P@E0G5!|a zzxCL+70TxR+1UR1e;By>yZ+O3GE4bC^j`ei_xk?~V(?!-^&fXiOFnW<_8+;HVXo@? zs)5vvMKkH|Ka_AhaavA|l!-*Pe(|S|$B})wE1rah>l<07#65lTgp`bI4I{%wC0ILx z8m;DwikuM=p&FpyPJfF*E)>$?4`;rxsL=fV&04q|q%+9=+C-9ZgrWEu=95tD-OV$d zjQ5Q=+4kAEwXGNdFL}KV3k|&k_iAQo>DtY|R{Pyy0JQJy>}**_(tGJ*TCl%A6EsdE ztv29vd%008L#g={=g6N?veSbCNN3N@b&3rIgK!_iCqE`uV5{eizOI_ZdWExe2LA+; zAu|&9109&38ymsRc<vnh3z)+605`I;KXkM1?qvmqg}5c|-+PS<UBQ_fG~l<#(Ha26 z7pLh`WM=2*pFg#B`~K!FBCSLeT9_UrKV>^8h-^blFF<pMdxf8uH(04IEznIRB2Q_G zi|^VL6*vqeQ>n6b6<Frgg=(f=MMNi`y`D{_YKRgWnAobC8keP+i!MuBCDdZ+*nB>F znR~Zh8D;(R5Hs{|-*yqUZt-J&i;aQ{xWi!=KGm!9Cp37o-?z4wqmcFTqQjL41(nVV zfAm{O*D`V=YqgPEe_wWE@)I<1Y^9iljZ|_<%$Q!d`nvK2TraVbu82&p1N4XAUqArq z?)ptl^T<&XrV?%yd_Oo{h6fMt{%=VR?o|w}?<sL@0?IN_L&nS!gp5}~0Rciehj$km z$p;*~+&e&U8dEh!`}%%^@_=PCE7Osn4|MPsq{Y2`@l{{n!iNr?<06~c)CMKfv7P%w z`E=2=47gxe4h917=WF&fVLlSsjxj(^Utm>L$_wVnMTe=uMFZLoDs0si9q0XaDzjO; z<e~Xos~3xfY8X;{6iG=*V}~511Den23y}zmGwfaJzxERC+@r-N1Wb-JeiRTwt>o+~ zNBYur9w^q@bYn9pVd$v<)Znh~&em@%ab1^o7&;VMS6e%p9?!wBcP~y<)FI9{UTobw z+fnNNp*lF-+VkO=!Y5*)qNb-02-BcQL8*%f7?Hy0zy4aI=D0UF4b%Q25^C@d@vo+Q zJT`7v@m#w2NRtcL)s?GP=jO)|@`2lBr&4-Lb91za&2gwN@g&&~&tT3B^xuu$Zq5Fb zQxI4sNrx$S9ZSo}`8hKz1h9(kVYCCYX<I@g%>eJCljH&W>~AwGY{5ViWjF7{pffVn zypV=FLGG(sG!=?g@||JylguY0dhUOFy(pr}%4DWzUZcO_;-?jK+6DZ&F-qi4R1kXL zh{pDw=^`>_AWdgqTnQ>yLz!IhHt`rBBdCrcTpE&7SrRKv?$gIh3|$CIO??MJCCbCf z69$lg0Vo(8UEUvF`}p_7WPn=Gx*~!uCuh9u0Q2F7ECyP^HsBWYLLQ=GVyLY)Z}v7k z_yJx=r*VSM0p@rNI)<4Vc3fZ=7N<-QM8W<D1CzQ+_d`?6wHoTNDxYz97K?8<u^T`q z9o--{J*+<(13OAxLJbrY%2Z~zV%AkeZRpY3;Z)TgT$g+gOEJd<pEK8_?4bQnI8QDf zWBL?#!3CA`-PuqqikyExgByfW9#xXJe2}lNE0TEOkts8+IPQ~>m`zV2ER|eNh?^Q> z1%PEe$;fpIehkX*$rG(lwV;+SSX%>VJ1g(^+(}<Xrkfy_P1bB65RyIj^g?xSPemDk z@ATZ^Q>X4@i(#^)G6gG6I6yGhW`+(R`x6d2omy96WDjIz)ohVSU~fcC<GJR%G}?aI z+Dz=I)K@H@Pr%PS*4-;mszgu|y6}iY(qN?q>P`<2A3!`7KFA&h31N<bTQeIUfV1K7 zg4I}w5A(5&3Ww+bX@Vko#b9bJOGRyh!|D!YdEX?E!-4`GC8Y^~S}`$aun>IhYLw`x zEGXtrPM&f&_9*R1)nU%>*AT($gW)<DAC@~>(oXV95yR{y#S1a74$_6bnPC~QkX~FS zfx-bVMNM@~TeFvlh-`c@6r!+edZ;UL<VbzI%>1X+39yzQ$;h__WV{vfIoKO_^bU?7 zoDGB;G3t6YWVVcqW1!${MT6ooUv*6Ypf02I$}(E5<HwEZy1kUxtPvWDV1yeB<^%2! zm3(>9<AhPqK&COjVgmaUM>6a|D9oFilT%U@S^G+PF4T2)UhI6z4mKUC9byo6BjGHL zj07}AAbD8ek%vsp5cs^HkC;m#`vE?A<Rm`NzbJZ6b{+T%__{&J#QZpMT0MVehcblU zUGfFun?brZH_HfLG-HoVO;dXe@<m&x8F5I2#vMUM6vuto!&Yx4CUzr=cv4{M#_LdC z&r4rBv{#PAM2Rl})!oh>oTi(122(J8Q<V$dp5y6^N)VqJ=bJe{WV{8LYp}<L=-as# zBuosR?Ux;k4r$y~Vtb^7QyQ0{a1orhL=)(<2_bFR6J7i=y+~-XwvMWlVP!p!Mv&+# zI{U}ItwMFVH0!C^=+!?+hZUNw#D?%+fucv}KdjLob=iK@hiGkZp-$Y8qNB4EEl$qM z(-3)7iMvCo<t!Dn3n<=Z${}_T^b9!S0K#m_qB;SlJ}5X2<;Z~|u76Mf)mfa>;`))J zG-DjK`<cCv>JD@eAqz<F(C>L6z+Bl~CK=z@T|9p|D-*7al@AB@qR@z!E@9V(@&LlU z?^Qv`_};y>IC4;DpFej_+@@_Gtxq_3<&=lT<(gc}wEp~p`|R$bK(4g2ezM0;F$u^2 z?;9WqiyXhfy#wogxUT?oul4w9^;TDIBePfUh~Xx`lQto*NE3T?%FG5spWTI+)Ou)@ zZ<n*AAG!slvu}m6#yZp0OkIbe4((qI8G^4AL27(0raS61_IhRIHbO|EA|rP#ZuU>| z_*LO{CDMjkl=jrG_7fsk>;KrKZ!RT33O+UtEP#V(rfYw0vKV5y?&QSkW&8DozsEOi z#IIsY^z|}w7m-D>u;#(VimK%}6Xl`tS`8Vsr$t32h}uOB)Z5F5mAp$n<Mb+i?*3g@ zj};`Ik34)ZT=LRqVFc7!w??6u(&;Pp3dC6if0f;rxpZWIfU#sRWv3yB6c1lGLJu5u zd2QA72q6;4|A+iGfHUBsCkFQ+%Y?V&TSIIK9&D~jIP8yT({}j6iGK=nlm-V?M>f>1 zy+MibbG?6b*(jLf6sjmnPnGnrho$1?uC0g-e{J_|d`6NBZ2&RdSl$mmux`fsy2!>i zoXMxUlN)-jxXf)Ift~^NIw>;*hwZt?@F%5R=G-oi=i<`)R%A0z9MdLW3oM<~)kWRY z9|h}-Zr(P41Euil`C61cnofBLp;(`8EW@2evz~-aXV9SpK_uv8T;8}h<_F`yKmiq6 za~;d*7|X7smfo?kMgVXYzUd(q0HSqBTKL0jQ^&|2MI1{^NPu)BIhogfb!Mys<E7{Y zGk~<S1Py^tM#-VBtV}O;0|wVX*>l=jTJ*3vTx_<OJe!RvXTO?QKcbs!X+c6Ea$QhG zd)+n04n^2J2w6}H%|Wcbq|E5TqmR1oaAbn=tTS6*V?-9y6W)FJ0G&ZZX<{Y<^1l?1 z1~T6P42;i>rw1kUjbCR{Dw}@dSt%(UYQ2Y?m8IqJ)tS8^7_R~|!iEhiK$x&o5I2d- z7e^AGyX2=ze;F5NcS-DzrP*MBL%5{ayiUd}P#fhF7mVS{-p@r<m%gl}u*{8@eE?VW z{z){SlVVKt*{!$`P=LS~`h<HgHj-E1(9rVCBUt?k3yEXEpHm1!uS74^;D;dqX0BNy zxKakDl-0h6_wjBp+wbQWF~y$UneHZ~ZfMAkf%PwPq?WJ3m9@5HgQ+-t6?F7>Yx2qt zqOe)S2UV8ZEbcUB3vv>28?^Uvi&u1Bo_TTQs-9l|Z<c*OOqMvE@d9hj5+0!Hgp+j~ z*%dev5Ie40VDLJS^8JQtO|Lz-kB7XZJRE<uF8@+XM$_0g$zv={I5jRvr&SN!P0<a~ ziMY8GD&NSEavMMp!16;fGMCp@OwhTuzT9GMh<H8dEhMkc6h5<i6dld071(jWL7IrF z!K~X=T%}OhgT;LAI2w;7+SE3HZxPY|mR+TdLousd`#J^Bfo*f`ZhvmLg&3_eZJVL~ zn_#<eL*p7*0fmotoLL|ecJ1d*?K3kwad9^NY%a03$N~D<)}{t_k<Z?xr#Zb5V<u|9 zeS3US$HwPvIeuq26ix#HG7zR3m+!e&lxq}#B@tdy5?fh&v)F0AwyG*{anJT}9FD8_ zh)!TlVafVdyu4rh%9HE2-=DPbOxWb=T8!bH@Xq^bq#G`uFo{_zv2OXc^VqSc>8JIc zp`MY}E0UOzy!fe-@#qHVW$}u;rl!a(Ez<!rV3;KGYkxuK>P5MKztJt(glyhU_Dj}0 z8M(Ph>n&{q+cw?CEe-q$W@k);Ro!rliRq0e;v&FM&D=i%nxdzCGnhd5pQ=HI!Q(6i z^--Sjv2RrskKknuZ-0(Y?ckl2nhISsPY|D^<Ol32*qjC;D(Or*sN{zd)yP`LV92g% zXgDafGKD7QOwrQk+FAgg>?mEZn}7A!?!x7H>GO+M#l?`5IMhX4btr0qf=HljMUbTz zlw20Z5aK*QVo+3Y@Lp<a9X&nw>4C?k?g~hV0Y#@wT3x@|_{BQ?<YF~KvqeOH#e1$j zhVu=vyGV@78^Om0?3vkt#$(H-1)L%Qlq}L#5*Bqsfq~yanZbsrjl!e58*wQwN88tl zP-*$9hcfC=#J_MHor8|bSt{=SeYJG;{n=R;w!bQK3GFDb)C65UwBYb_2!YQk=64w1 zSheRO1pUV16#M?eBc_r*-!8ml?Zsik?p0YS#e^HwP&!^C^rW+`Z4_7&rPs`?M~-w> zR2VT){s7#giWA)i0o(Qiwvif)&3D{v8BeCqxmWu2@SpXdN7VH|UFZAz{20GQ#BQOW z+MZmt{TRvtSG=Rqwt8QNuSukvIMAhCLQ*fJ_Oy(4Jo@0B>BX<S!IQ_`qehyUlM^Gg z$QkxdRt?J>cGZ!tZ+TE3ws`UMdV3w(t>nW}Nhw^u^!skD%NG$6N@f%n6%q<PB9T!} zt85x{Uj3Yz*-6r%`8gZ!DA6J;9dAvpm0!>GS}0zR7;d!LAi}-baZHtlZEmYO)Cs5o z(d`3f5*8GMCC>mRsav<?tgXpokN3O{eQy}8q;F7@E7yPi?OGI)Pl&Jhg26`Wuiw7; zQfve882jGy8-}|BcW(PqoDIN1tlQz0yQGSRAnu)gI|hNn70vC?4WmzX;XvcbKCJ`( zj@A+05)T}Pbp?5mQRIHQ?e}3D2ayG#S^wzhGOn57e(YXci8vwiQrXX^ys4=8hNEy{ zlG-cK&yUyClodGZiP?LtM~2sA{UNm-j7Jh|l*nl1&O)ch2i&h(&t*;Cc#UHQUDKW& zx3rDwNhUJ0N)k=rHOFp5T~Hq@`Osx-4k#nyT}Zd>rDu?s$t%0gQ(O+*2E^C&aP#`> zx~Zkvy*O1!Nhi`JyK$7+BIBs<!zAw6v@=wAZKq#M&_xRH2c}y#GBG}MTAHDEQ3lE& zSv-K2bmnF}%nj`(l2r2Bw_m7R!MM)eU*ALyPZrJ8n!H2a=C$6+_>8fIz7HC8@iOfQ z%Q%0c5png}cf<g=x%JnWU=3r^qU`;fRPt*p_RA2(4`-@_DtKnydbz912qIU&6maK7 zW4nPH-@z!w=D`H%F)=L=E7e&f25NN&Ta2`pdl-SU#K&tBpw?!MgK;vRrtP_9@9!-V zabU=x08~+e8E+7t&PZV4vDmAGp~0e*2lX**IRJpD8NEAPu@cv3QhYt|xmc<E8KnaE zeGYj}Ty?i&WA`)TR=ZIB=$)P2eh9LVzJNK6pxaMbxL{627)R%)q~mUTMFi8=`o_iv z1_z7HYuo-vRz*|QnE`8|r@)MZyGzquB||2jM$)F`FAjL@VIAk)evF-^w<bf&6p7mC zG@(p{+B(TtHfiFDj>+QMvMEl9ucfO3F1$YjZY_b{ZY?Q}hqJ0qgZ^6i?|Up=>jtwK zM7Zzgfb)8;y;NYMLL<v%-yTxJlG#|PC`$?~1ma$d_e9ILcfb33rGIdX_(36D-}oqR z`>%oUJ=XYBQ48hj)$7-<KX_mQz6GiQbz=tat$@(#D=Joj-os&$v||*L0@3_@9~j_} zp2?p0u5!#+?h=cUDR=Rf(1*t^#bHz#@uk^_d1T6U+X+R((fljDmCC>UCrDKBUd5vW zD4=tP^@<cDKpFJS9ymm(IoB43n$AbY(zfK-;-t(jy7{Co0`pXYJc~t{k(%M(P$sos z(gn){^q!)BkLkhi<q^GJygEo$k(PK&W?%o{Aex7RCJz!^g4q_9mq7+2HjPRi?pX=5 z$}66pWiEm<s(Y3<;`RUd{;?Mu1UMg^i7|1*S(jKhG^l_6yuzWDgOU@yz?l-4OJ~lw z#6m>JKu*!U)Rc3&8QK@W^<>L0Fmy0`LBgx)R@x6Up|P$mPSWgh)qMwK9;CZ=kugIN zThl0D^(lp{<Oh_S>|PlAaj*1F&Z}2ZQ55m)2-Sif8TWe2`GgSMo`AhH;#R0<B^0Qs z`@ndK0<xpjKFz%-b=bFJadGgXo3!U(gHhcVgq{T5C|R2@-N*c6p#E&{&R<&mY?JfC zC=dPTA44i+$VLTIsgP~PS+N81Rp<pRt@Pi0kO_LgFY^45w{^*WsT&awE<x1*L=D{^ z-ViA>iZ8V&;j34y<UEgc?ZJG9>i|)Z#OlcU2;#hg0(-ZW;Dv=7aBlEaAp#y)<>5(@ zTIYz)alcJawov&)_VBJJ5Y5uBj!FGv$KIh>TUuUL<s6v2fk-Zido5HWJ&u4|!8yXf z5W#S-sijy2U4`PqWh!~I^XCzwZhHQ_f|?93wSpGF{+AxBJ}|i?_pLvlc;z^aF`8)% z*U5K^v9q$;e|Qkvd)Cxsd&`NUKvY`h9$9D5n3<3ZDArlVly`t)MdhJ-l7mk@llRea zHg<M&LoD!Uv}RWVl{$S!bO*(LD7GyS$UGnbAHd4ompp(Ipqf?H)x#Eai)<2>ptpnt z`)rYQe@_p(jS2ve`iR>&|G{K?-WJUpAB!D^<w;@U$ynf9f(I?s;9>b4UUkz;ECuD- z))XWA0zON1{*e|Y#33(WvQb8Zdc8fb+jAfe5HBG$R;&yaC|xjv&0y=!v7OuYa_7mM zIBj^)m+}#ke-|cpLAMAURrSf^v%i#1?vlFl{U$is=JiU?p0+dZGn}i2oLE(YJ6Fw3 zo2=?0ngG^7oj!%hRA6NRN-U1%@v@hyI;#5kn(QV$DJAuFJ^FBN-Z;iKTooL=54aN3 zLnz@!Rnx=*SjEPJR&J!JbxGFPGa)wiTY}t1u<3YQypvkLaOY&rW?>l7O1nw;`b;w$ zWbDxF^x+08+G{~#bwhZiB`<7uBUn2(vZERn7=J|yu57(A_&C~62-Z*vAWBttZuUOf znot96LqoPT-F`X~H#yRv8{#K3+oP8k76_S#Q#Z9d?CIaWO5AXE|B|0<iBl0MsIBc! zyiy#@XV35)`86`p)9rfW1y;|!#iKc1fhj5L^rVR+H~cwOGQHhOpDoBE+zA&QieRY0 zU{i$_x`F3p!SnPTmG(Zum%EgXE3-TU*#(o$VjA@~O(ri*F$4T*DtR0uB9;v~*co3- z_ha%l>;xyaSCAY&yz};*<w7gd^%1=!_{nhdf%XNI0SpO9Aa4Kup@mRrcxK(6Xw!`O zZ9>(%!`FV?Sa@}dAJ!G7-MPZDxNFxgDjjc3Lx<98I8!KNK}RTdZJ}=ySY%Y47q8PO zE;(1CdUuDF(!_1jd&ZC9eqshhtX++b?TwA$F1tS>Y8B?eS3sX<zdtRnQ1ickKQtoa zM5b8+hqQ?=rM%2-KDquFE~zpaW50+-@vwaJgce$5R_KY>n>BPQSsK@e)0H8&y-z<~ zfhnXl%cpSfB^@gxXhvM{{{DHX)ERCRy1`I{AMngcUq7j?zSj4UV#>leiA!n-3Vcp4 zrPr({28;{RpNIyXHsvnb5=H(YNmS$dpMyVR5D^xh%a@84s3v>rZr?6%&2InsZTWeb z=RD3kTpkYNW4MFeL_Ea<B;6MLP|8D{h@SrayQ7a5yj4mJG?QEt(YB$qWM6mh=&K3M zW~kd)dk+{crTh)4m#d5|uE}h1kSuTNz3f<moEnrysDv)$_TZ1otQ@Mr_@a>|t3PDx zkNOY8IG0mXX{o1gy1c(hd2M}d70?=#rT3#YylSZaxwGZdC-^rBT`8J^@COR}8Qqht z^FBlARamr$a11QoSd16P4_ck7m3K7Wvz;Vfiel$#DGEK@Yl1SL+S{Rh{G@+&gg=z$ z<jI;9s#7ijn>VjdGoDI)FAv)x6lqt7wO=gABkIPsbBaLrUcCa22e|e4v19oDsgM)) z-u_bTlm}w@+iPc=`LUzq&-ILr50+?liSK?_Rb@5O!i|_{;NU9C$_Kf)xCHVv7gh?v z<7#qUco0|Kfz(GTd5A>W!w_Jlxs!nyQn#{@0$|_O*?qKsmZ;1h?DzauOvi732{`QA zx9%u^OiEOKwq%~ifqiFdK9mj6Poqo&ZB=x!*@rTz+>nLbNl{);FIAI^##1~GVT*Xu zhYlq;PYbYRxdkcdBF5pUHTMJPSG7N7>YO-mU|eRcBjM*I3UcN66D@llmzKuW&5#GE zKsJbr8f^Yk$I)kCzeeO*CnnZI+`N6GStc9KCtWzK8GK(&NL~r}X`O~%6<O_cz`N>l zhxhsS_&3h!r!W9U$v3Td4{hfS7nf_|`<yp=5b+RWWbmuIyRA?UZ{jiBDAJ2<`G@KO zr-JVFP#K?Z`O`V5FCKN!g_@XErv3M8R@#G)E<R5^4J2{ddKVHxdVshi)2AEusXfLQ z(qNd*njKxo2=HHs!-DLK^KgN_y81!p6u>^cjimgBFZ`AoQN?ZCGLx5Bb;y!WOza`0 z87A;v6+3dD;dXs>^)8bIObBXa7NCsy`E@ZIey;e&aIu-QnwnSEJ?<43M<f3l<ox_t zDagR*cGVttTN)c5QVN=uFOX5c4-nW%I+4ezP$r1tWyijcPg5%}wxn{<HksRTrt@oi zZbQj9pKI$-Tp?NrNCQqkIk)!W>UoSt$gB(_`7Wg6I=%!zvG>~JcP2{8iN=y9XLz1# zL{{`@iV1UPzg}StuWiLLE_-}$(cj=IxEJW>AbELoq;;*r_iD?&2ro)t#L$N0jGxT5 z2VMoH24hA0x;@UOUUQNuKsEr3C6j<qmgf&7WZ9#>frh7mEFdwFIhxL1Fvp8h(4tP< zClvSbW5dNS@t$@&$w!*<OuE@scjp-{M%RV^ly;eUk(5;4+S>o4S_ka^3s0FeK>LX7 zNBP{c%?T!Yol~bcCaZ3!Rn^u$fA%bF&s>5^&J3jhGqh7E@dcnruH0)K7PcGaRUp?> zKjKN5D||g=+!p57R|6GDCnv7RT>J464rqYxd1s_EJ5%0iX?zI}t!4}|)6s2+FPrFl zNR3-T=fV$1Oai}sdxJ}dPkm3Aulr$5xF(U1%j6~Hu`e$(CgZw?@_FgL7XQcM-dLa5 z<3T}_Z!s(yDfwL*0V5+>_|R)J%_+c9-hYtM>S11EKup9*HQQV{L7M{y!+DP?lkBy% zrXC>A-aW#qeU_8R*Tk2b3Jf&sOE&31G2u#nrA(cTGBN6mJ@yd3rM&#@vUQJ$%AG`_ z4Vpk0ktor1&N)Rgp9iWoF+J^g{W{8<u)1;hqN9}5vXyHa1u)$GJIrdw@9ilC66s7& zx^w6J%*;?*Jts@=UE~0O35gWoMl{gH&n*%M$F$s5)@Po*EG{OlA_SYYe7)tUWZ`)Z zl&bG``k1IFj`1$1)Cbaz^JTK<c&2sWmAiXaMa1<?$4r(#hK^j9le?8|6U`97OX5Z@ zypn6Og`g(AkjCXNfDz))^7EmDuCJ?OTaUdgXJ$}~tmvY#DL65wx-Z7RYkxmAip|aJ z6(f;)BPAV_w41by;FLs33ZO3`i<20p(hsh9k8x)94#tOr!^1&{4Yp~wdvz-C#^$uT zTL-M=&xv#!$f}8deQK`i%{@Ieg;GVvyha!uI!%j$MHF()(CVWJhXMp+VKvHfze8XI z*(l6nvoH<MPMF42y4BVdXGY<W2AKip;iR{&Zl+{8o0R98A>OgnQREObB@uuf&O}Ib zrWdZdX=@9v3h?uXQflKI3kit{3d+1D9WAylZ>Aiud+tZsR{agpN%EwKrm)6PN{m`4 zDKTnJYXh{Eys=^JN^M2jo($*%WkI=oc-RLUn{JiA!!9#=VNqP>v*&r$mhS2{L#qlI z5s*mwGZ}-8CV=|iP4)A_@c@!z`+)u<F$WaT$i#HIeD?I|%qKiyMPv%zdfR4$UPMX% zU6g)rM$)ndX;a&&{+<I{T<6zfgMyl#U-o<aYkft&4DSy&f>XC+!81E;&gI&`!`7nG zk$KrRpIbhE`^JxGN$AO^+T2E3hS3%Sa-d&|LOvO;r6FKCXgjd^K`~aJ92g(hAnini z+S=;Y%JpAgoNiK5?HMxROr+-gcA%>NT4rWk`{Q8A{vz!Ygzu!Vu%#jQ<xKF!`wSw` zE_$x7l|;F|P19G4!D(JvDm^=AMMC0ieR)WXh2=J-;5k{(NqQZiQW#{&%9^L+^g%ON z2w7PEo?88-eSo2;iOZM0^w6P0H|w2XasV0!6;#&5w>O~G@d$C5-SvAR&krNxN`Lqw z5Jc2!c`rLvkWiqf2Rg0jh7_Jnd~9lz8daZO%XUVby_(`8!W&1z3U{%VwzsXt&$E2I zGef1JpPrT`xbq0uLs=6O878I#7?FUFwUk5IMk#;$4rUa8-rh)B^HnW$UX_i?echd_ zgcT|ZG_)2ME@+OwEPVECtgZe-=c3H95C)^s)@;raA3Rye5;B-BcRqD|e=o9k9ku;Q zQs)(M5Bx9Bm3+B=Hwd<L^6sR<XM)Wx!Ow4GVRJ`Ki`fhALB-?7mjMete7KYO2L$@P zrp)(z&oY_^+#&~ABd_3#%F_!pxX&_uq&<s~m%*0%6azvJ)NIk(AeF;1EIPQ9MVaQz ztk$$>z_#t%KQ=d?7b?CCX9=>6P0h>%FL&*mvp*y(-g4~ZN{uY(<ox)-*hh=spXR9T z;mP@&`B3R`%->+Z1X%({E_FNZBe3mAh=Q}b-fk2Xec5{Ht=j$v^g?IcoRJ6KQ*i<z z)xa2ex++fD{4nQ}ky(eW9b?aM?uZ;ZM7gfSL<t)8;fFp{hiA>Atggb<0LmXKjbP4o zw!FSvJa*6(fb22FZwTNvaNQ8~^Hx?1m^j78Q5xpa{|kB!^!5@?V|?~^D?c;m$y|AJ zbIrt~a|%BSUck_Kqtpkbnq2qpy|%Np-M3p*TPhA*B0P9(>tF8F_>>!q!1RsN!hNwn zoWQsD4>Lj7@v*JVV`eDd!G(n6%rCWtl^@m3SWNRnyIx>O74BrXj?h#7>J;Jv;SRz{ zHwqe7b4$zO;$ncHvumq+K)~+Y>11ii*_tL_f&=2pm3UM;q~1v=$H1Syc=;03mF}v| zqbWNIKoAUwxyNUyiy#ufY(p4OevNm>*7hGXejO6kp>y`EE0AtDrxq7C%dCmZ^#+u! zK2y<|q#^f)z;R~cO1$VLYg}>)3L6Ck@&w9kl}n~WacV&gxfghqR&qHAYS5?HSlzFk zi9wUZBQF|xUR70<m1S)+%7JSEP@zTHEWi{+MZ?9hVmowbFCDn0Fpi+AY6xa<tLFEP zcqm?hcoTSHgxCj&JC0ctI&RYI_)$}*_CVaUTl7=y=ocufUGBEvt^*x`S~uw#*Lbm@ zlTJ|vf?>z%A`1{`VVG~$3D_R^BkET?PsIA~<hd0eKMrlig99?^C1yQf;Gl0pW&^Ta zLFgkp4!|JP`324fhWkMu;_m-n)t!4d)cGFAwJN2{acyJMM6}sc9f_UT!lOv1R7mJl zQ=1SHq9TLSt}dr`6YUf#*AUM!sg*99>EcACXpK=l((b0*3Wo+wtIlg4e{ARP^VgX_ z{4w)9^Ze%L`}=%9-_QHDF#h*S%ERp0pRr1u%=LzpjUsD7Vu07`nbcEt4TDUA%ZsjH zk>~D9FFY<zJ_o;fE}ARn1E)`yptRv`|FfU~+_fz3t#tgr<GHPi1Jq?Yi87s3y6xdj zNV|4K3bnLA3cA}g@|NL2H^a3`_fz)XK0ZRs;gNcYL=;*D13&8K;Ja>dXvI{cm}@Ks zC_sc|4|YmV8Q<{~?|8k|KRi6VJj?-?61FjXkZ6t61OH0-s2Z)~;%#Qqn?+@+1M-?X z6Nfv93CCd7&?}iw3VW&w1nql2lpsSe(Ow^j^DJrXh`~4m;)08uR}k7|`ZDq|7OO!I zb4HowaZN1Ggn=%TMJl|f2<3?r%Tj&gam@oNg`0w7lQBa??lV&(EWD}Bcrcggn8g?& zmOy~!&Mdj9EJSUHzz)W^l&AOFwW}SSor16W|0I^m5X7TOGEu_3V$hb-=n}(*4sJAV z<P2shN7JrXRb|w+imsSH|2zEi$y4KF@S{XqmalIU7HS8zNzZcEtHI)|ET`$eeqApJ z+Pc+_Cdk<>*Y)MkX}B$d2n&@7XTE<=1xCQ5KcxwDs2#Eti;t^S;}mSV9D?BR=BAX+ zO4Huc0L*F^yxMogiU-N2*-(?$mxpazEkA{d8On2eM+fvRwAiIgfxDY!XX-=D<r+O( z3mLjQSKt0F<LCPNcl_K6@g8S44%84-D94h_51IB^=g(u?Cz|1|D&4b7M!z=3ltVV% zr!cZ*jN$2aP8R9&0-G^|fs^>^_0u18Qj(LcLKG(%xXyL#DJm#Xi{I&iGlW}YYc^FU z-{9hMztsKgT{z?VDCxo@RfIDT_ljGL>QMUY;18VE$+@HtRQB~*e29@mDGEKNlY-D@ z!_v>>BPfzu<J&%9YuPaZoIL(5{088^%a`WsJ1;iV&8SkEL#3I+&6+=dx4h5_pQ5E> zhs^%L-Gb>}w{j`QDQrnf*krv5$%#RGN14+!tL&*q^N91@1r-Jt#~P_Bx!L`PTpH1f zRQz9lap0J1@hvk_sow=j{CW%Tgl82dE(I7=xg$G1aztpW@jEVHObbv;p4}5=bjm^O ziZGMfEPvGo=BF-S3w-n*85lad(Fp@ngREg{Y@xUwH~fs6>YNy<HDIddEb$%m+>rFT zs1`M;IWud9+o&Xi(;&W};AdvI%%o2%AG`0*dPlv38VvOH=lNG}RO$Jk`!tLW<cKG5 zI42g=vKyJ0$T}LO+c{iof10V162yh$gjfD@_UrvBL&R^zk1w=B!SYyO)OTZxUxw9c z-!eZzL**ZjBS*V|u9O`jw14QnXW6SNK+gdyV&4LFD@xW^^_E@Tx%0koo2qtkEM@Lh zLvbK1&$LWqa&KOPIY6=+ggJR>=j$tA?BaK$*)}|+htCj<w*Km*w38=2>pfD^N&$Z@ zmPtHo1L|bw>0!7{Y^lEeIT*(6gpAIaRu=I*0P~xuy_J=XwB)5wMUd6j*hcZp=j0F? z9b)ZxEy@xX(HkR1JVnQc>xSR+&iyvFZ|>zg*45M;PM18scW+tj1bWOjbyCkIGPF9q zEtXWQp8l>U=U*f=tB$9ps_|gjzU<8F0e;qo{Y4(Nk*h=qUDWP}<<H`=MR6~X?P%>H zN3(F(cT4lMhzx*&5*(8X?+V|6B}+b^H_xkC^AfTLm_OjcEXR)R52;8nPVp8I3Vnvk zbe&1DCM%xa5#k*Yw;}Uld;90`*#_^szlNhce;fB6B&)LfbiG26-@H)mw&*ymaMr~A zo3}LhibNl1LIe)}2Wo{Facm>eZR5u4$-)UK<rzf}6^bzU^4{JJd_iHU(cSDtS~U8u zhsUJuu8@3D%2r~X;bkmmnuDzrR_Hz5vVlAI@)l?x(l+(Sm<_tw6nmQ=v$9qNB)>2T z+voPhtkE2-i`NW&8PhB0@RmOA)XkICvz$Zs-geL&A2?-EC=RSVfKT&MZ^yZ$_yjeO zm>d9VURWrvHY)Hd^U8T-Wo=EsuLs-FiWP`h9e2E3y{>8czbz*jOl=ySCy~A#-T~^I zA}+6EzOAV#K6(J^OXC}T18rDV{C*(KW5<0Ez?DvMDNcHzg;fKS-lJ~E;Jf5*k0{bt z<_+u{de|Cy**)DCS{8;;v?;|GJoas{h11j4c0wZg>%jfq-3u@?#G#+GJ!nBm?ISeY zW;-gEVUnROn24o=M~s!{TCQ_b_6(^QmZq}x>!R@P#bzF^uKV8fvQlx5v@M^bcd%vQ z5zZ-TjCn&MlDY8!#miB{`XYwdgq0~iI_;)5_a(kbg}atj*O+T2x%>-DBqoGlyU9L3 z8BHu-P_}No{LaA|v%DL{T75=UI)6)QwPef9t}C)+EqDp*<8E@9ZK88bH8>bO8{HxL zw)2Q;$NAy(11B-D0Je_~7F5s}s$y1N+%5e?uG7CnG}9nIKYy!#?)YoLaC=Y={kDuj z5W=jMh11BB*GSa4>78JxkvVqr=3F*Pl(efFjn3*aN<`-lJY*O7V@cm9#(i5qeG-ec zB}+we#pN5Mxi(=<lbx$Sx4U6G{Qpw_mFq|M$p7M`sZ=SU^C}e4b8NOhI=5=vAy))l zv;{*5PxbXhjgh09Wh*h}jE=n$(3PPXkr|x5WlgIE&b}dN;Ar<K*VM~6hi7-r666#S z^+ueuy;>dh!z)oGeejjQ*nXsrM%K$9TRf^ua1su+4fb!&UIYgFT&>kO8@;pZ)r*cN z`B_=eW^U0%)eqKO*H#;{K`M=Y|0HzKUmkNXXTvkxDweyCVxhq3$jck3`hKVnNcizj z5_Qm^`qgpSzB?|cO~*+iG5uBqF~Xe~-GBT_T-#G3`uGiv|0UewzrN`ISYYw-?{NBN aAi;gasNaHhhmzIrFLhb5xWswm-v0pRK@t7{ From 0e18839024e67211958a2513e869a2794c6bbf51 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Mon, 6 Jan 2025 23:30:14 +0900 Subject: [PATCH 87/99] fix: dict, not list --- dzgui.sh | 2 +- helpers/ui.py | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index e9e2a12..634ba86 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -584,7 +584,7 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="a2f9134c9b415a2be1d54a7e91065ee0" + ["ui.py"]="d3ad9153d8599bea0eede9fd3121ee8e" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" ["funcs"]="b928622aa16e966a5098df02bce6dc3b" diff --git a/helpers/ui.py b/helpers/ui.py index 02fe315..c9aea79 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -2445,10 +2445,10 @@ class ModSelectionPanel(Gtk.Box): self.set_orientation(Gtk.Orientation.VERTICAL) labels = [ - ["label": "Select all", "tooltip": "Bulk selects all mods"], - ["label": "Unselect all", "tooltip": "Bulk unselects all mods"], - ["label": "Delete selected", "tooltip": "Deletes selected mods from the system"], - ["label": "Highlight stale", "tooltip": "Shows locally-installed mods\nwhich are not used by any server\nin your Saved Servers"] + {"label": "Select all", "tooltip": "Bulk selects all mods"}, + {"label": "Unselect all", "tooltip": "Bulk unselects all mods"}, + {"label": "Delete selected", "tooltip": "Deletes selected mods from the system"}, + {"label": "Highlight stale", "tooltip": "Shows locally-installed mods\nwhich are not used by any server\nin your Saved Servers"} ] self.active_button = None From 54a7c7976cd8b9a65da075c85c20238fec0960c8 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 7 Jan 2025 00:33:58 +0900 Subject: [PATCH 88/99] change: update URL --- dzgui.sh | 2 +- helpers/funcs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index 634ba86..4baa2ae 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -587,7 +587,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="d3ad9153d8599bea0eede9fd3121ee8e" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="b928622aa16e966a5098df02bce6dc3b" + ["funcs"]="5624b1e44a43c318775caa5d0ceef1f0" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index b669fc5..9260e78 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -78,7 +78,7 @@ url_prefix="https://raw.githubusercontent.com/$author/$repo" stable_url="$url_prefix/dzgui" testing_url="$url_prefix/testing" releases_url="$gh_prefix/$author/$repo/releases/download/browser" -help_url="https://$author.github.io/dzgui/dzgui" +help_url="https://$author.github.io/dzgui/index" help_url2="https://$author.codeberg.page" forum_url="https://old.reddit.com/r/dzgui" sponsor_url="$gh_prefix/sponsors/$author" From 83fb021aa927f83478a947e33499ffb9cbac2660 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 7 Jan 2025 00:44:20 +0900 Subject: [PATCH 89/99] docs: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e175b50..df3358e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ - Update README.md - Update IP database to 2025-01 - Reduce IP database size by 50% +- Update documentation to 5.6.x standard ### Dropped - Removed temporary mod ID output in debug logs - Removed Hall of Fame section from button links, moved inside documentation From 4df12605fcfd9add485ce7d90dc3ae0b5ac03a7d Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 7 Jan 2025 00:55:58 +0900 Subject: [PATCH 90/99] chore: update changelog --- CHANGELOG.md | 210 ++++++++++++++------------------------------------- dzgui.sh | 2 +- 2 files changed, 58 insertions(+), 154 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index df3358e..30bbeea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,197 +1,101 @@ # Changelog -## [5.6.0-beta.21] 2024-01-06 +## [5.6.0] 2024-01-06 ### Added -- Add in-app documentation link to Codeberg mirror +- Application header bar and controls +- Menu context subtitle in header bar +- Bulk delete mods (via 'List installed mods' list). Not compatible with Manual Mod install mode +- Highlight stale mods in mods list +- Added --steam launch parameter +- Open Steam workshop subscriptions dialog when switching from Manual to Auto mode - Hover tooltips to most buttons +- Add in-app documentation link to Codeberg mirror +- Additional logging ### Fixed -- Prevent ArrowUp/ArrowDown input when inside keyword field +- Avoid sudo escalation if system map count is sufficient (jiriks74) +- Duplicate dialog title on Steam Deck +- Resolve remote IP when saving records for game servers with multiple hosts +- More performant symlink traversal when checking for legacy links +- Only iterate on missing symlinks at boot (400% performance uplift) +- Fix for server list truncation causing some servers to not appear in results +- Empty dialog popups if user manually deletes local mods while application is running +- Update statusbar when removing servers from list/repopulating +- Abort DayZ path discovery if Steam files are not synched +- Race condition when checking for installed mods +- Favorite server message not updating correctly +- Improved handling for cases where there are no locally installed mods +- Set up mod symlinks at boot, rather than only on server connect +- Prevent context menus from opening when table is empty +- When reloading table in-place, prevent duplicate panel elements from being added if already present +- Clean up local mod signatures from versions file when deleting mods +- Focus first row when opening mods list ### Changed +- Redact usernames in log files +- Prevent ArrowUp/ArrowDown input when inside keyword field +- Admonish user to restart Steam in error dialog if DayZ path could not be found +- Refactor control flow for more robust contextual parsing +- Stop sending modal dialog hints to outer window +- Clean up signal emission +- Clarify some error messages and normalize text formatting - Update forum URL -- Reword Help section links to include destination - Update README.md - Update IP database to 2025-01 - Reduce IP database size by 50% - Update documentation to 5.6.x standard ### Dropped -- Removed temporary mod ID output in debug logs -- Removed Hall of Fame section from button links, moved inside documentation +- Removed Hall of Fame section from button links, to be moved inside documentation - Remove unused imports -## [5.6.0-beta.20] 2024-12-23 -### Added -- Output real and resolved mod ids to logs (temporary) -- Added -steam launch parameter -### Fixed -- Only iterate on missing symlinks -- Move logging up - -## [5.6.0-beta.19] 2024-12-18 -### Added -- Redact usernames in log files -### Fixed -- More performant symlink traversal when checking for legacy links - -## [5.6.0-beta.18] 2024-12-14 -### Added -- Open Steam workshop subscriptions dialog -- Additional logging -### Fixed -- Empty dialog popups if user manually deletes local mods while application is running -- Abort DayZ path discovery if VDF if Steam files are not synched -- Avoid sudo escalation if system map count is sufficient (jiriks74) -### Changed -- Admonish user to restart Steam in error dialog if DayZ path could not be found - -## [5.6.0-beta.17] 2024-12-14 -### Added -- Additional logging - -## [5.6.0-beta.16] 2024-12-13 +## [5.5.3] 2024-12-13 ### Fixed - Add remote resource health checks before downloading updates ### Added - Add fallback repository -## [5.6.0-beta.11] 2024-12-07 +## [5.5.1] 2024-12-03 ### Fixed -- Add missing function definition +- Support localized decimal separators when parsing installed mod sizes -## [5.6.0-beta.10] 2024-12-04 -### Fixed -- Untoggle highlight button when repopulating mod list -- Resolve remote IP when saving records for game servers with multiple hosts -- Update statusbar when removing servers from list/repopulating -### Added: -- "Select stale" button to bulk select mods marked as obsolete - -## [5.6.0-beta.9] 2024-12-03 -### Fixed -- Normalize user locale when parsing floats - -## [5.6.0-beta.8] 2024-11-28 -### Fixed -- Normalize user locale when parsing floats - -## [5.6.0-beta.7] 2024-11-28 -### Changed -- Add additional logging when fetching installed mods - -## [5.6.0-beta.6] 2024-11-28 -### Fixed -- Race condition when checking for installed mods - -## [5.6.0-beta.5] 2024-11-21 -### Added -- Highlight stale mods in mods list -### Fixed -- Duplicate dialog title on Steam Deck - -## [5.6.0-beta.4] 2024-11-20 -### Added -- Application header bar and controls -- Menu context subtitle in header bar -### Changed -- Refactor control flow for more robust contextual parsing -- Stop sending modal dialog hints to outer window -### Fixed -- Favorite server message not updating correctly - -## [5.6.0-beta.3] 2024-11-18 -### Fixed -- Improved handling for cases where there are no locally installed mods -- Set up mod symlinks at boot, rather than only on server connect -- Prevent context menus from opening when table is empty -- When reloading table in-place, prevent duplicate panel elements from being added if already present -- Clean up signal emission - -## [5.6.0-beta.2] 2024-11-15 -### Fixed -- Clean up local mod signatures from versions file when deleting mods - -## [5.6.0-beta.1] 2024-11-12 -### Added -- Bulk delete mods (via 'List installed mods' list). Not compatible with Manual Mod install mode -### Fixed -- Fix for server list truncation causing some servers to not appear in results -- Suppress signal emission when switching menu contexts -- Focus first row when opening mods list -### Changed -- Clarify some error messages and normalize text formatting - -## [5.5.0-beta.5] 2024-11-03 -### Changed -- Use updated A2S_RULES logic -### Fixed -- Servers in saved servers list would populate context menu with same option when right-clicking in server browser - -## [5.5.0-beta.4] 2024-10-31 -### Added -- Expose a toggle setting for whether to launch the application in fullscreen -### Fixed -- Enable adding/removing servers to/from My Saved Servers when in Recent Servers context - -## [5.5.0-beta.3] 2024-10-31 -### Fixed -- Prevent maps combobox from duplicating contents - -## [5.5.0-beta.2] 2024-10-31 -### Fixed -- Restore keyboard input to keyword entry field - -## [5.5.0-beta.1] 2024-10-30 +## [5.5.0] 2024-11-10 ### Added - Support servers running DLC content (fixes Frostline servers) -- Text autocompletion in maps search field -- Add disk space warning to popup dialog +- Expose a toggle setting for whether to launch the application in fullscreen +- Text autocompletion in maps search field (partial search) +- Add disk space warning to popup dialog when downloading mods ### Fixed +- Servers in saved servers list would populate context menu with same option when right-clicking in server browser +- Enable adding/removing servers to/from My Saved Servers when in Recent Servers context +- Prevent maps combobox from duplicating contents +- Restore keyboard input to keyword entry field +### Changed - Abort fallback query method if DLC is required -## [5.4.2-beta.1] 2024-10-05 +## [5.4.2] 2024-10-05 ### Fixed - Sanitize third-party API IDs to remove UGC collisions -## [5.4.1-beta.2] 2024-09-12 -### Fixed -- Use fallback logic for modlist queries when user traverses networks - -## [5.4.1-beta.2] 2024-09-10 -### Fixed -- Fix signal handling control flow for checkbox toggles - -## [5.4.1-beta.1] 2024-09-10 +## [5.4.1] 2024-09-25 ### Added - Pre-boot validation check for users with self-compiled version of jq ### Fixed +- Use fallback logic for modlist queries when user traverses networks +- Fix signal handling control flow for checkbox toggles - When reloading the server browser, the map combobox selection would revert to the last selected map instead of All Maps - Server filter toggle signals were accessible from the main menu when switching between menu contexts - Global cooldown dialog could sometimes block filter toggles after cooldown reset - Normalized minor version number due to a previous clerical error -## [5.4.0-beta.5] 2024-08-27 -### Added -- Freedesktop application icons for system taskbar, tray, and other dialogs -### Fixed -- Errors being printed to the console when Exit button was explicitly clicked - -## [5.4.0-beta.4] 2024-08-21 -### Added -- Emit CPU model name when exporting system debug log -### Fixed -- Detect Steam Deck OLED APU variant during initial setup - -## [5.4.0-beta.3] 2024-08-04 +## [5.4.0] 2024-08-27 ### Added - Scan local area network for DayZ servers - -## [5.4.0-beta.2] 2024-08-03 -### Fixed -- Clerical hotfix for previous player names fix -- Test if DayZ directory is empty at startup, implying that the game was moved to a new library collection - -## [5.4.0-beta.1] 2024-07-16 +- Freedesktop application icons for system taskbar, tray, and other dialogs +- Emit CPU model name when exporting system debug log ### Fixed +- Errors being printed to the console when Exit button was explicitly clicked +- Detect Steam Deck OLED APU variant during initial setup - Encapsulate player names correctly so that names with whitespace in them are supported +- Test if DayZ directory is empty at startup, implying that the game was moved to a new library collection +- Report WM_CLASS name to the window manager ## [5.3.2] 2024-07-02 ### Fixed diff --git a/dzgui.sh b/dzgui.sh index 4baa2ae..d6b5000 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0-beta.21 +version=5.6.0 #CONSTANTS aid=221100 From 07606d88523c520370508c8164b0a9d6e3530b19 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:51:57 +0900 Subject: [PATCH 91/99] docs: update changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30bbeea..3956403 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,8 +43,8 @@ - Reduce IP database size by 50% - Update documentation to 5.6.x standard ### Dropped -- Removed Hall of Fame section from button links, to be moved inside documentation -- Remove unused imports +- Hall of Fame section from button links, to be moved inside documentation +- Unused imports ## [5.5.3] 2024-12-13 ### Fixed From a070e9fc655119b563ef859df5000072bb16120b Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 7 Jan 2025 20:54:03 +0900 Subject: [PATCH 92/99] chore: drop unused log file --- dzgui.sh | 2 +- helpers/funcs | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index d6b5000..d7def32 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -587,7 +587,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="d3ad9153d8599bea0eede9fd3121ee8e" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="5624b1e44a43c318775caa5d0ceef1f0" + ["funcs"]="baa2c9c93edacb98384ae9f319e3b27f" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 9260e78..b23c1f2 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -30,7 +30,6 @@ log_path="$state_path/logs" debug_log="$log_path/DZGUI_DEBUG.log" system_log="$log_path/DZGUI_SYSTEM.log" mod_log="$log_path/DZGUI_MODIDS.log" -meta_log="$log_path/DZGUI_META.log" #STATE FILES history_file="$state_path/$prefix.history" From c8f7a32284a87226c7da8ae506c7ec7cd4d98653 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Tue, 7 Jan 2025 21:39:16 +0900 Subject: [PATCH 93/99] chore: update db checksum --- dzgui.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dzgui.sh b/dzgui.sh index d7def32..e0298ad 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -636,7 +636,7 @@ fetch_helpers_by_sum(){ } fetch_geo_file(){ # for binary releases - local geo_sum="7b6668eb4535bb432acb42016ba9cc47" + local geo_sum="28ccd75b3e03cf07a7011f22ef0cd69b" local km_sum="b038fdb8f655798207bd28de3a004706" local gzip="$helpers_path/ips.csv.gz" if [[ ! -f $geo_file ]] || [[ $(get_hash $geo_file) != $geo_sum ]]; then From 34e7b2e4809692417d16d8632bd6ddd2e861428a Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 10 Jan 2025 22:45:25 +0900 Subject: [PATCH 94/99] fix: jq 1.6 support --- dzgui.sh | 11 +++++++---- helpers/funcs | 15 ++++++++++----- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/dzgui.sh b/dzgui.sh index e0298ad..43af009 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.0 +version=5.6.1 #CONSTANTS aid=221100 @@ -76,6 +76,9 @@ set_im_module(){ return fi } +redact(){ + sed 's@\(/home/\)[^/]*@\1REDACTED@g' +} logger(){ local date="$(date "+%F %T,%3N")" local tag="$1" @@ -83,8 +86,8 @@ logger(){ local self="${BASH_SOURCE[0]}" local caller="${FUNCNAME[1]}" local line="${BASH_LINENO[0]}" - self="$(<<< "$self" sed 's@\(/[^/]*/\)\([^/]*\)\(.*\)@\1REDACTED\3@g')" - printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" >> "$debug_log" + printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" \ + | redact >> "$debug_log" } setup_dirs(){ for dir in "$state_path" "$cache_path" "$share_path" "$helpers_path" "$freedesktop_path" "$config_path" "$log_path"; do @@ -587,7 +590,7 @@ fetch_helpers_by_sum(){ ["ui.py"]="d3ad9153d8599bea0eede9fd3121ee8e" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="baa2c9c93edacb98384ae9f319e3b27f" + ["funcs"]="6a1c7ce585d9b76e2e75dba9d4295f8d" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index b23c1f2..0c227c3 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -447,7 +447,9 @@ get_remote_servers(){ _fetch "${params[$i]}" > $_cache_temp.${i} done - jq -n '[ [inputs]|add ].[]' $_cache_temp.* && rm $_cache_temp.* + # ubuntu variants do not support jq 1.7 chained operators + # https://github.com/jqlang/jq/releases/tag/jq-1.7 + jq -n '[ [inputs]|add ][]' $_cache_temp.* && rm $_cache_temp.* } get_unique_maps(){ shift @@ -735,6 +737,9 @@ dump_servers(){ logger INFO "Server context is '$subcontext', reading from file '$file'" filter_servers "$file" "$@" } +redact(){ + sed 's@\(/home/\)[^/]*@\1REDACTED@g' +} logger(){ local date="$(date "+%F %T,%3N")" local tag="$1" @@ -742,8 +747,8 @@ logger(){ local self="${BASH_SOURCE[0]}" local caller="${FUNCNAME[1]}" local line="${BASH_LINENO[0]}" - self="$(<<< "$self" sed 's@\(/[^/]*/\)\([^/]*\)\(.*\)@\1REDACTED\3@g')" - printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" >> "$debug_log" + printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" \ + | redact >> "$debug_log" } test_ping(){ shift @@ -1243,8 +1248,8 @@ symlinks(){ done } - readarray -t mods < <(find $workshop_dir -mindepth 1 -name meta.cpp | awk -F/ 'NF=NF-1{print $NF}') - readarray -t links < <(find $game_dir -type l) + readarray -t mods < <(find "$workshop_dir" -mindepth 1 -name meta.cpp | awk -F/ 'NF=NF-1{print $NF}') + readarray -t links < <(find "$game_dir" -maxdepth 1 -type l) if [[ ${#mods[@]} -eq 0 ]]; then logger INFO "No mods present, aborting" From 2ab2e237362ad4b214dd8a86bc6a7a193c6aaf8a Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Fri, 10 Jan 2025 22:45:56 +0900 Subject: [PATCH 95/99] docs: update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6189481..553e72e 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ Refer to the documentation for installation and setup instructions: - [GitHub](https://aclist.github.io/dzgui/dzgui.html) - [Mirror (Codeberg)](https://aclist.codeberg.page) +  ## Attribution From 759327e932a331d50d89391bdbf42856ae71b815 Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Thu, 23 Jan 2025 12:02:27 +0900 Subject: [PATCH 96/99] chore: prepare release --- CHANGELOG.md | 8 ++++++++ dzgui.sh | 6 +++--- helpers/funcs | 28 ++++++++++++++++++++++++++++ helpers/ui.py | 10 ++++++++++ 4 files changed, 49 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3956403..b3da467 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [5.6.2] 2024-01-22 +### Fixed +- Resolve regression introduced with IP resolution feature in 5.6.0 (restores functionality of right-click action: Add to My Servers) + +## [5.6.1] 2024-01-10 +### Fixed +- Add fallback support for jq 1.6 + ## [5.6.0] 2024-01-06 ### Added - Application header bar and controls diff --git a/dzgui.sh b/dzgui.sh index 43af009..dcd64af 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.1 +version=5.6.2 #CONSTANTS aid=221100 @@ -587,10 +587,10 @@ fetch_helpers_by_sum(){ [[ -f "$config_file" ]] && source "$config_file" declare -A sums sums=( - ["ui.py"]="d3ad9153d8599bea0eede9fd3121ee8e" + ["ui.py"]="5a876efacf208d12b5fe761996425412" ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="6a1c7ce585d9b76e2e75dba9d4295f8d" + ["funcs"]="417bd5eaffbefc905a843985c691dc64" ["lan"]="c62e84ddd1457b71a85ad21da662b9af" ) local author="aclist" diff --git a/helpers/funcs b/helpers/funcs index 0c227c3..c747c82 100755 --- a/helpers/funcs +++ b/helpers/funcs @@ -130,6 +130,7 @@ declare -A funcs=( ["Remove from my servers"]="update_favs_from_table" ["Remove from history"]="remove_from_history" ["Force update local mods"]="force_update" +["Resolve IP"]="resolve_ip" ["Handshake"]="final_handshake" ["get_player_count"]="get_player_count" ["lan_scan"]="lan_scan" @@ -161,6 +162,33 @@ find_stale_mods(){ printf "" return 99 } +resolve_ip(){ + shift + local res + local record="$1" + local ip=$(<<< "$record" awk -F: '{print $1}') + local qport=$(<<< "$record" awk -F: '{print $3}') + res=$(a2s $ip $qport info) + if [[ ! $? -eq 0 ]]; then + printf "Server timed out \n" + return 1 + fi + local gport=$(<<< "$res" jq -r '.[].gameport') + if [[ -z $gport ]]; then + printf "Failed to resolve server metadata\n" + return 1 + fi + + # incoming input can only be 'remove' or 'add' + # record is in favs => implies deletion + # record not in favs => implies addition + resolved_record="$ip:$gport:$qport" + if [[ ${ip_list[*]} =~ $resolved_record ]]; then + remove_from_favs "$resolved_record" + else + add_to_favs "$resolved_record" + fi +} get_player_count(){ shift local res diff --git a/helpers/ui.py b/helpers/ui.py index c9aea79..ae28ede 100644 --- a/helpers/ui.py +++ b/helpers/ui.py @@ -1814,10 +1814,16 @@ class TreeView(Gtk.TreeView): def format_metadata(row_sel): + # this function is recycled for the add by ip/id methods + + # the right-click context menu (add/remove servers) + # in the latter case, there is no metadata to update + # see grid.update_statusbar(), so the returned row is None + row = None for i in RowType: if i.dict["label"] == row_sel: row = i prefix = i.dict["tooltip"] + break vals = { "branch": config_vals[0], "debug": config_vals[1], @@ -1827,6 +1833,8 @@ def format_metadata(row_sel): "preferred_client": config_vals[5], "fullscreen": config_vals[6] } + if row is None: + return None try: alt = row.dict["alt"] default = row.dict["default"] @@ -2396,6 +2404,8 @@ class Grid(Gtk.Grid): return True def update_statusbar(self, string): + if string is None: + return meta = self.bar.get_context_id("Statusbar") self.bar.push(meta, string) From 8aea4af68717d6e81f15cd73812bc8f376e195ba Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 9 Feb 2025 18:55:33 +0900 Subject: [PATCH 97/99] chore: update IP db --- CHANGELOG.md | 4 + dzgui.sh | 4 +- dzgui.sh.old | 1024 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1030 insertions(+), 2 deletions(-) create mode 100755 dzgui.sh.old diff --git a/CHANGELOG.md b/CHANGELOG.md index b3da467..676d7f1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## [5.6.6] 2024-02-09 +### Changed +- Update IP database records for 2025-02 + ## [5.6.2] 2024-01-22 ### Fixed - Resolve regression introduced with IP resolution feature in 5.6.0 (restores functionality of right-click action: Add to My Servers) diff --git a/dzgui.sh b/dzgui.sh index dcd64af..ae93854 100755 --- a/dzgui.sh +++ b/dzgui.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -o pipefail -version=5.6.2 +version=5.6.3 #CONSTANTS aid=221100 @@ -639,7 +639,7 @@ fetch_helpers_by_sum(){ } fetch_geo_file(){ # for binary releases - local geo_sum="28ccd75b3e03cf07a7011f22ef0cd69b" + local geo_sum="9824e9b9a75a4830a2423932cc188b06" local km_sum="b038fdb8f655798207bd28de3a004706" local gzip="$helpers_path/ips.csv.gz" if [[ ! -f $geo_file ]] || [[ $(get_hash $geo_file) != $geo_sum ]]; then diff --git a/dzgui.sh.old b/dzgui.sh.old new file mode 100755 index 0000000..65b151b --- /dev/null +++ b/dzgui.sh.old @@ -0,0 +1,1024 @@ +#!/usr/bin/env bash +set -o pipefail + +version=5.7.0-beta.5 + +#CONSTANTS +aid=221100 +game="dayz" +app_name="dzgui" +app_name_upper="DZGUI" +workshop="steam://url/CommunityFilePage/" +sd_res="--width=1280 --height=800" +steamsafe_zenity="/usr/bin/zenity" +zenity_flags=("--width=500" "--title=DZGUI") +declare -A deps +deps=([awk]="5.1.1" [curl]="7.80.0" [jq]="1.6" [tr]="9.0" [$steamsafe_zenity]="3.44.1") + +#CONFIG +config_path="$HOME/.config/dztui" +config_file="$config_path/dztuirc" + +#PATHS +state_path="$HOME/.local/state/$app_name" +cache_path="$HOME/.cache/$app_name" +share_path="$HOME/.local/share/$app_name" +script_path="$share_path/dzgui.sh" +helpers_path="$share_path/helpers" + +#LOGS +log_path="$state_path/logs" +debug_log="$log_path/DZGUI_DEBUG.log" + +#STATE FILES +prefix="dzg" +history_file="$state_path/$prefix.history" +versions_file="$state_path/$prefix.versions" +lock_file="$state_path/$prefix.lock" +cols_file="$state_path/$prefix.cols.json" + +#CACHE FILES +coords_file="$cache_path/$prefix.coords" + +#legacy paths +hist_file="$config_path/history" +version_file="$config_path/versions" + +#XDG +freedesktop_path="$HOME/.local/share/applications" + +#HELPERS +ui_helper="$helpers_path/ui.py" +geo_file="$helpers_path/ips.csv" +km_helper="$helpers_path/latlon" +sums_path="$helpers_path/sums.md5" +func_helper="$helpers_path/funcs" + +#REMOTE +remote_host=gh +author="aclist" +repo="dztui" +url_prefix="https://raw.githubusercontent.com/$author/$repo" +stable_url="$url_prefix/dzgui" +testing_url="$url_prefix/testing" +releases_url="https://github.com/$author/$repo/releases/download/browser" +km_helper_url="$releases_url/latlon" +geo_file_url="$releases_url/ips.csv.gz" + + +set_im_module(){ + #TODO: drop pending SteamOS changes + pgrep -a gamescope | grep -q "generate-drm-mode" + if [[ $? -eq 0 ]]; then + GTK_IM_MODULE="" + logger INFO "Detected Steam Deck (Game Mode), unsetting GTK_IM_MODULE" + else + return + fi +} +redact(){ + sed 's@\(/home/\)[^/]*@\1REDACTED@g' +} +logger(){ + local date="$(date "+%F %T,%3N")" + local tag="$1" + local string="$2" + local self="${BASH_SOURCE[0]}" + local caller="${FUNCNAME[1]}" + local line="${BASH_LINENO[0]}" + printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" \ + | redact >> "$debug_log" +} +setup_dirs(){ + for dir in "$state_path" "$cache_path" "$share_path" "$helpers_path" "$freedesktop_path" "$config_path" "$log_path"; do + if [[ ! -d $dir ]]; then + mkdir -p "$dir" + fi + done +} +setup_state_files(){ + if [[ -f "$debug_log" ]]; then + rm "$debug_log" && touch $debug_log + logger INFO "Initializing DZGUI version $version" + fi + if [[ -f "$version_file" ]]; then + mv "$version_file" "$versions_file" && + logger INFO "Migrating legacy version file" + fi + # wipe cache files + local path="$cache_path" + if find "$path" -mindepth 1 -maxdepth 1 | read; then + for file in $path/*; do + rm "$file" + done + logger INFO "Wiped cache files" + fi +} +print_config_vals(){ + local keys=( + "branch" + "name" + "fav_server" + "fav_label" + "auto_install" + "steam_path" + "default_steam_path" + "preferred_client" + ) + for i in "${keys[@]}"; do + logger INFO "Read key '$i': '${!i}'" + done + if [[ ${#ip_list[@]} -lt 1 ]]; then + logger WARN "No IPs in saved server list" + fi + +} +test_gobject(){ + python3 -c "import gi" + if [[ ! $? -eq 0 ]]; then + logger CRITICAL "Missing PyGObject" + fdialog "Requires PyGObject (python-gobject)" + exit 1 + fi + logger INFO "Found PyGObject in Python env" +} +update_config(){ + # handling for legacy files + [[ -z $branch ]] && branch="stable" + [[ -f $config_file ]] && mv $config_file ${config_file}.old + write_config > $config_file && return 90 || return 1 + logger INFO "Updated config file at '$config_file'" +} +setup_steam_client(){ + local flatpak + local steam + local steam_cmd + [[ -n $preferred_client ]] && return 0 + [[ $(command -v flatpak) ]] && flatpak=$(flatpak list | grep valvesoftware.Steam) + steam=$(command -v steam) + if [[ -z "$steam" ]] && [[ -z "$flatpak" ]]; then + raise_error_and_quit "Requires Steam or Flatpak Steam" + elif [[ -n "$steam" ]] && [[ -n "$flatpak" ]]; then + preferred_client="steam" + elif [[ -n "$steam" ]]; then + preferred_client="steam" + else + steam_cmd="flatpak run com.valvesoftware.Steam" + fi + update_config && logger INFO "Preferred client set to '$steam_cmd'" || return 1 +} +print_ip_list(){ + [[ ${#ip_list[@]} -eq 0 ]] && return 1 + printf "\t\"%s\"\n" "${ip_list[@]}" +} +write_config(){ +cat <<-END +#Path to DayZ installation +steam_path="$steam_path" + +#Battlemetrics API key +api_key="$api_key" + +#Favorited server IP:PORT array +ip_list=( +$(print_ip_list) +) + +#Favorite server to fast-connect to (limit one) +fav_server="$fav_server" + +#Favorite server label (human readable) +fav_label="$fav_label" + +#Custom player name (optional, required by some servers) +name="$name" + +#Set to 1 to perform dry-run and print launch options +debug="$debug" + +#Toggle stable/testing branch +branch="$branch" + +#Start in fullscreen +fullscreen="$fullscreen" + +#Steam API key +steam_api="$steam_api" + +#Auto-install mods +auto_install="$auto_install" + +#Automod staging directory +staging_dir="$staging_dir" + +#Path to default Steam client +default_steam_path="$default_steam_path" + +#Preferred Steam launch command (for Flatpak support) +preferred_client="$preferred_client" + +#DZGUI source path +src_path="$src_path" +END +} +depcheck(){ + for dep in "${!deps[@]}"; do + command -v "$dep" 2>&1>/dev/null + if [[ $? -eq 1 ]]; then + local msg="Requires $dep >= ${deps[$dep]}" + raise_error_and_quit "$msg" + fi + done + local jqmsg="jq must be compiled with support for oniguruma" + local jqtest + jqtest=$(echo '{"test": "foo"}' | jq '.test | test("^foo$")') + [[ $? -ne 0 ]] && raise_error_and_quit "$jqmsg" + logger INFO "Initial dependencies satisfied" +} +check_pyver(){ + local pyver=$(python3 --version | awk '{print $2}') + local minor=$(<<< $pyver awk -F. '{print $2}') + if [[ -z $pyver ]] || [[ ${pyver:0:1} -lt 3 ]] || [[ $minor -lt 10 ]]; then + local msg="Requires Python >=3.10" + raise_error_and_quit "$msg" + fi + logger INFO "Found Python version: $pyver" +} +watcher_deps(){ + if [[ ! $(command -v wmctrl) ]] && [[ ! $(command -v xdotool) ]]; then + raise_error_and_quit "Missing dependency: requires 'wmctrl' or 'xdotool'" + exit 1 + fi + logger INFO "Found DZG Watcher dependencies" +} +format_version_url(){ + [[ -z "$branch" ]] && branch="stable" + case "$branch" in + "stable") + version_url="$stable_url/dzgui.sh" + ;; + "testing") + version_url="$testing_url/dzgui.sh" + ;; + esac + echo "$version_url" +} +write_desktop_file(){ +cat <<-END +[Desktop Entry] +Version=1.0 +Type=Application +Terminal=false +Exec=$share_path/dzgui.sh +Name=$app_name_upper +Comment=$app_name +Icon=$share_path/$app_name +Categories=Game +END +} +freedesktop_dirs(){ + local version_url=$(format_version_url) + local img_url="$stable_url/images" + curl -s "$version_url" > "$script_path" + chmod +x "$script_path" + for i in dzgui grid.png hero.png logo.png icon.png; do + curl -s "$img_url/$i" > "$share_path/$i" + done + write_desktop_file > "$freedesktop_path/$app_name.desktop" + [[ $is_steam_deck -eq 0 ]] && return + write_desktop_file > "$HOME/Desktop/$app_name.desktop" +} +legacy_vars(){ + local suffix="fav" + local hr_msg="Config file contains values based on old API. Please update and re-run setup." + local msg="Config file contains legacy API value: '$suffix'" + if [[ -n $fav ]]; then + logger WARN "$msg" + fdialog "$hr_msg" + exit 1 + fi + if [[ -n $whitelist ]]; then + suffix="whitelist" + logger WARN "$msg" + fdialog "$hr_msg" + exit 1 + fi +} +merge_config(){ + [[ -z $staging_dir ]] && staging_dir="/tmp" + update_config + tdialog "Wrote new config format to \n${config_file}\nIf errors occur, you can restore the file:\n${config_file}.old" +} +check_unmerged(){ + if [[ -f ${config_path}.unmerged ]]; then + merge_config + rm ${config_path}.unmerged + fi +} +check_version(){ + local version_url=$(format_version_url) + local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') + local res=$(get_response_code "$version_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$version_url'" + logger INFO "Local branch: '$branch', local version: $version" + if [[ $branch == "stable" ]]; then + version_url="$stable_url/dzgui.sh" + elif [[ $branch == "testing" ]]; then + version_url="$testing_url/dzgui.sh" + fi + [[ ! -f "$freedesktop_path/$app_name.desktop" ]] && freedesktop_dirs + if [[ $version == $upstream ]]; then + logger INFO "Local version is same as upstream" + check_unmerged + else + logger WARN "Local and remote version mismatch: $version != $upstream" + prompt_dl + fi +} +download_new_version(){ + local version_url="$(format_version_url)" + logger INFO "Version URL is '$version_url'" + logger INFO "$src_path" + mv "$src_path" "$src_path.old" + curl -L "$version_url" > "$src_path" 2>$debug_log + rc=$? + if [[ $rc -eq 0 ]]; then + dl_changelog + logger INFO "Wrote new version to $src_path" + chmod +x "$src_path" + touch "${config_path}.unmerged" + fdialog "DZGUI $upstream successfully downloaded. To use the new version, select Exit and restart." + logger INFO "User exited after version upgrade" + exit 0 + else + mv "$src_path.old" "$src_path" + logger WARN "curl failed to fetch new version. Rolling back" + fdialog "Failed to download the new version. Restoring old version" + return 1 + fi +} +prompt_dl(){ + _text(){ + cat <<-EOF + Version conflict. + + Your branch: $branch + Your version: $version + Upstream version: $upstream + + Version updates introduce important bug fixes and are encouraged. Attempt to download the latest version? + EOF + } + qdialog "$(_text)" "Yes" "No" + if [[ $? -eq 1 ]]; then + return 0 + else + download_new_version + fi +} +dl_changelog(){ + local mdbranch + local md + [[ $branch == "stable" ]] && mdbranch="dzgui" + [[ $branch == "testing" ]] && mdbranch="testing" + local md="$url_prefix/${mdbranch}/$file" + curl -Ls "$md" > "$state_path/CHANGELOG.md" +} +test_display_mode(){ + pgrep -a gamescope | grep -q "generate-drm-mode" + if [[ $? -eq 0 ]]; then + echo gm + else + echo dm + fi +} +check_architecture(){ + local cpu=$(< /proc/cpuinfo awk -F": " '/AMD Custom APU [0-9]{4}$/ {print $2; exit}') + read -a APU_MODEL <<< "$cpu" + if [[ ${APU_MODEL[3]} != "0932" ]] && [[ ${APU_MODEL[3]} != "0405" ]]; then + is_steam_deck=0 + logger INFO "Setting architecture to 'desktop'" + return + fi + + if [[ $(test_display_mode) == "gm" ]]; then + is_steam_deck=2 + else + is_steam_deck=1 + fi + logger INFO "Setting architecture to 'Steam Deck'" +} +check_map_count(){ + [[ $is_steam_deck -gt 0 ]] && return 0 + local map_count_file="/proc/sys/vm/max_map_count" + local min_count=1048576 + local conf_file="/etc/sysctl.d/dayz.conf" + local current_count + if [[ ! -f ${map_count_file} ]]; then + logger WARN "File '${map_count_file}' doesn't exist!" + return 1 + fi + current_count=$(cat ${map_count_file}) + if [[ $current_count -ge $min_count ]]; then + logger DEBUG "System map count is set to ${current_count}" + return 0 + fi + qdialog "sudo password required to set system vm map count." "OK" "Cancel" + if [[ $? -eq 0 ]]; then + local pass + logger INFO "Prompting user for sudo escalation" + pass=$($steamsafe_zenity --password) + if [[ $? -eq 1 ]]; then + logger WARN "User aborted password prompt" + return 1 + fi + logger DEBUG "Old map count is $current_count" + [[ $current_count -lt $min_count ]] && current_count=$min_count + sudo -S <<< "$pass" sh -c "echo 'vm.max_map_count=${current_count}' > $conf_file" + sudo sysctl -p "$conf_file" + logger DEBUG "Updated map count to $min_count" + else + logger WARN "User aborted map count prompt" + return 1 + fi +} +qdialog(){ + local text="$1" + local ok="$2" + local cancel="$3" + $steamsafe_zenity --question --text="$1" --ok-label="$ok" --cancel-label="$cancel" "${zenity_flags[@]}" +} +pdialog(){ + $steamsafe_zenity --progress --pulsate --auto-close "${zenity_flags[@]}" --text="$1" +} +fdialog(){ + $steamsafe_zenity --warning --ok-label="Exit" --text="$1" "${zenity_flags[@]}" +} +tdialog(){ + $steamsafe_zenity --info --text="$1" "${zenity_flags[@]}" +} +steam_deps(){ + local flatpak + local steam + [[ $(command -v flatpak) ]] && flatpak=$(flatpak list | grep valvesoftware.Steam) + steam=$(command -v steam) + if [[ -z "$steam" ]] && [[ -z "$flatpak" ]]; then + local msg="Found neither Steam nor Flatpak Steam" + raise_error_and_quit "$msg" + exit 1 + elif [[ -n "$steam" ]] && [[ -n "$flatpak" ]]; then + [[ -n $preferred_client ]] && return 0 + if [[ -z $preferred_client ]]; then + preferred_client="steam" + fi + elif [[ -n "$steam" ]]; then + preferred_client="steam" + else + preferred_client="flatpak" + fi + update_config + logger INFO "Preferred client set to '$preferred_client'" +} +migrate_files(){ + if [[ ! -f $config_path/dztuirc.oldapi ]]; then + cp $config_file $config_path/dztuirc.oldapi + logger INFO "Migrated old API file" + fi + [[ ! -f $hist_file ]] && return + rm $hist_file + logger INFO "Wiped old history file" +} +stale_symlinks(){ + local game_dir="$steam_path/steamapps/common/DayZ" + for l in $(find "$game_dir" -xtype l); do + logger DEBUG "Updating stale symlink '$l'" + unlink "$l" + done +} +local_latlon(){ + if [[ -z $(command -v dig) ]]; then + local local_ip=$(curl -Ls "https://ipecho.net/plain") + else + local local_ip=$(dig -4 +short myip.opendns.com @resolver1.opendns.com) + fi + local url="http://ip-api.com/json/$local_ip" + local res=$(curl -Ls "$url" | jq -r '"\(.lat)\n\(.lon)"') + if [[ -z "$res" ]]; then + logger WARN "Failed to get local coordinates" + return 1 + fi + echo "$res" > "$coords_file" +} +lock(){ + [[ ! -f $lock_file ]] && touch $lock_file + local pid=$(cat $lock_file) + ps -p $pid -o pid= >/dev/null 2>&1 + res=$? + if [[ $res -eq 0 ]]; then + local msg="DZGUI already running ($pid)" + raise_error_and_quit "$msg" + elif [[ $pid == $$ ]]; then + : + else + echo $$ > $lock_file + fi +} +get_hash(){ + local file="$1" + md5sum "$1" | awk '{print $1}' +} +fetch_a2s(){ + # this file is currently monolithic + [[ -d $helpers_path/a2s ]] && { logger INFO "A2S helper is current"; return 0; } + local sha=c7590ffa9a6d0c6912e17ceeab15b832a1090640 + local author="yepoleb" + local repo="python-a2s" + local url="https://github.com/$author/$repo/tarball/$sha" + local prefix="${author^}-$repo-${sha:0:7}" + local file="$prefix.tar.gz" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$file'" + curl -Ls "$url" > "$helpers_path/$file" + tar xf "$helpers_path/$file" -C "$helpers_path" "$prefix/a2s" --strip=1 + rm "$helpers_path/$file" + logger INFO "Updated A2S helper to sha '$sha'" +} +fetch_dzq(){ + local sum="9caed1445c45832f4af87736ba3f9637" + local file="$helpers_path/a2s/dayzquery.py" + if [[ -f $file ]] && [[ $(get_hash "$file") == $sum ]]; then + logger INFO "DZQ is current" + return 0 + fi + local sha=3088bbfb147b77bc7b6a9425581b439889ff3f7f + local author="yepoleb" + local repo="dayzquery" + local url="https://raw.githubusercontent.com/$author/$repo/$sha/dayzquery.py" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: 'dayzquery.py'" + curl -Ls "$url" > "$file" + logger INFO "Updated DZQ to sha '$sha'" +} +fetch_icons(){ + res=( + "16" + "24" + "32" + "48" + "64" + "96" + "128" + "256" + ) + url="$stable_url/images/icons" + for i in "${res[@]}"; do + size="${i}x${i}" + dir="$HOME/.local/share/icons/hicolor/$size/apps" + icon="$dir/$app_name.png" + [[ -f $icon ]] && return + if [[ ! -d $dir ]]; then + mkdir -p "$dir" + fi + logger INFO "Updating $size Freedesktop icon" + curl -Ls "${url}/${i}.png" > "$icon" + done +} +fetch_helpers_by_sum(){ + [[ -f "$config_file" ]] && source "$config_file" + declare -A sums + sums=( + ["ui.py"]="d3ad9153d8599bea0eede9fd3121ee8e" + ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" + ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" + ["funcs"]="6a1c7ce585d9b76e2e75dba9d4295f8d" + ["lan"]="c62e84ddd1457b71a85ad21da662b9af" + ) + local author="aclist" + local repo="dztui" + local realbranch + local file + local sum + local full_path + + # first time setup + if [[ -z $branch ]]; then + realbranch="dzgui" + else + realbranch="$branch" + fi + if [[ $realbranch == "stable" ]]; then + realbranch="dzgui" + fi + + for i in "${!sums[@]}"; do + file="$i" + sum="${sums[$i]}" + full_path="$helpers_path/$file" + + url="${url_prefix}/$realbranch/helpers/$file" + + if [[ -f "$full_path" ]] && [[ $(get_hash "$full_path") == $sum ]]; then + logger INFO "$file is current" + else + logger WARN "File '$full_path' checksum != '$sum'" + local res=$(get_response_code "$url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$url'" + curl -Ls "$url" > "$full_path" + if [[ ! $? -eq 0 ]]; then + raise_error_and_quit "Failed to fetch the file '$file'. Possible timeout?" + fi + if [[ $(get_hash $full_path) != $sum ]]; then + logger WARN "Downloaded new '$file', but checksum != '$sum'" + fi + logger INFO "Updated '$full_path' to sum '$sum'" + fi + [[ $file == "funcs" ]] && chmod +x "$full_path" + [[ $file == "lan" ]] && chmod +x "$full_path" + done + return 0 +} +fetch_geo_file(){ + # for binary releases + local geo_sum="28ccd75b3e03cf07a7011f22ef0cd69b" + local km_sum="b038fdb8f655798207bd28de3a004706" + local gzip="$helpers_path/ips.csv.gz" + if [[ ! -f $geo_file ]] || [[ $(get_hash $geo_file) != $geo_sum ]]; then + local res=$(get_response_code "$geo_file_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$geo_file_url'" + curl -Ls "$geo_file_url" > "$gzip" + #force overwrite + gunzip -f "$gzip" + fi + if [[ ! -f $km_helper ]] || [[ $(get_hash $km_helper) != $km_sum ]]; then + local res=$(get_response_code "$km_helper_url") + [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$km_helper_url'" + curl -Ls "$km_helper_url" > "$km_helper" + chmod +x "$km_helper" + fi +} +fetch_helpers(){ + fetch_a2s + fetch_dzq + fetch_geo_file + fetch_helpers_by_sum + [[ ! -f $share_path/icon.png ]] && freedesktop_dirs + fetch_icons +} +raise_error_and_quit(){ + local msg="$1" + logger CRITICAL "$msg" + fdialog "$msg" + exit 1 +} +test_steam_api(){ + local key="$1" + [[ -z $key ]] && return 1 + local url="https://api.steampowered.com/IGameServersService/GetServerList/v1/?filter=\appid\221100&limit=10&key=$key" + local code=$(curl -ILs "$url" | grep -E "^HTTP") + [[ ! $code =~ 200 ]] && echo 1 + [[ $code =~ 200 ]] && echo 0 +} +test_bm_api(){ + local bm_api="https://api.battlemetrics.com/servers" + local key="$1" + [[ -z $key ]] && return 1 + local code=$(curl -ILs "$bm_api" \ + -H "Authorization: Bearer "$key"" -G \ + -d "filter[game]=$game" \ + | grep -E "^HTTP") + [[ $code =~ 401 ]] && echo 1 + [[ $code =~ 200 ]] && echo 0 +} +find_default_path(){ + _discover(){ + readarray -t paths < <(find / -type d \( -path "/proc" -o -path "*/timeshift" -o -path \ + "/tmp" -o -path "/usr" -o -path "/boot" -o -path "/proc" -o -path "/root" \ + -o -path "/sys" -o -path "/etc" -o -path "/var" -o -path "/lost+found" \) -prune \ + -o -regex ".*Steam/config/libraryfolders.vdf$" -print 2>/dev/null | sed 's@/config/libraryfolders.vdf@@') + + if [[ "${#paths[@]}" -gt 1 ]]; then + echo "100" + default_steam_path=$(printf "%s\n" "${paths[@]}" | $steamsafe_zenity --list --column="paths" --hide-header --text="Found multiple valid Steam paths. Select your default Steam installation." --title="DZGUI") + [[ -z "$default_steam_path" ]] && exit 1 + else + default_steam_path="${paths[0]}" + fi + } + if [[ $is_steam_deck -gt 0 ]]; then + default_steam_path="$HOME/.local/share/Steam" + logger INFO "Set default Steam path to $default_steam_path" + return 0 + fi + local def_path + local ubuntu_path + local flatpak_path + local debian_path + def_path="$HOME/.local/share/Steam" + ubuntu_path="$HOME/.steam/steam" + debian_path="$HOME/.steam/debian-installation" + flatpak_path="$HOME/.var/app/com.valvesoftware.Steam/data/Steam" + + #ubuntu path must precede default path because + #both exist on ubuntu systems, but only ubuntu path contains library data + for i in "$ubuntu_path" "$def_path" "$debian_path" "$flatpak_path"; do + if [[ -d "$i" ]]; then + default_steam_path="$i" + return 0 + fi + done + + local msg="Let DZGUI auto-discover Steam path (accurate, slower)\nSelect the Steam path manually (less accurate, faster)" + local res=$(echo -e "$msg" | $steamsafe_zenity --list \ + --column="Choice" \ + --title="DZGUI" \ + --hide-header \ + --text="Steam is not installed in a standard location." \ + $sd_res) + + case "$res" in + *auto*) _discover > >(pdialog "Scanning paths") ;; + *manual*) + zenity --info --text="\nSelect the top-level entry point to the location where Steam (not DayZ)\nis installed and before entering the \"steamapps\" path.\n\nE.g., if Steam is installed at:\n\"/media/mydrive/Steam\"\n\nCorrect:\n- \"/media/mydrive/Steam\"\n\nIncorrect:\n- \"/media/mydrive/Steam/steamapps/common/DayZ\"\n- \"/media/mydrive/\"" --width=500 && + file_picker ;; + esac +} +file_picker(){ + local path=$($steamsafe_zenity --file-selection --directory) + logger INFO "File picker path resolved to: $path" + if [[ -z "$path" ]]; then + logger WARN "Steam path selection was empty" + return + else + default_steam_path="$path" + fi +} +find_library_folder(){ + local search_path="$1" + steam_path="$(python3 "$helpers_path/vdf2json.py" -i "$1/steamapps/libraryfolders.vdf" \ + | jq -r '.libraryfolders[]|select(.apps|has("221100")).path')" + if [[ ! $? -eq 0 ]] || [[ -z $steam_path ]]; then + logger WARN "Failed to parse Steam path using '$search_path'" + return 1 + fi + logger INFO "Steam path resolved to: $steam_path" +} +create_config(){ + #if old path is malformed and this function is forcibly called, + #wipe paths from memory before entering the loop to force path rediscovery + unset default_steam_path + unset steam_path + + while true; do + local player_input="$($steamsafe_zenity \ + --forms \ + --add-entry="Player name (required for some servers)" \ + --add-entry="Steam API key" \ + --add-entry="BattleMetrics API key (optional)" \ + --title="DZGUI" \ + --text="DZGUI" $sd_res \ + --separator="@")" + #explicitly setting IFS crashes $steamsafe_zenity in loop + #and mapfile does not support high ascii delimiters, so split fields with newline + readarray -t args < <(<<< "$player_input" sed 's/@/\n/g') + name="${args[0]}" + steam_api="${args[1]}" + api_key="${args[2]}" + + if [[ -z $player_input ]]; then + logger WARN "User aborted setup process" + exit 1 + fi + if [[ -z $steam_api ]]; then + tdialog "Steam API key canot be empty" + continue + elif [[ "${#steam_api}" -lt 32 ]] || [[ $(test_steam_api "$steam_api") -eq 1 ]]; then + tdialog "Invalid Steam API key" + continue + fi + if [[ -n $api_key ]] && [[ $(test_bm_api $api_key) -eq 1 ]]; then + tdialog "Invalid BM API key" + continue + fi + while true; do + if [[ -n $steam_path ]]; then + write_config + [[ $? -eq 0 ]] && logger INFO "Successfully created config file" + return 0 + fi + find_default_path + find_library_folder "$default_steam_path" + if [[ -z $steam_path ]]; then + logger raise_error "Steam path was empty" + zenity --question --text="DayZ not found or not installed at the Steam library given. NOTE: if you recently installed DayZ or moved its location, you MUST restart Steam first for these changes to synch." --ok-label="Choose path manually" --cancel-label="Exit" + if [[ $? -eq 0 ]]; then + logger INFO "User selected file picker" + file_picker + find_library_folder "$default_steam_path" + else + fdialog "Failed to find Steam at the provided location" + exit 1 + fi + else + branch="stable" + update_config + logger INFO "Wrote config to '$config_file'" + return 0 + fi + done + done +} +varcheck(){ + local msg="Config file '$config_file' missing. Start first-time setup now?" + local msg2="The Steam paths set in your config file appear to be invalid. Restart first-time setup now?" + if [[ ! -f $config_file ]]; then + qdialog "$msg" "Yes" "Exit" + if [[ $? -eq 1 ]]; then + logger CRITICAL "Config file missing, but user aborted setup" + exit 1 + fi + create_config + fi + source "$config_file" + local workshop_dir="$steam_path/steamapps/workshop/content/$aid" + local game_dir="$steam_path/steamapps/common/DayZ" + if [[ ! -d $steam_path ]] || [[ ! -d $game_dir ]] || [[ ! $(find $game_dir -type f) ]]; then + logger WARN "DayZ path resolved to '$game_dir'" + logger WARN "Workshop path resolved to '$workshop_dir'" + qdialog "$msg2" "Yes" "Exit" + if [[ $? -eq 1 ]]; then + logger CRITICAL "Malformed Steam path, but user aborted setup" + exit 1 + fi + create_config + return 0 + fi + if [[ $src_path != $(realpath "$0") ]]; then + src_path=$(realpath "$0") + update_config + fi +} +is_dzg_downloading(){ + if [[ -d $steam_path ]] && [[ -d $steam_path/downloading/$aid ]]; then + logger WARN "DayZ may be scheduling updates" + return 0 + fi +} +is_steam_running(){ + local res=$(ps aux | grep "steamwebhelper" | grep -v grep) + if [[ -z $res ]]; then + logger WARN "Steam may not be running" + tdialog "Is Steam running? For best results, make sure Steam is open in the background." + return 0 + fi +} +get_response_code(){ + local url="$1" + curl -Ls -I -o /dev/null -w "%{http_code}" "$url" +} +test_connection(){ + source "$config_file" + declare -A hr + local res1 + local res2 + local str="No connection could be established to the remote server" + hr=( + ["steampowered.com"]="https://api.steampowered.com/IGameServersService/GetServerList/v1/?key=$steam_api" + ["github.com"]="https://github.com/$author" + ["codeberg.org"]="https://codeberg.org/$author" + ) + # steam API is mandatory, except on initial setup + if [[ -n $steam_api ]]; then + res=$(get_response_code "${hr["steampowered.com"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str ("steampowered.com")" + fi + + res=$(get_response_code "${hr["github.com"]}") + if [[ $res -ne 200 ]]; then + logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" + remote_host=cb + logger INFO "Set remote host to '${hr["codeberg.org"]}'" + res=$(get_response_code "${hr["codeberg.org"]}") + [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" + fi + if [[ $remote_host == "cb" ]]; then + url_prefix="https://codeberg.org/$author/$repo/raw/branch" + releases_url="https://codeberg.org/$author/$repo/releases/download/browser" + stable_url="$url_prefix/dzgui" + testing_url="$url_prefix/testing" + km_helper_url="$releases_url/latlon" + geo_file_url="$releases_url/ips.csv.gz" + fi +} +legacy_cols(){ + [[ ! -f $cols_file ]] && return + local has=$(< "$cols_file" jq '.cols|has("Queue")') + [[ $has == "true" ]] && return + < $cols_file jq '.cols += { "Queue": 120 }' > $cols_file.new && + mv $cols_file.new $cols_file +} +stale_mod_signatures(){ + local workshop_dir="$steam_path/steamapps/workshop/content/$aid" + if [[ -d $workshop_dir ]]; then + readarray -t old_mod_ids < <(awk -F, '{print $1}' $versions_file) + for ((i=0; i<${#old_mod_ids[@]}; ++i)); do + if [[ ! -d $workshop_dir/${old_mod_ids[$i]} ]]; then + "$HOME/.local/share/$app_name/helpers/funcs" "align_local" "${old_mod_ids[$i]}" + fi + done + fi + +} +create_new_links(){ + "$HOME/.local/share/$app_name/helpers/funcs" "update_symlinks" +} +initial_setup(){ + setup_dirs + setup_state_files + depcheck + check_pyver + test_gobject + watcher_deps + check_architecture + test_connection +# fetch_helpers > >(pdialog "Checking helper files") + varcheck + source "$config_file" + lock + legacy_vars + legacy_cols + check_version + check_map_count + steam_deps + migrate_files + stale_symlinks + stale_mod_signatures + create_new_links + local_latlon + is_steam_running + is_dzg_downloading + print_config_vals +} +uninstall(){ + _full(){ + for i in "$config_path" "$state_path" "$cache_path" "$share_path"; do + echo "Deleting the path '$i'" + rm -rf "$i" + done + } + _partial(){ + for i in "$cache_path" "$share_path"; do + echo "Deleting the path '$i'" + rm -rf "$i" + done + } + local choice=$($steamsafe_zenity \ + --list \ + --radiolist \ + --column="a" \ + --column="b" \ + --hide-header \ + --text="Choose an uninstall routine below." \ + TRUE "Keep user config files" \ + FALSE "Delete all DZGUI files" \ + --title="DZGUI" + ) + + case "$choice" in + "Keep user config files") + _partial + ;; + "Delete all DZGUI files") + _full + ;; + "") + echo "User aborted uninstall process" + exit 1 + ;; + esac + local self="$(realpath "$0")" + echo "Deleting '$self'" + rm "$self" + echo "Uninstall routine complete" +} +main(){ + local zenv=$(zenity --version 2>/dev/null) + [[ -z $zenv ]] && { echo "Requires zenity >= ${deps[$steamsafe_zenity]}"; exit 1; } + if [[ $1 == "--uninstall" ]] || [[ $1 == "-u" ]]; then + uninstall && + exit 0 + fi + if [[ $1 == "--steam" ]] || [[ $1 == "-s" ]]; then + export STEAM_LAUNCH=1 + fi + + set_im_module + + printf "Initializing setup...\n" + initial_setup + + printf "All OK. Kicking off UI...\n" + python3 "$ui_helper" "--init-ui" "$version" "$is_steam_deck" +} +main "$@" +#TODO: tech debt: cruddy handling for steam forking +[[ $? -eq 1 ]] && pkill -f dzgui.sh From d072c8107e7579312d2e30066fc38ab6b8355afb Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 9 Feb 2025 19:01:30 +0900 Subject: [PATCH 98/99] chore: drop extraneous file --- dzgui.sh.old | 1024 -------------------------------------------------- 1 file changed, 1024 deletions(-) delete mode 100755 dzgui.sh.old diff --git a/dzgui.sh.old b/dzgui.sh.old deleted file mode 100755 index 65b151b..0000000 --- a/dzgui.sh.old +++ /dev/null @@ -1,1024 +0,0 @@ -#!/usr/bin/env bash -set -o pipefail - -version=5.7.0-beta.5 - -#CONSTANTS -aid=221100 -game="dayz" -app_name="dzgui" -app_name_upper="DZGUI" -workshop="steam://url/CommunityFilePage/" -sd_res="--width=1280 --height=800" -steamsafe_zenity="/usr/bin/zenity" -zenity_flags=("--width=500" "--title=DZGUI") -declare -A deps -deps=([awk]="5.1.1" [curl]="7.80.0" [jq]="1.6" [tr]="9.0" [$steamsafe_zenity]="3.44.1") - -#CONFIG -config_path="$HOME/.config/dztui" -config_file="$config_path/dztuirc" - -#PATHS -state_path="$HOME/.local/state/$app_name" -cache_path="$HOME/.cache/$app_name" -share_path="$HOME/.local/share/$app_name" -script_path="$share_path/dzgui.sh" -helpers_path="$share_path/helpers" - -#LOGS -log_path="$state_path/logs" -debug_log="$log_path/DZGUI_DEBUG.log" - -#STATE FILES -prefix="dzg" -history_file="$state_path/$prefix.history" -versions_file="$state_path/$prefix.versions" -lock_file="$state_path/$prefix.lock" -cols_file="$state_path/$prefix.cols.json" - -#CACHE FILES -coords_file="$cache_path/$prefix.coords" - -#legacy paths -hist_file="$config_path/history" -version_file="$config_path/versions" - -#XDG -freedesktop_path="$HOME/.local/share/applications" - -#HELPERS -ui_helper="$helpers_path/ui.py" -geo_file="$helpers_path/ips.csv" -km_helper="$helpers_path/latlon" -sums_path="$helpers_path/sums.md5" -func_helper="$helpers_path/funcs" - -#REMOTE -remote_host=gh -author="aclist" -repo="dztui" -url_prefix="https://raw.githubusercontent.com/$author/$repo" -stable_url="$url_prefix/dzgui" -testing_url="$url_prefix/testing" -releases_url="https://github.com/$author/$repo/releases/download/browser" -km_helper_url="$releases_url/latlon" -geo_file_url="$releases_url/ips.csv.gz" - - -set_im_module(){ - #TODO: drop pending SteamOS changes - pgrep -a gamescope | grep -q "generate-drm-mode" - if [[ $? -eq 0 ]]; then - GTK_IM_MODULE="" - logger INFO "Detected Steam Deck (Game Mode), unsetting GTK_IM_MODULE" - else - return - fi -} -redact(){ - sed 's@\(/home/\)[^/]*@\1REDACTED@g' -} -logger(){ - local date="$(date "+%F %T,%3N")" - local tag="$1" - local string="$2" - local self="${BASH_SOURCE[0]}" - local caller="${FUNCNAME[1]}" - local line="${BASH_LINENO[0]}" - printf "%s␞%s␞%s::%s()::%s␞%s\n" "$date" "$tag" "$self" "$caller" "$line" "$string" \ - | redact >> "$debug_log" -} -setup_dirs(){ - for dir in "$state_path" "$cache_path" "$share_path" "$helpers_path" "$freedesktop_path" "$config_path" "$log_path"; do - if [[ ! -d $dir ]]; then - mkdir -p "$dir" - fi - done -} -setup_state_files(){ - if [[ -f "$debug_log" ]]; then - rm "$debug_log" && touch $debug_log - logger INFO "Initializing DZGUI version $version" - fi - if [[ -f "$version_file" ]]; then - mv "$version_file" "$versions_file" && - logger INFO "Migrating legacy version file" - fi - # wipe cache files - local path="$cache_path" - if find "$path" -mindepth 1 -maxdepth 1 | read; then - for file in $path/*; do - rm "$file" - done - logger INFO "Wiped cache files" - fi -} -print_config_vals(){ - local keys=( - "branch" - "name" - "fav_server" - "fav_label" - "auto_install" - "steam_path" - "default_steam_path" - "preferred_client" - ) - for i in "${keys[@]}"; do - logger INFO "Read key '$i': '${!i}'" - done - if [[ ${#ip_list[@]} -lt 1 ]]; then - logger WARN "No IPs in saved server list" - fi - -} -test_gobject(){ - python3 -c "import gi" - if [[ ! $? -eq 0 ]]; then - logger CRITICAL "Missing PyGObject" - fdialog "Requires PyGObject (python-gobject)" - exit 1 - fi - logger INFO "Found PyGObject in Python env" -} -update_config(){ - # handling for legacy files - [[ -z $branch ]] && branch="stable" - [[ -f $config_file ]] && mv $config_file ${config_file}.old - write_config > $config_file && return 90 || return 1 - logger INFO "Updated config file at '$config_file'" -} -setup_steam_client(){ - local flatpak - local steam - local steam_cmd - [[ -n $preferred_client ]] && return 0 - [[ $(command -v flatpak) ]] && flatpak=$(flatpak list | grep valvesoftware.Steam) - steam=$(command -v steam) - if [[ -z "$steam" ]] && [[ -z "$flatpak" ]]; then - raise_error_and_quit "Requires Steam or Flatpak Steam" - elif [[ -n "$steam" ]] && [[ -n "$flatpak" ]]; then - preferred_client="steam" - elif [[ -n "$steam" ]]; then - preferred_client="steam" - else - steam_cmd="flatpak run com.valvesoftware.Steam" - fi - update_config && logger INFO "Preferred client set to '$steam_cmd'" || return 1 -} -print_ip_list(){ - [[ ${#ip_list[@]} -eq 0 ]] && return 1 - printf "\t\"%s\"\n" "${ip_list[@]}" -} -write_config(){ -cat <<-END -#Path to DayZ installation -steam_path="$steam_path" - -#Battlemetrics API key -api_key="$api_key" - -#Favorited server IP:PORT array -ip_list=( -$(print_ip_list) -) - -#Favorite server to fast-connect to (limit one) -fav_server="$fav_server" - -#Favorite server label (human readable) -fav_label="$fav_label" - -#Custom player name (optional, required by some servers) -name="$name" - -#Set to 1 to perform dry-run and print launch options -debug="$debug" - -#Toggle stable/testing branch -branch="$branch" - -#Start in fullscreen -fullscreen="$fullscreen" - -#Steam API key -steam_api="$steam_api" - -#Auto-install mods -auto_install="$auto_install" - -#Automod staging directory -staging_dir="$staging_dir" - -#Path to default Steam client -default_steam_path="$default_steam_path" - -#Preferred Steam launch command (for Flatpak support) -preferred_client="$preferred_client" - -#DZGUI source path -src_path="$src_path" -END -} -depcheck(){ - for dep in "${!deps[@]}"; do - command -v "$dep" 2>&1>/dev/null - if [[ $? -eq 1 ]]; then - local msg="Requires $dep >= ${deps[$dep]}" - raise_error_and_quit "$msg" - fi - done - local jqmsg="jq must be compiled with support for oniguruma" - local jqtest - jqtest=$(echo '{"test": "foo"}' | jq '.test | test("^foo$")') - [[ $? -ne 0 ]] && raise_error_and_quit "$jqmsg" - logger INFO "Initial dependencies satisfied" -} -check_pyver(){ - local pyver=$(python3 --version | awk '{print $2}') - local minor=$(<<< $pyver awk -F. '{print $2}') - if [[ -z $pyver ]] || [[ ${pyver:0:1} -lt 3 ]] || [[ $minor -lt 10 ]]; then - local msg="Requires Python >=3.10" - raise_error_and_quit "$msg" - fi - logger INFO "Found Python version: $pyver" -} -watcher_deps(){ - if [[ ! $(command -v wmctrl) ]] && [[ ! $(command -v xdotool) ]]; then - raise_error_and_quit "Missing dependency: requires 'wmctrl' or 'xdotool'" - exit 1 - fi - logger INFO "Found DZG Watcher dependencies" -} -format_version_url(){ - [[ -z "$branch" ]] && branch="stable" - case "$branch" in - "stable") - version_url="$stable_url/dzgui.sh" - ;; - "testing") - version_url="$testing_url/dzgui.sh" - ;; - esac - echo "$version_url" -} -write_desktop_file(){ -cat <<-END -[Desktop Entry] -Version=1.0 -Type=Application -Terminal=false -Exec=$share_path/dzgui.sh -Name=$app_name_upper -Comment=$app_name -Icon=$share_path/$app_name -Categories=Game -END -} -freedesktop_dirs(){ - local version_url=$(format_version_url) - local img_url="$stable_url/images" - curl -s "$version_url" > "$script_path" - chmod +x "$script_path" - for i in dzgui grid.png hero.png logo.png icon.png; do - curl -s "$img_url/$i" > "$share_path/$i" - done - write_desktop_file > "$freedesktop_path/$app_name.desktop" - [[ $is_steam_deck -eq 0 ]] && return - write_desktop_file > "$HOME/Desktop/$app_name.desktop" -} -legacy_vars(){ - local suffix="fav" - local hr_msg="Config file contains values based on old API. Please update and re-run setup." - local msg="Config file contains legacy API value: '$suffix'" - if [[ -n $fav ]]; then - logger WARN "$msg" - fdialog "$hr_msg" - exit 1 - fi - if [[ -n $whitelist ]]; then - suffix="whitelist" - logger WARN "$msg" - fdialog "$hr_msg" - exit 1 - fi -} -merge_config(){ - [[ -z $staging_dir ]] && staging_dir="/tmp" - update_config - tdialog "Wrote new config format to \n${config_file}\nIf errors occur, you can restore the file:\n${config_file}.old" -} -check_unmerged(){ - if [[ -f ${config_path}.unmerged ]]; then - merge_config - rm ${config_path}.unmerged - fi -} -check_version(){ - local version_url=$(format_version_url) - local upstream=$(curl -Ls "$version_url" | awk -F= '/^version=/ {print $2}') - local res=$(get_response_code "$version_url") - [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$version_url'" - logger INFO "Local branch: '$branch', local version: $version" - if [[ $branch == "stable" ]]; then - version_url="$stable_url/dzgui.sh" - elif [[ $branch == "testing" ]]; then - version_url="$testing_url/dzgui.sh" - fi - [[ ! -f "$freedesktop_path/$app_name.desktop" ]] && freedesktop_dirs - if [[ $version == $upstream ]]; then - logger INFO "Local version is same as upstream" - check_unmerged - else - logger WARN "Local and remote version mismatch: $version != $upstream" - prompt_dl - fi -} -download_new_version(){ - local version_url="$(format_version_url)" - logger INFO "Version URL is '$version_url'" - logger INFO "$src_path" - mv "$src_path" "$src_path.old" - curl -L "$version_url" > "$src_path" 2>$debug_log - rc=$? - if [[ $rc -eq 0 ]]; then - dl_changelog - logger INFO "Wrote new version to $src_path" - chmod +x "$src_path" - touch "${config_path}.unmerged" - fdialog "DZGUI $upstream successfully downloaded. To use the new version, select Exit and restart." - logger INFO "User exited after version upgrade" - exit 0 - else - mv "$src_path.old" "$src_path" - logger WARN "curl failed to fetch new version. Rolling back" - fdialog "Failed to download the new version. Restoring old version" - return 1 - fi -} -prompt_dl(){ - _text(){ - cat <<-EOF - Version conflict. - - Your branch: $branch - Your version: $version - Upstream version: $upstream - - Version updates introduce important bug fixes and are encouraged. Attempt to download the latest version? - EOF - } - qdialog "$(_text)" "Yes" "No" - if [[ $? -eq 1 ]]; then - return 0 - else - download_new_version - fi -} -dl_changelog(){ - local mdbranch - local md - [[ $branch == "stable" ]] && mdbranch="dzgui" - [[ $branch == "testing" ]] && mdbranch="testing" - local md="$url_prefix/${mdbranch}/$file" - curl -Ls "$md" > "$state_path/CHANGELOG.md" -} -test_display_mode(){ - pgrep -a gamescope | grep -q "generate-drm-mode" - if [[ $? -eq 0 ]]; then - echo gm - else - echo dm - fi -} -check_architecture(){ - local cpu=$(< /proc/cpuinfo awk -F": " '/AMD Custom APU [0-9]{4}$/ {print $2; exit}') - read -a APU_MODEL <<< "$cpu" - if [[ ${APU_MODEL[3]} != "0932" ]] && [[ ${APU_MODEL[3]} != "0405" ]]; then - is_steam_deck=0 - logger INFO "Setting architecture to 'desktop'" - return - fi - - if [[ $(test_display_mode) == "gm" ]]; then - is_steam_deck=2 - else - is_steam_deck=1 - fi - logger INFO "Setting architecture to 'Steam Deck'" -} -check_map_count(){ - [[ $is_steam_deck -gt 0 ]] && return 0 - local map_count_file="/proc/sys/vm/max_map_count" - local min_count=1048576 - local conf_file="/etc/sysctl.d/dayz.conf" - local current_count - if [[ ! -f ${map_count_file} ]]; then - logger WARN "File '${map_count_file}' doesn't exist!" - return 1 - fi - current_count=$(cat ${map_count_file}) - if [[ $current_count -ge $min_count ]]; then - logger DEBUG "System map count is set to ${current_count}" - return 0 - fi - qdialog "sudo password required to set system vm map count." "OK" "Cancel" - if [[ $? -eq 0 ]]; then - local pass - logger INFO "Prompting user for sudo escalation" - pass=$($steamsafe_zenity --password) - if [[ $? -eq 1 ]]; then - logger WARN "User aborted password prompt" - return 1 - fi - logger DEBUG "Old map count is $current_count" - [[ $current_count -lt $min_count ]] && current_count=$min_count - sudo -S <<< "$pass" sh -c "echo 'vm.max_map_count=${current_count}' > $conf_file" - sudo sysctl -p "$conf_file" - logger DEBUG "Updated map count to $min_count" - else - logger WARN "User aborted map count prompt" - return 1 - fi -} -qdialog(){ - local text="$1" - local ok="$2" - local cancel="$3" - $steamsafe_zenity --question --text="$1" --ok-label="$ok" --cancel-label="$cancel" "${zenity_flags[@]}" -} -pdialog(){ - $steamsafe_zenity --progress --pulsate --auto-close "${zenity_flags[@]}" --text="$1" -} -fdialog(){ - $steamsafe_zenity --warning --ok-label="Exit" --text="$1" "${zenity_flags[@]}" -} -tdialog(){ - $steamsafe_zenity --info --text="$1" "${zenity_flags[@]}" -} -steam_deps(){ - local flatpak - local steam - [[ $(command -v flatpak) ]] && flatpak=$(flatpak list | grep valvesoftware.Steam) - steam=$(command -v steam) - if [[ -z "$steam" ]] && [[ -z "$flatpak" ]]; then - local msg="Found neither Steam nor Flatpak Steam" - raise_error_and_quit "$msg" - exit 1 - elif [[ -n "$steam" ]] && [[ -n "$flatpak" ]]; then - [[ -n $preferred_client ]] && return 0 - if [[ -z $preferred_client ]]; then - preferred_client="steam" - fi - elif [[ -n "$steam" ]]; then - preferred_client="steam" - else - preferred_client="flatpak" - fi - update_config - logger INFO "Preferred client set to '$preferred_client'" -} -migrate_files(){ - if [[ ! -f $config_path/dztuirc.oldapi ]]; then - cp $config_file $config_path/dztuirc.oldapi - logger INFO "Migrated old API file" - fi - [[ ! -f $hist_file ]] && return - rm $hist_file - logger INFO "Wiped old history file" -} -stale_symlinks(){ - local game_dir="$steam_path/steamapps/common/DayZ" - for l in $(find "$game_dir" -xtype l); do - logger DEBUG "Updating stale symlink '$l'" - unlink "$l" - done -} -local_latlon(){ - if [[ -z $(command -v dig) ]]; then - local local_ip=$(curl -Ls "https://ipecho.net/plain") - else - local local_ip=$(dig -4 +short myip.opendns.com @resolver1.opendns.com) - fi - local url="http://ip-api.com/json/$local_ip" - local res=$(curl -Ls "$url" | jq -r '"\(.lat)\n\(.lon)"') - if [[ -z "$res" ]]; then - logger WARN "Failed to get local coordinates" - return 1 - fi - echo "$res" > "$coords_file" -} -lock(){ - [[ ! -f $lock_file ]] && touch $lock_file - local pid=$(cat $lock_file) - ps -p $pid -o pid= >/dev/null 2>&1 - res=$? - if [[ $res -eq 0 ]]; then - local msg="DZGUI already running ($pid)" - raise_error_and_quit "$msg" - elif [[ $pid == $$ ]]; then - : - else - echo $$ > $lock_file - fi -} -get_hash(){ - local file="$1" - md5sum "$1" | awk '{print $1}' -} -fetch_a2s(){ - # this file is currently monolithic - [[ -d $helpers_path/a2s ]] && { logger INFO "A2S helper is current"; return 0; } - local sha=c7590ffa9a6d0c6912e17ceeab15b832a1090640 - local author="yepoleb" - local repo="python-a2s" - local url="https://github.com/$author/$repo/tarball/$sha" - local prefix="${author^}-$repo-${sha:0:7}" - local file="$prefix.tar.gz" - local res=$(get_response_code "$url") - [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$file'" - curl -Ls "$url" > "$helpers_path/$file" - tar xf "$helpers_path/$file" -C "$helpers_path" "$prefix/a2s" --strip=1 - rm "$helpers_path/$file" - logger INFO "Updated A2S helper to sha '$sha'" -} -fetch_dzq(){ - local sum="9caed1445c45832f4af87736ba3f9637" - local file="$helpers_path/a2s/dayzquery.py" - if [[ -f $file ]] && [[ $(get_hash "$file") == $sum ]]; then - logger INFO "DZQ is current" - return 0 - fi - local sha=3088bbfb147b77bc7b6a9425581b439889ff3f7f - local author="yepoleb" - local repo="dayzquery" - local url="https://raw.githubusercontent.com/$author/$repo/$sha/dayzquery.py" - local res=$(get_response_code "$url") - [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: 'dayzquery.py'" - curl -Ls "$url" > "$file" - logger INFO "Updated DZQ to sha '$sha'" -} -fetch_icons(){ - res=( - "16" - "24" - "32" - "48" - "64" - "96" - "128" - "256" - ) - url="$stable_url/images/icons" - for i in "${res[@]}"; do - size="${i}x${i}" - dir="$HOME/.local/share/icons/hicolor/$size/apps" - icon="$dir/$app_name.png" - [[ -f $icon ]] && return - if [[ ! -d $dir ]]; then - mkdir -p "$dir" - fi - logger INFO "Updating $size Freedesktop icon" - curl -Ls "${url}/${i}.png" > "$icon" - done -} -fetch_helpers_by_sum(){ - [[ -f "$config_file" ]] && source "$config_file" - declare -A sums - sums=( - ["ui.py"]="d3ad9153d8599bea0eede9fd3121ee8e" - ["query_v2.py"]="55d339ba02512ac69de288eb3be41067" - ["vdf2json.py"]="2f49f6f5d3af919bebaab2e9c220f397" - ["funcs"]="6a1c7ce585d9b76e2e75dba9d4295f8d" - ["lan"]="c62e84ddd1457b71a85ad21da662b9af" - ) - local author="aclist" - local repo="dztui" - local realbranch - local file - local sum - local full_path - - # first time setup - if [[ -z $branch ]]; then - realbranch="dzgui" - else - realbranch="$branch" - fi - if [[ $realbranch == "stable" ]]; then - realbranch="dzgui" - fi - - for i in "${!sums[@]}"; do - file="$i" - sum="${sums[$i]}" - full_path="$helpers_path/$file" - - url="${url_prefix}/$realbranch/helpers/$file" - - if [[ -f "$full_path" ]] && [[ $(get_hash "$full_path") == $sum ]]; then - logger INFO "$file is current" - else - logger WARN "File '$full_path' checksum != '$sum'" - local res=$(get_response_code "$url") - [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$url'" - curl -Ls "$url" > "$full_path" - if [[ ! $? -eq 0 ]]; then - raise_error_and_quit "Failed to fetch the file '$file'. Possible timeout?" - fi - if [[ $(get_hash $full_path) != $sum ]]; then - logger WARN "Downloaded new '$file', but checksum != '$sum'" - fi - logger INFO "Updated '$full_path' to sum '$sum'" - fi - [[ $file == "funcs" ]] && chmod +x "$full_path" - [[ $file == "lan" ]] && chmod +x "$full_path" - done - return 0 -} -fetch_geo_file(){ - # for binary releases - local geo_sum="28ccd75b3e03cf07a7011f22ef0cd69b" - local km_sum="b038fdb8f655798207bd28de3a004706" - local gzip="$helpers_path/ips.csv.gz" - if [[ ! -f $geo_file ]] || [[ $(get_hash $geo_file) != $geo_sum ]]; then - local res=$(get_response_code "$geo_file_url") - [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$geo_file_url'" - curl -Ls "$geo_file_url" > "$gzip" - #force overwrite - gunzip -f "$gzip" - fi - if [[ ! -f $km_helper ]] || [[ $(get_hash $km_helper) != $km_sum ]]; then - local res=$(get_response_code "$km_helper_url") - [[ $res -ne 200 ]] && raise_error_and_quit "Remote resource unavailable: '$km_helper_url'" - curl -Ls "$km_helper_url" > "$km_helper" - chmod +x "$km_helper" - fi -} -fetch_helpers(){ - fetch_a2s - fetch_dzq - fetch_geo_file - fetch_helpers_by_sum - [[ ! -f $share_path/icon.png ]] && freedesktop_dirs - fetch_icons -} -raise_error_and_quit(){ - local msg="$1" - logger CRITICAL "$msg" - fdialog "$msg" - exit 1 -} -test_steam_api(){ - local key="$1" - [[ -z $key ]] && return 1 - local url="https://api.steampowered.com/IGameServersService/GetServerList/v1/?filter=\appid\221100&limit=10&key=$key" - local code=$(curl -ILs "$url" | grep -E "^HTTP") - [[ ! $code =~ 200 ]] && echo 1 - [[ $code =~ 200 ]] && echo 0 -} -test_bm_api(){ - local bm_api="https://api.battlemetrics.com/servers" - local key="$1" - [[ -z $key ]] && return 1 - local code=$(curl -ILs "$bm_api" \ - -H "Authorization: Bearer "$key"" -G \ - -d "filter[game]=$game" \ - | grep -E "^HTTP") - [[ $code =~ 401 ]] && echo 1 - [[ $code =~ 200 ]] && echo 0 -} -find_default_path(){ - _discover(){ - readarray -t paths < <(find / -type d \( -path "/proc" -o -path "*/timeshift" -o -path \ - "/tmp" -o -path "/usr" -o -path "/boot" -o -path "/proc" -o -path "/root" \ - -o -path "/sys" -o -path "/etc" -o -path "/var" -o -path "/lost+found" \) -prune \ - -o -regex ".*Steam/config/libraryfolders.vdf$" -print 2>/dev/null | sed 's@/config/libraryfolders.vdf@@') - - if [[ "${#paths[@]}" -gt 1 ]]; then - echo "100" - default_steam_path=$(printf "%s\n" "${paths[@]}" | $steamsafe_zenity --list --column="paths" --hide-header --text="Found multiple valid Steam paths. Select your default Steam installation." --title="DZGUI") - [[ -z "$default_steam_path" ]] && exit 1 - else - default_steam_path="${paths[0]}" - fi - } - if [[ $is_steam_deck -gt 0 ]]; then - default_steam_path="$HOME/.local/share/Steam" - logger INFO "Set default Steam path to $default_steam_path" - return 0 - fi - local def_path - local ubuntu_path - local flatpak_path - local debian_path - def_path="$HOME/.local/share/Steam" - ubuntu_path="$HOME/.steam/steam" - debian_path="$HOME/.steam/debian-installation" - flatpak_path="$HOME/.var/app/com.valvesoftware.Steam/data/Steam" - - #ubuntu path must precede default path because - #both exist on ubuntu systems, but only ubuntu path contains library data - for i in "$ubuntu_path" "$def_path" "$debian_path" "$flatpak_path"; do - if [[ -d "$i" ]]; then - default_steam_path="$i" - return 0 - fi - done - - local msg="Let DZGUI auto-discover Steam path (accurate, slower)\nSelect the Steam path manually (less accurate, faster)" - local res=$(echo -e "$msg" | $steamsafe_zenity --list \ - --column="Choice" \ - --title="DZGUI" \ - --hide-header \ - --text="Steam is not installed in a standard location." \ - $sd_res) - - case "$res" in - *auto*) _discover > >(pdialog "Scanning paths") ;; - *manual*) - zenity --info --text="\nSelect the top-level entry point to the location where Steam (not DayZ)\nis installed and before entering the \"steamapps\" path.\n\nE.g., if Steam is installed at:\n\"/media/mydrive/Steam\"\n\nCorrect:\n- \"/media/mydrive/Steam\"\n\nIncorrect:\n- \"/media/mydrive/Steam/steamapps/common/DayZ\"\n- \"/media/mydrive/\"" --width=500 && - file_picker ;; - esac -} -file_picker(){ - local path=$($steamsafe_zenity --file-selection --directory) - logger INFO "File picker path resolved to: $path" - if [[ -z "$path" ]]; then - logger WARN "Steam path selection was empty" - return - else - default_steam_path="$path" - fi -} -find_library_folder(){ - local search_path="$1" - steam_path="$(python3 "$helpers_path/vdf2json.py" -i "$1/steamapps/libraryfolders.vdf" \ - | jq -r '.libraryfolders[]|select(.apps|has("221100")).path')" - if [[ ! $? -eq 0 ]] || [[ -z $steam_path ]]; then - logger WARN "Failed to parse Steam path using '$search_path'" - return 1 - fi - logger INFO "Steam path resolved to: $steam_path" -} -create_config(){ - #if old path is malformed and this function is forcibly called, - #wipe paths from memory before entering the loop to force path rediscovery - unset default_steam_path - unset steam_path - - while true; do - local player_input="$($steamsafe_zenity \ - --forms \ - --add-entry="Player name (required for some servers)" \ - --add-entry="Steam API key" \ - --add-entry="BattleMetrics API key (optional)" \ - --title="DZGUI" \ - --text="DZGUI" $sd_res \ - --separator="@")" - #explicitly setting IFS crashes $steamsafe_zenity in loop - #and mapfile does not support high ascii delimiters, so split fields with newline - readarray -t args < <(<<< "$player_input" sed 's/@/\n/g') - name="${args[0]}" - steam_api="${args[1]}" - api_key="${args[2]}" - - if [[ -z $player_input ]]; then - logger WARN "User aborted setup process" - exit 1 - fi - if [[ -z $steam_api ]]; then - tdialog "Steam API key canot be empty" - continue - elif [[ "${#steam_api}" -lt 32 ]] || [[ $(test_steam_api "$steam_api") -eq 1 ]]; then - tdialog "Invalid Steam API key" - continue - fi - if [[ -n $api_key ]] && [[ $(test_bm_api $api_key) -eq 1 ]]; then - tdialog "Invalid BM API key" - continue - fi - while true; do - if [[ -n $steam_path ]]; then - write_config - [[ $? -eq 0 ]] && logger INFO "Successfully created config file" - return 0 - fi - find_default_path - find_library_folder "$default_steam_path" - if [[ -z $steam_path ]]; then - logger raise_error "Steam path was empty" - zenity --question --text="DayZ not found or not installed at the Steam library given. NOTE: if you recently installed DayZ or moved its location, you MUST restart Steam first for these changes to synch." --ok-label="Choose path manually" --cancel-label="Exit" - if [[ $? -eq 0 ]]; then - logger INFO "User selected file picker" - file_picker - find_library_folder "$default_steam_path" - else - fdialog "Failed to find Steam at the provided location" - exit 1 - fi - else - branch="stable" - update_config - logger INFO "Wrote config to '$config_file'" - return 0 - fi - done - done -} -varcheck(){ - local msg="Config file '$config_file' missing. Start first-time setup now?" - local msg2="The Steam paths set in your config file appear to be invalid. Restart first-time setup now?" - if [[ ! -f $config_file ]]; then - qdialog "$msg" "Yes" "Exit" - if [[ $? -eq 1 ]]; then - logger CRITICAL "Config file missing, but user aborted setup" - exit 1 - fi - create_config - fi - source "$config_file" - local workshop_dir="$steam_path/steamapps/workshop/content/$aid" - local game_dir="$steam_path/steamapps/common/DayZ" - if [[ ! -d $steam_path ]] || [[ ! -d $game_dir ]] || [[ ! $(find $game_dir -type f) ]]; then - logger WARN "DayZ path resolved to '$game_dir'" - logger WARN "Workshop path resolved to '$workshop_dir'" - qdialog "$msg2" "Yes" "Exit" - if [[ $? -eq 1 ]]; then - logger CRITICAL "Malformed Steam path, but user aborted setup" - exit 1 - fi - create_config - return 0 - fi - if [[ $src_path != $(realpath "$0") ]]; then - src_path=$(realpath "$0") - update_config - fi -} -is_dzg_downloading(){ - if [[ -d $steam_path ]] && [[ -d $steam_path/downloading/$aid ]]; then - logger WARN "DayZ may be scheduling updates" - return 0 - fi -} -is_steam_running(){ - local res=$(ps aux | grep "steamwebhelper" | grep -v grep) - if [[ -z $res ]]; then - logger WARN "Steam may not be running" - tdialog "Is Steam running? For best results, make sure Steam is open in the background." - return 0 - fi -} -get_response_code(){ - local url="$1" - curl -Ls -I -o /dev/null -w "%{http_code}" "$url" -} -test_connection(){ - source "$config_file" - declare -A hr - local res1 - local res2 - local str="No connection could be established to the remote server" - hr=( - ["steampowered.com"]="https://api.steampowered.com/IGameServersService/GetServerList/v1/?key=$steam_api" - ["github.com"]="https://github.com/$author" - ["codeberg.org"]="https://codeberg.org/$author" - ) - # steam API is mandatory, except on initial setup - if [[ -n $steam_api ]]; then - res=$(get_response_code "${hr["steampowered.com"]}") - [[ $res -ne 200 ]] && raise_error_and_quit "$str ("steampowered.com")" - fi - - res=$(get_response_code "${hr["github.com"]}") - if [[ $res -ne 200 ]]; then - logger WARN "Remote host '${hr["github.com"]}' unreachable', trying fallback" - remote_host=cb - logger INFO "Set remote host to '${hr["codeberg.org"]}'" - res=$(get_response_code "${hr["codeberg.org"]}") - [[ $res -ne 200 ]] && raise_error_and_quit "$str (${hr["codeberg.org"]})" - fi - if [[ $remote_host == "cb" ]]; then - url_prefix="https://codeberg.org/$author/$repo/raw/branch" - releases_url="https://codeberg.org/$author/$repo/releases/download/browser" - stable_url="$url_prefix/dzgui" - testing_url="$url_prefix/testing" - km_helper_url="$releases_url/latlon" - geo_file_url="$releases_url/ips.csv.gz" - fi -} -legacy_cols(){ - [[ ! -f $cols_file ]] && return - local has=$(< "$cols_file" jq '.cols|has("Queue")') - [[ $has == "true" ]] && return - < $cols_file jq '.cols += { "Queue": 120 }' > $cols_file.new && - mv $cols_file.new $cols_file -} -stale_mod_signatures(){ - local workshop_dir="$steam_path/steamapps/workshop/content/$aid" - if [[ -d $workshop_dir ]]; then - readarray -t old_mod_ids < <(awk -F, '{print $1}' $versions_file) - for ((i=0; i<${#old_mod_ids[@]}; ++i)); do - if [[ ! -d $workshop_dir/${old_mod_ids[$i]} ]]; then - "$HOME/.local/share/$app_name/helpers/funcs" "align_local" "${old_mod_ids[$i]}" - fi - done - fi - -} -create_new_links(){ - "$HOME/.local/share/$app_name/helpers/funcs" "update_symlinks" -} -initial_setup(){ - setup_dirs - setup_state_files - depcheck - check_pyver - test_gobject - watcher_deps - check_architecture - test_connection -# fetch_helpers > >(pdialog "Checking helper files") - varcheck - source "$config_file" - lock - legacy_vars - legacy_cols - check_version - check_map_count - steam_deps - migrate_files - stale_symlinks - stale_mod_signatures - create_new_links - local_latlon - is_steam_running - is_dzg_downloading - print_config_vals -} -uninstall(){ - _full(){ - for i in "$config_path" "$state_path" "$cache_path" "$share_path"; do - echo "Deleting the path '$i'" - rm -rf "$i" - done - } - _partial(){ - for i in "$cache_path" "$share_path"; do - echo "Deleting the path '$i'" - rm -rf "$i" - done - } - local choice=$($steamsafe_zenity \ - --list \ - --radiolist \ - --column="a" \ - --column="b" \ - --hide-header \ - --text="Choose an uninstall routine below." \ - TRUE "Keep user config files" \ - FALSE "Delete all DZGUI files" \ - --title="DZGUI" - ) - - case "$choice" in - "Keep user config files") - _partial - ;; - "Delete all DZGUI files") - _full - ;; - "") - echo "User aborted uninstall process" - exit 1 - ;; - esac - local self="$(realpath "$0")" - echo "Deleting '$self'" - rm "$self" - echo "Uninstall routine complete" -} -main(){ - local zenv=$(zenity --version 2>/dev/null) - [[ -z $zenv ]] && { echo "Requires zenity >= ${deps[$steamsafe_zenity]}"; exit 1; } - if [[ $1 == "--uninstall" ]] || [[ $1 == "-u" ]]; then - uninstall && - exit 0 - fi - if [[ $1 == "--steam" ]] || [[ $1 == "-s" ]]; then - export STEAM_LAUNCH=1 - fi - - set_im_module - - printf "Initializing setup...\n" - initial_setup - - printf "All OK. Kicking off UI...\n" - python3 "$ui_helper" "--init-ui" "$version" "$is_steam_deck" -} -main "$@" -#TODO: tech debt: cruddy handling for steam forking -[[ $? -eq 1 ]] && pkill -f dzgui.sh From f3b3f79bfb77af0d963a75fa3a068e035ea0354d Mon Sep 17 00:00:00 2001 From: aclist <92275929+aclist@users.noreply.github.com> Date: Sun, 9 Feb 2025 19:53:25 +0900 Subject: [PATCH 99/99] chore: back up templates from main --- .github/ISSUE_TEMPLATE/bug_report.yml | 53 +++++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 1 + .github/ISSUE_TEMPLATE/feature.yml | 47 ++++++++++++++++++++++++ .github/ISSUE_TEMPLATE/trouble.yml | 46 +++++++++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature.yml create mode 100644 .github/ISSUE_TEMPLATE/trouble.yml diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..0ad8d65 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,53 @@ +name: Bug report +description: Submit bugs that affect functionality here +title: "[BUG] Your title here" +labels: ["bug"] +assignees: + - aclist +body: + - type: checkboxes + id: kb + attributes: + label: Did you check if this issue already exists? + options: + - label: I have checked the [Knowledge Base](https://aclist.github.io/dzgui/kb.html) and searched through [past issues](https://github.com/aclist/dztui/issues?q=is%3Aissue+is%3Aclosed) and did not find my issue there. + required: true + - type: dropdown + id: device + attributes: + label: Device type + options: + - Desktop PC + - Steam Deck + default: 0 + validations: + required: true + - type: input + id: version + attributes: + label: DZGUI version + validations: + required: true + placeholder: "5.6.0" + - type: input + id: distro + attributes: + label: Linux distribution + validations: + required: true + placeholder: "Arch Linux" + - type: textarea + id: what-happened + attributes: + label: Describe the bug + description: What did you expect to happen? + placeholder: "E.g., When doing X, Y occurred. Include as much detail as possible." + validations: + required: true + - type: textarea + id: logs + attributes: + label: Additional log output + description: Attach the file `$HOME/.local/state/dzgui/DZGUI_DEBUG.log` by clicking this area to highlight it and then dragging the file in. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..3ba13e0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: false diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml new file mode 100644 index 0000000..3b350f2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature.yml @@ -0,0 +1,47 @@ +name: Feature suggestion +description: Submit requests for new features here +title: "[FEAT] Your title here" +labels: ["enhancement"] +assignees: + - aclist +body: + - type: dropdown + id: device + attributes: + label: Device type + options: + - Desktop PC + - Steam Deck + default: 0 + validations: + required: true + - type: input + id: version + attributes: + label: DZGUI version + validations: + required: true + placeholder: "5.6.0" + - type: input + id: distro + attributes: + label: Linux distribution + validations: + required: true + placeholder: "Arch Linux" + - type: textarea + id: what-happened + attributes: + label: Describe the feature + description: A clear and detailed description + placeholder: "E.g., Add a dialog to the Options menu that automatically lets the user do Y" + validations: + required: true + - type: textarea + id: why + attributes: + label: Describe the benefit + description: How will this feature benefit large numbers of users? + placeholder: "E.g., Currently, users have to manually do X to achieve Y. Implementing this feature would achieve A, B, and C." + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/trouble.yml b/.github/ISSUE_TEMPLATE/trouble.yml new file mode 100644 index 0000000..1c25e69 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/trouble.yml @@ -0,0 +1,46 @@ +name: Troubleshooting +description: Submit user error/troubleshooting questions here +title: "[HELP] Your title here" +labels: ["troubleshooting"] +assignees: + - aclist +body: + - type: dropdown + id: device + attributes: + label: Device type + options: + - Desktop PC + - Steam Deck + default: 0 + validations: + required: true + - type: input + id: version + attributes: + label: DZGUI version + validations: + required: true + placeholder: "5.6.0" + - type: input + id: distro + attributes: + label: Linux distribution + validations: + required: true + placeholder: "Arch Linux" + - type: textarea + id: what-happened + attributes: + label: Describe the issue + description: A detailed description. What did you expect to happen? + placeholder: "Include as much detail as possible and state the steps leading up to the problem. E.g., First I do this, then I do this, then this happens." + validations: + required: true + - type: textarea + id: logs + attributes: + label: Additional log output + description: Attach the file `$HOME/.local/state/dzgui/DZGUI_DEBUG.log` by clicking this area to highlight it and then dragging the file in. + validations: + required: false