From c86564fb2f4821650fd19e1b4ddb427ac2e277eb Mon Sep 17 00:00:00 2001 From: Philip Colangelo Date: Wed, 11 Dec 2024 17:55:43 -0500 Subject: [PATCH] Code to validate report file - robust pixmap handling - better pixmap quality - copy png instead of grab() - scale loading gif - multimodel report support - recompiled gui with pyside6.8.1 --- setup.py | 2 +- src/digest/dialog.py | 14 +- src/digest/histogramchartwidget.py | 2 +- src/digest/main.py | 61 +- src/digest/model_class/digest_model.py | 10 +- src/digest/model_class/digest_onnx_model.py | 52 +- src/digest/model_class/digest_report_model.py | 47 +- src/digest/modelsummary.py | 8 + src/digest/multi_model_analysis.py | 104 ++- src/digest/multi_model_selection_page.py | 59 +- src/digest/resource_rc.py | 36 +- src/digest/ui/freezeinputs_ui.py | 2 +- src/digest/ui/huggingface_page_ui.py | 2 +- src/digest/ui/mainwindow_ui.py | 698 +++++++----------- src/digest/ui/modelsummary.ui | 43 +- src/digest/ui/modelsummary_ui.py | 41 +- src/digest/ui/multimodelanalysis_ui.py | 2 +- src/digest/ui/multimodelselection_page.ui | 63 +- src/digest/ui/multimodelselection_page_ui.py | 57 +- src/digest/ui/nodessummary_ui.py | 2 +- test/resnet18_reports/resnet18_heatmap.png | Bin 103019 -> 127496 bytes test/resnet18_reports/resnet18_report.yaml | 7 +- test/test_gui.py | 2 +- 23 files changed, 680 insertions(+), 634 deletions(-) diff --git a/setup.py b/setup.py index ca21f4a..b2ad16d 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name="digestai", - version="1.0.0", + version="1.1.0", description="Model analysis toolkit", author="Philip Colangelo, Daniel Holanda", packages=find_packages(where="src"), diff --git a/src/digest/dialog.py b/src/digest/dialog.py index d2f834e..ae9986d 100644 --- a/src/digest/dialog.py +++ b/src/digest/dialog.py @@ -125,13 +125,23 @@ class WarnDialog(QDialog): def __init__(self, warning_message: str, parent=None): super().__init__(parent) - self.setWindowTitle("Warning Message") + self.setWindowIcon(QIcon(":/assets/images/digest_logo_500.jpg")) + + self.setWindowTitle("Warning Message") + self.setWindowFlags(Qt.WindowType.Dialog) self.setMinimumWidth(300) + self.setWindowModality(Qt.WindowModality.WindowModal) + layout = QVBoxLayout() # Application Version - layout.addWidget(QLabel("Something went wrong")) + layout.addWidget(QLabel("Warning")) layout.addWidget(QLabel(warning_message)) + + ok_button = QPushButton("OK") + ok_button.clicked.connect(self.accept) # Close dialog when clicked + layout.addWidget(ok_button) + self.setLayout(layout) diff --git a/src/digest/histogramchartwidget.py b/src/digest/histogramchartwidget.py index 97d5f16..9dbe557 100644 --- a/src/digest/histogramchartwidget.py +++ b/src/digest/histogramchartwidget.py @@ -140,7 +140,7 @@ def __init__(self, *args, **kwargs): super(StackedHistogramWidget, self).__init__(*args, **kwargs) self.plot_widget = pg.PlotWidget() - self.plot_widget.setMaximumHeight(150) + self.plot_widget.setMaximumHeight(200) plot_item = self.plot_widget.getPlotItem() if plot_item: plot_item.setContentsMargins(0, 0, 0, 0) diff --git a/src/digest/main.py b/src/digest/main.py index fe46bf0..dfdab4a 100644 --- a/src/digest/main.py +++ b/src/digest/main.py @@ -3,6 +3,7 @@ import os import sys +import shutil import argparse from datetime import datetime from typing import Dict, Tuple, Optional, Union @@ -33,7 +34,7 @@ QMenu, ) from PySide6.QtGui import QDragEnterEvent, QDropEvent, QPixmap, QMovie, QIcon, QFont -from PySide6.QtCore import Qt +from PySide6.QtCore import Qt, QSize from digest.dialog import StatusDialog, InfoDialog, WarnDialog, ProgressDialog from digest.thread import StatsThread, SimilarityThread @@ -309,9 +310,9 @@ def update_cards( digest_model: DigestModel, unique_id: str, ): - self.digest_models[unique_id].model_flops = digest_model.model_flops + self.digest_models[unique_id].flops = digest_model.flops self.digest_models[unique_id].node_type_flops = digest_model.node_type_flops - self.digest_models[unique_id].model_parameters = digest_model.model_parameters + self.digest_models[unique_id].parameters = digest_model.parameters self.digest_models[unique_id].node_type_parameters = ( digest_model.node_type_parameters ) @@ -326,10 +327,10 @@ def update_cards( isinstance(widget, modelSummary) and widget.digest_model.unique_id == unique_id ): - if digest_model.model_flops is None: + if digest_model.flops is None: flops_str = "--" else: - flops_str = format(digest_model.model_flops, ",") + flops_str = format(digest_model.flops, ",") # Set up the pie chart pie_chart_labels, pie_chart_data = zip( @@ -390,10 +391,20 @@ def update_similarity_widget( break if completed_successfully and isinstance(widget, modelSummary) and png_filepath: - widget_width = widget.ui.similarityWidget.width() - widget.ui.similarityImg.setPixmap( - QPixmap(png_filepath).scaledToWidth(widget_width) + widget.load_gif.stop() + widget.ui.similarityImg.clear() + widget_width = widget.ui.similarityImg.width() + + pixmap = QPixmap(png_filepath) + aspect_ratio = pixmap.width() / pixmap.height() + target_height = int(widget_width / aspect_ratio) + pixmap_scaled = pixmap.scaled( + QSize(widget_width, target_height), + Qt.AspectRatioMode.KeepAspectRatio, + Qt.TransformationMode.SmoothTransformation, ) + + widget.ui.similarityImg.setPixmap(pixmap_scaled) widget.ui.similarityImg.setText("") widget.ui.similarityImg.setCursor(Qt.CursorShape.PointingHandCursor) @@ -429,7 +440,8 @@ def update_similarity_widget( widget.ui.similarityCorrelation.setText(text) elif isinstance(widget, modelSummary): # Remove animation and set text to failing message - widget.ui.similarityImg.setMovie(QMovie()) + widget.load_gif.stop() + widget.ui.similarityImg.clear() widget.ui.similarityImg.setText("Failed to perform similarity analysis") else: print( @@ -666,10 +678,6 @@ def load_onnx(self, filepath: str): self.ui.singleModelWidget.show() progress.step() - movie = QMovie(":/assets/gifs/load.gif") - model_summary.ui.similarityImg.setMovie(movie) - movie.start() - # Start similarity Analysis # Note: Should only be started after the model tab has been created png_tmp_path = os.path.join(self.temp_dir.name, model_id) @@ -716,6 +724,16 @@ def load_report(self, filepath: str): digest_model = DigestReportModel(filepath) + if not digest_model.is_valid: + progress.close() + invalid_yaml_dialog = StatusDialog( + title="Warning", + status_message=f"YAML file {filepath} is not a valid digest report", + ) + invalid_yaml_dialog.show() + + return + model_id = digest_model.unique_id # There is no sense in offering to save the report @@ -739,9 +757,7 @@ def load_report(self, filepath: str): model_summary.ui.modelFilename.setText(filepath) model_summary.ui.generatedDate.setText(datetime.now().strftime("%B %d, %Y")) - model_summary.ui.parameters.setText( - format(digest_model.model_parameters, ",") - ) + model_summary.ui.parameters.setText(format(digest_model.parameters, ",")) node_type_counts = digest_model.node_type_counts if len(node_type_counts) < 15: @@ -751,7 +767,6 @@ def load_report(self, filepath: str): model_summary.ui.opHistogramChart.bar_spacing = bar_spacing model_summary.ui.opHistogramChart.set_data(node_type_counts) - model_summary.ui.nodes.setText(str(sum(node_type_counts.values()))) progress.step() @@ -962,13 +977,13 @@ def save_reports(self): ) digest_model.save_node_type_counts_csv_report(node_type_filepath) - # Save the similarity image - similarity_png = self.model_similarity_report[ + # Save (copy) the similarity image + png_file_path = self.model_similarity_thread[ digest_model.unique_id - ].enlarged_image_label.grab() - similarity_png.save( - os.path.join(save_directory, f"{model_name}_heatmap.png"), "PNG" - ) + ].png_filepath + png_save_path = os.path.join(save_directory, f"{model_name}_heatmap.png") + if png_file_path and os.path.exists(png_file_path): + shutil.copy(png_file_path, png_save_path) # Save the text report txt_report_filepath = os.path.join(save_directory, f"{model_name}_report.txt") diff --git a/src/digest/model_class/digest_model.py b/src/digest/model_class/digest_model.py index 3c2fe12..9064184 100644 --- a/src/digest/model_class/digest_model.py +++ b/src/digest/model_class/digest_model.py @@ -94,15 +94,15 @@ def __init__(self, *args, **kwargs): class DigestModel(ABC): - def __init__(self, filepath: str, model_name: str): + def __init__(self, filepath: str, model_name: str, model_type: SupportedModelTypes): # Public members exposed to the API self.unique_id: str = str(uuid4()) self.filepath: Optional[str] = filepath self.model_name: str = model_name - self.model_type: Optional[SupportedModelTypes] = None + self.model_type: SupportedModelTypes = model_type self.node_type_counts: NodeTypeCounts = NodeTypeCounts() - self.model_flops: Optional[int] = None - self.model_parameters: int = 0 + self.flops: Optional[int] = None + self.parameters: int = 0 self.node_type_flops: Dict[str, int] = {} self.node_type_parameters: Dict[str, int] = {} self.node_data = NodeData() @@ -118,7 +118,7 @@ def get_node_shape_counts(self) -> NodeShapeCounts: return tensor_shape_counter @abstractmethod - def parse_model_nodes(self, *args) -> None: + def parse_model_nodes(self, *args, **kwargs) -> None: pass @abstractmethod diff --git a/src/digest/model_class/digest_onnx_model.py b/src/digest/model_class/digest_onnx_model.py index c8b5af3..35aad1d 100644 --- a/src/digest/model_class/digest_onnx_model.py +++ b/src/digest/model_class/digest_onnx_model.py @@ -1,7 +1,7 @@ # Copyright(C) 2024 Advanced Micro Devices, Inc. All rights reserved. import os -from typing import List, Dict, Optional, Tuple, Union, cast +from typing import List, Dict, Optional, Tuple, cast from datetime import datetime from collections import OrderedDict import yaml @@ -11,7 +11,6 @@ from digest.model_class.digest_model import ( DigestModel, SupportedModelTypes, - NodeTypeCounts, NodeInfo, TensorData, TensorInfo, @@ -27,7 +26,7 @@ def __init__( model_name: str = "", save_proto: bool = True, ) -> None: - super().__init__(onnx_filepath, model_name) + super().__init__(onnx_filepath, model_name, SupportedModelTypes.ONNX) self.model_type = SupportedModelTypes.ONNX @@ -185,11 +184,11 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: # Initialze to zero so we can accumulate. Set to None during the # model FLOPs calculation if it errors out. - self.model_flops = 0 + self.flops = 0 # Check to see if the model inputs have any dynamic shapes if onnx_utils.get_dynamic_input_dims(onnx_model): - self.model_flops = None + self.flops = None try: onnx_model, _ = onnx_utils.optimize_onnx_model(onnx_model) @@ -199,7 +198,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: ) except Exception as e: # pylint: disable=broad-except print(f"ONNX utils: {str(e)}") - self.model_flops = None + self.flops = None # If the ONNX model contains one of the following unsupported ops, then this # function will return None since the FLOP total is expected to be incorrect @@ -250,7 +249,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: if all(isinstance(dim, int) for dim in input_tensor.shape): input_parameters = int(np.prod(np.array(input_tensor.shape))) node_info.parameters += input_parameters - self.model_parameters += input_parameters + self.parameters += input_parameters self.node_type_parameters[node.op_type] = ( self.node_type_parameters.get(node.op_type, 0) + input_parameters @@ -267,7 +266,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: self.node_data[node.name] = node_info if node.op_type in unsupported_ops: - self.model_flops = None + self.flops = None node_info.flops = None try: @@ -288,7 +287,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: isinstance(dim, int) for dim in input_a ) or not isinstance(input_b[-1], int): node_info.flops = None - self.model_flops = None + self.flops = None continue node_info.flops = int( @@ -307,7 +306,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: isinstance(dim, int) for dim in input_b ): node_info.flops = None - self.model_flops = None + self.flops = None continue node_info.flops = int( @@ -325,7 +324,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: isinstance(dim, int) for dim in w_shape ): node_info.flops = None - self.model_flops = None + self.flops = None continue mm_dims = [ @@ -371,7 +370,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: if not all(isinstance(dim, int) for dim in x_shape): node_info.flops = None - self.model_flops = None + self.flops = None continue x_shape_ints = cast(List[int], x_shape) @@ -458,7 +457,7 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: if not all(isinstance(dim, int) for dim in x_shape): node_info.flops = None - self.model_flops = None + self.flops = None continue x_shape_ints = cast(List[int], x_shape) @@ -498,12 +497,12 @@ def parse_model_nodes(self, onnx_model: onnx.ModelProto) -> None: except IndexError as err: print(f"Error parsing node {node.name}: {err}") node_info.flops = None - self.model_flops = None + self.flops = None continue # Update the model level flops count - if node_info.flops is not None and self.model_flops is not None: - self.model_flops += node_info.flops + if node_info.flops is not None and self.flops is not None: + self.flops += node_info.flops # Update the node type flops count self.node_type_flops[node.op_type] = ( @@ -523,7 +522,8 @@ def save_yaml_report(self, filepath: str) -> None: yaml_data = { "report_date": report_date, - "onnx_file": self.filepath, + "model_type": self.model_type.value, + "model_file": self.filepath, "model_name": self.model_name, "model_version": self.model_version, "graph_name": self.graph_name, @@ -533,8 +533,8 @@ def save_yaml_report(self, filepath: str) -> None: "opset": self.opset, "import_list": dict(self.imports), "graph_nodes": sum(self.node_type_counts.values()), - "model_parameters": self.model_parameters, - "model_flops": self.model_flops, + "parameters": self.parameters, + "flops": self.flops, "node_type_counts": dict(self.node_type_counts), "node_type_flops": dict(self.node_type_flops), "node_type_parameters": self.node_type_parameters, @@ -555,6 +555,7 @@ def save_text_report(self, filepath: str) -> None: with open(filepath, "w", encoding="utf-8") as f_p: f_p.write(f"Report created on {report_date}\n") + f_p.write(f"Model type: {self.model_type.name}\n") if self.filepath: f_p.write(f"ONNX file: {self.filepath}\n") f_p.write(f"Name of the model: {self.model_name}\n") @@ -569,9 +570,9 @@ def save_text_report(self, filepath: str) -> None: f_p.write("\n") f_p.write(f"Total graph nodes: {sum(self.node_type_counts.values())}\n") - f_p.write(f"Number of parameters: {self.model_parameters}\n") - if self.model_flops: - f_p.write(f"Number of FLOPs: {self.model_flops}\n") + f_p.write(f"Number of parameters: {self.parameters}\n") + if self.flops: + f_p.write(f"Number of FLOPs: {self.flops}\n") f_p.write("\n") table_op_intensity = PrettyTable() @@ -582,7 +583,7 @@ def save_text_report(self, filepath: str) -> None: [ op_type, count, - 100.0 * float(count) / float(self.model_flops), + 100.0 * float(count) / float(self.flops), ] ) @@ -647,8 +648,3 @@ def save_text_report(self, filepath: str) -> None: f_p.write("Output Tensor(s) Information:\n") f_p.write(output_table.get_string()) f_p.write("\n\n") - - def get_node_type_counts(self) -> Union[NodeTypeCounts, None]: - if not self.node_type_counts and self.model_proto: - self.node_type_counts = onnx_utils.get_node_type_counts(self.model_proto) - return self.node_type_counts if self.node_type_counts else None diff --git a/src/digest/model_class/digest_report_model.py b/src/digest/model_class/digest_report_model.py index 5027ee4..4478285 100644 --- a/src/digest/model_class/digest_report_model.py +++ b/src/digest/model_class/digest_report_model.py @@ -49,12 +49,18 @@ def __init__( self.model_type = SupportedModelTypes.REPORT + self.is_valid = self.validate_yaml(report_filepath) + + if not self.is_valid: + print(f"The yaml file {report_filepath} is not a valid digest report.") + return + self.model_data = OrderedDict() with open(report_filepath, "r", encoding="utf-8") as yaml_f: self.model_data = yaml.safe_load(yaml_f) model_name = self.model_data["model_name"] - super().__init__(report_filepath, model_name) + super().__init__(report_filepath, model_name, SupportedModelTypes.REPORT) self.similarity_heatmap_path: Optional[str] = None self.node_data = NodeData() @@ -106,8 +112,8 @@ def __init__( self.node_data[node_name] = node_info # Unpack the model type agnostic values - self.model_flops = self.model_data["model_flops"] - self.model_parameters = self.model_data["model_parameters"] + self.flops = self.model_data["flops"] + self.parameters = self.model_data["parameters"] self.node_type_flops = self.model_data["node_type_flops"] self.node_type_parameters = self.model_data["node_type_parameters"] self.node_type_counts = self.model_data["node_type_counts"] @@ -125,6 +131,41 @@ def __init__( } ) + def validate_yaml(self, report_file_path: str) -> bool: + """Check that the provided yaml file is indeed a Digest Report file.""" + expected_keys = [ + "report_date", + "model_file", + "model_type", + "model_name", + "flops", + "node_type_flops", + "node_type_parameters", + "node_type_counts", + "input_tensors", + "output_tensors", + ] + try: + with open(report_file_path, "r", encoding="utf-8") as file: + yaml_content = yaml.safe_load(file) + + if not isinstance(yaml_content, dict): + print("Error: YAML content is not a dictionary") + return False + + for key in expected_keys: + if key not in yaml_content: + # print(f"Error: Missing required key '{key}'") + return False + + return True + except yaml.YAMLError as _: + # print(f"Error parsing YAML file: {e}") + return False + except IOError as _: + # print(f"Error reading file: {e}") + return False + def parse_model_nodes(self) -> None: """There are no model nodes to parse""" diff --git a/src/digest/modelsummary.py b/src/digest/modelsummary.py index 5aa43c9..a92b756 100644 --- a/src/digest/modelsummary.py +++ b/src/digest/modelsummary.py @@ -7,6 +7,8 @@ # pylint: disable=no-name-in-module from PySide6.QtWidgets import QWidget +from PySide6.QtGui import QMovie +from PySide6.QtCore import QSize from onnx import ModelProto @@ -37,6 +39,12 @@ def __init__( self.model_proto: Optional[ModelProto] = None model_name: str = digest_model.model_name if digest_model.model_name else "" + self.load_gif = QMovie(":/assets/gifs/load.gif") + # We set the size of the GIF to half the original + self.load_gif.setScaledSize(QSize(214, 120)) + self.ui.similarityImg.setMovie(self.load_gif) + self.load_gif.start() + # There is no freezing if the model is not ONNX self.ui.freezeButton.setVisible(False) self.freeze_inputs: Optional[FreezeInputs] = None diff --git a/src/digest/multi_model_analysis.py b/src/digest/multi_model_analysis.py index e63de50..6848403 100644 --- a/src/digest/multi_model_analysis.py +++ b/src/digest/multi_model_analysis.py @@ -52,11 +52,18 @@ def __init__( self.global_node_shape_counter: NodeShapeCounts = defaultdict(Counter) # Holds the data for all models statistics - self.global_model_data: Dict[str, Dict[str, Union[int, None]]] = {} + self.global_model_data: Dict[str, Dict[str, Union[int, str, None]]] = {} progress = ProgressDialog("", len(model_list), self) - header_labels = ["Model", "Opset", "Total Nodes", "Parameters", "FLOPs"] + header_labels = [ + "Model Name", + "Model Type", + "Opset", + "Total Nodes", + "Parameters", + "FLOPs", + ] self.ui.dataTable.setRowCount(len(model_list)) self.ui.dataTable.setColumnCount(len(header_labels)) self.ui.dataTable.setHorizontalHeaderLabels(header_labels) @@ -64,24 +71,27 @@ def __init__( for row, model in enumerate(model_list): - if not isinstance(model, DigestOnnxModel): - continue - item = QTableWidgetItem(str(model.model_name)) self.ui.dataTable.setItem(row, 0, item) - item = QTableWidgetItem(str(model.opset)) + item = QTableWidgetItem(str(model.model_type.name)) self.ui.dataTable.setItem(row, 1, item) - item = QTableWidgetItem(str(len(model.node_data))) + if isinstance(model, DigestOnnxModel): + item = QTableWidgetItem(str(model.opset)) + elif isinstance(model, DigestReportModel): + item = QTableWidgetItem(str(model.model_data.get("opset", "NA"))) self.ui.dataTable.setItem(row, 2, item) - item = QTableWidgetItem(str(model.model_parameters)) + item = QTableWidgetItem(str(len(model.node_data))) self.ui.dataTable.setItem(row, 3, item) - item = QTableWidgetItem(str(model.model_flops)) + item = QTableWidgetItem(str(model.parameters)) self.ui.dataTable.setItem(row, 4, item) + item = QTableWidgetItem(str(model.flops)) + self.ui.dataTable.setItem(row, 5, item) + self.ui.dataTable.resizeColumnsToContents() self.ui.dataTable.resizeRowsToContents() @@ -93,41 +103,59 @@ def __init__( if digest_model.model_name is None: digest_model.model_name = f"model_{i}" - if not isinstance(digest_model, DigestOnnxModel): - continue - - if digest_model.model_proto: - dynamic_input_dims = onnx_utils.get_dynamic_input_dims( - digest_model.model_proto - ) - if dynamic_input_dims: - print( - "Found the following non-static input dims in your model. " - "It is recommended to make all dims static before generating reports." + if isinstance(digest_model, DigestOnnxModel): + opset = digest_model.opset + if digest_model.model_proto: + dynamic_input_dims = onnx_utils.get_dynamic_input_dims( + digest_model.model_proto ) - for dynamic_shape in dynamic_input_dims: - print(f"dim: {dynamic_shape}") + if dynamic_input_dims: + print( + "Found the following non-static input dims in your model. " + "It is recommended to make all dims static before generating reports." + ) + for dynamic_shape in dynamic_input_dims: + print(f"dim: {dynamic_shape}") + + elif isinstance(digest_model, DigestReportModel): + opset = digest_model.model_data.get("opset", "") # Update the global model dictionary - if digest_model.model_name in self.global_model_data: + if digest_model.unique_id in self.global_model_data: print( - f"Warning! {digest_model.model_name} has already been processed, " + f"Warning! {digest_model.model_name} with id " + f"{digest_model.unique_id} has already been processed, " "skipping the duplicate model." ) + continue - self.global_model_data[digest_model.model_name] = { - "opset": digest_model.opset, - "parameters": digest_model.model_parameters, - "flops": digest_model.model_flops, + self.global_model_data[digest_model.unique_id] = { + "model_name": digest_model.model_name, + "model_type": digest_model.model_type.name, + "opset": opset, + "parameters": digest_model.parameters, + "flops": digest_model.flops, } - node_type_counter[digest_model.model_name] = ( - digest_model.get_node_type_counts() + # Here we are creating a name that is a combination of the model name + # and the model type. + node_type_counter_key = ( + f"{digest_model.model_name}-{digest_model.model_type.value}" ) + if node_type_counter_key in node_type_counter: + print( + f"Warning! {digest_model.model_name} with model type " + f"{digest_model.model_type.value} has already been added to " + "to the stacked histogram, skipping." + ) + continue + + node_type_counter[node_type_counter_key] = digest_model.node_type_counts + # Update global data structure for node type counter self.global_node_type_counter.update( - node_type_counter[digest_model.model_name] + node_type_counter[node_type_counter_key] ) node_shape_counts = digest_model.get_node_shape_counts() @@ -258,10 +286,18 @@ def save_reports(self): ) as csvfile: writer = csv.writer(csvfile) rows = [ - [model, data["opset"], data["parameters"], data["flops"]] - for model, data in self.global_model_data.items() + [ + data["model_name"], + data["model_type"], + data["opset"], + data["parameters"], + data["flops"], + ] + for _, data in self.global_model_data.items() ] - writer.writerow(["Model", "Opset", "Parameters", "FLOPs"]) + writer.writerow( + ["Model Name", "Model Type", "Opset", "Parameters", "FLOPs"] + ) writer.writerows(rows) if save_individual_reports or save_multi_reports: diff --git a/src/digest/multi_model_selection_page.py b/src/digest/multi_model_selection_page.py index 42863a1..ddf2e90 100644 --- a/src/digest/multi_model_selection_page.py +++ b/src/digest/multi_model_selection_page.py @@ -93,8 +93,10 @@ def __init__( self.ui.warningLabel.hide() self.item_model = QStandardItemModel() self.item_model.itemChanged.connect(self.update_num_selected_label) - self.ui.selectAllBox.setCheckState(Qt.CheckState.Checked) - self.ui.selectAllBox.stateChanged.connect(self.update_list_view_items) + self.ui.radioAll.setChecked(True) + self.ui.radioAll.toggled.connect(self.update_list_view_items) + self.ui.radioONNX.toggled.connect(self.update_list_view_items) + self.ui.radioReports.toggled.connect(self.update_list_view_items) self.ui.selectFolderBtn.clicked.connect(self.openFolder) self.ui.duplicateLabel.hide() self.ui.modelListView.setModel(self.item_model) @@ -178,10 +180,20 @@ def update_num_selected_label(self): self.ui.openAnalysisBtn.setEnabled(False) def update_list_view_items(self): - state = self.ui.selectAllBox.checkState() + radio_all_state = self.ui.radioAll.isChecked() + radio_onnx_state = self.ui.radioONNX.isChecked() + radio_reports_state = self.ui.radioReports.isChecked() for row in range(self.item_model.rowCount()): item = self.item_model.item(row) - item.setCheckState(state) + value = item.data(Qt.ItemDataRole.DisplayRole) + if radio_all_state: + item.setCheckState(Qt.CheckState.Checked) + elif os.path.splitext(value)[-1] == ".onnx" and radio_onnx_state: + item.setCheckState(Qt.CheckState.Checked) + elif os.path.splitext(value)[-1] == ".yaml" and radio_reports_state: + item.setCheckState(Qt.CheckState.Checked) + else: + item.setCheckState(Qt.CheckState.Unchecked) def set_directory(self, directory: str): """ @@ -197,15 +209,30 @@ def set_directory(self, directory: str): return progress = ProgressDialog("Searching Directory for ONNX Files", 0, self) + onnx_file_list = list( glob.glob(os.path.join(directory, "**/*.onnx"), recursive=True) ) + onnx_file_list = [os.path.normpath(model_file) for model_file in onnx_file_list] + + yaml_file_list = list( + glob.glob(os.path.join(directory, "**/*.yaml"), recursive=True) + ) + yaml_file_list = [os.path.normpath(model_file) for model_file in yaml_file_list] + + # Filter out YAML files that are not valid reports + report_file_list = [] + for yaml_file in yaml_file_list: + digest_report = DigestReportModel(yaml_file) + if digest_report.is_valid: + report_file_list.append(yaml_file) + + total_num_models = len(onnx_file_list) + len(report_file_list) - onnx_file_list = [os.path.normpath(onnx_file) for onnx_file in onnx_file_list] serialized_models_paths: defaultdict[bytes, List[str]] = defaultdict(list) progress.close() - progress = ProgressDialog("Loading ONNX Models", len(onnx_file_list), self) + progress = ProgressDialog("Loading Models", total_num_models, self) memory_limit_percentage = 90 models_loaded = 0 @@ -215,7 +242,9 @@ def set_directory(self, directory: str): break try: models_loaded += 1 - model = onnx.load(filepath, load_external_data=False) + if os.path.splitext(filepath)[-1] == ".onnx": + model = onnx.load(filepath, load_external_data=False) + serialized_models_paths[model.SerializeToString()].append(filepath) dialog_msg = ( "Warning: System RAM has exceeded the threshold of " f"{memory_limit_percentage}%. No further models will be loaded. " @@ -226,7 +255,7 @@ def set_directory(self, directory: str): parent=self, ): self.update_warning_label( - f"Loaded only {models_loaded - 1} out of {len(onnx_file_list)} models " + f"Loaded only {models_loaded - 1} out of {total_num_models} models " f"as memory consumption has reached {memory_limit_percentage}% of " "system memory. Preventing further loading of models." ) @@ -237,15 +266,13 @@ def set_directory(self, directory: str): break else: self.ui.warningLabel.hide() - serialized_models_paths[model.SerializeToString()].append(filepath) + except DecodeError as error: print(f"Error decoding model {filepath}: {error}") progress.close() - progress = ProgressDialog( - "Processing ONNX Models", len(serialized_models_paths), self - ) + progress = ProgressDialog("Processing Models", total_num_models, self) num_duplicates = 0 self.item_model.clear() @@ -269,6 +296,12 @@ def set_directory(self, directory: str): item.setCheckState(Qt.CheckState.Checked) self.item_model.appendRow(item) + for path in report_file_list: + item = QStandardItem(path) + item.setCheckable(True) + item.setCheckState(Qt.CheckState.Checked) + self.item_model.appendRow(item) + progress.close() if num_duplicates: @@ -284,7 +317,7 @@ def set_directory(self, directory: str): self.update_num_selected_label() self.update_message_label( - f"Found a total of {len(onnx_file_list)} ONNX files. " + f"Found a total of {total_num_models} model files. " "Right click a model below " "to open it up in the model summary view." ) diff --git a/src/digest/resource_rc.py b/src/digest/resource_rc.py index cf29584..59afc50 100644 --- a/src/digest/resource_rc.py +++ b/src/digest/resource_rc.py @@ -1,6 +1,6 @@ # Resource object code (Python 3) # Created by: object code -# Created by: The Resource Compiler for Qt version 6.8.0 +# Created by: The Resource Compiler for Qt version 6.8.1 # WARNING! All changes made in this file will be lost! from PySide6 import QtCore @@ -19676,39 +19676,39 @@ \x00\x00\x000\x00\x02\x00\x00\x00\x03\x00\x00\x00\x05\ \x00\x00\x00\x00\x00\x00\x00\x00\ \x00\x00\x00B\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x93Ju\xc2>\ +\x00\x00\x01\x93K\x85\xbd\xbb\ \x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x01\x86\x02\ -\x00\x00\x01\x93Ju\xc2A\ +\x00\x00\x01\x93K\x85\xbd\xbb\ \x00\x00\x00\x84\x00\x00\x00\x00\x00\x01\x00\x01

Open (Ctrl-O)

", - None, - ) - ) - # endif // QT_CONFIG(tooltip) + MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"DigestAI", None)) +#if QT_CONFIG(tooltip) + self.openFileBtn.setToolTip(QCoreApplication.translate("MainWindow", u"

Open (Ctrl-O)

", None)) +#endif // QT_CONFIG(tooltip) self.openFileBtn.setText("") - # if QT_CONFIG(shortcut) - self.openFileBtn.setShortcut( - QCoreApplication.translate("MainWindow", "Ctrl+O", None) - ) - # endif // QT_CONFIG(shortcut) - # if QT_CONFIG(tooltip) - self.openFolderBtn.setToolTip( - QCoreApplication.translate( - "MainWindow", - "

Multi-Model Analysis

", - None, - ) - ) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(shortcut) + self.openFileBtn.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+O", None)) +#endif // QT_CONFIG(shortcut) +#if QT_CONFIG(tooltip) + self.openFolderBtn.setToolTip(QCoreApplication.translate("MainWindow", u"

Multi-Model Analysis

", None)) +#endif // QT_CONFIG(tooltip) self.openFolderBtn.setText("") - # if QT_CONFIG(tooltip) - self.huggingfaceBtn.setToolTip( - QCoreApplication.translate("MainWindow", "Huggingface", None) - ) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.huggingfaceBtn.setToolTip(QCoreApplication.translate("MainWindow", u"Huggingface", None)) +#endif // QT_CONFIG(tooltip) self.huggingfaceBtn.setText("") - # if QT_CONFIG(tooltip) - self.summaryBtn.setToolTip( - QCoreApplication.translate("MainWindow", "Summary", None) - ) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.summaryBtn.setToolTip(QCoreApplication.translate("MainWindow", u"Summary", None)) +#endif // QT_CONFIG(tooltip) self.summaryBtn.setText("") - # if QT_CONFIG(tooltip) - self.saveBtn.setToolTip( - QCoreApplication.translate("MainWindow", "Save Report (Ctrl-S)", None) - ) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.saveBtn.setToolTip(QCoreApplication.translate("MainWindow", u"Save Report (Ctrl-S)", None)) +#endif // QT_CONFIG(tooltip) self.saveBtn.setText("") - # if QT_CONFIG(shortcut) - self.saveBtn.setShortcut( - QCoreApplication.translate("MainWindow", "Ctrl+S", None) - ) - # endif // QT_CONFIG(shortcut) - # if QT_CONFIG(tooltip) - self.nodesListBtn.setToolTip( - QCoreApplication.translate("MainWindow", "Node List", None) - ) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(shortcut) + self.saveBtn.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+S", None)) +#endif // QT_CONFIG(shortcut) +#if QT_CONFIG(tooltip) + self.nodesListBtn.setToolTip(QCoreApplication.translate("MainWindow", u"Node List", None)) +#endif // QT_CONFIG(tooltip) self.nodesListBtn.setText("") - # if QT_CONFIG(shortcut) - self.nodesListBtn.setShortcut( - QCoreApplication.translate("MainWindow", "Ctrl+S", None) - ) - # endif // QT_CONFIG(shortcut) - # if QT_CONFIG(tooltip) - self.subgraphBtn.setToolTip( - QCoreApplication.translate("MainWindow", "Subgraph", None) - ) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(shortcut) + self.nodesListBtn.setShortcut(QCoreApplication.translate("MainWindow", u"Ctrl+S", None)) +#endif // QT_CONFIG(shortcut) +#if QT_CONFIG(tooltip) + self.subgraphBtn.setToolTip(QCoreApplication.translate("MainWindow", u"Subgraph", None)) +#endif // QT_CONFIG(tooltip) self.subgraphBtn.setText("") - # if QT_CONFIG(tooltip) - self.infoBtn.setToolTip(QCoreApplication.translate("MainWindow", "Info", None)) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.infoBtn.setToolTip(QCoreApplication.translate("MainWindow", u"Info", None)) +#endif // QT_CONFIG(tooltip) self.infoBtn.setText("") - # if QT_CONFIG(tooltip) - self.exitBtn.setToolTip(QCoreApplication.translate("MainWindow", "Exit", None)) - # endif // QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) + self.exitBtn.setToolTip(QCoreApplication.translate("MainWindow", u"Exit", None)) +#endif // QT_CONFIG(tooltip) self.exitBtn.setText("") self.Logo.setText("") - # if QT_CONFIG(tooltip) +#if QT_CONFIG(tooltip) self.tabWidget.setToolTip("") - # endif // QT_CONFIG(tooltip) - self.tabWidget.setTabText( - self.tabWidget.indexOf(self.tab), - QCoreApplication.translate("MainWindow", "Tab 1", None), - ) +#endif // QT_CONFIG(tooltip) + self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), QCoreApplication.translate("MainWindow", u"Tab 1", None)) self.subgraphIcon.setText("") - self.comingSoonLabel.setText( - QCoreApplication.translate( - "MainWindow", - '

Coming soon...

', - None, - ) - ) - + self.comingSoonLabel.setText(QCoreApplication.translate("MainWindow", u"

Coming soon...

", None)) # retranslateUi + diff --git a/src/digest/ui/modelsummary.ui b/src/digest/ui/modelsummary.ui index 180fed4..d0ea5ca 100644 --- a/src/digest/ui/modelsummary.ui +++ b/src/digest/ui/modelsummary.ui @@ -6,8 +6,8 @@ 0 0 - 980 - 687 + 1061 + 837 @@ -153,9 +153,9 @@ border-top-right-radius: 10px; 0 - 0 + -558 991 - 1453 + 1443 @@ -244,7 +244,7 @@ QFrame:hover { 6 - + @@ -271,7 +271,7 @@ QFrame:hover { - + @@ -667,20 +667,32 @@ QFrame:hover { - + 0 0 + + + 300 + 500 + + - + - + 0 0 + + + 0 + 0 + + 16777215 @@ -690,6 +702,9 @@ QFrame:hover { Loading... + + false + Qt::AlignmentFlag::AlignCenter @@ -834,7 +849,7 @@ QFrame:hover { - + 0 0 @@ -861,7 +876,7 @@ QFrame:hover { - + QLabel { @@ -875,7 +890,7 @@ QFrame:hover { - + @@ -975,7 +990,7 @@ QScrollBar::handle:vertical { - + @@ -1218,7 +1233,7 @@ QScrollBar::handle:vertical { - + diff --git a/src/digest/ui/modelsummary_ui.py b/src/digest/ui/modelsummary_ui.py index 1102e3a..3f3b290 100644 --- a/src/digest/ui/modelsummary_ui.py +++ b/src/digest/ui/modelsummary_ui.py @@ -3,7 +3,7 @@ ################################################################################ ## Form generated from reading UI file 'modelsummary.ui' ## -## Created by: Qt User Interface Compiler version 6.8.0 +## Created by: Qt User Interface Compiler version 6.8.1 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ @@ -29,7 +29,7 @@ class Ui_modelSummary(object): def setupUi(self, modelSummary): if not modelSummary.objectName(): modelSummary.setObjectName(u"modelSummary") - modelSummary.resize(980, 687) + modelSummary.resize(1061, 837) sizePolicy = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) @@ -115,7 +115,7 @@ def setupUi(self, modelSummary): self.scrollArea.setWidgetResizable(True) self.scrollAreaWidgetContents = QWidget() self.scrollAreaWidgetContents.setObjectName(u"scrollAreaWidgetContents") - self.scrollAreaWidgetContents.setGeometry(QRect(0, 0, 991, 1453)) + self.scrollAreaWidgetContents.setGeometry(QRect(0, -558, 991, 1443)) self.scrollAreaWidgetContents.setStyleSheet(u"background-color: black;") self.verticalLayout_20 = QVBoxLayout(self.scrollAreaWidgetContents) self.verticalLayout_20.setObjectName(u"verticalLayout_20") @@ -178,7 +178,7 @@ def setupUi(self, modelSummary): self.opsetLabel.setAlignment(Qt.AlignmentFlag.AlignCenter) self.opsetLabel.setTextInteractionFlags(Qt.TextInteractionFlag.TextSelectableByMouse) - self.verticalLayout_5.addWidget(self.opsetLabel, 0, Qt.AlignmentFlag.AlignHCenter) + self.verticalLayout_5.addWidget(self.opsetLabel) self.opsetVersion = QLabel(self.opsetFrame) self.opsetVersion.setObjectName(u"opsetVersion") @@ -192,7 +192,7 @@ def setupUi(self, modelSummary): self.opsetVersion.setAlignment(Qt.AlignmentFlag.AlignCenter) self.opsetVersion.setTextInteractionFlags(Qt.TextInteractionFlag.LinksAccessibleByMouse|Qt.TextInteractionFlag.TextSelectableByKeyboard|Qt.TextInteractionFlag.TextSelectableByMouse) - self.verticalLayout_5.addWidget(self.opsetVersion, 0, Qt.AlignmentFlag.AlignHCenter) + self.verticalLayout_5.addWidget(self.opsetVersion) self.horizontalLayout_2.addWidget(self.opsetFrame) @@ -397,18 +397,24 @@ def setupUi(self, modelSummary): self.secondRowChartsLayout.setContentsMargins(-1, 20, -1, -1) self.similarityWidget = QWidget(self.scrollAreaWidgetContents) self.similarityWidget.setObjectName(u"similarityWidget") - sizePolicy.setHeightForWidth(self.similarityWidget.sizePolicy().hasHeightForWidth()) - self.similarityWidget.setSizePolicy(sizePolicy) + sizePolicy6.setHeightForWidth(self.similarityWidget.sizePolicy().hasHeightForWidth()) + self.similarityWidget.setSizePolicy(sizePolicy6) + self.similarityWidget.setMinimumSize(QSize(300, 500)) self.placeholderWidget = QVBoxLayout(self.similarityWidget) self.placeholderWidget.setObjectName(u"placeholderWidget") self.similarityImg = ClickableLabel(self.similarityWidget) self.similarityImg.setObjectName(u"similarityImg") - sizePolicy.setHeightForWidth(self.similarityImg.sizePolicy().hasHeightForWidth()) - self.similarityImg.setSizePolicy(sizePolicy) + sizePolicy7 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) + sizePolicy7.setHorizontalStretch(0) + sizePolicy7.setVerticalStretch(0) + sizePolicy7.setHeightForWidth(self.similarityImg.sizePolicy().hasHeightForWidth()) + self.similarityImg.setSizePolicy(sizePolicy7) + self.similarityImg.setMinimumSize(QSize(0, 0)) self.similarityImg.setMaximumSize(QSize(16777215, 16777215)) + self.similarityImg.setScaledContents(False) self.similarityImg.setAlignment(Qt.AlignmentFlag.AlignCenter) - self.placeholderWidget.addWidget(self.similarityImg, 0, Qt.AlignmentFlag.AlignHCenter) + self.placeholderWidget.addWidget(self.similarityImg) self.similarityCorrelationStatic = QLabel(self.similarityWidget) self.similarityCorrelationStatic.setObjectName(u"similarityCorrelationStatic") @@ -446,11 +452,8 @@ def setupUi(self, modelSummary): self.flopsPieChart = PieChartWidget(self.scrollAreaWidgetContents) self.flopsPieChart.setObjectName(u"flopsPieChart") - sizePolicy7 = QSizePolicy(QSizePolicy.Policy.MinimumExpanding, QSizePolicy.Policy.Preferred) - sizePolicy7.setHorizontalStretch(0) - sizePolicy7.setVerticalStretch(0) - sizePolicy7.setHeightForWidth(self.flopsPieChart.sizePolicy().hasHeightForWidth()) - self.flopsPieChart.setSizePolicy(sizePolicy7) + sizePolicy6.setHeightForWidth(self.flopsPieChart.sizePolicy().hasHeightForWidth()) + self.flopsPieChart.setSizePolicy(sizePolicy6) self.flopsPieChart.setMinimumSize(QSize(300, 500)) self.secondRowChartsLayout.addWidget(self.flopsPieChart) @@ -474,7 +477,7 @@ def setupUi(self, modelSummary): " background: transparent;\n" "}") - self.inputsLayout.addWidget(self.inputsLabel, 0, Qt.AlignmentFlag.AlignVCenter) + self.inputsLayout.addWidget(self.inputsLabel) self.inputsTable = QTableWidget(self.scrollAreaWidgetContents) if (self.inputsTable.columnCount() < 4): @@ -543,7 +546,7 @@ def setupUi(self, modelSummary): self.inputsTable.verticalHeader().setVisible(False) self.inputsTable.verticalHeader().setHighlightSections(True) - self.inputsLayout.addWidget(self.inputsTable, 0, Qt.AlignmentFlag.AlignVCenter) + self.inputsLayout.addWidget(self.inputsTable) self.thirdRowInputsLayout.addLayout(self.inputsLayout) @@ -580,7 +583,7 @@ def setupUi(self, modelSummary): self.freezeButton.setIcon(icon) self.freezeButton.setIconSize(QSize(32, 32)) - self.thirdRowInputsLayout.addWidget(self.freezeButton, 0, Qt.AlignmentFlag.AlignTop) + self.thirdRowInputsLayout.addWidget(self.freezeButton) self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) @@ -770,7 +773,7 @@ def setupUi(self, modelSummary): self.modelProtoTable.verticalHeader().setMinimumSectionSize(20) self.modelProtoTable.verticalHeader().setDefaultSectionSize(20) - self.verticalLayout_3.addWidget(self.modelProtoTable, 0, Qt.AlignmentFlag.AlignRight) + self.verticalLayout_3.addWidget(self.modelProtoTable) self.importsLabel = QLabel(self.sidePaneFrame) self.importsLabel.setObjectName(u"importsLabel") diff --git a/src/digest/ui/multimodelanalysis_ui.py b/src/digest/ui/multimodelanalysis_ui.py index 54aa6d6..b9da242 100644 --- a/src/digest/ui/multimodelanalysis_ui.py +++ b/src/digest/ui/multimodelanalysis_ui.py @@ -3,7 +3,7 @@ ################################################################################ ## Form generated from reading UI file 'multimodelanalysis.ui' ## -## Created by: Qt User Interface Compiler version 6.8.0 +## Created by: Qt User Interface Compiler version 6.8.1 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ diff --git a/src/digest/ui/multimodelselection_page.ui b/src/digest/ui/multimodelselection_page.ui index c5d12f8..0071b47 100644 --- a/src/digest/ui/multimodelselection_page.ui +++ b/src/digest/ui/multimodelselection_page.ui @@ -52,7 +52,7 @@ - + @@ -68,7 +68,7 @@ - + false @@ -128,7 +128,7 @@ - Warning: The chosen folder contains more than MAX_ONNX_MODELS + Warning 2 @@ -141,7 +141,60 @@ - + + + + 0 + 0 + + + + + 0 + 33 + + + + false + + + + + + All + + + true + + + + + + + + 0 + 0 + + + + + 0 + 33 + + + + false + + + + + + ONNX + + + + + 0 @@ -161,7 +214,7 @@ - Select All + Reports diff --git a/src/digest/ui/multimodelselection_page_ui.py b/src/digest/ui/multimodelselection_page_ui.py index e6acb66..79ed6a6 100644 --- a/src/digest/ui/multimodelselection_page_ui.py +++ b/src/digest/ui/multimodelselection_page_ui.py @@ -3,7 +3,7 @@ ################################################################################ ## Form generated from reading UI file 'multimodelselection_page.ui' ## -## Created by: Qt User Interface Compiler version 6.8.0 +## Created by: Qt User Interface Compiler version 6.8.1 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ @@ -15,9 +15,9 @@ QFont, QFontDatabase, QGradient, QIcon, QImage, QKeySequence, QLinearGradient, QPainter, QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QAbstractItemView, QApplication, QCheckBox, QHBoxLayout, - QLabel, QListView, QListWidget, QListWidgetItem, - QPushButton, QSizePolicy, QSpacerItem, QVBoxLayout, +from PySide6.QtWidgets import (QAbstractItemView, QApplication, QHBoxLayout, QLabel, + QListView, QListWidget, QListWidgetItem, QPushButton, + QRadioButton, QSizePolicy, QSpacerItem, QVBoxLayout, QWidget) class Ui_MultiModelSelection(object): @@ -59,7 +59,7 @@ def setupUi(self, MultiModelSelection): self.selectFolderBtn.setSizePolicy(sizePolicy) self.selectFolderBtn.setStyleSheet(u"") - self.horizontalLayout_2.addWidget(self.selectFolderBtn, 0, Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) + self.horizontalLayout_2.addWidget(self.selectFolderBtn) self.openAnalysisBtn = QPushButton(MultiModelSelection) self.openAnalysisBtn.setObjectName(u"openAnalysisBtn") @@ -68,7 +68,7 @@ def setupUi(self, MultiModelSelection): self.openAnalysisBtn.setSizePolicy(sizePolicy) self.openAnalysisBtn.setStyleSheet(u"") - self.horizontalLayout_2.addWidget(self.openAnalysisBtn, 0, Qt.AlignmentFlag.AlignLeft|Qt.AlignmentFlag.AlignVCenter) + self.horizontalLayout_2.addWidget(self.openAnalysisBtn) self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum) @@ -104,15 +104,36 @@ def setupUi(self, MultiModelSelection): self.horizontalLayout_3 = QHBoxLayout() self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") - self.selectAllBox = QCheckBox(MultiModelSelection) - self.selectAllBox.setObjectName(u"selectAllBox") - sizePolicy.setHeightForWidth(self.selectAllBox.sizePolicy().hasHeightForWidth()) - self.selectAllBox.setSizePolicy(sizePolicy) - self.selectAllBox.setMinimumSize(QSize(0, 33)) - self.selectAllBox.setAutoFillBackground(False) - self.selectAllBox.setStyleSheet(u"") - - self.horizontalLayout_3.addWidget(self.selectAllBox) + self.radioAll = QRadioButton(MultiModelSelection) + self.radioAll.setObjectName(u"radioAll") + sizePolicy.setHeightForWidth(self.radioAll.sizePolicy().hasHeightForWidth()) + self.radioAll.setSizePolicy(sizePolicy) + self.radioAll.setMinimumSize(QSize(0, 33)) + self.radioAll.setAutoFillBackground(False) + self.radioAll.setStyleSheet(u"") + self.radioAll.setChecked(True) + + self.horizontalLayout_3.addWidget(self.radioAll) + + self.radioONNX = QRadioButton(MultiModelSelection) + self.radioONNX.setObjectName(u"radioONNX") + sizePolicy.setHeightForWidth(self.radioONNX.sizePolicy().hasHeightForWidth()) + self.radioONNX.setSizePolicy(sizePolicy) + self.radioONNX.setMinimumSize(QSize(0, 33)) + self.radioONNX.setAutoFillBackground(False) + self.radioONNX.setStyleSheet(u"") + + self.horizontalLayout_3.addWidget(self.radioONNX) + + self.radioReports = QRadioButton(MultiModelSelection) + self.radioReports.setObjectName(u"radioReports") + sizePolicy.setHeightForWidth(self.radioReports.sizePolicy().hasHeightForWidth()) + self.radioReports.setSizePolicy(sizePolicy) + self.radioReports.setMinimumSize(QSize(0, 33)) + self.radioReports.setAutoFillBackground(False) + self.radioReports.setStyleSheet(u"") + + self.horizontalLayout_3.addWidget(self.radioReports) self.numSelectedLabel = QLabel(MultiModelSelection) self.numSelectedLabel.setObjectName(u"numSelectedLabel") @@ -184,8 +205,10 @@ def retranslateUi(self, MultiModelSelection): self.selectFolderBtn.setText(QCoreApplication.translate("MultiModelSelection", u"Select Folder", None)) self.openAnalysisBtn.setText(QCoreApplication.translate("MultiModelSelection", u"Open Analysis", None)) self.infoLabel.setText("") - self.warningLabel.setText(QCoreApplication.translate("MultiModelSelection", u"Warning: The chosen folder contains more than MAX_ONNX_MODELS", None)) - self.selectAllBox.setText(QCoreApplication.translate("MultiModelSelection", u"Select All", None)) + self.warningLabel.setText(QCoreApplication.translate("MultiModelSelection", u"Warning", None)) + self.radioAll.setText(QCoreApplication.translate("MultiModelSelection", u"All", None)) + self.radioONNX.setText(QCoreApplication.translate("MultiModelSelection", u"ONNX", None)) + self.radioReports.setText(QCoreApplication.translate("MultiModelSelection", u"Reports", None)) self.numSelectedLabel.setText(QCoreApplication.translate("MultiModelSelection", u"0 selected models", None)) self.duplicateLabel.setText(QCoreApplication.translate("MultiModelSelection", u"The following models were found to be duplicates and have been deselected from the list on the left.", None)) # retranslateUi diff --git a/src/digest/ui/nodessummary_ui.py b/src/digest/ui/nodessummary_ui.py index 7efc69d..e0e400c 100644 --- a/src/digest/ui/nodessummary_ui.py +++ b/src/digest/ui/nodessummary_ui.py @@ -3,7 +3,7 @@ ################################################################################ ## Form generated from reading UI file 'nodessummary.ui' ## -## Created by: Qt User Interface Compiler version 6.8.0 +## Created by: Qt User Interface Compiler version 6.8.1 ## ## WARNING! All changes made in this file will be lost when recompiling UI file! ################################################################################ diff --git a/test/resnet18_reports/resnet18_heatmap.png b/test/resnet18_reports/resnet18_heatmap.png index e2ae67d2b40cb8dda4977947b3396ad3ed021969..1fb614ec18fa878876dba1eddfbb4680ed19714a 100644 GIT binary patch literal 127496 zcmdSC30#irzBhh1(4aXY%_5;ehDxb4kd>hjqPY-hqvFfd-rYd=^OVZeV&_FVR~A;#Eq%P4pP%)00ms!QaaZyF<&Rd<1pgekvnq-s z+Bfi_py~#h;G@T{ZMz?_b=m#E+h=1K&&mnYvhrTt(|h0G*z{C?@sz?T&3ENSrN!nd zcQQxPGDhx1Xb#%MZM3B5IXLHjV#J4w1*qTuw#WTe&a&S>H;U+ae*cG<4PpuB=YF54i0|)x;8iU zb1Y|s8T$tYIuiBv?%jLk&p#{7duX<(s?s?1)~yOt+_XuRgI<2qrs3l%iq5?ns;a8N z$$yY*@!mZ1iE5f!Tj^9egc)gzf`u9_Z=bAshCfhHTs)myu9P97eolDxYUb>zu{E8Y zox<1N^ncV=G5!2xf3RYb<|F6621Yiv-T{q6gBFFAmC2vSSFKw0`oo9ba%G_nN8etz zS)tSs{JCL#gXfro$MENauiwA-7iR1cyBxsEcdott_{7wB-{Y8=+_sXCf#v|A2Y9{U z)eg&+Jt)3FZt4TJPoF=VetUOY@)4eCjb*wp8}y|L!T+q74&a^Js?(;QDpN-D^39dt{2U->Rnj{WA%n=P*4%AN_9 zpI7g^D?e~`WK#3Av$OY;Yr)zhJ?^`A*$r^hwew%~Ckm!ZG=g+qfRCv_UU_Hg8`T5aj3>5LXe81;h_UY4d zqwr0q#Xf{71zCi-ev{c&rBrfL(l;zja9gn8CEVs!^?Ykhd@5Yk)zyPXjE#*OTdf=7 zwZoMk$Hi?mH*Xc~3DDgUZuS3l|$V6J^h_c${>|eQOUMZy5{dc@4|%(hnL4w_mh%zJ0^0K67Gz| zy0u=C>kprvVA#5KD|w-YO!x8>TjS#=Pl_&EM!RCgipNi$sOjo1OnUk9MvaFZ`_syd zi615BFI_799DC6I`v(DobSG9mIU5b!hwE>9>Rxg0-@kvYoLn)kX3wERflBT_&yU<0 z$yvJY2;QBP83wl^^>hurO#bozJMjS>f}gl8m$ylaq;d&1zr2e~*0hX#O96 z{9$H1JvEX&Fy5CPi9gQ3#_tmm5wVv=P*89b>(_2_%(3p(X$G=erY8Hm)eQ}QsjLVM z(aP%2TOjZHW4YzYlLNK3+0D~aeba6p-OS9)9700ua&mHaH=UmE=;&ysGC4M^uA$*K zIua5R60m5^fi1gs?TTTwwY9yg?0R!;W$WlbEBS?^M^|`_HZ$nqR*lrUhg0_-Ki=MvA?Z2(a~^g5`gL)` zkT*w;TUxq(WilhX?#y~}#wqCN>77qX+K}<Q2YNRuHo<8Yc~Q(w@VIFRa@4h#W4snnHYl^r4*x=2I&osvx6<(7X*{p< zK|$&U2K_C7DsyjaJ;pw9Fio|5m?t9ydF4j(=& z`OLFFmw}OqN!7|q!l}FZ3=Q3UlQ(~^koTI9FS^Lo$7tj9RKVES7~8d* zhDT4F2*gQi)tDs^?me~X)TvWt>CUzjLm#!5Y<5|jY}|dpY@2U(csnIemS7b%~1CX60XBxud+2t-hRn{(POsP`Tz31qbm4&k;k7 zZQIQ7S60aD~?DL~}+) z#vDALGuWziX^son*x1N##5-I&pfZi>q)m5*fn9L3OMg@O4-_{}dQ}c9Yioc11&f&% zEn1|8^MIaG+qv^%e`~M`Gv#;oEUk#LveDD;&CMc=XN5iRNVIwii;9@Bf6l&o^@`fE zWTWMEVaBr@yu2~GHY2_DXN4Kn?CcU;dIn2X7C$r2mKy47G>+-Uu_$@{#*ILGR^D|Q z9Q3Mq?-L_mo<4o*cjwMh6vk$3a5e1ECcM#5Z+-gKFW0Xx6j`xi>t^Rur?_yH&!0c1 z$D0m}g(qfViSkkIE2MLjRb#+ zIGw?1`2WXd>p>b7@un09`Ov6d2YaCX)-H#ZMD#NXW9 zjAB@Pebv5#Q`F(>wMi%T1<6M53OzSE>O#=Q>(|>i;}|e8G4WY! z>!dsHaK}f6ZQHhO-?hsh#})R$#|IO*mua7-d>`&zHJ@FO#lpg3pyuhJ7dra-LAKeG z$@{D&3{pAbGk$0VwNCsR)N0Gf$hiOP*=20usF6X`*4HH^`z}PpwwB$@bRT)}{Q2I^ z(`_Nf6qWAWcc7-Whg`ws%a<$mR*svOef)^Ch|_E8mqmMLXUnhe;RidTBO+*kUu^Ad ztgPz3#cyz`!n>aP`t?ZEN!yHp`Q-Ovjjy`Yb5&IHeoRat6So*ey)7w;h>eX++K?(4 z?)md}#jjG8X%?(E7T$IAR8wasGnR|}EBnFnPoMmZy?$-&nCxEV@9$5}Ih@`M($dl% z1BHu6n|#?5j+Z|W>;w4SzQ~SAgp+g6%GYhD_&1%RUvKe21Mus9M8p{!`Y#VVy}lwM zE+w_i(eY))a7l=C&`9X?7rgw$gh$k=O`A4peW#nxf)Xo&dN~#UKGSbL8-I111+Fx| z`^$@nXV2KytXZ@3o&rwKr#auly)WY!m>6vh?y2;)n|}Ijg>ClqlzULu(xpq=0iM#c zpZ*lyw{PE5qs*nK*zJwk*%g^6Y^(0cZPcIeRUim*TO1K0!b$h{_qs}9t@@@}1Yc2V6u?S~i5$W2<= zKA~erkNR&sS!sd;TXM{!KO;3YwU8^huFinUDT`1qEcoJ!qx;5BE!_2eTB$D|ZOR&F z6;kHs3e>3U>sEd5y(ZjiY}F&}@XG}S8VeUK64|tgH!(4ByOx&ap6|Jd_~_i`Hoe?i zLQCvJi<6>V+}&Gofajm*6eU1}%9)xR$1S=%+*Kv2ppdr1`y@G5X=gycLPuA8b`kCv z8#gyMzk8VLlwhUgKnzwP|Mp9g|0Ofc>0~#~kQ}%@#r)Wm# zG?8}&9!~(Mx+tU~h;3bjGgRnFedXiWSoH`UlegDb#a%vlI`1jgepqjoF)D4ow#ua6 z+qYU1-&Lkny}XohVEJO-(vXUszEIu0rKM%9eT&9`2SBXA)OJ;zEW%}-xjKI_+7bmCEi5U*p`EYW4#C-f`&k{Ks zgP>gneN`E%X<=bu74PnSi#h-_vuHX7TM=w!V8=!~Tl3EG8#ixaJ9A-022bqh`0~Pn zhALGa?-uQe7L}EiO#ofN!XEg1&^WNl*tP9OfMrVL@(|tCh3V;5c7R5d6=7-V`1hv_c>@A=HN8CAQV{6!?Y2czTbn;h{-KPiy3?gE4||o} zS8e|o9b6&tlv8vYm73BWCpk4WrIqbfeS6oS{x!Uql2YdG$vB*AO#wn)IqWJE6rQBV zSV#0N6>nuVHMPUSkU$#B!UB9+5~7eg2We7Eda;{aC@1G zGepH+I+-EFocXNqha;cL%RBalgB9TD$YBujDC=zeJn0>&G@#t}?VB0aN=rrIG25(P zVt4M`5wzSU#>sj0Ny~JY$g*Xfv@yChrnga#_?6riq9_s|^&wn^P=So8u`Yn{9Guwm zDS7Xy%~?}pCnXLiF%oKEX}KC0f2~z@0+024ditC%UwBDrQl6eTZII@`gwWC6vgSM9IoF!73=`IH!;=~&j_FiltKvAiI0y~ zy)Wyy3>ebXQW(_#^XE1j8!4N{tV;_POOanO1AMxGN=~^fFJU<29vX}tHeHnF*tOQ7 zU58)ZjshTX>3#LRsiPwhE1Lzy*l=mUx36U@!#&PEe7JnW#*HFkV&5Xnu^I|{YEuSK z*IKS=D?`I@0j;eu;Bv#^1xUoD9>BI0@12pEDRb=I643Yf;*g4$$3O-8`}@i2^f63# z5>ZkTNJ~pgNKDLCnHpec5l~o2RDjC@ie=f}-sJ9rc`gAvyeV<$?8S>0rB;?cdGaK| zB$t-x5%SKx{8_)g@m;@pGwkbm2vvF6dYIA)z=T8`l^dv8-A^aGa}|r@zlQa1i|L|2CNoT zR#pb6It$K`-Uj05hld|^5|^&#;*zSPtGm1|)BWJIrTq%E-&YlwXRu?3u7h- z3-xCui{NHGKraX`2UaVZDvN9bJIk|&S zFfQ8-e%sXy%9Zz{tz;h7B#jTw%@xbV#F$YCI0!gi$iu^2n{3T}@zNzl4`coD3|V6p zhxRKv2M&mRs;p#ob#;Y;aUBd_+F?|=embS%4ueYc&!0c@fLi@qTFjbJ;qtH#{c>`) z0CGnb7vGs>Hah<5J=5N*sLC1?mL|lt1h-*JAdheM0fQR2LAmQoH`DR)g%%4iLse8d zn#w@r$Z}6qESwn;NhcJD*r;SwM@NK4Mjw!J5EYJv3;jT~&u8<@$b7*S&xMN@tMslt zA7%;7Q%Ph#>r%h2s(A7%<5o-dF=YGd{%j-w(MHm zNvCZWMPDuonYH}dw#PJnoy7w4$VbA56gn50%02tfoc}MSRL4Idn!SDd_Apt98hiJ0 zK}Moi_0d>%VoyU@u0P8_7#)21IpSd^Z+nEaKd14-dI9h#q zPCl@>q~un-_0zaGLgb%3SzVWEPlvb08E$qDN3sY62`uC*C2jH^qiezN>8R>gr&s>$ zYh?HK_Qr!ymkJSGw~h;i#>~^&+8XtNhA3{&o)tlGY5Mw=p0Yc2D({(LI!F&SBle#4 z^`#+nV%zrZjFUAXSS{` zDK2Ih9v&uw04*&oLCKI}b3S}v!*)BDm?&drZcamqiHV)Re0dwBy=|BI0|U8NE|ZdC zL-jRt|M1~MLP7#rs~#R6O34wfCE61c0Dy4DFS(~ z*8pGVqu@p8h+nyO%@@l#udr~QqEojIxF2LElViu`-`+W&Vq|A8{`%%x^Y`xocyV1_ z-7OsSkk%Z29U{p6)~zLVS)P2XtgKL*{G+2+{umsreaa1GYk%wk$5+yG7a7gUt@rSG z#mA3@Ra}AexJBeB-SZ(YkM_-*HxOYMaa0mb1xIgpZ3;Vxwb`qn#nNgKI_JM*eF8dC z6dxZSRD@+X*J7*%1O%X}bVY=(SiYQo{`~oN_V#BCq>2H*3CEOIP)OdMv{66ZNmACP zPCTrutE+WvxQkt2!Q9%uc8*D6?;(J{mXk_KO7H?w()Oh76!TS!@QICG!_Uv(^zGX@ zR7v3t8y1=uU*2kJDnfzOsm6o}GlF_AuC=wY@{5a;#Cp8`cK^YHDxXf@3Jo=fDwdF( zT!a&zqEL?P92^QBYz;y&K6{|+b5&JjR@PL+nAq$saa)SDrtJqTW?GYULR><^>Z(ba zG4Ky0#Y7yF2AOV)fV8op+7l)rX5gcnHRYU<2NQ@r+S%2G^Rc|GI#lk@Z110oDWHx( zrVX>Nyv&j>Tj?XWX;)<&D4+`b15*nNhSR4{1LKK6js$gZ0g>fgvV>7zU;oyfJ9#A~ z3&2Bj;8G}l_A)XObn0thjnQS+*48F?14li?ET8mrMe2S+0ta-rTN_Sr;Xo%s8%5ab zaxNyE%M=Cs;mY>qYh`8UQ-mgAMOJ5dDt7nunA+G}#;fOl{=5j9a{I5`xhr*hOKt-F z?VaZaT8lxy>987LuM`0yL*!@kS33hHlA$i>kBR@DA+xM1<5cA z)xLiHiaSG>kdm@k&R=`S4kGk$aC6hWGPn%lOi`ORZ@zN-b|B0PYRk@@EbG>$kC&wKfAv`4$F;D4{&pNID3?x4^y_J{E7wWIURQz8w)|9*13L> z#xI~YWY+s~JAX&;)1~!gDYlIVyd5r_cbjkVFLKCcmh%70$}ziF{)6Jgj+>;4^&Om| z4`~{!{ijR%OxXneRuoHkteJFUXy6|xHV31}1lAqd9@^t{5RYZs#U_#_e~Z18)jdHI8_!Q!iDU-E&9v{*ve79d2TQ{&fkuowX1 z_4M^cMMP+TOo1-vL*&A0FHrdSXqP&?378xrAtm;s{iZ_@#;AnT-*!rgVUAI);Xq_C@c`ee;HiLbdV(u+PoOq0S29ETv~)prf$kE?v38 z0S)Ql`|tL4b~!gC_3ggB<0ae|XAsWAgqJUS>?D{METExo-@eU3PlJoLb9CGabpl6Q zw5}7bZgiknNYQFA_sbCo-k|n5D$~ET@e=nlGWg5O%TWcmOMv`Z^4V1i&d@O^SY>}9 z`a7gDQ%E@Xp23+RKSLG;^p)Ii|0kEhu7qcqnMza+Di$hn|BoMe!75YdQO|+ycS%G; zI77*V(h&X8zP=PyCO&&g;nD7U7l0P>@DONdXzDE&Pz~PGp2U5zv9XbdcoKUQHeEz~ ze7wV)c|OT|!pXo-caM=#SgM4yxHuy(FE1lAGgn_Jq!q%uls)8!hK8^t{ZmuriIqnY zB`NAB@KypmTk(a=zLVd~wXEU+1WL8m8xpn)ts@OFeDlb1@#`VV$C@&&-amfC7 ztndsCy>3E>6BQGik5gqEPDQM^X3$L(WwtI^>EU$8uA6%s8$AYDkA1is`1r9nHNs_p zA~^c9);67A$WEH(TUS>Qlx`~Lpt0w?#fukDfW!8l(nm$e*SF1_2W1{?I_CW;7>9Z< zE%&FiteD*oZgy?+qGBXK@zzbycb2bQ+4}mbC=Tas0CIm`yOwC% zsC+#nB&bcwD1*^oO(d-3$hzw4YKj6TB$6vsz^G(LWF_#X0bVz;xFKbb=XL58KY1G1 zqRs8?)yv8&54r#B&c%c2?|xCLCU(uV^64RYmwp&$tJ6LknVLr2%AoDNREh&Wz3y^$ zwhFi^>RG_qvuB-30Qh(y+%GHzUc-?wEHyGi39y78;;dlWzi*#tR^`W!>Of+#d{MYU zJdxD2v^>~Bc;emvQRWvuBS1b&GPtj)c5sm7SQ#nVg)An!9(kv-jR;#dq)D zCmwmjg>xb3#Z@SWP3`UHw+8W;=ANBbZ#ja6_PVsR_#*H61nXK^7dN-nl7Zb%eilWq zArv}etTXnOvZq32ym6z=m$5OoPgPaUuh{2KAcBmv&;0XXfa7Y_Pj{P6#Pz{CHo>hF zU%mP)L{4zEbbe!PMbEJfFek6xx^=#&Xd58BO7E4qLZ>SzXYb8SVg^uIG~pU|cXylE z*swve(b&2bs-u8(*61=?Iy%#nCl^3vc5!tz&GDg0_4suvx~3G0HE5v74K1=zQ9$z= z8U(S+?3|q$>}&(?Wo0Rg?YcuRDk=(3iI0N0&lspd3j|8}L`AItegOHTp$(_Im3^7m}WM%W}>jhAo&Ibo; zqOKe(4PzA&5+Z7Kekzb<{|CjsCgP;SlfBrNHNHC|Bs@GAitaqFz=yTj%GHOQoSa_2 zd#7>im>4CDxB=cpFVoF2whd-nAa?$ula)_%f$)V+Sj`^n8rljQsk~OUv*#5a#m5H& zTZwBG;S}mo+BWkWlr(m+cNX!s!&-?|dAe0Y$#=#tpIIO?nV{8@Yu9q1D#i)EFX2jG zEg}-}UY3rI&V7_=ZV|Pc+B1p7Yygyl+nD{?9r7)TV(+O?-}$Uua<{$9por}`aGBcU5no?l5k|G3$h5SvV8+nd zTh$&|On>vj$BGKKI+3J5z*tu9zMBJKs#ZeuhL-7x6HM&v>^QB3L0aLsEKzcEh#u3+ zaFKyft$25{D;G#l;p07#{qTmG;4uivT2+^+Yyaqf@ZbTE^~cW4goL%XZru_WSS)Qs zLNC)z;&TrvZ0Amsm|Oo%)L-}mKQkNKe5$)4lTSoM1jKTCXlZLxlMe*KCio#Rceflr zE)IVUhgfa1-b9=0OJb59Q| zHZpOPYis#3-G)g%MB(Xpu=fNVpl#gG6o{ixHHm?!o0esoKOfPme4P8UN7~|Rj`}G! z{+BPaiS4{a$UBJv7!<){$aX4rh2#N0xzHlqQ|vN{qcwEcr#1qsUxgF_p(#m!x4u3f zsHPUf9Ayu`daQVBd+^PWkd;y;3z(VJwr!ga3{WtB`rA9zJ$pFMu?w+*%R{dc!J>v$ zMn~a^sK#U>$^lnq3CtH5t^`=XU`RlOhY;V=QubrVj-dchK9Kx(hHd7>u?~c%wsq?~ zdetqEC_}=JLXJ8g7?_KbtGukt2TvXaei=ex`DvotE^cvk-DFdjTHay=oaQy&BX@C$ zj9SN-rjY0I4~&E0Nw~DlN=k{&eMUfi%?L*=DvrK?f6LPpmw^_i;!V=h?7%M2PI@Zk zH+(EF&qa|*K)8pk1c1&AX|MX;S)zHq{X{PPP3C_wHsh|Ss3@qy0S4th7x<5c3itTI z1b#gquz)z;#L$9vL*uad1L(dIS2!dfs8huCaME+?sddK89^E5RziK_&Y?s$q9d=>-;3BtVa zBL5EHKrToDPSksszXwTYZ2_b;@*Lhz1QHZD)cErkFLvAAb$^Q$IRLiQgaClR&A9k@ zP3XeG!-yV|pP`2>f_kfQ4xh#z-Uf{b+SiTCSRjc8&~XmL9ri~i=zdm~AatC2mMWs6 zbg1e}686{cx?7q8+T`Ls-t!A6evh#+gwJW75hS&_)Q9ZBycj7|BiH$i=pGv$7Q{scMc5io!RYL|Z z))CPZ;i}t%X1=?-i5sgs2XV#52Oe9tP_niS7l(!%P?wwfyr5U+M zKv=|b685#SP^PA)SZ;aHZiGWhOri8r*ku8ubx`o;5GDMM%l5f+i51oZ2OnQhd8DTElVF69 zTd~vg5#%N0`{L4#%tXyV@_5=5-m}usa&~D5)gV!E4bUEZ0|Nsq><3!5cGst;)XRSV za4+c7Ctb)byD}dARn)VtRCH+PK<$x1FuzxcW%j0*hcj~P8D9VM&$EDlgd_o+AYepG z{f82t+do_4+j4i)LVkW0syfqM4gnK81Wjeb-#~uQPqxavz21UkdvUuVq~xQ$Ab()A z#CYl~pa`L$=wtx7UWcMWg0UIXQ{ygunIru;s4v(vpQW6go$so63!)ru-?76N)VMnA z_HADB%!nZaM=#Z``Rv|5qciOrV5N!ezIz@f`$7HybUZ+*$74q9Xkqr`PyN_Z!ZiN; zlWPFV{W+Yh2tEfng?l6D2WEOO?Iw;6q!Bov+#i1trWUb9O^x>0yIbWp<8w=(fc`)V z78g{JNJ6p+(905DyvT=rWNKw~5zY)nOfEPQ2pak$n`ee74?@ZN4l94_ z?nWGV0VF5z9fqu|tp4HQMSYs^2VoW7k};pZ?b1?zWCfSW$Z%qbke~?p3>Pji+y6wI zTQ53%<;IPR8X6kbZrDJQtVmUq#~zgCS9E%spEf;Ota3jtuHMoc%vN*%{zVNQgS(=- z_++hoASl6~nDYQ+4y8DD9cXWFH_7v3B9RL)roy8h0+$AX-ml)da{+;mo%{hPR+%4L z?XrGok6NHA|t~X&hmk-n&UN<)Kwe#j)` zP*PG-I5%AoV&p{FNmH|!Conne%FUZ%SyF4(s6)Pih08>Ze!Zqm3)lr~$Xv4wM*%Qy}Phlm_rvUt-^(O(Ikb0m~P*8|VhNm{;d&bTr5D?{! zX5!YX$A^z}corQUfK75hP75swkd`28`TP3PA!nQbVbSm0IkWESMA(4nMo6xhghP+$ zOtlv*Dx|`ZNPVdLEYkQ**ZF?|(CxW-t)z|Wm0V%vRX?Kz;)n@lN_cs)%B;2MQp+o7 zd5DuYw0X^y*D!}Vx>$z0iq346m6iAe8eU#m6?^pc*WBCzhWBKD>{`T|pn2wh{P<#D zkHwKATlVeaMu5Yr+-q>}E9jxej~{o~^z+-LuYKW@^GJ%$j5bb*5DVCx&3%21Ee$wQ zB5?nZ^N;F6SHz#AHF&IGU&OL3JP9S9_>3?O&*A7KeNbDz7rjbvEwgGbi?DNY>a`nm zq9D*}g4JP@)i8)p_)+h18GC%2xG$$!;3)zPX+S_vkHxWPHy)x-rq z$0ooGL69C1HfVelPAEn&hn;seFd_2L@#WDb+kT5JVp@^(*!)7LO3%nX^VBG@;%y8C19Nhwn2DzFJc@J1rPHF7$ zNq}#_YeaFzl1`+|%*@nP9)L-ppXZP}K<4_XULq}pPK7gQVOhR>IYpV7nGvh^*WhmtI+IA_d|p1rr!fcjC zl87)%%x3h($Vee%==p*RJCdr-`3pb@hfHy;q_{W{{oFGQXPM4}XaR0LZ(8dWM^H(Sbs@_I zNu{gX4_}u7?!vjTQ%v2_aU()9&24SNntqejunSBI&T|?*X~n*RNG3SjA?ecdvPy7| z!`wx9D+7R=0XhUL`pI^nLjuC1-m6nbLyy9@mXMT0K$QmSTR~x=2pX^=HG`*GX(xT_ z|E?|Wrl+OFOnRY^yhBWrh}SsZ$xa1;g5*U5@fs&b;)kRYAECGSL-!zE5Xv4)JjaG; zsBZK!j*s*O0AO7R3W8zI$;-=xvpq2j`6bB7KIrxV>uCKHvk%cNT9`x)|99~%C(F$w zS%ruUDseMJUUGYC?)J>1W=(LNv}A{ly>P+Le+MZV?ayZ??TxM2UBn@8ocbv@Fm**l z9ZwL?#U5!d&>LdXpw8@#HuJJ8I(&NPG_v`70M&75K|BFe)0VjQS5(}tD@66jdrvNa zPKIdA-srBs_{TD5h8h0~jWt2iFAFMNz_nI?`C|Ix>l+~MZ3vlDIXG$H&?B^(2kaq( zkPn_0X@;^Y1s>wz;XxTYhaex4koB`TK>!QM>L`+N!vd-slFyP}g_4Hga%5)>gh(INDC`}KK%@FYh5bFb0BmL)$3zB4bJ;>bu>Q%BMss8uwA$dCa`Nz;1D_L>lUq!}1!ZOJ2f}fs z1ZR=XCDOLCd-rZchuVLxC+vk#N5CBf>dI|W{t`8~|HYoO^GQa=X8S`%IyxNd)~!Rn zb9qDfdJ8t7`?VgUc4&c8-LYcN1!-n`T zP0A`D6N zbDQ#S*eHv0i}s(C!K)9q>tI8~P2$jVdYn=%J0l>Tfr6PK?SsmmtNyZaslQr8k_T7& z)V9%);80;kO89bZe$wYUBj=hi#M%csW8=+0m;|Jvp)CBH+@N9awb^TK|D#wbK`;?! zJq)0wFiHR_4=Ny?QFsdb3rUJa09d|2v~UQVp8QQ}PqN0=Xq_H9;NvpG@BB5g=eXMS z+O=y)K=YwNF{lbev^H+v;ls@6S&BM2GTmZ|lNM0>GQx3dZt$vjd8C&N=oTUy0*PZG zX#wpY8L>^V^7K@Kcy|4-flx7ABzhnocu!9uqaA;PBwzIQNj?`RjdyP4;R9XL28G%R9Nyk4Gl(h3za1$S&^St$7zCW zH9$HI1<`BEv15-?%U$t{|480Y;bQEQC(HzEk}fWEoi9V`3qu%YN#Riz5)A~`RUvsCGyZ_ z0Sk*&;v1L2@(hV`lspioB2YM7-5D_ImL6cxr}itCFHhoiHZf^3zjSHttT^1lrPfJE z)8D2FrhG*^@2dLF59Irz(hhAII_WrmiT~f?OtjQ?CPPWNvFm4&=6-I{BS?NeDa`#g za&iBI=b#WwJrlv~;zZ_N1B)8*T_PVr#zS~;`|>}F1rDc^$qq>EI6tuhX2S<^OPUT_ z0@lQU6FdT9+Q-r#n5WWTb28ph@mwVmhX8Jonzb`JItf;~SaR$Ad!^Z0YzJaF$n=O@ zdqWb8@D>pIaZKwARvu%-!A+U~f`Ural>(mpKmrdvb=6S{AXnNpR~6CAEJn zzJSnu4s!S;;0^&aJz&{EN#HTG2=wlqnF0dgPzXKTq8B>*qTx!zG{^! z$a!?h$>Yb-q|8PfPSP4`hIAsE zzJ4uRF~)(Q){4l>>%|yTE@))3|MB$?9JL}i8o0%FwtpI3x@3t7CIg_cNeo5nYG^3w zO`vjck|!Q5;YmbFh#tZdqy-=MHwB0^*o*18w>B(dmlD|^Ba=%y(g5-&AdI=71Ciii zoU9j)65EM9XCV2W{hfHkNi(yvkQ6X<=IPdK)U7Rumk?BdU>N!gB2khBl6kqf zNcL^#?RE3W)t#NU04^L2r7}6h4V_;6rsJtoY9~&_xV(oB1Y(DvM9-&GXVNB%5ig_{ z7%5j)^iRr?cJa96wDr4*JOpo3XV0E9cqVx`S^-c=+ao$X3QAS+pHj@2Sy_orM27Rg z2_!rQ_OrhAm+I;!+@DeONh0F-r)7BFQhOl-1QqTHS(toxB=yZ;YKFF`lD6ZQ~s=cvPrd%@D|_`SHi;B zs8qM%CoX*;Jk=Sl>oKi}m&EVhzGX&A=$5?wGBPIwher$OBLGr9MrJfNr#c517yMEKND9TiX!a!m%xTe4=SXJqn(+8c4JNCeg#c2#G8x5H=+RkJ*WaWn7|1EkPWtzR#0D0WRX zLMI1JBbc6or~;XgL)x|wLwbNl6bcpNzOFV0J)T%lj~t#S8i7HXwc66s5=VXi8rf~d zlc0K6Nb?H_5CA2im(UbZ(?^C5kkJo7w$S1WNq!udxdjZDf#O&3;ztUppg!H%9tJn6 zsH&zW1BeB5IgSt+r(<<7jw9ZJ^HeEnV6gfSJVi270rP`M8XJ+Qm-;BWSvx}C%ysxF z#R9 zJHB%BJ9(wY>EXVbWB>))7G~UH2v#teiv@n`eB8~b(8)IS7chkZ;}@19iwek2;5;&d zWY!0nPJ~s8z6F0Yl)>6wYm(!$d*v!Xg#`Bz8)&;=NoG*!(YHf{5rB0X3Y@C!|3EQ* z$o)NvVUJFrfTbbGW;YL48Iui+Yb29BkYRSz>x&FlJ`0E}At3?I;*Zez>Pw$-cL;%j zVt!ZNUM)lRWTga#Q61R1RJl7fWd+1%vUm|xn-4*sOi{t`5MILhzGzV<$Z!Jd!nCGI zOYQ@Yyu_a+ZOJ!pV<-c-6CMv6m4jI=7a{VyxVVVF{9JEu`5sh()aZu~A8wHfX+;FF zdrCbSO*^U{JgD%5L9Ji^;`4KqeA3De(aWyCN!7km=r_RJ&FWKTy6S<{QYab_nwlUV zK^s->wF_g$enarv@4*ok;mvhMwzGUe{nOBWo4aR_J9kPgmE?3Z4z_OD?QMfrMzqza z;}eE?{ya3}#Q>J!<4mQh&vlhPSXn1}NNscjxQ_f8M@*A9);sd;8JJ(+W+gI@?=?jP^jyN5T53XP_jr8y)9XFUYupA-$(F z*9JCoI@K>B2xPo=!f`GtS&=9cUB*1>$E)POsyLAPdV|Du8wej4747^xD*F*o@!Mi~D##W5G&Cht!~ z@R{F@|NGYsh@5$j|6u#u&uA@^Lx&HO!G@6HNDZ46e3x^*5fTi-UDrw99oG&CTs zj0*w$JQ3SQa50Ae5Q!T&8%O5Bw0QX381)3v9TkWCenbnK)C()GB36@MRkau=w?Bv$ z3V2yt0TPsYAu2-meof3B;Cn_MzhjYrK8Hh(7C6J|#YI>UI4{vH2{+vr4NZUwW)N%d zb><^1Ndn{mcXk*CBY0tA;04$gm^(@3pc#0xgF8h3Trz|Sn&|5z&kvMfAe{h^P63jz zeq=5O=9g$9W{Fgx@J&FToW|)XXEIBY^lbyxqK$l{Y~W=v-UH_Dd`f@ z{d=UViT6JwT|Q{XCguv}C*YZ4Us~MdbEKNLFB}MdYoa36-)^XLESVRNF$iS#7O}q;{5(e0?#JojAz&uLk z7=o6>=ttU!^cu>T9=(c#zdXwj3_xQG3&ua}uKH~kudl!-X%?ag4QQa;!Y7zIga9BIXb4-ehW6pMMz6oH_24lA6xk8H)qTpYT2 z2)1KZg$9&A(#-xBPh=zLF5*d7;PIf*f!I`d7&H_aJ3zn{%w9h%eoxM#Ld8d(d{zx#0{dBY9ymf)K_8-tnGSBtAnvNL?K>rq$V;d zY91P*P=gO-h|OB{_|v#>YwL)(xVYUq%f$D5U8 zR1BWf)$s5}OJ2-sK%DCQca+rn&fh`yKcYANpGOm{CLO8&XLpA?B+UPBy`3wmF;-;4m?8%xRWQ)~1V|t**%Ik;OBKfm*^{Q1c?gA@b5yde>m@kWCGN>8=OUTmosC)SMGmPdfz$=ldLS))3wt~%z-+Z&@ z)^EPa(+N?T#?H3yK7ny_y`5MC7z?-nJzY`Ef5R?QWm1sg1Z;z56ol~|130zM`ui8E zGw?ym!0*Q7H!>ju2fhYgVrr}^TUj?9r+7;jHY^$K3Z0`np#jMaf(Q}4F@eC`(k)7n z8%Pw1yLb6X!Wog0`U^d{_)*v~1yQcxCAlQ5BXj2S9e9nA=*xskvM+SR8;zARuEVLQ zyMggLw6sXZ>bf1Cvg_B-Z0CoWSd1vqCeRyhtu<9kf3t?tgR6rG@)|Oft@o7oTmjdn zd;g8K?C3gPDF2}P%}q@d&NyNtk*QS($jo$H!za*UWkm16u)BM1S4T(0Y=5ZaO-sk4 zF(xPf9n~a9)jvcv5pbMOrW6q=2;&l&$p!?`Cxy|l*8&?Hs(k_ahspE}z|&;K$XIfV zek!CjazbCkdRoHAx5g0U7lN4_MPa6o4?1p0NBD*XT~q7c_fGF*I$PFj(QV%mbBj$# z`65Ch+}`80js2iUDf-D-Sw;q2TC+D}$l_5LIt($K5O(N=#aLE}m?Mp@*7;~rL1Ly` z*BtnVtS&U;me<)p#rKFsfC@X!kS)no^w+pWE;Vv&r;^pF)~FC8F5|z;PXYDui3gx4 z=HnzLF->%aR=153(SZ~#bTr(88w*BRBN>h`9?+Zp-~_|Ql~W4o-#`1}jfuDeU1^iaY!KfGFtSOJ!r;ACO`B^jAJ0PCw6T^YnPZ|>|Q?di&&gh|^9 zDmn@OLUEq2uAa|!O@rzObR^Tj$hO2IMmPKF%bzi64r7(z2hjMdosnyBp#ykA>uUXl zMA!8rxFr}&kX`?rj2%W~i-;5U+#_%fOu&-K3>vfoleT6uP>yU5sGR*3JEWU2*MLki z2Sg!bJ?d(=dtk;F_$tJ7o)NxUw8vre;SRE`(UnnzB=-W~Na7mhWKKRNW0S3*_><{N^dsJnVA#8&8Su%Bt*TL$fDK>HHO zbRtMY>M}48#`3eX6LyI44pf1$YbZ!2bsyUqG7y2$IwUx{}2-J^b#6EanA#r!Jydv(H8P^RAKT^3{AVyHvcIdw9}9Y zl`yJ>4so5+4FxEJT^b?IOUKBb63suu$%Z*LDm~`2Aj}iR$*r!OL+NE&3KQ3)De4D2 z5<;+y+|Q5$CWFnLF#m%)P<+s;iz^;F9*VFI z$PemrSGm(HNN8_{N{8`EPOps6CxT^?rW+mE7Ya*)P*Y6$3u$$&!B<7pgLC*|+wfGO zSMBdc+di8oUIL>4q4dG96d)%Oszk0e<>N5mRzK#{WziVT@N2k@9l})mW$XejJ!aXxVYsXeH(p2VIlEU#8fN9VqhtP zI(pe&p25lEBwE9Sj^2NGri@@9;qSnYz!kJ)_7|432~MJ0a<)d%ogp`FM1WlE@I(PH z#|USPYS(vGo7K1C521+MdLn|fpWH3>z3W_+27}rktQjLe;f5em;wKG-7}^O$H+DoAYA^76!wt)AY=nV^o)kI{=FO&AWiTk`gEaTtqF zq8d<}qsQ9o)8$~cka71?Yi7OdG;PG-lqdStF{$(ZM@KUF9;yjB9#c=XF%!8Op;yx{ z&yQMHqCOXsk(zMjoY#C{2;s0iew;*u5hL)$C^4|G1khtrK(}UtofX3zK&dV0`}iJE zn^>zDfEuZ9uM~$oiQ50@jNiQ{#*h|a=@D*>#%r=v)2H_?RdU;aQD>yYI4Tq|{2Cu` z#UPU<>yNQ017edY7D(8)AJE5%kl&miK+FKdc`*Pk>F~d8&MuF97#aDo#r<`p0tV=~ zOZ4KfetBy<)}kNzr$ZK)cn5JM2R@Vg@^gr}n<3~83osw&I&p$BFcDVrEeXzIXOYPR z7Z$CV`BDua;tP9kBYfuU##I#Vj~<%si~cn}Bz!#@xO;o|R#_!9wXR62JH3$Ui96Zfxxs=X5qX%V=XL_F( zI>SfXBZJ)@dUA7L<7w0e1u8?+6`2x9rjhQkz~piAognW+<@D?HQ|&|mZDSpF?c4X_ zv(p`Nyg-szWN}#%o$)|El5fGIOoux^Q$EONEh4sUP*Bib+GptALCrrgerDQ_EOTVy zgW^|kG2Oj)Z_obypC8;sS1o1%{q`mi5r)7}onkA5EmC;uuLP18LxCs?Q~W?4tghZg zTr?NkNpS2C(M>S15eObKCRqmS6B~AtaFjPtT>Kq*RQi9Q)r|(Vbsu&&Y`n zK9p5fp1V`DMchV#R;}viJe!a^fYZ$= zBIA%Pf58nPUOV1~Cw|pJX51cpC5r1nt#70B(RGJ{`a(chT4c94uw%y0`Ej}HAODeA zL<@O%XtxC2R>60)cLQuWsCedcgNtJ!J}K!S$Kl|3>uKz4k9)}Yto!e_ zggN4g1-Bl@{mbqz5)Ox+FXtxFZ}h7~oy6=4Nae>*S6(-eBDfWB>afT6So~6=*5jAA z57(F9?h66_(u58WJT#I-Dy>6r-6j%V027ep+Bt#-p{=A<9!;<~-;uz5@j0BfncAY%Jjr~ANNLeW0&T6iQ&&iyNsuwB&lu&fm&JdUu~o>>p1eqf6_J4mMxw-;tvEO>jd37X?Viljz-z;0N32`& z!?zzpL%OS9027k{HV&kGe0#-O=xwA3Rzsb&2uLl#H*t{ICi=diY~bbb7rt8|S$rIn z!n`z03DeNTVeAVX+Bu87>dTjlyG^t+gXRq=F8Z66pG74e_*x9|jVOhKWL`ZaYpcZsscsA$kEV|X09kb~TBXc6Ro;|6RVM!|gMV{gbt&n~vOvEpP>dzD(`*zW%L`-%-xW&4YWS zLF~)wP1`UNMh&12f+qlCjG(ptu3fCyY!L9RLd0}uzF!Ag2smL_t*yiq zB|od%R~e}3t$NWpu)@zXJab6*BBzovd4(uMpHNVPpH8A^K{Ho*{&P-sef<5e->mn* zJ^Oz#_a<;X=WG9e7|VpQO(A6Lv{(|^;@H=iskD$pN<@*ZkTPT`AykygR%9tkT0~h2 zZI&cUvc^=D>_q<0t8bV&zd83g_x=Cf|Ht3sG3T5)===RF@Avz5?z+8h4E{mQD*oq7?ZS$kfSCEuCVoh!f2jUGqDu3mDE1BHye}7NMYJZ&3 z&x>EZdFc;-jyHWI)7L70HJ;yOiQ(|?f1{EV-cy_2hI3@k$U6(ci>o-*6JslH-u3LC ze;sPnKwUZO%pUdRA5<54{daPzO*f@HA!zRL;~9D6!eMri;WUAPllK=db8&fq(CV3C zNbBVp{_(L>O-#t|D(dzUBNj@Y%xug(ZOh-V@WY!f>Th@ zUM!_JV?>`DcUTe2VLWC+*Vc0eu2WZ~HmXDJ9S&jZPw&eFX#?q}XRXHWCrB1`2328A zC9J8xAT)y9Y}VJQy#yLS$Q%g&oa8o3Vgq1~sj7*lUCBbnCzVpp&tPszOCerB1g6oB z!&RNmR^${W$9n5($Jb0Dv`wIXR)kPeI9 zIJ?Kdi*(U)n}7jd5cMUm0#QA~Vs97aMz*HquE!}s`XnE_C&!5dEtF2C{i@!SiVeE` zyACz%J$!lUiy6^Yl2A+Y0&f!@o}MT;{k*Z#1(SF>A0)@8fUcmMHlr(sK%CcK~Y zC+j~#wEwR4KU4Kmb54wZ8wws{OHCs4E3KwYt0sA2vu87}CMqWiB%&h~a~T@>-Rul^ zdd#%3=@N90oO*XgSZhZgi{8&B9DS|jj0Zzr+s$(&nB^30%ubwRRHA8+~HRO*==0-f4 z2Ag;^SID^NPIEv{a$;2XyWLnJqKF1+j<7r>0pX#Um+ov~t%6k5YuTrvWMRaN0~qJA zC$wDlYQ)P1Spxxmij0R`B=tmy2xw6)%NFE5dpU{Ll=vxGphPuvz3|}xhIz<&H4#C` z0!N4NEueH8qqf4^Iy|iS;WkEWnJI`m0Kxki?hx-C)=6fu^|M@FHXOuKq@ci95)2IF z+b>A#(ti<9s>Ibv`6IznOd4DIuB5(_#E6g{ik^b#zH5!qsVJ){;Lg zydMP|Yx*IKSdeEXO4t1S{D*V8%AL`XR|*LbJbxLrZ!*&s_!$ze`9CSahfSy}QPuD} zWUR0qfY}*WQ;S$i;+XSM`N){Kxrt(C6ayjh2|88HE)ctD)A zU4L0`r2Gsx+WpfbPtr>PAEA;E`27g}$D{1*>jH@*1)GG-07Ew11Q4<0h3?zl(sCIz4U0WQ!gsZv+pxOh7D=p_%I?>U&<`?*5TWjULwlfrLWK1KI7Gy zdqO}n^myvd;;4~dMWb038U?WOtzj)I&F$~5JO{h52ETotuZUXv*wg-ZwSc7yZ~Q#d z>gqX0BpZ*Z%BC_eXOVy#xy^X4kOk`(2K=x{_ecGBD=)94KOU4BDKP2=%XFhbDy|e#NefN;B|2N{k?;p7*IRAW5&!Y!Az4%w( zx}SXO&`x)7{;%*{r(PA4o;31KOQsdE-3@D7_?2f^I%(^!8;@#VJqKfwkn%Tby4Bu) zqoz~$$^?4>5+6(tLXn3x=W6K3vHo2>A|oCBizEkxgum}3q zlz$@?C5YjXE68h#u&Z1Gy56LGS@F&p23efF@z7vj)N9Ry)qpCu z_g~T#{_zPOU1ZN!;UIX1ym?Pyvq_q{c68d%?Cm(`fQNl_jVqX$E-=e&FBiMWewj&qzD8T@V1$9ucp(~Pj7BV88%1ZjBzR>tWhP3X?O zef(@+PsNUrH`+M)U>mmGE?v8Zkpu(=1{LZB)e7}Q+A892VKIhZZz0~!Wk|Wlr?o5TX(&<&b z5tF_2eA2EN)v=ec#@Qzl@87oqyZG^^pL$Ory0;my#PK<|8Wa0Y?Jt-##Y`S5b5 zI^uH#{dR9wk6w+^xE7VOIrSvRN{3&5ac4ZRgdio8O3G}#1~B262LrQ~_FM7E*&``^ zY`0VA0qgsaDh}AY@4$g|94=degDoS`7YHm)3hRjNcnVkdwycV~B{aZlIeK^L$-ci=;`6nu#?Wp?utDDrv%r$fA za~eP%6Q2FhkMSo@Hfhx=lQ$NyrU5Mi_NG_dUGlihjgo}(>E3KyDUR4#xe=|Dz=Da` z2}YI>eUndo2pjEN(N*4C8204cTz_8vV7Cev`oKbZk?`~2PX%25d=#ts`4tHs zzlYQ=5B_pi?s_ z1McVWtpRnWQ*26zTzDx)_qued1~eU`$B(bowdq<0V4NZCKL!0%Zt+I9hwD3;onGD- zLlAocI<9my&~=oR4;owQIh`t>CSj3hhu6@rKWrNb7prF2}3Ot_v zTzOiA*Qqh@lHG!HD++Av<9~IkZB*@0t=o9UiTI`n*lWD9a5gVIsFn`iZ7dC<7TN)H zUjNaB3m2>%9Vc+JK4AS$e`Z9mc~H<4j|E9in?L0oN>XBZ8Ats7D>tAo6Uc65R|G&+ zJs5D+IA+AAykfT@elWhhL$0IU~uIaf+7f{qK5RMxJck!p@8`2F>eZ@&%INj8TcjJ*A@BJEd=f82TOFOKyag2EfMRK^`%$Au zPlMlHSaki;!p<`HSCWz_7Juo~X|2#R?pR~|P~>pLC`sTwP2q-?eH+tVHU@*dfY`?z zQB=rt4_?`qUp9^`K!RzP3sR=^(wZSyf$~h9!IZb?QiT= zG5cEh7#<0C?~s#*)Rr@}TeSJ?y7yxqK7IN$8#LW3L!n(ZG-`hIm~)eGtyT}a=A>cO zCtD4}}RAGwiM#Y4E`?AxgcfW1beNxH& zMPpO9^!GQh`ujh0^hI;C#gqECQ{7eFZ&dy0&xtF?ju`5j<&yu$uc5D|JeXX*W#SW+ zW5<_FI3Asr*t%D~wXe%?ho%$mJ+<+5*&EgPuuf#mhD#-OzAinz)Qmsu92Dmm@v`r5 zhc##Hyw2Fg@7dZxE-I;Q<$l3`gx@$`T><+I8#b=%v~wM_mb^%){4<(IzZSjwCS@yY zRsDq?SDTv|wkkBOGN`w0n-lQ;N-lNKTIS#ztlia*FRys!>$cm~-EBPbFSn$+pYaaf zE^A#iW)U4`QglO?{xFr-1tKAVxsfu}^6 zXUt!;sDrNVHpW6QG!8`Ykw;U@1D?kt(>XvWCALyRVfbOLeF4MAo}lN`&V7&Al>uU@ zh=kMi_v478v+2~Kg9ke+ul%z>gQ->5oW=$CGM3J)zlZ(7$+2C9a>A({XBz^s%$AbL zxZ|-W7eALHo8}Gk{oSZU*1f~c{o{lB4S0LgdinbYYvsQa8P9m!;cfsMq@VpytIi}N z2#;SF{^>%!8wV$P0eQbfJxB(yS;>6G%ar5Os6{>1IV0+-*Xg#TtIE-XY;5(URzt+k z0DvuAKNcmP*$xZ+sP#mA4sgU+5wb7WQYQSie|)R^@3d!ON5>~gGR8R> zfE@efv&9OM9_j7H-wjAO=icd74CPUREifn7Sx#Cz-RZjGp|5tITy$CgGeFjIKMiCz zu)zZMEH8d5VqG1=ga~RI3;#0Cl_FKN%?#meiOJwGSEc>#^UJqyQ|)xG?Vr$^Q0NpG z&Oh=`_1B(sTy#0|-Kn-DTbAS`do`+S$?>3;YL5#IfTa8E>z&zdMxiov>{Hr0wxQ*v zz2Fq`;hfM+=WRMEX10ymg73xYP~e96(^EN2`p$p&Luulx@$scq%j{y%n3{(*9+#F* zm_NVA-GoKfq;WA)#TV8{K7-ldculd`w2VvC)}~xw#@v-KgBHQdUyhc%aPQ1gUwg1n zstk^xGi;W-hpyG3Ue10)*2&e-u}#VA8$tnY9`Dovc$1@zRNb+Zkn!>H5?sk!hv+c< z^AsA?<~ZAsRiO>;&1lu_Crc8%B*!YbV4?+jmQH>9?%;6l?(*`na!QgU-$$kWqli3@dirpfOlL9JmLSadOG^kYskbw^u%Gj2j{H1Z_nqL%Z`}RUkPKipi%&I zw#V#q4yK5`_45=_L#gT73H?Q*H{i>sSF}Fadq*}P<-mSYk41}C&ZK5k37$#SWm^gZ zkWSkug$aCdH)j7`kC+lj8{n&EPw6JJGJ5y^^d{2n$b0|9w4CA5nl;ZLJzqeuvD1Y= z^5S9fUe%L9L1G$lyy^C}1djjOn>kRV4Wa7_%SCU9fFmMf)ivt!9?j}887L57o0Ihd zbm$IjB&1Y#L}=}f9worLrhBck*>t%)!g}R6ZfFw>NOs_1F2gZtXyfZ(=uIaf)~*tk(9|a(=kE z>eSP`MKuht)}dXyRb-|_n;09y{@{nyy}rS@jXA^q$T`%M$#^{Uz*ccn{V<&I)@BA&6-z;*YHDeU z)0Py^2FM~8KD+4yeSM#YfZJX=YhsyWljJZinMpR$?Bmj53X($)QAE9y7v?#{W_sCDbhG_vV= zUCn=^!+OM9PY)L5aJL_P6T*+!!leM*;!3x>eY^{}FehWi^@PRGCvjUkD9Uc52hWNS z>|EH?dOt^?U{cuJOr16Ne0^I||5{qF(|>%agLOexk3$DurB04r`h4kf`>6@@JNc;H zzuV;bVV%;E-tWw8EPd{zWWRGUx5+UM%)G4W^X+flu$_I4o|Jhy zkz$jGa$%z$#VNWYH!CPQud%seK?kH=s~uU~aLKVBRF0mPiRqWPFT2m%+tgfN3$HP?=3!bL??1xs7J~|smSX~MP6`Y*~fw1?Dzi~x+kh}$pM#A z-9}e~4(m7`{PMd-NYDH8Hfe-3v6>YfLbbkbU57vQ5w+^Je&}$?%<1X1$jT91aw!LU z9Z9az`!{M*qjxhc=l{AwkDqb;!IqjKL+s?|7*_jM-7j2s@}COvKlLWbwN}-P{ah$_ z_WP&#%r>C?IYwRBL(Tg-L-O{_Z=gP4l$F)4;np83Yx3q^sS4;JUS-2g3ri21-L}`2 zwFE`kcP&jL3tvD_&_t<9J9oa%*|8iuO&&aDXzIJ-+)Zewjf{=YQ>>e_&ueEsA0b7g zL>TYx!J8n~UozE#!TOZF873mXe2TN1oAugBEds1{e6d<63v2BK^<^8#KG{s_K*{NH z2f-ydaSN}9ZwvBFR6>zQ)26^ZUBGA+m+0-t z`JrofMQQKVbyw|>i?7D$2sun}YzOKGz{pil=2wqdj|}KNSJ|Cilsomn(XG72)a7M0 zK{wDvhahn>`6GB?@eOZo324RzzOmh%6VDedIO#LUp^dJZwQ73XlLNPC%!EyaT_rLxV23D<=5E$+3zD5Fhgu(~LY&>*c$5q{wf_gfB4&Xt>8v zIZD+@#mC0Z*w>%jX|g!Hurs;QWd-O7>2)1J%0W+zsvS&}PKR|yLZN^#TrDtT!;DO5E4~ux;3-AIm#kZQQhw*eL zl*@epWmP=04^GtN2?_njTbZ$_oG=>0LnhkU%W$+RKh>_>s||mzKL~aT z%cWvqapD_roGsXzWKp*7*fENXZkpAhl%&M0?T5~=EyFmq_Ka2cQMQc(t-A8Zj=;QA{ zb2ga35xd(}r%!CnBY=~bNev={cJ9Q>8#HV9jT}OE|Et1x*Y!3pM(n+6Y(W{fhaQW5 zZC>HE4$&)Ur}Z-4j43I-GrE1+iR;kyECWCw_JTd+4&}6 zxgY|&cm(V$UlQWYSDmqvsWa`mc9j|PC8Qq|zwOqwYwyW#7B4ERimiM+eh*}T9>ct; zYSalj{^RDccJ%$pmoIOkAGNZ#Pe&b`1#l-|Iaoyj;0-fqQ;hG&`%pcKEsg}e=5&M& z2E0&W>B>No*TuOF+>zfPaxbKICQ57{PnbhS2!$(bi83mT%ahb75L(ut5*0O#V;fPN zQILmm6@*MF?HV$n?Q%Lv`6;vmHf*`XEghwqvVXEzGw$TcM=%)dT!1#Iin26&$thah z7ic@TY~Oy7g9P;HREH0W>MQT?_hPh{1#K^F0CT)H(h#x^&H=-wLVoZ*q0hP+JyZ1U zsNxEQL1f*se4Q>gYS>WbAJQ(j1&=}^a3$QRQ}*r`G=SDX?9wPhedN15Z55z9>+FKd z`XkvmMvoi!7~(MOMvT3w(X*t_&mHBWMBNESl6^eqMcP*7bOAc3IM*V{BICIkJN>Nm zspj!_mFe9&Qe5H=x|XoW9v~N<@IGTEHFMq(%O(EwXLn*ZN%9uW&sZnL;TYds!)o-R z88w<630l1_Z#zj3f>eK=(0#anSL4Dw|9UsV7k#xAB( zbku5a_|S~VjbWk4Sd1ztQ?L`L{542y_<8!!1$gA4# zGA9n)Z`{iNM&BFb2M^nKJ7J;!cz_$97Dj*igz94twhLPM6^Z`aPxuPOHuLV?OxtW> zRApgacX!qQz0TO4`n&2IcC0n0yVV)()v6mhEb01}O7I&Ve16#4xUq}&eJdW@8Xn16 zSKS1Z68I^?Z-EfX40oBl*~cvX$or&lM9@$p$G#)GX-0LlZw=EpG~(x@=Ra;3(GDT; z&Ra7DOYN9p6^lsiXzV~Hh>8Z$0XhMW@pRM2!^8)QLG&8%%?HvLFnDJ!A+gmf&1Gw|GFxI>hYr@Q# zwJj{$)MN`)+c08p;b*p`9eA#R$Yri-JL)8Mbs~nWJo^*jOo;1QC~dhfF^J{8x zR!G=2h=mLJtS}V3_z*37mT+vBCJ_=PH0p4$_<_{@WZ~m zdy!BFh?!SXGzw-merKOE0QP@e3$2UOYd7y8McfvGbf6uTwgU_SS?)pADqz5mO*+Cg zTd6KV?TmY_Q_Sa%wSE@}Z(7T2rEbVjJm?D9cTjMV}^ z<30xtT*foF#g+)SfjfOC*+hYNvk8k@34!uLq7jHJ4-C9hzto2)A55-oz^tK&ufV&p zer9UK-Ie^#|FF2Wd5d%GJS_X+Dy%+l{j(!M{}`@4CE@z(k0><~Kfk@h%p5PUZr($? zgtsueh&bvdlS`1ol9_dNkH@SxS0n~^)22=4^9#vLkr|Wj=m=;8FYq#oa)Q!)pR99s z3V4iaFTj^yK@9~I=wZUiE~esaT{Ab-b+#DJ|Nviz9)1Q6=U>A*~61Ncv(C;u5G7%Ct-FD21B$tGhF)B`7l8g~s zv?0S#;xwF)SKB`sh;#$^3;&It>kaCA32S*tAM%p9zN>gQ%An>U=EqSdu%SNSkfsxu zs`oZW$^r@@o5d3dtxxau)|M;XAX7=)ld%5qO1^ymXcJoeiM#t?)16M`fZ-*85vXVh zD8Y~)zcjE_7zUgcY)~B-J4W;9`Np&Jln+a1%`W5w#R6aZ9&LGDi~JEwVl-?1;tpzy zAjZz*CJl;nc#aV*tlqLDG94zJn6v)K5p8Pn2L$CYE@MZ;{(bwl^-I5mfCH`0R$5+s zQ8HN2TdkKy%#^Z8#EMw?En~O9LB+T@Uw9#-SCwr+D|Z40cXA5&hqzVj;4B7EKWR8W za-&OV!^H*V4DWu){u7uo^|)Olc>k&KuONo}p{^bfbRzv;*kz)Q1ox$(qMbfU&L}YI zd0vrpl~^s#d_tQG!Yk*Xwn)pePk6@#0AulqQP73li z^PPk88zjH}OuvG^yNB03I0iNaG0N3npboi2Y4?Q7*O+LQmX*~trr&IYSfR=rRp$4s zec05m!-_$FYCQ6|w|dW}T3F06G0wPrIr7SK#qp(gu1+&=)j2mRhB!?=@LSEpYt@&o zW7MB?`YVX|K_RA*sQhGUza=Ge-d3#d6#NSre$boZL;#(sJf$6T4*K5eJBt5J7^)xs z1Z?z!@%F_ltK>HMhOl?k*S~vs%Bg~`P)+QUztb=FpbZ|eq1kUGeHWMJ8^C;wO#vF# zQ#mR6iviZNQ7xhN-v&}7PF%xWH{k+f9p=6@=X_!w*5<;`G1I4tM1&-$f|99I(C=6- zd)|vm7EkX3Hn5n*V-%Me+N@F?a9C|(az8{Ia$}J940wNk6;5Gyn3l`a%L04ZrvmBQ zw1g46+vC3iQc6Dwi&lQ?7)GGx)mIG=djXlyBAXNdjFWYzBL#G z`3NRe_-b@mFOzFDkoq1W^{Av3pOr+l%ULpj!*9UHKlaj6A9edu;dEI>EL70d%L)4m zV&v78p$&RCzpxVG$S8zH2uT=yNH6{8r4%Y1b#<>BAH_aN@8e79ydyO;SU<2+u=DTq zz0BLnLh78+!ZGm-wL#|ecc@Dcz-Y{l)!N4IUO2j%M>ncb%Y-Mv4QEgpT6Cl#?fBt>FBOUI7Eij_eEOB!2!whl;h+ zM_0ini+|gzYzE6EIM0{zq%Z9_Fz}qf7dU&RFzq2!T6MM;YluAQR;V?uE!0QnMuv+F z8kUn=qHQ=7rzHe$+a~cpJJ3{<#ZbT^v4IEi&C=x0!+22R3Jl`yP` z{0MFYWuVZ@C>f*k%J%Nvi|}VAj(2N7KzQ&VltKYVwje0jgE59N+N*(gl=7V))kmKv zad4OT1LK|-t$MZuJ{$Rz3!BX?a3a~%iNtz9C0K*zf-(c5}IB+Hc(xp>wvHSWVnbL1e^hsS_DA&^5s`I{dUlfh*f#Wy9vFQ299Z@2S>J zZ)_?$A0!jMnwa>-7#(QDpX)~(0I3|Sb-J?M8D%iDa8>T2btlb!Khdy?`TVO)XOA>~ zw1|J-9qp}Ot8PR`X%!s0J-QcjxTz;O=E#h zsL!H~Z=42C-BWK#nsr1Bok87Ij$ena}QOI-k<7vl_-yCo_?dgCQ*SGLc zhCN=q`@4LmnYVvnhewq>SJge4?iBBCb7^Rvw(6J?D~+!*qP!<+y=D(%tE`4BjJo1N zTJ!bB8-j;)R{Slez=KBnee^WLtFjn$(Pidww1Z2^Rc;x=8JJDVsi0hP(&+Y%Bo0c;$% z_6%mEC6cmWv$041@0G3B*9tF;LiHR{n6a)a2npd|tUWdibJ+NecZm%Lmnl0_yY;Vv zLC#!qcTrOcN}?~0Wc27)gO*p{62~|48zv%yrTy_1%lTLcDn44vySD7zLWP8X=Z2S4o`!Z zMGSe=|KBhh@ggU^z_MqW&;TLCDJCAWQ|GE%6+T}D?5es8;Cb^m;=^W)fq@O3i8O$G zR!^oiqeduu@dEYVg~O$tLY5Ci|xayr?_^6@X_{hE zf|SoP&e1yEPg~Fho(jr_kx@IrKXU-HosX=69PK4$8UkvYt zyH6ZSc$3U)qEHf%2UrX}=hiJ-c$n3Z9f*`mmKbbcQ>q7HOCW%RbE&JUwd?57D?gV~ z2rxs>lN>Ch9?1%gQO#Y{D#(dmxP5u&_6hl}ECAS(GQ1m28a5O$w&?xsbm^()llJYP zdXid-Mri?aF;h3T8Vj<~cTv%{!jDiPW_o6+&Xr>rm ztP;)Bgkv(@Nz1T3g(fS+ysUly{(-E38doU%iF_MvV9+a2avGN`dDr5J8U`_c|E9FK z9eC}Ty9?l?)Qm_W)cP0lj6n{aGWD&E*wAL=rfO1!Tdw3M#<8mZz46-Jo^!3{wz8OX67JhSai#A(UFt3k$DB z)t=JV`R*2jeOr!O9$gc+)PvTv3CEK)LuErh+RU73-MyIvYVb8vAO+9~^+ZibH!+Tk zk$;2_z3)Au9VlJcdw>-|=0tJxMzeG0xM>lzKsq87nW!yD3PlqAd(G$` z)CQ%YC(=AufJ(IX;{g82GHQ?oeX zGZ{OP@uw6g%)SAnCUp0kUnhrmV1k1~go;k%_`Vu&V9<;*5*7{mHjVC6v>B>};UsL_ zjdze3~q8Z^KrS5BF=Dv6u(*v4u>|d%xzOL{YSY35@u&|NHaU9>{6$Yd5lM= zk(Av=m^;1$O2fw3Hz?KrKtcvWDY07?W!cxR$rx^Mr4BF{Tp{lm0zd&EAzjI%!*d+Q z0_WHoA4yHm(#dXD~QjUxWqWAGA|wM6hZo8j;>KD@x3b3p|pq)2v?N$D%`A z*fA!@i;R=aU_}*;;nP3YcYhRt1WdcPIT46iVLRPa1>!mLF8zHx#Wz9YEDj|JQNgid zL=^(ZM|5_3nj9GUrEi~I0to~YP^XQD#`z;4=S`ICOPoGBw6D-KlE5LJQqCzQDi?2Z zSB_3kQI_immyqzP2Kuk%)DU!%Etv6z<0&1c9aAxE?fSYAblES64X~I?;{)hqePaJf z9*G#0dYnp%DgwB$;SJXZQAlbU#T(ez z+B(r$Rwqk$BQ=ijpa*Ym{c-r=abJlipF7uK?6J<&v_h9HqI1A+yfSH9I^;U*gmt)_ zbgi%1^fuIwU;BWBkJHQq*6p`&9dHt&-&D*XN4D=6m2%*#pTTJ@-F0ok(3N%piUQ#I zUQK`UMQ^NV|6Ts{ql5^dGWWkVlXb`HzF~Y(V>pPq+BenF=WMo7($*-O3;Bin=Edn}h74K+2OM>BK( z-Z1Q7YZndVQGPC^R$r!>pza4Kg*-EO9QOU<0)b2lK$Vq5P0#9LOt#tSGa~}iGYz$P zmCR@_zIGNfx;M+P#6~>1M+={{t6xnJK6e$^9q!Pp|y8v z)eo}x-kaG{A2_Ty`qO;>*{C`zi|s}}cK~t^#27U^)>-AN)#CAze&?qgYy)BVvbLgg z$lB9m=#U}nHf@Tn;?ElS^!HFUb27q2*_RN9@XP$R#K9vx*g4QO04lwV&d$F%_>&L& zGV~hHMm2pd4UOO{?Yec_M5!E&BnfDGVo4dVVu4$tmb6(+6&}M&jIe43#H-%c6P4>` zRE(AN@#U3$_3U3L)a>`qGvL~#Faxu>3gXXp&oI+4WJ#ePSCBJLTWLO^HZ{CJE=?v3 z7);4Ef8IPILITitZL|L*nfR}r&8ZZm=Ru2|MWy4|d#>WfG>Wf<3C~>&rddJhtP|MR z_LQ&3=iZ^)ti#43&lV`%cGI9%x^@kzVi>9{_6BhJaW!}Ti(aGL$Bq;$d9`o?0`S~q zd`NzNesV$etN({t7Lg5`s|OZ`EjxFL#O46{ddgzG^6@fFgL;KaF#W@l(0~2qpw2ku zAtpv~^S}pt6las*L^6^+s^`&T#>gZkUB~>LoFCilHy(;@$XLFXd#_#uJ-S6+0(=#) z^o#RNCT#!MR7IuiNuXmCO*y5FNkrdC$L$6$UD}U5Mf<6qqDu>Jn>zW*Fpbe`<8tNf zK+fP!e|MDz9ndXJ8c6m^F#9J6EIQ(6Kxf3^D6Tt36-bgGkt`xIM}sw}&t)u~9LYom zFc?*ay9z?irz`P5E+DGNz>0`&Z8{1f`i^Uqo7fkAtXEHHNRbJVg=L?9zrkLNW9QX4#iBe$Nl*(0GVnJCY zq!!n$rsuHX$dM2IR7ujfwo3GmL#cTh0>?>ako*6x7k4XB4_ECTlcX8y^c=GAp4%7w zMMc+{`51`(XaTvc*>7kpj*$lkENw@ix<|=ST6VA%ol_xtj_N4db!F7~j+$D`As$%% ztf%1a2&qhW$4B&L?X#o1r$1fJAgo6;gw%N+4=KDoki9T&~MqA`bEWx$( zIKT@ZAi;@II~)$1T+YE6_72ugq+D@{LoWWwx2vN$Y|2;!0l*JZ+cau7qM^F_cpz3; z%531N@Qk!^6JM(;`G0wHpM9ynobCnzx;>5Z@LRbAy}LHig#?F&C@he|wcnV4Z~MpXtZ`1HTayX#yS>aX#7mxh;Pxl!gg zt$)-!tj2)4E3a=~y0jjj;|`MR4=BU_X^BGsgGhk=*WN)iSyq7Pa_vS#>cmU#i=Om@@0`*!_g;hGfj$t$I`e}4W& zdh1JRX%9j9Z7*%|#V^fl%Y>pBt+Q0uvr<7Mr7axhWySDE~d}lx0hZVG4Fva|;uQ=r=8nROed?~9+^qUa- zm?AK7_dYpDQtBiD4-+0z*Xn3i(s^mq7d6m0$Qg`<#fjg=n!Evm-2K*rH}hN;O@f6J z$_QXo6tcF5iWPN+RyZsMq!0P$Q)PM2*2^M9{_wWSl5AoPdS$_s23EYc=JLbQfl9|g z%pq?rn<+2R3{JJ{hfFuIup9mSGfm2j_@|_G-M_o!o(+A2?yPI85sxuRGmBEM8p+o! zfLLU=m&M7eB^qt@rGH2;!>sEE8bM)BXRShWojaUt-2Cr*k)_vuNoEiKF`3YnsnN&y zXt7zI7^Ut;^?C-wiPh4O&6}01-afvdDP`WB*lwKR2wzvS*-v~wYlEU5EfBx6ppwT1 z3#{9w#cQL+-w2H7deL3t%wlF*-}>3t@#KNfR?cO04`mdeo<76(@{WPd(|j*?nRr1h zsmqnpF%GR;b^MZ}@ha88(#qH6NXn#leZLGoG;ZwZt#$QEW=yLcJjt+N!5Ecqy0W`3 zcHSu}!OgH~dEeYUZVUSK?GyFR`>Mjr@V(Hp-~|yjObO905+t*}?R-43Iv5_|$sv24 zY8$9K%P{m&5{|Xp4M|H%E$c3?QCY?K6zzogN?l@k{>M;_I8j0gd5i@eb=b z8~hyG`i55Z8=nHcG}7lWgg%O-ONJKO=JI^g+U5#|;`%}apvOq(=EKX4s`~#ld8A5ADYn@H?22OZN8g4&_DE> zW5OvAFKi1@cZz?{b+ObLjT@hZVmrM3R?I0ZhRfjrmIHl=7Z)_5v5JZZ9P*+I1(nFD z?QHZ2Ne?V!WG@I4u;J8>i{HPPM!lXfuo%RH@;G*e=>*mp-HYm`@{v@>j{#j|*wX2O z1?B9HC&Yi9POSqrV@>z37Apib@`Az{<$-GNd@k8rMnOaPW%@0(NBlzB;1&BCVqI2>zPnDH6cc~kRCx&0%flf2f{rt1?)6BF% z6~7TL02QkXaTEa2oj{e)l2y8FkK0XCor$JZ-2I_W2TK0L5%FpNiaB|#k(nZ*9;!6I zqDS}d|ATD{pe?$vCy$%@lDzZuMUVRT?TcOZ3=|(AZha&?FBX+Uy#~>ky)C^rwdgjL z_IgiGow+JBn7ygUWossX9ANv%o7cr4d0QU)b(;V%~eSU!lv9fQWDtgI6^ zAAAsomNNpYb{QMhOZG-$Af`%$8jdt#4D0j2dRCs*pml|L@zF&6XwZ&*?FD&t`y$x4 zsHj%iDpt51rjQA6MLRQN;QRYEqA!E%tUh(hHGIKIkftmQYYQ{GppuYD!?Y;aXF|9X zX@xnL$7U`Y&gWGsXP&Pz6?+7i--EJEV$zuTh_qL?Shjt2w@>q_W5?lIR+8yJGCtge zZ*Gp>MF?kTA{~_^(XItAE$ZTR*nJXC`pUD64aXKEs$c>jST!VRm=14t?Tb8=vWUO4%VbLh~GweS6he{Y*F0#w7JJmL|v|2+x# zOpp8atUs*wqRvb#{B(Hm%x{$J2w>N7DL+zD*`LtyGBsI@&zV{uptP5(EyM3f z!}16Yu(P+9C;_Bpr)@)M+3D7ZZaUMeT;2)+b~$11*{JTLr1M6T&NYF42gYa~imF^7 ziQz~*9wvMU0nLC*$*nZO5`z9B!8+{_TZ6cS`Key#4>2kI8~utJCdOXfuYyoTU;T^D zbtl!7jZ(@lqLD8TcztE4G?r{<0n~w@HLuX1oqJtD+a-yiB99TJiVOszwf&SZ(~WR2 z5dNX$nMB-rnmg4klwAsNa+`}Q@429#qG`uBN^Z<}pk0Z`7wP}J4=oS!Cwt(eM>cke zXNoNH`J&P@&}S~tCXyGhX~4@mgx~k#uO*ahe^~?;M8OU3liarKpy!`9;6HN^{{8aG zm0RpBm^>U6Vo%N}aCu>#q>@FvN6O6hkGl3ZGUj+(V=KtSA|@yb2b&a9Y}$SwR-e(t zt;4Ax0+Uk?1Mx|mE-^O;&3!~4JA>^DsO=@3K;Td7l3u!sC`am6MKjlz3M;N;CtS%R zG6o`SnHY5@s{iESk5zf&I|9#~xR()jfBJmithq)r zOv(J1e?O%gkZQT7&%}W<5!36HwD0BDYlYFSd%k%C`;DtOH1Uad;PTIdx;p6HNVxpL z?^YwDX&nr-mN+kTY2|$Ib+s!_E&f#YEbn9=x3I7=)?4bC?XLNlpU5S%yLohXVKj*= z&RKyY2Ole_crwpvVf*>l56pJi#7TXN!2u$0BAx2Q;(oDtf(-D0W+8||*L-9A{vikN ztua+p1&zYDK|T=ffxcNl6!w$sUO+wS!1kmNrK>OZqCwdxdnEhtc-q~Pb=7b1Vx@=R zU{W(pto{uSbLejxJn)Z#g5h-i;9Ft#7(^&;UoZ$Weax+i-GmxB5;Vk@t=}ugC~nsG z_uH1IU0tT76NhvEtcUWPz*DP`+h^{^F;GFe#Y>PIb6r~;58lg$g;#EY*OzlTsAyVF z`^=w7V`I$w86vha`sLN;%?(*=6Y%Nr64>%kMe1vliZQM|xr;dU_V3@H;?#ohTg1xj zty>fdcCex@@0?NB3dC4aL5VV*w}!?UnDo2|e!)7Z3 zgZ(!Ux3%C}qA25-6}JuKMFAC_9!KiD_*A%$oez}<%okgVbY)0MqfsLU8ceP{-_Ac| zZAc_9_iGmgx@-oxrj!x%u_Vz^96tsG*#3Wx%N;;{qQqLV0f3@SBfNb$`!id^x%`TE z?XE&6i(DKD$In0ie3YsY&uKM$VYWP4%#g{ijlFmVN*IYmD9>Qf_UOmJ@_$QO;Y#G2 z}mVvvmKWLW=u zP%ch{Z{QpfFU+Ao1l&rpH$}M zH(z_YbLmL9)SoC@$-KBT$MMZ~kpSmh;*fW3u$5A&?Z_9ODhyJ9zva^Pz!3oh-5&dl zl-63LN^DkS?rx?+GPR31l)1C71bN+m**Fj73LGX1t?*xWa+)1w=#1P$e$djpry)cW z-fmG0U-NO|QXf;+6#z+a-amT!bR_0lTC9UF9+b4bf&He}Fbj*Fg)!g@45~)p5O^Ey zt+G2Y=xjo`KPA}>*e#2|mRVPJtu#->LGUeXj|V@`#ba|-D9Hk3UXMyjR-Ci2o<5yu z-aX8q0q@1`un{mt={sU~_qwYjPjF%i)eC3IFxktf0}R;4Gd_kg44K`Un$4UfGC8u5 zF~^7ZtyWdsy@|++d^sDzJdT^`EDb#^%W5bRyhW@!iL2M}J6^dJ=asQJdJ~JH#8xHg zL!#J3*okJz@JTb2UkBSENNV%n^lbiJSV?Uj!i*b{yLR1Q6R!%15F9)nI1i@j7e0|H zCJ32V_94@53G_|}uL%)IC+2X%`4Lj!wzHyk2J}5@Q&ynT#|!lcv@_VKD}1hErtHjo+eRu5S%U>MixB*3{E2 zm4KlkjfTT`#VO`wtUh#$h%`w1k!eC8F4>5;@|PBCi&>I5&}x009%Le|Y z``?sShUZ10o#Py`K9MlKa;MuDMJM%Z$!TOSnxA)v#(u7%EPMT`@Q6MViUw9pOd>ce zsE)pSL=meD<>C;tH{|MBjDE{D;y95rOSUjpi=+(DkA-yzqm8nzGKq>ppNGnxg`?HxeVB8Qb%v+c5;Ots>LJIO zAQ`Hcb_;DO3iYsem@AZQC#*;WN#6_)0Hl%vA^%5iT`{ivCEbrvU z!sdF#zNVJ(wx0l+Cf#qL=#7nALn$R9mKT~2>F25jmX>e(pv~v1P2T?UNZYQh@4n24 z|5G;rKWabl`3nvq-;LcW7qwv!2ihZoYx|cbo}=d&7g9=iCQh8AGe#F4InrBo;Q70I zYM)JSRhc_T{Jq1hPoOZ_TN@~VeupJ)6|X{E9(n7D1iWt3iWLKGr%!K-j%2e+&nDr` zzLV$%I8|0t=p4EJly5Ilc5T}E1n&Lb?`u#&@j`6-_z4(}X2L6EZ!wRW@uO@X>ihRM9P=k*Y3yza#i&ybdfR+8Qiwr=fsb-Use(9q0wr&sgkm@lug9t&q^Kn?<3FEN(gTE3MPmc(jTaElwcSH&OX4y- z0SwXo%zX;;?DXGQ&f)KWncHR?0*1qCS!d3y1XrBY-&-d%EKI(k2w=G5!aZYr0be0r z#rnoOf?lbZ>UQhat+@R%UxWvy2a>GVN19faXMGjGCZkxl? z{$FKf3w})nVL<2yCoFw#cS&V^?iM+hP>cUCFZ(}|0NlH-??S+VXb=I_*rc6MyVUSE zU1Pv>6fWAxf#<8YVaXfSvjCp-#1d#gV;0KJNtP*YxP#-X+1 zj&{(}I{a|L%lBWP{V(7F%mCb#_&G<7HI*xPlnX(?GA>6_YJ?2opYdp$Y2rkRa%232 zeR;<{j@DxK>i=h*g!PWerOdy$3?w>%QXNPy473c5ZQ4RtI$14?xXr{cR7NK+lZ8pX z_qeCCi8mD=>NN~lT#KXuf$^#2tG*uz=}6FO^|<8`CQeQ|luYC~8g~}_%nZ#K<#z$K z_bG>|#CcN3*(@!6_RON}eB~?icw_G+B^GevVl%D`XAwUpAM=ET_mo4fORv;x6MnjG zR41h|fg-gMK8|jLQV1HdGS0=cV(;UUlJT4^!eubWL{Kz#H)tU%RR&1A;;73mr=bFy zu4iGXJ%b3s*|QJcY6(k)dih@WT=Y9U$UorJ!T0&wRBzRjd48Z=wrnwauHEoQUPJ(7 zP-V6KYgKuty)O{b{KA-&d+je!}&y;^~{*q7^XXh8xUegs4Wcs2G9EM1cQKz33>e939 z!aoa;&uFcnYoV4;{3<{e0h>fu11WP%_EVx-lZb8$T=wjZFR7`k$(&k@3?`RO&M-H< z*RHDe-&GKdDW@<~Q@RFtPN$csVFedtJGpJ- z1$K0fiGciAMD4T!fzrG7iJknMeNEzNB!`P~ap%sR5qFZ};%?5#naq)`Vxv)cO2vBN z6x4xWkjgQ8CdXWBU~^jzXqyJtlsOFPR33;LO#fZpP@oaXhywhS_ybHS=sR7I+3rB9 zg0w>P{SunXciyf%Ku-jURb7B&eXgvnEzH6J;S^iIIW3NLC9Rk}H&p9{X#lxm}$%2YiCOiDLbZmNXc~*@H+TjS3m2dW$R;)IGRXO|9vDT&)PyYCnzg)SSS&8Gu zgqW7M${tKskp15)#|@l@G*p_esu_Y(%8>Ad{PXNgr7(d+yW4cPofob9;M*G$c%bKp zG|fnho=*^SX@9D(s2UGj0|#hLI({HSWdgu>Wzc*Jy@-rsrY9OslCa9GVcaNcbwr|riz&lu;q*Z zV^ZDpHQNN1%ko|8LWU0zp4p{*&(~h_o5wNFmgzld?KTZ?$}ARt51f>8PmEpPvG$&n zVZs&i{vEm=Bl24&y}KhO^Vc`4temx1E52OY*d3b&eq1MM5D1>AYlxaqRuU<@#D za{X2Vmv0A)%tqY^ZYJ6tf=$_4EZuhflbH4<2}>ka_zUFl^S7%ye?HYY-drbmlucom zuV0_Mn(y|`Pvd7=jqdfAFq`kcxjp+}mvGx}U#C$MiIDgCc2ED}8-3YdeseSZz(fy4 z1^-+(Lrm(#*-zG$9vVJ`eRq;>L{$S4gc_~CI~_V2=x~7ve2dC)d~Ejhweiq81S=*22NgB;)>hyU9~i(s-z%yrb~1iJ zxVz0XrpILj_4nsKFCdf^Jr{|B+PpO4ts>}_xUN~SNV76PqsU>~gM$dsk?8c;l-=*e zM)Sh{750CW{%>IaZyAU`xPvX9m~-naTPN}>+q}5>!l$#B2fFSb==xDYaS>W-E+52! zoCT)TMN4Z2Ee#JNfauIYa+aso$&wm2W zN~wja3!wgJKygtY4&i`fHe>axmSgDn@_0VC%R-6AOSv4Zl&9z+S%>i`{W>Y6= zi3_Fde>Nn?CooH)vOj;V()6J3@j~^ln7^Y*T=V~p2{|_XM6hJRTKf;m^xfs%k(7#b zN~BirLb**+4XJo8=*5)e;AJI!iRn#)4N($LNMEPNb?8(EAY!R8FMgCR^D*d)l`Oix zJVm6Wp1vaj@qZezLssGwlWW|K04x&uijS&z~3UUh-d$^hq38P`T@`L`#<^Z*}rH;KVDflRfaQT%c{8I?yi>j;T9Nx8QEHBv5kX!h8rh6*q3h+St9A^{YD%{* zU8s?MvMsxFeAZAatNZmAXp;ts&YX&~JM9YbE10DB$&lNNVUB+({1^ek?2i?AnKJaR$dtu=uXWpIxEl>gUNMD zsZq&9F%Y!=^xj@%FS`S3Mgh=Chbq4H%+v7cFaf617AsD6vlThpIKXNia9`w=88RqD zblb3zK;UQLLGYGa5xgSiC_06QjNn&IC;YQr{YcLG@C(E%Si307QX3)l0^2FbshV zGS4|XJ~P~QC>04OW5Mn53QXT{;_IJ>gm0X4W%|JIA>5S?Qu4tuGQp+S#=jT_7u)YP z`0c}qU6XFFY?^d5EwMy%1o76xN0yObh?EJ;L(C|jk~PD(|aC8bhH z+y8Ycvs^RR{mlJ5_kA4yIiBa9xh&Q1`~58E`QFaS8P;uWm;5a1-mtH@{%AyKmjX`h z1=;_oGT7^8forLUch21HWdn-OCcbLBrI0Z*NmF4;1T6sb1pwGaX+`GRiAxWw%a~oQ zM$Gv(;{@&XSLtpe1uJTRu#q4f@+`!Pd+z$@sMB`yRkK(SS8Q@E9w${7_p#xNF3KRG zvtheEG&xMZn4d1YVz`Qv0CN1s0a#}L{7?Qf3%G6Liuei!G!@}F1!X#&&l<#JivqL3uDmXol2 z*BF?7(Z zD}F?tT1DQou7eg$tUADE+zGEvV|Y>fzfu0ik~q)YwK+!+U_NS(Y2K+Ut=(_HboYfJ zwXm@Z+4}#4N{23U|LX+DWB+`D<3B>A_m>XQUz&`D;R4sy)N&FXY!SX%v?$&&=Ucda zvHwV?4=s(tG4W%$-({<7zIM?I|GtFXoOFthedHeuY-Fm^DDHU%A`9W8U6Q^>IRrMtD4Q)@^>Ek3)ghnShSHIvImS~fV0zs5-+v#1 zM%i=l8dnI6hgqa3nh=W?QuKT&&Oc&``N%j?9^%-+Ft^}sDOp()w0a6r82%ev36Iz)CQl2ZG4^8Zc2`C*No_Wwgn#n}r%w`1}%qV34q9G}Z| zV~p~`@nIfPl9=TA4o=-WKxv>)Whjl!i+>B~yID~62B*6T-ZDnjf5}O%gs&qVO=s^~ zc?skiaVG`Q2}*i!NOj75@f%V*(IP8)o-?^};Qpf9Po6w!68e{X?@RQy2s}Vw5lPem zObj9TXuQ{ugMvgd3QE!pHBBg`QB8#0oK!PJepcxnc{_V)#2;QoU{22gmcIc0!wURmVhx^B49^iv zT%13DKJS~S@P~;t)I0=$&=@mNDu#!NykGbpN#p&B^X?rOR`w-NVg;br>RU-s2a18Q z!!pb_h*N}JFStO5po=$=wpvNC1r%f*K$%d`^}w2;rk0k+>p<&JIW^`f}>akK^o(JB`1Qz zK^Nl#7>P!kx}g+k0+BJf6?Ml;Ijuh_%ZK0#M=WJY4! zC5!9KE4$gf;L5ocdKuOy{-Hi2{ie$xy=UuuTuF_aTFcDSf2E5L8w9v$&LEGm!TJ3+ zrFaeTdF_eV_~f+2U9YL;|D60F_!=P!OF4@8OZyWLBCMFEey(XRUKE>Q&Zla9#-rX} z9ns@1{i!ZXnLfT(uX9W1sm9;PtNNTBre2!Pk{67nCET*rPrm2&cj(%toD49vPSZqv4Q}EvL+I`6CxND2# zzLy&wx%4bD)fHO0KZXHr#&C0I}-h+2p|4i0pKTB zOoV5ori6rI4#-^voim85OtT0W0%|9wvp|Czzf3((5hHo|90c-bC`o60 z9;AfFaXrozEB>vKTl#+t5%199sm+|`{t#B@&!4&;ai@?FP0F47=jQ9+LK2^#WyIFF_YT3G=B)8aHXO;>BZa3WXpw)Blu?;8s}5-{Mf}bBPhI5!s(5=MqMX zF2jdJJnh0q(+Hc@`zeB}PbLunpRb&jW^H9P0Je8yL=TjN5bH^gJge6G<6rZd_1!i0 z!dwD`2=6(e?B^RL6O2KEshkM5YKDzi=0`K30^RxrY-Myc=FMU-b2A}ThJwqGrM=yz z#rR#N$EQ(8F@`ckf&X>vsSOgS1*iqIs{&Gw%5NG55Gx0F)x?V;1LBikUjDKMsVx#m z@$b`a68ri=(n%^1pH4FMKzQ(po=Yefc!nX865+>C{u1M>U$u0N1H*edoW1oa*eC*bL&Z^q@gdfp ziU&}(gRU$gb&J@r3>YQ46dfn{pK*gBjGzrqMv4A(crAUwI&IO z;4fhhA&<8DqwCmSsZ*3Qcu3ag%Ct|00kQkdXaPf5N2M&sM%WHLSbt8{X>3 zzMrGoKiC?X&_rv)(SDm$8g<;HZW!1y)4!#mS%7->=kk|9ll)@LoX=|K1|?<{UGt02 zDz^)r=T*GYq13VXZMoz8yu9#To}OmXs2J25pkB=Hon+;DK{*w5fc255#J zot@L1zbS?x6rB1?&ji>zzA4}y^=VZo34$HVC2^ylUq4bi&|GqIh$vj3DNv`IPoFlw9Q;#*!^B%5 zt80;4dH3ec8q{1;^?5F3-krpP;qyST8X%p3dTd|ZP54LRWsW`E>Jrb&SKE4#x~(As ze+kB#ckRH`<6|wMRq&wIAIg3qFXgh2gO|qscF70&4BgRoF#B7j&i5**s5knnt_oc8 zxbC=dm?+1{FLzkw~m$NHWF9G6Ijd;MF#6?*8Nra7b1js6UXs) z&}8LPHB2TGa?RU!GDwhvOG3and!g`C>KivEIPm%v^VdhKA-1q_-D_k=>kbtL26@lS!`Mwj7k{^%^fRD#As(Skfpf(DxO)OX`K$P7!EB1SIt&Z(q^ zb!Q|ZHcGNZl`d;N>^5Xb#r9xj(nCPqg(>npGy76^fJ9BfyS$t#v_wsdh(Qt7==-gIW&3nuq z!G%G`D^!*Q_!GecX1q{)&++4(WaK@6ER*t&V%3#3JT27GL40ZENy5wW)I1!zNTkfW zGHVG(K-0P9_yMr(eY7whbFvCeEA4 zT9I0lU!CTwtIhzUu2YYFJ92B2yZ5h;V1x9FzDCKXtEY#YVeu0`qWJ(S+pZN^sVM82 zJ0r=CAdeCu5%WCdxv5EeUqE=GnHsT<@vbB- zG|kV+nA0S9i=Mf^s)2E{T9w@f40vYikQUxRERz8N1#=7TZb4PTETc*HLhP&q3OJTD z=55-zQ8H=5UHoddi&H4_7XLirU(;Kk;)OF=UTCiQV6nAHx0}GVxN~<+c^w-^bWqIJ-OOqw-Dcn{ z^(vsxsz+Moj*#q0=|l8Zy?yjuYM_Iy#lc#J8txVzP5Hn67h@6!r^+lU`T|xxh5AO6 z#;pR(tgcMDr?YJ&H=ll}<3WB+VtLbu+S7E6iG`kI?=ih#nCvrY78&)Ur&Fn-9A@jt za>if~^Z6Vn9_3LMns}SoV0yV2BErSGL^{oj?AiMIN#+6DNY7$3^&MpME<1SBOUVa? z8i629x^(ga5p@c~yCx<|AD(259W&;~_U&H=W<^C^GxK*0&3{$OaMT%sDc}G)Ir+%V zxrrF#_HZ+;s;Vuu7tJ2lwbm|U3)5XjKCmYyxda<5hDzpOPsOLAJ7J3bfzW|XQN9%M(%+0NKC4nsi>NwEuHD?i3U2G z_<6_n?V4NX0=??x+~?ltFM0);h=Gvn{bz_fW&*n=1hZdAF52UrBte*ID~}A@D2_<= zhdr%xk0<4{DXj89b&(qf6L;?OAqBIV_Ng}u;eE~CYy7ZlO~r7iGI$oiJ3AscD)>kF zL|Cm1=m-Up2Fb{>sg9iQP+8X%5YF<@%1ktX9FV8<0y@j&Sd3@khh`!bDkFJCa;5qb zq~vpG^;X#HJqHdfNpeEK1b{Euk~2U*h<3&PRj_Q~mU{(w^pn zfKMDcbnO&>?sgSe8EttY*Q*;YLcnj!?Wk{vp3+F0V?L$+T1YZ`Sa(#b8(GgS~I{7CSE}v+F*arszWnp z%Nr$?4#jsFhjGO2i5^4xIO$$;n8`Q&R9edT((!3m$Z6nE7wc=a#FY{0OZCaPH?C&S z&@u?#NJW}Es27(PVH2`&xoHJK3N!*+F&wD~p3gbFbfy?KLTPjn@2EIg9+Y z=f8?tUu?gzcFDn;!!K#Bn(yfIqw?fSor;;0HgBZO!MuBhtG#S9k3@XqmUX$`{8vLX z)Uy56nhzs(vZAo`iAhCl-qggOv5sfyg^t|z+<)Nm*G>zaf2vG>-!r=!r0CGWE_?or zu)1^=hv4}$ zOAZdTkV3e_$gM_p?;*IAwLE_50XU4mDn!{=E|{oBq|%9yf}JCw|!fErzLHs+$E-UczgfB5c0%l?b}K&o zx~W}b|3R*vy)5OHJf`SVUb$<3`Ie+Ezl*sH7HBNkwJEwH|3WXj6^p<7ZGc&mMF)Nx zVCM9&bIw%7;@Z_VkIkF^^qYN@TG}P?2_Mw|jSA~_ukY8u#}V~EHyze(^Y7S6sC#7E zgrovL)qneT-3^qgEsP}xe{G`Rq;ebInR6xoVhX$Gyd1RetAV9;z1`)#OzLisp+wKZ zEz@pHieA$pC~2h-rqt*}`M|UdX_|2vjL#{SP&l?J&i)GD{abQ4%ofjXS_X>HuL12wpd4hg9p8k8QRGhj7u9;mRHL%$#SD$DMmUwLnRaNZ^oC^K$;9p){d^W=WV0lBicmU#XmjAp9j%k=bbl04f}TlE6tUi9%j^Hz9Z5`0efLl*Bq znmkIL`;b)LDg0Iecl<-_HgxB))D#I|>#a4-6c%x}#(X*+Mz|%VSK4#h!yPz)>8&y_AxMZ1$`=gvMJi77fXry| zEHk2-qDmp8X_@m<>?tyFj6aipIdpub{;=0fJUeejhdFWW$VJ^0x81AXtle#$nWT^(KCd<3sFXk7l23xQzx?pX_#^QF+i&3l)LNXgBs7C{WZwAwFWUf~p zl8T{{y&>)02Z{F>tuAsh$`Cg#>&|G0z2$+E2JtjFD_qk35Ec`-Aw@fIQnK}YoE*%7 zY74zVV1sSMDr7L&b3NKro&U-QHs0NvwJEavL8F_MHh=<#C9?>g7ELl0ggCp|N%sgr z1mjY|QBj9Id<@tJwkhe^(r#yto6_$>N3~f?SJ~Sr@(21BXoq8z`?`eXZPd7|74TY2 zY*;{PEcdv&3Lp|N_X&4vKVgyxDs-`CQQsjYQ9Q5+{HC6q++LE+*(`Ye6IO|R23m)fm)DO1WNXb6s#Q2u- zdt>+aoPf$Yw^cEAw1sr^G9o-Ym^YvDuuuA4$RcF0bre{~x{znU;`4}Ai{63&NhY%4 zL($`V2byzQ+~rB+_A{=+E7t6J+WOp?wVmwH*j5(DXPAJpU~QRRIN?HGtYYRo;7Mp$Tu91eOYEVFcA*~6xcUoX6kHhBa zbvAoEg|+13ifks~5_l^Q%cRLU#h1|)D^`S@tAX;V4JsQ-tB2T?!0ry2m-4s80!U+m zZLJGZBjDWDch1Bl0U3y~BVg|LZmzDY;_Xs)%+VSBu(C37eUin%cG%1TjOB#Hp7d^R zL=R+ogyST2sXD~1bhwx6{`h`fVI{Vhg+&#VmYvB%N8YypncS*tTrt&N38nt^8dN6T z)|L?!c#8wj=>)p%P{MO==KJ;CY7mzaRQ*2UU=&9XbUZzowN z^T;Fw4PKW(5ijpfD>#CQj;S|F-GnA;`pL;kxa9+qERrtY;99=$UX_#yHXT!)+|Pv6 z`vnyh-Qmw{QdVTQnKMtftA6z98}OCK1Ah~=IE~I0fHItvsl4LiEII(G_yNJ0r#Onu zB>5BM+Fv|hKbwnA9QzlH$H@-a)nTMnlY&j{9BH`MfkU~|#!d^iGUmeK3;9q0j7njJ z`d|&;+jDL!RaI4Q+m&}PivbM;&gLFG4nrYyg7leu@Hn@9E6YAv zo}PZ{7a|`>QVI_b@0@7gXWJ}pcu7p+d$hFdW7-kAWINE-Wcn}ghEcRhC6p+!j-8ex z$&lNSJ^nH~TRg(In$Net0pSubcZl0!mKr;-H<1MFtvG=~*DBR?en(5$$JMk3_9tbw zong(=IyWGG`A-fF+wAiZ_!;h6ZF$4Fxrlkyd~=h$S9gl1f2uBf4{MkjWMs6r@|w;? zPy5@X+tdv#r){)OFLQI3nN7?A#N_-EEQK>bS6BBQqcsh`(?!U^GBqVkPSTedG?d=e zgu@XOSPf01gky^14NH^QXj}G?+0fLb-*5piG+7C;wj?32)@<O9|2mC-+9MEz!+8#lANoZYKe>F&|{pY+`F z67qqmb6U|1;K@FcVdLU1L1O-=>1Y=rBK8gfbr|i1BJhO?s^rlSJ60sb=u0MY2(F{ky_UZK-$Pqy0bIB5PWSNE3mTm|n6V$WGt%wN3Ce#<*c|69X% z1fR-@R~~#~bEFe_^VQEKzkiSRduxpGxLkdi+N4M(mw5-Fae&#tp|_N7t$x6rm-eyF(W-q`J3a>-BNUCukf}`|`7GPxnDe1iDJK{#_9L%4~+E8CpWQJs9 z?2;wjsVHR7BZy?y>k8sWCxaR5-?69cl%deFHYnOLuTiAV^Q zYSx~7Zr)(LzHwCdqF6=*9(?vagcX8thg7YM6(LZqE+CvjEWwBgJoJ$u5pfWVE~eYw z$SIxCy+7BEkVl*e9%o9cIY$M);*mx<1s1Iwc#mjvN$dU~+21zo!%?Z%N za0mHd7^-E4D&OZkb{?tTDbKB&6nh0c&?pdbzf1=ZYXbMgvxJ0}=ClW&AV-)DJ!8Aq zIf9pozIs3fr;^gKYTbqbB{Uh@-C(d0KbmAMWoCwhhl!OFUWhj5!HEg2sdytGW0aOJ zUv9ux#tGFNtqgL*8;Eu2o_l{T`0(K{mjdvr7%3zG{PCInmJU42zUI&O@;)T2Ovajl z=W%MAa`x75tL+AJK$g{7Iv>e@>VfNbsl)+@IT}NeO98EzggA=;l9D=k)qHAeUg`JH zO>%_`xC~j=bynI8I#~FlVLT4hpnEoj_0V*x5^kBU|Hf*)fa8lzjJ*C zf-s4SL+RyBZHRB1kewW4%|JH=7^i8CY%F!hTi#wwYX3fKdPz4_=Y0i6k3@6ojP3#V}NE2HeL4_ zr#FC`BF$pjh*ED7Y(P}k^DBrZF;aZD=k5r5`!e%jfX&DNgmG59;4?Kb+Pj5Tk~D}!~oMBdCw_n@C$L_xTHaIgvB0>=G`VB3I!{Xdqe;` zpjEd*5zc5>lx+GJ5>MWIt;4_5XU%Rg{e*4sqTf@|oIw462*_d*b{+3>O#}D?YQ{d4 zsDqM;0*IlmkBzHUr%p=0oU@#lF22Id!Ym?$QBjN@9g&!GZt{^DJTEoo zM#D8^buT&#aB9)yT$sJ5H3_YoC{XTWIWyZfO9E5AZ~#*PH1#7If9baxmh`$;-*;0s z-C_7r-aD9vc}(P$8GHx<{jro&KHaAqlRb zU{z2vLsBmL?Zf*5{+Pg=c={=+LODyNCT6U96niK(M+Q4nrmRoU2rspKXKOtB+UkDD zegx@a78ebOmhFchX|GM*NByb2$#lrr^sK|B zrMsV&&RndlcDE(~o;RzT$JU%@<2YyCo0&4)iCrvF{`fHoy1vZ;ob%j?!wk%cR?-!= zw@{FBO)4Pr?VfHbX&;kXtqEVo|ANY;595h+20{kcxu@!I8YX=*;V*A1uKcAX< zTu2#C&_0LIro0ba)wKI`11No2&CGQ6 z<7MI$YY+w{5DW8$==de)d?rbO@sBHJ>D?{MxWOg1hkXsf<=QJrDYAf4c%Ajuy5c z?(lqe!$_-h=R$}h8b_n$QVa=3x4>uWnWQ*gG_lU**oVsy z`Wpe2$2-d_`@q~J9L4O}POcIGS_nIgc`iGLSm_UtES8LBLt*c0AgvYWHN>l&h6_56_>gXl(dX$>?!k?Ju_tG>rLwN!J$i{0xx*Q(V#+-8At% zYCEu*zF&8z0fdNQ65#U?|I5`ym(?;V_52BR=;s3i;V^YyUoC zDnIDAll|hBtJOTnpZSG{jfQnw3x80u|J2Mru8&&JYPTdNpxY|teupBRCOphiPPeJs zp>m0_N$o6~x;r+MwK9Ddn^Djy=Ty@fZ5{7jQPw&3r*eB?Z(}2as9O$ast6C|zvV0{ zP7L-xruc2*)`$w%1y}6Sjh#9a|NPsd9dT^v!`~PWKHE1Zw3BS-j{CNg@}j>dN@`F0 z^}A_pbLQ;Z?{L?99BoL&jW6j@x3zPN0kK%X1L8}YR-gUnrYViHN}o9LAh6zf6oQnN zz1_!4=E##10QAHG?4u#(@{=)!Tx$LNu3o*0(4p(R5Zgl;r9f9;%fq@{?ms+f$q@ZGHpgCc;w{dfb6W}sM5X{B2}~q-|4Vrb_?*3 zArmCEt`t-I!7}umm51;%fs|-Yx14L$(O6RrjC!_@iS8JbY?svrSaKAfgZ#+DNYZVt zWzi}ygUJ*3$gttV?Otwdp0he0IC=zl%qLV=F4oG{g)z+0l*~;8Z_1sLL*47@*187{ z_X&Vrn0o=BDbUa^?8gAbQ^ccPAEX1E=lNwH?tX;iyAK=~OPwse4OEFDhHO$iH8N6^ zJV@#rUO`jUGoe941J0j+$#6x%ufcC+R2m4^E_yiOso=S?8 z;jZyh5%&nVi6`X?MhIB}o4`qW|Jcus+2YR_psAqfzHOwTPEP98?YlN^tc7K-eSahp>SO8hFfc>&+UV{pO2GV4Hh^l22_A)tXOgH|~cq9cQ_1U%N1 zS`H);wCt^4x#?T@A*dIo$7)0rSM9^Hr`MSFXiuJwJrl?T*OKW96d3tjT`%$u@j&H^ zk%D_mpeK%S-AhZF(sjjZJ|VEc4MWli`_IR3Q%H&%6$kEn`z@8rj@Ez%rJ6@`iW^CS z7Z6ynzQs9;*x?Ax3K zVEV}igBehR=;H=Z(^w=OlEH7o>Lt(}-fiJTSX@$BV)jj% zHebOvGA#R)C+!*^HQ8FH>Y%mj>9zld>p;{(oltT&MwbBe$K@{#nN5f(E)pm@bpo11 z3P7-xm_=&Vu75dgFpcjKwmk&cz*!{{l?mIq9JWgSAPNu*{ZizRF`rvgv(r2Q z2u)IYor~oLx(F!>m+tC$Jl@Rc|RG<9B{yfd2$R_CafOTW(#|AJX zNP%C@q`Xt-&fJ9x8Bw=+b1Id`ore$iP~uKIHMJ9HFgmB7diMNYZg!q%Ykq}MiW$^+ zZsSi3YPKaus8N0dnGz6C0L#X6CV2D)6^84aeR0BW3wLCFu1zQGxPr>q?R#`_)u9dxaBAco>iV+|OB0?0IAfyz;M zh=G;{h_Z;b&>F#=w7PtZQ*;Vc-u-8GP%49n7DXm93kozV&uDLaN;Q^1D}*lvz=d@h zGjZbevvcXGkj=G$-K0UODSB`AolG#H$6a)B5CwY6mQJ&-VFi+LstPK*Td;x%Mgy)> z*~PHh3O?P<@xo#(`2(LoLj%lU z$SS@Ayh$l%oVW_Dl5^X^1D~o_VJJDWsVN85hLp@bRE*p%21R0QoJ-rm2ax67&erFi z@V{{3ig`Y*r#4UVx?v?-QZE^ne0jtgzOn4B$N4vSVH$Xzh+O?XDXBmdFed1Ogr)<* zSh#H27uhcmv@MF`5>~qNu-PR14OscM2@1ARUTo`8L%JKhkaPc$NNS&=?~}a}?ec&} zf{yGk%$dYjQ?d2|K9`(f$+cz8C|zFl{y>5Q7#1+3cO~clLyl|uzXeZno*a$6CaG$y z)f2XPuS^2Y2!sK0kaH^j;>C+9mj*diXlKQHb>WBx9upNEVRErtVODMWT+NGi;iu2% z$Ia)+)>v?JgIVHsw58c8Khk2R6e-(R^+zFAY-Aw~TwG#@Z`)J8QJp88t$Ls#9TC<}PU4bpfVa4VXcV?3l)F2nndBJu(3__8ZoYx!FCl$| z`AeB;aOE+`bpq6sh;?DL`EfBd?!8*nj>CB0zNVZn84?nBVFGVe^r9pCZ3_oauJZ6vH8N;}`6T=;%aN@i!*1IPgflSz`>RkRj1iOoOocN)A0 z=H~0yua|&A5JctoK6=$KdIRBT*)bnJe(W2kr>mO^^zuH%nwMu%te_|Ap16i_1t4*U zfgrWwdXZKFAroND6>U=5dKt<)dDd^t!5m7{44C>6x43_Su##h`qb%9lH!eb=sCBh45(sb`hVM(z2%Lkx>uc~6=}{;pnN3i0&4u7B#lc^F$XtNI*l+fTIZpbXx)Mr2qF z$DpYDfqR@anPT$AagbbES}GT$z`8(C8>!R~G$d3wv~1LfS8>z4R=2g>yRG&#(bxfw zCBle%NMT4CnZ%Z9$tR^!5rszhHKFrqK@l;=`L2D;AX14)VZhV2LMTIjUV(luQ~O7{ z3aym0<45GXkWkM{Sne$&cL)I5qmd9 zl-}+GzjP?=2~FMZr-#nn`%!p~C*e8K`!ARDi+kb`oi#3Ln(Arok8Y)->`U(%Mh!Pu zu*o?12Yzz}4K7Kahr^7e%XyCp|z54#Mka-;2mqR8^EqqK?|vea0&ml6(RDF3G;;phcpq z1q=#{eLRj;gNo(0S~J9z{g8wa>9IR4&#nm=R8_mxu-jyc*>G<89NQPSZlwiU%a~&t zmEf&?uz8~vBCOE+e2r6M_hr{h5}qpDIlHpfM-JP?MPiAIcJPvPoKd4j`4u=e5$t;a zKNEB1OSX@mSvodj6uCKVO518#8MPg}v8uXmvVwKbvaSPIXuoCI(xuyif@}hHo^|ez z(5}eq9tdwM((zjJz+K7s|j)czJZ!711$(WPv)S4{4uwcuy+T4H2 zzLljt)>hfIH%Hz&-s$(0w!^=ZM6gJ|aZnwm{^#F#Gwa)t6~=LM1Jm+XzT4EQ;JM2% z<$m)VSsxukr|qnCOTAPGDHeLRr17k_m;XpVcJd1^d3myQLICVn+1T{qJKi|Fa^KXp zvB4qlisGRoD#}3us>+5DBkK13jfSJIruY3H{EfOzY;0_*w0WUR=Tzwh3$*J1e{cG} zP5#A6IyyRRH~yn)E$kW%H@Ew&@759EjdElV-VV=ZlqF#5Tm7i{`D$b|m|rv)5h zz*19IU74C(cQi{}bmm$X^MNEeFh_HK;8|bux>^w0A%DIP?T?AM`N5QKMyF^jzsLoc z3?u)RvxiG04`rI$C7F~*sb)k8N!w2rL^vRGez$j?+n6yoc<|te_w|}~A37Is}74#=?B4EukluK>gZo)&fn*bbP^ z2;-n!#oV~5CQ~91Su&+658r%4Iul#l0Wjo!)?`WsB8M+kbpm7&+dZ!E^2*ou)=|4Y zc<_Lz&Q~<~bu8lAewFm)7w6|+S?Uzjv;7JytDB%1T-+jGrtTAgGqB;s`$NFJMFd2b zf*0LgB}1Qj02EvldsgKk)xg(|R!#luwqS*jLV#V=@b>10B3Flp!NG?5p#d-25N07P z_P7O|v8C5ldpQ)f zq|i9ZnM~5Qbn~FYD<(P6jqK3DRYlj$z>BaoZ%L?=f6}KcTv^;Xzc*O>DH;HNlT z38Q*?Ik_rOL-ZT|0Rgwj#RUOcj$TG448?qAbg{gD3Ll1B+(4qfl{ilHLnkol$)uFm zuO)#)!CYldVomuKM$I6Z0X@Mwm7<n0Nzfds}ACb-=C*M^dOEJ8>T<$|e8cK~}M z4qkGCC*Zb0)>P|9cw^p!IwYLRj{R`2G?1x$`x+L_6w1s1p}c!`X=!t!&yW%hPAs!t z$c;*EQlo$IV+3ZxDoPOKta2e7nYZ>K!PF~{!pbVoJRtT0D(xD8D_1F*mF-{e!{tF1sMQ60%)3Nm(f(=dGH{mrjMQz^_`Z=DGw?B z`2WtuoN-XK3=Z-<afU@ROdJ)Q${KOUeSEAxzMcYU zk^9`{U)Jvi92nm@HMhguiPSvXVWFr$g426)xJF+)#Bf0z zm8rp5htgPjCQpmA6K-)DeepI8=07@1Ivh#z!1AYrqIDnLBU4Z%+b|RvP2cU zfCvm4oWfI4b<#>oXGe7-s$nEblVNSBxkdw?qW7)+BbnV;L_ZLfDb5$b;=7b6O3w2; zcrr?i=V9>b_LfJ!dV8>mc$oM0YE089I`FTiDnYSSRLs;=wR!5*OcKZs>iIoqDy#`U zWDZSpK-rOWW#9x5O&Ni!BBgWsyDRTei4t8gYd~Fbjy>v{; z9H(#h;V&h7NnuFI@tpo81@U9D0(YTDx>k6rymGmFrj|wQ{>wY+*Bhi3y>T+=w0UX! z{6E`1n2EfuX^R%NiJdduBgAZVDqd)$?GC?g+?bKqxay^C9y8BBD)*ZaImdn@jVj9? z-}3y-u?bLZ>Pkg)b=4$?Y7JcEdZu5m z;6@E-b*IE~5C_SyMxbJaRw&dgZ5O$ z>M_O*%x5_KIA2>chcc@kMqNJrZeqBon!52dKNMf+|8I(_|6Gykjr;FZqzVcj$XAweJ>3aYWqca0WOj~DkHr5OHeeRY!!2T5F_up_N_X%hCH0b=}w zz!pmcEox^J1RT^^uLDZ58r`I z!>3f=3Kve)m^p;x+73W&fH6WtkWeWF7l$|X{bcNSsVEH@ z%)1AG9v6p_?b}m6wva~Tc?p)t@)KsCTULp@gkw{*PovVO2NEvxso^7zMqvqB5Z=m5 zz60CI^VGnJX;#{8UdRAir^qQWgEB0UtqJ%lO+O@usDE=#^};DGtpkOvEdoKleEQ(5 z>ia#vtN)cXjqN5wT(lTsKS1%nOI`FUTDEn^j!?rmP+t?~CyFYM#i{_LtNR~I&_zvl zU{UorlVKOMeM)C1C#STPxOK&b3wn@B&l7uLhuA<^FnLerEXx>>qqC9lDtuH5(7l_; zxB=>nSd77MBZy6<$J<90!d>yNsZ$@cNqqk7*oy=t}MC z-n^1Qw)yw}fao7U_T$!uB0USZk3=&mL-TId>s1}#HU@b)wVLK<0rmANJMX#MwI^wW zUz}8$W{aML1_W4dcP%h(b`I`g(c{zm)JyC3Hd*mv_K#yhH0dt}3>=vJ@R`w-mCmV| zjtxmXo-Gpmfzg*S?Ug z)BkttKTU#So z&PVM~*|fVs(;xnqMNpH^FB~axSTGv+t|j4BeLEkxrGq495`3_W!|4L%by>y<7mnwR z+eken8H|o)wrCdI>2wCWOaqPL-daGc52i)zd&>AQ7e5J)j;;q|L=`(cz zk2+OWNP!AqQWF6AtH&Y0EH^iI2S_#btJdu55aSN{T>}*3OAc<>oOG}XTJBqFuD1W& ze20_g&%L-DdfcnHd-j`l`JMd6%sVsq-9h^;Yc8h*{l%^z!Y6CT!OI*^l}@NA>+>Mk z9L#X>vhwAXI{GKTU4=&yOXT-=*6cpu z>6-GUEJ&}}>QCx@EVRqqq};Vi+4{Ws%dBxqd{&Wbl}#L-t|OwM>VN*HLDH{Zx9&yl zZU#_oqIGGND+s;FFV9T+9YRg{*tUBWh?;w52dA6_D~N#$`lq04pS!AddF9QjPixQ8 zS#e=pldWJI^qOs*N8l(uF%e=N(aVGLy$sZp&C5!q%#&;#_S+%v%kCpD`F=lZ*3(kQ zo(eRP@HJ5sO(%8FcYyqi+2dGn)PLp=+A**0AKZEpI3N>r%(1Ihb;A%D>c5tGE_Wze z60n7tKNVRk|3l>65)DP##X<^aq(4s=6<|^74ahE(3MiPQc!?SweU**NHI8ENxR~uU zf|ei=#NHh25})<@HOr=f^k!^92B-9x^f`7MzzmA0xkyQ0uPZ!=z8+ko=DYdT&ooAF z)X0(d>Fqt1sr6uh@K=92_cAV{9}8OZt3*|BQqv#y2I9iSd!a!-N0g*dNLJ^zZD}Zd zQqd##Sz5qSmhrGOoA_yuVT;!*>bELeSA-v2(95oBV*3SM1W0Ve$W;?mK8AeL3pdgwG7E85;x$Dj`0Xf9-ztaE=TK$mcWOCMwDC4dd&X7r*9dLr`#xJuS{C_ zl5=#DWFl6?E4~Ew%K~UAB)N-SckqsZQnN6Yh_#kWYjtss3m=t`-`c6HCa%yl>xwKj zf64BkV^m0eh0x>7s6Py%e+sAA@_L%~%WpoU~=p0Vz2W!yh z^!H<;Lz)z0)Iu`ahuG9u8p~zxB1nprN>ipyMGv3}F{Y|C$$H{9cN~y}(#fgE>++NL zU%F@S-rF=QE}FsjuRE;4An7ni=?nzLr_Y}s5NX4e*OeqZ`7U!y=Ugz_GQ~h<3sCH% zMcxh7(fEfSWbh7Y-!Jjk9VMuWzuBtT#K=gt7=ZOQ7EX^jfkq%mVX^Lp)k$38G3Rmc zXS~&;2-?BlX9%#US!4zZNhQdUwjp|uWq#Hq0r` zNldYy?@-v3I_wy(HW`Wt_P-ZwMJ)9awg=kcu4R29PX!34Z?q*C8Ss7MR;{*zOLC!! zbO>jBBh1K@bf>1D+HEOvZEVvrRFgkiK&8Hmads%1-oVZ%fP)b;z1&{9i^&e{X3d&~ z%XJbDl`8qi-o5XcotO<4B>d#Eki6RBf`r1iDX))X!XF#Ppz8CX?Z}x3FeI4v2*;`9 zGO_4eH{U_Z3SUc9^m>72Etgx@CO<6Ac|xMt;;90?%y-VIr_Bm516V>bAQnz0#b@!Ho;D^x(J-4 zII5N8xlZCS1Xu*S$$6H-^&nlW0wrai{EwtxqHkjpD*8vr5I_^&F-UT41&xol7uA>q z^`fV~L1!I}><5&fQRh8x0!`yj$z%XC?+Q_^(AlRY!S}knnr(8ZvM&-dc)6Im%V;mE z{V(g;iSnhyqr#T8LwO*H6Kwk07R_3V&0xZW*nBOTD&v`+r+qc*DWMUml`5~4-AfNK_1G8*nG&6X0voIl z)4b@1uTv@ed3S>njWi*cXXWXaUq=O6{+0I?{z!qnQ)133w z(JARu416swAmZUe!)JZRvXNj?Mp&V`!*h{-sHRw%_`zf_i=;vUG%bhTps_@oo_^U2 zT;Ty{oS~~LI4e!XD}Im=s6e?XC@}<92`H^rb}5`ILkjgXOJm?3?AENYt|+s^ld)g_ zg-tJ1wCLmvd7nXZuUci)C9;Mt>Q}TL!d+32FCr(B?uX$bofB)!95pK3{Lbj5OW!3v zCptDkt=(F-`-_>jA+YueVS?y)!eW1!m+8QIHlaojDs0!hxoL>S6JK`!lesVhjBveX zSYZ>@&;XK3j11h0_-q?OjOt#u56-)`#;tX_>Gpro=NdJ!%KfRz{a?qux@3(E{Uss( zE;Gr_Q{14fv+(5ZJCHY!LKI3x5&>d1bf13m2NaJ+pgVfC#VbPxwSbcn8Dm`qM_hm= z*@lv3m7Rq2z`W=>ouG+_s|^e-v0)EkfDC7j1p>n#XA=E}jcOc|NqS2Q79;2D1^BPj zOkYnUv?Ev+~v%fGwO+_S>=0CXkeSszY}?pxKEbaND6V+r_kKh z@pW9lYZFa=g(fmBiMHny@`jiXFXh~B?Gc)Cm;KBc)|bB2m?Ky(5PK-+0!}_r__+*w zsxt#}g`D?$qzucnDT3Gqc5=?T^3dAo4iP9283728QZt=>=Qyc|#u7u-tDGDQwe}%1 zO!B&3wdFBz6F)?&owjBstuR029eEvleX1)_qjdJi8*KIzaUoKNY>=iIR+7o>^a&u zmPd{m>#!wJhzH;gCDw-9(Ip9|pXkab(HFBs#g5K#)vDZ{%fy~R_40+aiEiY?{(2$Ktc8 zCU$a?1Dik!@U|8#Jki8aIJsjQaCLR%ZRCq+l^u@Eeh1eniztGBvb9*pzfh`yAjGYD zvxFBwk07V2Fz<`*cL>m%gkVRF(M=o+GMgKbpEKr(Jnve666WnOUXc5r!X)~_jTg*~ z_=?l!pt>pq(*x$IE8~JFqq@z#(w92*Y(fJVZ4-(;zG0ZIiS4`0#~!4%N9WG+P3#KL?_QWDC)6jq+f< z?HoTVAB7IizqGY7^ND(}f3)ZahMr3;CES_Q3U1)ahYRQCFEI&7nV)zI7f;F4l(6pxs}7( zS3m0Xl$-f~^8PGaiix=n__-h*P(X-plCoE$Jm7FuUc7iQu_S%S_JMFR((ms+Uh)Yf zeuh?A>N{E~B{5Gz^+B#FeJCr44*-DUeM^b}%1@5zexsH1u{P}V^c>GGxL9*iN@x5f zo-m&5N(efk6ImU-&7b!LRCjsj-p6&`>NlO_hM+^lqaij7?vkAc4n$F_y-B`SY98Gf z7D8?iGerABq$khwnjrknybb7}s_}=f)H|TCLt?ABw=@!bLgl=!oyUzs<_Z zs*_aaOz~{sDnrz;<|qbeX)VxjmobhBn3?$Kq(9VLOVW+(V^MP{D`!C`Tz}UGp~GLT zSdj&sWc0pCi*(GM^#;c5Mno;RfH#$DNOAI-aBIFn%Ra~DwnLEMGK4!K3Kxz@^aKZJuN+bMMUmf9n*FDx=!K#ZwBmBiw0`Efx+Pf8})*# zj}Wh+3K)UfD73t&HJz?an_kt(*64%Agz}%9A3B7SjdvWGy(5RhTn6|7grFVsM%E*y z`tZX4)EXbCB_kIxavekb4N@y1b_xU+Taa&0`NZT!3C_R$_^}A;0kd_3tvYd7**NT^ zu!MAr6#1)U>LT)x;*kRyxWw3Q5;`$Bv!i4q0H}zn28;5dCnxCSWy&Dku%x`gO^u_q z74(N^DV6{^YYA{T@FECx8VdVpWC%k+3K9?&g;rJ!LNFFnq{Z#Fu!$};jHJrZMaSIN zH7(ZuI~Ci5xejpc8p{(x#>7v&$~_;s0hzKHePk6Z|`w_bd!LD61m1kwtc$E z?%mlSHoK6`C+IXp+C;aUeE!x(DuSG5Et3R~|FWS!^_PbJ8!1Prc&?|d{JPyY&OpVNC(heZdEcbcE{Yt; zwjDSuCmoO#|Fa%^5g=L2)`mh;(aQnv-F7RvNUg5YX&OHT_xo^AX0h_Sy7n)2vstks zhGa)pzJxGPh@GbpVJ^9s`5Lyo)D1Yuy3O=$0lXZP;fN3&$gd_Zr(xMC~i&D3HkmH4Sk&;$6O7% zB^Lk|>OitL2Fo3SDTpCcNz=BIagicwOJW_mF@HlINMx3m2c|+kXgTf z-j92BvFBA%fp~WOQtK?vR5SAKNHMVR2(~$c^+xoQt;B{$kM?nJR=4W=c$x8IfXjf! z2!OP%C&a~lucH&1Xfp9etosOezKExHg(zL2(YcH}YHBtEI~8TVi_3)V)~lhSWySxMcd;!-fyGBbA!*6ypzkz*KrVwmQH$#%17u1Uy4g`prWIdiBy!SO@SR+6xg zwvuvF(RIe@Ca`o^p$fN`q;wm-Rsu@V(#hEY>>>l1F&2c|bnjJnjn+P`+U^9LO*s}T z)2qBd}-`wYwd`(QZ^kqCf_c)eAI-m8E|oHm*fzcL{1p?njI84c|y| z%)`}u>0^c2^^WC^WMW1tZ4>ob`rDQ{=@y0u_hgae(Z6-U_&>JX9_A)q`zWfd$WxFj zSRg7hQjt9}tiQU=@|xEGYryX`O_+Z+tMQFrYH1fIS%+J{c%yaU74mk5oRBBfbh-7Y znGn}5@8}!Cm>2-_Wcc07vll-5RZK%9&JPO4b6a6VfFHl(&g1X4~HR>0H2u-Q6L~%^}^8hMCMd#t!9L*hsAk@G^=D<%W}bq9>L1&PITP1^vtwer{v7|>_s+vzwz0RFte8{oWUXd@aJ z*R(p46-lFL|LNr>g$!w-*UqPfpF&BM_cV{CmhvXjX>Ya9tZVX~N9mh_Y@T+!t6@5BdcpKjPsS~g zp7of4>XP{zyn59_Y(HaU zEYn>o4;l^IwJD9i+FM_ayh~aeO>d<>IXk)F-`&9Mig5;VAYYFaCjZV zUc7j5IS2Ej@bz?kL>#myya(Zg5`k=k97k0;&!P2}i5>i|s23nHO}ze<*&-0U8El!L zpct^_U)Qf69vJTwlq;|(uma!VJiV5Xg|vgVn9p)Q+bbA8ag!s{EF1HaOMEEX8H}CF z$kqFN$U~b9uW{d^1`&m&Q!~DL z`&L{-4FHIr*6k%mGrRWASlh8LV;+>Q@8H4$Q^%<>&4CEDgBV3tGraG$U zL3u)I&2r$$Fa8j)4pJs0vIdpFJ)+1YDv%C%>8cbOVwsB5E966sYEGn#3lef7-!Go1 z{c|#3Kx9+s(-@wW2HzL_&Y`j|w+^b4v42Jgy7s24b>Tf0V2zPaDYpwRnl3sd&Gh4c zXge3r`b*o{ktQNav)I$Ixuh0ISR?&DS>zJVI7+E-VtgIxnPq76M>4YFm*>42Nn$2C zwqbU7_AtF!_jPrTFNx0`I};VUEE{h3mms+YXhozXgPotlT`i+g`RX4idh#(n84sGd zJRr>E&yj_EfdRm*QfyH^CuYghOJsfA;g$Kg((OL{nItWHGiX^?H4Cj#JEAZKeTGa z*pxOhpOP0LAe+!>8G!fUgK?pYH-#6u`_Q59!ziU*6V50YI=6RJk(NkesK9Pw(Wnw7^GtoC z36)R?C1e&dSB9b@M22K4mCBf*kVFGXmLX$NL}Z>RrJmPit-aUU_r8C}^ZWC8_ObVU zuftM(`+VN-YdFvIIe7g2xq5EG0XOCE;27x4Ffn=Hc{fY@-aEXmM%0i0JjvvRr=`YKW zsVEo6$mS%M$^D)mD&EqY34*TGmEMqnaQ4f&C2(b8av?tJoNJXfZ5l7f_?Q;Ju(snf_qcWuKMtf{CSy-+WI@sPKYQ4fivR3k%g_j zA!YK!;p`HcXft}jU-N7CPv_Nf97@#wmmqmAa}V9;iXBx&*}e_sM0YtNV4znDND+Im zGH}t|rGFI_)oW)J`ab+u_j;uk0;23izO;O;>bcM@lI#AY6Z#S_) z&zi%Y-L<|Mv(0b&n}5lj4Udy44ZsjF?Pw*po<(9E2t~7dAFGT#m)HNq?1!&^n$JTh z(()W5J%N+$-1j4T)@}A$h(K8^zHDu6lLNO?z_l;t-n1nsRp9aGRpEwOtZvKz7``w z7St6YaFe@<#(j{t`GISO2Rbpl-IVa10gcF=`2-I<59C1%5mNg--}T_#Lha!TuKm{i z+l3`EfCMVUFLd!VWr61LBWi<%%Mw$$Faw;o0 zdBEF)=JCImgQ3p9oV*Xw#KgKFDPk!S^1r!F&fU3_f{7^fjK!e8VAs1&P;W8vyb>`2 z$qZXO1EBC(9VUnyu%qXCk1qfcd`r1ovTBlhgX2@TG2QO-Oymyr}AG@x=Yv5BY^sAU?QGi68#BSrid^c6aO?cKHhpAdx zplgu5K+LFhxTcOg zSiorque?}2Dy83)1w3k~3(2_nFM*M+s{$>dfaz{`K$+N zp_0(ld;HDIvIcK1OUgd(@hLQTyTKUeIAA{+fdMF-f=Ue)>pFRq>BBeIEC)f5X*%Ey zQjYi&K=XILl--`=!+*jC-~aK$zQDHy=rHV(s}|LEfIBo@D8I- z;iyp!|4?v9b`~>ROk)=AE^d^c92dR`)sVU_3yFCptm(&lsvRw7K;@E zQ_T4yEc+jvu_(&$D(w^F3XVHE7bp&ZJF=E-twEDUh zT|-bvG`|bm3UK%wp`QU16&y^`e~u#7>Vpzx#=|pPL=u4gJQW79`Kn{INKQGW6l@QB z(71I$M`(l!aqBmUIe%H2z=y&dX9~!?yJzaN*lpuVXxhi7EoqAI5Y4hI_+U6&LI?C} zakA$@OwXhw6s(sF;>Sv4w#ED3eU8_r2hkoz;Jo2hR#nxO%q9>XhX;*{|;<)m^yoTjA~$s+0fJP9M8^pH07H7!e%OBNBZd6HxPx z9l}kI&+-gv0t|I7cZ<@+^Ug(hX^;rH%g{6a)fMf8u8?t6&@gNbvZ!6}VRB7R*X2t8 zPd;FLbLREjg9704Wuq(iXBPc)saNQSm9NuvsSNX2pp8mPbI+DNd-kY)y7MmcVZYS8 zvywIm92ZfrxH7m;pu4|5?XTmqJeJZ8(Q+1h)^AvD{I>#o^2`v84nh#TV2cv3ZFFfxLL(VQWJDYq}k$e3jI}!fN$A6>ijUz%$C=->5$8@Bg{*RpBhN z6AMdwe0z1KsM*p(xBYf^eS5O#)wy>7C-+aFhU`WA%r3r_2w&{E_!(74TI=FV5(9D+ zi9#a4cf_sa??t|Mr4U0&4r36+8CM9Tjmkwm^&$FQn-L>MSTxKu`|H1-#w)y;QhrLg zsaWjTfrO4uulL7KpZ1ZpH*;l}fK+uHck42hBPH2P&snoNF1t*%SH`?U#&f>CifV%! zHXZ;(CO69AR}B$}!lezOJ}!R!nu-Lswjc>sv={q$cn)ZrlCIFVDA&jkDXJ1u+nO?1 z54AWZN%Lv0jrfY7pwC~vB(N;PbH)sNAQy$=GjYv!yB2pf4zXOQ=sfrI_czdq=7Qej zdrakJ&j;Z3sDvVImz$Rt^Wec)MuDKgZ{fN#4KV%-w9rw8^^A(96Ze<6V-e zNS`tv0gM^VH&=5U_sew-jLqP|Yj`kt*-)a$bn=c~K8X{08S@c2{zjD3K_Bgpa2uKy z7BeMy9f|l5Zqk1QTr(Yab}!eS0(oB!2mjWsTk(|L{7{|G z+I{+rbs5LcVw7_zg@Zz&R+#o^f&I{-{AR$#9*s_l@CF|a6hVWxZ}lJJ_ePUEp&ZKq z&2o?QJwbSOjw?R-?rCZ1R8ZLPhzJ|S;vuae>w@;s% z^plnXNU6D|ri!W~r{0TW5*`+&T?Q5slaOE(mb|T4rM!g@{6LY{VR?)?bO^;VdZ0ot zW`plqpiCJ6y}GOSw%z^xhk`tecRR;tnU4iKGtm37OgV-DBK?Z>=f3UQ4K_Ox^s(VV zOe?H4Ctlmre?JGe{+=-`al-l|irJUonKFt3&~anoA-jPM8#V;(8?~~wg+g6J!yu`D z(8uK49LdYPRQXOi$JCoPH8MAMiXO)2-dvWCeze|`prA7Paf|t`#3a4y1@zpW6DADc z?8gvD{l1-{CEkYX>I>2&zv@7KFZHk9JcQQ${dUrVl_4QIfu0~({URsfrbwOW8BRbe zyc^o7LkP!u)7GtbMpah#y_AzuUgZ0&BwP8yS)EM}zFH*#qhUkU1Z4BeLthWg)$V`( zcl-F@BO}Kif!8}UKK-1-Q*~7v_5A9hXejGH)SERMEXz2>oO|20{a8mijT~A1_IF%< z--Sm;+HtsId3$!6bt;6RIeqHXbujm-MEuW>Gk<$YrztRe_?9h!Co)TJHclVJ1g-r3 zx9FKIKJjV%%Pai?NcJoW-z(%G|1;FpwJaOXB?j*dv)0>G9$8fwKcSaatxemmwOn_T zIu?0nhdh9^)-PVZtahlO*%%^z+N7+_2s9^QMhS+W0BDwBE}~m9mIIx>sI^YeiHkLK zMS1zgh=}G030AXj!deUmBO)Sh5NUHRUw*OX`@qj{d@Iu~1syCeNHz`OEGVn`{WBsB zDxz5`zm8hkY1F9wpk_Kctm4)4_4QqXoJ8AqW=y{imJ6#r-f=+o6Qpla&s|0uNZFF^ zYMR)VrxHWSzBxF!!KBHPQSVoVxZTOg36d)U?)mh|6HEGP&UnSuZWMn&<-w@JbnT}T z-bWl6=T_bdp8{r+qL64<6k6@P^R;U~|7w$@nH;+XCr+N!4=HP@sk!mYnO=?}uEDokWj3X2IjVi2n znGlEi&_j-+wPR&s+v3!B|2}t`tBsm}_wtO$=Pg%FI7_4%U6(9l|tyffPaAmcbwk)94V=O!$ z3{T#F7wp}2wz2TtfT2p6-Rp|z!@z#~0LrfF$-Rkg^KotcnZ(#($2l9q&|%!cgC-YF zq%zll*mg6d!xscD6pF*-EfRc`bf5W#;&J8xaE+hR$e5_8fw{T45@ql#YrYFHJ1@@? z?p+u3;*4))vcpy{|?<|{nuAPP`vT_ z$X1Bj!>p%*ysNJhjb=#FkbH&APy>0Y zRqFO6L`Pf5mKEMGww9WHr=C~qoNwNb*lzt$Z+y=&Xp?%&ZcHo4R#zcB9?5~!pTQ%(xjZ^e$9s0 zsyMPgbgNQL6W^uH|I8%M_FGz=RCBXAuG_V1*Qi0AGR=-XKVbEs<^cC@75>i_NJ;lW zUfrakH^ldk*D|KaZQ?)TLB%!4DiyCudE96tUEO`wr_Y?(I(0lR!i&?Vj*TpDF`Rj1 zMi}=K_}+c5eDvs%$6bB@q`Ch}X7b&h6;^dI3V8YQrJC-K(ssRjN76~=o*JxA-Mxly z7P1p=vo|NxdX`jV>hB(oY~?bEU{!)4WBzGJpl9sKc+ zQe#i+?2m8H`|l#=+~Be&P-BK~-8!=9VZ{pvju^r01|XFswNW%f+EQ|GfwwNa`;SL$ zq)9+aBkFS&=;F^0B4s4Yo4e00ieXI9Z(d(a zq9to9!nb{_znmmC-Z1c}Uah^fOPiQXmJo}BO@d5v(V}r%HRM-fxLGfGF`pO+Cb;OF zuN@y*`Y{^dP31+XG3#H-K{b8(!iA`N{Y1V+WrxF`x6>izzf(ii%c^z_5AxQBbF{qJ zWGKntCDWoOXBLj!p3ZX7mmsU5Y|4@?xu_AIzJ1%#y;eee{B??6c3jxpLQ^jO3sk;C zw--ZgOR5C0L`~S7PGYS<>2W&SmlZF=_V#U{iD-S6H7*%X5oilvyndk5gJxtAlk871p58cnO}t2Nc%`j2Kz zw<}ZZ@-!(gW1#A7O!koiBnio1hoT<(t~j0O)BEPFTQT5G`2_K)aI-L&9fH&6;Y`lq zzk%1uKx~%PDd%`cdOkj1jvT&3HmJ9XVZ{Z`$oM#Tx4Yl1S?WqV&j)aXLokB#5pyw+ zxf2xi=H0p(a28}I@zG@z*g4F{@l{ro1=`3B=OP~mZPCGg(>$6Fd!4sxJ%0Qiv5BDb z>~QRj6y8ADQvnU;Kg(+#aj3~Z-daf2(s}pJZRYId^GK%R7)6n4rC1!+7d;W8r$dK^ zNZxDRy7iJz&l;(!GG5{+)i%h*%G$99586xRfPL%Z-W0zH{8CTZ<;Y8Ehu&4*U-a3a zC@K}n3gpJIW#U)(zjW?NT2jhmza%f4^tNnX+7$NfV#{`d@h9AXG?9X?Kp?-?t*D@2 zbh$q!i-(Z2$jAeh{oBmkTwNpJ5bXF0KJ}3!!w~CgQ!pvjuisWDTHYB1USPUR!vA30 zN?z0Vs*294svX?Ug!64|Wx^31q{xXRfSU-W#ag*vM zhh&d*B-n6vWRNasD;GJyr=1Q3W$TC?J8l9?PURWN?WK&+}=Yk}#b}{d~Qunk0p5^#;b63*ZJ_19nJH9%cQ1IyVd#sX+KAoImO!PesG=JfQMgZH410t(#>SS8+D5C>jJj)+NJXYi zn-&uv?-KuxW2yG*`g7;{@d2zdG?!La_4F-&Kd}4(Y+IsJY)DqJo(`pf8g+bGVM_~J zKtLNBeYJipWV8<|$xZL*F%K+bidsHFQNdG?o*2k94w&Y;s8LBI8QpH)xS_2R&6yg` zOJ`NLSPN40Z^qU zwup!d%i`lq3|WK?=fEpG&ZU%}B1&dwXWzgNz!0eicfm+cFMtj=J#`o$SMSni&zxvm z5@7$b4-Z4yeVJKJ*c595QyhST1GxVv)KCC{pQx@(?^pTl&_$bbb@g;?B0DFvV1?U)}90ZEZ%aS zrb?G8jU{uKI=ObkZW9|_2I;BY0EBn}_vkr!@*qyLv@_@=^`g%{@uvTtU-@;WTCk#v ze|42dVP#dt@j1)>g+^wY<@ra9FFOCd{DUq#!){9HfXi%Ay8keN=W2eu^H(Tnt*sDl z>k$1%1ETk(+ZM&U*qbrG!WJ` zY_pM;($mY!8lJmDvj0E3Uq-RRckSx1t`8Gp_7Z(xl$9;(T+gike>T6v;o5Mg3FG9_ zP$XRc2r$d>vj;D0hsxw75f52xW#k+1w(Fb)X*XC_-s(FTo<#GJBezZnczDWt71XH| z0ODgv^8q?x1MICw@fEe;PWlRFEhG$6+cc?l?C4RI=;J{_0ypl$g2Hcpy z`M0Zz^RdFA7w*P|VXMg6+$AIaaUsWN`+KNo2y9CIm&16KG+y7{6>l>e3OQ{{r{jr% z9Knq4OCh3mKnJBO{Mn8FrTP5yzc-)fn)@)i{QuT@jvG&b!OPy~P-%oxK>AP8F2B30 zR|W5q3PZI6!yMAAl0Hvx?cYtCPOb8p9^=f?Zyl*Cq!1HOOK0X>8u|I(-n#WdX=F8M z&`m;8JmJOMGj-U>L)#`u~ol#rBNy38voF}6%3%qMmjb?I{A`a-^e z6D`$Ln5Gjns>jAQ`n%q(xT`%_Vfb#SS^Dpg3F_=?=j^Es^7Zswm6&LZ%|QOf#Lb57 zpImws)~WyUvl%Jd!n*#SS~;p^!*_4Z@=ULo?y<-T?S+f_3X~op;io2#a*c|KQ3xCXlE{6F0r`^(kTc+Sw;0R#W~m(^McS7Z zb^d2GT0XpfO<+7g#=6hj_7Lp=3k{!WZGlT}O*Al`i&y(Q>g40=mVW+}VH7Z_{(cqn zKfk`X0sm-!|GZH^jRk+zP+vdxY^rvXkIizY{C(P18z~L_&u-3d+P(9CcP;$Q|C>KJ z71TSk>Pmdf=%ll$?_Xu^`};E#@9AuRzwMtdq~WKTUAlIakX!oj-!Cj=fSui1=~7c$ zHvDuY<5!K$sNu?`c{1AFe!4zxK8#)nMMH(Kbcw-w8`dsn5U^eTHybt+iAC1-$qT{Tv)om zKXyTl-K*R;)dg>=3-6rl^F7zBhH|6#-xY>g!%xFA`5=GCy}$mT>NgEAokt1vE0@HW+QkiOhA(m~Dlt)G~86 zfmY)VkQ$EyBcscDorScj+RLERm!ivAa9n(0r!rcRMD_+!%bbfBz!mW#2q$2c_f`HJOZNNoWuC+G%`V%$r~0SZSM@vcKUJiR5~I{;G55 z{1Q^Y8Ga$0J~-o}4C|#5tYCfE=!iq@RUtBe*F>z(Jf>^hn;koLlmMo=AhW=b#`a_f zY?*@;I^~s>mTqpX70w2i!gua$1*pFUVD;&0h}_Oe*LtdSm(@}CzEP{GaU;Gmm(4Z+FcIy!b7q>d5H3j-QmCS zI-A5z_43*aUYg-^@WkEI81UW00Bz^4U7c_PWJE6JR)N})&2$nJT#P5zcX4qUU}KZu zeAjW{z}oPi%y$M_>t)a^*!dQ=(9~?(sgo+#cp%?e3}2Aki25bN{MfAGtgK%sGMn`y z)3$=QWomL2rmsNA&WVMm85CfZ^J-9jX3uJeS^r{bndvlh_(9}$6F386^+hun!Ux|r zZ7E7~_FYvs>J#WIV!p}o1+FG{8XtJj`@BbztxdhzqwgLXvj&BW*YxSz zY%1xjWZsXv?aj0FsMNQELa)E@?Sp}6Fj!~!o~fenmqUu-ap%0c(}8Kr5`Nc3m0vqR zp5$iD(FDPQP*Ty*SdAl_2c?sgmkG%Uv9a~o9K_4Vzbn=L>(uHmSM%}|NJ)Tulp8nR zU_Ld48-im~HVpdSxVVuo->`N~9tpCD!RRv+-sM;ERGPsD#LiwWYRIM@masyBY z60k=YRE`)krX>T|Jfr|3Ey6b>=JI6tC8NPoV$b}+;kLp_60PkzE`D1MAl;S)rH}2* zU4uhg1X3qtWM|hSlwYKANg^LO`Ja{p#_z4LvT_I9aBy@qI++X*&rI7Y9-VT&^N10T zsac6);$R$)kDmRvLmWixy62$N#L%JD_wU~^xT;HGyqc0u#z%7U^1{vR>@3O0<#Y=D z{HlTw?(BCiRGSX+1)q0;T2AEcu(9sknOKhjS1w;3IBuL4AM6q!WZ+bsYc2pDx_fvy z8Na%>cVJzf%0&KZ#tG#Cw{t0DS6P-e=sw(Jo_w9l}C5+Ro{k$C4qjXf=Cp)}z` zfM|F3^Hu85;gEUH!!G|gUN|OfEPuf0d7mYp>+=I^JKk6L5bk8KF(@R&*r&+>|C;LZ z&o7#wG2OuLmQhrsMGsJp85eUKYaf(9c{^D?1SX5@(?=Fm-Sgz zu0q3Qo;pY)9GVSD>uOe#)X%3`*Vo!OsRQW;QnEIgZVhxTer2L3&%il|z#Y5fs%DQl zZACOs9Jzq^1bP4k4sCX^hk#^cH;1@V&E+o(gM>miv5ekC3fKuvSr74?-E zz-C_a@z+2MGVk6URdP=J12Cz84)1;)9L?!rI_*uSTt+zE2 zrA4(h){ao3eXw9q9!aoanC%=ON+i9P54QdgnpAF(2ubad?w6KjF0rxaJOd0W*a^|W zep_kiDA2J-c-(?|THAN;+?m<-HuNpS5(;*5!sy*bzild#=U^ZZo>C&`n9%WQC%4qO^9@X&pHKTmsB`-NBy-`H`@9lJ3H&08}8_+isP`6PZK*f zS1Y7U$Hmiq+B7AQ>Mk?xsgRdhyS3S7OvSYZNx@B4d732NgxqiXXoJcX>eQhp@FAKKYelzuiPFJ^S%EmvUd22o6HwpkruQ zA7<5j!;Cgvr>R5IxR#X;1omMUX#u=4J@fM5@Eq=rz2N2&7 z9{7l;HBmGVkBBoAc+5*|Ir9eECz>+nIz|JtHn!=v%y9dZiZ*(P{~nc=jwngyA}{A` zqsAOo^6MA8MFw++QJD?=?BDnsStSb+=K~e)jC)51KC4Wol$S^>kC+3@u~KKmqPD6# zYDs!PE_&##?w_E!xqf|lEa=0253>$HnV|HkQNxBT3#&~o#|^)ZV(|^zV`riaau4*? z@0P$sCJC-_upE|w?0Nw^37l`{8ZX7)H^7uuOm{PJ7LjEREUfbKkMNjK{EQxf?5H)~ zt62PNEN(FG&%eT384MKx+Fnd$GR}of{(&MZAUu(Bbs}m$>dcMSfpS04B6t&x80WS% zXxx~nzNP#D*9^r=18f~dJUn_6CgQ?C_1XE=hZQ)O)R8cs$BrlT74PdGRo zgb;&5WmpHQ4Q5pal}+J~Cd{6_0Vs0YBDb~XBYOM13_wxL#OXkf2s*mQAO$!-H_NN< zTDGBo^?7ozil$}|L8rl8%X;U}q5?)04;?q-OWss#O!sZzvD5pM zmb!B};A#mq+gx8X(pdY&&G_5zM_o*sCr)T#O8K8xPhLa|}K zR!de!5KkI(?%bJaLlyX1#$F8P>)uEB%2ev*yfQ}hSKw_VJqjF)X3LgOI6=(HsM(uP zNNg!n*PyASo zFQIzK$occ;WkOD_AZRKNIz$&(UG-^LpQT?LCMPF5HJ>7#kNB({c5B}$jmBV(x3^dv zFudK?z6~>s9Jko@e_U=;Tc_VF(vmmtmWFg6e^YJp2#j5L6~_4~KS1p>P@^10miM^! zOoqc2y?<1D?AWm=aAkbOgK`)5d1KG5ej7gaf87R;cEAWR(NHnd!CP)vGCvSe#qgLow&zE_z<%fS0K8Vy9g>f4&xts+b1L zv;^BY-bealXEMGl#ia$`QCS{k@+*9~RB#igcCy~?Lc^3vTM;{Sh*;OqR0I;ldi3Z~ z-(chgb>F05A0c2Lh}r%lI)uP!i;?@aMqHn<{O1BXpyZ=CKm>bz+tlismG3M{TvVa_ z!syhslXfDCrO-FNJ=+3-cvwV4Ff>tvut61t*V1daOyZvgS(1Cu%da|_a2tro;<1)a zdhnOB8@hOq=Em%bMy;b8>@^{}Puh1>(pEouH>H^M&r(cZ7YM%=Om!9{oHVh) z-B-}!m{D4B-n7+%-*aUwZm8&o#l;!$9^Y60SPJ8$PC3&6es1ubIY+ZXkE2bazZm{{ z%&m8h@;P_!UeBGCYDui_kTkENFBBjDMc+Rg{jsON>4)xM?woF8$6V{`mhnhTpP=wO zEtZn!1&7g08bu7BNw|w$pdJ?H9CEy*up%S`oof(EJ z!M%EdsbiRD_26|%!&gJjhK0xaD;OyciV5{NNTEDt|U=6`u>3Mrqcg|8q z&KlMfEUGH+M1E_Rw};XHTfaU=iXOIOhZ3-j_K%Z~zUCaE?LB|>>X5|W9zoWf|KpFL z*4hT&)92YzZ!uG`=;PA{v@>-m%Fw(|pio-$xhyPingyh^EW2lTUxrCQ2MpHb^+MRm z5<@q`oo&?Bouelj`;Ybl>=2JCR3(_6HX;;cblt}}!o#bD09M>3@!9BsUbNq`^0vnv zYe#mSzM4wZR$)g*tId>?yiyFzmb0qFox6a4)MjhtYSkC7ULhN6N}ybW6(2`>BgEEr z1<;-B1ZM49fb`##Hutd3gbdO?9`=OZjy=Mw0qs^Ani_ZR*KeHJn(Rs>0kt_T*KgnM z;5`PU(F(l{+b%-M`@*i=Y-MV%i z5wC1$YPx~5@QBE+uQfIXUowFbFeGb$oFdAl>aM4|du;@>?#mlb9dTV9rzSNJCsr~p zbl-9IY#%^t-JMhPA6}$B&(;VSpX5b7VLtVw#QLE|46`!8>8})ABv18_}=~&C*YOAOB3u9s8U@m|EOJN3M z_K%3A0=a?Sk#hsy&A{9qsfcQmCab`Uxh#8mi~6&sv;Kyio*J`WqxTL)jn5uku}woY zYf(r!B{(|(H6rcPsZ>xRx%%gLNc(v+J_-g2WNSHYR^aDRnd8=JzGtXqWJuP zP&H!zR`AD1WIGnwP7V7+<_Mupf5by_NuCj5ucdVIR@f+e7+Pb#}iC21QFgltw4`yWQ2xFG} zplz<*58n?Z^#mfKToaR0(-W=61d% z=M3RgaH*{2U|elLMpl(0s(2k^V_O~Di3kxgEECGLQz*S$7^|99e6A5FA8k$pgMoE_-O@-Ri4!oDrl!4MNLX0Mqzbl zMO$Y#NOv8B!Hkz{3cG>U2SKE6V9|EPO0dSg;wx1h_e76p` zrFrT&EY_N^ry^4h+oSWfL43rhkfKC(98X}9pG-*ZY7NL2_Ocplnv0;OoX$;}trW|u zpfQY zDAQL)Mn(n%$3{i1klhcUX55ag1uhI$x8zvB%`^-Silj8b2In_$z5!q%*UA6r@z3A5 zp~?r`eC8oYj-{TOJ1JN8m&y7w^gL4Fnr&jtWd-Gstc-9?WoyNM%|5k1H>dDy2(zSZ0R}Or~hYwE%V@}o}&T(qfgB{AxkHYZGqVZ{xB^d_7T+y|rdAwJ`l)GqJU^{Be&4o!Vl%%-Mbm3DK8O=id~hOm7Sfk=)!y+@q_ggZJLce2X)m08yTXGLFZ4?0LXFwKdos|^OZU3 zuIx?faC{~N75jyLsRE?V==X;GCdidGaAkA!(ozh+ynWb`BBe=@VKW~;%ECvG4(1)^ z4hf&4N7pUo-Sz9&my<^kDDYAAbPl0*n`E9b0+U@aAXF)}G6m#5x-nSaZuqhInfK#{ zwB)IXcpPeNvu4FnsdiEq9?82o3vHjVcZbo(Jb(6Ah@TioZz7Bb7d9qjTKl0Wv>9bi znUg2UEPmh@#@9GCzoAV4K^)g4O|uxVA7q&3Le zIw&use_=sE331yZd@_i_#!Z`65?rX~8`0u7^=k*NVb|ql)TtV)+q)t$6ear_DrP?$ zf0xEs`R>6@yHiWvHHn;8@15(%^q@$J?Fk;zi1AJX2)oYDkMG>MGwa=JqJl7?5}wIk zVqT2^&9j$v1IMDY8w9XU#CH;eJIRw0M|Rc+6o0$9sKN`Ds%m`I543NF=2qjWx}cEE zd+!n6iF@_n(rscOje&{tD%&AL8o_Hj-5rRqE*s!XEaLcj837KoKe)2+6o{p{f2T_v z@wmT^I4v2@ZJl7KSSe-PX&6xPyxGwLRW#O{12pka=ZJ3r7N}s)Ifj z3A_PocFx)9zO0cTi#-OZu<&in{R*CB>oMB*P|!=p*?^$)Eqr3B0_p+y5xFf^yV>Z^ z8Z}}>Q{h}8P4JZrTr=*&kULCQ%YyrexJ;GOzMuEU#d*N-F3_#o`h=X22CtP1iX(ggF`-YdRL@^{lgQ72^RV@&38;9?v zG;Ki9nh?6B>SPZX0OhoYZyu(0M_}weaiZ?0TlUaULbcIyjPL3OwfP>HGor(FL54S>hERhwd32%+jc=&YJ)X$vG&ip4iVh|TOo^hdhVl!tCH zKfHYV*Z1!Y9kU|JcP5NUIjm4}#3e_l6L{>wLFKBZg|HP=L03$gIv=ch?oeG8$4k+s zRgt!WD9>-V3Ya>ffP{H2Yq=(ca5frbmDa5rVXTC@QR$L19H?|To1JA6QOCrjAyw+O z?Hz|+B3_?13kq7aw6L(SS)^K(Zsk1?4V3pVG^<%}hCy5Rht2e@NiGM?9e?&H zHVFXU69m6&+}JeS2{G9(s74b)EyeRd14ajT8KcW-)ftojXKB0Dz3V zyoS`-3M_viVDz^421b@1qul=Qt&0am3Fq(> zLm<$IVcWMGs;|dzwHQo&6?n~Fpii&-xKM|DtC2?O<9k!VAieM zAg&u&YCA<9c9E^BHJ8oZZ@|nY2Ndpa=FEcips?9 z!2&)D4=#vO^2nWnRLlv{k?8r{I=9G8`P?$y+|DoF7N^TrTIpm-F6wWa(q{_d4s>9b zxBy(>^9Wsn*YS())sySuM>7V4$tKV)z-V=$`iMy(PPwA^VVG0gab0X(V z+y03qe&;3DLwl|?d>1-$#*Bjs&lUITBMDE=3pvG}rv^YW7N>eT7B$)kZ_8^Iu}ng- zXlZ#FvVK|7AqI2@=|~+yOj9R)FtK&~la1R_-E^{+17d&+hKUp`&{vd(Yj_%# zR#x@6=J!r{>vA>iTHP!LzGla|2QMUJNGd^+GOIq~TK!D$w_Lj9eSo2#a^7iMoY$cEq-dU`QAb$;|W{@{mEpFY#V!Svg<+so^< zSVZ_nS9w9$v#GYlatORUQH$qHZ?q=402# zxBy5-x;^1Vr6%Id=iS*-R{2L1?s5pHY!aJwFZpuv*fHY;5i2Y2;0I3Iux%PBk$gJx zmz<=0bc>f0+!J|`M5(zCx0$v@CzVBOE_u@O#Pb$>gwv!9Rg@4 zOgEh6- zhyU#??nxI;n^IbR!^>x0zIfpd!6U9L2-pIA#lTn8XMF#_+|E3@dLZQb<`b3Izg>z8 z){!FJ;2{Trh=6)q>VySNAD84(^ZS;ize#^>z3jNYU%n}bIa(ANcN#_|S!N+(BBTUc zPBr>4WB?_jteUB+c)rKt2fJ#TP%1?et1Yh9`EXUN1A*ID@Wq#xrL~4!ee|eSbWQ5w zBTTZeokqw;lkw-qzU;ml2doRAQa4aLVL>O#89}%~!<3`XKHl}CstP)AEfNXs-o3{d z=-LN&B}*Yd;avQ}C211?0{&;T>@v@3l?9Fct&v{M9o17)O3CE zO4Vf$uFDe>rv<;75TvWb!8aos;P_bY{{8#+&iVFch@kPeWI8oUU}V*%TUU*2(I<)4hc}8d>Of4Jeo-tox+t^_MP1g% zn~Gr+lTD$bHZFQ}ga@l#*Q}=7X?Dj6j=cHPT`+CyC=G_UYLikd$?xw6$Z%X2#8)(6 zGT#$iFgnR2P%(xvtpPyB{G^SMk!v~o8s>_~E>r99DLGkJ4%V8->tjt&2pxJe^Y>#; zc&*^1fOZPo4rXKIok}SWF5P6%>dn+_45>)PO>to9G7Ah+ux`k1gcu?A*M4aEcKBE_ z{ka4D@T9qJGe`?mkbpo&tpjDx&;Bag|5-_;@>N_QJ`nT6l0`3w#4hIfOxvP zmgS+Gc4Mq>Lw>l)FAQoL75==9+bHj>ZHEqZpxRo+QzRP5|s%7K#W0zC?_a`;R!YkTpWO4)voFdNqY_& zhzKja;8!zLR9U6rRyL%ywiXrj7P#3(hs%Z%&=kj;&oH`j$LvES3L zH9ljFd4hp3P1apw<_$z1{M(*>z8MSxuHt`95O7mOWQ5M5VXw1`KGfm!ncO%N z^6ibdP&2`RrmYb(T8aS!mInk|g@4=H*TlrWoZ4+N%=n$t{K@Lybkxg4aVa;%bSY4f_M2rhAYY{#~7pe8Xhg)O0U{0%iDD1@$&Q3E0Q1Vr8n z8Mu1Iih;p8N3vc?QODv-QNpQBwFfb*e%TYp2&V+64G5+ePkVN zebgK1V`{?*g?;aSZZBmZtA6)*9ElW=jmFrU3G;;MOUPL)R3Botn$KZ2{f^0u!sJF= z-uCJ}6M@*susTevWL2g>gvl0L(CmPzV7?af=buoiy~E!(`_d-})|kXst}M8Mv{f2p z;y5nG$H8G^R?bBvm*;^s1ufz_W@cwwy_|TTYl4Ml+uX`S7}cML51m7oN~l$oECIw^ z0}lHbXef5aA6J124*!G-j0Z`?Cj^`2j^X`agzQ%K<`$JoSY%}TTb9&w$DDs1%pOGC za)KF|+sAyUSe#SOd9xfxMU{?nHAI?;>#<)b^}L|8#ebN98qsvtY}S%XKMkQQsH#YD z>6At05kKxH9QsjXJ5}kCw6wJMX4F2eQom6#@gL+xsyh2@6Qf@alf~>1jcWOW)@h>0 z)?3Goj#~{`w#Be(XaDaO#CpgO-MmWT(fjfb6GdziUpfgTHl}hSsQ@elfZuYz(Ks4H z@f);{>^8(@7$a3cMorC=z$0`=_;#Y<0mX7CiHiuj&YU?*G~6Mn19gnq>e1m#KLZ`% zLgTmT_zgIgoP3drMO90yqoT7)Y4dRTFfY$Gz3YKyXlB%62oFh?QrYvGQ9{&3EwLgn z&?;=->aEVCE7(Q#m!IMj5+3tNxw2SvhO1m<1pa0s-wI}V5MZ$=GFgXo9)$*U>m{fm z0VW!Be!yUF;^#DSq)kk$5R9}{cyp@!xcaJhewRM1^2D-M@ zC503sh!_=wdK_Xe`)4O#i6>f>mU_6!@bLtd`fx+Y7OBNmcxd!?jktv9k5}>}gFjE4 znvz7(3%DW$4r&fvt|w6WFL|``4ug>(i1$#urP11%hYla^c;non7zgi{qre&7*O7H@0wPYE z(BMPa{)+u*Jm8&N%Ey`|9wvI5H?OzB&@|B%3gdA`pzN=sB@859L1BngTu6DOhDEXTfjQPm8|33{wE}atC^{;Daw|{In7q}4@7}z* zlKB!Gb7T`Zu#obnEY)Fra?uqWX;bh?|VNncl9!bxBr z0X3B7)Y|?CUZ=rr&aCa+g?kpnC$@>{vi2mX14ThjOi}cyxF=+Qy$26+SsDSKX~6cW z6}sGc?r_1Qk^`8@um1SO3)h^6c!?T{f|4-|wKi8OhM(oxn8Dpz)E(NRckfJ+0DbXA z#5N-KLDOTQr*=6jOS}dD9MUnEF$VSp`y?g$jzD@YMa*KlIHK9O5=RYwx)ASNJDZq4 zd|uqFCrphg*zns!G@|;7&|F(`h=56m-)aNx0K5(a0Fm5BUk#D6M(ys&Dy`rRvSAPF zz_Yhr_C?%b*Kk1Feuo8LAa8nXuyGXw5DMAl9B8?~DMc7*zbs}y_tLBvAmhR_UUS59w@?{&% z3sVs#N)0z3T{`qwG*?y==O?T=#u@t@`Diz4R5Rqenq9n9C=Df}AgMm%?9>95Je0sG zu6+Dj2U50dI;|ML_ZlrX*PFiY2lKltqu}**E&vzz z#qI6Nd_yTyW#R<`h>`d&+{0`R|Ha z^JlD<3JD0-@7A3X!~wuirXUamI$3o@DjzMGv6an(ttWKTtG)W8U)39TqND4vn5;NYZ$zxvf1AtL(Whraf+yOz zxwWQa*%b84WZ(_kKNC+sL89sC17F$&&#ptj{sjp(wM-O81s1+NbfReTB0{g@Y!;CF5Oqoptg%_)2n4dKm3MH)e=@?Jhz**O_xbVD+Ax(>G)I= zVZqpQ(tq#Xz00Y@CxHHxX+ zoX&*WPZ4ryYN*tIj&k7F&Uw#h$I49@cM31H`YU*q3a%39Y5d4hu~Zn%8m4n zV6@to2Qr6>t$y57ZjPOESug(pFUAXG5D?)rxkdKztxOmm9ySZ~7bHu8)#>Ps(UztdAV%HDNZ8K@)^}W;40YyzrCNaU$7DbFO z2ah!V{Bd2j$B$ReKa)#^Ct_p55h9C|_af`i-l3_-sj($(5v5f`p5=uvpFfMR9AGnQ z{V+cvf_eF-&WldO{M1kplc}%;-eK6ay}FwZ79vO1o9MRZDJV;Gg)zzZ)Q|o3h#|kv zdzQCi<;ptfr2@;#7d=Q_ILvxfOD470Z?c|0*a@Xc6}08$#k9R2TW+RI5om`E2z7NX zM;5}Q%gCDf+QjK_%`&)z(A>_<6pTmaoY0F|gz4zF{&M8hlXAN5jOTDPk9pY89GlKe z9^$w8F%WL{dXo`zD%DE+1{Iz0IpEN@yK4f_O`yFAR34`DrxZ5^RN(ZzfzmXSN{zk_ zF{R8z1%B_~fy-x0(8w$@4YRGkBhSm3@yivU2O%ZN3QfOGWCn_5k*i3dJ9{tuoji1r z%0K{)5x0WS0!r0}??#^>a#?fA9Q5gfCQpt#8d^%0f;<$pE;6z)!S*p#abA-r8xYR- z#>WQ{r8E-#*Mgoq$;WrzF&-O<{_|G`oOx7z;HpoQk0_nXlj43YF}D1T00Tv zARGPwr?9R38+HrwUXYLj(e!E89Y9gQUTS?U8>h3OB3=ckzwp_lJn}$v z^h*9Y_>Ixf$J?Z99>8Mltl8@TTEWpqJpBl0NE^l=WXP?P_5YH*UucNTSVMkc^ao6J zye>{3|1A5aaw1SY)oCqNcg`GlFB3KC9Ku|%`Zp0oqHT6MbR4CK%2YCWUtwNFBn+)i zM);-feo7Tt4rf1P$fUWuj5Q~HJ+z`8qX%`UaubeR16bXLuHZabK>uaWXEm+GR!tOP zD7w^AhQF7|mNz0TV@7tQ&XOTx-a^HYdPubN^a1W$e$!s`#mD>6qDRNYZDL2O6sy#uaI5W<>Xjt)Y}$_Elhos zJ18QDMEh+#I9L^Jb2C0sph`7|6am^}@IA=SnS2T zyru};PMlDWn+{n7S;ogxk3LMboWz1}fftwoH*bHq!`6G-aafobwPR|uC4w>o)nKC(>fL)b$pP>oVzW(d#kI_EAO} zF=n<(j5npLqnB3?@lxAx^E6feob%~B82~WrM)eY7K>j+GqvyWvvmL7T!P^Idq_oVV-@`PnI$ z#?fcHzhYjv$AZ_IG;E?x){gNLVZ_?p5@t zIAcU%TBOKeDm5e&qSI}Q7AmG)mPE=@7>zZzHCmOmMGZsC7cKghkeP|J87ia+gRvBm zXbdAGO84{PKKD6~$N3Y^{N$k~-#(xB`+Z&4YkTYWkX#cGs|&yif1<@?FmXuRE_x_h z|Abo+I|1wdjXrz()jp>mSn#x3A@uz8>G4z7mm{DuidqYIs)sCCK8+^Uw6rgK)+!DZQ&k*dHWsG8StMIvf+S0PKrCK*MHu|FNLKT_NSTs9} z5m}$!MM`{Fn2IM7WEv&`i{Y`ig@UosSEMb1 zQ%Lu5uOHCy)Ug&J=CyxAY$#k6;yobNw5k@P7`Z1yFyEr0j`Y6!_K$(06ARragDQAt!cf@ZbVOa0{Cv60dW}`-xqJ3tJc<(zcOB|=D5{T+PRcXJ# zKi8}NlL)Q+>uJ-b2^kI~U8a){6Z^CC4uz=%or=Gi)3>Q%~&7j-`Co+V&pB#e0t2J+*f_A>bhL!%Ma;@#9)~c zizYCL+A*O2vfYD}({C~nNpyfn?Zha9Z$%&v>|-aF-qHf&?F|sac<;Hmy~4!S6o%|F$GwEhY2G@%20bBwDQSs<~+2FZUXpJLWn9zkTOLx5Ps6@Y( zKOJM&Ze%;@;$R*co$X_(<+=&|h`owN^r|FviMCUxkW@A)LE~R8154U(nXP7253!m{5y|@fCQbqk52rA+! z+}|cIXRl`&@=gy}22Cp7ABcigXzVxd-JI|D^!Ef_Pwcap7xoLM{>0cBl^~~2#9Tn- z{S|zpZ{OJ|UA|pHg6J-u-IO++GaMawI(w-_ z?fBK5{QWHUP3Ub^V2p4I2e*g%c^*DzD);`uWhOK16!&O@AB2nCMln85?Sk+?EER_0 zgo#slx4&K=s2k|Gz;({UXFNddoqGz~KlEiI?S`I(LXi<{X%|!pLNgw5*A3qm}v6a)mG;q1EQXcCwKZdj($Qyj{O><>D4P7Kw*(y>4UD z*wM?B9b5am_V)rEg^@;Bqxof>wvuz)P+#Br*rm~ESsBg_a{z|E`;p!TzoYZQJ6=m8 zviTTOz8+RS$_g(v^Sfut!+O*& zYvM9qva0UghUz1K(9?HC7{fwF4eOTd+QsdN6JTyJ2!@e?L{iU6nG#5wgn~)pIlwW+ z_q2UfB~*;yKjM3$oP}N-9dtK+Z}jrFDwZ%#U?8- zlGA>(j+iswvm&&XKbK$wbUUqq_fuj9Oz2O}#h(2~fD1Uqwha2Vri@2n2=c{PJDI9i zVQTAYI8J1PCQ6gH0$N(0bOk>N4J zJ?bV6g*1U6B@cM^;5NDjeQ;9DTevWcnn`&s_j|9iD1wAnDorSk9>xww?bY;$u>4*@ zAKJ&bj2rQ2HxU@kM~uX7^yQ!umgtWG?6fLCZ@FC>CE+@xqS;tQ_RVtQdXPm~MNyHMS3)iymF8yX(anf}J@g$RhMkgqVOPwBmd{}wO4jg?H*&7>K;Bh!f9W&)?J8_t*a_3`TGo%AQyK75zEDY&eH~Lc_a3 z_r~zLWn)1mMbYLYzn%=V@@IX8E??uZPvxd$XMe%%b(4mFfi7s?vSr?jTSOECcXb}SzMs}zZ-5#$oPF=w zfGo8(n(7aVDU=L{-us?*A#pdwHh0U46*^fi;YYE}}XBz+})XF9iLOfGI1X<-q{ zZ9U>q0J);i6+%LuF4|nDluEUX!%vq626iJ4rUn!(H#Zl1TNt~GU!yyCaboWj)D+v; zJzR=9fR3R^;~6T#a~oPd0|MgSbY0ZFVrzi9aCBD=D=b}jmTv}P2&1s54Idx*;l-C8 zVA*sKbeLjC-Iuh>ROi`I_m5KZjkfJK8VqweUu42`aLRN^RpCe#bu9+(PO|pkcg^6A zg>B@clyFd$EB=TxMSs)m-CT*I+{Z-IN^$(#>uWY9%?EX_}{a=e!Bzo-Y#sSV2og0LKU( zO1myfxwy#Jsp{v6JK7Et556|I`CQwqsDyQ&JEn|XnMx7B%-Tl+t@17o$vvl2E9z#- zxCT{1*G^;TjwVwMQ)ut=gbOVkK9cA&V&?RPk7TBBVRzvl*}})bLFi&;!EbDQ>ZK_* z<$uTA5E>#~G4Qhhfb{h;rPu^-n@ATjF=dVS5(k_pZ~#n@374kqw7Eap6FEqal(B|S z00<-(igl3op(#^Lor27~kJ{xesZ!b}stXDSExye^BsN&Im?xDI_Z2JM!KP_SCdFB`SwZkk2T`=+0HJuvLl8NY4Db*P60tLH)uj^)y@QVY z#mIM!b5|e<@gTBAUp~IvH$A(8c~IDLVL{FBLgAqX(uy`uLx(3N@f1*6F#<*k_E=Bc73E98a~EfG<>EWCewo(11-);@)@`SHx_o39~9uX z8o%IU+tYt#p6q@wM9cmQNwFY3KubN8@o+1Fdmtu`<3c3CRpgRfjc(?C#C%HWMQ{>0? zlcxaPe3|^YzB7b#w9+XJEthCyX}Uw_kNeluy*vfe{&%M0yw|7nX_eC4UF`F`V zpRokeabkiab>imLsb0$g?m5#&^jo?W!XfrkdGm3%va$l5E~EM|+3wJ*kXnK;EuLH8v<6 zDyjxgr!&0}JJ?NPR_0scSpF-s?7IJP9$*R`%i{az&N@GzGi&3EPC1sq2M6hH!%OwGIia=z1hEb_i5 zt3Y`7v71`GdbZY^{30Veu=VmD8H)wy|t5+{vB%OgCd7%M6zR;cdY*BEB zVKLgu7c>7pF~VkZSX05m%X;M6sT!^&y|)i{R?JAZIg6k~f>VBBzL0o9!JEJWiDoQ@ zQ}J6qdV|u>TbVsJI@3RhU5@VvY{n`QR2 zEy&s99flT@dHR*Hu?p>1XyqBIj)9q3j{B8EugngXk!UnH_Qtd4&$};L^u*QN_iJRU zjFtM$?giuEcqOxi^T?MZHN}bS|0$bobvzVRs;mltf5X$K){x-zXaWYCZ)$z}-3yYR>f~>RE@5SHxeAm$T$tSA06xCmiOnm)yPEk4opC^jWEicU!r|xlQgM z2q8&Hvwr+Lb=2#;u^lR`%APIy^=i(+f2?Zg05lEymG6GloA@S<>r*w+(TAqh&(G41 zJ)<%MZOo6+RmK!rBz1A?mkGCH2&{zulQn6wZ$TE*jR*;ebCbbahb^beCE2}+1Z_M)UC&B4A>Iscc`v;WJW>$$|W~P4tcg_lTKWC?p_}Te9pS|NX^?!3NGBA zLRWsO@;1D#4Tm(w*c{l95t-Y(_)yj{#KLhb6UX42*m`3ZlpSUcaj4P|!WFtd9_}Jg zO!7x4=AC-F>_%kj$b%vnsuTXX+3UnLrPsq99$xK=F7xhP$*Oh^?meWX*~e^4g&R`W zPy&FQmFZdT{THr4Rx7EWi8@Q$`Q1z15nu`f*yZq-}lABOJ{q9yMQE z(!GxF>s`jzJAjkXiERIgfcZK-o3b+arm~7Z8~&C_^eVm}7h1B( z^Z)x*S?t#@U^Az;DCJZ_n`0Z_y`N8E$TFZ544orAF!DF2iGEWv_H|HW~}! z5!P_5RA_qitG&H2>oQA#==sHAVPUn+@$vD8LS=)~y5Ei692)6L>;C%sd|9FC@o2Tp zwGJ&S-oJmp;bs5OP|LfquEsnrZT*Ja8-F{ixcEc+r%ng&v=c506weHIG)?bSsOuFEanK{MTDJUv>-=gt@-%dlX zy!R;LfWOW$!2xMk9S{Pw{hc` z;*RADW-a2A-d7SLW09&cW9H1>w&=LUD^|EDj?JAnui^4+zI9w$K8Gf*PtgU61s0-}*BF|cy zVsZA^@#Cl8IZHY?IQYNBF}Sj5g;Y-#3+tVbkVQePl6Y~(f@NDS#l0K7nP^zDP5&d? zJzw9{k>7z^mn}%2njFJ9{*vkDHgDd%hvH^@YSDf_ew^w`?^nj*2)4|hw`kGt*tD*2 zY}JoWTiLOW?Sox4^RwhxWfZiu_o#Yu;AliSTMmxVb-x*E!1@8*k7|vuz&kZM1It zb_0Ly9cc+Ii#{px^Y!^09L3Wajyr_?y&MPHO7X?;hzLpRKWtuHBF`Q_zVz|qKKBL7 z-~TQOOl^-%`&d-e?5iSM|2bg$No!fVS_h%KckkZ6fB#6bsiy4kFBY7FKNWHOM~@yg zsd?*HA~(f*$+$eK6sy+I*eL1Hx4Q7b=8Z$Lc7MKH{_^F>gH5O3Pfm<6&6ztl>|~tQ zYopRD@*azNlQSn4UXpbg{SvM?|95e4VQIu(hi1Q%_LCzm7E-|`KVQGl@J_l=u~u04 zc72YAZ)j*qZ)1Ldw8J)o#DIJE?roIPX1_b-?noh?;4)_0_U(ndzW(Z%Gs&~o4IOqv zSUB_-iA!2G&B@El+oX|lXX$2j9kDPy64R;=9IIddMnO-+uEl(_xI zB7KX~4)u{8^%RhIH*fmLE@jvC`Qg^H3`Dt zZajIi+Mwvs^#c6{4}RCjSUv>P{N$>lSk1I`n>IC7nPr~Cq2ZNt4Z^D)iBMX|X!{;> z5D{!H!OJC+kMtGjIx$)rr!D6=*wGqXrn@bGmag@C49`xxt|#hA#-D?C`oDU$<$X@h z`EQZzPJ{6<^!oMd4+V;Oi(UN5Xvut$TxsGwH8Dg-%wOBJa;z39+B2WuE$H=Y(MRHD z#ert;Zp6izt&uxwKQz^mSn~Dd>Fu_iKNU}%S~j0cIJct0Kf`Hgn|+Ut(ye8eGc)Cm zKUaQwG(rjcJr^13(4hsBlato%-@RKxoNiEodjDXr5D0cD3TbqqV zk9IVcpVZF7>wWun!qUnLALFU`7Kz|uukQ~70`@B@&Dw78S?A*&0qMSvf}75~IaI$} z!PTzqGTYq?pDGg#>6D6Bo3m_If34I1yGTJv$ zB&66d)a3)}K}LoE*L^>~cq4sQdj4;`u(|{$_qk8f_KsAP`6v9mGZ%Zcn?l~ zetuLTqwg=5qt>+a)aMKj52L8fqVja$z=8CB;c8QH>}S}kS9b>5E39zjkm@CE+Bk4{ z*9Zz;71n%vCn)I9?%mmnK2@*JAMfk$zuYhXaMRNH3}mR+W_2N0af`mD{c3SqMPHvD z+<)khe$88(^wGBHWea9?U+a2vu`0o#-(cIeZ8&W&)syB)@ZUm0v>zxxS@7x8DglAZ zXG~MCV;QkHDX4wtk>U_M=a9+lrTLs)Tt<5H`2%EK-r9NkVULk#4H`dqn^e8=&hz3r zj>CL=#ZKGG_R&zh!$VmYDTL@P9`V~QV}leOpFVy1SXg+r>Em5zgmCVM4+%Qi%Yuu5($4>Uy&gp;UuVmm2M=atWnY~gUulvx!c+O|aA047Q0On) zG?WpJrArrca99^eVV~N+$DExQ9k_P=dTFwmc8J@gLqbBraEsj3Y168&Uym)~mtC;S z)m65oI9L!x`V!)Dd}5-vzdx-he(~bP4<#&CVarl#Oz|&2(j5|$Z(p6ws@8VKD6r_m zC%=uYWzSjLE8<$dpD{c4{pIOe-IG(TekZkhYp;1+yY}Usi_@?1BaeoM?U7);@*9~R zKY21Ex#}>YtVDKf6HZrtr|t1XgCa}upHr>x$JsA!H!L>)^F_c+MOj&Sk*=;Tjswz5 z!JpEI4Bs3)V8#;9`Sa#UIR1@HF2Z}iK=h_EjwTu$Hcf3_in6dzMa2-2!f7n&JiGXlKfLbMMg0zA`gKLwLa~7PV+j|H6U9?n;#%X0?eUP%gQQ9mUMXu&6oeURHC;6osa7qK$DbFUy8s~6)YR0IJ)7SgC$TI_HF_QsbL5we z7WE&-S`d}?LW*)oFW4R}*O7B(K3L-yueu9YoJCYGKwhlPaBA$e7v5P~h5s4qEpw?f z5ySQ`+p0I?`t|Fz1B!}@grQKJx10Rfa`WcRhg)>tpYymfVdyO4hnIbD!Gu;9&8^k@I&ptXrqk z{K@b0qaB53&YnKKeCEuVUCdMNFXFl5kn#cjNi ze*wR2P;Rb*>AMjF$G?BF5u7=fS!RDMDA2`bi(=pI3hs5}KmG`Zpva&R$b0R!ZTBAS zxNz_Oee25S0@pn}=$U|4_1uA`QIR=`^?rI5k{1$Nl8r;nMlLKa`aC^z@j&wd?L$v28|+{CB+c zdF0}Wv7vmuc=KObmo3NWm?PZM|9(B_$32*ctPXUx@40d?P=cVWYzS~vV@pfErd^F9 z3ROW-(VCq*#}YF3GLR&xWI1)EdLWeABoeFK}Ie3{F#dS->#a#wTB;V(aB=GRNE+|67uqI5(oRpj>y@26k_M{`OFS1 z`n@8me`2W4sX~%>QFn6nL4V;j`0$jhEmKdu(xF8CG$rNX^6ds&9QyR};2&}Rs2&0w z`U;s%dPwUCLldzx*Udg@3UgUlSp01*^SE@0p&`tLlYX}I zXA+}UV1sFLTD3Xi^m@7Rfa`Hhb@jFt2UOM6eou^D@5E1Py9{t*C(;46d1aj+qE966c_()kIOW`n!h}g+!bE&6Y1*2 zi4$Ssk0T@J;Eifb4T1Zl2Y(Q*;dx$G5F+FBBhiqRN8EJv`t>(5CkNv6&z*~R956PE zE5@g6Esy3xwQn?Y8{;{D{(P-^{diM-=pY06fp^htq>9g>a-kq+Fqdo`*14fUFT{29JkGBoINmy8VFRoqfoYULI=DnF z35EeiE|V}{3COfoO6pNQpVO@~W*L5lAr9_@qO5)&qH+}%CxY_Ph_!py^yC7P;7z7T z4Y{|To*Gbze;A$QK9kq9p~ykJP4UhkxB&b>7UU3*2ev=0l98+{unQMB zM2vscvGd&TS7*-0$46F*9Zqe**ZQi!gq!)aRvueEkF76_FwH@(lDx)GBM}El9bhcb zZyB+u(9B5B^b`E&XL@>j!?ZfIUcH;CF}^nrY^-TWf9*=0QJby&2VAxBDmyJ%))@Wt z_VoN%zGq71!N%v>;Y;bY{tKnSxFYuOo;~k5lcSGDU@1h07j9TgKOODIoXfuwPzD&- zNgJqO`^BH4wQf@`z+UNv(W=oOZ~_SmvdmtTs~3M_blI${mw{xrV%4812Olsp`m-i^ zU}#8)^ojP_3%PR%l!VH`C z%{Bk~=jdQZ<<&})XNq1+0d)vY;-KE}@evXg{pJ+$?qZb~>cXp2n_ge6dH^^N!0;K^ zvh_#2;82~L99S-n4JW`c_QSp-J|E>^rHBaYC6wj_s}^Ojp4@LQj;{x$h>m*~b;NAn zzB!xEyjcxFqA}mcHz;VqE>s6%4B#{V3;98hvqrv@hRM%Hh6VlljnYr76+i$GiXI$s z+YA!AuA&wo=+2#8Mn>z>?7F}E=xP#e&^Ox^E6uW&FND)+Hv&StuTTeWMv`>w^p_Y61slqH-yD9y)O zP*7k}or1h_uQ0^SUs&@`ZN|>EzBd3D`|#-qlCD(=IRwl>u~;6Z`sDd@?bj}VMntMm z2(ueUrhKk$4>&|vv!|!0aPSgoW*?K}W!SjtZPSp{%uYddn7?$B4tN{L@*OZ%nW5?& z;C<*TjVMD;o;>+wF2VSbaBe=(f0$KE@!#&cP|l5Nl+D4CujJGNpj`vAk2kH6!hU`L zuX3)GdN zZE6c+Sg@ZvcTV5X@Sl2{Wl97H%#{uTK++t*N0OZ6T&3}@9~yh_1P0FEwSWKIckkXo z`Z&8S;FWp|F&*Sw2rt(vO(rY3!A_P#t?^xZc$JJyFix)(R;CA-RrSXk?Mzn^d%$Ck zA3L_k+`LCb)-JmIW{v4=y!BK^y4RmSM%%V;$Ns%|)rC?lJ<{Zh!-z`R`rYB9NbEs+ z?$|}#@2#o&MVEhyKbsE%t&f_7CGiEIW#iz;1rT!pd4aG1K$=_ioB3*XR)Mb&(G+~` zrDoa#5If)CVDBP>2R$e1tVuv8lQFsD{R^B7?Koqg%_iUIF8<>Z+DR5Mvy$5PjcJeMN4w3Of9fS^Xi&ygAJD0J0KxX43{re9dY|Oo}gesb( z)o=5`j?k-_#Ln6+TkZ&jI^RMzk$s-6?`J#ujAdWqw~e!U+ZOUb?QtDZ>b# zAWH68hYWf*we4u@Ph{0#A6Y-JOGAE-ygZ#eJV(FqP9PSr7?Yluo6=P_pu{KvVbCP7yO;7d$TcEd&{{`9NptHCFFFgjguy$Y;IB< z4;;i#HuT!3_j9_g9}uM{`{*XGqD!UXzp5<%{cn}A7ECbRQWA7^b>-mVa?+kXW5%z> zMtNOb0i0O|iULl_7H)534V~nwxIYq0y=H1_Ycr67k&n4*VyR^Bw7ZSO*cINsa25+R z668%l7UkzlE&)u=_Q}ry8;pw-re{jEUB7F5!PV?v8DUdNuT3iNAtbh$|Jua>e$0bB zc)sqP3~6B7w=a=!yXp!x=WKEna$NmWf31d(cLn{V+<{1!tUdHtEk+&h^R=vuK((U$ zM`UsHv>N~Flh}TTuGE%4s6wI6eRIvyduK6_?cbT~oPL1Gb-OfjAw=KA>)@!HTTnpI%Ru}My zf!rA10jPwmb{NSDO4MpOIey=QT)c=8)Uh<%&ZsYwB>6)Mq;ycB<>bxpHhvdKKGC94 z2}Efhb}KG(QVJ;l?Vo`@bO=BTbB&YwDh)&HEmPCm7tE4Rl~cs2Yx?<2l8vhrHS3Ys z#ZL&u^W{;T9<2Po0}Mk1kQJC%W_@{jkPAAZL)(kzr&7!XOp^n_gTB7Gc!uQF+q{zR ze`R0Y8dxOV|9Ly1!u7|WeSwZ6W&J0MSQX@%Wnw1F2*^VM!e>2(Ke4y50bil)ez>(< z-rimUH9g%Z19eeFZsIu@71@#18`WO^!pWC&>Jm~8(t#GmE8|E22wk5TFTVaO;He3& z6OPXg1soHWW^izF#shZ&#zsPjSYSMnn9nu+*#en!6(Mi|Z}9neq^C<04usOkP=4+U zMDNbZUwl}+CKp-PVX)GW3ECM0(g5Nfh#$`i-lpK{`p%9B+<3>G5LAb^ww<4_)u?XS zMxx-sx$X;jHkj-L4aR#Q0)OF1f>82Z0wW~|0O1gPF6Nu_bu5J$n|Z3nGVc$CrkUpo zm*O}PO@%(XA-UK%=^mh6kK2+DoWS=ekT&z!{3!=xZSv8qn8ui%o-1W!R`}%0@7cpV zGBWbRdB@> zkkCXVZ?#%tv5nB?Ax+9ilvL<9rZw|+9XK#=r)`H0^aI)xvpU(sFA3|X-d=ury_+@r z$v`Xvg$oJ_{=;hSs&y@=UI(2PG-pUJ$C=i4o7hqH=3>Olm$#M(DVw)_TMq#M3AGu* zD%vaH>3bn^BTn$atngj%JvvcnzO&g4Tv+^}E? zvjlo5yLazKyDZ+gd;>D2q(#FF9NZk^BtR5-C<_w!0_a)VpAiFn{X2jd5Wvunln7Qn zaPT0>WN0%W*Fj)BfDRHW1h2IH9h@eBp8d+oYtg7cR9JNUi1(W1iT74oU^;hAmFtA~ zA#AHFli>BI$^GAh&T(aAvZZpc^t8)HoN(O^^&0g3_|pTN-3jxyD;Dj;Zq zbtgc@O)#r_cVOlm-vR~50_f-T3KxF-h(n~AbDK`tlVcn!V+GJM^O2iOdEfV`c6?{> zKYg=8X}*%UNqGlAomG|-$1bIO7*Cd&*>;{<#OUI7PzA{&MqG;idn0 z0siL~|670Q>F-D1uYoIRJ}c|g|IYR{K@$K4Waw;JW`r7umd!e}+e8c!E7Q`^bdw(a z6EWVZ;s$-YK74FjU=jMh{*NC&-WWyFTD9v~r@w~Twg5V&z`oC%hPoaeYH@RWg+c?l zIOjiH?`?nD0;~{@9+Ct^67Z(){5dm+bd3*#g1(GV$ zoO$z5@VGC1{(K0c39IbzN;F`Qgh{VQzc^AoX#>P_eF#MNA3VSr%Yguz1zF-U5F)ZB z!K>=(YRdt4$Z3v$jqn~4wjIm<>1EyY^2%tj9Q}J968op5od{~A3+A5hT1m#LNI0iY zpN8N^gcTmmQ(HrC&! zyJgwB4IA|6NdQN&+W1@)#@enUYruHcY~N0)GU{YpF*=MlKvzoKCKK)W@#^E9W^NIX z;cyOq_1X_N`Kp{sx8DkZ_zBottrRi`2pb^KB4jKSviMV*INQ9vy`Q3uMhp`<2FYr_ zqodTp2b%;S+k*jbGp&}u0(?q3hz>{3uWZ89pnTMOg}!am{{7t7C;Oi~dzJtN&lD7i z&uzSSUj9OKtPyWej(SV?^6Ms7UGA3=;)<=fUdw^w%AWe>A9$7J)Sa;x3nlNqpdOhr zPk-B1$Yx+!`>?2|UK_Dv-s8jr9_|CrZ1=?LLg}y+~`}rcT zAYFl0oQO4~ZVnZ7=#hZemvj758m6OkM;WhYs0E$@TT22ev|0%HBo_{LR)KU9N2#{0 zx+pz0-cP+tcoERYptRX)4GOZ?+( zR3U+S904*4H%HuiTL1zG--XTZJ8csI6|P*lLPdE0{{1htGbar_xFDg^=LU+Cl$0dX zh3y!Gcp|s(UTj=&K?*HjykH~HnLc*czs85ayavxVmfr0MD8wY$5Db`**zY8K>{Ed6cl z%a(bTwXR;hdPYR)J}s>fag!4-jy-+96;TH6FDN0g3}1(sTIV{pxkS2u0fa=v@Oa0F z)=S&R8k$T@Oo0B3S9aZ6sCu8kj`M*b3K#nH*-InHneC_O;N86t$gHqtjgSyjo6qP0 zSV-_f`_QtlpGo>7J~F_XE@&_3TCu6uE>t;aWYwy-T*W?w0$6v3WYc`K(r z3oi;`TIN}{4mHEP@)}|a(VG!Epl#Fw#-FE`ZJMn8noDr&*1Js$bF!s)T$<>iXBlks zGCUf0l)w8U^W9J2>gUG)DlIQ|t1?Zj{B*I=S_;Ir`2h*;b#9}qeR`cWrgo|4xE#eN zk3*|U<-3M;>wPXa@uK?hMBUV+9f%cF^38UOtO7MGxwx{Q~_}^tGDSffO5S=;a|LQLjcdEN{>*`R^MqgPrAE4M+ zu;2-B>1*Tin{HEMb%<0x21+1wHmb7(wh~KZ8*yg2Y7BLBRwmcj@<4=q0^3`OO1|4$~iK_c-1CZw@Le8=xaGHPAavw%VRD zdfoQy*%PT2!@bsbF5VWY9VRaXDzwsDHKs!7egHz%_u8Xxxo(liRiGIJCbeqND-R0d zWuOnU8*u<}4YJ=7lvIdy=<7at`t)va@L|6Vs#J6@R=pXRUWqlOZ!tx8E+zzcz{gE4-M_Zpm%u>=MO|ElX8~V>D0dyb0TiI8 zaDE_R6L`imMV?MvyLIbUVBNcq9v#4^UA|3!4#)*)(_Mdmc**2&_(d=N{Km5q9Pk5_ zG|1~j5`n+RW4i;UH+qs|<)jK4qU4pSa~WEJ)*qR#NC^W4L@6eX^3(nGO)V`rxFdMR z_3PICqMj@|x1jq-Zx3OXgXQNIzg$R1hsi2I!OB!CA(R$`!k1@w4WLJ2t(NB6a9%_B65 z$-O|DyS=@ADmMhDJe>DPlob4gGsM2kk+Ibj4sM%fdWJ%kJQOVDM_w9q^3kma%+mW7 zd6Z;iXaha4N?G;%+KpOAW*LUtNTD{!75RqHD)|y~MjSqZ$~PBzKt`)k_lcClTtL1h zQ0pFhX|5Pukc?`Vp_=iDZZ}YvKFFJZ4jWA>U`ZoSi`t{06bB+MJ$-fPhA2J2+Javrh7XAFRk zk%ADd4Snn)QEMCzXiqRNAa3A5c!86MlmfMM2BcDGYTh-b`Hj8Esv^tz7+ooii%^8K zfy}5l3o6~x0S*b0ae7m2i&i}nJ5B*QUJ`O8FzqpD$UQ*KcNa~! zvgEEY=c;JTVF7;n?apKR3#xAT>(}?uu}*|@Cd9dKKg0nn^f~M`m;~Atg-Ld4HE34e zqLw1g6Qb}v%K9*LmdX?hK~Qwyu@z*8l%5=JthUHsQES!)2!HO~xyo}S(?tXZfS{&xGy_&5Jo#T;g;$v=8c+~Itl7k0r~_owW+ z&yWpr3{*xwG_~IS88l6<+SxK4QB4(37#0gp!2+2oISU(wKHfo7*#DNpAUNT4e=Qxz zsk0!!Oz^#M{>x~ae17%s<${L;e<~LJU)J53b4E@B2ZP6t-)l#LFND8fV5izYNseQt z=f*AIdoV$@xyZoPN`@&2`UhcgVFG`+wPNQ3QUYOS+J=IKlp*{!6RHwY;RmEziXB*D zH=z1t9*7}R9@NF!3jBuXh3_wQVZ^CDhmx&daBmIajq$O%soyXzM!pJ#g_6(lj{sT{ zN+|8n)C?idQmPS&hDMBOGCUqPV1mYS{DS*)^T`OTHd#3F(HJCDhlD8W>+4_duY|G; z=|tx`Lsyg=MGY#c_HglZmMCv}JC_ad>o(D@-BFhr3bW*wSGw|uo11tsoZSedaN3IN1JavPUNlR1VWBG;20BCqlHm-~_aAo+rm0TBzI_JE_M-W-Sc zdRc3(iP+g~s_CD>m5}vK!~*TGddpE?YXwvwlnSA!Hy8SEhaHCjQLq)>YD(p(jth7t z2!L#H9k)k$K$BDmy^wqN7DEL;cOm03)DjfUX-`t2w~`aBz1b&~5a|NUB2Y_-)HPH9RNe2fnuTHYu&mB&gA4;$BihtICd;(n+4Ap4;}2TQ-P(202UxS6ptlK zmnxZ>3Pa=qu-6j{d_g9yKye`eD{wpZ#f$eKRDqdE=Z04h;lBdtEq`7<%=G6_?WHIF zmQ};g`uak}ZSpo#E(Q}|ZfUV0+Jv6aD-=8=LAz>;+3P2MUX`8(geC={_AMsyWl{pWz)qMCK6g5fsCUqtgP9I*(P(bM~jcOsdyb8sl&U9mgVt@icJ0qCuaKRX+1`RiGrX*d!& z%uAMVzQEH;{1B}%YSvkI*9JpVC<9(5YdSEmgniFS6uke~>tV&5H{dAEhrKC*iZ^XM z23RMVi^|tO&8vj7`HLVv<^aw)po{~&5&D2~1sV3CoSUp+agZ+5L+h^U08o?ecAPcp zyHRTtlqv;VL#GBBHn{~M(&!|qzW}oYi885sHxXVj02WIfCX?FqfP{o?NMw9yV|bSv zuYryRdogSi4u8Tt>^qYx)@|OL@y8WlWZBk~HTO-%RO{>zc_UA6aXhFkK4bL&UBhYk zp~sMxOY<8)376koR@R|K`Fq@f8qOL&;FQElKK2+l$*#g^hYXI-i_SX(BMB02jUCof>o;y>$to#fg#e1A4z>)g7vfI-tC)PV!ENo{^`hPuyiV&rt%o{SvXBLl&Ve8m^8^w$lZ z*|ZdO7J4WgC{V{xE>Jv>A@CIlWdG=5PO>P99yymGSek$S`_~#>BPQr+wQum#s6;qY zsjbffQ|jG$NWTPPgR92B%A?c>lNdwy@~5@@_8glPD~Zjpuu5kUPusBJJvzNGn|(Ie zj#fE=Gy-&BB;CCD{5=4 zWBX(UU*g#z-_6;iqJr}1Dl}bGN6jL)u@+3 zFZwnJ$acNlIkhfBnow&%K8O>ORRx;@Hj{-$brv9?R+tNvYiRlufW+aG)Gzm62BFv6 zvh3Tzf4n-wp()W$P`rZxDrlUyxU^9E6h66M}tKhDi%C8OHyI1uI zEB{ojRzmmO$~giv?!8hJ6Y%uRl8D@taO+lrr<}r(BOEioU0V4V7W;(jJg`wgilJR#jb-}Tu4~u>;^~ppl0Gv8+HoxcjE2X>@sF^s&uRST}W#KiLF>(lv&v^?m4H0FY71m+{BPLcM$e5Wm0 z%9>G~i}=QP4Gj&61(KtZ&*kq?)3>c_u^H8R4njggWT!ZMcp-|~1yQ}Pz?1X^FalXw z*iZ8LK8FXWwk|t-=#l6R zjHH!*`SK;w{Vj;Lqd_(9&|Pwc08El?pssOPrjX-^$C69zWh+$775B>65o_ zAL0CreT(X!$%X<1A`7m8B#p*IP%CCX`G8n;8LQk61#VRX)yb?M|?`vv;QOpP&zQd@E(s3^iMfBNVQO-qS z9l@CB7b8(4QSPAN;LeM|fn#wM?WM*^e+C?#Cdtw~fB7eIhv7}3am2$M}Slp7*P6mH~# ze)NbN>8%o7vryO3^~7q>;iI`#FoPW*?C4s9jj|i zaxXqWRMcW#-doR~3k?hm;Pphuywbzhq3Zr>ZdL?sO@V+zgU`ak!tm@IfwwR^dLz`N zLBGd1T;=8E_6`ovzHY*|C?w?J?mi1|4Mq9H$&-z3Z8uTw0DBHAEk{4O2l*1m2IHI? zHf)HDi-TW!cChkZ6g&)751u~?cZ91}ORS%-?-GEf)#BpGmCkp73Gco#6I=G(Vy0U& z&Vy&6XGry1F3+}Jp@8)(c`X%Zv-u}r)|vdTWBosWs>_c45hQI9w3v$X6y__3F@^Y@ zH<_*BKVE=m`N3#DL5Ce|X>M+&nKE?6#bk=7?lEW&QoikD2nZLeZol4o%=g~CJ^T0H zm`I&gBku#QH{#68%d;SFTy(7l{!z365t$_=kgX~y6&6V_cs)**HZe<3u`D$|L`0E*R@R3C;b{*c=_r})8A*?^ZL<@fB)vG z<~#jZ_}5b7#k>CfCH2G1|Nc!OdOw4b9sboQX`}2VRA~bkxNh;uJc7EvgqL?bjn@v0 z7~nXgaws^l6Lz5@_P)PAS{e82I^Bn0b;eX~Y~@f?R8(YatZ95KcAd=VB%1+HCC^>}>$VP5 z2&1H*^ZBO8!-VHW43ct)4)PDZO7O{BN@u;gX+{{r{sWNpOJFsX+M!!?nO#Qzrs`-< zuS%|;e9OLi_+!|(xIC01(D(~Qrrv7(=Lk19H|c^9%>|LO0P(`gjVm+V3_^X7ln^zLHFv_lO;2~t!-F(`*{N}>uV24@X|={rmGP~n*%n9^G;|0d zoN$I+jSUwB5${nRv>`4g*L;BQt+aiBLGb3e3P0HPj|?Yq8ylO$#bwCWfKW@|nLxP! zThwssOrkMH8UVzAwCv>YS(+7sYhG^R?-GbjlyM>VV^qa0ct~n=Y>b7xx&YrPfLv%{ zDjns3n2d(I;F>iv6_27PVtS&YsK}e-2|GJGtR|}bZr{O@;34dR4}uoCJ|8~-rHs1# zpAD=c`VjNbuFfW@W9nxC>J$J}BD&4^*vQA|YSWOpQ=QxX=VcZUqwd1DhYwNW)J5l# zt)cJtmpKYJWiZR(xvoS-ZGiuBkB!Za*x1;Yr{bBBHX-aNA(=yv&8w+d0oep}l#m$B z#Hhdagr~hU&CZO3LNroJTdiqOM)Bx6bOg}phTKJlY?$yQTt=-UT)%z)eoR|i1#%*i z3s~O~ZSA@znIM#ChGY8QIJ1;b+>~CLAR%nr;!YvQpB)Or1VfOt!{QhJ z2b`XC2&g=yjzR~g6(Cb7R?}O_Dx3WZ;wS`tp~vOM1ev60E$XFVW(c}dFXn2XJ>4!cxNvN;cxU%&C}tueA_yHx zEEt0Z1Ehj)W8J6|h$Qd()-fXlkjje+52RS7ZoE!uqM-_1o^a^UXNR~O(Z7))%vZ%n&hg=)x=7mx~&)p%nbFmcp+?g%N$F+sS=`iGgM~`Zo{K5b>u^2WUVPWdvQE9Q|!O*8BVV%HyX%zEP}Mdb-`F z0%6p62%V=ZbIO%4^h>o15spz&4J|FRv(VFsjESM4GQbK@ifnwr6ShA%q|(uNp?cKX zdP6O`xlkn2q;J04!Qyf!6mqm!NfF_C>HF~EN1)GLI6(Z)Jxov~g|=>uFL2=E;_3$^ zzlV8lR6evEjTd|F5E2y3shxzFx(9#|AGGK}d8>7`O@$_jrZgD^!;ez;*vQCMgU`z_ zG%^`@w)F4z#nUI*pUZ>A6R8JYr`p=uAX%43W|X9#&U>lragUkPVu0rrZM=3xy~fg3A}Q~;*xz#w5>NH6Y|z!?R<&MGe-NZ+58X$=XTosX{=(h80{443!sT18_sTbRK>m1A>?{)JI55NW%4*I~P?d7pfi2 zFrh3OKo!HQ{8(ba1X8|UM5G0JE?_wZOPGdn0}9m2-#B6roVw~CU5M3%frqYHfJoEO z(eXLqT;ZuS+s$NNg;EFe*J6x#fn=TG&A{;K^Qb6#0#q2_K5FA3FflUdZD3}CHgEvC zy9jnfo)7pkI6QixH0TDa1AJI0iMv!)(G^O?B3f8korQKzy#UObi0^Nc6_S&yl&CdYY!WQ(a1RI=0t@KptJy2?&nzQRWRQIHPDyRW4p_H-y-uVY zj1GG9@OXboDprWb;Q2u!6CM7+*$tl_Gy2NRciy~x``Mc}4{&dZMj(EA45dI|((WeXj3~-@JyAY=le;+(bNA`mczlx^j3K-0v~ z_3c}+0}5}{W4={XBv%Hx07)yQGO0x;Rb~hYKTv)SQl1yGIwop^QbcLU>&b)M-XB7u zEpJzvnA%K!j1v%~x{>=-Noi$nUaFqbO2|b!cI;SGalv%T^Ub#h*?X+;m04HARFNJ6 zT{t)VgFS`abE3D*{patoTK_LFb;sP5|03R){|5FIt#57Jzi*%CM5@0(7m_6|tP%gI zS_OPUm;l$QfO1qtL{G0rk(AvO6|BFGE{W$rI#5F}w>=MuXKgpkHPotvO2gP?Z=aG8 z6uu6^F1xt6IL%QYe zqKBvol9iY#>o)03iQk|kqzD~wOctE?>6%ANAxd3Ik}f7Ehcbc0tD9VqOmW>2`%)3D z&qQaD?JX=VjZdtFl7!cXfo?_?O57nx2n-Z>YBi!D-nn}>8+_HKb`ltH$J}Ga7cKw* z{cW%4t_W)DR<5XB!FKyhrmGC_BajCs)U%Q*w7k;NcFIi-3!*-WAuLdmWIBkdKrq7GK`DjYP#8M-R|ukw6jt{%@(7yQYmot&q3l;qGJlT2=X7(Bf{8Hqkpn&PCL7}maM5&Af4LsZny&?ywJdd!aM0XY{v=*EQ; za1iRj(E@cp(Y8|^o*$}ho#$wR2Ye78qeaFRj5z>KHM)lb9l-1Jx%9RLM80@IG!yD` zBQjiPa$Pa>Kbp5hQyHfn%a;qyfhH+k2X+i+>|1cF42VN9^0$Dn*Moh~X!Ke+xzOjKu8*J#;)(ZzR+E)V zR8%Li@=N=G_vAVzYMB2n301jxaWj}P&_sCY7%u!G=@Bap7c}GkBXPwDD$Q1CcKHUTjslWwOX-~G-ZVwoFFD+t`Iv`a3UOO7Cn)x z<;F8tV!og5AOaqFt-cv%jTS5kbc2!1A*n59wbImhq#1B*I4osZC1rkS5YrVb4)xc$ zmSLWfiUV*XwV4+MJ309>8nyvWlfOWL5sNsl7WXNUEg~);;76_yDpj`TIlrCHyMePDO6qiD>jzE6I z{Y2GTbb*w3tvw4g3=qqavY4}OK81paAkV^U;p-M~OI#a!9;C2?-|A(;+B-v;%Sv#^ zPP}>yo>kJhLwgoiR8;u70}U7f;wA_zxTu zi95}W&-VdPY53oHV+19R{X>)>nj2z zwvK!?kWe9l69%PT7-%kC7Y1uFt_@=Hkr`YD=|{tDVgN3HUv}@9DJ!Hb{&9jwti0{W z3Pl;WFJC}c$WM&+DX9+_H(L#@mRd^{nUj9d5OI~s40P~sBqnYLD1h5g+*lAlK>(+z zNkLvd=Xyzw!C5TDCav^`kf5VHlu(a!G3izvByHmT{FWS#|vaRM~9xRn};MRJ@RqC$#22is^72mbmeak5I3t; zJgjRRgR4|DG&S+qCaNP^8IDA^0QkvL2)7XCDxXy*KzIE6r}Qe^sY`t`L=?AOpU$3p zUT@^tpf=m=v0q)Qd)nj2Sz&$Paf5fgVWioizI4!SxwjHJz@rz^hSUC|p1t0vI&)xN zK-iJfrwicQDX*;=KKvi$?57_m&(hf}a~5XSyk2AB`Y(L(w0+tzJSW$0tCoesKhhv{ zxs9BhfjN>37w>t^^)HH1NK2R)s=rfcR35$&Kw%n(glkqZqHnF!5c`jy*ZIlak$rvX zV)Os~*IwxOad;NG|IgofArZn7HnLf2m3s5NcY{culuNNNr9d?4>FGaTcEWfJmHv#T z)=>`X3gg;FEYQX8K6N+MqSv5ILI44^FFEraDi;I`31_-X1S5iu@tPd;V2t9;jcq@2 z+`kIDa9&)t3v>$ui+Y)1)|Qrf)hQN~A#sIOiBXdJuNIyvkW+FG02y1<@>IYZYY8{- zvoyqKT;shwgt~jj>bT)AEp?}adm+(^Jh5;)i zZfbJUZGtp`Rb+spf@alxSO;jrv^#Su1O)*-77!HVnm&y9L-&FQwi%6uW^^s_#YO3u zbjRIDUZfSQ@bdH|nTQwn2cdsu0k*Ojj0T)#9}){ps}B!7TPp+^N&%pz_wU~)&^ho9 zkQPAIXG7PaEEE`6)iARanl)Mq@IWw;Wf)}$Bb-?U1vd~BB-n%E0JAWD;Ti+TsW8AE z08)&K0x5$H^=Vib)5()3sm3BTGcA*KmLMA@cr8IYG=+P9UWkjw!r?681!mJF8<-I zb1<9-Q$~cj;1Fqy&*y`TboBJ;8y+6B3C02{(8ZL{?<_$J6L3K$hhjZ;25ghx%*+hH z`vY9n9?8k#sPurzcQN7ujq*io>{_~^g8#^KydJr`Af9<;CX9`af;Q6a0svJEqRmL} zxI?c5qG%3OuSeg~z~KWRm|>ub8g^(IUS*Z_#AtbF#R#(}nRG!0y56=6qcRhmu1Yoo zFd~`;e++)99&>HzV)&ye0m6hY(22oB*iltgMaV3uO%0gi5Qjb)nRzPO9&mw-xpY&? zx|{FuRv*DHmcz0Q0xW`O2HN+5@N*kji>70sO-}u4YRW~#ek?A2h9)AeXdu(l4oQA6 z8Z0tRIOFaK#6KPo*R3`|#Xel@fcp#)VZE4*>%-hNE{jos27oau(pV7yiP$DoIY%y_8km`O4nV(?2~Z5xE^OUR`La9!mN^zSBM$s?@|l^JUpA6^OGshUsa?2?=udU( z_Nnm}IY~?nf)hVQw491jqh2~H>yKBuESRmJ`!U+u4qzG?Is-jAE;O}-NoW$@_e99B zOIaUcuK*L_=EQ2=K;?Vaf^J1u#*mh6cda+L z>A#3?P>;ndN<=>wN5N$yac+ErUWo8M z3`U;b-gL7f^q3WBxd9MB^ofkR2@eOFjOfUr>Y@W+jZO-Hm_OD|e{uH9Z$PLoBlC+4pF>1}``M-$X<-%24T(v7lo zW}yn0T9ng}A^aS;K}O{VW;qbV;m@9dILv}R*&#jz>EGVb5di-R@{oGWQbZy|hz{|e zBoitxeTR>ZaX%eg!$PgrofWm^<$ly=kj9N!P~{iHA*ia#NiJ&A1u?V!$GSy3W03B5 zg=9)u3I=xZ)Dc-k7W{cKNOk`Z%Pdy8@hsrYR)ij0FRxV6u&N26iBL?UqWT~b(jYIG z{Bj@$bam-=1srF(um~9t1p?D*>{)zwf<(4Rh5`jcgFUmuJM!sZiOU08@RG&9APFRD zo4L77tsOvBTI!|Pw~BH=>8g$M)I=A_uD)a>@)nO23{pc=HDF(KRT{>~$t8=P`LUBH z4KrVea(m;FI&yV@xHyb7`$NH}tK7f|1IcN9_QL|Ko;{>}x+Vr|{sBP7U(4|Zu4l0N zmBoZ_(q`NY|JSfxZqm}$-cI~-s-o2zB%cpWe}Im_jP)7F&C6gYL4LvO97Fy_2%+~i zO9!3}JOt`leC4B18N)5hByc?;h>~piN4@wTduO-~*UzRtDS42Qsp)DGIH>jU#^i}c zYbgQuc_2vaF_%H(RcN8ZXpXySMsURGz6tsbXw39D5b_ZDbXgAFT?Fz1bis$>IcE4c z%GkH0(e1f;Fs?i@GBRT5zzao01_AR5Gv3|7k)S$;#xl zxB}=GZW=|w&Q#6s#4=H%S0x`j-WdmhZq$Y!V~ivGU;s)!kC=&(=;n5a;iRPxmIi98 zzjKxZ*i4iw!JU4X_c?E~$csLh!kOdcUX{y~l~(>NT*JN#gDtpE)8|KMbku>17dvOR zXFv`bd~$YJk^zcye!#-l*Uxm1$bY;5zNcRs9gV2KVQ@g};7pB@Q*=zsxzcb&@5P^Z zxVaxKk=#9zwlWuITFCVb=HhQ3CI$+}3;@&An_%vxl& zT8K$u?C!rm@;W+H+{4Oz#{2A`xuv%Mi%rqf!F+!>i&)~)k|xDUn2T`LacRF>?-I6746@o;F%0qQd75?YLA zKzSEHB}19P%^C$CKkC30Li5CZeU=pFD0~3DG^c=6Jy!gcJ{h4+n3|h`NC;O!yb)`S zLq4bLJM;5Bpdg`}4kC@~6|@{%*HA+P9e!x!fd7y8PoNl}U?J-eod@`%o)};b>gBqd zd!URUCNa|9lgFhk8Wp#09^m}0=Vd^vx1yplv!7E^_1x$;5U!?suP(dFOJl@<{C6Y- zQv({!E;1;>=tlGj!0H@oi8Mx)@R7g3NPy2n7usUrhNunAD}uJOY_VxOK_(!{5LL=R4B0%<5qXA4>{2$e7Z z3#J$}H&j(skqaSPK8lfpP(%NJ22dgCf+H$vbd5NzCbk1b_+N=P@S7^fb#T03i+0 z`g62|-o`cpoENSyeeqZZ^dDomAf`dIWAAtb$wwYOcpwxw2MLIy{ZRXpzv8f&63LGt zkSNWs=GxDwe#F{6pO<$&FmUIK7cagZ=}ZP7k`>Yy=F*_-ncSI&RcmsFI~vXmUmNV} zCoeT9HDy}b-m#N@?pN^XfJ_x_7jKJ-K_FzU<46IQQg{gcD^MId<1njKHT;^WVqh-o z@JAe0u1r8nM+FCVMFm8i5cuHRnIqBHuE{*nW%vql>*QkGHg z`S})ZUx2Yi9K>wx*MjjUS)uT$dnana!sI;)ja#-%wAD5=HO+cAnh|Jb5#R+F23b(@ zf+)K!dc-{a%l;}Js#@*=zwUdj*j!s&QP5KXFBSq25ggDGve9X}x_LaHJ4>|$DsVaF zL}v(e&b=X3XCiX}j)(o#pFe*Wfu8e0^SEk6Cxi*e(lFEUfVkM{^CmZUGo&p1bN~LK z%1%wCs|C<{5$oI^$U}YSmRT3OtEn|aIPynZrlYT^X)vcv0}9_!qeeM6JBz+-PeEa5 zt#l9_psixe6V10u-^=%k3#a%nb{1XIGOcai3bFt zm373yb)xFW%n?qqJ21M;aS&jnppgDZ+DYOGZn4YIQ6yJX0_<6``a&c?qQ22Oj>br| zrhr0=!sbrZ)m_XzNq!zm7xK>l1z--_6fb%j#Kw8W#mR=VN8d#gqu<6IqbN|E@t_fu zgUnor@vHDvL=hHB>X*+Ab)0%CY zmG`v{uXyd&)AL|mSMP|nZ7lQlHrkbaKKSaI%bJ@yI%RLTFl*XAchXo#8gXh0fi_v+|E)!XTj`P*h91ZIkF$JZmM-=tOg{Mml2m}Sdo-?txE=gpif zuWC-OzZFf=!#pTdIyZTl^@4HaB+#_`uzd>cQD0Fyh-6PRyl`I%I9JvhE|^MPFA6aP zYH@VBiKxw08g$>wczzphI{ zK-pFT$j(<0i}=ARJ0`kIK~$<~-MMk*)R0$ZtLxlhdEkvu-Qlk#8Q_ul6-nAzk~b^-Z=o_i_|6!o3)p&knu$^ zV8Qc;c`325pjeS+5?@>y%(A_D@8c%;uD32=q|&q6DVDVg)3! zXXYb8=djUVE5Htxu+e20&fM5(DofqfEmjZ0s6bk#5+2+o+Cz_piN>t z9~8PPpfdw77#O#x^+_PJ?wO49$PC~ws#EEVa3r9%0f2j9s|{kb1B2p_kQVThc6N5V zT&d;Oy10lB27+#x7=Rb1%36sumEcOcS%SxT;pn5VBl>!Jo6t6*P-!lkEN+l1`2LTa0LczYu)59&cZrxfto`&({{rmTqe_KEX zlG>2`Ep_)r)72Z~+nbrE?YeJu`GL};*lQo_HpbB5>GDa&#^CJhU=cy$6(H=Hp_0uZ zV3L;>#GT-9wWn?D57^FA=bMV4i!)GsYXZqwCNBQ&Ielm^zMM_Swe8Gk3zQ0e;r9J@ zXI^MzFRhUyNBX9p9(yGuAfV1!CL|341jLt&5m9-~3cihc^qJTNb-s9kOZX!K)9NDmK=3DvBu6wh9XF z*}=89t#67^=!@tFzL#fawVH6!*DtGj$^uur`Mbs*`~94bjn49Bc<6RTr{k_eE-;)t z*gkq$BZ0w(xUA^DairqGI~%8ct*E#FG*q#4=_VKhiqHOmac~w4AuV>Z51Y%)JsT7A zV@_rH1{vE+bor8RoBuH4?wrS$tS^s<&V5wX%sI@*OTow7F7)$MpQoWSvkZ)fSuKCn zc!ACCvZO_`JPz4CfBkaoz5U0ZX%Brq(A6gMa-X=FS=KgRj3ymSn|vl9Xz`+%4hG&4 zJ+}>;GTZ)D(@Evu54i?be3@AbA~pFjw$r>ws}||yPk*+)9^Vo%h|QVYF=@p>cUf-R*_AKNj{?k0^j}zn|MAPH~;mUpg@hU^=s4nH2tT;PG-M< z|2W;J_HDkm&$pLYJsoGX@t5b$;%;j$jXHDgRO=@iT3$h; zE#5Wy>NDXgu!nv&Ez_`qsyPhXu= zRCK+9z4pZX(6(xNHq>VL)>qTBE{%4~pBF!D_xg$1)u$#`2EUzM8TqQRccB(tJ+ zi=Vt-wL3Z|p!xc5MVXr28chK6+E-sG&)LwntVgEO_N<0M12S!Oy?@_6ckqR!-Hu&` zCdK2|IC^MXP4|7#{^PtfHM?KR4fpz6ebKDe)X*5MuKsPsp{o%i`gnY-n|;2Yf}7n| ze%kdG8$M4oUYGq+?f48`?}kc=E!OWZ*^?1!KjmVE)|9?)uu_6Mw$UNh$aJ#E6zur}`jA zi1By-sv44EcAKeEQSrUcj_R+HoYHyUf>7~-8U>>!rb&Y0_ULq^GwfY9e!`a?lA%XLA!u&qgp3|4)yRry;6Y;OVkv

HeATWY%iBe^+}8JP7I@6CeZWtOd=K(5pNnz|gs7yVLQvRSWGo7qgJ;g{ zGYPWz@XQaEel&ZpD33&;AfrI|2rkABMY0Xx3OtOg5u^YVD`4JU2_p3}v`BT&rhX7X z1DuAa*D*aCQ}wR3?7CQ6(uHT)uR`pQ1n)z_UBd3aJs=8R%4Uy3__IP}f_c0F8Go5Mx%2O%xSB9!F_L3+{paUcDO$gM z`=%T^8|^w;DqHQf3@x2yXh04?+qU^{(*Iy@6NLG))EP-3L*x9|7pV^dCrW&@*-Jqe zMYyk{FAlKquCkkQ`O|I!ms9^?iH1sNJ6RaAqO_!>3nc(Z18!}efL2G3%18v$oR;Ba z{o=&kJ9gym=ym#y?7`tf!gm>P_(f_8xaPTYXI@NEh|R!F;&zNG0c<70G}u+cE8RNo zpArR*=46sDjSHA#UVeJntfM=91^_Y(lm{+!;`)~lAH@Bmq^yjohKROv%xc3@_wsHB zeR?+X`Gpo#wa~uA#>R$aO0{N!C>rm8N&7x+d=p{go&}+WxYzqoQz`7RPiw1l&fnjY z7cB-zEP>j~g+`akhlaKmu?Qzp%z(W5%qbJK8pX7)x+0nhuCTm9?iyYy=r|%@6pr88 z5d5hH>ejvBm<)vABgv054Zf;>`PsAKHT`w;McVh^K@$j9x@JZ*5-r0^@otc1k>U_X zvG>~l7c*W9+qp&LVKb1$deWq0N~QWeNrtNM>dFaXT7B z=qIXJEMVv%o2ib9p7x8G9ag3$FtQJfLWn4>c@g`i#6PgQ^zE194<4Og_N+_Si1v+p zepBnzcG5U~r4PG2+x*(1sM*kJ@vXLf%un>OnK$l4Qvi-8T!%M|~Yo`P%96XlJ$CPGc)0urYEd&KlCOW5>CK05PZ$-!_apWD1M< zyD-GS^gWM|XWgYaPssUQG1UHL^euS#FLUR>u_Hy?2Bj(XyzFV9r5BGpv0f7&F=_<& zkR0YlWD<~GoYrRxy)raTZ-3?et;4GjUy2} zyR`VzCo0P4y}s|=yZ1$ArmW&H4W1lqGCyUZkr5j`E*BUF7y-NU*B%Cknglf%=lhhE zqLjDzjsCN2nFq~P@{N(^7ZLal*|T-4jG3ZOLh==ynsj1@8gqh-3Gq+(1S)$P`WaZ+ z9j{tQjh&wye5P#mqm;RUZ)QKX4axeDy|KxUCNBA}<}aI6eqvo%lMmrs4=qjDVIq`)8;AEGi%lUqv{-s{2h%_E-UxDpB#9i@RIq@ z!jjJ!j>ZPcH&5#CQ(FK2vH9*VUZ+g&dKak;bXZk0^7VY9q3#oI!LANy{y+K>`$B*BfTv0ss=KReG!PWVrtKwbH z-19~ATjjXm z0lvm#I@Y`0Mz`rsjTjTZywD#RrTg{udLB}1+*NghvPRhclQZ6$E|DK{qPm+)t3j)b zSB^Yq@^_fwoL75R8$Z@^xpY>0dg^@M)a+|&1D^i0_BvcXr_d}&sekMxjo#BA-2Q9T zuk_>T|6C3Axnk7HvvFyc@VOdcEw)9BOKbnX&l@w`GsdURq#?$Wt2O`k54GlW+caRl zhPLGdBXU4(0WfLL6}{5cUC!6>;o;R*YF(`lH_*A;?%<*EX+!?2-t>K!cD?rV;hC&; zm&j!V#NcODv>nN)@SiRp>^$S`n>RP%Utr+^zO7T$7J(o@P_V-d1Zt_c$O~anQH2P25;HTeJu3`ofpg7U z(5aiRe;1tGF3m0`pt4w27P$qRG#v+7EOSgy&dYF5qM=M>pT-eQ^PNFKMWfHm4mKGC zs4sgSk^6uCu}(4>GSiW&mCW|?7sT1?+(Zx4N@wa6JltJE4#`KIw9dY{Psoeu4fQh) zt9(dE<7dhSwOJRJK;Kg+G@deL3Y*OyGD#vEq6EboIno=1(BZ?gp0bf((}Z(xR@ zxXCoQAO}I3$mh0gLn~ax=#(r8!^@&j>I^=jjOs?3ilrPC#k+uurzZrZ3wObSgSiDN z*uE!6JHCaY_>>*BkBlgGjp!uA3s&*&Deo$&)(~=BTbZvY5(zZjvdS5s4M)&SB4{Sk z4s4ct^}484WvtN_l@z;0_A#W;cGsv@wGUsXy2iv^(c(b%9u>px=e(g}$g%>7!k39k zwqvJGqM4g{VsNfV2dIN&id7Vjya8F6q99gFxBig@50WDbPP-Vt`%epy>@8F$M*VkD zez39p%9@4D^)airlSf*LT22-Vdd)v0yI-NTWsMS*hm? zQ(S&z%Zs>k`=WvQv876@_XHeJ=*CuKke?D}YjVGQk)dmGr?q`?c{2&%AS;Z4WiXTL z$pk;Yzpe}zF^nvGFF?fcB0em$BhRH-mZBcFdjU?WbS zkc>7tze)JVF~yL%D>%rK%F2sqXqn77=(XDE?n}^VIeQ|Kd~$uA6E)R3q-Y0esPOZT<=fC#eAv!HDO2%**q-t ze^I$;jVLJVQP|nG*u;)j;+Os|;TL zkJEx+lZQx3t=MHjoqvm;Y7h{;p-QWrrWyMtc90I95*vB7&KdUO>3X-`(yQv9ug%Fo z!;5Nwi6rMvEBG(4m#=J&U9a#P_)6S^X@>elKC{X0}$=-$BTz&iDXgwL!WMIe>xg?*H zKA7r@KLsSXc-gYV{aq)@f=wI`FE`X=>H@Ko@J5IL#2mjc<&2QAZ{BQ*igLa-NKa?V z6mbwCR|H_o%h{UXXCS>f$%;WhA6oih!-g5X55J+qKmWsplLC=oo7M{x&pRM}9IZwZ z=lU4mkVm6xudFe~(==v4ddIdUug|R30$o7jC?Xc(i670bbgYPTkckuY{IE6S0If2CTG85sHb?E4YhX-sh zi(4N#BaTm_ui?dhF<~S?LeW`R0=@95Wk`yMM;5yPmn=FHuBLD5hpFr-N0zf^@>a+Q zP@K0E4C2X6Jk4X;lWrK10JPliil}(;W#uyN>27c!s?ys=@?r828JElfo(S3_5#;Tp)&$6DTc{aN6 z=%G_bF3hVSlulQ3s5;bp?R}HF8P<{hMjAy|F|9s-{@snL+u`BieNq+AWfXn+;1Q~) ze(6=TJ^j!7@*f(Zg*DdMSNpwe)3Kt<6W8 z2OPYj&@j5kfV9yewO?{kKhyo*#zRKO#a5)`z6yOy-?C}AuWHwCPvT}5Z|t?ky6uV( z?>jf23Sk$#<%IFc3FrQScDCW7MiX`tjKM zMl3JQ@s5RYBMXWAt@-nhugkG_L0Z0KS!GVBJw8+nZ{|6FUB7;P8Pal)sY^dK&7yB6 zxHk>*3*pvnQ>x5+-gidZLeD<9S4H9g%Gv=n5cc3J}{q@m>wz&(6+}_@6 z&Vt`!t$uP@wfHI&rtjgzrCP>6F4UMf_meW)Gybq{-yR;4 z1zMW_TX_FA)kt@r_G3UgW&E8p_ZBzYrN6^ZaeY6PJ!|IftT|ER)TW)y)R_S%GPjlW z9eOiXcju3Xefp*8t@2%I*u18H17(vtR|9#rpA_4^u$c4eQbtN-+?I<@rC)koPw745 z>;RLQ^HkiAUo>wWcwxZV9alg3oNO7muzU56KY}#Q=Lvn23d9r7#k>G&!X!!6~W8D9&0;yxACAA;Q>aQ zGv~TLJZ6;ZHsP+0slmZfLFX@-{k)R;d5r(JDiy^+r+BwbmB&P_;`A#-^w#a@`{la- zVx84C9c!M{SJGXQUVSw}w`u?Pd4cCIc_hD{zUM{f*Z#UmE5kCz4z6>@-^yx;x%22~2L;Y#C_o~QNP1zipp}I<^;W2> zp{g{s-lXLJ1SUp*(+seAV%qH4NUNOkliH?PXFFPW{avqXKcyi$|NGr=U@~cfimVqL zI|?_4-_`4~Cn@W=*Q?v1p1xC$P5yO|E=j3Rc2N+2I#}q-;o-6=oaD6oUd?0I7eq3E zV{yr_)y_#BZluu`?b=1!Y2uR-%5w3xwaSsT&;!c=1YLgbbLlZnedhh~{}`P|ufSj&Q~)6V(-82cFcf-Gd6 z7qxZE7V%^y8NU+)6v}(;M5dxsVD-boV=LFDFwQY&!8&)uSA*#BM4_hZr!lmcBK8`T zbEk(Sqs0uBJ~}n>D3ds*mD$`j3x6WFe3wStNy1;RUn^(zS8nx6z)6_K@c+yLfRMrc+Qv-y*^b+R8~} zhA(q-&}w|8oOqj;HvyAX{$y8L8fM<=0RnOw(K(;xOOs%aKB%GY#u`--d1>Yi*OBqR zD*mR4DHV|>_2R&xSM(=Z#_h2hF-42lD9C+Ve9e%+eKu^7mbF&4tmE=G8XsXI| z7a1DFHoIdV_66kK*-`UKf5$+jXYK(UW&IWunEZHopJEXp8I&9+?NYl1YsH2TX0?j1 z>bPpvc@{DF836w_k)dr6Qc1#e2PavpB^nCZtzi=yH<`+}3f1iLCui#jx$;l+wM`HC z^s?uZ#mg*UZvjq3%_yVIOvO1j@51a1qiN0qypsi*qlu6wYU6y7jsc~nj-{pLwW<}b z-qizPLxwGAJMV8P@(aqd#n*0!rs0hz8af#_ve@E5?>3OOiupFG8MA0Hp%_FzOrT9Xv=UwQmSlLhPYv`ykMk7O!q_eiqj4f5>d`K`N zmPYS_IN~&=aAfZhK^z<$-T)S;w^0-k8vPlq5`{hw&|9l&ke1e5oHYoyR|;~NnWSSy zT>-yjE5w5=sKxSK0Vrw-MFUs#3f8G_3fea!K+(>c+mB`jHEB@FsEHWj@iyPk#74)) zenosNem~66-sWc{p+iQS?q5=fqvqqoy$xk76b_sNdj(090wkEsYYLK0H-h)g%dps5 zFiKUn^#W9hXoLD>6ZMQQsg{i1+8kai6O4o8L0PdvXAP4DclRlCA z&C=8KjZW5A%12Wdd1I)`9$196{oe9g7VS3b@g4Ld;zY|sBh|_Y!mZCnWxAj8!9xQj-FyC=N{j)F(XPW9)~wNE z%lmUbG&GXbKF$VZE?Zw~8uL=<BzKRr`mt++-ls*Dd-=PW_X$Y z1!`f@aD-4m6O4M{oIzY8sLDJTpOr&o`|PFd%>BxqKiy}%t>v$~2F}Ey1G-WORAywv z8Jwe)q!wY6*V7u9xV9GZv~Jz0lijIVzhwsu{V2^=xtUs=OzCshTO zL%PIO>&O#=3?L#HPIUXh>};zn!Ut#|K$ z>JNqe^q$T;cD||M{}o@m(EErdBD>v~Z(T$fRREKb)rHkV&o$^_{Lm3ueFjR9c>G;>cE^^o7JAEMj0+r|CLyHvXOQ_5%M zZfo8O@g2p|9uQu(uJWl{Va#e8e1Y&QKKj_+kXD!D+%KBlwQCiWa3p5Jm1H0s@1MbC z?Bg%eWebB314}8&k7;3m&^g?D(f zm_<9(!EFpJ#fwOrcEngqglMu+xpU`*YVnhO#|IeYy?=inb^9zxUD;y^iB0Pb7X|{} zjQoB(G4bMzjR51aUx7KEsy@?eZ%6fB#YXkXSM9Aft0!Xr2Du=!y;8Pt4AB$HgO>3( z^O#k+lqMHg(FbC~-b*nA;ep=9rUUPS@dl@|7~oi{|6ejUh0c#4-f>tVe4H@IYST3f8f2VWQQ(S$;uh z^oCM~Aw89hb#7uKc3h;8M5ztXID}JSuJrB#(#_rvStW)7F1usu^1<9;!Oo~f`+PN) zOPMzYW_Svt)yIaeP{k?v4Np#US*ON2ex_X~C3DADQfg4v-v*)SfUgfj<;XRGsX({H zG>-4bWf3U?h=y1c2-AwhrNh9*^#MI(y}8IF-oN*pa8CUFg!|z3K+sr@UPhE_k5?o$ z2KN@t>)mZlTF=GjlE-kv#&yZ!#s1)!sJ#8ttz}4q4DY}xpmmbcpOdheho2KyL3G7^ zdj7vKKaRvw^Lm^384SdzkS1vzGZQpQQNuw{9&#KU8Q~xRN92r-m20m$n47SKgo#~u z`VSm?BGR-ET$<#%@PL9(N60!nwD~=x1a9ZS0|&;lk^0Z9lO7}PBw<;naEyI+6mATU zy(!o?A=m^Hsb;cToW#JlMXthxjfT@>9)(z&F4$12BkFC;FJ)n``RbR4ajcSi7tsvvUjIduwcj=I!}jQ>9gTQY?Kk(C)X45Py>Z6haA5LQ%FIM4h- z6GxdwdbQX~A~}UkdYvcGUJHH{K8rollRNI&Xdh`nTpj@jooB1}Q>;Xi|C#-h0$Wpd zg6z<$<P*=qFBicAYhT2zoT~V-96tCD1SI0C%9(>~+eK=j zFca%m6s1MBlcD=L2DELpBlse$r>4MXMs^-cTx2CV-R3+dg1|@pXlQ^$f$zRo#@Eaw zMHAy?K^lFSq2=yd{c>14C~`i{P6E7}pC2Ks|V^ioG?$WCUfSkD_Zz! zQtLB2gJV~YUH|sUp-*wO$V&SACY`Qb)lFLe;(FYNX%!xGk}KaV4lR5#qe@k^qjjrY zWBeS$yLx^0)B9`0sTNebOxpw(8mhMuRxPO5wAG0dM(4^loI1H~T1yV;5s#y8TC^DZ zp!Ek}9|g!C{8RWIjMzSZ@DOHJh9rW5f>tjCKt>u8a^y#Cz^B?SC5NU0sn_;Wr)3fx z6x>FofzkH^S1;AVBhmZVsx*j~;9ZV^?d{Q1UV&NA{oJ<9jUM}U$JW{avH-N*hxaX5 z1|dLV6>XheUC;Qk1PAe}q9WyR{La0?vDU$&PB3oaIcW}@PZpO|s(a~@@e)bj%oA4K zULEx0T1{H`j-#j$#hGUW<=o$SPp}JTh?}0vq*>6a4qiR~1t5L0_>QuuNt~__ z^oj8*Bt_IT!{eGW;+G-R6T*{4eeTi(3Kj*{UF1kp2W!eBRmj(j&SnJ@y~Cx}nG7nd z|Mq?}Uyl&XABI`d3reSzVny}C{auG99v0_nv-pjj2o4fZNtwY#|B#Pl&}8H9s%0Oa z2g?{B^CkBPVMwJ)v9OXsbh--`h|5T((6^LXiy&LjZ!#QL$ei+ZjOn>W1+zOf>h`~{ z#{T31Sk>UZKOLxGSG)cN(Be@uztzMJFn;e|7mMoc%{nB&*erj2{aWNOC{+r8%%~Ne zNfq+Qg#gpOh)Ds3;^p<_)-tUE^ZItX*lHV|1?3>LruM7=Jo zFBSU(F*Jpg6&rfK>Tzv56_P*w(i7gz8%qTyQf4#RI3A9a61RcpyM7e`g@IXGR?_}da`U!FWSy34crzn8PVa0+Uk4IQ9^mZhD*y?`0 zJbV`SZwhurH^K#N)Toiov?%3-epDx2@Mn#=`Gx=5Tc!s{VTZ_gU-1UYEhw-&bT2tM zc!qPSJak#=jR#aI@-x%etz%gRCwx6qLo#0k!G#k4EV!2}GNLIJ|5HWR?L4nMC?he1 z{j(69bKR07J~6<-p;kBWKzINr$vxh?0{yOddqB(MOUR4^WmtBE^~)RYOZrVt@U40BpBBLPFKSPl4pCb=Z=w!< zQ*eH0RE)kC#3dpvgMdlYukYS{^SEbV^gs8mBz6g-{F9+ozQyyu*Sb#_k9nnS>p5zh zqP-$ddauM0hS(u%Sji-Q2w7#(>y&eP16ZKPfHY%4cbPAzv5_%m7+0Jbwe!h1B5W|y z@ES6e&nt5>0(NPK&pRz{)fnGHgHt}q(peD4?zrA?GJVsng%AZD&@Pna7X$$rAQJ(r zcE8^7&ZlS)$a$0o3vyG6_wCo5QQKMhWXaSTRKICdr;Z(u4O+H$<_X1pZkIRZIp1s6 zABP~~rsyNYznUm^sc?>l7nfZ;$3Y`0qiB_Rd$vhJic7H(axRi%44}(&aUsax&Ez4G zRHDLavkX!65;V}peBx%w*AZdlnhAexj6e_|Nnx6sq{3$FVeS)L;*!MJN>Tg z2wJOr0pJ(#&eBD3mpkJ^^P_UGl8QZoThwDpU{REks3DfUraArGa-C?|f6(p2=tc2t zkF&V}h$D{DU{Ib4z`uMv4at-~s0h!FK@d>0+ z+60qdBo-pbK)ew^01T?8|w7PzEFLzLHW;AA#UbVf3e)FZx z?u`DCvu<)iolt-^m) zwkQLaN^7ib)ka-oV2cSp9w*2G&TIl{mS#PK&ZGb=yMDulVhzom6R%70U}j~5kSH{D zC_5f7I|(FrGda1ri;Ii6TynICofhOke)CF#sT@SI|GH0Mi7z6oS})vC+CX+`QcO|{ z0NPFA`^#g(iSTjAs+o)s_wVkykIyouuMl2f-FE!L3o zE2d%(amKZx1AMipVWj<_+-6jX3)lkfxO(Mvnlxz4<4B=IX?!#wwfJAO^FOfYdGKv! z`Thlqved39v{HIG^n8OnO=e#w0jqu|yL|v9pq*fAReO$*WI{gKjz40NYNRsMF?0Z( zXbKYO;hCzEo|F{AU?LgSFD`clHRDj?R+vOkn0wW> z1E_Z*Cy*tDvShV;HDe&6=p%7~^%K!S^B*B}x)0d(`{ut`zZb)m)C_1EP$dYO0Xuhf zhsL1OxwG5X>zdT7&K-03Fb66~#imV#{gPQ*;SHNrwI`|E6IQOU*c~;)}`m538!iS;1ec@@J|g{D^M6y)q_Y(`LBS6 z8IjiKxrJnZJU<@6fl1&-E=(l_u!k%s-X)oXfc4%9>K7~pb{;*N(J3`B-CA~_A^#V5 zDXWpco9G*HtA%+GPUhD9O zEE*kIkVO!Yttea>Mtu`Sdyfo@3NFGn^B@w!l|>tDPA`T5rHVn-x9jf86mw4m=vWxR zePLMCVoi);78t=(?76rVgn@*RtuA zX$yuhmQnlRh|7M72MA-BdmqFgQOsN08P4KR%g?cTeSJ9QHR!B()xhw%{93pxvCu`> z?~-w=)?8!lS|FcNTEL?&qNAm*y%!Vweb=nF8np*jcEtlwaL6E@Wk0rbk^mkESAbg1 zGuJ181Jc;m_)w9(A#H9Ze;x<72o)SoJf>O_`&eEqur#fCGSX>TvT*CxX56f~w9upl zXldUdaFAEOxDQ{0&8iuuzl%B1W2;N*k=%jE;Dt4Dl%7sg%aj2jK$XS>a@j;}(|4wG zq-RAWM~eo7zJ>muc){cGG16e5_xZa0=4NIJ-|!4hxl)M@|1==p2cc zrROZxHGNGY(`_DY-zqPw<29JH-4rEcp-+xnU*RqsI?%a zR=m0qw>K(YY|7_d7y}0wbz|(hvUi<|YJFQgW@CPgx=X?S@rxHeI!&RZq0;w8K8!TB zFzv#nQpg+gjspjHh$ijo=UDoN;{zM#=QmYUOrR2s!LMpByn}U6P;DD(PhBMD=aPu1 z`kBa2;7m~NJa%h6t=)y6JL@Y|p2J&6)`)p;ep>m=P8}y=)R4x*&d3j#WI^Va*zw1$ zkP(wouKM9=y|(&)5q=<1!{uxL@wF}Q@4o2nB2De$YW(^8RZF_Rt9U1%w)~iF{@TP3 zU-CBM#DWq*U-c-$6V$fkirWusU?XAT@fYh&=xNS+G^I zmzE;w)ev)?#KHI5d!G2ee+z^o{5qC5d|k+1BBr<1I}7CtKmTVik;SFwJTr*a18Jqy zMBWM$>X5~z{15hL4Db|>=`y6m$X-{b@~n1TxzOhie6MOo{AHIlVbrN`(h=PollB0M zj=jmVmqgL7U87B4V4#!?b6|2TByhv6w@$oHO>K=}4u{ODubp#l@gneWT*}clc5R~Y z?ei-Ua0sRP*%AJmdIRs;?kGMeAY=+htQxqH2O|ZpYpk#7rF)l*I*ks9l_U7y2xdji z5^UAR$cFdC4I_@OW`a5>$%J_wMOI5vKCr9 z3#b!$cCwe|(W6H$WA@cr3trVN+8Dck|NdB2XL@`Q?2>`Sg9kcRfnj?@y>K+?CjGne z(O%YYZNyQ*t^#A^>`ASfy_}=^USYB5j*GL~kzb+5h?ZQJ?cm(f^}_6kDgakVLTET{ zEA*(6DS4C3|6L{wu!?cFxA))Tqe$;dzGc($be^2#RHT;gApVhyZ=q~&kB>BQavdfw z-;oE9#8UL~tk3UZCIPK;B#blHqY_sKt;Hq*7)9MXOI~C$S!n zLnQf|m<>UwC_32($a7I6P!WHHTgTGdwBWkP+(pe009oXnFF%o>`7WpQ(f~ntJcf? z^l1k7Uba5*V1|ttp@sTDibfRE0ifbSL?D_jU_+Y79Vs(SBbMKya1@P+_ykETK&Q*C z66FB3l+YJ|I$dew=;_0((>2JLG;2bTiUxexjH<=Bq+c*NLe>OIW!r)48IxZd?JFSV?YvORZ9^FYKKgCt3kk0s5=ochAxa> znNoy%CGQpNShi9FU^+NlUi}(-#2Ii!sCO;OvNAJ8Wie{hsHFNWksZ?^m;}YS#7~j4 zHtMnn1-3M3>c2343`qlfi~($YyV9i3u;1eunmE}gra@g1w*#g~MFWf=Ia1f}Aa5D{ zQuLZ)6&{%ye}d>(R|%*V?gW=E5uu>2!Q9bC=-b&-*RJrTIT_DcIbyi~Z;!XrywP zjFe^BwWU}MS5xEzblywFXnO3%>yHdq9eS{|__PynlL8N6#Ho-+(L1@mf_@R+z)(fx z&jT=s-{?wFzlATtru#RD3oPn-QjyS&ZT1fCRr53L^-?V))xn#$9zA+=$Qcj}1U7 z%txIKO?HuS1OT|Axb0r6n9UzmQs+)TDwKaXdt4lL<6;6UUKMo9q60t|47HG7(2wF& z)^I|)6L?Uh$TlaecKH1zOi0S6J6VW417VHK!4bjbo&!$!=&3_Rh^QFmW;5NCR$*qe zV|VG{2nw>T2}a6k6oNbMIQBogk#{o=Dx1Yc^NGov%+0Wrps(|#i56CorUZOh<0;pQ z!sqJM=dx#&b)zMs5X~scjCBqjq7Xi}?{m%h&P6eQ7@RpAK|=X5U`BEtbKs0FhRrnE zp^*1^-!Prk>(AEnBGk(QyiB~>owSQSFHP_+r+Uq|M^f> z(~E$I?*@dukBg;1_M!~l4_nM7mLG)sg@Ae7SCAXoh`yW%FLE*P0@5vt+lg>!3NT$% zJLg`0Wkp#ieH?L%21af8@D7`J0jm#eM7PQ+$ikR(^5U*w9E+lLebwbOE-qcU__FEix#o;mB#>fK1-Soc*E^ zjkuV6+_d$dz=X`MuYIcKN~?n2<$3Y^*#!@=ypzEb1t8goHRJ2D+BctcOBOr|%qR0n zl<9S-)-GRQn<^`>&dtc26JnN|)HYkcq3oOr=yg*HeZJ1>8a}cND?_P9cUb;%V_cLp z2#tQuK*(X znnP|~*>aYdNzu5+BuGjM@X@0)&2Fvkf(CW?v%0lkscYa};^Mp;8;0`-dSb$du$K8Z z_-E}88mY%kNBooVf2sRcIC>q|F6oV6acyMPkwa7!pO2y z<0iwT_?Hi@$gY`4<>FbR8}d**|}Ji0-0*@0WDZ zR~Jler?we!7Rj^iV-~&YP-+F8n=C(b?fd&9l!Q#RegTs*9o$Xb7=&?7kD-&5wO%PVO0`37s%>0N1i8*#)qPo5h~IXUGi!t#CvT%@E^CGEC31 zT&AkP5Eb6wRD%``k7Ki#RbU}EL6sy)f*J4+c2Gt^`cFYY@Ez`;!|3&cdB{?UVE!ob zGR`wYN&O6Ss5-tfp@k2S4h;>FnvX&Ec zObo@WO|P$0IcFoyCVgjAVwR1jQ{{EM0_MmrcpJ@%p!a%B@P0aW|+rP zC<efKeI!vuuC@@1v>&;UZox&x+`+AOj*Y4};E7s8eC@5h{B% z>4M+Cggj#MB9=fCEW{!$E5b?)$fix7zJ$__Z%yhnD7a38BLF8w@e#~(G^#$yU{Yy` z-mwF#yL|56YFzbR$}&-mBK>^N;16Ic>Q1q-z{zPj7!SuLkMmUVP5EKkv%xcZ z4lz@5XlmrJBqu7<&F%ZJh3gdBo>X~I^lN=`AIpN58P`&dcNm#*E$WP$Y`h{#B2UNQ z>s(x{p)nZB1kg$u!B!w9$zY%`UdRB$?6S47wF_B)UDQGlkK&0Tj`CEjVOhoVse8F# zYvJtaCTF`>qJ)`^par8&O408sDbaF&?I$xv?L4)vV_W!rQMa;{3p`IqUvat-tIr_o@yMw5+9S0R z_7(R9gRWhpdkh?SfFvRQwPJ8wS=oz&kGnncAJ(ud2qa9I3uw>Z=G%!MglxK?VG(Xn z@+6g6|WzOP8!yxJsKuN z;g>3gVUG^Z$W}{mF83ImhR+c6{;JD=N(JAWw@+Mfkjov-@_wL z_B%Bt{JsbClCuJMi^2n}3Vq&Dcg#ZHD|N=K|J*WMixJP`b;?$#^;24%Mz8r08ToeI z)ur9CEW^Wq|G>E1?yf{Pb~7g@=l3W?+jKdZu{~;C4XR&hULBWKqU`&!t~2lWqdym# zRoQcLBOfMqHd@AoqnP{Ygt7U|e4bC^uD?fIRdJqX&||9{iI4s`Y2$okW2QNFY)yav zJ@O~+toBdtJLBNkVS9SW|J+Nz$`xq~&9%^5c=2j&qvBhc|0JA(HE;Qekeq;{QewBod3CnvXR+)Gpt z;terYwi6i2aZ^`H@+C$N<#+rz%g)1nRNj({6f9%Zz)wOS$hI_19v{Dtts5|Yb%!ZI^1Z4wD z&nGv@3^7cv3Kpi97u^OH5${cG{!)YH^hbt``ikN25~wg?{K+;+3Nj#D*W%WCg{QJOu zXt!_Eb`Tduxqc^Zpx2z+1OHOxx z965YgJlJKAlrWR%Rd%IY_e5F16xPD>wGZ4Mc>kvbpx2qk5kO!of(ZJAG2h?R6J!8L z9b|w{0itLYaEVevCc;>zM`vI%RTW_ACa+Jt6%kPCC6B2u0p{i4!!=jc)4p{*InlIB zp!h5R+@t=Nf(roi7^wg=*?oj}>Qce9Mxnd-qm5-%f-rAT0gydiBh1Yi-intV-6^g2QXRlvB2`GRsg!p5?yj^krO9NR7x<*kC zwQ=VG!!%g#n}g*O>0zgVBgSY;yR~MTOP8v*bYd(U;^)q}jfX%w&fG`%__N!f9 zs${(1i=#@y6OfT-F^IK|082tDG2VWYGt{Qd9qucmK|vMWeu~@$%!um~260QhCw}v6 z?IaoFV#1yvEf`qb0~B=hqbZ%_nSzeuZlJu0V5GJDNf(r{*&3AqEYw3Ho1LViQ;OQr zM_o}~$ch|QAs$z~zlpR%erM@A*lZDg(OStw2TQ;h1G`7GCqGh29!KbkBIo)AO~cw~ zd(_bOs>*B`bvikvm8S-$$pP^M9Xg5gJP%L$U!)y?^9X2V6FU5N8OKsquB;kyDz2LE znh61pJb|mP#nTWpku*=Sl+U;CyYR+Ip8FZue@GepbFBxD^dR`%V(dQq^rNaIxzZ)j-9dY}fHYivxz7VG$x5&wggoMA}PpBGZ)LdU8Q^w}AYGje4792f+! zO0OkKvII^3@2AtA$rD+h;I52cU#pGPrBi->1^s>TyAn9G*e&JM$S8wq0IJNI*Jx8B zYo|uGMR)7a#{43m%Ofpl&OY8P>H#~qe$<2bHkhTR1;`4(4qCEP?5B+gf$37*rn%Ny zB7{t{JJ_f;dwGuNfjouhYTSO4U8HH~x>s_AUL(BI&9D8VC#Ti9{CrijZN&!DN{1e* z@3R*j(X4*812wr0+VhhQ>sW1;T>dAwQvV#gXMAtQuzfw0@>cjdhP??H`p@c{{ptnj zxF_e`w4C1Pcb|8k^=G}Euhps5!;2daOw2R8l6P^r*4NP;TlIMo<(c?phx63F3a5_N zaow5}bSh)J&x`M~=N2m)UfLP6W6K5iq(!B5uj_VHE}CphsZ39W8AcFlIp_BNyz%SuqkU(_hP=Hbjk<6f$6R329J$vSQL{2OI{T`~qPe52`F*6GB!Pp>}e znC;G>E>zrOGV^PV^HwuO-KLXHt=zi7ruOOHN!AU^(z71s`6KVFO@~Rv&Hh&a9ddv7 zvDts`z$x9Q=^+Qz|Nf_8@3iZK4({IUa9U;Ggw>9Yg?!Xa3oD>9$J9bH(gjlRK`Ug$bWKErtU zlp?%`#k6C{5K$J92&a=MK+*nnI#i&FW@J%>4m3!PM1;Oaf@Yf+l2ByclPD4N>INqp zX<*%;bX^1pv?B^IJdLqVP(Xt%i?S2|&BZQHa7K2onwh;E(kV#SFYju$y)OzvW{kuk zZ-$zoS2jw3{QyLHZ-Y+jPq~=t$arWg6w};!0oxP^YwzIH=={n~eEc&C)6+ZnUO&ZW zb#q6l5GKJi2CD3#QTn$2*WICmRS1W$c9NXH2Qh~KH5!e$n4W-T)7_Iv^#Y9Ae%6hR zjrGkaBE?qxGP=u}jiB_M_^HztvXc!IRjo*JV;yVeAP8# zhOM{(Y>nERKFH;|qyunC;mJs}&MzGs{Y&hO{2aX%g$n^nx-OnHqXFWYk5$~o)N>|5 zqR$7AS676+1@D0Nr!xcm7HO+A;53qiIj_CpNC-th#-EX=v| zsacSM!lQ{tBwH_JRiLI><8i?F!uNPOBv7-3l1=^D*DqpYY|^j0n;9C z1u73){?tcz+BS|3$UC4net0~us|F(ZNk|LgC+ zcL75pT#+3>L`lepiTonwnK;|E%45vz)L2zJ6a~Yp11a1skm9Q-NL<6%K4l>$A z!KkjTKCag6C6O#UoK<8BqI;%_K|%vljleEqjMxF`Y|l;rSVaKFOXqk)Z=CFE@F3&8-OemFAi>vQdMMK zG60RTTqrnML?(MGx&PvAYh8Xf{qHE;CaHG>yyIj2Lo(yu8wYxt2Fqsop3{$r_zDfH zFx8w*(dok`$qy8D1G9 zXtp^k7+;e8Zb*S;3#uSeR13s3dA-n|3Un!2c3FdMwf_bneoLn)#f<3CML>nuDZlp~ zKbnQkad|uTA@;+07no2%cn=s+y5;i#3<4hW^`9~3%p6fkd3ipKk*MjtOk07Ui5OQF zvJp;}M`qc4Txr~v`8b@u#Q})C!-B@O4*s5!*c- zSgavIlG!8n=4`lYZ-}8R&TXQ*f%?tR{c`dA`4VmbML2@IYM1=$rWw-(&8RWknOu?M zo@;&fLUvP+r!u$6A@MOVKe_+Gnt4w9)2)LqhxwSD{3nRZMkOt#1IW~g+4N+B_Cxw2 z7O&5(;q^%2D-MGD_RV(xRoy=*-8v_SBAXT>mnm`ZuSUdol9-grya++C<$DubO#(0a zs0*J$PL!dVpWj8FO-%Zu?qz{7HRGs~oAtz7;pE9((;uBdm&lO+(WC7Ulqyt={9WVS zMp6Kw48gBBN!x0(eSt6y0B177%^@s*5ofrsd5n0`vD<<;1(U*;A!h&K_~<(XV1wn( zOqp-o?{B>O88&5&(-g+KQNGb+DJ~hx6avx#Tlk`4%fVFZ0XE7qm_j`v z{&cv8YE-7;2Zht%O!hT{$A~754t5~`h-Lv_8Uv|pgMVi1hS zWfHJb=!ZekCqcGJF+RK@N*1Z3uCHr1zctO$Iv$(ML^6<(2P71Fe{?D;v{3DmYh86NH#6(y7doW74v+^$LOeP zEuXni(yp?HLe|WtTkC{oWbb1NFZP)us-5VB6HOtcfQJ#KU|-6A;XxHUe**XyZbo_6 z-HjnZKIzt07@RQ2O+4icvS;}gbsxQ0L%)J(uLWH`*P0rfA^{zJaw zIuiF9Squs?ib{@*aBS3mlYPTxyZ?+w-@DE}IlJ%htIfUZZ7fv|+LCVa)?!9r`4o>( z2g8wSrB%V|`<(~PAJOA^+=69m@6|-pHC5YGOzd&ytJBm=_b(jZFt~Iifb%i0=X;x9 z>nhERu5DUWiyb|!zqr3}d9gw5QP;4+)=kYvs5(vUyXnU1W$oWNWi2YbGd87rzxf9H zi;k7AiT(DVFn#vykv)`e9`1VX&fT@<&K>udB){l?#;@kBYv8G#UqdgbD+;n6Jz&e7 zZAn9?h2F`@IrKTsjD06*#x8RkCq6U#7*nrZ?0d5lf#uH{l>24$Z@xjZZ{JH=`;ox% z2D}z95qn8b)Lx^?(+mlcSqn$fzQbl1yRU4x_5ZQ<9?)F>{r|uA^wFn5kvR3i|NlSd`#-<)`=0N0 z&UKZ%$Ll#BkNbM~PKza9%|Ip4^LIs^R%Z=+Fd~F}|5nihye79=aB}eKv-hkR8xpqW zT>SYr2*QI}N`@t{65xw=ic`xLEpEX2nJgOUd;Wp?yi=h+4?~jnoA-~x#@sq$?82&M zQn0@2*QQc@bx!3ajq@u}j!2qtWqHwe$I^Mf&d(YlOV@eEuefSFI!1NuvmL?H+q%z6 z*XP=&2nk-Ha{YX9bGwB+PBLgd?^)IknC#-F(xS#;tbNm=w{vEx6Osc5nsLWpKTYMA zDem&nHJ^Ja<|+#;vqF{XOaFta@xo?NPs%?v8p9x!I|qh_PTCnc=hOacM6q=1mh`$T zg`5>Ws@Wn#%_n-fSyF4~w!dBf=_QrJq_2Iy+_eTTA2nx6#MJM~4JT?GzrE7mxVrP- z9@xrjXHd^W$_+cTy^wQU<&KlxyMyM-XSMO&_2%k{E2nzhdUM3;c3jNT;P!Q-sCeq? zHmiH*U!G6L%&9~3Su!arCOI=JM#i45d~)7UMN@!+g2d{!tHbeN-AI$U`S*|d{XA3e zKcN2oL=%7(IY}CJIBpQ}!seBqMx*Ud{{5q1vnMeI^_{1VWC5=X;*2% zZb{R~h)`9J@5RN7AkRqsjSpNbzdEMd9GfkHk8Zs1xbB!1RJS8DfEdn*G|@BIE|UZu zF3_pL6{7UZr5bE-nm%G*d%csru9s}3t`z-+$@#tKLV$ndE|gSE<{>M{cr3am)8!v& zPo!zU_AoPiUM=EdYvmBLxCk?f(6sVvfRYv1vFp)Ue9T1nWcht16d`idwxScWyY?yC z=5jv_OT#y`jC?UCuZ;775=1~W5hT7YC}=dNd>EdKt>Zc=&aD1OQ=+{`K%yKSvM%qO zR%28+8XWVBxh_E5ThM7Rv|<qz#$%fFVf%5;&E@=K)x*~y405^cY78%tA*K68&BynIF5O0G}D z``%c%L|V*AEL;JqCa6f0*$=3sQNnS}Nir*Mhic!LevWRGN?%~NO>_cjnoW5vnQgABXM+E5rm!jTH9MamHLgyTZY(0Sd* zs9z1Y!w6@Sb^Pnq#$M=_UNgJ1L*Ks5Q3#6Hg_07AKZk*Hj1WRfYQWS&(K~Sfl~dK@ z;+1S1NG}E}Qp!nGgG`44--cxJBaDoraTSTiPQMGfQn=})RRLI(vo5&|#2vG7nOqK( z8*kz2tnkxfii!U-iV$m;e!T0xQXw{tFE$qZ;d7v|YUdv8q(+Qg#rq6-7g3_h4c>JFT@5fUNc z#FFk*Ta2*%8F`r2iog_EbjT5?kfc~+8{rL`>3f0I3ZNkbH^bW{shRJbeuPe@J!K8m z4moNg11ikAfS5>L9vk)kNo;@;l~Cs&sRAiyQqV^WZcxhNA%&nj#Fs?T0c>4(w#U6o zu!%O^n$5atRn-Ydd3kxXpE{b&K&?>i&J7Fu@ruaJ(njE@0gZFn-dO2-`HfQBQ{!zb%D(L$SeT z!e0LM`}Z3Rmf<0TI?{R)OCtGrNKa)73`8MAk%0^aT_R>3p{F{WC%Oe>_zV*EimLqu*`za>C7l|72nZQ*@!oFe+v=`vSA z*C(a2`l=0_)noDe!%bNTCbb#yaGz5&Y5C=sx6e#;m-&yRPzkUgBrMxgk_IV7W$rBq ziewsc*U*l9vZ}@Gv?RnzgGjug*VmRCfcvDgwsvEj!hFM0X5wZF;CYG&FOag)h?Vd7{fHUMliz++Z~(W9XFo2S6P#DSedxXD}ob79qa zGt%gJfSe0-p}4VX=>t!~+fadT`1Lu3DBkT{Vhp7demwuEgS}hcxSA*FxcJs zbKXJo1JMQxXC26H+q_9msmkvaMQ09-UNFG^WXjOJ(SxXAFI-w{dpG3xn)IEGbt0x_ z59xd~FivH`m-*kldhfdVIIzc>g7wtI3coj;oPRKN>8@KXs)il7WIJ(WsMUrI>k8ac zgHN4YOR3y#^r+o?zg_)2NHxSe!g9o`t+Lj%7qrUFUqmCUjJ4Dp3ZP2!Pe)H9blt-U^&>_O4arr^D zj|a^ao{ds`XREU7*6QJ2+osv^-P-H*Tlb^KiV5AvPgfiH=~&*<6=@kUvz-(AB)Ax- z2OnrtcJ8_R<71JI>3TWJ|BPKeU;oF-T{o{jdii}q&qZDKdtK=C5tgP|Ww2H1sM_9h zob79S%-VL~lvQPqt9DTz5<55AE+3>)_uVSRMUF#um1ni`-@0J!yxQ|u&*>hlJh`~- z_XFOy`lLTuyRH4CRkr#K`o4RwHOb-r*uS2yzcyd3!L7(6&l>zk3sBqY;?TSXaq7yc zWj^cs503h>XZ;n|z{6?-w`fg&s66;x?fW;8Oaq@)7!7?luGx~ovp4v!Sr$6BHnQd^o&KY2=}FS;lz&Aso+)PEM?Qku=>IQK zba7^{5jLZg53K%|v0I&Xwu$?X`K$i>2QLx))k@rQn0BEV=q27quq}0#SXtsSY^5_8J$ftXk8u>wa2dSmS(Y zuB<|x>g2jy&2>vv(^ZEbw>paK_Q3a7 z=bsbnUQLAa7y6nbOCa9w`MstnQj83hbu8c;T*mAU`;i}mj6{v75A9kH;;+bkgEDG(HXdVg+XLsvXE%XWOgVx46YfYn@ zD1h{VcOXVk&Wh@TIpSO&T*0`hnu!SuV?XtpoP~1hvVUOMccbl~=FS6A#TDiQZc`Vo z3?&J+P^0x2-3uVmL?Vg?hB8RmCuJx9f)Cme+!RGg3yw~t#1BAxKd$=`7aMyFV28UW zhhA7xwGa5B!Ijp8(osruj?J4e7;>%be6-{(m%GHklFiQ5u$9_}$T%6ca<8r*xDo+| z$EY!6Fc%f}(ySQ9MQov>5pQhQQ=1ZDc0?Yo?Xhn4>NhC$go0rHBBRsGY`$E@+Vp(V=(8&wynRCJbwn5oivZR{Z7U`p2tP0|30MOW&!g#+ zJ;hH@Bl1Dur%!a>z^hOb+M=>mhZM0rAtNFHxQ^_;6x}xl9O_M>#Yub-9mQL z&6M$GexZ}>uGST)D={jqn+l0SqF&hvhiwVinpmDKBq|2=lEj<>;XSK*Fu*qQ1t1`D zAaSosM*sZzzHytV*mU+aVy+T(u>5G&4AW!d842B&R^^_>cnR!7=Y zRK&+ob19tM@Sz)0CQ;Y1vV;k1-FgCDVU)$O%5*AT^4uDUmk^9w0W?;maWZLmL{<4} z(#LKCG%zG_o?EI1!&^Y2UV~jo)hMqmr;!Vi6d~h8?MmcTY0fq!6t6+wMo2}lvPI+z z8!|h)ch2uW(4zJ?+)U7~J28Y)GoGOwWOCAX(1U}FP5^Rd57C{_?itaG%Fv7KiP@Co zcw-diy-wVLc&ss3PR&S#TMPU4AvqXa7ZH%~cCskpy=d@3?APr0EtyLcMhd*(ZI0HZ zFoPo0=V_X@8*OH$4D6uES*{@JDy#r9WS!3-5^26BhJ>6%o0XZ|3bksRFUSH#TMhMt zI$8#gD@aVtxhKG{LY=TptZALWbm^=lBn8z!b|e>QL@W_`UuTBYd>P>{!qe6mUz)RO zP>P|aK1Ac)%FBT(sZ_om3$F55X7@0%W2*D7X@uoToJ@COTwSxna8`|mu${qFT zxg~HJE15cOM4HYDL#sCD#je-7>Cb%60|C`-%ZkQ6A@81CyjQ#zIBw;(NfRet$?a%A zAc|z_UAL-l$rZ;`Qxkurn~a`wqI2~>X_k1UXUHexCw&vU{VU5g_3;P{XyPuAUZrkv z?4+13ou72D>S^HC^N7!-zXH>oyA>Tc7&)L(@)?KCcQ&8xHgv1Ha&nhGDqpg5)s>Ab zjNgTu54`yM?<@U(=;a?YKdI_JIyY+VT10-=8 z*Xl$vC&|hV311GR!-3V2whm(rnl*F?w3^SBoRa&W-F5~Go8VQTo!Xc8?%TJJ#v$!C zk_77h6`*($M_zXRITFGJL?j`M-zAASem_5M3taZQM2(-qq=U2^u^29%LETUGLs3>Q z&9e73M&Qciu7uQ7B?UHRyAAI<2t0y+;$tQWWBY_m6I>i!36R8YJY2XeJ({}(FMW2Q zjm6b9qA-kw?XNC1KFPJjIWT8=TdZjUcu|qGA>kA(M-C-g`ei0H5@!QjU0btdDeYz~ z-71W=m{z~#-Xdf+_#W5n(i^Z>H>e@7EnfI>o%hHO+=N1Lp@<;~a9iP!r<2khHpEq4 z%^l>PHKZ~O?N49uTHfj|EVFD{T4;(69IgVF$~(m7sfslU&`0c{Q1hY+WVX44?I2&p zJ}jeb&Hza|^ z|41s?c9DY;Gh|?({h;6_o-Vl}u|f;@g2H|tnkdFlK~XVhxIdT*T1%55Kf%m;6LTuD zIP#)gz2ClnA5Hctygnc64$SvbW)E=@hnUO_OYg^Nj*DeIS{nGdRpkw882`}tc^$5B zzccmMJYqpTFvzYy2$49ma1X^1qOoh>4MvE7p z-Rwgl{qU@z8if4|pkV4nuF1m(54zy}z5H^m#4C}og=_C7L}DrDRqJ8vzqYc^d3Be@ zlX<1$Z6@z03%j#8Y(3|0*v&;Go->XvsfERRkJtfdjPApL+6%>ph-o<~PjO3sj(PJJ z#GU!2C4XZr8%8XiAR}BhGDrijZf~!i50*NW`gKDbO7IK%4;RkT;ln|PWV(?Q2jW3O zy?)U%E;fr4;O77=+%Tf^qA;w6_OXCB{s#bO)~5)|53kOo7Y@ex2}F+krBn&uaD2#YRMKii%wRlD0_{M$LfYDaQw4C6RgxcOmLwxuB?)0pqyQ zTq=?`NA=p{r`4)*8Hx)&q}y%nWM<(=ZYm2-6v$s+q0N^`#0&xSLx+ZhZC+gBuw?Ei zVZ@2UMDO3o-v%G}=)-Pr zhqU@oqYT-o>q5&B3E3~Bw$UcPeK$Auw`?_bR;zozOG*R_b-}r9tDAXkspaFCl~xqX z(>_&x!4m-5ET}g$vHT{AVZH)GR?+7Xw{MXE+dsRkAo;N?;7*U=9#^Vh=L+B)W#`JAN} zTeA^1hA9DOCoN>|u1iOdU%2(n93sOVydbQrwqZ9~b!h_9*~8ejQa zhwkz%goy;;Q@fgl%}t^Fl~fH8cEBHr@0+6RtpQ(r(jN@~1~NB#Y1{Dr0u{ zp7QZH=YFciF}0VQ7;7JFfMk4a{Cs5>XEDmct&|4PE&MteE*Z&);>z;xMiMoJ6@-c4 zwJXEQOf1v~YB##+%r09=$DshgE)r5`O~%EE@QY?-=C!pwq*qc=f$-YrrzOL5f9_jH z;?QwD=aV!z%mc+M!QrMyO&?P9T&ewt`_N{bA%GjHukviT zuc?pbMa`1rep*k+afU3jdpZ!S1MV++PP8T;EywjCZ%hma$*r{YF4M2uO|I%D= ziiy0I`Mv0iaBJ3)P62jf6HtuD)fSl2A7hoGKWAUjNA;!)fv=-cjb;9q$b=A!?!~z_ zqU>Y8jh6#S$(Aph?`SmWbyuU4H*3Zj^88D|VuRaS&Qj5Oy6N?b*JFgaQXg_D@dtq~ zL1M0-7CGA#kZAmb39c26{A=*Di_R~qv^k;5^E0n(a_MOJ1e_nzFrf%V9Jp0Cp(QDx?PG?mXMbw99)!hF#BWpG?+PJnGd{5C!1F9KYyEiyk*Y5$RL^s;4u0zy{C8 z)!dyS7cSiQ{nk@4Iy8A<7n|w|y2H%@?ti?14Oga|Y2sdzX>QwCbMHNDVm-`SJyW|> zIB#=$U%$;y)SCzIzW%Vo$`4zMrm5^H$_l&wdO&!sA(nRr3?A69TbDC|Z$GHb^>-h? zruDt2GqS_?_w%snmbyCb_s(?vfT`}bU)SJ9u#fs%FD0cCpcN@4YNoVys z6M+^DXli{uhwJZAiKqWuMp-u%U=2IZ`q; z1{jS9bJ~!>502On^7qOypIiS?nSbGCqb0bS7{ zyyf`d#NdEr41_j_5Lc;~s_-aq3YH^77SkNLPDs?)n;%i5lIMbOZQV-;6%bhl`E3Pa zk!TO_jLGFgS~<>Bnw9U2wHWnc1{ovpX&ir#{)eq$m&rq1eqxLf|m!TrJ)rw+E(REIU>ULruo zrtjal{!nTYPtSDK?{Och0p3yN#S@h3HbWal>iX9oKRTn#sOctz4CK!9qXZN}kz*dQ zaX6Vh#KVaknuuYMesKTRiUH0S*p_%1ksV?l;EP8g!eMH&Y?&0MKtWP^Vl9KL-i{%H zN;SaGZ!2&pU1Jj$t~0Qg4oG-JJi&dZ(+(@w0(7QS)tZx!{li6r{F};JTSq4-G}LZY zyoej2KWQ-~m@@|B3Y7DFh6@lH$GI*#b@bWGFFrt@>4BQDY)_s}%f>DDyen;epn6fo zTtCwwx2jCcs!Ue<68rrxt{gEpn3|47Yydbk9!VqF?6jI_Pa5Pqd|Q zt(g$r>HtGfig3bzErokJuA!&Ilum~lre|Fj2i$cA$KF9oStEW-N?Q7R?@hu>hY?CI<6#lMU{W)5a2Nol zSrr4YCKJvfIcRc>O-<{$B+QG+onATV4wC6w`uvzplxo!P%O^-(wqc>5J3y50b82N5 zg6})yw#~@M7*|NTt0;JhR539#du+Av`{uD`)iBGP_IH zW2z0WUvDVMBSAePQYO5Ti+G<9BocQ|JDWmhFM=&V05G3sG>}whOenTG3t6NRnz+CDASIoJwA6ZfwcY4+;qZ;+26IFKllk z+hyhlvRyJ*dFL_-i^BFMQ3Un%8S+DMCfo~IP7;xG#Nf)A>RYQasijNtjLXe)RUOcO zv>E!WD5G@Hg_IRZUOgIjfA(&Y+5R!H2e#eIvd!C_{dsqtI;C2rI~QxG7@QlK@@rhU zZ|I9*Iqv*rN=%pIdw2hpGRgM*tnkLKP)75-57NW&bQB7!`{$5^6(VN)lj6<1Y05ekU(!}1#oYMjJX z-C^1l^U#G7g+#-dhVc_IqOg(&*fi ziduhH$1}J(H}U#bGrntkjLm;0xBYU@|7ZaY3Bx4SLYfWNk?-~ECrK(4 z={L}?fG`|FQW{9axlFQGvyVMQ^DLv61T*CIM4ThholrG2v%R527!|x6%M|R^^A|5x zrdzD*gCm8>eD`ElAxwbk%~#k(1jv;W5LLTOO9V%Pw`5-CEr^xC3m1egK700TeGV@E zKoS-JJ(fL{)H+E7MD%z--Z`Q73=A6sVJnK#t5>~+?j~sl97Ofgmzl*FsB zq<`i7e8ZYE*|I8Qa5MB^SPI-#SvV|QKV#7>iUO4TRn9O#l9sqaK_|hz zq{9ZKTZ--`QDl$9O^a77qZQHn|6;VRyt<#JC< zSDft)0A?k?0JjbQP{&RW9i6DQBvdA0-jeW8QBj}LYfriX1=+-^w2W%4`Ay50@w!`3 zpHVp=hm=5&lfyH0Jx_;*?*ILJ1Gg0+V|68K3sWUxfy@?b;X$Pqgs>*rx_8^y=RSgrTOq%rO(D-&E zeT^RmOj7xr{j)smS+zgDLuE!~6kp{;W@s>UhX3D1snAEVT1Sl{$6-F!B#w%yrlyNF zE_<9BaP};-#}cTMB|RS&9Bdb^S;p5(%`EAgP{Mb}z238@u|PX05Fr(X29{)+2JO}h zPxDv1VG{`CWy3(=GSMpAa`?^~YeQ>bKycIsPTphU7@;6CUaox@i96ZZRqLV-nFTLG zGs?^FlEVfnpCOHn^&wJ8%#fT}VkLadsw}725DLB9`~KcP4VQ7P4K}#e#y8`N-TV+1lQ3^QJ)irJd!?az<>d)vT0MNZo#F%k09`7iOASWY8TW7k`4oq zN##qhxp-|j%41?=>;RxD&``kn^Lr4h)l8g|bV}Ki78Wvm3%K@eUf$HXb6;uvoV19A z4%ZkF?uU#;-efyK1ddn8la%)8}Rl`@S`{ zV&A@FPdDAkIDUP~^3k)rtSLWCW`0xBu{(NEA@SpyHEUv`XDr(59DO3}^6BfLjwd7Q z?<{CD=xk}|<<0FK4|>jDmy)MtYOulW%Y%*WEnjNY>(H|_{jd4I$>XurOMmvP2s6O| zbIYkyN8%*gwg}AJ|5H9f4LonPXo2z&4J|df!&sQbWrK&u6{zJia*nLA8}*ZUgp7|E zpa6QxG8kZvE$&eLZ-lHAk;$y9y^&tr?daHX<8t9!$}BM612E23N}%OgI(uDd)~>Vn z;)g{rL#=baevwI5)f9BIsS?Sq%vDOKj$Lp^FX362p_TP+1h)LD(>~{#&9iqCW2j$U zPfcHDGVE$at#L-G?1Y$CuU+H+b}a8$UE2QtDA&5pCVHQ%kYIK8iN(t)23_Dxw0xHN zy*Hf}WKy?&eTc-$ryHu=Xv+AT^r20wzmjh%{&SE|OR5aD3V`?f^J_Witni9Z^JE-F z!7kZT7*CtJjPvh6pAU!8&-Qt5RQw9KL$l~6<>&|6894Jg%{O-ki3*Q@GV)TD6G*0C zbGADVxJ}^&>*Hv8XZ2v(3A%Fy7qTHC>ZI`Emojl+2WR-JS0~Z>5QkmvlT2SZlpm-_ zDXVA$sx%frRDn`u5i*DLff_aM-}A}absA7QR9tm62x?-LDj*YCp4{upX6jJM$In`o z+(YJ2Vgcl&yeA_!STJ7L(b3&-w{l^C641-;muPeZxYIc@PCEgD@ZUMcILu+)B#TZt z*{GM%FA_D;w819uMe#Z^xRX9<(4awN_j07rzlb%L?^%4hDk_p#N>W~IY+F7z+|9t3 zYg&Ms!$Hd6M6xYKp^k76h**hqZMsuOS}7(Rcfq`g;_nSpzGw`1uL#^oH%1H4rC+}m z6x4hlG8da~nj4hXm%Eng>vz?ZowE$7lK@uk-80xXt`qNrBJdG!>f@(R^!w+)pc`$pb3k`tRGPY6|>778*d2{jLcv7D!JmqLYNGnDBLKrXFXwGw}(y?rX=g%Ed8 z`GT!MSt#grS;OLj@s#3~JC?GF@SW+iXYa)+42#PVYw_fkR`sf`{QcBWak}tdOr^X* zR4n>T*lP}3fd{zzIcFfkBA2&kNC?Nd%p&Tch9(oa&In0X!_G=3xZE&;$#J75J$Rtm zvEx>TvVN75C@{OalQiUg5Z5ozpNh&ZteTMJG@qb7NZ=G9aWKaPB~*fKNCpz7WLQkV z5pjKS@PO;=z+WNpMr;tt$U=4T4JE4-^fKNL&wZN_n+8dK5o~Lu$Hpgy1LdoR5+Pxt z9_R&u5L`kJ5NKi}m9Lu+4g3cfp2T)5mMnyV68MSCh`3f+-uPN|Cundm3n{}?GUOOc zfJ`N+!HYi-3&q8Y%!X_)$%Bl|OMvL0G3kUHlk-u=e>`DSGFfXQ!D+Y#Wv&_*D@eU4 zyl`jF2S^kL1}z(220^k|=Nug1Gg~-CsPshnM|;H_vING=(!+OT&4YAGOg1CNlCaR! z(FexF6KwOf-O?SSwt!bM(KF4)Ils%F9?js0;mhah3`vs!0ydf?!myH|)$8>&D9buG08B(`zYSS=+SB5K$Vgpl^e)SSlJX>Fa~s7(6G)9$17l_!6G}d2TGPM zc`6bRx(4x~LB%Zd-;5FgYfx{@BQm!4HkCQ$O9XQUL~z%(ZCe=*ElUVX8{q3|qSr+$ zEXqha1_gd&r*~>9c8teny4am6sI%9e*pvFi9h!SmP#sLt~T| z;5pak;Yk$1i|IH-Nh?1}f2!s}i!H%^f1F-?ANJvv94qF)POQc^Y@^Cs-^JHOT4TGX zdhORTfkmirHWWzU8?1h8Z22E#A6Qx%L6h>R6vSgE!w2bNW!xqO;POlhgDD(|=tC&s zj~E0jAF=(!2?h#&-jgtR=ujCq1C(!T*(=&y=G)?jfCuDUk4@SfVix@A09Y0kS{6-; z!tvo7k0L1MbYQ?rK5oEHy1L5DyUfflnm-jVQ0ycN|1gM@iL<){U-BJOF3JN{;2ZD< zL#7Po#AL0#VP7i#q?sGU+i24U$)_KC3zVYg+}MVaO3JT11OBGCARdeopzkJ9THsLr zHP8id%o&=AxH#Xuc|$CD2Qjf_WXxivLSM0Kd*jp>e;a`j)U(mLAdqf5w{yJE9&SMm z$R$70K#5Q+T#zN43Q!R_VB%D5Xnv<~&ha(*2L`&H zKd(*0eTx&x71bDR^o*vVD7FR-8A9^=lG$fXw51E-%#fF4V6x_~wCZ}?H_e7Rj(G}4 zU`=;YJn|(Y(DdhsK*^ZcrV4hS!gkBVCYj}Yc_1Buj1#++GLsPp-wue1hlsPzxChj^MqFdHpc(2=`D zJ`txK>P$HkyL73C2my>l^v(Wio6-FsC_zAh0 z@Q&AS0!-Pzok=D!Fkkj`dF|LBR=_+G>~0Dcoe&?Qbg zi3DZgviOMIP=ZDR9-6%EZBD+(bYa9eRl<94ONxm=a)?=UpgS3Fuk$i_z^$EVx@D## zvJ{ezI#PE~OJA6Mc|SS@$+`Is8!g^o&XFXJ(9sY~a+F9?DOV`wPp~-=S1`8VEvhY< zoRIgz`jq$<s!UcZL7pi)pE>ETE5&fH~*RRifS4orU$%&wcbssrQD*uJwD3{5v;2u-D5U79-jMbm(5aQW22HaGUx? z1_O_H_WJefmo>^o(o-^zB48+j)Y5hIcU+pCT%Bu#xk2$~HWMsNO-*O0XXiOsI31sH z^+ko_?EY!Go}SJDr+TRnwa&Js!lG!d4*lKiG-A{H^n39cR`KPnohEt39~oAIH#_gw zjIZ;}TDyDqw{p#VbtuU8uGh=*dTheFZiFpwOZTs|5bBhw-r`H|KmCkf;YodBd|2n9 zLHj1Pzgh!$jVh1uUV6GZ^B$R8w*DW5Y=@hs|K<17{v#hAHD|zoQtg_}F#I2WG-_NU zi6>Gb!=~6Z;1G2^Yrp7R+B!h5i=;SkUw%KARyso$gvt(ON1^)88bqVX(j)p%G0oJ~ zE3P#rOhBT183py(yG|Xrw}v1qDbt>XMMOrvVLw^(tPz;!4E%I$Rh|L8#_tAWe-;7> zz~a0d;3-iqoL;UB!OUS1ck0pOlXvnTaKG(&RO#J)=t(#Sq3jr-I}Yg;^)p2(9$^YF zED~a$mQ)#j9e=<*Rn45jsS*s^j;ZRTX0#N1f*T6zx;h=n&|5w@)g56+<3@^g5~5b} z&jlc)fFHc}V{5k9YltZ*vsJ0XfAyw9p)29MX$tcsN?PDVF6VKax?)m6Py?Fxkb9j< zOIiia3(TkT-ncR+ptARGEuI3IgaRtXOT)Q|kV(>YIc+(5rM1kJqK}&XHY^WE?Mf+| z(UBrV5A5RmeVB}CqLEtrt9C}t*j^s zMhy%Kk|-E7k9B}bdAc`9Sr+`7cL$q|^XxXE2;;eSAorvJ#a~OZtkf?GQiy_LimRM! zo<>z4URN4qejzrQ+7c`v$g0c*0-~nr8hP$XA5_IGoN;_;{9c;}A<=cuSCN^?JZk<*YCj+6Z_PA;001`??!K}QsWRNC%nEWD}U zQIJXBOu;9|uV{k_9|(7@ayq&B=S+$W)mvXFMx|Uf3!O8OcL<#&S~O1m-b9OwDQ;Sj zG`mz6uL0qBO$5=J#B_;_3Wer$3yT!^u;p>RX`J9$Wqt;4=MEBNQ3=T$Q`*$@xf|VR zWL7~K=(^rv0nwOzg=ENhFdBg{61QBb0R^UHlyzmfBR#1629c;yGs=PmvAal2KFxN} z`ST0t;UsX0-+};s5}$nL)ivGtE*H|LKTS{nE}w}sK#4;Vy`HEB8aM99V5xH_H|*iY zI*uq>hDPwLCd2%4{ce=`1V|@9uCFEZftKQxZpdAWSt#_ALCvmrZuDVp+y)u8F0D0y zy4c!)rA0@I+h1O);H*zWVu{HdkoW-#GB6Yw?`#uQ!~+IxcOrQSw&X4pWr7vdztg%U;_w75?wGS2)C6%o{@i;^mfqRQY!N+ zH!+rovCORMrsYQ#N^Bz@A|$L!GoyPTCxBFo9jVSWLbpzU5w9lc3Q$u*Hc1W`5_+VO zpiirWHE7n%rJCO5&K^B>Y(4fONP%TUgc2|{f(3d56wk7FXlZ4zITav833eROD9{DT z>BZ6QZ=!wW^-eVz1kI$$)6P|uh-JO6eZIOEO`??L!NKHOJk%|JPvN48*$Rn*bgEsA zZl|Yv(h3OT?&?~726yOCE4cXFxhw%?sKLk~uRpvIYq~Szyd?O~h0{`wC5743Ugzc} za{52dS?^)cWmd?upW~}9!19V9MjqR#J)Tbg!$MM9zA$PQ{aX1K=c+e6@rWK_!NE6R zBN%s(`FRzp@pGICGC!Mxs4w#TOt-4kdUfkEksNGG_#g9uuuhCLNTJ;qbqb1Hq)L?e z4CYF@+N*dC1-;}p>V(B^MLw_~qW|FS1^H#~^70}`o*=cf7RTRwKv^NfI9eqaPR?Hw zZBzfNJ(QbJaueAQ2T10)Xi*o2s3KtH;1ks>a*gQdOXl6V#T2mP6B5SE@5LMu(M38s zI;bXil+!?S&YiP%zw?*ztXYj+huZdvm!Zq{PkN(?H89M8Fy0<}M^{}>L__m2Zawz_~7 zfb(PT*RLzkno-6Y`TN|Xe`dsO$>oidn@LjO23X|5W4ZO$?ZZ zpHsj(m=?nkDN_s$Wk@>W&%eQ!fF-E5G4jehJj?(vM!6v6w-XXxtEdG)Y0`bLI3!e? zLYMpR`3566IRuZcJs!y=IBZy3pbE-tehmQ=UK}^f9LWyc#71V#ikBD*fS3>=9}Nu^ zA#0HGpxp2F@#Dw$M3M8iKMK>8AS1Z0wqcs1NVn#ahLDwS9LNF5fZP60j|cbln#}i* ztenbgyhn8`y5ZYu_TsSPS4ylNhqh{G6>uX779#IQOcLOL=uG3E@BC8=Pi)n;ZESb2 zL+DCCQmaBkP=6tPWZa7INVHJ!cVa$4x+WR;KubKF1j>4-VRWrB*^31(j%LnEd3jd! zMRLQrB?i+Kphq9sj5nvrjU)&VY8zyHw>f%|y1{@SBBMfF1Dp_|jg_29_Bw4i1BEA| ze?^@lLStNzpq?^9joIKbja!gfARSU6CqizK5aFiTgvy=cPTY84SHvEzzM(jgr`0Zliq%>T)+2|G&A6;!_s$`MBKb(b>W0&p$`VAK7#_ z;*bE&Z-~O)_OD_!-5a~hrlovF*iG=PZwTMmGOWK}f zcV|qR5DU+_f5YsqQPqsgocKMxvx5phPStF$=NL# z)w=*mxTKTSyukn1MEsBahSQAN4B#8b?(^>A0yNEa>%F*J;Rf0Re?BFLxB?60Sl>nW z9QJ?6a06ft3=I5lt1%Ui321C=E6Akp;`^;(CM9kW zB@x7XW=dqz!bFb$nO@`k$$7?~O2q*oj{2bSjzqJc0ULUHtPZjxe|lOFh^wDjFo06@ zhMt>W{LWu#nH2D;XLeQ5b4qd&hZw4T>lmcY*C#VVNGX&8h<5wj*|R&*<4MN9!t8Rx zsQdt{tJ8dz_E)7`V36n9eV#w32bl;5zskd4(QNDfs^FJ2c6c-d)Xs`SU!7gLHVCHvS%?p25N?d(TO4szsCvsiv@kX1S2ELzXP#AC<^cs`tEAy2kL`Ctqw&5h8J<8 z5oGC>`<@(LEC|?weVHUleS&2<7IBY^_m%^S5_|>KnM6^L1U7}55`+PYTFHA-)SCI4-{oUtf-Z)#%yy)NY*c z;`rzJ3yeu-D2Id$#{{>43Ijx5`{k7z#fO-ufU5nm7>pb%7#ClVSUlK&ay)YYvs40? z`*61-nGyOBwJVaB7tesk+<-SIS8s_04Ph6067hdhdSL!fqP~)Zbcw&ieKZeB)a|eJ zNHJp3kcfYYM2yGJ${vY3REEZY=!?~igfL_jGDSrsYiJo378*`ugcsQk+zE0gDR5Is zk1Izuc=B67_Om#5`Fw;XKW8|GOuZ@l7#T~)!)@r#0A4CuK+P)hwo!P3@g@R_CQu&M zLeF4LlQQhb!_hJdnZ26x?%i!5Z2)avZpFvveYkVS5nabBqkeA$RLv8mQkMxnBHp5A z7Cr)L8;ToR2;n&(HVJfyijpz(LY2_NOE?;B)DuW-lISD_GH%2Z(}X1tZZ`_zEW?vU-Ho;&B1*8@b+={dq>MfD-{j;Tx zVswKE3?ro4qo)(jw3EL|d1AmHI`*%pzhKT%II=HTt#mnDcRu@kVQXkmp;YKPLwd~Q@}tVh$;r_N z`GMh*Ok|pY?@y;2O|`Ia!=F-9uCv>vI_9ss(&cfU!#8b+yFStaP)$Cjv9bJu21@Pf zF6p1|i;M`ZamKqb0%}0CUz~rV{!XR#Q`W2@Cp-CfiN_C zi(iBTRKhX&Wb#;;Eu8rbaSoNNFfm+h_V!=KEusSbhHaHO2FbMhybUq9$n zBSHpB66wXDS$U5*I_8xYKI^po<{y8{^~6kWI5(yj&1ScF+xjQlUu@B$ zg`5W>(FAacU(uMl`!5+hBAP*}V{GQ>F|Lopz!5ty@xY*$Z&T)}yg zk3RoPuV;@Ww=n`(7C(xDZHv?zrJmmSSWw(ciYIT@iQWuui7JpLp>f>Y19YMM6tY;(A`I>b7yqK0 zrpJbQz~%V($&*^VGm?Fp(kqMZncqYctsi8OV_NX9**pW5$i;Dg8E8A zjmT9g$GO5_U)T&Lrl!aX_D2%?-EAW!3gn{XrgPCVFcC!^n+i<_fYrs~og7G+CqM7n zzI`4Q5O*7;6_^qsf}>IY!9}w#m^$=W>j58^)=8^pPdeZ&oGLh#h1f$2%;m^9RIDvs zH8d1>WIR<+14=-#qVl0w3wT_3MUK0Fn8byoxoK0H^4&Z&_As@uL^|;+75E1TB6$0c z2m!??!1o8dkkS0Ss8F)9h{Jv@J#f+6B*W;9?33NvE^V z|4Z5@009T$lO;o~t*xol_6sgDlj0B-@}lAsQ2C~tfB$$Lai`t2cQKW2yyq)i|03b8 zna)GmKzx@ z)nu?J6h8SN9h6Mr4E{ME94vUOP}|&fyk!5YyVtH+^OjK`^9j`Cq8w2Z1p?xez;qjq zNi>%Q^~*R1R)gRQe$5$~Dm5Ms#nL=aN~K3ss6b}}vsTmra^6HufdoLInY~btss<#C;CoTTfDPBE zns-bKx)fCaSVAy=4!jeElZ0st(tx*1j28HMB#e!^9p94}@ko3*8y?<_#*6Q@AT3yh zYgHWAh}y*dr_T<>-XL?c4NtDFQ3Iy>#tLHIu;D+TJ;1DD(?VcISxk)XF}`>qPZUIc zAgD5N=m?Dv1hCzC^-Bz{q_3bH@zQf10n}w^7HF(RwATpk;CCQY=QziisxkXZ^@t_j z+d-CUZ)VVe1bU6wJVfRr@Q1W!94uqNRzW-P3uH7u0Nv*U=`ReC+}2NR9Jc*t$Sh}o zXdbwksRj=WD{9CirlXWetKg7J_C`UIpvi1l((TYO_#XfkHT7R;ghY!*@dU6w@ck8O_utM3)8p1`gNXw?d_M|404T0xNdQ6GC5hW%=`uN# zcK8a8f@9Naf-*1{%qi&#poWn_G1LqS5&MBNk3bC7?d=b zc8XRS4Fo$$L~6u06J=5l^BSRP954W&G8dHVUg(y=NU(Wo;*f!=0`FwK2$al?E8-vQ zdV&>d4`WLTlE}gRmKFY%;-7Cd^EYw~XwOE9inks-*e^&SB@6FY@&KqT=7Y*ownQ>q zjHkVO|Ne30B)~r{;3DN~p?C$klF`-hAhvmGP3v>lAtKKO3l@Vaf(inY_JS#bIg{75 zs^sf@Hj;U?Z5z>9@l!G$Ma(x|UU&i}mL2TY-&jj#v6ud+iddJua;in?n<~q7s!ike zobIUGY|PY_E$iO;OIv&E%jYcys=8^a8fFbp(|cii*ll;vftD5nu1-zAsk|{v!*tgB zX=6t2G5FH&*RNfA`D%I-7jA#ycI{NzreP(cTc;l1nA#(M^9K;lOP3^wkx&FFa4D_u zj_d?|y@){oHKWTekHYa|rZOT>4MB~CeKNQSDO8C!Z*E6fLoc_TrFHxEZICIDav+gA zNlA@dxFp<9oG_#T zeD|1+hbDARtv%Mts#8izimTs*>C;>A26-vQb?d`UZq*21_hs&wsb_qBw{WVs+}WU5 zcjP=aVgCUGR#yC$G^X(I@RF2X%kAuLXJwT~H109%_~bZrO#(JEaETs|!AcqpYa1FG zUQJa~Q=@tEPo6$$Qj@J3^K5MH0Z!Z`oUe&}Z7OPr>*{JZY!*Nu#|9@<3lDjoK8 z1h6)rJ-cwkvib8za)j~^moFDF7%ekz8Icxv6OZQogGr-D*Wv9`F#S!Tz-Qq_F;Y+^ zIu~z}tAaEt@UR_Pd$?UmCAopDkg{)qoD!a%k&fRNqdvIHa+laXVN(&3tzS?pd0}5w zH8t|WA5}bf_UveUd0wx!Xg0xaguyom*zhs7{P>|mf3qNXHC0trPJW2jOtdAZ&nicEl4m`wxlSp?6 z=#TrWwvx`P1GRT?x!k{hpUN26=`pM*!feiHq`{>#bo{=qh}|TiD>FhDvQwasimMil z)1|O*JbU7t!JK_ z%Iq2xpPAclj!T~P=wsRcaM~}6cm)Tc;S)F>LMqTcgr#z=v-R^RU5pG zn~01_$56o`;xxSgFH?|h0#w2Q2Bb^s)9XN(t2BeLA|8gwmYRbFGE z*eff_=t1B|6={iM)_?0b(Ee3t;8eP_!({PL*8zLoq}C@mXX@ELt>n;lj68*p!l4&et zVa%q|zNkh{1F`aL%A@DRp~yw;j-YxZcNI4`Hj7rvmMtUIXm1TfLBR70{ z^nx(s@IGUGjiEz^v3}{}Bkclb(y4Lp(n)Xujx;fO8a8(c9bn1Erk%be8tuHc;nd99 z<>M48e%ySfCr4iMiE4M>_AO6ra54WMy)$EtI~$G7(F@-R{x6pxr|vxb3X_lZmPvW+ z;i`?+hDB;J!o>Tl;>YJPUm{+eshU#zZqrNS{R4MY{r=vC-+4HD+o*2V#d>o!)=Y7| zWP9yxkk+iK37N;dy)QyKbH6&o>vZb|Xs;MQSVi9wbOJ8F9|MW0z-Lma+1FRHkNsAk z#h+Gjjan?e;*&kC`(+)aKj(Dwq^hx17ZpS!NXP#^BG2Gd|3f89X>7iuJ1i)EQT?Z- z^%<)fG|=3=W_|O^+pO@o@M^AT{os_qV5_5Z0l*6?rk9S2x^r3cp142h#f9S*sMG@vBO+(!; zx!N8cY4P2aL{dZzbKsM1&;J|_Uw-y_x%=vHdTq9rgp)+gQgn%m8bBQ@J{%G`xX2ZH z4;*OCuL19qL@GcPW385KeCE3wvM!OE3c7`oh(2f(f`Rv(UlP%Wi5cvb!QV0?pm(1> zuhGaO3dV%%bm%fEE8xKN^fyRrgz{!QOjy}9j>Lq71YU@o=KB!*a7ltv(;D#&iU>-Y z0BQy5F#LXZsr~>qI|D<=*^zZc0!}Gj9Y2l6F(`a*WMp_#z1!N_3WWme!43Vouu$?Tm)hFCE&2B5KtLvjbIHDx zh=b5jrw>I(|E#QX>-Cx&H7crs1345b>+0&(fXs>fHW1F# zuycrrWQj#My}=o(@LNJ8mOx)!fZ@9l4$kx=@B#l9~|t4I()ckSy_Zw zR24v2v_hgh0&k+uXz1eQ)rO{u_uq%iEL6)f(M94cxUEo84?lVi?}Uh*AsfhwaQ;}f zu&>wW@zv)STlUl!uM24o1&`}d#~|;05n;dPO?R>25Z7oFY8gL;l9N+V1CSc95H-NcwQITc+Jk0s zl{pP?hVPIPi0Vx+1WxI8O*AMFWG6uHKhMm3!?Zb#hIbeC6-y0sPXuV55jy8JD?~c! zhFe{D?6CKuSmGQk++XahwAW_oQjt+$*adJ~YG+rOvO35tSolVwm38UoMr*nsI&$*k zH{1Vc0gl|1usTGC03ad);L2FAY}sCT`U@AD_UqSAzJrK}`D{5l7+7DqglIq^wQ^p! zJt8VOuB=tXA50-U)?|M|Nk~apiuuivB!SFL!~b(8o>WhL+e|ZH+QikX`_aCGHFAMz zYHEss_x-~Tl!v9L&9t<&6PXl*6B9;djw!$g4`HSP%rYpX`NP351$&Jn0a z5J=#l^a?{wcj`-h1~UU298lc$+wmWIBLg@L{@NP6hsKKs!*?WBBd!g+A)p*2qACG+E1!{n#aZOIhx9q2rN%X zPyZFMhVF)Hox^$;t@>K^U4O37w=XmrRF-eF&UFs1VJRWQ<}F@4j(8bRQXvl{Je-_e zP~#Ys37{+!5ALR<5OA$Hd-iN8jF5j3)xhbN3ylFC6BrT_5FM?|d*cGS zK}9J<8{ok$mLbj;U`|@>-(xFLRfr7%GW870Urd1)AqG-H;~* z*CygKHulSJ$cEmfo-*QK;}hrZYVVZ8`6)FG2nJgmWo%2OPC^f}yh8tzH&v9NM5jBGiU6o>~vexTwS{rk71 zct_(S&QBs6=p6b$@r;@JmID23M8wqeC&)aL2z(-t;bHOD^5eW-WxE>_V!yg?2|H?i zNFo03O(Wtg>u;*Aomy|5-1A1SO&S~jDt|LW#qH1pr@byFqf0I5OdnzcqyPhk7G?xm zeB{6j1@S2Wf#xl)Z&6qKRbkWXuCq$5rURDFd79{4QF@rwp7dp;?~%yg?RzyF()F#% z=!;zrcXiav*B_=c+0f9DoDf7BPb)s-pBKf#fv69ccTCo_;tZk%U6KDl9p!JSPXdLY z8XAdHpR+;Vg)#qs6njq&*LLm7^Ubq&F3Yr13s@SJVcFd@LzyN-0805!h|^lc1@U)p zI4?8W@$YKWtk*1Ly|VU))KTsJE%(-sn=xPB`JawoGpNC+BKuD6$;N?iT{EhFPE6Q& zd<>C#hh|mZE_J4BwTi#8Fm6my=V=NZN-sC7TPyWZXzb(F1ugW>nFTxeWVP8E5YWZc z!=wI8o5{Y$^K5PT%sN9HgHrr=Sy~xZ)!69a;M@Z5ugrNMV{j=7uOJ`4_I>f)RV&u45yDc!oj(0#UTqNq9IsDx0!55!hHa?Yi<*hOXGZvMfZIXhtoEbxu?=r9ZXsXe&IZy(vqqmiucg^ z=JM?8FXt^9LNYQ}WL3!>y^Iq_eY2ZTCy?g59ntyavbcG7R~<~wvwd-K2TSz;c$VI` zNHkRQ+_Vl?4L#GYA>Um!jT@Sl%0qsbm1TRd!8NnswBp6BJI3)0xnMz4maJPeUDF-7 zVTp}RUvv9pf2-y8i>CV;zc>5ccg&Xwt5-)R?4RCp?8}v^9bML&oON?^tKUeYzp7h8 z=)loOM_XC>_q5*`7&GF-)V^!HRQ)c#;AO(CNnGsnzTexKJsNmTK6_26X~nRC8;iaU#oR=Tke0( z*}mppudX^I&%3drspF^GS=ZJn?MUn$raQHz;)b~4|Es+>f9pAa!@uoPD3pClAxqZC zk{VKkBq~Z2N_M44t0h~qh0uheh)E(8%0#Jz29ZQ6M6_565nArYWj^=)2i(W^$L}1+ z=W~p~yL!Ez&ucl)^E$7Xk{&y>h}}MVpG(uSzk?=~IhloC3E(4X1aQLb`o4?fZTH*v z?;o1wcAz$ElJQ@?9;iAwImO$>rrvV2qdhts3EVjZ9@W<7JjWflsfF*pE}w1NgdRd| zT|J=7Ce1HQA|j(|;k)3-kt1LLPH~En5qoB82QLsT=Vbv3(>z}%g>3_@$iq{$huLP_ z+3W3lC@U2y%>3j%^PhfMv~Xdw&gY^E_5wnc(1>+=FRy;c*D({devIz7aqs^ZM0|q3 z`SYv&i+5Q@n?zaG6+Pou4HIW!E4Tm5{)Wy(j(xR9JW#}^q@=tU)2)3|_qA)ahYZP{ zKez$12d(@3z4755kj^q}al>;&uLpgN?=ALz;sNtDwyw;Aj-bl`^M0N8)#}{wAKOqA zx_6Q~cs-*6?hWLnpn)!nG}<=(f;~OHFs3IS#$TKI;ll@E&_w$Ri3_2>HmXlZ*1kInTO{7+CQ!nV z6nlnbVKuPQ#s}4gY?17V#RFB++QJz3#O~m{1IW%JmTIWq&%#FHLsBQwAkYK)k*`A=H>&1@+T9nX=w-F zLCY-~HITivQPlxsYyD*k=|jHW<`vVO0rg?w00Sj!#cZ;*w%!sL*oxt(?!ze0%KDrO?ZiJ#*rHj=BiPE%<{KXr3gmth2bCv=2p1JBvNi=|{1 zo`R`O;HMfCVEKM$X~Sf+lEQ``p^f`_Vv5-EaVz=`7_cHIaoC6vix5u;f`&LwW^eD^ zTj|;K4$2;YvNj-L1k2OrOAX3@v}@*1i>6D+6UPVkHs)M792zR!7V-xLC8adldqnIb zG?oJ+15C@;g{)ayXcKf-6Awl-Lpa)8+$BbVGO1`pRzsar4&&X8<1_G1H6xw`EESvPXoW zv|%VJp4Z+KPSj$<&kpnwZ%J?;913NjEiIu)c%Og({iMn6#T$6!Kk|}qe&D| z=H6@8u6>K3XFM7VG`tP7(SdTYHAax(#6S-c9ntH5rsC~88IM?InJXDl;F zuyit+FAih?GN-3CRWGVwoa8k{X-YxCQEEgPJf>NGu4a86`?HO_iz}nU5Nc3L&rWpj z&B+vZdQe0v%jbT_h^dvCW9#?H&S81iVZKC6@$aX^4WKPXyT>w`Lwo?D2AE^-@(LFK zqTwS(d}fyjZH+W3MipENlO{kW(FF9?)O;1~qe)PKkg&D21^qB}aXB|=iAZPR zOja&ye&xc2SK@1jEKAyF7)jyof`am5nus!%Q^?t;OpbHRP-M#W0TqckO)Nw~)bZml zqnmaQojQ@FD?lMq8Gyg&vfu;+jC`7R&D{|&7QXYs<;x-*;6|46dHfz(AuvoG9dfHZ^(vb3e7Tx zLg=6@lDnTsOdKt~TY!90dJ)~@P-ww<97}SxRcS^n2YMH{O2`T$mHfv_;sD1N7NUm% zp0_~YGVTYt4W%2dpM2<0M{W#)9w*{SBOx#7OjtUfd+N#D#JPLG7XXyNa@|-xHA1-% zto$@H{tWH|g;X+Jj9L`U?{)LC#!^9XkV<`8r*KqntMTVlBo{o;sFNq(M2An_ z)I(ODfEb|oq;*qUy?QkbvN?D7h>yQU^AH%+o|wLafZ@Yjcxp%7)~(HH&rD)xUE;+y z;z2AWAm^NWz~oF`c5Zg|M)X$Hc$rX_Jd@;)=Yd#0BYYEQNM7$#cm*^O!YdE~M%ZiU zhPDPY6oENO8};>2Vy#SY(c^Vq@xw0AM6pM&8#+cRbQ0t|6e4U~!^%or9guRvt?YLw zgOR_)W?}kpe^QA^-Z;YyYqG*@7j!-(NeT45PlE2X-Bf0TGOZRJJ^9n!Ed+cD#o9894O%!0 zz^@~WNrW^4yU2j!dHVF}ta)*=KLYlY$3i4P_b98^DI;Zafdh?)#3P;Cl$hdYhn5FK zZW?itZ&x-8FeD$$Q;DPVCdd(deH`t`0K6HzzqZXCg!p0)0Pp9QsZEI*G{!RcM_fnb zeg3=Bb67ml@pF!cF?%Qrv-dFQC_?DVmoa&J9qls*#2N6INI~IypXo($Iipy5#~(`C z@h;flaPVUyY@xOdAQoZ`q}wJ;B~m7Vs+Z;Z!t!#`eaZqO+LyU#n_$3K<#rgE|yIS|mO2gWDr-ll7pPmsHzs_|rQ9 z?5kA=ZN3=QbU~7bl9`zqY8NxOE34-2GKNfa0+)MPTr3uhgjL9`&&);aKX&W^a8C7< ztn~C|V1wd1LUN+80#si8{i8jZpMJZyo?b%k8lv`^ym3rV;cL_j86tsIY+#5aixw?H zFn;C(xeDt}mvckD=)DEbFG$*U0>iLH|MtML3*n3d&OPPj<)F6G@nT)^ zCNS7lBVp>!$nET6NlR-AI1PApAwGT~L)l{MDmEUF&YbpBo*4-Yp%DwkFF;};)*R$^ zghINUZ2sEl^|e=v4%)yw-UIOw zavhL)Wi$pJFWm4DOFmy{nzw_@L3KifFH0z82BErI!W$Rgz^&~bOoo}tM+Ncm#SIH& zYm#;WDNaX4ZACo4`!v2;@n~S$qlEP6V>ozb ze>E|PfvlT*-7l2e#oLlqX!c2KQUN)kOUpctO@jnud}$Rg6LF5x=8=Fz#Gug-zo~+c9bjctt|^zzs^T2UUT*1dYNK*B289 zg@{7`@ZrOd`#XvZFH^3{sO_y=6KO?SDJ%CeGz>$(+i|eNR31vqgI-1|rReJ9=jV#a zmNN)6yu)`>Qi&)Wtct68IsbVi0y?w?RL-(Hju~R2vIqs`Km7aeE@t;0@e;u2=f}1A z)T_PM)qO|5_N=R&v*C?RRMg{Y* zsL0^}^ALMAjnhf9J7GQ}kpiI&;0s_2hYuu`kLKb5YXA(M9TX9p5 zwWZlc!c1mRn{1cAYCL{?czFTWX=*L}g9)Er_=#MQf#{rhv%tv2MDLiq=j>M)?2xo( za>3=5M@FGy;Mc2Hx0sNU!FRlUSwd3o7v}tXJ0!YKFz~C1D}DP`y9v)zg`+WWJ#}I+o=@7p|AjVu z&b?sEXw?^()>YBjilV*0y8fC;Ydm3-3Q1FQudR)(VIFrp#E|A{^W$g-4b^w*geG*jRW<^jM+(qD<;`wa3;&c`cO$! zp}$g#<&n}_R^iZ~a(Zg07Q(cd2>8wuz3h3pElkrarEoObnL>>@d8G7ieROxcTt+%xtR7&Ngn z0?-Ss*D$oXP-5T#+H|_iO`$WeSh(<{LyR3{Af4$Qu4N5|&j4?-Gn;Bi1c8WEqw;FL zkw~C}#eIfLE8Q#(5;D0(IU?)25R;;ao_Ago$(~F?v06}e$&iv{{u5M4WX8M&Toa_2 zINZ@-MZfq0qUsE* zAf@Y`pJdowC}mV(pf+0}yZJ|`lI}QLlZfN>PriHT*P6-z9VDVAG#%UNbG|@>UP4DM zrd;%*)!~ztIy+|&2N8{>P}&Ia#h@VLJNF?!CBxEuJi7KS_36{UC=6CJhG{Y*9j_2< zy!Imuqu!Z>LICrg^~Ign8>s-glM^YS=!;L2fhi8$%O3R>3k&{LhR;5iWW}D-(pG3f zKH|yqPDofds|4eM2e&0aj#uSIu1<$eole`tTnPwhNqLe~^%Dhw^pW6XyyQegX0$KR zy%Wy6qe7tvlAcVQfbJiSh>B`XSS1{%(;-nBK8oosDl_Utw4+#i^0iWlZHYWa`pCIg zSNU`0;(r>@P29YFTVaOkQ1CTqtlK5-ViODaaRH1bGgDlvlebyg&7NKMR;djnF2}R$=0*jqB#hoDDALknhJ`6 z0YWc5y@SHl!Xi^lN#Ta{r0QYQ15WrciVeY#fmCFg37Z4yt>`w{uaUdVVjBcI`je}PiImZk_~v*T zg60#fL<7dd``Xn}LHX19|F)xeRb_NSpK+SM&qKTfS;LojK;IL7r{sL^hG#-LTtmzX z5ZoNyKd*`2O$#-hY|aZ0Kli=!5A%kla07#3!2NvdlmxKK0Jbk*Iqes|wq8S6{y@XN=<znXU|=}M%G?Lo4!_r-w5qTEQvo3#>%&=u zJhQU4{+jMIv;RRrTr_|lX3y^v>nMIvMx_wiAMkiY%*-Lp(dmo5vGcvddi>e;|7raB z&nM7F|L5)~Ta!Q$UUtw42>RBC&;~FeWIOM~KVWAs0@ngZ$MHPB$rcu;FJGQ@-aYQ} z=?ZHgGyK?_(e(l6OIu6U?#+TWJ{M0qOlvk2r$J8Q zE$JVyeARc-FDF|XFb<~(V5#mOo7+D2Y!XFRLy7j-yv75e6iI;=IJs$8C|u-EoteZY zs!RL^OCt$T?+pSiptKilpF)-kzB|45`l_Cfc+drV<(0ZDK*gO zjmL|F9_JW{AfIwn*dsxr>|)rqvX^7)zI6e=75g@9fT$Vnu|zv?Agahe8wE(-eAKbRm05w&v!$U9L0lc*-H>CD#r^t`-bf@n^CJK7+Tt z3koOHIMekOXQv~M$0l3kQlr@w%U7eVvBc;Jdu^yds+0CADk+$(94mJ&q+J)xHEUkI zNWU9VH+P^;L26fSr@tZVMA1dr5YIq1D2*hc|Bb2;LQwu>V0B``xKK=RxyHRTaeWpa zi^#r$>acZGZz=W^9)rFwPNu}pm7sn3>|2U_vVHxHgx^swj_H;aF$`k=UobF zNJDnbeh55RZn|>>@t7geNTnW-uwsi!H~U*YID57@{U`U2MH$^6m5pFv_?r!NzN;!@ z2_Pi&I7unBe4{=GjXA@}?zEYW0c*2&mHnV1zz3s|t!3c5v**ka=fRf?oU(zoW$`ve zEQzHHh!A~V%$G(WTDA}$WQL?R9p>2Ck@RoUR3iGp-7&J_k9F-S2n1y(z!8DH-xq;~ zouV@at;C%9bl%WE@4n{D*pi5d5a1`}+B(el%F;dVz_DdzPl)2OQjLeiRi@rRLWx@< z=0#P3)WWUGpzz@jgnA$p6Bip(gfc}9vi-lQS0sCvy`QZJJgEnZ@#6}ml1wloGG$Ka zFJ{JsTPRFYLt&1__3WIspC&6ik}vBk1ICI5T#O}vD*wWC4NGQ0xF5s3sCAj{#S zJu54hSorg8N_0hAfp3GLt^lL)`AvSTCTaAulgPL{bnB)hD@z zs3hc}ctZoFA<`3&8aX$b?Sa&!IEN?Z+RqF-dNhu~U1kdzjA9d#WLYAxHqjc)f-5Gn zreVXZ&O7N*!P3GA6NSY*q>2SbLg2Uv%fuf99A{1&b%t!ft0?FHCv%eB?%1?sf_MmR z$?OJDL=D_$^`IQ6UaXQb2`6iUm)!gJUkpz=#l^?Jp~+aO=PJkL+q1>BKOStL7~4kG zB>_y-yi=w)G8-u<1`jSl-_0`0Qt%#%5UF~Bi!mgnJyx^ds1NGTx?7Jlzi`3iWm})T z!W~+G6f$r?ijz@A$@d&2tjCL~>SG;Tk#iUC9$6$Z6>*=G1_DqCLRnlx=!%$X*bBHb z{*&|Y=0-w2AH@ch!_Gf2R?_a!_xDt2LV*_B!X2%zz~JH`!*q>6zQ7~^0^}`#Yse5D z#6Ym*Q@I9)Ld60lJ!K?L&>PhW{0T9`=B5fSliSgo5p2YvVx!D)6)!jx5VDsSfhT1n z(&R5Z-HO7bu~5Wt9E|zBA>g&{K1ziao=!%}KroO|aGO4^Z7JNjIRd7Nrj)Ad0^NkX zTT%~mSlPb8Xm69Mh(e(}V|fE)l0>E=r1Qc(k{=pu*e-VZ^XJdM+|@Z>$uOnU(xsE> zq7gB0lC!h3#{vBEQ_3Qz68c?>saa$=n|bThP$zLV9`My^^w+;nw8ftS!UTm+PQ|EK z3xd8qIKWxfym&+d%{9-(r{=}1!yG=^cXN;>J`7$z9T;!m=rEFPlGOpnLi?pAhiT? zh1c{Z;#F@X{fYhpTkEs}$NJ@hGM^Ffr0ixlw`DmUt@Dbv$y-|n2p z$Q1L7euo zhtaEoou4`vDX>j)|K9G2M`et=q(n9kmOYN{K-WrVy_%ZOe(>JwUu?xZhUc+;_wEcX zAb*Hyr@N5W+!IA2vj{*fx<@)YIT=$GN?8G$$DyNQLJZVGeb5(*Hk?Aw6ve2t+O(1P z!tk*GwNiZF8vluzV@`z|;iAvEu{m zEXhdMppk6KW3X_GdRXG;}zo8FW7sg)xCafB+B{U}cZA@c$Y1(k{ogePxAhe8m&< zPV-4dqWgym8pjY4pr??;6rsVWRx1jptaNmg%2@`wAe!kOHZvhzdhW{U+50a8D2ciQ z6A=vZ{E@fHR#!+Fa18>>C>AV$5iHZQrzOQIPB0YcWJdKufr7?fzB?01E$R`A1XXwb z91Qv*-ab8wmO>LMW+CH=ebgOwN6K1l60g}Gr6+>0n|RW^5aAbObvv+P&Z2Gnl6F7^ zN$(!J^04Fsc4%Sxp2~=>AQRwya514MPXHqr`&tE5k$h;w!AbeXa#!1P*7*6wgq{Iw zJ_iz3SQVZbqNgZ8A_SE}Am*t=@T14Ey^u|;!0)T!iNW+5iNnFRMR|VWTcB~;?F$q*$!>`icWtR&B zGU97N0-;sn)fyo$;2FOmhQ&?`2OfGYBgx3+nLnUJ>BJ$CrP}ZS;z7tzK9ZFhYqJFE z{!mdWQtEvsVloh#NmV;7(SNJ)w$|biAkZ121Zl%*6H|e`t}-P8 z+~Do_U^9F)YEKy~;Vv}=PvH9{_dWbD`T{xwcz2>{>@3K`ShqE6WRM>1w9mKqcNpcC zeir6NWE-T(%v(doPNp&kfLMf*lTX`B6)rD@CXI+D0gtW$lY_J0=k8-r1mP4zG`u)@ zO}rI&dYLC?y#p8Vm~E>=StU@}ViE}nMlQ0QJ-Z479_Dod6S4$`T=N~di|=nHo{9&( z#3pBFf`zk7(La-C&FTmi5B}3u7%M5n?AlT!zNDY@tDx5x42PI%!^0_q78>I6~8Tv zc38R-Tcm_3k6;-TNrVKM-l1p^1O&Q>=StXpL-vS$YX-8x(ngtqcYD3f<@RGhAi}m2 z!WD5{80vHj2lB#Yl_Eu^a3*O2o?)S53dMt2(OcmtDV``R0cRQ>A30zirmsc~z&fmd z3HUrY84{VBv?h=?-u{!_azdMQ=+V)wz$EBalsXO&>3fo=|E!pm)j!_8e?OHA>+$_~ z4+T6~v_i6wXo!kX7QZ4*r-eD@cN73ui z`LICl?pWq;(CbJw%iSv>l1eZlU$0_Dg%T|4UU9F6j#4Ox$nGXw{{3pJG6hZp0Ca)T z;W-H zAhcyU4S7XjrZZ=MXlS~Dk85evZiba=JA<|gkqSHJx1RP=#dwL?@a~V!PR;q;KYHoN zm?P#o2`+y%J={Bb=u-bpMGIAiG@sE-Ri(Y^^tVP6My1r(zY2P1Hx)BO3m@K=@Z7jO9XZZm)e+C&Dv7QiSmS!Tk63(@&@IX?a+^pZRc{Jb}D9Uwrl z*qONen+p0>(uhcz{lml6*Vq48Ecz#iPg7P9qv=~PfBr^*h}lBxc9LbLz_L@SKJ%in zC<-Y$qhaWy%AviezJ>0Z(=EF%F~_1$IDz>I(t@i#)q-}>5Jy*chkfpb-PHKy%XJuj z-4`6ZnJAvd=iAMs@51@)=-D%Fyxx13m5jHG;GcQGIy8ptyW|jyN2oAx^}&pkwbsMzY}r_N zlr4&ohk_9RS}?`?IlErp*p+Q}*$jj$Xs*B1N*wUTT>yHmf1R)Li4!N9LOOs=%2wsL zix+Rwj=Oy<7~QY&MtlayA@F-+Z?_G3n3oqo2#as;Nqpe?u=BYkLx8rptwCLELy!>g zO>Fxh-jqn3k`?cV8}3A?Rc1#yJ6KkEqSx{0cOdir{kA;mzYKjxAZvL@1?dO)M8R~< zx{d9$Qd!u;QlQODl@}!Yb|TWqgCGIXd$2Avs=9k4S9ftDMsv7FfR2V-9Tfa3c4`m2y~aFJVq{F5&aDGvX07o;_~%1gc^ z^#J9dY3M#y-A@H-fUS`T2UceTmiy2@ji*xL42ajzcXRNq`irq-Qg!APh!z6 z8JUo`8@X9KR-bcnQSwbBbJ@+AbAicxkwc(BzIb1H8H76^H9Hu+W6G?NIGw|vZU&}9 z+p0Ne(6ovcvta*Gfy(R=xhoSvGN45Ogx92*=?o|Zk{*}cJK(rvi7fe&C9sUhUNnZE@bArTGzk-`j(yjJn+nKXH_tTqKI-b4Wd#NCQ&FjHhu$lwNTHRigf6c+x$?+Jk>e+#5d zpdaS)==+S_-7h{_ejkT~2L@kSqh*?oKAQ#!XN<|+&U9ihngV6ETAY7NLuzMo48F@*eFrz_D!04X{uSr-R>O()$2 z7%7!#Q3?70wAz>)8SEiSTZArY1qIzHdNxNyXo@K!;92e091Ba0eD&ePU|DrWvg;t~ zL3SB7hr#9z&QnZO!mJ33kV*j7C3PP?+}y-3fcFV)AwhfY++EluhzS9=kai~(?seg@ z9B{P-GFJTOx}L2vM|DKMqg*$eXDI-rNUB--+;;awS^6Q3rx(=d3`|O(?X|cCcU5yhaMe)LZ$bae zJw4g-K34{cA*-nSM^uJT0t>(-1b!uHZRPur*akZF#P0mKC`-*=y_!+7ZQ+}uR*f>h z!y2^#Bv%&mHb(*=tA@Z3d`r7ovOSI-)>wZVm`xhRQWZvDvWbdv5QzCE3MU*fV)SOl za99vT4@K@w+#Yx0A-iST5(yZEGNJ5j^pft8gubEF&8q)Fj;fKMrj*kL6fuw9Iv5%n zQp85mt9fD6=*FmStWFmpB|$~eG_XWw8{h9s5N&#TZ8{~WzQ(|EAf1lfql?;)zz5Ta z1v0nCCynPDc>1(6lUj7|;|YOKoxMM()fh5g#{7b@ukW?^h-Z9@DVx{zAt-g--2(ZD zI7rQ&9r}K`3ylVFg{pc&JVnI5{e#jG4sJbU3jSzKLFMf-A4gL-@U6fL9?&&n zD(4T-X&?z%t|i%t=ECr+PX#Pq{`2QiL;5fe-0y@P-5oQ>T3ZvDH<6*;9?_dB6rgD z;`%U#xhOf79G63X*=;+dU9~#~R z@U_tbCgYTuu1&D!BCx%6fHmh;QL#OJg$mQ{m%WhSzyO3ou(fBSJd=;s%jbc83zT{j z9!rcyi)niu87sWWR{{Z;!KBXQnIQ>bR-~>f8nvC20^36zd?tgBURYn}L!H`_kla&M zacd1Vp0kbC+EuGm*kaa>Kd35S83e)+Qnr}6rVenSkW-On2Oq|=z2HUtw~-G4bvb4| zp{yyDb~oz5_e^!JN?R`9((-vzqAU@?+8|h<*wU2ZXy)?ESFUv8SF$Y^u3>70cP=wT z{U5_V*;B>rK<8?YU55h112bv;d9F#;_WAekPvd%T$Hg{cdf$`%bIIF|6m?<-Qj8R{ z!nJ?ntd&$!oyfZ#MCHXq3Q^OTJg|Ul@T=ak|G~JfVJeLpwc9<}#K>B!S1%KiIl)G0 zD22FucQe}{D~>}Zn`iusPP{rtK1$1j|dCZG$j z!vB*=3#ABrXd1~;K#O-gVbie6h8R68`DcsFotc;&ghtsvy91*S1!Px%2%0o4TDStm ze>=^UJus!jb^VjVLVGT=1NSVDb*DWMODjYlL~E;b0VP2dVkpHZ z%YLXhq7rU?|5Qy_vryujKs#pEu5;(UfBt$utSV?j?FqBI!Idw^Jmt0M*SBcV;^vDN z^C*{P^S2UB`LnzuM7EmummUD)WxCeippwK$P7O5wpvSSUojXr@UA98BTcQ&rM^}8V za&+=7*sVi7xx~eVslJYqvf(Ih;z#1(;J`wGpeIikkIv7}mjW`@?MfJ>clN`F{zL~S z_!Vjd@ePoo3ve5O;VaHqaPpe^QEh+wB!bNryLghHfNEst$O`y*Rdufh$Ub4V5fwV1x1A*`YJ;ebq!n$Hm=Fz=t)AekaF zvn5TRxF}VE08Nfw3%DL-r-UNPG0CJx4MP{N4>SX~OBN=+oh1YDubdc0CJSZDMJ;U$yOUrcE8mu5C_iG8^<~&C8|*NgifhEfBy{ zO;aH>Wc!-2ABOh4w6rt@(b7vS9?|BhH*L{c%yf|X4FR7K=MRF^MO}x+$~Q&uwUJOo zGd9`oLgzpIM#*p$f&?ucor;KcYfkM5AL_Kt`bH$Kkr1lm=~ZMrkuAHaMMdh=H@Qju z86gr#Wj?A%sjflevvJj+l$BBu0}f#bX}b~@wJCp$UWK~BEH`sZ#d$G>WIB9lSL1IuIS*Z`#pOnlsbt4Y_lGxVPYl+HsudY?mfnr?peuI^M48 z!<32rA~Sb)Q23bx%hZE19p!)t&z5+*u%u;3%&_~_3#k63QN~awf{qgHt*m8{>mv;S z=Mr>*qb)ll7rNf^D`3^u4tl2Jm=ckfxTA-(_1&%Z++~GIAU(oT!>Q$lLI~H>)(E0(k7x zR)1$u9a#is?k^lanXPGz9ZdB8we&y;;|BfmzX6)Rgj)cFi-(~C__Va)fTmvX)hwe4 zq>+1;=d#$a@yk>XJK7B1j9Ikd`FS_aRUbWL-5(sV6}qLT*jD3?>_%AOtO!@?1%Ww~ z0VjS8Db?&WR>_WGSbquP z&$2P;+%k$b5TY~I6{*jkcjM*Tr78Kh4E3hhs>F>8w{%5`ts@?-{TPa^O)5y9^C$Br z>RUX`@#jQw8avz{`W7Y;x=!$VEGcl0o?Y3>(Ch8QT` zA+%;ew4le6lDeY*M16VI`gBvTRdon3+Y&{f8~4^#Qs3<)Ql(+qgS8q}+o5G%(&yBW zKb&3Hd}Oqy$nT3es2i0Fp|dklgZbZ$Br1}8d>8vYL{~>F10_I$$!rA}b0SSb&ZN+- zasf7hwPl5?Hc@tPVa8?w)e~sTM2HH(ybuo>El(W{s3rS3Xo=E^Mbc={0@rDqSpld5 zClPf9UDIy+@K{OU;LULt>bgMWyJ+?AKSd&jq;DcGdXNE!2G1J=;FCclPp1c781SVw zbR|2tifNIxdh{5_VV*c(&gH41i=gIsAGk{#rKF&1vXNG0zZ5?il%VOP+S=$qFY!)RfJx)RB&s<;%1)5Joos0{V#1bQmT+n#8uihWvp%8_D- zicZ9E5%kJ3M|=H6RLYK!z>W;RI?`vNX1^}VZ5b^7{X^b#E*U}VxM1<(KHAJG0C4L- z2lsEQZqQdM$%4G|M?eACiy?Kn)Z8SKJNl>jao`lDQz0mDB=J1X;B;?^hIRm?ZRX13fY}{s52D9ZLKR!2_kfQ+bN#*{HaYnZm^+*`Kcgk`iuQ+N|$Ice#EWJlrXdbV=FO8t>D4jnvr zr~W9d9>aPQ=#%Jbu{++)5lRJP1}UaeQ>F%4c%#+z)$iIOxs!t?qibXjFu@jxEpU_D zMKAhnLDw5d5<7~G7&8oUtKUtdbhul7DKfGNsZi1z`sPg(xxfrfaB!-@*klzi&$O!z z1I)~@ipm?{*ojwXf7dqW$CInHkQmm8!Abn#uckKEdR^O4OkZH4SLh-Hz~e|C3{n(E z9n78=Fs}`do`gXbNoRl#yWS&!tuLZ#;TquA(H~)?BsxaqJ^QVg2(-j+ z@y0Eq-atj3;1%!-JEbA@muSsYJ9cygP~?pmA^4Id8&sW0U(aT_zImRXfAU}e5C^Q7 z*g$hTFysCB9VeHU)G_ptnM8i)b<;GPAxAoy8wpp0$fqfTGAZ1ghpcO1&T;JLbyL2M z>Kp#G(f0ZQyb4}VXUJ&*Er2Il!ukl(j6!o^iBE%#NZU{}>>_@SEsJQ>2#ODzAlDv- zhJQeNkY2^#)ye5~&&7YYAKybqM~Q|_AWUpf-haIo1};s;*v49mf4oChHe5=8UA>_GkO+;aQfMeyrQB#WTE-h<+)xcT#uhPu^DvwZ|gIe zy8a!;zhpub0cLH_?=wjZFyM&3&4zy5@c5vPO&sr9$Y69-=obA>syz7iZ7q&h?SV%? z2<@-iY*?qEsCnEnI?nC&M1odN#_6+OGhvvz5j*z9_q$7}P5u<*n=8_gt>+0C1HOf1 zu?bIGkQ;hIM$}Tr`W0+Z;Yy{o)bMKrj6+Yk#=HG@-@5vJn_O-bUDMn$jw>Q;knnAU zRlk!%+Zno8_;uN``@@43gg}EY{|=ML1NTy*ytP~H6+L!Y0?hYA?wSGKoelyhLXT^z zx+h}GN=psg=P_mNSpGO#{uiX`-e?^9Ln~T1!z!l+-+QU4M(6^~CG`fW-aJnENa5BW zb!i4a5!<+OoRa$>L;n(xDLo=NQO08?ELrmR0gtlD8oxHUK!-j$oLDw_I87gtkaSL+ zM&e)!RB1xMb)J|e4aT*>#M=4*h0_((o$Y8Yyx&x;lp!HBxShZtJJRp_y?Fpqt0U7` zkC#>7nCZ2b9vV@K8ZF=cKib~D_3ivJ{f19tx7VLQZ?ymqM8aqqGc3C~xP1&yZtxXu zW%cSbmQ~5{G8lUOoGrd}SHvv>ClSW93!==!8oCi-`SByb z)=vYrZ(l!eakYz&yI0%N7ixV}=zvU2dL8)~tlo$gzg@e!7yO0a|90or|CxXJ{bB$2 i|NehHfjYA~<*?Vmey!_ubsO=|Hh&zuWZ`@ diff --git a/test/resnet18_reports/resnet18_report.yaml b/test/resnet18_reports/resnet18_report.yaml index 8fe8eea..9df22be 100644 --- a/test/resnet18_reports/resnet18_report.yaml +++ b/test/resnet18_reports/resnet18_report.yaml @@ -1,5 +1,6 @@ report_date: December 06, 2024 -onnx_file: C:\Users\pcolange\Projects\digestai\test\resnet18.onnx +model_file: C:\Users\pcolange\Projects\digestai\test\resnet18.onnx +model_type: onnx model_name: resnet18 model_version: 0 graph_name: main_graph @@ -18,8 +19,8 @@ import_list: com.microsoft.nchwc: 1 org.pytorch.aten: 1 graph_nodes: 49 -model_parameters: 11684712 -model_flops: 3632136680 +parameters: 11684712 +flops: 3632136680 node_type_counts: Conv: 20 Relu: 17 diff --git a/test/test_gui.py b/test/test_gui.py index af36fa6..59fbb8f 100644 --- a/test/test_gui.py +++ b/test/test_gui.py @@ -43,7 +43,7 @@ def setUp(self): def tearDown(self): self.digest_app.close() - def wait_all_threads(self, timeout=5000) -> bool: + def wait_all_threads(self, timeout=10000) -> bool: all_threads = list(self.digest_app.model_nodes_stats_thread.values()) + list( self.digest_app.model_similarity_thread.values() )