From aeae5c5e7f3621a5d0109c9164805be8928aad64 Mon Sep 17 00:00:00 2001 From: lkk Date: Fri, 6 Dec 2024 02:37:24 +0000 Subject: [PATCH 01/17] remove examples gateway. --- comps/cores/mega/gateway.py | 931 +----------------------------------- 1 file changed, 1 insertion(+), 930 deletions(-) diff --git a/comps/cores/mega/gateway.py b/comps/cores/mega/gateway.py index 29642eea5..afd9e9d44 100644 --- a/comps/cores/mega/gateway.py +++ b/comps/cores/mega/gateway.py @@ -4,24 +4,15 @@ import base64 import os from io import BytesIO -from typing import List, Union import requests -from fastapi import File, Request, UploadFile -from fastapi.responses import StreamingResponse +from fastapi import Request from PIL import Image from ..proto.api_protocol import ( - AudioChatCompletionRequest, ChatCompletionRequest, ChatCompletionResponse, - ChatCompletionResponseChoice, - ChatMessage, - DocSumChatCompletionRequest, - EmbeddingRequest, - UsageInfo, ) -from ..proto.docarray import DocSumDoc, LLMParams, LLMParamsDoc, RerankedDoc, RerankerParms, RetrieverParms, TextDoc from .constants import MegaServiceEndpoint, ServiceRoleType, ServiceType from .micro_service import MicroService @@ -195,923 +186,3 @@ def _handle_message(self, messages): else: return prompt - -class ChatQnAGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.CHAT_QNA), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request): - data = await request.json() - print("data in handle request", data) - stream_opt = data.get("stream", True) - chat_request = ChatCompletionRequest.parse_obj(data) - print("chat request in handle request", chat_request) - prompt = self._handle_message(chat_request.messages) - print("prompt in gateway", prompt) - parameters = LLMParams( - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - chat_template=chat_request.chat_template if chat_request.chat_template else None, - model=( - chat_request.model - if chat_request.model - else os.getenv("MODEL_ID") if os.getenv("MODEL_ID") else "Intel/neural-chat-7b-v3-3" - ), - ) - retriever_parameters = RetrieverParms( - search_type=chat_request.search_type if chat_request.search_type else "similarity", - k=chat_request.k if chat_request.k else 4, - distance_threshold=chat_request.distance_threshold if chat_request.distance_threshold else None, - fetch_k=chat_request.fetch_k if chat_request.fetch_k else 20, - lambda_mult=chat_request.lambda_mult if chat_request.lambda_mult else 0.5, - score_threshold=chat_request.score_threshold if chat_request.score_threshold else 0.2, - ) - reranker_parameters = RerankerParms( - top_n=chat_request.top_n if chat_request.top_n else 1, - ) - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"text": prompt}, - llm_parameters=parameters, - retriever_parameters=retriever_parameters, - reranker_parameters=reranker_parameters, - ) - for node, response in result_dict.items(): - if isinstance(response, StreamingResponse): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="chatqna", choices=choices, usage=usage) - - -class CodeGenGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.CODE_GEN), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request): - data = await request.json() - stream_opt = data.get("stream", True) - chat_request = ChatCompletionRequest.parse_obj(data) - prompt = self._handle_message(chat_request.messages) - parameters = LLMParams( - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.2, - streaming=stream_opt, - model=chat_request.model if chat_request.model else None, - ) - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"query": prompt}, llm_parameters=parameters - ) - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LLM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LLM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="codegen", choices=choices, usage=usage) - - -class CodeTransGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.CODE_TRANS), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request): - data = await request.json() - language_from = data["language_from"] - language_to = data["language_to"] - source_code = data["source_code"] - prompt_template = """ - ### System: Please translate the following {language_from} codes into {language_to} codes. Don't output any other content except translated codes. - - ### Original {language_from} codes: - ''' - - {source_code} - - ''' - - ### Translated {language_to} codes: - - """ - prompt = prompt_template.format(language_from=language_from, language_to=language_to, source_code=source_code) - - parameters = LLMParams( - max_tokens=data.get("max_tokens", 1024), - top_k=data.get("top_k", 10), - top_p=data.get("top_p", 0.95), - temperature=data.get("temperature", 0.01), - repetition_penalty=data.get("repetition_penalty", 1.03), - streaming=data.get("stream", True), - ) - - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"query": prompt}, llm_parameters=parameters - ) - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LLM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LLM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="codetrans", choices=choices, usage=usage) - - -class TranslationGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.TRANSLATION), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request): - data = await request.json() - language_from = data["language_from"] - language_to = data["language_to"] - source_language = data["source_language"] - prompt_template = """ - Translate this from {language_from} to {language_to}: - - {language_from}: - {source_language} - - {language_to}: - """ - prompt = prompt_template.format( - language_from=language_from, language_to=language_to, source_language=source_language - ) - result_dict, runtime_graph = await self.megaservice.schedule(initial_inputs={"query": prompt}) - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LLM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LLM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="translation", choices=choices, usage=usage) - - -class DocSumGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, - host, - port, - str(MegaServiceEndpoint.DOC_SUMMARY), - input_datatype=DocSumChatCompletionRequest, - output_datatype=ChatCompletionResponse, - ) - - async def handle_request(self, request: Request, files: List[UploadFile] = File(default=None)): - - if "application/json" in request.headers.get("content-type"): - data = await request.json() - stream_opt = data.get("stream", True) - chat_request = ChatCompletionRequest.model_validate(data) - prompt = self._handle_message(chat_request.messages) - - initial_inputs_data = {data["type"]: prompt} - - elif "multipart/form-data" in request.headers.get("content-type"): - data = await request.form() - stream_opt = data.get("stream", True) - chat_request = ChatCompletionRequest.model_validate(data) - - data_type = data.get("type") - - file_summaries = [] - if files: - for file in files: - file_path = f"/tmp/{file.filename}" - - if data_type is not None and data_type in ["audio", "video"]: - raise ValueError( - "Audio and Video file uploads are not supported in docsum with curl request, please use the UI." - ) - - else: - import aiofiles - - async with aiofiles.open(file_path, "wb") as f: - await f.write(await file.read()) - - docs = read_text_from_file(file, file_path) - os.remove(file_path) - - if isinstance(docs, list): - file_summaries.extend(docs) - else: - file_summaries.append(docs) - - if file_summaries: - prompt = self._handle_message(chat_request.messages) + "\n".join(file_summaries) - else: - prompt = self._handle_message(chat_request.messages) - - data_type = data.get("type") - if data_type is not None: - initial_inputs_data = {} - initial_inputs_data[data_type] = prompt - else: - initial_inputs_data = {"query": prompt} - - else: - raise ValueError(f"Unknown request type: {request.headers.get('content-type')}") - - parameters = LLMParams( - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - model=chat_request.model if chat_request.model else None, - language=chat_request.language if chat_request.language else "auto", - ) - - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs=initial_inputs_data, llm_parameters=parameters - ) - - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LLM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LLM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="docsum", choices=choices, usage=usage) - - -class AudioQnAGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, - host, - port, - str(MegaServiceEndpoint.AUDIO_QNA), - AudioChatCompletionRequest, - ChatCompletionResponse, - ) - - async def handle_request(self, request: Request): - data = await request.json() - - chat_request = AudioChatCompletionRequest.parse_obj(data) - parameters = LLMParams( - # relatively lower max_tokens for audio conversation - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 128, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=False, # TODO add streaming LLM output as input to TTS - ) - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"byte_str": chat_request.audio}, llm_parameters=parameters - ) - - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["byte_str"] - - return response - - -class SearchQnAGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.SEARCH_QNA), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request): - data = await request.json() - stream_opt = data.get("stream", True) - chat_request = ChatCompletionRequest.parse_obj(data) - prompt = self._handle_message(chat_request.messages) - parameters = LLMParams( - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - ) - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"text": prompt}, llm_parameters=parameters - ) - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LLM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LLM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="searchqna", choices=choices, usage=usage) - - -class FaqGenGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.FAQ_GEN), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request, files: List[UploadFile] = File(default=None)): - data = await request.form() - stream_opt = data.get("stream", True) - chat_request = ChatCompletionRequest.parse_obj(data) - file_summaries = [] - if files: - for file in files: - file_path = f"/tmp/{file.filename}" - - import aiofiles - - async with aiofiles.open(file_path, "wb") as f: - await f.write(await file.read()) - docs = read_text_from_file(file, file_path) - os.remove(file_path) - if isinstance(docs, list): - file_summaries.extend(docs) - else: - file_summaries.append(docs) - - if file_summaries: - prompt = self._handle_message(chat_request.messages) + "\n".join(file_summaries) - else: - prompt = self._handle_message(chat_request.messages) - - parameters = LLMParams( - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - model=chat_request.model if chat_request.model else None, - ) - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"query": prompt}, llm_parameters=parameters - ) - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LLM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LLM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="faqgen", choices=choices, usage=usage) - - -class VisualQnAGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.VISUAL_QNA), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request): - data = await request.json() - stream_opt = data.get("stream", False) - chat_request = ChatCompletionRequest.parse_obj(data) - prompt, images = self._handle_message(chat_request.messages) - parameters = LLMParams( - max_new_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - ) - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"prompt": prompt, "image": images[0]}, llm_parameters=parameters - ) - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LVM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LVM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="visualqna", choices=choices, usage=usage) - - -class VideoQnAGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, - host, - port, - str(MegaServiceEndpoint.VIDEO_RAG_QNA), - ChatCompletionRequest, - ChatCompletionResponse, - ) - - async def handle_request(self, request: Request): - data = await request.json() - stream_opt = data.get("stream", False) - chat_request = ChatCompletionRequest.parse_obj(data) - prompt = self._handle_message(chat_request.messages) - parameters = LLMParams( - max_new_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - ) - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"text": prompt}, llm_parameters=parameters - ) - for node, response in result_dict.items(): - # Here it suppose the last microservice in the megaservice is LVM. - if ( - isinstance(response, StreamingResponse) - and node == list(self.megaservice.services.keys())[-1] - and self.megaservice.services[node].service_type == ServiceType.LVM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["text"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="videoqna", choices=choices, usage=usage) - - -class RetrievalToolGateway(Gateway): - """embed+retrieve+rerank.""" - - def __init__(self, megaservice, host="0.0.0.0", port=8889): - super().__init__( - megaservice, - host, - port, - str(MegaServiceEndpoint.RETRIEVALTOOL), - Union[TextDoc, ChatCompletionRequest], - Union[RerankedDoc, LLMParamsDoc], - ) - - async def handle_request(self, request: Request): - def parser_input(data, TypeClass, key): - chat_request = None - try: - chat_request = TypeClass.parse_obj(data) - query = getattr(chat_request, key) - except: - query = None - return query, chat_request - - data = await request.json() - query = None - for key, TypeClass in zip(["text", "messages"], [TextDoc, ChatCompletionRequest]): - query, chat_request = parser_input(data, TypeClass, key) - if query is not None: - break - if query is None: - raise ValueError(f"Unknown request type: {data}") - if chat_request is None: - raise ValueError(f"Unknown request type: {data}") - - if isinstance(chat_request, ChatCompletionRequest): - retriever_parameters = RetrieverParms( - search_type=chat_request.search_type if chat_request.search_type else "similarity", - k=chat_request.k if chat_request.k else 4, - distance_threshold=chat_request.distance_threshold if chat_request.distance_threshold else None, - fetch_k=chat_request.fetch_k if chat_request.fetch_k else 20, - lambda_mult=chat_request.lambda_mult if chat_request.lambda_mult else 0.5, - score_threshold=chat_request.score_threshold if chat_request.score_threshold else 0.2, - ) - reranker_parameters = RerankerParms( - top_n=chat_request.top_n if chat_request.top_n else 1, - ) - - initial_inputs = { - "messages": query, - "input": query, # has to be input due to embedding expects either input or text - "search_type": chat_request.search_type if chat_request.search_type else "similarity", - "k": chat_request.k if chat_request.k else 4, - "distance_threshold": chat_request.distance_threshold if chat_request.distance_threshold else None, - "fetch_k": chat_request.fetch_k if chat_request.fetch_k else 20, - "lambda_mult": chat_request.lambda_mult if chat_request.lambda_mult else 0.5, - "score_threshold": chat_request.score_threshold if chat_request.score_threshold else 0.2, - "top_n": chat_request.top_n if chat_request.top_n else 1, - } - - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs=initial_inputs, - retriever_parameters=retriever_parameters, - reranker_parameters=reranker_parameters, - ) - else: - result_dict, runtime_graph = await self.megaservice.schedule(initial_inputs={"text": query}) - - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node] - return response - - -class MultimodalQnAGateway(Gateway): - def __init__(self, multimodal_rag_megaservice, lvm_megaservice, host="0.0.0.0", port=9999): - self.lvm_megaservice = lvm_megaservice - super().__init__( - multimodal_rag_megaservice, - host, - port, - str(MegaServiceEndpoint.MULTIMODAL_QNA), - ChatCompletionRequest, - ChatCompletionResponse, - ) - - # this overrides _handle_message method of Gateway - def _handle_message(self, messages): - images = [] - messages_dicts = [] - if isinstance(messages, str): - prompt = messages - else: - messages_dict = {} - system_prompt = "" - prompt = "" - for message in messages: - msg_role = message["role"] - messages_dict = {} - if msg_role == "system": - system_prompt = message["content"] - elif msg_role == "user": - if type(message["content"]) == list: - text = "" - text_list = [item["text"] for item in message["content"] if item["type"] == "text"] - text += "\n".join(text_list) - image_list = [ - item["image_url"]["url"] for item in message["content"] if item["type"] == "image_url" - ] - if image_list: - messages_dict[msg_role] = (text, image_list) - else: - messages_dict[msg_role] = text - else: - messages_dict[msg_role] = message["content"] - messages_dicts.append(messages_dict) - elif msg_role == "assistant": - messages_dict[msg_role] = message["content"] - messages_dicts.append(messages_dict) - else: - raise ValueError(f"Unknown role: {msg_role}") - - if system_prompt: - prompt = system_prompt + "\n" - for messages_dict in messages_dicts: - for i, (role, message) in enumerate(messages_dict.items()): - if isinstance(message, tuple): - text, image_list = message - if i == 0: - # do not add role for the very first message. - # this will be added by llava_server - if text: - prompt += text + "\n" - else: - if text: - prompt += role.upper() + ": " + text + "\n" - else: - prompt += role.upper() + ":" - for img in image_list: - # URL - if img.startswith("http://") or img.startswith("https://"): - response = requests.get(img) - image = Image.open(BytesIO(response.content)).convert("RGBA") - image_bytes = BytesIO() - image.save(image_bytes, format="PNG") - img_b64_str = base64.b64encode(image_bytes.getvalue()).decode() - # Local Path - elif os.path.exists(img): - image = Image.open(img).convert("RGBA") - image_bytes = BytesIO() - image.save(image_bytes, format="PNG") - img_b64_str = base64.b64encode(image_bytes.getvalue()).decode() - # Bytes - else: - img_b64_str = img - - images.append(img_b64_str) - else: - if i == 0: - # do not add role for the very first message. - # this will be added by llava_server - if message: - prompt += role.upper() + ": " + message + "\n" - else: - if message: - prompt += role.upper() + ": " + message + "\n" - else: - prompt += role.upper() + ":" - if images: - return prompt, images - else: - return prompt - - async def handle_request(self, request: Request): - data = await request.json() - stream_opt = bool(data.get("stream", False)) - if stream_opt: - print("[ MultimodalQnAGateway ] stream=True not used, this has not support streaming yet!") - stream_opt = False - chat_request = ChatCompletionRequest.model_validate(data) - # Multimodal RAG QnA With Videos has not yet accepts image as input during QnA. - prompt_and_image = self._handle_message(chat_request.messages) - if isinstance(prompt_and_image, tuple): - # print(f"This request include image, thus it is a follow-up query. Using lvm megaservice") - prompt, images = prompt_and_image - cur_megaservice = self.lvm_megaservice - initial_inputs = {"prompt": prompt, "image": images[0]} - else: - # print(f"This is the first query, requiring multimodal retrieval. Using multimodal rag megaservice") - prompt = prompt_and_image - cur_megaservice = self.megaservice - initial_inputs = {"text": prompt} - - parameters = LLMParams( - max_new_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - chat_template=chat_request.chat_template if chat_request.chat_template else None, - ) - result_dict, runtime_graph = await cur_megaservice.schedule( - initial_inputs=initial_inputs, llm_parameters=parameters - ) - for node, response in result_dict.items(): - # the last microservice in this megaservice is LVM. - # checking if LVM returns StreamingResponse - # Currently, LVM with LLAVA has not yet supported streaming. - # @TODO: Will need to test this once LVM with LLAVA supports streaming - if ( - isinstance(response, StreamingResponse) - and node == runtime_graph.all_leaves()[-1] - and self.megaservice.services[node].service_type == ServiceType.LVM - ): - return response - last_node = runtime_graph.all_leaves()[-1] - - if "text" in result_dict[last_node].keys(): - response = result_dict[last_node]["text"] - else: - # text in not response message - # something wrong, for example due to empty retrieval results - if "detail" in result_dict[last_node].keys(): - response = result_dict[last_node]["detail"] - else: - response = "The server fail to generate answer to your query!" - if "metadata" in result_dict[last_node].keys(): - # from retrieval results - metadata = result_dict[last_node]["metadata"] - else: - # follow-up question, no retrieval - metadata = None - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response), - finish_reason="stop", - metadata=metadata, - ) - ) - return ChatCompletionResponse(model="multimodalqna", choices=choices, usage=usage) - - -class AvatarChatbotGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, - host, - port, - str(MegaServiceEndpoint.AVATAR_CHATBOT), - AudioChatCompletionRequest, - ChatCompletionResponse, - ) - - async def handle_request(self, request: Request): - data = await request.json() - - chat_request = AudioChatCompletionRequest.model_validate(data) - parameters = LLMParams( - # relatively lower max_tokens for audio conversation - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 128, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - repetition_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 1.03, - streaming=False, # TODO add streaming LLM output as input to TTS - ) - # print(parameters) - - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs={"byte_str": chat_request.audio}, llm_parameters=parameters - ) - - last_node = runtime_graph.all_leaves()[-1] - response = result_dict[last_node]["video_path"] - return response - - -class GraphragGateway(Gateway): - def __init__(self, megaservice, host="0.0.0.0", port=8888): - super().__init__( - megaservice, host, port, str(MegaServiceEndpoint.GRAPH_RAG), ChatCompletionRequest, ChatCompletionResponse - ) - - async def handle_request(self, request: Request): - data = await request.json() - stream_opt = data.get("stream", True) - chat_request = ChatCompletionRequest.parse_obj(data) - - def parser_input(data, TypeClass, key): - chat_request = None - try: - chat_request = TypeClass.parse_obj(data) - query = getattr(chat_request, key) - except: - query = None - return query, chat_request - - query = None - for key, TypeClass in zip(["text", "input", "messages"], [TextDoc, EmbeddingRequest, ChatCompletionRequest]): - query, chat_request = parser_input(data, TypeClass, key) - if query is not None: - break - if query is None: - raise ValueError(f"Unknown request type: {data}") - if chat_request is None: - raise ValueError(f"Unknown request type: {data}") - prompt = self._handle_message(chat_request.messages) - parameters = LLMParams( - max_tokens=chat_request.max_tokens if chat_request.max_tokens else 1024, - top_k=chat_request.top_k if chat_request.top_k else 10, - top_p=chat_request.top_p if chat_request.top_p else 0.95, - temperature=chat_request.temperature if chat_request.temperature else 0.01, - frequency_penalty=chat_request.frequency_penalty if chat_request.frequency_penalty else 0.0, - presence_penalty=chat_request.presence_penalty if chat_request.presence_penalty else 0.0, - repetition_penalty=chat_request.repetition_penalty if chat_request.repetition_penalty else 1.03, - streaming=stream_opt, - chat_template=chat_request.chat_template if chat_request.chat_template else None, - ) - retriever_parameters = RetrieverParms( - search_type=chat_request.search_type if chat_request.search_type else "similarity", - k=chat_request.k if chat_request.k else 4, - distance_threshold=chat_request.distance_threshold if chat_request.distance_threshold else None, - fetch_k=chat_request.fetch_k if chat_request.fetch_k else 20, - lambda_mult=chat_request.lambda_mult if chat_request.lambda_mult else 0.5, - score_threshold=chat_request.score_threshold if chat_request.score_threshold else 0.2, - ) - initial_inputs = chat_request - result_dict, runtime_graph = await self.megaservice.schedule( - initial_inputs=initial_inputs, - llm_parameters=parameters, - retriever_parameters=retriever_parameters, - ) - for node, response in result_dict.items(): - if isinstance(response, StreamingResponse): - return response - last_node = runtime_graph.all_leaves()[-1] - response_content = result_dict[last_node]["choices"][0]["message"]["content"] - choices = [] - usage = UsageInfo() - choices.append( - ChatCompletionResponseChoice( - index=0, - message=ChatMessage(role="assistant", content=response_content), - finish_reason="stop", - ) - ) - return ChatCompletionResponse(model="chatqna", choices=choices, usage=usage) From 556f5df5aed535536d62dc4407175ab5fd7fbc14 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 02:35:37 +0000 Subject: [PATCH 02/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/cores/mega/gateway.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/comps/cores/mega/gateway.py b/comps/cores/mega/gateway.py index afd9e9d44..f05ebfd3b 100644 --- a/comps/cores/mega/gateway.py +++ b/comps/cores/mega/gateway.py @@ -9,10 +9,7 @@ from fastapi import Request from PIL import Image -from ..proto.api_protocol import ( - ChatCompletionRequest, - ChatCompletionResponse, -) +from ..proto.api_protocol import ChatCompletionRequest, ChatCompletionResponse from .constants import MegaServiceEndpoint, ServiceRoleType, ServiceType from .micro_service import MicroService @@ -185,4 +182,3 @@ def _handle_message(self, messages): return prompt, images else: return prompt - From 7ce4c8b875bfe4fa1c1d18391dd74a2c14c850c7 Mon Sep 17 00:00:00 2001 From: lkk Date: Mon, 9 Dec 2024 14:22:55 +0000 Subject: [PATCH 03/17] remove gateway. --- comps/cores/mega/gateway.py | 184 ------------------------------ comps/cores/mega/micro_service.py | 3 + comps/cores/mega/utils.py | 74 +++++++++++- 3 files changed, 76 insertions(+), 185 deletions(-) delete mode 100644 comps/cores/mega/gateway.py diff --git a/comps/cores/mega/gateway.py b/comps/cores/mega/gateway.py deleted file mode 100644 index f05ebfd3b..000000000 --- a/comps/cores/mega/gateway.py +++ /dev/null @@ -1,184 +0,0 @@ -# Copyright (C) 2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -import base64 -import os -from io import BytesIO - -import requests -from fastapi import Request -from PIL import Image - -from ..proto.api_protocol import ChatCompletionRequest, ChatCompletionResponse -from .constants import MegaServiceEndpoint, ServiceRoleType, ServiceType -from .micro_service import MicroService - - -def read_pdf(file): - from langchain.document_loaders import PyPDFLoader - - loader = PyPDFLoader(file) - docs = loader.load_and_split() - return docs - - -def read_text_from_file(file, save_file_name): - import docx2txt - from langchain.text_splitter import CharacterTextSplitter - - # read text file - if file.headers["content-type"] == "text/plain": - file.file.seek(0) - content = file.file.read().decode("utf-8") - # Split text - text_splitter = CharacterTextSplitter() - texts = text_splitter.split_text(content) - # Create multiple documents - file_content = texts - # read pdf file - elif file.headers["content-type"] == "application/pdf": - documents = read_pdf(save_file_name) - file_content = [doc.page_content for doc in documents] - # read docx file - elif ( - file.headers["content-type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document" - or file.headers["content-type"] == "application/octet-stream" - ): - file_content = docx2txt.process(save_file_name) - - return file_content - - -class Gateway: - def __init__( - self, - megaservice, - host="0.0.0.0", - port=8888, - endpoint=str(MegaServiceEndpoint.CHAT_QNA), - input_datatype=ChatCompletionRequest, - output_datatype=ChatCompletionResponse, - ): - self.megaservice = megaservice - self.host = host - self.port = port - self.endpoint = endpoint - self.input_datatype = input_datatype - self.output_datatype = output_datatype - self.service = MicroService( - self.__class__.__name__, - service_role=ServiceRoleType.MEGASERVICE, - service_type=ServiceType.GATEWAY, - host=self.host, - port=self.port, - endpoint=self.endpoint, - input_datatype=self.input_datatype, - output_datatype=self.output_datatype, - ) - self.define_routes() - self.service.start() - - def define_routes(self): - self.service.app.router.add_api_route(self.endpoint, self.handle_request, methods=["POST"]) - self.service.app.router.add_api_route(str(MegaServiceEndpoint.LIST_SERVICE), self.list_service, methods=["GET"]) - self.service.app.router.add_api_route( - str(MegaServiceEndpoint.LIST_PARAMETERS), self.list_parameter, methods=["GET"] - ) - - def add_route(self, endpoint, handler, methods=["POST"]): - self.service.app.router.add_api_route(endpoint, handler, methods=methods) - - def stop(self): - self.service.stop() - - async def handle_request(self, request: Request): - raise NotImplementedError("Subclasses must implement this method") - - def list_service(self): - response = {} - for node, service in self.megaservice.services.items(): - # Check if the service has a 'description' attribute and it is not None - if hasattr(service, "description") and service.description: - response[node] = {"description": service.description} - # Check if the service has an 'endpoint' attribute and it is not None - if hasattr(service, "endpoint") and service.endpoint: - if node in response: - response[node]["endpoint"] = service.endpoint - else: - response[node] = {"endpoint": service.endpoint} - # If neither 'description' nor 'endpoint' is available, add an error message for the node - if node not in response: - response[node] = {"error": f"Service node {node} does not have 'description' or 'endpoint' attribute."} - return response - - def list_parameter(self): - pass - - def _handle_message(self, messages): - images = [] - if isinstance(messages, str): - prompt = messages - else: - messages_dict = {} - system_prompt = "" - prompt = "" - for message in messages: - msg_role = message["role"] - if msg_role == "system": - system_prompt = message["content"] - elif msg_role == "user": - if type(message["content"]) == list: - text = "" - text_list = [item["text"] for item in message["content"] if item["type"] == "text"] - text += "\n".join(text_list) - image_list = [ - item["image_url"]["url"] for item in message["content"] if item["type"] == "image_url" - ] - if image_list: - messages_dict[msg_role] = (text, image_list) - else: - messages_dict[msg_role] = text - else: - messages_dict[msg_role] = message["content"] - elif msg_role == "assistant": - messages_dict[msg_role] = message["content"] - else: - raise ValueError(f"Unknown role: {msg_role}") - - if system_prompt: - prompt = system_prompt + "\n" - for role, message in messages_dict.items(): - if isinstance(message, tuple): - text, image_list = message - if text: - prompt += role + ": " + text + "\n" - else: - prompt += role + ":" - for img in image_list: - # URL - if img.startswith("http://") or img.startswith("https://"): - response = requests.get(img) - image = Image.open(BytesIO(response.content)).convert("RGBA") - image_bytes = BytesIO() - image.save(image_bytes, format="PNG") - img_b64_str = base64.b64encode(image_bytes.getvalue()).decode() - # Local Path - elif os.path.exists(img): - image = Image.open(img).convert("RGBA") - image_bytes = BytesIO() - image.save(image_bytes, format="PNG") - img_b64_str = base64.b64encode(image_bytes.getvalue()).decode() - # Bytes - else: - img_b64_str = img - - images.append(img_b64_str) - else: - if message: - prompt += role + ": " + message + "\n" - else: - prompt += role + ":" - if images: - return prompt, images - else: - return prompt diff --git a/comps/cores/mega/micro_service.py b/comps/cores/mega/micro_service.py index 458b09710..33d90aa64 100644 --- a/comps/cores/mega/micro_service.py +++ b/comps/cores/mega/micro_service.py @@ -198,6 +198,9 @@ def stop(self): def endpoint_path(self): return f"{self.protocol}://{self.host}:{self.port}{self.endpoint}" + def add_route(self, endpoint, handler, methods=["POST"]): + self.app.router.add_api_route(endpoint, handler, methods=methods) + def register_microservice( name: str, diff --git a/comps/cores/mega/utils.py b/comps/cores/mega/utils.py index e5b2df4f5..92c29c8ea 100644 --- a/comps/cores/mega/utils.py +++ b/comps/cores/mega/utils.py @@ -8,8 +8,10 @@ import random from socket import AF_INET, SOCK_STREAM, socket from typing import List, Optional, Union - import requests +import base64 +from io import BytesIO +from PIL import Image from .logger import CustomLogger @@ -258,3 +260,73 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): if exc_type: self.context_to_manage.__exit__(exc_type, exc_val, exc_tb) + + +def _handle_message(messages): + images = [] + if isinstance(messages, str): + prompt = messages + else: + messages_dict = {} + system_prompt = "" + prompt = "" + for message in messages: + msg_role = message["role"] + if msg_role == "system": + system_prompt = message["content"] + elif msg_role == "user": + if type(message["content"]) == list: + text = "" + text_list = [item["text"] for item in message["content"] if item["type"] == "text"] + text += "\n".join(text_list) + image_list = [ + item["image_url"]["url"] for item in message["content"] if item["type"] == "image_url" + ] + if image_list: + messages_dict[msg_role] = (text, image_list) + else: + messages_dict[msg_role] = text + else: + messages_dict[msg_role] = message["content"] + elif msg_role == "assistant": + messages_dict[msg_role] = message["content"] + else: + raise ValueError(f"Unknown role: {msg_role}") + + if system_prompt: + prompt = system_prompt + "\n" + for role, message in messages_dict.items(): + if isinstance(message, tuple): + text, image_list = message + if text: + prompt += role + ": " + text + "\n" + else: + prompt += role + ":" + for img in image_list: + # URL + if img.startswith("http://") or img.startswith("https://"): + response = requests.get(img) + image = Image.open(BytesIO(response.content)).convert("RGBA") + image_bytes = BytesIO() + image.save(image_bytes, format="PNG") + img_b64_str = base64.b64encode(image_bytes.getvalue()).decode() + # Local Path + elif os.path.exists(img): + image = Image.open(img).convert("RGBA") + image_bytes = BytesIO() + image.save(image_bytes, format="PNG") + img_b64_str = base64.b64encode(image_bytes.getvalue()).decode() + # Bytes + else: + img_b64_str = img + + images.append(img_b64_str) + else: + if message: + prompt += role + ": " + message + "\n" + else: + prompt += role + ":" + if images: + return prompt, images + else: + return prompt From 84ba13c9c465ab5374a837069ab562658708e228 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 14:19:47 +0000 Subject: [PATCH 04/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/cores/mega/utils.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/comps/cores/mega/utils.py b/comps/cores/mega/utils.py index 92c29c8ea..972e24506 100644 --- a/comps/cores/mega/utils.py +++ b/comps/cores/mega/utils.py @@ -1,16 +1,17 @@ # Copyright (C) 2024 Intel Corporation # SPDX-License-Identifier: Apache-2.0 +import base64 import ipaddress import json import multiprocessing import os import random +from io import BytesIO from socket import AF_INET, SOCK_STREAM, socket from typing import List, Optional, Union + import requests -import base64 -from io import BytesIO from PIL import Image from .logger import CustomLogger From ade2d927fab069b0f17e185f98a014d66fb8652d Mon Sep 17 00:00:00 2001 From: lkk Date: Tue, 10 Dec 2024 06:49:07 +0000 Subject: [PATCH 05/17] refine service code. --- comps/cores/mega/http_service.py | 43 ++++++++++++- comps/cores/mega/micro_service.py | 102 ++++++------------------------ 2 files changed, 59 insertions(+), 86 deletions(-) diff --git a/comps/cores/mega/http_service.py b/comps/cores/mega/http_service.py index 283540f49..6109dfdd9 100644 --- a/comps/cores/mega/http_service.py +++ b/comps/cores/mega/http_service.py @@ -8,6 +8,8 @@ from fastapi import FastAPI from prometheus_fastapi_instrumentator import Instrumentator from uvicorn import Config, Server +import asyncio +import multiprocessing from .base_service import BaseService from .base_statistics import collect_all_statistics @@ -83,6 +85,11 @@ async def _get_statistics(): return app + def add_startup_event(self, func): + @self.app.on_event("startup") + async def startup_event(): + asyncio.create_task(func) + async def initialize_server(self): """Initialize and return HTTP server.""" self.logger.info("Setting up HTTP server") @@ -110,11 +117,9 @@ async def start_server(self, **kwargs): """ await self.main_loop() - app = self.app - self.server = UviServer( config=Config( - app=app, + app=self.app, host=self.host_address, port=self.primary_port, log_level="info", @@ -137,6 +142,35 @@ async def terminate_server(self): await self.server.shutdown() self.logger.info("Server termination completed") + def _async_setup(self): + self.event_loop = asyncio.new_event_loop() + asyncio.set_event_loop(self.event_loop) + self.event_loop.run_until_complete(self.initialize_server()) + + def run(self): + """Running method to block the main thread. + + This method runs the event loop until a Future is done. It is designed to be called in the main thread to keep it busy. + """ + self.event_loop.run_until_complete(self.execute_server()) + + def start(self, in_single_process=False): + print(in_single_process) + if in_single_process: + # Resolve HPU segmentation fault and potential tokenizer issues by limiting to same process + self.run() + else: + self.process = multiprocessing.Process(target=self.run, daemon=False, name=self.name) + self.process.start() + + def stop(self): + self.event_loop.run_until_complete(self.terminate_server()) + self.event_loop.stop() + self.event_loop.close() + self.server.logger.close() + if self.process.is_alive(): + self.process.terminate() + @staticmethod def check_server_readiness(ctrl_address: str, timeout: float = 1.0, logger=None, **kwargs) -> bool: """Check if server status is ready. @@ -170,3 +204,6 @@ async def async_check_server_readiness(ctrl_address: str, timeout: float = 1.0, :return: True if status is ready else False. """ return HTTPService.check_server_readiness(ctrl_address, timeout, logger=logger) + + def add_route(self, endpoint, handler, methods=["POST"]): + self.app.router.add_api_route(endpoint, handler, methods=methods) diff --git a/comps/cores/mega/micro_service.py b/comps/cores/mega/micro_service.py index 33d90aa64..d7448bd6f 100644 --- a/comps/cores/mega/micro_service.py +++ b/comps/cores/mega/micro_service.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: Apache-2.0 import asyncio -import multiprocessing import os from collections import defaultdict, deque from enum import Enum @@ -12,6 +11,7 @@ from .constants import ServiceRoleType, ServiceType from .logger import CustomLogger from .utils import check_ports_availability +from .http_service import HTTPService opea_microservices = {} @@ -19,7 +19,7 @@ logflag = os.getenv("LOGFLAG", False) -class MicroService: +class MicroService(HTTPService): """MicroService class to create a microservice.""" def __init__( @@ -67,24 +67,32 @@ def __init__( self.uvicorn_kwargs["ssl_certfile"] = ssl_certfile if not use_remote_service: + + if self.protocol.lower() == "http": + if not (check_ports_availability(self.host, self.port)): + raise RuntimeError(f"port:{self.port}") + self.provider = provider self.provider_endpoint = provider_endpoint self.endpoints = [] - self.server = self._get_server() - self.app = self.server.app + runtime_args = { + "protocol": self.protocol, + "host": self.host, + "port": self.port, + "title": self.name, + "description": "OPEA Microservice Infrastructure", + } + + super().__init__(uvicorn_kwargs=self.uvicorn_kwargs, runtime_args=runtime_args) + # create a batch request processor loop if using dynamic batching if self.dynamic_batching: self.buffer_lock = asyncio.Lock() self.request_buffer = defaultdict(deque) + self.add_startup_event(self._dynamic_batch_processor()) - @self.app.on_event("startup") - async def startup_event(): - asyncio.create_task(self._dynamic_batch_processor()) - - self.event_loop = asyncio.new_event_loop() - asyncio.set_event_loop(self.event_loop) - self.event_loop.run_until_complete(self._async_setup()) + self._async_setup() async def _dynamic_batch_processor(self): if logflag: @@ -125,82 +133,10 @@ def _validate_env(self): "set use_remote_service to False if you want to use a local micro service!" ) - def _get_server(self): - """Get the server instance based on the protocol. - - This method currently only supports HTTP services. It creates an instance of the HTTPService class with the - necessary arguments. - In the future, it will also support gRPC services. - """ - self._validate_env() - from .http_service import HTTPService - - runtime_args = { - "protocol": self.protocol, - "host": self.host, - "port": self.port, - "title": self.name, - "description": "OPEA Microservice Infrastructure", - } - - return HTTPService(uvicorn_kwargs=self.uvicorn_kwargs, runtime_args=runtime_args) - - async def _async_setup(self): - """The async method setup the runtime. - - This method is responsible for setting up the server. It first checks if the port is available, then it gets - the server instance and initializes it. - """ - self._validate_env() - if self.protocol.lower() == "http": - if not (check_ports_availability(self.host, self.port)): - raise RuntimeError(f"port:{self.port}") - - await self.server.initialize_server() - - async def _async_run_forever(self): - """Running method of the server.""" - self._validate_env() - await self.server.execute_server() - - def run(self): - """Running method to block the main thread. - - This method runs the event loop until a Future is done. It is designed to be called in the main thread to keep it busy. - """ - self._validate_env() - self.event_loop.run_until_complete(self._async_run_forever()) - - def start(self, in_single_process=False): - self._validate_env() - if in_single_process: - # Resolve HPU segmentation fault and potential tokenizer issues by limiting to same process - self.run() - else: - self.process = multiprocessing.Process(target=self.run, daemon=False, name=self.name) - self.process.start() - - async def _async_teardown(self): - """Shutdown the server.""" - self._validate_env() - await self.server.terminate_server() - - def stop(self): - self._validate_env() - self.event_loop.run_until_complete(self._async_teardown()) - self.event_loop.stop() - self.event_loop.close() - self.server.logger.close() - if self.process.is_alive(): - self.process.terminate() - @property def endpoint_path(self): return f"{self.protocol}://{self.host}:{self.port}{self.endpoint}" - def add_route(self, endpoint, handler, methods=["POST"]): - self.app.router.add_api_route(endpoint, handler, methods=methods) - def register_microservice( name: str, From e691682c09273e4ac0b3ba597082b0e1ed9442c3 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 06:50:06 +0000 Subject: [PATCH 06/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- comps/cores/mega/http_service.py | 4 ++-- comps/cores/mega/micro_service.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/comps/cores/mega/http_service.py b/comps/cores/mega/http_service.py index 6109dfdd9..f87363bc5 100644 --- a/comps/cores/mega/http_service.py +++ b/comps/cores/mega/http_service.py @@ -1,15 +1,15 @@ # Copyright (C) 2024 Intel Corporation # SPDX-License-Identifier: Apache-2.0 +import asyncio import logging +import multiprocessing import re from typing import Optional from fastapi import FastAPI from prometheus_fastapi_instrumentator import Instrumentator from uvicorn import Config, Server -import asyncio -import multiprocessing from .base_service import BaseService from .base_statistics import collect_all_statistics diff --git a/comps/cores/mega/micro_service.py b/comps/cores/mega/micro_service.py index d7448bd6f..1bea38afe 100644 --- a/comps/cores/mega/micro_service.py +++ b/comps/cores/mega/micro_service.py @@ -9,9 +9,9 @@ from ..proto.docarray import TextDoc from .constants import ServiceRoleType, ServiceType +from .http_service import HTTPService from .logger import CustomLogger from .utils import check_ports_availability -from .http_service import HTTPService opea_microservices = {} From de51d51adff21dd359a8396c7bb116abf1aa5f83 Mon Sep 17 00:00:00 2001 From: lkk <33276950+lkk12014402@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:10:38 +0800 Subject: [PATCH 07/17] Update http_service.py --- comps/cores/mega/http_service.py | 1 - 1 file changed, 1 deletion(-) diff --git a/comps/cores/mega/http_service.py b/comps/cores/mega/http_service.py index f87363bc5..0b6fd01b3 100644 --- a/comps/cores/mega/http_service.py +++ b/comps/cores/mega/http_service.py @@ -155,7 +155,6 @@ def run(self): self.event_loop.run_until_complete(self.execute_server()) def start(self, in_single_process=False): - print(in_single_process) if in_single_process: # Resolve HPU segmentation fault and potential tokenizer issues by limiting to same process self.run() From 675dcfc5c7133de2505de703c80476f319026c22 Mon Sep 17 00:00:00 2001 From: lkk Date: Tue, 10 Dec 2024 08:20:01 +0000 Subject: [PATCH 08/17] remove gateway ut. --- README.md | 14 ---- comps/__init__.py | 17 ----- .../test_service_orchestrator_with_gateway.py | 52 ------------- ...orchestrator_with_retriever_rerank_fake.py | 4 +- ...rvice_orchestrator_with_videoqnagateway.py | 73 ------------------- 5 files changed, 1 insertion(+), 159 deletions(-) delete mode 100644 tests/cores/mega/test_service_orchestrator_with_gateway.py delete mode 100644 tests/cores/mega/test_service_orchestrator_with_videoqnagateway.py diff --git a/README.md b/README.md index f8c255784..3a4b17bad 100644 --- a/README.md +++ b/README.md @@ -125,20 +125,6 @@ class ExampleService: self.megaservice.flow_to(embedding, llm) ``` -## Gateway - -The `Gateway` serves as the interface for users to access the `Megaservice`, providing customized access based on user requirements. It acts as the entry point for incoming requests, routing them to the appropriate `Microservices` within the `Megaservice` architecture. - -`Gateways` support API definition, API versioning, rate limiting, and request transformation, allowing for fine-grained control over how users interact with the underlying `Microservices`. By abstracting the complexity of the underlying infrastructure, `Gateways` provide a seamless and user-friendly experience for interacting with the `Megaservice`. - -For example, the `Gateway` for `ChatQnA` can be built like this: - -```python -from comps import ChatQnAGateway - -self.gateway = ChatQnAGateway(megaservice=self.megaservice, host="0.0.0.0", port=self.port) -``` - ## Contributing to OPEA Welcome to the OPEA open-source community! We are thrilled to have you here and excited about the potential contributions you can bring to the OPEA platform. Whether you are fixing bugs, adding new GenAI components, improving documentation, or sharing your unique use cases, your contributions are invaluable. diff --git a/comps/__init__.py b/comps/__init__.py index 8fe3ac5fd..240302c75 100644 --- a/comps/__init__.py +++ b/comps/__init__.py @@ -47,23 +47,6 @@ from comps.cores.mega.orchestrator import ServiceOrchestrator from comps.cores.mega.orchestrator_with_yaml import ServiceOrchestratorWithYaml from comps.cores.mega.micro_service import MicroService, register_microservice, opea_microservices -from comps.cores.mega.gateway import ( - Gateway, - ChatQnAGateway, - CodeGenGateway, - CodeTransGateway, - DocSumGateway, - TranslationGateway, - SearchQnAGateway, - AudioQnAGateway, - RetrievalToolGateway, - FaqGenGateway, - VideoQnAGateway, - VisualQnAGateway, - MultimodalQnAGateway, - GraphragGateway, - AvatarChatbotGateway, -) # Telemetry from comps.cores.telemetry.opea_telemetry import opea_telemetry diff --git a/tests/cores/mega/test_service_orchestrator_with_gateway.py b/tests/cores/mega/test_service_orchestrator_with_gateway.py deleted file mode 100644 index 42bad2a2f..000000000 --- a/tests/cores/mega/test_service_orchestrator_with_gateway.py +++ /dev/null @@ -1,52 +0,0 @@ -# Copyright (C) 2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -import json -import unittest - -from comps import Gateway, ServiceOrchestrator, TextDoc, opea_microservices, register_microservice - - -@register_microservice(name="s1", host="0.0.0.0", port=8083, endpoint="/v1/add") -async def s1_add(request: TextDoc) -> TextDoc: - req = request.model_dump_json() - req_dict = json.loads(req) - text = req_dict["text"] - text += "opea " - return {"text": text} - - -@register_microservice(name="s2", host="0.0.0.0", port=8084, endpoint="/v1/add") -async def s2_add(request: TextDoc) -> TextDoc: - req = request.model_dump_json() - req_dict = json.loads(req) - text = req_dict["text"] - text += "project!" - return {"text": text} - - -class TestServiceOrchestrator(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.s1 = opea_microservices["s1"] - self.s2 = opea_microservices["s2"] - self.s1.start() - self.s2.start() - - self.service_builder = ServiceOrchestrator() - - self.service_builder.add(opea_microservices["s1"]).add(opea_microservices["s2"]) - self.service_builder.flow_to(self.s1, self.s2) - self.gateway = Gateway(self.service_builder, port=9898) - - def tearDown(self): - self.s1.stop() - self.s2.stop() - self.gateway.stop() - - async def test_schedule(self): - result_dict, _ = await self.service_builder.schedule(initial_inputs={"text": "hello, "}) - self.assertEqual(result_dict[self.s2.name]["text"], "hello, opea project!") - - -if __name__ == "__main__": - unittest.main() diff --git a/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py b/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py index eb74c5fb1..17831219a 100644 --- a/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py +++ b/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py @@ -4,7 +4,7 @@ import json import unittest -from comps import EmbedDoc, Gateway, ServiceOrchestrator, TextDoc, opea_microservices, register_microservice +from comps import EmbedDoc, ServiceOrchestrator, TextDoc, opea_microservices, register_microservice from comps.cores.mega.constants import ServiceType from comps.cores.proto.docarray import RerankerParms, RetrieverParms @@ -54,12 +54,10 @@ def setUp(self): self.service_builder.add(opea_microservices["s1"]).add(opea_microservices["s2"]) self.service_builder.flow_to(self.s1, self.s2) - self.gateway = Gateway(self.service_builder, port=9898) def tearDown(self): self.s1.stop() self.s2.stop() - self.gateway.stop() async def test_retriever_schedule(self): result_dict, _ = await self.service_builder.schedule( diff --git a/tests/cores/mega/test_service_orchestrator_with_videoqnagateway.py b/tests/cores/mega/test_service_orchestrator_with_videoqnagateway.py deleted file mode 100644 index 4905120fb..000000000 --- a/tests/cores/mega/test_service_orchestrator_with_videoqnagateway.py +++ /dev/null @@ -1,73 +0,0 @@ -# Copyright (C) 2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -import json -import unittest - -from fastapi.responses import StreamingResponse - -from comps import ServiceOrchestrator, ServiceType, TextDoc, VideoQnAGateway, opea_microservices, register_microservice -from comps.cores.proto.docarray import LLMParams - - -@register_microservice(name="s1", host="0.0.0.0", port=8083, endpoint="/v1/add") -async def s1_add(request: TextDoc) -> TextDoc: - req = request.model_dump_json() - req_dict = json.loads(req) - text = req_dict["text"] - text += "opea " - return {"text": text} - - -@register_microservice(name="s2", host="0.0.0.0", port=8084, endpoint="/v1/add", service_type=ServiceType.LVM) -async def s2_add(request: TextDoc) -> TextDoc: - req = request.model_dump_json() - req_dict = json.loads(req) - text = req_dict["text"] - - def streamer(text): - yield f"{text}".encode("utf-8") - for i in range(3): - yield "project!".encode("utf-8") - - return StreamingResponse(streamer(text), media_type="text/event-stream") - - -class TestServiceOrchestrator(unittest.IsolatedAsyncioTestCase): - def setUp(self): - self.s1 = opea_microservices["s1"] - self.s2 = opea_microservices["s2"] - self.s1.start() - self.s2.start() - - self.service_builder = ServiceOrchestrator() - - self.service_builder.add(opea_microservices["s1"]).add(opea_microservices["s2"]) - self.service_builder.flow_to(self.s1, self.s2) - self.gateway = VideoQnAGateway(self.service_builder, port=9898) - - def tearDown(self): - self.s1.stop() - self.s2.stop() - self.gateway.stop() - - async def test_schedule(self): - result_dict, _ = await self.service_builder.schedule( - initial_inputs={"text": "hello, "}, llm_parameters=LLMParams(streaming=True) - ) - streaming_response = result_dict[self.s2.name] - - if isinstance(streaming_response, StreamingResponse): - content = b"" - async for chunk in streaming_response.body_iterator: - content += chunk - final_text = content.decode("utf-8") - - print("Streamed content from s2: ", final_text) - - expected_result = "hello, opea project!project!project!" - self.assertEqual(final_text, expected_result) - - -if __name__ == "__main__": - unittest.main() From 2c5fb29b13f89b8b203db9b9a0b72c2c02849d62 Mon Sep 17 00:00:00 2001 From: lkk Date: Tue, 10 Dec 2024 08:26:45 +0000 Subject: [PATCH 09/17] remove gateway ut. --- .../cores/mega/test_multimodalqna_gateway.py | 213 ------------------ 1 file changed, 213 deletions(-) delete mode 100644 tests/cores/mega/test_multimodalqna_gateway.py diff --git a/tests/cores/mega/test_multimodalqna_gateway.py b/tests/cores/mega/test_multimodalqna_gateway.py deleted file mode 100644 index c05bf57bd..000000000 --- a/tests/cores/mega/test_multimodalqna_gateway.py +++ /dev/null @@ -1,213 +0,0 @@ -# Copyright (C) 2024 Intel Corporation -# SPDX-License-Identifier: Apache-2.0 - -import json -import unittest -from typing import Union - -import requests -from fastapi import Request - -from comps import ( - EmbedDoc, - EmbedMultimodalDoc, - LVMDoc, - LVMSearchedMultimodalDoc, - MultimodalDoc, - MultimodalQnAGateway, - SearchedMultimodalDoc, - ServiceOrchestrator, - TextDoc, - opea_microservices, - register_microservice, -) - - -@register_microservice(name="mm_embedding", host="0.0.0.0", port=8083, endpoint="/v1/mm_embedding") -async def mm_embedding_add(request: MultimodalDoc) -> EmbedDoc: - req = request.model_dump_json() - req_dict = json.loads(req) - text = req_dict["text"] - res = {} - res["text"] = text - res["embedding"] = [0.12, 0.45] - return res - - -@register_microservice(name="mm_retriever", host="0.0.0.0", port=8084, endpoint="/v1/mm_retriever") -async def mm_retriever_add(request: EmbedMultimodalDoc) -> SearchedMultimodalDoc: - req = request.model_dump_json() - req_dict = json.loads(req) - text = req_dict["text"] - res = {} - res["retrieved_docs"] = [] - res["initial_query"] = text - res["top_n"] = 1 - res["metadata"] = [ - { - "b64_img_str": "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8/5+hnoEIwDiqkL4KAcT9GO0U4BxoAAAAAElFTkSuQmCC", - "transcript_for_inference": "yellow image", - } - ] - res["chat_template"] = "The caption of the image is: '{context}'. {question}" - return res - - -@register_microservice(name="lvm", host="0.0.0.0", port=8085, endpoint="/v1/lvm") -async def lvm_add(request: Union[LVMDoc, LVMSearchedMultimodalDoc]) -> TextDoc: - req = request.model_dump_json() - req_dict = json.loads(req) - if isinstance(request, LVMSearchedMultimodalDoc): - print("request is the output of multimodal retriever") - text = req_dict["initial_query"] - text += "opea project!" - - else: - print("request is from user.") - text = req_dict["prompt"] - text = f"\nUSER: {text}\nASSISTANT:" - - res = {} - res["text"] = text - return res - - -class TestServiceOrchestrator(unittest.IsolatedAsyncioTestCase): - @classmethod - def setUpClass(cls): - cls.mm_embedding = opea_microservices["mm_embedding"] - cls.mm_retriever = opea_microservices["mm_retriever"] - cls.lvm = opea_microservices["lvm"] - cls.mm_embedding.start() - cls.mm_retriever.start() - cls.lvm.start() - - cls.service_builder = ServiceOrchestrator() - - cls.service_builder.add(opea_microservices["mm_embedding"]).add(opea_microservices["mm_retriever"]).add( - opea_microservices["lvm"] - ) - cls.service_builder.flow_to(cls.mm_embedding, cls.mm_retriever) - cls.service_builder.flow_to(cls.mm_retriever, cls.lvm) - - cls.follow_up_query_service_builder = ServiceOrchestrator() - cls.follow_up_query_service_builder.add(cls.lvm) - - cls.gateway = MultimodalQnAGateway(cls.service_builder, cls.follow_up_query_service_builder, port=9898) - - @classmethod - def tearDownClass(cls): - cls.mm_embedding.stop() - cls.mm_retriever.stop() - cls.lvm.stop() - cls.gateway.stop() - - async def test_service_builder_schedule(self): - result_dict, _ = await self.service_builder.schedule(initial_inputs={"text": "hello, "}) - self.assertEqual(result_dict[self.lvm.name]["text"], "hello, opea project!") - - async def test_follow_up_query_service_builder_schedule(self): - result_dict, _ = await self.follow_up_query_service_builder.schedule( - initial_inputs={"prompt": "chao, ", "image": "some image"} - ) - # print(result_dict) - self.assertEqual(result_dict[self.lvm.name]["text"], "\nUSER: chao, \nASSISTANT:") - - def test_MultimodalQnAGateway_gateway(self): - json_data = {"messages": "hello, "} - response = requests.post("http://0.0.0.0:9898/v1/multimodalqna", json=json_data) - response = response.json() - self.assertEqual(response["choices"][-1]["message"]["content"], "hello, opea project!") - - def test_follow_up_MultimodalQnAGateway_gateway(self): - json_data = { - "messages": [ - { - "role": "user", - "content": [ - {"type": "text", "text": "hello, "}, - { - "type": "image_url", - "image_url": {"url": "https://www.ilankelman.org/stopsigns/australia.jpg"}, - }, - ], - }, - {"role": "assistant", "content": "opea project! "}, - {"role": "user", "content": "chao, "}, - ], - "max_tokens": 300, - } - response = requests.post("http://0.0.0.0:9898/v1/multimodalqna", json=json_data) - response = response.json() - self.assertEqual( - response["choices"][-1]["message"]["content"], - "\nUSER: hello, \nASSISTANT: opea project! \nUSER: chao, \n\nASSISTANT:", - ) - - def test_handle_message(self): - messages = [ - { - "role": "user", - "content": [ - {"type": "text", "text": "hello, "}, - { - "type": "image_url", - "image_url": {"url": "https://www.ilankelman.org/stopsigns/australia.jpg"}, - }, - ], - }, - {"role": "assistant", "content": "opea project! "}, - {"role": "user", "content": "chao, "}, - ] - prompt, images = self.gateway._handle_message(messages) - self.assertEqual(prompt, "hello, \nASSISTANT: opea project! \nUSER: chao, \n") - - def test_handle_message_with_system_prompt(self): - messages = [ - {"role": "system", "content": "System Prompt"}, - { - "role": "user", - "content": [ - {"type": "text", "text": "hello, "}, - { - "type": "image_url", - "image_url": {"url": "https://www.ilankelman.org/stopsigns/australia.jpg"}, - }, - ], - }, - {"role": "assistant", "content": "opea project! "}, - {"role": "user", "content": "chao, "}, - ] - prompt, images = self.gateway._handle_message(messages) - self.assertEqual(prompt, "System Prompt\nhello, \nASSISTANT: opea project! \nUSER: chao, \n") - - async def test_handle_request(self): - json_data = { - "messages": [ - { - "role": "user", - "content": [ - {"type": "text", "text": "hello, "}, - { - "type": "image_url", - "image_url": {"url": "https://www.ilankelman.org/stopsigns/australia.jpg"}, - }, - ], - }, - {"role": "assistant", "content": "opea project! "}, - {"role": "user", "content": "chao, "}, - ], - "max_tokens": 300, - } - mock_request = Request(scope={"type": "http"}) - mock_request._json = json_data - res = await self.gateway.handle_request(mock_request) - res = json.loads(res.json()) - self.assertEqual( - res["choices"][-1]["message"]["content"], - "\nUSER: hello, \nASSISTANT: opea project! \nUSER: chao, \n\nASSISTANT:", - ) - - -if __name__ == "__main__": - unittest.main() From 6e9dfcd1852f4ed2c2be73da32ad1f6de7552b23 Mon Sep 17 00:00:00 2001 From: lkk Date: Wed, 11 Dec 2024 02:44:04 +0000 Subject: [PATCH 10/17] fix conflict service name. --- comps/cores/mega/micro_service.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/comps/cores/mega/micro_service.py b/comps/cores/mega/micro_service.py index 1bea38afe..2d79d6414 100644 --- a/comps/cores/mega/micro_service.py +++ b/comps/cores/mega/micro_service.py @@ -24,7 +24,7 @@ class MicroService(HTTPService): def __init__( self, - name: str, + name: str = "", service_role: ServiceRoleType = ServiceRoleType.MICROSERVICE, service_type: ServiceType = ServiceType.LLM, protocol: str = "http", @@ -44,7 +44,6 @@ def __init__( dynamic_batching_max_batch_size: int = 32, ): """Init the microservice.""" - self.name = f"{name}/{self.__class__.__name__}" if name else self.__class__.__name__ self.service_role = service_role self.service_type = service_type self.protocol = protocol @@ -80,7 +79,7 @@ def __init__( "protocol": self.protocol, "host": self.host, "port": self.port, - "title": self.name, + "title": name, "description": "OPEA Microservice Infrastructure", } @@ -94,6 +93,9 @@ def __init__( self._async_setup() + # overwrite name + self.name = f"{name}/{self.__class__.__name__}" if name else self.__class__.__name__ + async def _dynamic_batch_processor(self): if logflag: logger.info("dynamic batch processor looping...") From f6ebb3d6f50b5ba09d5e7c82b4df131aac1d393d Mon Sep 17 00:00:00 2001 From: lkk <33276950+lkk12014402@users.noreply.github.com> Date: Wed, 11 Dec 2024 11:02:18 +0800 Subject: [PATCH 11/17] Update http_service.py --- comps/cores/mega/http_service.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/comps/cores/mega/http_service.py b/comps/cores/mega/http_service.py index 0b6fd01b3..3123d978a 100644 --- a/comps/cores/mega/http_service.py +++ b/comps/cores/mega/http_service.py @@ -166,7 +166,7 @@ def stop(self): self.event_loop.run_until_complete(self.terminate_server()) self.event_loop.stop() self.event_loop.close() - self.server.logger.close() + self.logger.close() if self.process.is_alive(): self.process.terminate() From e5e2d45300ea36a3e7edf3c2ee3a577dbb51dbc9 Mon Sep 17 00:00:00 2001 From: lkk Date: Wed, 11 Dec 2024 06:16:49 +0000 Subject: [PATCH 12/17] add handle message ut. --- comps/cores/mega/utils.py | 2 +- tests/cores/mega/test_handle_message.py | 53 +++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 tests/cores/mega/test_handle_message.py diff --git a/comps/cores/mega/utils.py b/comps/cores/mega/utils.py index 972e24506..6749e66de 100644 --- a/comps/cores/mega/utils.py +++ b/comps/cores/mega/utils.py @@ -263,7 +263,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): self.context_to_manage.__exit__(exc_type, exc_val, exc_tb) -def _handle_message(messages): +def handle_message(messages): images = [] if isinstance(messages, str): prompt = messages diff --git a/tests/cores/mega/test_handle_message.py b/tests/cores/mega/test_handle_message.py new file mode 100644 index 000000000..95f006654 --- /dev/null +++ b/tests/cores/mega/test_handle_message.py @@ -0,0 +1,53 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import sys +sys.path.append("/lkk/move_gateway/GenAIComps/") + +import json +import unittest +from typing import Union + +from comps.cores.mega.utils import handle_message + +class TestHandleMessage(unittest.IsolatedAsyncioTestCase): + + def test_handle_message(self): + messages = [ + {"role": "user", "content": "opea project! "}, + ] + print(handle_message(messages)) + prompt = handle_message(messages) + print(prompt) + self.assertEqual(prompt, "user: opea project! \n") + + def test_handle_message_with_system_prompt(self): + messages = [ + {"role": "system", "content": "System Prompt"}, + {"role": "user", "content": "opea project! "}, + ] + prompt = handle_message(messages) + print(prompt) + self.assertEqual(prompt, "System Prompt\nuser: opea project! \n") + + def test_handle_message_with_image(self): + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "hello, "}, + { + "type": "image_url", + "image_url": {"url": "https://www.ilankelman.org/stopsigns/australia.jpg"}, + }, + ], + }, + ] + prompt, image = handle_message(messages) + print(prompt) + + +if __name__ == "__main__": + # unittest.main() + t = TestHandleMessage() + t.test_handle_message_with_image() From 83ae2eba710d0c9ebbba98aab33787d2b34ba014 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 06:13:17 +0000 Subject: [PATCH 13/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/cores/mega/test_handle_message.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/cores/mega/test_handle_message.py b/tests/cores/mega/test_handle_message.py index 95f006654..56e150c37 100644 --- a/tests/cores/mega/test_handle_message.py +++ b/tests/cores/mega/test_handle_message.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import sys + sys.path.append("/lkk/move_gateway/GenAIComps/") import json @@ -10,6 +11,7 @@ from comps.cores.mega.utils import handle_message + class TestHandleMessage(unittest.IsolatedAsyncioTestCase): def test_handle_message(self): From 1e07acb9e9fe0d3095ce4aa730d2ad507c2293e0 Mon Sep 17 00:00:00 2001 From: lkk Date: Wed, 11 Dec 2024 08:53:56 +0000 Subject: [PATCH 14/17] remove `multiprocessing.Process` start server code. --- comps/cores/mega/http_service.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/comps/cores/mega/http_service.py b/comps/cores/mega/http_service.py index 3123d978a..8d9c45dae 100644 --- a/comps/cores/mega/http_service.py +++ b/comps/cores/mega/http_service.py @@ -147,21 +147,13 @@ def _async_setup(self): asyncio.set_event_loop(self.event_loop) self.event_loop.run_until_complete(self.initialize_server()) - def run(self): + def start(self): """Running method to block the main thread. This method runs the event loop until a Future is done. It is designed to be called in the main thread to keep it busy. """ self.event_loop.run_until_complete(self.execute_server()) - def start(self, in_single_process=False): - if in_single_process: - # Resolve HPU segmentation fault and potential tokenizer issues by limiting to same process - self.run() - else: - self.process = multiprocessing.Process(target=self.run, daemon=False, name=self.name) - self.process.start() - def stop(self): self.event_loop.run_until_complete(self.terminate_server()) self.event_loop.stop() From 6d5258503f8647b19e281c3a6c0a1f2227957c09 Mon Sep 17 00:00:00 2001 From: lkk Date: Wed, 11 Dec 2024 13:52:17 +0000 Subject: [PATCH 15/17] fix ut. --- tests/cores/mega/test_service_orchestrator.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/cores/mega/test_service_orchestrator.py b/tests/cores/mega/test_service_orchestrator.py index bd19d7794..e796db443 100644 --- a/tests/cores/mega/test_service_orchestrator.py +++ b/tests/cores/mega/test_service_orchestrator.py @@ -3,7 +3,7 @@ import json import unittest - +import multiprocessing from comps import ServiceOrchestrator, TextDoc, opea_microservices, register_microservice @@ -30,8 +30,10 @@ class TestServiceOrchestrator(unittest.IsolatedAsyncioTestCase): def setUpClass(cls): cls.s1 = opea_microservices["s1"] cls.s2 = opea_microservices["s2"] - cls.s1.start() - cls.s2.start() + cls.process1 = multiprocessing.Process(target=cls.s1.start, daemon=False, name="s1") + cls.process2 = multiprocessing.Process(target=cls.s2.start, daemon=False, name="s2") + cls.process1.start() + cls.process2.start() cls.service_builder = ServiceOrchestrator() From d1266b134a44dcc570a1e5ab969d3c510f55bd68 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 13:49:12 +0000 Subject: [PATCH 16/17] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- tests/cores/mega/test_service_orchestrator.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/cores/mega/test_service_orchestrator.py b/tests/cores/mega/test_service_orchestrator.py index e796db443..28cfa6383 100644 --- a/tests/cores/mega/test_service_orchestrator.py +++ b/tests/cores/mega/test_service_orchestrator.py @@ -2,8 +2,9 @@ # SPDX-License-Identifier: Apache-2.0 import json -import unittest import multiprocessing +import unittest + from comps import ServiceOrchestrator, TextDoc, opea_microservices, register_microservice From d35617e072bd09b44c9afc992e202778badee089 Mon Sep 17 00:00:00 2001 From: lkk Date: Wed, 11 Dec 2024 14:05:39 +0000 Subject: [PATCH 17/17] remove multiprocessing and enhance ut for coverage. --- comps/agent/langchain/README.md | 27 +- .../langchain/{ => assets}/agent_arch.jpg | Bin comps/agent/langchain/assets/sql_agent.png | Bin 0 -> 252033 bytes .../langchain/assets/sql_agent_llama.png | Bin 0 -> 291320 bytes comps/agent/langchain/log | 46 +++ comps/agent/langchain/requirements.txt | 6 +- comps/agent/langchain/src/agent.py | 10 + comps/agent/langchain/src/config.py | 13 + .../langchain/src/strategy/base_agent.py | 34 +- .../langchain/src/strategy/sqlagent/README.md | 44 +++ .../src/strategy/sqlagent/__init__.py | 5 + .../langchain/src/strategy/sqlagent/hint.py | 56 +++ .../src/strategy/sqlagent/planner.py | 322 ++++++++++++++++ .../langchain/src/strategy/sqlagent/prompt.py | 225 ++++++++++++ .../src/strategy/sqlagent/sql_tools.py | 32 ++ .../langchain/src/strategy/sqlagent/utils.py | 219 +++++++++++ comps/agent/langchain/src/utils.py | 15 +- comps/cores/mega/http_service.py | 2 - data/hub/version.txt | 1 + tests/agent/sql_agent_llama.yaml | 37 ++ tests/agent/sql_agent_openai.yaml | 36 ++ .../sql_agent_test/generate_hints_file.py | 45 +++ tests/agent/sql_agent_test/run_data_split.sh | 6 + tests/agent/sql_agent_test/split_data.py | 27 ++ tests/agent/sql_agent_test/sql_agent_tools.py | 19 + .../agent/sql_agent_test/sql_agent_tools.yaml | 11 + tests/agent/sql_agent_test/test_sql_agent.sh | 193 ++++++++++ tests/agent/sql_agent_test/test_tag_bench.py | 55 +++ tests/agent/test.py | 7 +- .../test_agent_langchain_on_intel_hpu.sh | 148 +++++--- tests/cores/mega/test_aio.py | 16 +- tests/cores/mega/test_base_statistics.py | 5 +- tests/cores/mega/test_dynamic_batching.py | 5 +- tests/cores/mega/test_handle_message.py | 100 ++++- .../mega/test_hybrid_service_orchestrator.py | 11 +- ...t_hybrid_service_orchestrator_with_yaml.py | 5 +- tests/cores/mega/test_microservice.py | 23 +- tests/cores/mega/test_runtime_graph.py | 18 +- tests/cores/mega/test_service_orchestrator.py | 2 + .../test_service_orchestrator_protocol.py | 5 +- .../test_service_orchestrator_streaming.py | 9 +- ...orchestrator_with_retriever_rerank_fake.py | 11 +- .../test_service_orchestrator_with_yaml.py | 10 +- tests/test-agent-langchain-assistantsapi.log | 27 ++ tests/tgi-gaudi-service.log | 343 ++++++++++++++++++ tests/vllm-gaudi-service.log | 272 ++++++++++++++ vllm-fork | 1 + 47 files changed, 2402 insertions(+), 102 deletions(-) rename comps/agent/langchain/{ => assets}/agent_arch.jpg (100%) create mode 100644 comps/agent/langchain/assets/sql_agent.png create mode 100644 comps/agent/langchain/assets/sql_agent_llama.png create mode 100644 comps/agent/langchain/log create mode 100644 comps/agent/langchain/src/strategy/sqlagent/README.md create mode 100644 comps/agent/langchain/src/strategy/sqlagent/__init__.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/hint.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/planner.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/prompt.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/sql_tools.py create mode 100644 comps/agent/langchain/src/strategy/sqlagent/utils.py create mode 100644 data/hub/version.txt create mode 100644 tests/agent/sql_agent_llama.yaml create mode 100644 tests/agent/sql_agent_openai.yaml create mode 100644 tests/agent/sql_agent_test/generate_hints_file.py create mode 100644 tests/agent/sql_agent_test/run_data_split.sh create mode 100644 tests/agent/sql_agent_test/split_data.py create mode 100644 tests/agent/sql_agent_test/sql_agent_tools.py create mode 100644 tests/agent/sql_agent_test/sql_agent_tools.yaml create mode 100644 tests/agent/sql_agent_test/test_sql_agent.sh create mode 100644 tests/agent/sql_agent_test/test_tag_bench.py create mode 100644 tests/test-agent-langchain-assistantsapi.log create mode 100644 tests/tgi-gaudi-service.log create mode 100644 tests/vllm-gaudi-service.log create mode 160000 vllm-fork diff --git a/comps/agent/langchain/README.md b/comps/agent/langchain/README.md index 585ff5d96..9e858c252 100644 --- a/comps/agent/langchain/README.md +++ b/comps/agent/langchain/README.md @@ -11,10 +11,11 @@ We currently support the following types of agents: 1. ReAct: use `react_langchain` or `react_langgraph` or `react_llama` as strategy. First introduced in this seminal [paper](https://arxiv.org/abs/2210.03629). The ReAct agent engages in "reason-act-observe" cycles to solve problems. Please refer to this [doc](https://python.langchain.com/v0.2/docs/how_to/migrate_agent/) to understand the differences between the langchain and langgraph versions of react agents. See table below to understand the validated LLMs for each react strategy. 2. RAG agent: use `rag_agent` or `rag_agent_llama` strategy. This agent is specifically designed for improving RAG performance. It has the capability to rephrase query, check relevancy of retrieved context, and iterate if context is not relevant. See table below to understand the validated LLMs for each rag agent strategy. 3. Plan and execute: `plan_execute` strategy. This type of agent first makes a step-by-step plan given a user request, and then execute the plan sequentially (or in parallel, to be implemented in future). If the execution results can solve the problem, then the agent will output an answer; otherwise, it will replan and execute again. +4. SQL agent: use `sql_agent_llama` or `sql_agent` strategy. This agent is specifically designed and optimized for answering questions aabout data in SQL databases. For more technical details read descriptions [here](src/strategy/sqlagent/README.md). **Note**: -1. Due to the limitations in support for tool calling by TGI and vllm, we have developed subcategories of agent strategies (`rag_agent_llama` and `react_llama`) specifically designed for open-source LLMs served with TGI and vllm. +1. Due to the limitations in support for tool calling by TGI and vllm, we have developed subcategories of agent strategies (`rag_agent_llama`, `react_llama` and `sql_agent_llama`) specifically designed for open-source LLMs served with TGI and vllm. 2. For advanced developers who want to implement their own agent strategies, please refer to [Section 5](#5-customize-agent-strategy) below. ### 1.2 LLM engine @@ -25,14 +26,16 @@ Agents use LLM for reasoning and planning. We support 3 options of LLM engine: 2. Open-source LLMs served with vllm. Follow the instructions in [Section 2.2.2](#222-start-agent-microservices-with-vllm). 3. OpenAI LLMs via API calls. To use OpenAI llms, specify `llm_engine=openai` and `export OPENAI_API_KEY=` -| Agent type | `strategy` arg | Validated LLMs (serving SW) | Notes | -| ---------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------- | -| ReAct | `react_langchain` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Only allows tools with one input variable | -| ReAct | `react_langgraph` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), | if using vllm, need to specify `--enable-auto-tool-choice --tool-call-parser ${model_parser}`, refer to vllm docs for more info | -| ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Recommended for open-source LLMs | -| RAG agent | `rag_agent` | GPT-4o-mini | | -| RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | -| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | | +| Agent type | `strategy` arg | Validated LLMs (serving SW) | Notes | +| ---------------- | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| ReAct | `react_langchain` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) | Only allows tools with one input variable | +| ReAct | `react_langgraph` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), | if using vllm, need to specify `--enable-auto-tool-choice --tool-call-parser ${model_parser}`, refer to vllm docs for more info | +| ReAct | `react_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs | +| RAG agent | `rag_agent` | GPT-4o-mini | | +| RAG agent | `rag_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (tgi-gaudi) (vllm-gaudi) | Recommended for open-source LLMs, only allows 1 tool with input variable to be "query" | +| Plan and execute | `plan_execute` | GPT-4o-mini, [Mistral-7B-Instruct-v0.3](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.3) (vllm-gaudi), [Llama-3.1-8B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct) (vllm-gaudi) | Currently, due to some issues with guaided decoding of vllm-gaudi, this strategy does not work properly with vllm-gaudi. We are actively debugging. Stay tuned. In the meanwhile, you can use OpenAI's models with this strategy. | +| SQL agent | `sql_agent_llama` | [llama3.1-70B-Instruct](https://huggingface.co/meta-llama/Llama-3.1-70B-Instruct) (vllm-gaudi) | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | +| SQL agent | `sql_agent` | GPT-4o-mini | database query tool is natively integrated using Langchain's [QuerySQLDataBaseTool](https://python.langchain.com/api_reference/community/tools/langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool.html#langchain_community.tools.sql_database.tool.QuerySQLDataBaseTool). User can also register their own tools with this agent. | ### 1.3 Tools @@ -120,12 +123,12 @@ Once microservice starts, user can use below script to invoke. ```bash curl http://${ip_address}:9090/v1/chat/completions -X POST -H "Content-Type: application/json" -d '{ - "query": "What is the weather today in Austin?" + "query": "What is OPEA project?" }' # expected output -data: 'The temperature in Austin today is 78°F.' +data: 'The OPEA project is .....' # just showing partial example here. data: [DONE] @@ -210,4 +213,4 @@ data: [DONE] ## 5. Customize agent strategy For advanced developers who want to implement their own agent strategies, you can add a separate folder in `src\strategy`, implement your agent by inherit the `BaseAgent` class, and add your strategy into the `src\agent.py`. The architecture of this agent microservice is shown in the diagram below as a reference. -![Architecture Overview](agent_arch.jpg) +![Architecture Overview](assets/agent_arch.jpg) diff --git a/comps/agent/langchain/agent_arch.jpg b/comps/agent/langchain/assets/agent_arch.jpg similarity index 100% rename from comps/agent/langchain/agent_arch.jpg rename to comps/agent/langchain/assets/agent_arch.jpg diff --git a/comps/agent/langchain/assets/sql_agent.png b/comps/agent/langchain/assets/sql_agent.png new file mode 100644 index 0000000000000000000000000000000000000000..a4e2e3b33cf885eea44754b8f07cb2f0b50c847a GIT binary patch literal 252033 zcmeFZbyU-R_&1KNpdeBT0xFUcN=OL<6cCVhbVx{tNJ&l+0)zU2mfGbkxt$veVMg(45n_f6su1 z<^+a@=J?~&CxK5mhb(Ubzm9ktsH@PF^fvWK_t+TY)%00&pf$r>PBz=Yb*M}k;eitL05%>2JloxPf=d&kt6OoA}w2JjKGZM zQw?@vgYy~r!Gf35vMut(-ukS- zUfaRNBXJ~hut@O~<>?MZM}}-6F*&h+kVQS4O&0*CC<)IaFEf8VsO{#>RqRdCF8NwrD`7tIwbyTi{9scyV=C@)Qij3{UOaoWN{)~# zmaAiZF8dj%N8wd8-hcQUzJh3swX5#0%i_)O^K+_d-Vac6uNGJQB)3OR1xfz39L|J(UIM1 zIs&72of1?s8y~+qsPVufker_OXI30AOKNZ#)` zlu})P%5}h9=ymuo-5kBbh3_2pzH+{F+EK-;r%LJl9Wmlq&>cPzL=ey@H>hyn) zr7Je%xchGITS2uQww&t<(W>+8vYr4lJnvWEV_z}xc6+3)X#7Kb1S;Y3??Eyy1+}_~ z%;dYY7}w8YHWw2URC2!ORd|~kBnO$Otm!;3kaPfBF7`p?eh+z4b-lnZKF=jxz^&Nd zRBVWg$KhtAN{*ho;a+9?b|s*GB7tagmJM^Q&iJ>4+*7{?#=lw`^+?W0ec&<_KUGh! zoN~BU$=jefdtXu9O(H5G&q^*hos*ds z>;RleV`8@Zf{uK8AeuYM5F3Wl<^H{t0ODgQ$Ndht$EwxBV<*H*;9QM?arRO($>JJgg>&NnTtkCb1}V=w7V;$x znKaf?!CmQ?5XJc|2hg8etlBTkGh2gI?Eu5tPTKif4tYNe&djPjbr5GnS$lJ6sr^B@ z&-YTwErnZyHO3TgLr8xgLgQ+$dXC;N%hP{LqvjbKML9SodoJSUZ{lXZKaT>mXIC_w@YhJ1{P3IH5h@@2ulD|C zw*YTA0T8}MIvd5m9#azhe_Q+ilxkW=6+azsTWOe{=uzvK=)Q%MpNi=}l9{j_5M8ZZ z@_jlI+G(<;WtKRQ=+-{RS5F&c)%F2TV)dSH?G)UwD~$OMm)R_te~hpFw2KS;C5|q& zoBGA$AhDGf;I>X0m?RH0ws{0DnT~sG-y5&m5@1{y-%4e|$nf7CTJ#LXIQfkg%9b4D z4j|UJf@64tUfilZ$Chc0ERdM5Ip7&U#6JC4Y4167&@NOTHF#4#*>VYbHU92^7850d z**}aoVt$;3B%8mHTYL&~7R>fL*8$_4HevI5l%wja%dw7 zK33h+H^w;)Q*?94eTG)7ou_lr*T!pp0$*8^Ny(F;_-3-(ER^~Q+~V=57(zBDQ6tZ# zPbOvN#4?3bG9>UX2Pur5u$xeiguz?qQE0LM(D{*mmzK@bM{|*G1C(Revhx$C?5qg) zUJv`vON2=^1TeeadX#Y*7I(&b%KSz%({!RQgw%#)$hvM;(JmJX77i?NKdC76!fh9g z+Iat~a%+EndJgN9gN6aNjdrZavcIz!!rZy#u3$1tbP7tm`)UXB>XJFr0`>q z9d45qnU=CH@uwkcKHQ?nZ+dUEj!2!Tsd}(Ny%Mw+cfvMkw?F1dL&^)~r^~j=lwZtN zhHFXN_Qi>7ng)pn-|G98VKjGem&J$o7@#$}O6p{px}Cu0ZjhePSk=D$SRa62!!NsjCGb z)$}~G*;mo%4{*_Pr1Uwa0qpZjn5q7zgS*qaAqExRnD~gBEzAEg>KL|&J?37>Czqzv z4uToC`T8GY1DBXDc^C?0B0bLrxlfrPxK}_}Fl+HFeRXbh#!|Hh{^x?9a}{J&#Li?< zkw^8s#Y|Ty?UJ*6{pTl|}iyBxxEbQJn3JL__#+*5tL5^EL~!i$B&ijN7fsc{nUj8G=FWl_x13MP?7@+!l;1Tj|SfpE8(kT7pvDLw)3APzc~1GLtWu3 zV8&&KzVWlBJ;Ik9aEsk+%~EkPQ)8naPrK?Tj7ctI$?eR&yBE%}=~$^~!B>;>sR5gr z@QGiMXi(K2UE{r_7^`-jGOW~p_>NcDb!^hmdNSm8tX)50Uu&oDaLyU z_nBXz40XKv7NYj4wl6wt-l{HMmKbMKQ%J{@e+IKsQ`DjNIlo^TFqdh2mmZ4_*d(NX zJwVP=9UP;cC{R`7a)F0-GLS*X0j-t>=+xz9`ov)_f;F6=`k$~4k|&__@rxfp7ZRg~ zJ7}RiPQ~jmhk2E3*n#6b7(Qj7=N%&%xE)T>bK2rTnD}LD-8EQS@NRb+)THOg;%?x$ z;pf?P)Q}rIK>7I$es9`Vf%9dvf|7_=Gf~!u8)SLFSe#vW4zLI<^^3MZ}>5+&i_Xd27d)7hlE#!cL% zZVK`;ZBlY6HM6>DZRqF`AAQvvV)m5hrx1spv`Fg%3*lT}=1sL%1j!4Hzn(|lTjuoG zxeG>rv?*EqRJ2|Ym)`CtX{&fg9IArj_@=;f)Wromj7B8iJ4oJce&{1ChuW8JIe!2- z=mcHcqpuB*K8wL~%5HguO@t0+uMa{}> zj0Mj>RQkWz6Cvi!czceT@E5;2=Ba#qMR8+(`JZ4@>)N8+B!cTXmn;r zN1O@K3VT85LW|4w7SM4>LcVTM-TR8Ey`IwH?o)M_15h$bgw* zkj_b4*3AH+@~b&=YYS*8V2U1}tDeeXT$J^m7pv-vcO0gRuo5Vo!ydU!D2=df-~=T6 zN}AfQ5yYHTvyL#;aZTs8|JMn({?4AMchHh9m~%#KU*@k z!SIXjV;eYkO%FG;%H8hAJZZSiDO-^lug-LQMEbZ>6)``|loZOq($n^M|Y{)(F^kQ=`VZRUNF2zixapE4sy275txJms5vLKX}~x^08P0sW`7Z;HG%`H5Sj6tq(Se?QX^Y0d^9s7vdr z@!DcsustdpEK}9@9ZKmnmXzHho})(JmI-fmS0ba^YQ2PQnm?BZD_9DgF{e&I+*C*1 zN9HGX5ALyXoSscK+z+AWmY3_brcSh!9HtX=``$hXh?-TV*StMol$EOVvMTfL0-Yh{p8#V3c?Md`jcEWV+wFgCj#ohE&w@RqKVD)NeU3UHPddPf)|t zC8mY_QC*0aj3nR-lB8@z8~l3Tt=FG|3RM+$DxSbeRzTw|fe1$-3G+(#F@(fM`%`N* zL3`R{y5SpoHrWoa(u#utl+^;5`lx!Yr>4b)lvMmhz`mx@NM}N0(=549YX`cr&Z@fz zGT&%tVEf7KLit{M8|I{Qx zDKPy#=i2zkPza{-v_p}?**G@_e3Mv-Q;XVEom-Zyvq+sQj^o-hdQT=!6h45&%jlra z6&Zu`+T&=OGbJ=lZkB6L-wV3fz|TC$0NGSPWT;WBK{#ilX*Vd7DRX`8#hdYQ!7Dsg z+?5iq9CA; zZ;=qM2m_(b25!_XTqaB;9!or+t=l+tPb&-GVg|%HD_hzNGcmCj8qcG+q5lcP=~z$n zDsY7;dOiiGoyPAnR+?s}zlxAS-h2>CevT+g`bCr2I9A z9boZ$@dJ^t01adsX^cc&;XPj%FvvL@UM$EcpzmSm>@@oooh)CGN*GKVcW0VIHq(nj*- z^OlPpypmeP-v|!1WjR6o%BIN7=78G-brH2gRA+9tk`|5sT}2B03j31gvO7&@S~x{- z$5FHXC@g@xBI(#S#H*<~SRt973?+UtJk9CRcb8{HY;WLv?lMmT2PcY&w#WH+NQ|^V zjLJ^s7Q`YP9Uf0;nVGt#lyGO<5Gu;HR=a`ZL1G6(t1>pFt4CxvaFOlTKZWy!j-AvN zs7xe`wxW0ZRSve0wNOiWVz+Heosx~brCv7Oc}Y``M{}oax#jqQsBr}6KM-J8g}cgd z=b+3M#lbNPnXs06~mxx68M}Q+qOb)y53B zn?lR#%A9aNp;&9Y;v{oQ@{gJ#mLUc2x%2n{{`q8-M0U+x zZDKq#&nkX<+NyWJcsi_;3uWlaE7z|{G0TpQW<+rd{-@fpPmBG|5T&>^>Pc=cn0Gh~ zmkYxxtsPAl(cB6O31IAU<@C5N;|t^tF)g|B|N^ow+#DYG9%WkyRSGDlJ__w zVx9TUNPDHEc&0~f;dIX8pkJbU;4&(5>n<1tP2*`uW-b*g4*i<-cKEDA**0+tr*IF7%($8-zq_ zqqu4>@^4;K_gNwcY)cQMbA!JHD&VfQ29Ij!|Jxu^c5cvaN^E6z0d}IPkov2iHDt!l zJyr#r{~v#l;3?Hh4^&YZV&wAK`lVKv1pd2LQtu7H8|v?Y%IwJqxXXVG)c-5E|NjG~ z(0nMRYOoi=jGAa5IXK`^-_9=n0XxOElGsy|Z)uD%{*A3%W~#QdD~3^ReeFNhvjwHh za=gCu2M~lXdg>=yyjd?GDQ-P9ck`dO*j=#K~ZTXgvRI!8}vLhC-16w{(zJ zeq%;7>OB2FSA}FH7>1VKYfQ`oq6{o$I zz(z5`;}2+RiW%F(-4CF_+_@Sxr7@ILg57U$i6-7mGu`YheBeVyYL1b-sq8HkS!UV@ zx$iJm`H8cSc0{HnG{#IaVCTdktAC+SG+z)=TE6G<5(y7|Ma5GT_~)C+gA)`| zc@#z74IQ60>cB?jYq1p*nEtU#aHB*e0Bc49@a3w-U?wlmAvD)%_6j<-{)8o$F8nQw z%Cyz%k_BjIoY8D~=IrziuG6-okxv zLaP26Mx&HEjD1!Ni%T4yiB!#=|H$Mz81TqR#Uh+2z${eXPGVO!+NzinZdMJF=$feI zm$As~g9`l~t;gk3e95mErohUT1AP;kbb8gECz97OLEs_^z{%g0H!3I1xL&XH}0 z20Aw!pC)bH{{*lb9vX1;!KUK-u?ETXu|ZMW9UW~=_OjTvg4~&? zvY&?G%d)IeZ61`U-@AWKo1Z!-t~mCAv%H?q6zraw=S1B_issj)z8|LtvuGXv?2yf2 zT6Jd}R|q%UyL^$AQI$9QI zSjC|SE+~P|@%9(_FAi+*Glo%ep1kn{SD&y|aA&iFJp3hA46_!It@h3vt=SOn6X!_t z4EcM)!u!|3Evipf)2}=7Mc`utEZu-kAcxPoKqHg02kqa_(R6}=9)zXQ%`w#fMO8vpz75yG=8tv41Eb0zU*2YAUBUfryl9>;UQtl^dUlr~ije?}uEAkjQ{^XJh54(&e~8bmy7UzuS;#o>x57 ze(K_{1rGvM_alUe2C*X>Hz!!S&+Zw=CdtS6DLpmFp6_re`&*r9o*U$j%P}v>W7~dm z5zh3@iu6|VUT~>cZUvFkTCHokv|!o7oS3ZOVC|KE5;9xE@vd@ne`~4l1v7__sjdmd&s0Zv$2hZ?@!6;M zz*7I>(vu6c*sd07$qR~-Q>7h06=yAiRPO7PHl;92k3MxwSQ_P4%KqKmK|{mO&z>m8 z*B}+NbOX6?yrB3)9WFe^SkB47o*{%iXJD)RpZoricb;DmrcUvwRHul?E*SLrvZw^R z9NaciwZ3sQq@Y<|Qc(2oQ-0~bs`J$4Fkij&2i~lXxu2fwMTh z_-~s=1An8JKnmh5Xg01I*WXj!;eS>!{dNIgmkG|%@S2rW0gXOA^={$l@4YE~7)In? zm#q%k1thvU|FH25h13i)+ce?f@5onbiT$^p6pq3*G{0Q|wD!yi0#Q6R&>>6kc5eN3L$?efG-XB95v2+0^;xAfb;kg3L=>48VEiG~6e?4wtxx#HQJZc~#3) z(u2l#=sSu{NBw;5fQkg%8GvdZlCNouK^S@VST>ZL3}!@)Fe(3B{dD!Xm%*EIZdRr_ zF4yQ9DdfA(rc+JGGSQYyIKoMq->#zw^gv+;mT zN66lZMbNP~vcfyNdpQ+U+)%3J}b6Tz(k;AQmBs*E<*qrkaXMKB{hgesXQ#@ zKrLytei-I3*=I@nw90??;Hh?RNL$C277Xw>c!91VzNytgs`0w4{;X(h{u}SZ4#dF5 z4$hbT>8ca1X+f&Re6m76h*6h8%y9nQOD}y0^-PtHCTAYmm&srcX=$!s0kFE5ZTXWzz<+8qI zZjNXrQ|Elh!@2wBWrwr$o* zCAq>D>PLZ=beTv$`G}jg4l4}wu>zQg$n4f4Uz|2bnlOtrvt0bt- z+klaN;&?%&r=LR*fKQT(UtY zYE{=wpgbl5Sd2^DPT`3wFKP#lO%Z(vsXdKq$uBL>7z?0LK$(A=C7i{T~R@eHc_!$NK7gvulE z=aN5*J>CtVxaF{+Ra43#rU0)%1ryA^URD-A0DHHNfL~$*)b%{NOJD^}$UGDmPdhjf zwJ@N;2u0I334+u#6bFo%1H7`R(-nZg5QHe0;AiV0JhAcbh6VuI+@RL_0gn(`QVUp# z0bE4BZY1E8;Uc2D3wJCJ*Vu+6tVBSviiur=u6@FCSpt-c*JAh-qycK|NNPtLT1f9s z7yz!s7>J5|c3Vm2BU4}FKoT@EenG5Fy_C)5S2wvevtz*|*ogRu+6Mc+*ipQO&aHY1 z`kAUZ`#fyhnnJkUcJIqwo^KEFMwEmDvFp5x$3kDT0aqeKslU9>RzJ$Nz6OW@%=!+C zKNB$@-X#Q6c)p*X7qRv}W~*Dz7ZRYSpPvg~@yd4R3%^tdKdv_^p?GJ4k_US?8pwPlM$+rusM&;G61wfz^yb zj5X3*rBke1_Dsk|!!{t+(&M3ts_0Tc!pl1jAIp5#8v2uuSAjnwLOy)%fcaA=Qmi5^ z=E^OcY)+@?u(yFp!!bEOjs7zV5YNf4YVRK7kE@Q2gKPnO%T*epRA<0n(Cah4)A@p^lp*peE%Hlk9ULlTk|Bl#cDEh=tOyiZ{EVegaAT{QhoBiXG zWOhnr6Ns8=D@nHcN+rSbKF_^-I3Yx-gt+R@KZrFJuV}v=(;P>odKSaVtK{}lNdx%Z zfnx9W0Jicm6>cDHV&)g`1#NfANxVJ&+zt`+)gqjr_g-ezQH+vU@|n8^UdBt}{&t|s z5wX3@Mhq;0Z!s%~(2d+rF5-5c)zc-Zgqj|uc`nqWllu!x$hm0=fpvX>-;o@4-JK3G zooR-F9wV3;>yOYVfen_nxZbw;#@?HE(Z{~bnfF|VNl-x{@=9YxrPJ{;W8|E%pC55H z5tf&a(>#Y=={+SNe;Si>zn+VGYm|!tTX`1p_yg5?h~A_~DjWuR1fKOSfhVO8mPBaw+N&4ULTRAnArtq+fI1XU}T6J%mvK z?ksiIAq+eOK|wik<{@S^jywGi66yeoTs{Pt9-p#Nj4FT3#t3g0ESq-np~dRu|HvX% z54Zcl2DSwkijhF3p?df5s>X+V=NzXEop-%%f#Mg~zk@(ouZ_iZC5+k5Lswnwz!tJb zs$2F5=Ak4ynjiK+nLT?Qz_tTAq&+9b;Z6(~v#YYzIMl)mz+ImQlE~#n(}z?i8k*;= z010TGe~$@0B^0a^F4LVuXs=BMyXS%#-8CZls(K$tOaS?4Yw+`mmp7@`RhX=*o#yY% z6=4~f2H{ALA-cC_%K}78lo7Dc#|($*&qLLEt9OvH-h~!pcScN1^nmP;CxqXcqMQNu zWn((Yy)~df^E~FbjiS;N&|%aejL%xF?DQC1{TEO)~ihnUYuJ}V>U`(9?&6n;I z|1*De2XIZTT^_5udo-BQ)@k}W7!o;gzB>onCw(^xpz5zbV8M*D`{;D=kSGF9yk86# zS!(f)_Ef<EJZw~~ZJwUY^;%M%7beR8jy7tFy2lqH2-Ud_$` z&Oe)U*jfJk-2*JD%mKJQc5Ni`Q}RX`G$3Pom6{4L-Qp% z?C?5`j?rGKIwqOrTh7G0%Sg_oBp?SkL!&hI;!j4Fw*$A`77VM$fy!xeen+bBAL%Iz z!{McY=P3)!c=B5~chbWNH3~IIq<@^=n*|vA{C~#2FFCBY0(a1UP$#FA-wEwN_Gewo z0In83`vbRaH|SgKN_hm{YqE`(aOA6mBRv7|hiS_#-Nxe>jb7b{+r3ocTKUwEuP>)K z{b#;f1^i<1cHa5;AoUuqySv+_g^WwDW7fGH33QBZwNMo~B%RKuOM7xnw?JCzK0Z}R zv92@u(5qDfca6_m|t?p>rFl&KoTrdQrc2=4otQ)iZQfP}yXG^2?KM-EVnO1~OBmgRPba z6TUlUGQZv%PJWBy=#%=u)JoEPZVKOlOj=$paPrj9!Gi*LZZpTJkc!^6{i>;QHtd-J zigwux%7;3pR|OOla_ai8s|F=P9605~4d%&o)LG9)Ue1>CV@kYWL{bl zdZz!Jv#7`%@PQD{c{uOP!ETROU%uXl^_jYNO=R4(8-+wz@8pI^CZlRY4*dMu&Phj2 zoVWZjRptEdPr7^^vcC^k)P1_zaF?3mEkQ|Wpq9{w!1L=GB2*_9`$T|RhtQvwgm~LP zxp}Oq9^ET}$_6v?ccGR@LscCZ9gSY%)!xY6-8Kf$r!* zZ;jiOt!NR@lw|y*-pbIRdgU6>YY26^r>2rNH*5iDm7eS$9FTF5G)~K_M`;!zWl`4v zg8&$&_sLKQMRu!tr;8^cMXUIBIN`(dVVqp!(t-qKGYu8DaIGT|eT1B17UW*_9uHuzUshZ0mvZn(6|DKu~U z@jC0@eRpo;@(G{*TK8!OQISja2|n~7@}6Oh%NRU3f%igY?Y3+=xH#!q79f?B#!f(n zTVf8hosP}`Z_O{`2S8M2h!|}qo7}hJ^5*Y~RFZd%P1{Lt?Vrn76?BvbX!j1c%oC*< z(WbKTGRt(lMe@l%F6jvP|AG5|&kA&gjje2E42nziSsVpq`QhkI=nF7V$zZeUVwd*l zUH6mM($ut#W0$fmHLJFL$EST^!<6>!8sCGIFXH0jlSKtt-&e+Sr4!T2E_6F2nP>0@U1Y9T-S**VJRu_Oy~x(y5m+^6V8m$&oFAX zF~EBq5aipQb9cPU->Am2-m0Az8P`s~-DhETK4KMkm}xrhlEgO)v%#RPrcTkir3+pM zx6|XgD}*=MHV%-k<*DW!YGH&~|9O#q`OG#VcCB)0$=)kHQ{La9Cs|Co_Ut7&pF$b5 zprBxhS+&bTz{gJA9;dg{xQ*$`@@Ar@n^p+cdBMKkT6*r8U05u;4V8@N4*C&x$|Nwb zUgo6b_3Z9<=i$GxF&+2m|X1z z?YI=IR4h3Ku@dKx(I|cRqyHhhR|BYU=Q&ODf~~pB>nlZ);@{TM0-9SG1;pPeAFnhA zVpnZBXcL^}BipX37@Mhm`0#1JRO4XLs6-Yy$bQ! z*;z-QAyKQv_|KnZk}@+bVK=Fj1By&+S6lI6qWAPt93;Q+ zSm#`Wy8v;|l$WD-S6B9}0=z@~ zSfT#ik^;}`gXGiDa)27~=Pus7vIXmA(!HafJ=UA8{IXq+wvjt@-v$SeKHXJ?O}Jlf zO&F2YihXikm(5V%dBJlK>CR9{?zpN?`d(@H_6bH>OnD0>5YZQa&NRN#Tj1?Cq{ z@haC{nYqUCs|9XNq;#_N2%4*YXr%lMi0ksHouX26;MVl5VmRlUj0JA1M)6mvhfoL{ zxXu9tTEDK%6l_$7(#lTuKBJ{>X+pDsUrrZ z*_`Y_?h+76u($Jl4ZbfTqP+#4!h>=|2W1;{814+Hf4tN@mX0qGSgszFs}>g{>wh$4 z?L|$_1Vf0#g2`o*?K?pY{-^w`%EKPuj?dLxqC~ozehsbYgy`fpE2eUDe}Bm4+6coY zKHQMsVGt2gwPq_=KK4iSb^32<4Q2LcqTMDq&VYV?wKW=Rl2INizf}vw=3YX!Dbx-& z>nMF}73J$GZpmaWEN>BS zqjzF;Lr$VORo@kb9I7rT-BjJmtd}sVbJevp{&;K|05bX@1HsA$zIm_o59g zIt6(qZgk-i%8>4o%bK?&5DAnwvdSl0ht}0e);CAk8(FRGnos|#|@_}XQj5~}Bh z!(-eX`!k$3IaMG9zaEaVJMC}(gq^z(!f~xWQ+sdzu%W$+vQ4hvUx@9?M*y*zX8^ha zLZuLzBhFs}E{bHg4qk5`eH(?OSG7JbP{c`R^~f?1XI~x1*t>Zq9QZ#0xOEGl0VPkM zc|Ch}+cQ}q?3`Z$b>zBkf67vc%>=R{q(E|Yt=M^Gx$U}qM|N|B5ie;>-KA)e*qyf8 zeE!|sQJOCrM}VB<*KJR2m5tQ-Y1e*}*-GN;YO&F@X4F7^}=Xh}Z%{IW-oB4Qp2!nf>!ohTlYwtd>4=FLRR|>KVkmy;5 zYEcQJ_scI8ESr+>195u|ju|lQtqB@{4f*FV*1Be#FTh886aGWZ1Y z=hlWcTyMKgzM1gI&r{tnzouTQ{)*t374UHx0+AG0rl0p@KVij8o7yAMTks<@iCg;| zr`+g_e0Vc&uGrhyU`;?u%Y3|CUGW^YS{%6;F#q@$XPmty;DxJ&`WUKU_)}kC?-4)W4 z+MAc2NNpcak9y9%o0x&zxYq8!8Y%GLlR$w@D3CwM1OU-%;rrD-N?quNscU(etX-eh zSV8&R$d72>5<=x#>OqI~B#S4dJ22!^;w*8f#ciL>d~%t0da{Z|e(Lpy20ej?54Ft^ zv2msqnFKZu8!{p2)tvl9V|7?HWW_j%xX$n(t1^BEKN-e8G9LWUe>^SSMcev=ZS%Q= zOVruQ%)HNAAD_%y9H)6=`~G$>gp8fQm@VwBj`diWHE!p9WJZk~&qL^$v!#7WQu{3J zHmTmDWx&aJh-b#l1)ub+dwj2$(4bgey8wkz zxDGGC$3b}+Je6G037STonaf-{<5Pn_T~+-!p{R|!r&|Q*hJiag_yjle;33%o-8DM5 zfmm3G#g~MS#yXZZSBwJ^J&{sF%$CDDj<1Yar|xW?WVQGl(YNoymX5)C+&(Ctbz?10 zC2dLA9Zv!N3CI1RpzygHds#Vn`liU`fm~KkyAZ|wbW2I9^tkP&ZV9f$({$rfF{nfV zuuVxt)(igXG=(Hh4wNAz$TSI~GHSvUtCl-7$NYXoanxARNDOzMc@#)E3f6Zzx!K;m zHvk1AlT{wGbLwpPp4OgY-$dx}>x8_j8 zli!2v6)jKa{2JACS{cq?K&U|@pF|9(muNiY2?2sz+hKD#KbboPuq+~QpC1rsIjemH zi+@g3YY-57*5uPkCb9*@8>i^{h3;HSpI-i0hc@5IqW1vW_Z1ch@w^ofepy--<<-=FPgdiufdL^>2-lt zrKzs|dO>eo=SX*7^Ubt^F33z0d&WCjcDQBiwb^I$~!Sd5B@i{=H?2!K1~XgJc*VcHZh zrADqf^PvKo`vC&$b=jSo^YPh6s{e^oyil6~Keb!=lD%nW1Zy*%Id{k*^a^vTD4U-xxg=W!nAaUQ3K zyf-?ax>n#v1?Y_`o{v>-Kj_XmeiRu~m362Re9$eveFxbWRO?_54L21KZEO@=L#*jn7ZTjy^d4C zmo5-=zj>NYuBg->`(Ao9b{0nYBj$I)f}xl*CRVw{(O4>8xb- zqbB?;0y8)W+!z#Bc^E37CN>0se!HdVG*T5I+Y*mMi0r5kL^I13xqk3V2gfW($?KrO zt=_AMKHGNYhgwW`7To~pj8nBy5^j3h*j?Cy&wuBw9Mr4cUtjVfTl{@{^y%J}Vpy>tF`IEMCTJo8E~#nGugT zk-xKejpvnG;f!O_Z3ImwHl?}g(3C%ZHHwcvm!)!em+xytGc)RhSpqcib}duHZ%uQt zZ483Eq?!K8LPz==3Up$TGVZh#{^XD#{&Zcj&K1(8k6tJ+X4??BZzO-4Ic|z10zT7w zz?S8X`}3(wQCk;XF2G9#V$OMWbWqA{MZ8K3*zf!t@5}~L#YMgS6vig}S>z#~P6{Pz z7mp#=Nsi8{?|Hkm6YtgI$(>-nNaud#ci2@X_4M z+(`N0op~9lO1lyBRR6tCwKDH%reEC=8r7L%Uw_Bf)g|6^yDFWL9`qUHT0<(orF#ya zNipnroLO~$zB#4Jq$#kmHhbSp(RV3I^;bIsx3DJlF(58_q*WULm@t0?ue%Cb8z^IN zB*)2`t;y@xue&>T=R^1~$?D+eNRSUVJ{!MNNm@7k%?`HRGXAN>G*K zRH!rU36gGjOF^)wMs+N)B_=nr%r}9D|OC3V5uMT_9`1&vGG4?W|&G5 zL-UIB^@X{rYk zx5DnE()cjg6XzcfJlUOcZZg@g$vN*P+>FGQc8mjz-Mv0moLW6|f=4^^{tI1?iiMV3^MSR$X~bjUl5-(eLR3djlLVo@YqQ&&@C)qRdC%7gj0)rtF=lV(T9I>QBa`X`zoyStL~1S=TH+8S^BxR zt;Tin*N>{<6{x>!M$Mhn&kr|4Z6E5~GH64l#jI#^XXKSk`W!PHC>L7tFIx`!>U4V~=0DRK|Lxhe9dC?jn`=cVdpi zWmLC1c-K;!Y-pho`z)0!^Bv=&Ja4T!Q<`H)eJtbUCu29QBWx_zretRuasP+d0RDxFiXPmyp`G~B7v4u>O7?x^L#^YuK(pGgs*gJ^lcC7~zXq{4 z3i27&eKWa3k=3(4tS+1_l#ZNueLL3z6&7jGQ118v6qLRJBf!DCmnn^hLxdMal|Yi1 zhW)A>4-?wY_PWEafNR5WL?}jH*vS*RopmRH=IEtR^Hq5-hgq9l0gZ%@J1LXI{y!To z{je_K>CYDy&j%lRPrItlZVu2R*Gpj>%s=y->NjOr9aI6clbz^vaidReG2DUy*D1f< z&=wsNgL4XNwY1}4+jG%qch!@BP=z&{CC#}qshHAB~$gt5nfviY8o zt}br!=0JPW>a~;xuoZo)HAYIzlt$}3?Im3Arr)8|ZTw{0Sl#_~|7?KL9AK0CK z=2PzY*@2dGs+`6E+$@8RqyJ=%*G{qEkNc8iKK9U3r<}tUBD_o@>M45V<>b8N2+01iZvI}8GUHYIH8#rjCmod#j}-@ojax%AbN%>W zLy*RpK}EPQJEK27$e3Xwk3+L?R5D8FeYWH>AT`Nm#7I0L{n4EIo;iP(R|(NsdLZl5<_nLs5I1j8}&6@js+H z>(9LRhq|(>}qU5!XGor5l0sortm7J*^qCZfe43Ma$22)W{|DZJP$Fcuq;ZsaH z0bmmoOE(aZHTsZ!Hbh)eYak$<@r(z$T2;gRib|g(-I2%J_mjK*7HMN=A=U3OkJFqV z^`D3rie5}-lwuQj_6iWhe-Vmnu3GWP5ncUH%_);|?T@&aZLXWtMYQ_i+3aR4%O`%> z->BOTRQqRHobA?Z=a8Pc%*UH;HwMpz+F-N!j}SLAN$%nni< z;bw~Is0%^&b${ixus1l;6s;aO-qq~+!oCUTZoejcba*P|f;%vsiqqdHoPPHtzw*%} zxc%=*B&}o_21iv84W%C5zbX-$@jKvEZJ?!PcatzKK05Sv@DpbZEU_ z07G}g9ME`ES3aaz_@o_Vb`o~! z^dx!9+04xA#^fO=KX4T}*_6#kW7$-W2cP&QB*pbwt2xK?TYOX~j_PX}NOGQx?WL|X z%~**!6xkwPNNrl!5_eRc`nnV!d@tb+`i1Dkj){_^GghiKB?#~T5Rt2_X|wPD87eG- zf8pLV4({XH~5;#W_&U`h^O|OEX#!r-#$`!VL7g>4GpWt8 zu3>t9XXk&?3sIB>PBus9s~}y*r=sm(z?W;84I@ZX80qZdiFk=^K^e0(FBuD>rVJDC zYE4M!wf`F@A5UKBD+GzM(R$xY#82X(SfiLpp`LR6ufe-Ruf?dTgdp#Ug3Q50lJGy$ z?wDup!Y^Kfr0bL4+MCA%zkjn48eWM9NIu?%gmzA}AT1-2(M1K@?CxV0&-->pR;rgB z9#A(4`jk5?DOgDcp}RclOK=sl9B2?+&Akuh-$8o^f$YfE{n zhw0%R5Ngc(@%lp46|w5t(_X01)8cb$E(DjT>gYaNisEx%=l8b=4h9k3e5{+Je*8i8I<+Un~^`2ziOe8P;)Uizn%yB0sCOF5=~~~avT^Hj6mLCnf{+`EyFKlgsVo0gf{_a( z05Gwgf~o8e$)Fkrin`ywS;g~>-jN@FCPPzh3EL7FI4gKxfr}sG{=J9CXDW6Xx}EDc z%12kncUahbP$qciuM@3eG=%K@*#2tZv8upmMBUt%;?+PEPLuFC{1n^xHJ*FoIPRxK z@4(R?6^8hCVtP&wffOM4IUdb?M_(wAKTd3Wr$~&{fV0Y9dkmg8a}}b1#c33hB|(-7 zB=%;72}C_{C<%8ZHJ!?37+eWollM-S+Td-0Wh7;0=OdoR?4HKcjq?tbh#(f(KfJDW zwMMn2)=avVZOGal`sp@jWWvlM5}omGti_fo0(nPW(F@#mr5<0q+o`D9fyhP6 z>#th?v5Nkc8iZ<6n`e3LC8{(Zu*?2x`i2nAgn#E^y!Z*Z4g~Ko?ITwHxx8rM zRs2~N5S3eRIPW|{sS}aPcNjDZMGSG5_UIEU%5F-P<+2`UELueto3w^=@O&dZL#&*KXcV8Q0LN z&w;R5c1P8qe7N&Z8Y&^~Q>~9X2njmU2pD<-0L4=5`7JI-$LsH0ByX>5;3pMY@(v5r z%(uLafqDm#qwBgEl>`i)B{^kku$XeJ%Fm9iU05a0+e#9O+`hf2S=Yoq9x{nzA4Q}> z1$Jv%i#`ZVvs?lDKA?=1pe^Huxxqs=!hR5chZ24eL!amkuF|yi2k|T}<~@nlMfcnf zlzQNV z_X79Fb5vTV=gDeCE`<2Vj|=`NdcH|VCaB;s{ODy&|MOgD+Q4#r_vKfz{!Be4T_z0) z17RwcpV)ry&bNaL{s7UjVDE?Ju_mmycTEgIS_F~8lT0c0J&9|=2b#?XKGy!@+$;Ei zi;f@>IM=l@5z!2hiKIN8h$*;u?9 zBs`E*x$_ZtgzFC=zGIr@Hb$T?4=&p){)8N;Pxw#8@z^IE-|ftE{_y~vZ-X>Qu;1*_ z1(xvOGYiQJUhig!K^zT6Gf`|nvTwO9o&RcFW7F=}lask~Ue0OLO|90T$pr`Bk=6bp zp7+1z9%J1bfs|yoSjye{D9HyhK{1;ub8M!G*hW>!1eR;V34$+oc9rAeq0QLFzSAT^ z9DI3H5=Z#*JwN)A0aTMXTs?SE=| zj?h?^wq29)nzu)m{IV_3AB!&~vEv-!KNp@$IzbdSmAzH9qOj3=fRz^Zz+9TssTGXeuU_l@)PSDh%;xbA}JhX zIoZ9*PQEGX-EkY5xeS$^#FfY4(>XGVA1HUAy_(-sSrTPSrne5Dw|G!LnG{+C4#}v= z^iI!HkrDlWue{kY_Cu%Nd(#M6Cfrq3p4YHSIep(THW9BfCud6MMe9O{vGwmU(eCP# z-G4fuMj`5&_=g1OoCfn^tY*Ar={tHrCq2n zuEPSaWt7~^Jb-{#tO~dMs>{ewJw6^A2YIZNt@FjE2tU)*%v0phoe0tqIr8a!u62+? z(1RrrnKp>Ma0krZRf#hXK}fo1f4G;t&}f3|JSaTeAL;P+XaFjnA2#o9SR?j(&b?_p zk?x;~VzTc$ywC|^uGNeBv-J~A6Qb+!&gE>HhlIXT1PNyed)0KQlK1NC5S6V{Hk7UN zL-FIrO-2h1PZL|+O5Ks?CigHIi_Xn&9@nm%5d-Lwzmx6KO~e`Ty$)0~6m`}7xrv?h zi-ps(#r%_e*d@)um9c1`}D5!WpLU~MTK(d>x!k>CJQmp zyW921QiHDQ@{Tx1;2^L2<8|?POI_o^IrSvm$u0}9`F^^vJvEhsZRkjDoM+|&PT!f6 za{bFEWyPlHhUHSIz*kK7L~;^m*a*+VpNs!ve6A<(hz$3kb1;c)L^iB$kCkRxk`LYw z9cxC!AwECL{N(BQff5Ve_<7kprB!7E`U31%#7F5P3`63uZ* z6&T%wB&cj{udF!oQz-WX8}OE}&#*&`>1a2A!m>u99vc9qoEnnPy+8Fc*PZ#F6AQ=l zvX!@^Wl^{??0M|PBJb;G>{*`=Jvo@8p5XBr*&w(BH1ICU)%Ne3ct# zTZZpLLdI8RdgQ@_Xt@ELpb5-ggkFpkh4Ns$OZO-*=Fy#}K=rXDf4}Y_EobOI_w|mG zv8+;0kp(k6-Feo8gv9z}_EY#=ir-Jx*mSp1q@G|izJ?$H2#<8G!7CmNiAznhfY$z= zG^mtyi(+7sl~*J(!C`5?>@rHT3VY75znvDB4gLy4$p60*`CrTe*Vlygl=14oFo7)V zzsLgw&X(377+Ue)d3J~)-|+j>!H@|o`O5@rULMkx^{_7MsY^CmDX&MsXR#*!l|3B^JJdhZCg^TMYVRO8! z<3+sMS8A#>8jvr!JUaD(&v(-ObqDVDdRpwBB+(j$>R9*imf-^Xr@6CtDIGlGaf|_-jgj@)BdFkyHPO=uOyyE$|C*3L1*wf2k7zDi!cMo*JvwDuM*}Vu%+?K2 zcjieJWH^@zt>xDqt7$ZPJXjEhs7`XfK9@KF;lDoxA-fKXz-4IU3AIxlA|8s$_9-s? ze6CJy%7D1ci6VPYx9@CM^N@S|iN#=pGDByz$SdU=Gg3d^W`&8jv|d8lou_iS``^lG z$HPtD6Om=#;Z7EjqBEhum*Pp!k(>O6AvFTiA#&M(BvI0 zV`A25)XD_sVj`LmUNDzr?0JU@1nFE1LI;te{kj?cxJH~Nu#W0M-@EaxJH?Kqdq?m2 z?8A%VD1U#LzSVQXPpf!nw=}o{(Q)X1*E6tn$;~(7knR>dHA`9Y!1V>n7R2U9l&<i!{+yX23hQvK{ zcPrXYf9A;d(UC#-`kz-LCR}%cfk(Ne`!7Yh{xVrYDwgTlSAfvKv(a+OjSn2}p~y6gPZ-K-_LP&~o6A9lLTci+BD8dHb!5)nDz9mal^69%LE&rfaZT zT*U>5>R`@MZflMXxP{t`@+bG{d@jVihn~=+6-( zY}{s{fB->3L|js57Uj#+z2DEwqV=a1aP8mm-~n!3{6EiWMUNAWkRL9&HF;ajmBN!_ zxi1q3Qf{jF=P+1l{!hB+h6sVYpVFKmO3%C!u?HqLcmlKv@$Q`RgCubUX1b2Dj;2IP zKtspp>E4B&HoEs@J$fgWxiQh$Vzimkyx#wDJE)~}HD~+0e_|5HrFcO0I&3jm6+VQ) zbr4nC3qYTA6+B>Y>M;u-1gyD>#05qncds|ChF)q(owk-T`7-e&W`7b8EnOcdniCsM z&$`2!Z;x~*o(0Y)U`|N$c@AbAWSi9a`u5as0r83d-7v;g$({k_3n8acM5=as&}s{8 zQ(lopQ$Ik?6al30)q&QFeKiZF%>PTdf14uL$@a(lA=O`1w_;Y|vW}by1#$t=-GvW| z$ARN8X32nW$7ur}%|8oMpI$ZLZB#b>3GNM_pkr`c0D5VIPff!$g2w}mW#F*>rw^vmg3{3#0(F~R0Dl^()kGV)PmYAC}*m zWKbJnc^Zns$E%O9fS!m?Ot|*VxFgpqa|hDNT)-KDgZKX+HaXjy2Zz#Ch@eI6>@>99 zvXHLz71>)n0?RB`g78lkReV-r$f^bPukS#&zb2^u<)!%7v%VAqDV8$dN#bETj+_U+ z3K>0-hd*mhUg8UK|Kj5%zw3^S0@C*i?hn;B&}u6?OODZi*L~A4Y@h@DYE%Y(Kf;;Z zo3H=-P7^S!&(h~tosL=o_EjC*jT<*{7jU^$-$0uIfXjM-^aZ`>yg4@Fdwr8_ zB+9%0ntojFmSnGU8E`mCQLG@H#xLxcj+lQ6TGKg|Ac905@z-az!jBN!+MpDKtnv-2 zJ#gY4X`be|b;+n|o4tO%>k9-$xruP|_k#8E09w3dD@!X?Y`p)Ye>sDFk5X58+dTP_ zO3dEh4-`J2uc<l zCMEv8gYDIz548+w&maDWw(~2@0(FX5DObtv!lE&#lPZby;QHWGZ8=qbg_H>}CV6zE zZ1mjN+0d{e*W#xz+b|#cHLc1YUJ9oF<5q6eQM&eQi0xh7#13SoRWo66>OR$HW{Z*M ze&IzUxy7*9@-t!+i3s@s#&@j&6ZBgpJmeGh^)N=c(vTEH^lD{Mt zRrxQ^y~g#+D2&=nfM@$s9S{n=x%UWJL|8T&@M;(N9za;gm#Kb|1QdOkNarS^+}OW= zLjGO=(~@*O3xM<|N!Jz;@nhYnUD-W^ECqjG`}g!U>f}a}MT7ivj?;eBoZV4g-eaLc zL_V0h;XJ21!8ZLcrjV1~yOAApHXcA&ds#P0fCw&@BF;E2--bIUc0j|RIqKkM$(&h4 ztE7V=RObVfGD}=i^=IiRe+I~;z7G@xILV=6SN<5ZxDz*i8Q}fk-vh#EspfnZQ>(3C za`ar-KiC9z2Cu`ix^^9tbxc8{*o}~5UUJRhCnP*~vf8HT%(tum+fY`_xKBT9U~0Bb zbuMJ_o&gIn@Fm{d5|&Dzk(GLwtUCfNShk6A_$e&-pO(PnR7>zIv#Q*Jw!TrNpSG6r zSLM~qlf-_vtikoWeUsNjToRI&>swUV=KS1KWd%oP5~dMSY#c{=DlKCVJO*Su9=;Ky z*@faP3Rk4jTjw#8kb5ejV`#;!km4kGJ<#bq0|UPX78ih><@|)=cAg1Ae^k?LM z2|eVFihM<#{|1Rgml-PS`{={xm7?i=CIK=gFJyth6?A^G zZTDYrzm95j4ILdbHs0d)`5;ru(}HkJnNt}Ey?MVO>r1L%K0@_2s6sfLjw7oTd7)>5 zF|d6c@E@lgHPp4$dD)pQX8uTa=to`ptEST$5QkIW&`QgWA~fuiClf^n^tJAejb?eZ zjrBKJQN3YMcdME974?1*Ftkg$E#|IhSCl!^!>20rN569WM$YK0F{4)A|C`?&-AOIK z^)qJ;eUVh|ojE-1`4ce5U;};K7dxM!uNd)He_wf69&PMCEwz6%xXDWyDr1%VI%atD zdPUY3{X<&siSTB5f1a6Xru-mOz+z1OY@B%)bH%C1D!Q>{zHA-|{*%|<3c19G3AmN* z*9j3O<(^}51M05zBcv$x6qnp>6cR#5B30tP0KgQGoTB8wnJV7f;0X#h@BCJWe$=GL z%FB229)0_KN{9ffCw75Vw3_W|6pL<0)Ex?ojAJLKjO)Pb(@+*VJ0#nnUEAg#))sJ| za%Gn1XvUPMC+gUlw=vx|5z6BkbX3I|ifi=N+Z0jJ|5qI`%CkP~_(C_o4*#LYn_|P8smVu^R`{jDC%t>Hr@ajOPu4kXlw%}iQRH-POc4;C--*_7_O^VFsuJl{ zgY1ibTcWX46_&aVRhTG3X}VQ)eDs%_%~jUDRqWItHm{rg5U>-cm+m)!5(^V_M{=~| z`=BvMm`!%Il>X`d`j%EzAabt~|7-Q0@^PtOfuyF7^U)7#RNb&3{E#;A0$!z$Z}_aT zJ;wz7&kWRYgaq}vTKew68GEUHf@BO6MbzBf#CgtweBYqYUOyL479!UPU7zj~VE}16 zyt``-D#Sz9EsK)uaH2goULM3XbphV>V+&PxiW0BrM=L?qGkA~o!)n%Nxr=M^mNna% z_uDP2Cn3@KpIC{}837_$>8grJ|5W-o&bRx}**r7=Bb^MKDJ|Jz6RiTbC&N#Z!vRFy zUI>v>yS6}UFH~9_zX}Y!$q$iV{3d^c@+@Y7p=ESv1(dGYCl=AR z+tOvPgc3ys{#beOuZ;Y-jc&&{xs=s-_-9Pd<1)WqiOVUI4hU` zp2`xJzHcMGBcAIF$(~@pebY44ia$sHOyqXApDdH@tJ%9$4{BoowXFpFtkQ~|^T$QK zTlx2F%Zy}a(4Nu2hS>PL)~H<~MLaxW?4c<;2A@r5bvnKdT*&$FiJZC`&s^#VC)+`s zr|gQZ2Cyb7xwREily9Ha?y6E&TeGk_7%ZTE!WYrnyYW3m{3BDu;7XUQ0D=_bFkzu7 zfqx$pZqqf?mNSVs>a7A97a%^On!Gs2A>?;bH1GzmUmyJ$HuA2+RioO+tU@LUS~Y!< z?hg(L$mPn9#i@ck_mnn4@UMfMk}H2hfQ^c0JY-)NA6wH;f5H%g7MJ|P0`n@Umei;I z%1MXc-_|**y25my_+?DNRJqdd2i4~wQe(sYp`bF51e_+FR{vwj*6%+RG#{MG)CL9J zxJL36VCws{gc6~{ux!@x*=v>0h!d}Aopr^pezDnN5G(+_Vtywo(l-4=V^ZxrHIEKy zRd&bvxkwZv5ckHM2rOZYj~6N}&YrLq=QU(3vu_RkIq8>u%)B@G8c&N{={Ww$O*mJ4#Z;=!7%H~&ROJ4;c{_alkX;MOZt}7 zb##N=*X_!0`u_Kd7~wB2BAM?dvW|0bH>OIO9%4Myx0dZKx(<`C(*y$J!!PV(msM#3 z0#t!n85?QD7x*$>aaxaZ*7Pa}P{$7$GrCA!^ck?MboXIeR;G9%-s;QMAXB(ZgmN}# zW#UfS!UU=#+S|gah_U)ShFY|LPZ;gX37Pn8WNl#sy^7eZg`Ov2C43%nxKs(bxKj;S7(!kK4?0m#5h5@)? zQ&g@q&8G|(yf>9>@sm!DGj%tEip*%*=(CBb{LB^6oD+38-*S1aA#g=`N^Fj!01WhK zXx->)I59Vkr;PGBtS|I9w6<#ee^J$EQ5K}i;NSB6R}dGxB8!`VN>H6YpYd$LYiIx< ze0mZkh4ShnkBVs6^K6^6nJgp0)28>5Dm|eT5UT`B2Dg~5oIhN<{(OI<=s~cU)H0wn zXb*P`?PY0-C(3CS9Y1Vy*3Uz`?!Hnmd_?`=lNKWn>uOH0VEc&X1C{`I($bGkC(i+X z`1Aek8({M1&-eLx!o>;c(AZ1C+t#>@0UTE%@@GrI9ct4MAID|oO;<(C@&ZR#i#?w> z1C}p?PMdd8dBb#B7lZD9{C~J!mn*}&3Ui=rZvm1y>+ZB~0?-3m79ep9It$LOyX>2b zKnHbD{;tPiLa}-##sVDv%Q9_Ep_6-8Y|GgO+;U1-Ngl4kSGI5q$J-q44}9G8cPx6B zi_!Hy$rfF_IvowRRBwX74s+?cs*Lt(K&*!G67vyp6Z{l;VPM>+XEwHD_%}?YXQLvG zR%pK|WbCdf`(Nj~_GgNf8~k=crK>N{kr6)H^c0@r3_}_1`sBO@8>56JnYx+Yt_GVK zhu!MCoR={$gNE-B@S5}gOLIKpZe7BtGsh(&U&G4p8|&EL>-~5T0s8-_a{GZ}pD1vc zD^i>_se8GZGWXr9jgmK$STAlsOCY{`!Eod_JI9Oa>Ha#~^1>bVCUXeXksHH`z0SZ& zKK1OFSm0>+Vj*vp8)Wt-Tj21Jyq*|>9=%2hPk^g1+Ws#7k5@|bLjY|#?tiA3B+mDh zTAve-tzVJ3NR5p16|92FP`$Xso~F9rkG{;soeu96^#&$v!75Ak=N?rT6vZTMP9=(@ z+to#L1uum7&OBkf{>!gX+epdIQR!IA5u^N8k)yIF-AXDW5EPXveNQ?>uC#LD{WKRV zgSZ@<65=BC$IVSE{C^OPF3TIVl0KVNZiI3PuYk8%(^zR)OrUU+gPmt#=^6^K*Yf?;fS%C6nr68=qX#&I; zuY*k&w^vFJ54Hmy!Ui}V$NG6niYWpBAnqtwaog(H>%xU%-N_U&h8+usl@6osxV||g zDsIfP(*PxNsg}j%;`6(G|GY&>PAfsnu|``SSfTGlo?h{pM<}H)@bvz^K<>AiY#p<` z1-DVYYMBeRKaOh~$P3D5#MFjBDatctN2gYsVzz0HPPE6v-tilrND>iK+>S#mG6 zi1-_Q2PcsiqkOC-lG^2~T~LSgaa{D2F23u1_dPK(pf)UdsFtfB=4-dzsAF?)&8@JA zlT~kkdt>9LKmf?fcZg3-Noj_5rLv0dvEy&4udhXM8J*T}u9x4soY^kE7+S^uuZFX& z*w3=1+vr*u*qp(-E^ooir&W`!^A6=aZ&yIo#OQRb#y}Da0>*&K;n|;0WN6+IHk?y> z=nHc`dFF{m(jQths4%jlRcMbJZ7V1?ekafEQ-RclzzjWnOvXC^ok8B2v#-oe-o(6l z3}8n<#Dtr*d(x$J`0IRSO)vYbYkZJB810d-X3PcnZxO#oV>e8JoK+j~UB~Ae=gINT zO;aFU6v$%YOEp~XS3bi{$2XCK;w|>}8IY-fYsd65FLNl)I#yh3rE9RcS9!4Zl<{dA zwRjz@g0GTL8^je%9G=WEHZ9PFbf?z%Fn0M8?FCXN6-WxD_nD$6(k^e8cf@XftcB^` zI?`)h%9?7oNPfH-Z0?|ADs8)~=UVS^>;W}*)ZtX-vU<#T)3oM6OcPkzJ_B96XSy@4 zmbl{kTNz`1dZqoblbcGh)2--R<8o6QSQY6Oq+55^+*A|Vxj>h#oteJ2J;8rjLj_cb z%nrikSM8UnmjA{Ez>H3UK%}!QZG!=Cy#;xcaNAf z3e~6f7O`M9TGQG~kEo|I{@&R>C!2|vQR|l)S+taa<7VW3|Crae5s)CU64OWTlL+X6 z&G>>jLOL?0dqJ7{K)hic9Mu*gf5Yf*#=x#J-J03(=a3*LJ5P5>@r2_v&f*dsU(pri zB0JO~2eW7WZnUp5{I*kf*cOkYSXlPz2GDY)-I72jYGz0~usN7$h{W7C@_-5HEm zjeG_I*-w)*Fa&K&|9io@8Tl&*;$>WY$6b4Wg=Cn3S~|u1@_yQCrnp~N$N095U2AKP z!$l}(@bdCyLq5lWfW5|w=*oL|x7g_yR&kfSuZ|r)(x1NjY&2bMaWn-0qF_c3I z$sxnz=wJBSHke0sQ@DZ!C@eci$@&DJ`J)e92W^7vJ4wA^G~^+lfghC>OqIKzvhIo7 z*(*(jV|1ri7?_089h+8^xz4rPTr_4N*v=$2e17dh7qJIz4m->`3e{KZ?bI+5DH zBmJwQDmOi{ zyWpAXpybWBf4^s=QM~mecg(erA##DM7(qe0>Ghr?HQu>D!L#}=K)J$mE3%)o?^AvI zy42sttPwi(dAE-wx~nPih_X66lu`Wi*h$TE`>xSOVa)SW#2P%9StaLW%5EI@LPp#U zqC`D?&Cun7&Hl-AQ;%?_hS`OKE5%&C1Mf>KNN`g}ALWdJy?GfK*j}h~r$c)Ie5j}o+19X93obuyG_N=!hfDw*HA zD&m&vG7ylBV-NIy;gM+m1JcAotY(?XStG@#OdE9HYA^rAUHS4bS8yV{^4S%oq-vVu z-Qz!T0}^eKf+YXYV-AbszsCD1KkLj;!I-{{+lpx2WHn8$07>8uM0M+SrKg43Kp;av zk!I>Mw#o1Inwn?M-k22%wg zuJ2n!lA;%EtF4UH2L@OYmg-4ihro|C?bYdyN{x6`iNGWcf8xc7#A8|tu73&JEDetN zVC$vUfK#vR$&fPvX=(j*f)yNTfZe|mdd4}rkJnK?80cQ-id{3{dp#8`}wuo z=;wyq9%i}#@%|tosf#I-nCZ3x`QlYQ`F)MHV&4HW-|qS^5x0F(RzvHi7X4dai2uhG`Lo{s z!UmMgfjY@<=uo48`I#);CbxQZ!1FB6^nN?}@Cmo`CkXj#kqaN@OzF?zdD*0D`bu`M zV~`xWwLlZWp8BV^rc7|di}HAMImHziv@r1CJK@A$@#LHkDEg1n{ITf-TF`0H+#=0K z@!YdO4S)CaUtITYJ=8t8gO1Mb0?sFw>Q=Xpg3gk@+n-)_8K1ms>O$e&y2%DZ#!@Yp zTu#+(U{psSV6Lu64(C`+)ONq7jTN+_E9;)2x)r`;iqDezbC{fh-G%>xm%p>(-zjq- zAQ>wsB#buS7nF=Dyzn;y1@Tmg^f5@IphC;GLrQZFDL!WNLto5bo2nxh_?ww(t~kHd z`s&}`?)0xr4SXae18{KUebH|zuF~G;Q^{v8y2+c${KIiO87F~D9FS}8R9c~b!$x&B zxD&p}3z=VKfR3W~DdUrtJDL!Cud;lN zRO&_9_{&Qq@v&mP*8Rd>j$T`SA#=D0Rcf&gw@|3N#;%13k~H8~Rgcwb%pQ;YdrPfQ z^Nf7V#ft_ZB8ZZD>i~ccN`fGSmg0=Y^H*aIH=$%JjLlGrZn3VQGyK+Mq!Yz_QA`HY zn5y))+_!$QiT-55lPnEfqU2%+yM;gdwu`nIJZ}>qepa$_UU(J2>n|hqG-X>gvJrQc z|8cX4sMu$Nd|kFF-9-u)`sti8xUDsFVA!Jaq5aRk}b>_O?sChhjq2;7fFA z-!k2vcONH)Jj2NXpaNuBJ{KYVX?X)1W%-)G5lzcR>@+sfz%=gMo zA3B~R(sLEum43xc^vS2nH4o)guT_bJsX-zG)T!>H#QG*5u2&E;+5!vg9qg;oGM@g_ zz~ra6F&RB^S^vPYWehbRY3=?Nr+qnWb_j&qmBRduhrlK<>O~RMFfe~s|9A8#(igtK@I$gDKM+J`{G5!ImH*5 zPU7(AZ9pLdG#EWz;u=9bgl|n=)w`3b#VcC&yne}CqbVV+l#j6r{(KWVxG|(lSh5)V zC2|fy;#dX<`u#v}HT>C6Mka6||FXxWJ`DKPkv z%}K__IDe{hH{*UA80u?p8?bppeq%gKJgoc!%}VTMpS88gqLpxu(GuN~+u{qEz0HI4 zH~s^!N9})I8O?8_>mI0jM;N7Y)IrZa!A_OU_;%+d^P?_5h?F4t0CQX=yznBapdGdQ zX+)Wx+=RlHn`WjiMJ{{kg`l|%^~;^kxJvLV)S*t6WhHWsryCeqhRGkqZ2C{MO{_~r zoB|&hW9gx$M^$GaGLxgDxx)1%%<)7I3#8BQLSnZumvL8WTfc?F(Ara(^%=f)+!HPh zu?hBVlR?1QhqzHJc^B-h+5-<_x*05sIMmNbP$`Ttrl9(T`f>4s>3Gr zPGIZmRd6eo7n+jo2^P=TH*B1O2ewaI@#kln{u&D^#XH;n7^}$LTs6`o1e~h3X~M$v zO(uZ3Vh|-rvkCj~U+ir2ffs+tV_HI^jfdOg=F7|nOcdq`wjD5}PDaxEOzsZ%Wq!lK zRXWo~jI<5h|wHDC}6ofQU!kVhY=G+xPfkPvFa^Bh~> zVWRJHE43zei3>K&iJ;mNwj9U;(O#T~8AMi7EF(opk&v=E^ewG@IkMRb+Jh$}T6jiBx6@JI=R7FjaxY z-h$L2AT}lD6gNrfm$+{{qEyj+9v!%bX;^R2Gm~#x9@?4*U723y72F*}N7Xy)>_kZMU+8j6A+Z(vW^h>ah8QjK4 zY(MH_gR7cBAuRec32gVz?e1P*%9&!G(X=sr%iG4+w*i(mP(U1gb@!4|WQgHLh2qLx z*DJ)Y80_af=MY1-?;v7QW?2;5?1s;qq}2|0@rff*ZO8hfK*DhV7zNPe_~vQ0fogb~ zsLEeal;y+@OI%~i!7xlg&pujf=kiM@S(+4;fB>swM*e2kYY3X&8-T$g`yEax)b@cg zwJ`j!*ra0ee8@2!{FpAZNz+K*vF9EeN}1%hmvP{somTS6ZSDFw4I872!^Npiaj4n{nR{#F$^nvd zxi=81_x>NQzA`MT^?O@Fx{)pc>Fx$;6a}QEyGy!9K)M8J1f;uDx{(IyZiWtr8W@Im zd(Qd)KD^g8pXb`o-s@R$-)pVg=0`Ztoe}|b|IkX(L%~Mlw5nRA+&MDq34rSA5mU}v zuqyI8E(jivmToKYUeXWv2Y*9>X~{4Jhj`-_h7BGYy7_Xa>u6xGvN>QAT1fXAx0-~0 zl*ExZ|L9Oq)L>e|`7s|;sQx5DHDXV|Zh?rfL4_CTpq&@#bY`+s(_!JJy?l{*+9}+3 z5sV8VEL$+qxq*Z#oI_TyXhJw~umX?V=DR5o&N~aDy&V+ior!3DjnY7txBduTALMC& zdi6VKcUVyoGrghXE{-&VIM-_!?4mWUeA?4joVy%U6Qjp~oclQ?v~(pLAJ(o4LOp7+ zwa$4aBOuw%6oHb#&K08%o^k;65s4?+o(*3OSTy%B4NL*)1-VI>PHTIDXT5aI#+S#) zb6)yBg>!uerXDLqZhd_Xb#=cHJEor}Yi(~UUU?>${!8L$nz>GX9!=THu@gdkkbk;7 zz^hNS>2OoKxdX3=cS6R2T#+V+ixWT{ei?xjfsw?`YG}Ac-&5x};i3|ubU5Q2hZ)en zd3h>VLvz;Qj11o$(lg^joLs>Isqh-U{)NH1&w&J3XQ7n^^!0o!2~}NuA49KQ%Rm%NBhXD%IQZhu(jJf>KRR+654R1 z8seq(N6S3rcuylY&_zVEVw~kG9^&rF-==e-O+~CtubmV2Mv+&gThGi#xD^DouI7vD`dl z?|gAL;ztWFNofBIIY{^?r%~=y!yxp30N6*GHXN@kWm#w0xF=qP+wF^T3%m zU)(VhJBkKv)JMzY59Id(T&w&q8lwK04FJs%t|%rJb?@psRtA)um9E8#JJ^zo6pG+mQR58Y!eNF1_tYj~)on=Yb4rC%p z(^Z=rV`BrKNK(coajA~YCf8t|G7rCbfYn8++hF)_qmY5nbl>6F#jn<#5m5iBW^yMG z4EvMVEOqGyJ=Y-CBO9O||99@XWVeK*Wev?}1mvTivY`FS*oEv!iqjAAX;Gr*5*S=8 zSzvp;H$Tnvw_o~H!k_gy3>ZyJ>RR8}u7+^H9$lDW%acOGPP-3u)iNs)F2??&^6bT( z4_#{AT)*g=_foqic-3}}vKuh)&;hi2zPhC*deFB6v@CgoE5P5P zmv$L)xm)W32l`k| zYbFu9emiMQzr6BgVFo@M#sI0K7yycLNpapB#C?~~fl>KHZ8sAMC#}-va-f@Et?)C{ zrKN>yf|U=rPeC&q*w6Pqm`WPH`>`qIzmg#D_KaUjLc<|7#m6Z<6uM1$`7|ShV`E&F z;c>*LC6;M8?c8$EEOqv+tKV_TaS)>eSQJpo+z#^JGctOR^M1OprWg=I^of97$9^Mw7T*!iQ{O1ADKDo0ztU-M#I@Y7izHJ3|5aoxX~ z!k<}t*FoxznF)Lm_aQ4C^fI(oyIh`IuV>I;X1B<(K*Di=@AfQNf1~trR()ju(wY$% zw)@&4!nK6;bPEheDgqrn(b{4!{9lMf<#Z|9P<4R%(G>B&Qhx352hm?-NsLO#3I=za z0Cd7nKPP$&oiTmX&%7@`{HV4ommj4n7Sn{CUq%(BXTFB!gJ{_ID@JnCePKE%#D^v1iUFHp!XGvH@1OjP z-1V<2gKTDxvzPIHPkt&RZy!0%<5-)_7xnx*w!^XFh4BQtH?Bjwczn8?EO^YtoVyYs zCfd}voaDkkgIs&WK5K*5-Y(@^WoCu5eUfN(!KC;zCZk<$l<4imq9ob%@NB+R|H}q!rh$rr=^ND-t(PB610UGh>J^E@;tUh>UO)B3!}0Q$kC!MSyT#p&Ir0`jA-fs_ zN>Eb(?;%Wa;;I1&kEw1=_Iw2sUp{DD@Jv0DJzN@BoVWa}c-&j-x9D=`EK%)B`ub~| zuq^sU*d2bLOG55d8-76X4AwafcQ@)a4U~!1t0)F#c*oH>@6;yyeY{U6iF~xpGq@L2 zxSR|R_2_gfSQPrBn_S6A|F8eib6CP{sIi1vLyV6EHC#SkkaVc&viJo<{i|muZH%T5^2R2C5GSXH7u4&KOw#x(H`3cY*AW1AAB!)dsHIi&A%~fW z?meH+P#c>81v~y+Crh>Q6e=52A=m1i9JX%<`ew68#{M_`80V#Tf2Nv84>tVam9DBA z!3FU6PHpqmp^71Usron3Z>g`eXER`XPM)^sv~;h*;F5k1=(y~XHxIrO^Q)qoyWB}Q zv7`He?rb6$z`~YJHP+3%R6wdR&x$248>%}>M_i2zvq*Y1x+!s>8X3)a4<8N!YOU4A zT9sf=PJ$-`$+^>yM6bq3#A*&NzvGIEXY>g;+;@7W_1EvbXocMNd(`2Rj%*;Qj%0Te*i8~< zXnG}y&`CW#Fj%G2zmyG#Iz&u=LN#(;k?09`T>l=(0@#|3W}(mMv#C~(5V_(N>7cf` zQbTI+RE)5E+e%q$NMhb(;)~NIwZp&an+ob4R$5m%-T?rGHvl_7W*7kEhYIZ)Ch3-k zDj57XaG`*;Im4(da9>LfWc1(@Su@6t zaW1tjkiGECXg010zglT_D3Fb78SY_p4bTMm7cZJ-?w_|af5*+IzUHsXM!b^-fD8Z~ z4#ho{`l?fbfPTe+XxAgVfp{<$-T6^1w<}f&(y&yTi4CvHah4howYgA2It$^<|&wsSeq&}(mq5I$@G1DQ?vgPO$sqp>`&>Y+@o z>((=MqklDZjkJxkBWNj8xW6gt_+1KQS&wJS_Rjl-3T{?g%y6+F$%@)^gu5M>0PdIZ zU@)zp&Deo`u880UnUO&dyRI#cMts4naei}7zn41^v3pRzqG2YD&fxI%$pMY3uBDt z_Na29WmOaHL$~9d$HKd6HO8Dj^y5I7NPr!qBE$S(?jK+=puWTeN#32l|LE~roMw9k z1=d6tueEekfB~5idv!T^jQdxqad)ct@_7p$U}-LS(?p)brE5c=>CXPdSsX{>5nW(m z^U~Snb+aFmR5;>e$p=IKk0pCboBB&TUC~d7O2#~>fL6+PLYA;R{*5zyu%}M=ZdH&~dU&pOw@J-qA zdduusW`)XaDF4WYe~A`VtV?l|$cq#X@LVWKY*Y-+xj8fuz||a`%&>{mCZgx7!SeK% zeSp>gllOFMY&-K*@jCR%`J0>1`+fNisIA2HpJI<>?Y`sl`e^hu3Ahh1W2p!9hD{Hc zUY^(WN?P}WKiG5tt7mLS0orjr4JF%z5K<$v#x&nh4xf#$c%bO2eZx=w2m!G_ES$hyC3ua6VDAsij@zfwH8zf%R60s8(Xb$`0Hz3J4&{OIPW0BWciAEcvI;cBMZ z(AWxq4`My2g~PIZVs()Fbgm#kt;Lk~)aVRRCvb|YQ?1440;W0sTcEb{ zFC)zYR&(7;8 zqif=L@W^mIb*^hWWjoqg=K+?9abgUqn1DJlZ8g*noJQxFp?!-IOgTBAGlNzGAebiQLgV^r=5T`(B~wbl7EK(=W@9}I{48g9v;%34c1DG#vsCc5&^xPq-_EQ*X-av z+^HZG*npJ24CH5owkVIJ>OpWF^jr}Bvv$D>d46<#wf0R|wQLqJb{^XJHUB) zeJouG^}{gAhlcZABEJDoz%bc^H!lKmUy8E{%bqCHdZqde)}kwW?LME{%6nM3hQDE# ztPM*`^Vr0)JC^AHk1_%tI{D!yp8c^RdVJ_pf{19gR3JnUgH3e8M`(@FcV6h7BLlVH z)niV(Sx(CjX%0ZyuRTFbjBBhI;@7vSIB+^&TUgVUa~Ja-kADBKNp>h#Eqj?{S}?11 zjaA006%9{PGE1@5#AP&}tG@pz7tAa=Ry^blzPcSi?!BsvJVuGN{HAj@>LvE#*T&6a zCVQ>6<8*YF#sYj>W~dK#x3!X&=eFwHTh5;A`+mCEIOY!+EaaLwq7CE_lLMuCUMw8$ z`0K&#fT?eOi3Zewym@$4rs1{xzikP4nHB$?q5_S9SXP+=KaJgDnlt+sB$&2S=dV8i zNd=Qc#=-mbB=0(vDcnL>BOr&ZanBLs{L%aw4aVv(ke$^GTu^7Y~W6xr^>u- z4}Ys$dlUb`Rh6cG%>}m{boxyDwr;)R=D9@wW5rfy5`&dNH^GWKL3{``t^_Ck1!U+= zybx^B=d_Wvibz}DPr=ouS-GsuJa}fVOaXI&1yHEAZSb*_&lL%Ed{LsIoR!!bmx^}i zy*3=pSQMMo6RmeRb^nYb;&;-*PJ8FR{NuGP!Fsi~#NaWzQL-YCd$Dwcl(I-5>0B(V z@B>t(_b!ETr~%&osNAT~<$1#$L;JmS&szJwWzsy3*V=3smzcHw7_dONOdwKvWBum3H zp9mjU>-r!*NfRXNz+YzpzPXFxGS>J(K z>7vh$v1O@=I!+GFkV0?V;|_0ZcEu!cT2;5EZ(n@I&1yFIF1DOAA>XBFOnhA8v#;qm#&>ydfdl4A%8(>@gVLAf3h+>-u5<-LGd2*<(@t_W5Vr^r|Ya zKs+#kAVbA$-=jMj%v-5+* zSMAeu>FLA5QtGnm`Zb2znL>%0m8e0+^_>oWt(QVb?RHIJ>_im7nVo_yDS$Y}{U<3U zDzaV*GzTeLcdsmgo(H0!`}C35hFzgPr|92;|QxuyvY zN$MhD+wvcLg1Z(Kh>HK=vm}APle(jL7rJyV?WU!>YjLyUayH(Dp3v)spKSWt1PU|p z8&A(VPbA;np9RzMYDX+ujq1%m;%If9Ay05t%|mZ`lO#h&=f0pA($l&=%9A#qcdFg4 zw_S|y&V3blP1-^<({EyzU1KWs`Ys}LssxPoOJ8#mYODR$89Y~hJ!iF1b9#if!Lc~GVykaNa27&azWtK9 zfYo?nMM`Y;SQu?N)(DYmkR#mFJmt@?03lp1NvRfX^K~CH!@vy*(iRx0_kG!&e|!a8 ztuv5$BZp&ZaR|-7DNaEm90Dy-7a*6h(Zn)VoC(~?eYZvo^Co76pj&XMrKOeHRLj)RA?HTFA*UGD7Ma5ttaItYEPrh%l`AQhPW%%lOLl>R-O9rO@EBaKpJ=xD}T@QwngwuwBVPL z7|(;1%>wmcrV|x&ATAXKb#(X-GCQ(iYSMFzX=6{^l)EVw(#Ms>5a#_61~fW+Sf8Tr zb5aflSnP-EN9>e!)({45M{XJ|GLENuoHDkBPmE0b?%rpQ3BBE6D3Iqx@7dVFm)4u|T3DdkF?*b-z%NooUyUGh3zrG9X1O$^e>|Wjp96tX@;lA~NkPr1a z%HGzx3#?N(+kwmW8RvHuPaWKth|)EIx<28s8ophH*rww#I(^}ZwSMbFPTMX?W!}5D zowhsX&2j`n_$KSFz5TN3WW9{A?QBwmY@F%xfgby7_NE`h8*%Fk=cZLjka>YTkri}1 z09DlsnU4nha7({BxYLsmPNgZ__Id;A*OJSwv#w1_yAiOjaB*=79z{7UclkyZny_p` z&6do$xxGITdn#jDE}P3c2kmYm#gDhOaS_q{iIVG27DG%^55{?D$E6yqe)isl!JaJ1 zq9UK$+CQ9Uw8bZG)Fks2UzbgxXge0pZe~(?PPrP3k%~r{3?d&*GtvfS$y9fDv#cH$ zt3yAcJviihja%+U9@2b-r{?|`Mkg0{CC-y^?z4cb>Ynx+oj}Tp(VeD~)&ctC%UD!f zAI<5g#?Z&UxOmI8=OwEJ0qs!rwRB!|q;(wVAwTkA*@dluo`K4qGJp2yX%F8a=>F<@xgme5p|p3wrtB9rf4VU?s${kenIPbVVX3bnWnuGFm93nnkj3g;BS1kze`WQ<3pT9 zfk>SIDy*Z$ORyZR!CwgQuv`I16Xh9ORmRIiR7pzIT^E)-=?02dM?kBZ&YW+YRGM?*Yw4NW}1<&;JSno9*vau&9 z#W)iZR!R?o;}{W4CLdrZ@F?kcL6cO}L2HAQ*s*?bn>qB&#`PIHZ_r~mO*1(mzr15o zoFz?oW7a(g6;9g`lF7p%SDa~_sBTr}q9ppc!>eBF)Xa<-YiCB1tL;NLh!qs$Cj6uH z^DvApdXm?TR$004I`#q2MFF&za!)>&GFkdSn;iX4en{f0#_1d{JF*@k)-f!eWk{Z?c8koNL z&&S|CGq{1Is8#p9Jm9^yCT)VMF2xZJuby{ZaW_!%W>pj3@|@9^Vx7^vi=GKQ;VmJ& zp(<}Cs_x<}Z+kd-Uopl(I{sxPY-Q1LUg5Z|sn@ZeU&2w5V}FnQmV6lXd_Ys8dUPw3 z^p@7HPrmcKHoxdy2eH4tUHEmVXFds};f?MfevH3n7$1ae6&Q6wSsiVzxSrTOOJ%PCD~&PDUA35r%p zBn50eCp5_KCs#$t8OC80w{MQ(g_Mq6h;yBJ&F_!p&c`owIe(R^4K#2&p%_UK^W~O8 zzmzg-xY|y9L0X`;EQ=weMBr#M?maHgnf|S783TLc$iHE|um$qI3NTx6f~m9%-qPGt zjD2F2?YHqrE7WY7?~u@Kq!Ax4$S+t*_`>L5R%%X=`ZY|R+vWTsNy5;&0+q%?#p!oG zG-hVXTVZDTh7edM_tBr?S?m*Iz|bG@lcsCTz4N}3EFsg~xMOY%$Xxv)DKuM?m86p+ zZ+Bn0F6B)grNY6^eWHGGrHg)T7Ad}zYui-dv0%+1tP-)!vcl}R2M48szSeX5QU;0Y zc*yq?&6az`%JS0JUx2lUzM@}muD-Knc59_ZD8YmK3QTI-C^3koEuPf3UE%j={H;FJ};gJ?}=B%Xr z7lu()2J}vQ6BLke-u%^=M=ky@P01V1A@?!>Z}>P)cUfxXFG0@Nm+{65+kCW3Ut{=C^AhZxpj3u*^pcOt%CqN@vL4;l^>4#%pokMxzwi3aKJoF_l*zxRy!gS!(4md9|o~i-wOUADbl^D0VsjE~_ z#@{$kqH6k2Of2nGR57rISaNH)#bAtIh7JdsyzRwD!$2Raz;+rBw9a4ZJNL1arfkuk zM70}0(1)5dCR2oXWpQ6TmNAvc&@Xz08XiNvqOo8vNaEMQj9hnuhb#rVrORJ3A4nUW zsotgH-W0bLO&x(P=aX!~c^r>|370fc{8rZHFw9v#T!sY#5Ld{~heCT$-67K47QuoEJi9ce4Iq0^dX2Wh3q# zhqcRlOqs&s#cAOE^phqdmmrhvtzx{|8zCDpU-VrTg0WHC5Vm?-FhLsp)$bv7;A+%r ztbC-P+^?ASaA7IoVpm}RqB$C!7CLLPGT@|&EpRK-8)>(;HR-SuDz9yDwbJ(NZ@7Ks zBG~Kwy!Sp>p9Bf8|4C#W6K7Wp=VATy0Z2db(pZ`FTS{A4XAOk9NtdDnI5o+}tTn@w zvQvi0r5*j8M$jj9oOmOVj>*R-XB8mMC++J+f@$W98(FpHI2s6%<&3{6e!8`>@fT9C zHumrlk*}dM>{|};*mCQ%DGXuzSL-=;H-GRlt$JEGb3f4#yWJ{6mzATVfDHc??g5V123^mx9HI`1;^F6V?TlFLP5^)ey)yD1g zBx@t-f+5`2>XyIWH-w9kRQ7D3Y&L{o?g%0dwYh2YyT5>nAV$kn{}eM_4N~O2PEevz z{I)2PwKeAdPeA(pY_5zY`T5(_VakH@1I-!>giovqD8uv1FS@B!-rI%j zkjaxXgZwpa_^;dphu_A)^HG9o}+GU11v1R5;k3UTs? zqr1?1ZXx8rHAL#JRHnQwf=cME3I(~<-xj@f8cE(Z)d zp{oY6&Dw_3+1>L*7~4ApL5=_Bg41EKH+dJHPQTdr(>)HSh#!CPwN+>P;K@(Se9yJu zDn6mtrAOF3D^e6fr#mbfjB0!6Ur^TaOn#NsbK^j2MrY;e0@xGMRsT8;Wa(GY4!QJE zrPwK2toeH^pzc^}?9dpkZZ60Fe8|-{C*>)J!ziIV}_~E`Ibnug;VS)#KmyA z%FuA2k&q_D-?C23UM9m5XZBpv&i$$Hz%kodq6CY^WUk``yb1A9RNL8Xgx#}`z+1lk zu5ySYE0X^6SjX0q>fG&iB4%CyKkjjR(z3Z?$`UAC5wTU?CGMh?BiN)+TGCS_Mne-2 z`XiJLB%Wdr!{nR&^o7?1DwuE~&77Eu|M6*!u%R;2ezGuu9ng+T5Ets|nxfkvuW|Xb|%p7=9TZmt}@8-2F^PSKG4&udPqR+Xm*$`oTdD-4;$$9CNKi55t-b89Y zawo-HWw^WG>0?2yofFc9%8|xoGI_G7*2&Wa8WijbO9(3HAjIBQy+})O}HFPQ2>i_Tb&e;1&K(T|Q zY5GCui~s!%Zg()Wm{);XlZ}%Q85G)qC~-g`_V9b>1sgScf-V%+N2@r$E-LF>HAVM495%ZP;IYSLEKJz z7YriNs%ag?rt!VQT~Y;zl05-4eTe@BlTtPgARSYBtwhBKGb(Ng10M z+d|BJ1bB9=rMzi=HII!EhB=(uojVKShuE(~YJGx(oC61MZn^AacW;lTel1IKbg2s2 zhW#32N}$yF-#O1?oJ$IIKTq?IkpCn0U-Tl^H;oR z3l_NvxzYjrzJJltwhpW8rhUv<-`V@ta_kh36Fp$B94s8^CfXT?G08ov?>MLDkMrlA z_Ee6AH7@=#2fg8-r>3vzs&pb%z)Al`v*4HOn2tcMAE*E+J_)*0daXO#g-)GviSUy{ zg-=S2B5%;_9`|qP`i%y~VickYVJUCD=C17GsiP;qvK;>}N-x+>h)mk;^V z62leKj}^?M1~a7=Z*VU&_qjK(G0!<>dw**WqQldnWdZU|1Ts-m$zT>F0SIhWu_nCN?WrW+vX~ z&+Gr2a3M>#V|G$0+?8PABQ42ZGGzM>ty>Vh4*=!w3B4OgXx_VUhqQ`HTWBKoz6&aw ziXc8&&8`sC^(=`^u+~z5P*G!NSFAqR@Gi4qz_9oASpSYC^SXW^_uMegY5rDjU zbZWoT=)8ixq`ClYmg9qsd-dIBQBcpOdINz)>D1TE2LGIG$#)fep-Da0_u>%y-xPJ4 zutX5Z+bF>4==jMzCv)+(JWiwO%JB#y?I6oBaB<(?6hJm38_1DZ#pen}YrDC4VR~{u za3<@tc_+o1Z&@(Ht;?l-%>A!P@YbbQ&mM&_hl~Wvl#6W<=yEFkmu$Y>q0}sD;8k0A z|Kas*sKz>h#epd4o!W^r|D+l21g^KyGBWPW34*?NazL_i<}bZ%Gi2!kq&l*9P%X!I z#>k}XAzE7rQYG9}p*{XcViy&qo{5AUoJOeLKJ6-KA<9ms86|>p?&#bZQUh_wO(XAm zGpH!6V^ylBP*hEEOK*AJN72>rwfa$H%}X_}RxFSQu5TfzM~Kg(E6QOb&lw)Q?%NKvTIRI65Dh%-7wv^yP&o zP~$F5JBQ%LLl)@W5Aj8eB(-|sA!Ggo!=I89#{I3|yHHSyDdo;RMmqCEeMA3yUzBWL zkgvH|_SAJ#zuNi!Cpljn6c+)Qvt`4qM)=1j6r}`LPu#`3XH^){t;5v6nDV8WIp5&P ziP9-jXc+y4&ZTC5>k$!)#5~3#9d`;Yw$$dN4O`L2r0r25$~1Igj0c23nak}PM@U5! zh=`|qt78YY0=dK+ljlx?_!GhXT)HUS{+xW>~rl*T;BH%HE-c0(tA{ z*z!_tF&?j)i+3f)?3N0qXV%bev5+{95Eiix5BsIcJE9+yn7#o6mvcK!8j{u?<3!52 z;>B8n-Sg+j_<5z&j6YIJ9sJDueCGCv_iu`U#}X?;D4u#-V(&imy&-vS+oBhtM_Ldm z2A}G&kFMHHb_Cv&nHi99V!8rr%i%fFXZrSrh4U?*oNu4SNX*ZR`o?JX?up}(6UuY2 zGj}zBwhAq7JnewnUzo-%Af~HGmQQ__bEC<>S=s>ThuUS6pS?$-XU+{{W;v%*n{H)c z3s`qAryqpjs70rEPw#Dc#ZV8iFe*7!N{L*zch2(^_o}RXS%4T$c|9 zMV|xmoy7iFDDVz*vyHyd6Nq0iPy-K~gHaV7BTjmkU6{IUY*|#^QhIW1QH7e~Z`42n zzln~yhC24KZTY?=37v$;Z(LqS9Y%oC3WfBWH2>CF0~vf+7W?0n;>u$j_UkuF4PedX zCS)%2D9yyh1b=ghgx}1KJrvx$IgfbGL`?WNan(G$xa2M;(hr^7pNrN)gh9{Z?^BbP zVi{j5Ttr3_ASYz=q$ddrGmzUI3E~@Snc`#4p+G(YY=lR0&z~2Q0W9IynRyOA9}n+M zYha@(pxj;_(cUp-#N{+UXro{%#NKk`lt%JT7D}~dV=Z#Mud^wR6F=d=Fb#3#yw(Rb z9eTGPfvM{G4>bEcURJmTXZMrcx8>B;&2xbdZwhc3;Ez$eSqdLn`JaJh_PBfTuXEJP z#VV%`C`5_M?zT`qTY?k2dR8N|^s5m?W6X}@NV&WMw|tI6%-u;jwpjCh+NOd?pj=&2 zuZOcpPJCY$Ld+MEG99QC=fWbCHm0NpqC{OVvUXovNk;Crj7(W|HdQpM6Z&WRp_3ar ze`5XDy57zdVT5XfzC1lcJxYzxh{Ou6o;C=V_~G0g?mA}5c55<0y_-|oM?WNH_7*$% zC30Oe)dxAp82*~$9!)LXS%u_j%3{Hc^YRrO@FAZ!=VQTGz#E&3%LoHc32Cx%P$@RP zR9P=O(&KU(dHwyhT?k8C%krz9U#14tUDGf*D)MO>)WsLp0eIg97~Chw*RTq;pAs{R z^(0!JFCd=#o=Q7%GdcSKFN;y!i~Vb(G>HptDdvQ@qck@&zwfV#xu+5|tg7M8rt{l* z%r>w_GmnQh8GX*yZ6>a`J%7#>X6#64{UxP2Sf7ml0;!iy=RQA(CJx*=we@nvsR9+- zpO$JttLcQe$)KPt`OVP68yAOhSS^sST^M>Py-Ey06FcY}E3pb3PNYs32u|$|tX8OH zVIlPY=iPn5_U*uZ*pkS{>P3LNe;X*3L!qmYm7Nq%MYdo9&R zJ>~b%0FxYsHIW9SN&p?ucU;nVhp|QPi2@x_h%Rvj1k@Gtm`2l+!;sO@Xj+_@YQ>KDqm z_{9Wdcu(3XGC*ukIFW{z;(efa>Y<{))lwJ**@gHNcTKOV8L%TDp@AwFN0ZPq8MFmXfODa=N&onQ>6@LX4GjfyJ$ zcg2ey)=2Z^7>)k1$7c59yUyIk{*H_aGOvYc#NG6@^9#RB)if)9d~K{P2Nv@ZR*k3DpA7wQI)(d_A8j;@E zAhiefImcW$f+KsT3BaNvPtCwb0E=KiW5VtA2U8&VnkTI;s+^V}=-+slI}Xc}H(Yf7 zjo34W3!i2&X1SO6hu%mU{76AiF?&#D<{LB?L@UuhET>R-$SeQ4yyOo68vzr%AcnMi z!F^)Cui)yvaO{9F>Rt2t<`|j}nUx;SxPp%@N~6h-VQr`CSp$@>U9=Hxwlvmgn1h^`a!w>0Y&6Q43(h4o$AK&%uH zVbYK&b^=%{tS2YB@(s0b0C8cFyK|wo7a{08iCm&3bQWQw+85m;KY_;C@Rd6G*TtUQ zjS3oXO_+Mr)X@34xpl15ca7=1z-=M%H!hogfWLtB$NK(+XbMY(K0JeffUisF8Axpg z0%i7@u)?a$O)WG5qH1YU$8;>ajoV>?iXd|LWiL)^7}?xdwf6hcse@ux%oJ$qqhzJm z?-cE5w|^3EC6=V1`?n|Ix2=G$WpeA;wA!|y3z>NVISNw<%;(h$Os2csme_^Zez@~} zjQv~_k&Q6^VBNRJ?HIO93e7ROQ#4X$9r+uHRj5>pHafCc-A33Uhmza6rUZ$;Ha?f=j$Gj*;{` zrp~iTRlNwG%WpQAkxAP9oyDvn&)cOiQB(7hzcjyX@Kv+%@Jr748nvw>L3`3nnGaqP zxl^qZtEdUVcH6`R4{kVgJiq|r29Ba(TC2TH^}qYIG0ei()_fncW`4cr9D8_86>i%gA9;xQX21ci`$v^djla2o5fWy`@%FQ^FGB90Yw89fY_oe zNPm!RIyY2wQ{J0-AWK`kYyeKb7h+3JxAG94&QyY(A^@Cb8ukUeuGohshOsfM7QbuT z1(O~B5LtA`tU0Y*ihWi(d*p;ReJAQN148LE_S{?Gfcm~E;Ag*iI06WUU+PtzCI|V! zSGP;xXT^vEKE#=V4o$}EW2qux&bmDJxcQ&FokD!aSpOmdN=t0W0nB+$Abj$xm59FbaHl)h9r ztUvcLxj?b}T1EK;57A%*@&D-ymsI*nZ>(}+0B93UK4R~qB~KeX*Vw=Gjlf08fSy6P zdKc`gdk@yUOb;ghDVF%dvS$8QCfnk4X)`(lL`dYajU+wAdp7ewn1kP;T*juam4T1U z_P28Enkq3sP*9F^K+$jmh4_5$nyyo{Yn99Iq5Rq>&(P``Qy{^h;TXg%a*bGicl0Qt#zC_WTnOO^%_=lNi1IdJTE=FGnU zW@5VRq5a3H{}1mfu&rwpe11p9(Fbs-j*?TSneUn}ayNnI6xT8<^(d{skXV7O#&dF* zova*1<239dc2La7Z}IxMMu^GPr_VhwzZBQ&W@dpNu1{apz`>S1^>!L+jnwZLC5L%J zH;$)hH?=yR3zM)8y$`sp%XvE9u-jxy?tvv{(NA88Z-LR`^n<7_)6AltoK_w^A+79~ z{q+fV-Tz-1{`)y#-#&m9FclSFVj=jU7xlGvbhLB3(XpM{ zW%XER-%xfsHC-__2}B_-G3$w%uIlZdgxx9V2cOM#HoIs0o(8MNnk*1I@i&=2?RX5DNLCB#YL{Z|n*x-N_RrS$XzIkXIwRk^`n9v|Ue)kh zusn#|2|TEfj`qRzcENO)(*M6nP-rTQx>HNDS+g&)y!0mp zD%AX}Ruy+55&#s5P;Bx{cn(nNA7TgwlU|;XLz+kMYJYFoob|!0!lBmzVlfx^(PAur zi0mt-4gz&h(4m(;dRf{bUo`1>7ibBFbBTxtP=~H7))DVSdip2g?cY|OQCudyQ3}VI zDAWERGIgL6F0VZ?FIx9mIQ;JOf5mrux^YVkXutdGe!2kd`1iNTBdq@t4gmH-{uiPW zAD4HX(XDX>P}`4!A%}#u7=UGXTi^hwbqfFw)b*Ny!6%JkOp7a{luZ{fi3KTv1^X=t#UC<(jH zZwBTxBlK767+U2)Y+AYas&jzT(aJ4a;FXKu?IKpdCT93Liemjmfl4Fa!7`n&W2 z(C&1~wYE)gF^fPeAQ0B6JU#Lk44&?PMV}+L4My0XcD~@)6efu3HtAO33Kg`d(g@mK z>gS78lK&U0BU>L^NUADf*F{N^w(S0xKl3+@_*7u+05K+UODfnE56xLq)fB za?NkhHrD!`!G}qaVm6;iQNtlI(W>Ny?|hE!d8*&k)jke6QEZFZT+(*IG2s{ILL{(< z$7k>Wv+k}TEKaQjmLK<4l&P(K%xdOmcA7TG$PLt3Wi`1odq)g~A8Or3m~I@*;}=`V z*K3PMz2%?um`9UZPE;6`mfaa5aNqaTJx^NREF5_$!HlRJVt+`!`CuuO&1JAY`znFA zrZ>O4+Sb`+W`P(hfR<`b0UX@JFu)h3#PENZB&rS&P5)+G>iD7BQiL;v%#E#V+Xeiw z;4ymEoTXw4zoGv37in%*g+nJTeIN5whkh#Nbe>5*Txr}s2Yr5^^W8wm-jbPRJY4_+#byU@c zQz^Ld<)X6r$HrM3_gC9zEZ2?T?AWuu&mFi%_8WZ*%TG#oN#!9)jG>+cwuf^U$;-Zj+ll1H2PkY zz=%rpaQ92)EU@1ZL|*BoZFBM?woBR~OnBp5q6IvX6*3m&c}L;1V5LJ}CGKEM+VVn% z{{dVhH0j@GLRX~I1@_%p;tyJAB+R$7QO2Zj<#k}_4tUXlQ5;-E6M*bl7J^?0~2# zRighhv~T~q_|ms}0uUcg*g;FAQ@yIhXy>N5=HsC%Y5Og8|99^ZqF7P5o(*@RQo(G( z=})GtZ#HM)&OZ_4Q{f1bQr}T;4_dyhPZwu`Gu?*Yi&vs=S8kPhG~5T+h+`-OLcTCE zM9RJG?4|1|*QS`B8j}8W%>*TiHUrY&-HNZ2}Yg4!oV+VM~Wzoq>S^h6pSV{h^mk!V* zURQ_4Fta!!B2~9wZ~BQ0-T}ZL;oI9~9dT4JS|FMy%F%UXU5NLhJ*vv~q;DYoNfNV8 z&fw)w^TCk*2m7Go>vEU3q`lGa4OIOuAlf0E{%^HKH=YJ%{B=U**OW7~3W;x2e)@dw zxfZmz6U@VGP5Srv9Q;?sR6bbPASgv0XG_F~`{KI6>{7byOXLLRzbC&|{1V|$^|!Ou zF2v^b2-&w+1c#>#WcQ@GG_Mp6P`7@xSR521{|8z*?TZny>%Rt TCt^s@r=Vfz1g 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 z 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 i( z_#*ZRh`aW+mKm*UZz6URj-xI3gXT*fR3KjAKOQ>ehUC+mey852{lBLC#zBLa$3t~J zE8S>kNzz4&R@v2DQb3lXGdE$^2DrWzU*i|iQgqSYYy+0+>E|C9%f8vVlk*L13uQbU zILjf|lPQnAt?8{gfX5^}VGBs9qmEq3bLmX(z6q`p(62`4Y6Ec@>=`Z4sgP0fr5;CG zvt{hP$cWUxCSQ;d6;NY!MF)Gicxj1mDpovXD=+OXMr}x6LUjWZVq!Ns7IkHB0LuM*y9DOgtdzXGn3z`B!@a~cri&f^%*m5k;ms89#CU?v- zts{hxm6j?$qexQ)yB*L7^3T>Oak~DNJJLIXvkz=~pgH2X^(B^Q@!TRlYXT+a0^e6; z&bDgy<)rJSf?6TZq-I6tLZ0oo*ioCzg#p0i0qoS9%Iny*ecz2iFkc7XdD}coJZ7X-M6IjG{z*%9v*x z3C0$S%j6t6j`&nTT%o9%kXq#|-Ru2YS4)V`_GHt$e63+fJ!kItq?x}UJQ^r+z5bn6 zbw{u1a@4Q6m9bAs>c7|1v{shR_OS#r(RsNE&&Z_mk+ru2ubGIty^R8mk40__6{^Zm z2EBRE%R%M4iFE~mYSzk5QJrx6yFDuRAFOviI=|O`OvrS3gev-o3lZs> z12!u@S-$hsJ}yjfml5eb5$0#NC-H5CEKMx7$!ePTs2hy#X~1KQ?^#%Ac+OA4LY_cg zYOT_q^oy-ZDjkG%))^|C59}vPo_fvcGdkaD3vL-A|NT2m+f6_% z%@FcIi0~HF5#A|7e?Wp$cR>b*-;fdxJX>n`{Un#UjgZciEoAlquBVAhRC-Yq{rUTi zKWR*tm4TjFlDg}mwaWL)8^~P^*{=f}^7+0^f6$Sv9fEwPmqw;M#M@{TXx&v7XDIky zd?au?JbnI8w%=RbBC}P?txdK2+10;Lq#f^-BD&veB70JS{?-nHZ(Tt5n#QGb$sMr= z>4St6)gC3wJJcm24Eb5eA}toOcfYB#(kf0PbSJrq64aXXaIG$yEQkxz90hLMzUeZ5 z#ps|ce&HD9A9J2T1OZjgUOeyh9;tu-=L;UW)T);A+6{DKU7A<#aEfEYnv^v0c^~j4 zDR}WaXbk1aJw2C4p5c@dQK;B19h!7vDkRl-U*I{Q!~1^Un#AQIBOE7m7j%z@WNvWK{ zspoEv{axr{tu2}B^BE>l`EjY9wdugXv%Bo5a|e$mKF0heBy`%M?;0jjUQ&AwaJxzF zRIW@`&r$svh72@L3wJwsiwb_uh~{(UJJS~lH4$~pTbYvSQ@X4Qj3hD${3nN`ngpfB zLp7@!G#=+A@qAe4c9|m`k4u6Q<$zt_up8c!1)X!UNiGELtkQ-Xho{i;M7@I~~ z+v}~|VoJR>`L!xK#*_0VHVKo{r$^^Fvt7UT%q3H(9{e`cD_uL&472w249DUQ9m{m& zH__BP^4Q|#@omV*KH@R5}4A>br$z(AtOgG%EPZU{V5saRcnG)8ZUc-vu`Tper zgpOr!=WxL#oVGn3*<)-*EnibH)y!w>H1MKH-6(so7|(_Hqk%16dmECP5W=I#td4JwU2m<(6g=z;D}RuHDOUQ1i164T zDm#_o2&!jyrBeU1Mf6BNh%y|P8hA)$?IV*_K7aBIU&($p?MFxXk|!M?S1@b@@-K_? zHU;&sG^(j)`FLnUsYBtHtN7u59vz;chD>b@b7OgmL^e!g?Br$#16_YawRnf9WSVO< zBQ`@!?;UQemjWK_6jP{bMyv?WIwFng&`#?{O-GHrK^~!!1^_um8GOOqC{7b)yY)4s zyPYU|n^y0}^5YF&i3V9KVBcR)y{}mG^=}i8iEdw*`i)tY+u;#i-JTgE@`el9k0A`0 zOJlMP5%*M)F}FO3tW|ZOPpW!}6{=B=yiF9EOO*0#`)u`FM!0^8(~fRZxW5l?cgxnP z9@$o`4^t|esDST1k-tK~rX%9C71T#s>FoO4OyqEl>4-1k97we>Rvh)3t9QR6t?r zX%`w!!Pd_->?Y#8@%pU>STeXh@TO1a-;kMCQ-&t)ws>__;LHBw2(QN`VOQaRVG8lL z&;d=GHHBvoDcX=EwWZs@EM0*b4d@lX*LSK5D<|Q%d;JuoLX$Ks*g@8^6j6g4cIKW$ z^uJoG^rum(KX_Iyo!wd$GHm@j5;k7kSkEcaiBk}k(O4@<)|QG7G8FDjJdM;^Mgsm% zPG@WTcOEmY44AK@Wml~%@-M;LPNZYq#9C`1iofpOEgHQ_H7 zvG+^`*sv75qUFHlPZ37XowgX%$JU_x6r*mY*FaLTLj{ftmd_5uC`Dh`9-oL`tcysAZvcz-`nnlF0?EHNCet)Ebjp6SnoFmNTV- z5tiDN>NGLIHy{ymKHswW9vUs_qYY>9Z28(wM}Fp>+!*=3zeHvoww^9IjYA@HaN_&mPNbB z;(qFDaR2@i@gkRd$9LOGJS7w1r~e>l5F@^pNN$}OFvygwi)0aR@y(q5G>?|Fq})I@ z`(4@Ux6+#Y9AFYy4}FRc-~SG{whlxFq|@I#+?16|Zn@6jQeER|R{Z7B>P-i_xX^E% z_}IjarO7kq^ppwZ71_IswYh!-d^|4{)fnt>3V7e z4ciFBv_RUBJzk?ywX$F}vAdO7x!ucgS)I%oE7;H>Psb`0CRMyA6{t&bs}MOW@Dflk ze319=gqg+m@6Ib)`#7BydsZma_jTA>#iS+cx2-amuYA|4!?QQ%O!;mKrX#8`TEr`9 z8*elXrm9s~VkL{k5f@Cnccd(GjHYFx5Li$v%J^v2Q;P9Mz=+xQ&m2D9Z1OIzxetAMk{;_#ceCE4)4EP261c8yri(MZ^^yD#Ul(}`&<+TEW?BosI$e;b zY-t>R^X<}o#obG?AvYF9I{Ubo8D(FN4Bt|3RN?$SJM#pO$aN==^gCCzbGqi!+i`U( z!^-0{H&30IJrWFm6K;hq)m!HaU)Cj^I7MHl^rU=76$HX|E<4GtfUgfUBv(JWW?Ji6 zAp8W3wrk98K9^jre?)hGDWP8X-)+fgIUr*MHlPlNfC!ke13hy(8vTaOKl8AO!z#g~ zoix7FRCu&<1G(910fpp*rMDHSX;PmMbGs6skAHD&%B~Q=5tcNCtW|mFkA|*attxpy zeXOD@y%%O^pn-UD@YsRmhUS`bw+14FDIeJBoId5$a`wn9z^UW~X?0VTRzhqLY{RG> zJu)9DqZfYKWyM`*n3}O75#PBG`^53oj;SDXz5~MS8Dp>RpApygqXi_Smvjc3gVr`B zp-Of%TJ7?^XA9s;(tSO>vGEnI)t|XDUMja?PefgKD}LY1@8U+&AFD!y;S;BLOMPKR zCXdJlquHOdrB2~+B5fD?mcVafAaV%rN!he1kP73vc+{sx-{sv zY0RomeE4tsTGQ)w0^+w{CQi?v2J0y3F9>4J@e(LAqU1+jh$t!ZK)sR4hl^=B+~(X*rawDfgTF20-GwS>Ug6hs(&v&7URV&V2|iIwsqUkm%%z$5q`fMLJ2yJ2 zje%0l&kjSH8){WrJ&URRA`dvX_?`y3wOmp`z3SXvz6#m6nepJeoZ z5YB$2ZyBXI`Ee>-CHVz!qMuX340OG!^@6Et=Yh7`Kf+GHjZzmB6Vwdz4e{Q&Da(BM z7OE|(oM#Fahz0#eZwJyqmt69I0VxvM`yjJ&D$|=;mKNppTqN{BQ2S3hKy@j4wcbv9 zfo9*4tK!*iqD*DL_GJ>~+pdZ)J;a3BJ!!2^#JLRZ@MK|(MX*W3nz(IY z?11tM)G6;=UW8pA6+AZuNFBzSt(V^_rCN2niMJkTn{v=-he=Oax2eN$#8r?hL5s-l z!c%9p5Bp*>8s_+>rB#D~KLZF2$2>DsmG}|J71k zjxf}a^xW(J)5`j|htz(rM`xlnp9W-A=`vR+r^T5rSZGpx7*2qwBr35?92}yQTi#iZ$3R$t>E;>!V^PHpuh6_@oro+U|cr z4%8_(rBiOaU#3h0!vu=^ipu#Bopp-_Qv;imwE6B)2=_RYFFiY9cqQOouvXo&uccxY zIV`IST!Lns6d14WLgcpV1Iz8##0c7%Pcy`q)ffXGfs{%hd#2Eg^&U=Whdzy7ziymd zgJ}ufZ;=eDcU$qRHpnRBYsqq-{ zHiFjbVKxizLeDg=)~RbmP!egVj_@z;vGt5JD?hu>IvJUS(n*drbwRtt{FXuQ+~^>; znH_zN%2Zfw9>aao-CCfn20Fl?-|4Fn_sn@Lh~)bEmoE5P=-%gRi4^K2H|icoKO~Pm zkeMF(9^}%{KMM;U7slqPbx@7{)mQ_LCRxj$$wx|4Hoan>!mruC3I|*gT6BQoTY$5pgJQ`vzPIn&Z-W9Zv5d8`$aYUq!wW5vd}U5sj<> zpgr{MIPd;c!@KHzbE6$0?<9HBu4VmYA2uGbjl4`7i@wY(S*I@K7SMrS^^q-M%j6X@ z20KB-IXe{5WmfKHGfW&r5Q%_L0mb6Ox5%#9j)WPNrb*fl1GYlFcgWKUO6Mfnd>%7M zVn1A|Zot0CS9sAd%GtO+IoiBa`rARXcHs$fTn7%avm{ZKbfKSpb+<i70mmdEBS5Ss&GxFrC@*Z_`+@R}2P&6RYpO?V|9AxTS+{#ekv!}AnA_Zq` zeJe{#y$KD916*06EqyIh+AF*2KJ{DH%dZ9V3UIEN_o>WqHB-F}RYu@;6l z)P+X@(mw#>7=45kd_3LEK!QYRS*7Zo{bA-5!5^jv(u&OL)804p)Fx@aHw-xbYUKL{ z(C!dv?jDa(s?z>M_v^CWjh$!UKM5T)x=B1WwDx9I;&$l0@0{og_-rs(k?Xxn+bb6X z+&Z2rkyw$#7q2J>w(F~?*qbW=`pmiA$0m$yRvjj38@eRUA#Pt(Gba{e*+WPZGJcsJ z5X$uJ5II;th8Yye1k>Fbl=*TUeD{5llG)h+EGVoUVbC&KmE#-ntEK2uUF*+7C6g5i z6nB^fVn(H|JF#JLw2FKgEXwR9BJb@LU&?8d_o~(7HjdAu^QX;1*VN@{sEorv_}^$} zHf)k->RL<>p(@RKAI!Hc%gPULRLGVFq%>9J)I@vP{dic!{x($s9h^0YeicQmi617F z3MZnV0;OLnZ*x#HeBls_0xBw4<0X#LIvftDQOgyiQV^b|%Y4quVOrld{Twv+t0`OF zePQusam;TqhN-fqbIG21rX_lxLpluVQj+)TmaQ-8b;PjzqmEvz0ZC&9refA3r_3779Vtzu|FW^2=2}t{cjT$*hjd$7)4>dRr-w+Y%JMd zXjzE?tC;EcQra7?bQI;}2_De<$elP=9xk)xx=uF~sz*k8nLz!JTVFvEGDpfP5Pi+m zOcWDq`QCm#9w&(TG<<)1vQtc|#DS!*pE*{Z5rhG$hJR3c-fdD`D~u^#br1X}?u%!?7KGIhR|;CQVuh#ZT%#rqV|scS<7WeY7C4_Cx2AVunb8xrn74sSAziF0$O9w;<93Go0%=;%OY%dC0Ux|w0`f|C-S5V z;CE7rvaTO9u%4Ml-zh_X6Fi2HLN$m_V@F2ZI}ZyHa~@1|ef)JQ!a%^45yaqK;IX>2 zd9ymA{v=#`r4!lPeVS|(=AyCojX%KhIrPik$&DC?qR5FmJAmpg z`vG>=>XVl$>v1UMjAFh&6Fjgy;rC-`DB02(OcJjQ@_ie9PIohBGnc8`10(`1MKUS9 zaEiuHxj|NzuxJxfE&IwV0muFI*3+2Gv{R)l9yl3};xQz!C4jSkdUvr|StA)+|OHRoycl;@OCcpvsNEcnse_JtDRK_Q@YIP;55)zz`fP)Sd)`GH`)-RMO^ft2Xu6_Y zpz0%}+)C_XShl`IuCUefl8<(q?#mqsv2xHR^c17;poF;NVlmZVdC9<_uhZE=C*Q}L|!FJLVwm1ykhMopoX*cL?b390#E-zPCq5n^*C5cT+sobZC_nOC#SZA|0i&V{- zu~$adfAu)jasOSiYqziHz;a%v722nTrYi9Vu>cNCNL{WlwQ31rh(3BiwqZvp5=I_=hd_m7>vsIGagRmKGzW=UsCq3t7NP5xuE*vGxLXBE%H$4?SZ`%KJh_yD3y9|X#e?i|G5pi=0lh-kBdw7eIXFL!iUK# z^j?$Vr3fO)D`WK;(|J5s%~{*^#Qzk{r1xxwg-XlAs4%JWxv&MZGek7g!a z#6oKw*q!c-h}4W=vL}qcaN7F2W+mKfxTnV&Yz1@k=d}})IW)os(i)bFPl5+oMPgg7&BjZV7KV?MQWr?&l4s=EQa4`x@3r&T2d(K#mwU>UI;EKA3w?id=oDI~BtL5)d?_AV)#th9={+u>M5d z1mh`Hp(KWW%b|)*_%ANEd-^CdB43o5#Q|`}G?uw4(CN+y=KAJe`k?E&HhB-tkZv>5 zthEy=K;*?dWU-n!TD@`+slY~CSh^M)H*WNU`q}dHB&RO7_0Drr8yXQ;N(j6;1_63N z2a!u%2i8j!2<@YZ-K0gRkd9#AQ&kv!c-H!5ZR?j799w0JI;08nH68s0i9G`ZnDEPu zHsRi2ue5&7w-T(U8bBrjWc)pGfF4GQ`gucz@7!6o@vUO0SUXVmdnUbPaFfF3h^QYX zY=f=0T3r~zu_tLT7r}hVu2eOdz&e@MzloW4 zlg)**r@d1Z$Q*2RDMv&wek$!2MOhC1zWJ-6{b#lwBeI(iM!Ced5mN`wCc*pw~eZD0D z(Zk2(vHP8=cg_+#orsqjOg2qsb(#W!bM8~dc_$mxrc7uf4g~z+occZ>+XX z)z>ldn0&yq=R>c%lJU--Jl&W1zKWfe&u^MnZ?XP0hg0qQ4n>}{hq9d$1N6tAtZ@C6 z+x`+(U+euP2j=W_2bXV3pE{z6$TLMPv3hJh+N!4*cZzTBDJnPJLr1gBuW6_lTOx_K z5HTXYt4a=sVcS^ zJb0ap&EyN7c`@Zca?lT_5>g9`EPjhP!z007#b`~`QS@t0s_~PyRSyBI zfjuCJE+^GwXn)hUeFT=~Y=6}k4-nbxhU-jN`bG@w5WOFn&hX94ed(-zl=W-@d(Kne zw&{B03cN=_5VSB{!ZMLs#E#)gK#^#`5nhJ%^BOk&YV786ivcF_)}RMO{sHZh!w+iS z<>#8IsHN4T>5aJIw%#)tyfAxOy+{QHYH*}ijVaj~Usjm@>2a0SK$K*KU%ZwqbsXvo zhiQRTKLUW2wr|F5bFQ#~HVEs>9S`Jm47Kx83t)&Rg@U65a(0(PJttermFTM;%BuP#r+smri?N6Et|9!a3_b-5qusGK$Bk%%r6 z+2Wb9I``Htqi0sNk^;pAe#Z9By_&!L>Ku^;93gVKe^QJnoQb201bNr{WipsDsQIRZ z?hkz0%?Px#_brr+;E|7{Xs5q8^z+pD9znyo?!5#=7+*AA7-A?mX(cl)L1Gse&H*c@i< zSgu*6THYwm{7Q1eqEZtp&P?k!z(VWiCd>BEMh*4?%VM5JR+@VMRj6CK#2`2CMT&IT zv%dPXx#t#1G-S`syrKhzf~k8voO-jMPMJ5rtFlXPGW<~tUoTm z{KD^u7xPISQoPk~)luQ#y&h57Q>y(cS5DF|**$MVAd40)l42-+8mi>9+vkkFyF)Ik zS-ldYeqB7t28}xrOZj-dM`Gl)jQw8JPyZpJpK)b&q(0ySe&tO%g{)B%nn}JDWnCEk zEn%Gu36MA|B^(U0(j=C*g)?LG+$Y&LKG=!6Ks|DiXPu8*2G-HIIT6~hIW-N$cce0C zNLUXDL8P9K9w)#*u++d6MSK5a8GIc;P09AmWK z7d7el!DqSx61hlh_{B!k-m{{fp_L?;oRDJ^V^ewi%q2DG#9`-9U#4E3I!OQYc6egX z&!&BP=hhMIBrP`7ZTuW%t+ZcF*b8ozlP)4j+q(7(Vq11^#y{XseR`pZMB0ev$}3F7MG_#^<(_KtjP2UtvaEiM@$^(T z$`!0>;!bNjTLoG?Laqy9#0-lBF|TMp1gDHssGN6PYPX~;&H6A7F8**lMl5GzB}>ii z;U^;^=JAQcW^Aah9R^+2YA`8VSC(dWG_RPGB|64uxd1E~n0r8~M?v99#I z>0LO1K*`(?Z?e8igJFVCLUY#Zd3z=PjB+3nnSHcxAHqA$yOhTqY8iJco8s45%SR{m z!OlxDJQ3GFUp<}4HwGQQkt*3&@z{$#;DPR$-1dstcmNY6>!0nr$wT#5=^;%y7ac*? z@-G+X9vy2>Q&G*-C$6kbt)1?tyTPZbQ|vM1X}6v2TdNEcfl< z`hpzn2vF^X(AmFYj$Bz9j9Y_+HRjS*s_%A)^s2TDnD9HQwHB3Z7g6xsT$!Zc&)-|V zM&6*Bn6*vjo#M+|8F`ik2^_fI_X8W^oFOqAbDGrm{n3Y`YRUNEP99O;4;D9-%N0Am zge&<0a%B&BHD>Z49D_3z8b ze6rf0#70RM&V52J;yf1=PB80H^i_pwJKmkarN7$a8pw5JyOt7%Ga|VYUl#D>@)6aq z=K;XapsBOVfdXe=1>oxh`Ry&K+W%O~RYBt!ZB= z>XI`d;+%s3E(oD@TE98OS>I~ME^EQ%AH|(=e|YJuBWGW3I+B%C!A;~?ONH?yFx?ix zutO!4(>6 zqAe8YJ}42hSuCiEw^y3xx8N)K7tb?23I5N!0V?M)04+y}zK;*Tntq+JNWAntM(AIZP|ouDbd2=W)?lSQSce+`S!b$@3fp3ymNf?| zw__l_AB^NgwgiQAd;LWP!_vIMST&}OHQQR1)J|?>+kPva|CW6F`fhH{-sg0v0Eamt zH4#)lswdg$E7J=;;-K}%C*;v27;5MEP8}lb3p&ED%`9v_q_Sk~Lv&0`U-*7qGYxiT zP891zE!V#bxE6v?WW)D=XeFt4eizp*xvzW@#2Birq$MTUezo+GMK+KNdkpcBX5WZ zFE&n#qgT(pe+hh{xUW}aMQwO&fB z#>f3h9crYC{TO-rJ#d8zlYIXz?xJa)-Vr?kPw%q!5bigyM3$#`_dC9zd2Ev0Cn0-# zZ_|OEOF4YQD29amW}TP37-=`@j*p5}%j}Aav$`UhJ%u!@fYCFJ))x;e5;mK&VfoBSr?V`sBcmZ4cyb{#^V)>Fb zeL|Jlkmm!rH}%jufY)tMK7JBIEA>}zN_(%$ z&my5h13yvy?~zcUovt;Wy?8q(#FGZOr~?*D+TXXppKI9mmMuapE63|vpyNqc#`;xVVWE@I10_HdZ6?o{8z(! zMY@5m&+1{gc>B*|;h+DS_H$d3ho8QvTbS+J@L57+>TAqNTZJy;_jOcYai6wuQblU( zCAWytB-qHx*Lj&pi9hdX16InpIu<1Ni3ZrmXR+nX4%j-uln*oU<9Utg-N%*l1+Byq zra_~9l%O}Q;mzp)X+k_i%9{55sZ#Gx&?Mj3x>-nd4&v6(2QwyR+TQ0WTZ^>~Z)j{4 z-s-iyBd>U$wMG_}B!d^xnX}HA2(Pg*@D;u0`DSFi^FrpWK?`T)`sAC0xpUbc_9r9^ zwsCr=B{}bbLG@cxc#5LS9ilnox5&Q5ms6Y?w~8XgAMNnnrMsIPA(q?byfOgL57@lgW57 z^2plCcAwKEtnULPqRG3g(cQyoa?%`l0i25GCPnv>jz^nwZG{x-l;EtkM_=~khfINT z{Nrj_`ma4~KHLLF4`j9<2A~ko@WH(=La0tAG5F#};%eqgDSu4R$3WnFr5y>q{FI64 zrt@EM4Xcg0MIveX!Xx5`?OtvoFnBLx?h;@VeZZRbhU~yJ55>>Ab#tDo_MKS?PnQ58 zydt;)L-O)^LnByd;8sTyjA?!#2=+%5$Wv6$0)4P6U3`Z|kmTdXrlNJG8lY_4a`}Ns zQ>8k)X5vw-G!c$}X?0-FJIV=CC3D7Uu$%m|u@p4w)XDXv#kM=IFSX?(4JZ`-Q zLh;7M&n4mvxe6bYb@;X-HRSo8@@%WT;Io|mb&Dz1lE9HsXy?Jo0 zvmaVGDDKN?|Mh3B&Ld^5X@tJ!;8~wb&xoecxyMGesa7b=caClyKQ1>>C>m489)&tf zwTHfF%c9=KjxklNtv#rKP&H13I{bjaYl^k0R)CL%i19yfVB|8aOI~?-Kj6Z)ckj~c z&=$E5Jbl*;Aco~x)Fh!_dP^L~TGCG(CRH>5KB* zRhd3{+ck8jF==En@UU%ct}F2}4-J|-)+vgGm%VNz2M;ShZP8jHWo=kaPdBDdt4<2F zZBn*Yl6&sagrQS2^XBGq#$BG>s09DEu+w;D>A4HNt!sF5(N!6FNGMtB>#L;%^KB{( zAf-~9`l*;Dre@AZt}SSi|k_!;OqG05ZjBys-quR zf8PJ<_UuZ&!}|w^XgrbxlbhqEDpto`tAEFbf$kRTrk$#Q!vNukf4}nkG_?}9$NsWa zob@zAjKOwPbU_I-$~KYbk+Bo7=~{1-H1&$#c2s2D26IR%HE|emfu$3>^Kolhk{264 z;acmlI8tScKsTKZ*obT`fUjiJG+%xQ)iig~UwpaZTr%NGbs}vA*CI3kVxg3_j|7K3 zK-MOlw1i$cea(Mv3A}4rFd$O-@1NjL+@{Nv8s7)fAg3v;=%1iF^#dmr&q{Af>>_#- zZ`;K(>2>9h@vl>KSL)ksy|R@!F;(mF9;pHD_w^wU%k&g2l5pm(0i5bWrH&DD{LZRC z9BRJfrRD=TT4!MqvAKg@qz~cu$tx=Ydy$li-a#Jp;jayK`8{1M7AfN;o>z z>cPan4nyQTiC4{Az#!8>w$EGWMANN+nKXsE}_ZXi|D#njY3=qeLi>3OEgo-Uaypl+Zj8d2N3OdXF(;QSKVe^XgL)eLA zoswXc#Cfp(8NIVdh^%+Sxa60e1{SsBscp(UEdi} zzuP?noV@y%1ZxBTpMPAzqHGs|E4Y>4$BXG%UytW5d3;amT-Kw&u`;YOt*6z#Y=uHz z@PbM{o1sL`yq(**IVfb=jSqeBkpI1d)sK_vsDgPoyMLE6=;P2w%Cc3ilrI15+2Oxp z7JKZ3*#G!t0PmF$A`a&eb^y92Un~L^fw2?1suix_I;g9Jh@pA4i%qzs@o1W-olv5b zYK-{6$pfdRDzR-R8pP!%n^(Ebz%p(*bjHhXbo!SE9ZNimA9-R;?-(a?nVM_UO&8v9 z6lpO*;N;g`NC6s3Z$*b2W}~a_P^wXac{}FpsvOKy>4O0vpSrXyBCw`K|p? zOACq*S}Z*Q63p!-aC&$ZFoXGA#o$$t6pob#S}GMrU;%3oby{>9EakV)CHce+Pn_X87XO>^d0)8n z9S@EH_w?e`Hd&a|yR!9lKPT&}@ueg%oK0$i9Gj`mUuHRc8c7}_IX52J_UWxe3GVfP zU-v4}wPz!-k^!<@s}k|uPz{{Uhcc30gMaQ$FqAh|WH^5p#A__Lx)Es*fg91a5CyNZ z0A;aN+srPM`-83=L8rF=Y&*em^s$0s0j5C=#|$F(mGz(n)6-AE6DtPEyah+Yp9L`g zx?yCWrbL*kZo{nLj)G3)NnJbIv#??vw?unv`ZayahH~sIi zB0g>(L4D)@{;crXfkbl<`q**?=bX!*W7ig^B9vXfrqMJGJ~)!FJ%+yWA{$GQqpv@f#$(S4PrQw zn%ILf^j(d542+0}G*h+4I6!P}dIyZRg{#3%)(iO1dFHsDQl<)J9&lig0( zB`Xdt;TZE)eWv3h)73vfmpBPhhyVNJ$En^W88nEG92kbWLfmA`G!lX70eM?N9J`aIDai|(y;h}oLP%WBIB0l; zgtNDipx@WXrD@8rD@8<&=b674fWBP&bNs%>9DH*#bceN9Oix{WzsDP?$!(Y!14iI1g+?NAU{Gq1tqF4nnK?>ba2 zXRsvD;Hj!$y_RJDTHCd$ZR}N%&j-dJVEg&6Pd$NMQAns7?ZSck5tQ{1%+wNQ#oj`# zNS06RGQ6O3A)&A40xuW~9`q`H`+a*rJ%ddK37z%vWnXx=iBuTAHx+0=+3@s)gD~c+ zzcQ33ke+-XCuSkLWc3{&uKkr^1UM`390;$1fhRQ|fb8?jq9a~Kn`hj0C{xZ?8VGIk ze1BovJ}>xFy22kpJWIYDs@e7xIq;cM%sulrw48t>l~;D61AO}ccN+1|M8i(mAh4Q8 z6{bR4K1EPT@*^uXPgV3qeHkoRQ7lIPa>gXn{e=I1*uVbluUAJ3ifB5w(Vhk28-vak z*?J=x-5o`2|2m8R;kB`3#tbnT1LQgLfHhO9?ascgjB_rd4M{XH1LMiN#mZCZ*2Yvy zAJ#-Jrw!is9f5Zu@73&^YJcYxNPgsm_2nmw$@uC{utU8409_-y@}CnGyo?PamQ3W~ ze35&ae#+)01b+;Hk&QxL$bdS(*G4{kR*!ruv2|fUP2hrG8zugVE@05iGe5$N=SE0$3#k6Nu(jW-ZUD7a^G%~t-!l;qY#r^%A z$HQOlpu75$@7I)#bidt5seZd;LDXvOD7V#R{L&!amc}f5yAJ;=4Ex-0XW!m| zB8sV*G09(;v?Y(B+Is=I3E*^~{5HE^Q>8**8|tB={PN^<-lhis!6WJq<*FZxG&~%D zn?)?q#X+c$m!G7hpEmLViztL2Ddkj4JzC&c?z)owqM$nUY?J_4FBksj1=W_ zS4$((v5yZDyy?Ot7Z|eLMioLE326S&7E|JV;tCC*hhWkL%eh9csi9kN$=V`FpJP->3 zr)z6qn0$GnG*IJ_SeYTqQ;7ccVY2H_!Df4E@f)++-c>CzW{T}QH?BZORE;QuE7PsF zEV6$sj1ytc<;sMm22ecjt+c%Wf`@+Jkmo>a8$$Av!}gJ%kTcbT=nzHOfch+0G)&=L z^092H(1ux9BuXar*$`F{l|0w@Z)P7F<}DKm&GqHCc%38vqS>zZPmI!PA~jQ zbRH7~Ty+df+`?*#sgU*iek^CCUJeIrwxChaO%^0__i2A1m+-xQyoTuV%; zTAcH?p$fEqWRYgHffD|T``S@F3-42>Yr{0+4#?yXnf;!<%9T*pDDZ{t!Z@!^mSZuDiaHAXCVU4T}ZIN)#JsuBN32 zADs*$%Ui-5?eLW=hnb- zU%u!u@c^5ljS9bWxAY59AY~Bt1MYZQT+tMXc-%?ov`p$VXbguOa2L4nrt9I&2c*oll>XMC4xa(DJVB zc{###l(`Jp_wU+*<#G)$eM5GW{#cyAa^v3jKpb<}sN$u+I%JT%gwT-lRCSrNefj}& z=x1e54beK+~pv;2zO1iS7=keVG7rMR+oiA<5%&iS|mRAJckwUw)7`!*7 zv*yAQOjCx$FY0d#Q#-(1rBEYvt|2VO-FKvYaU&dg%nATAYQrDoqgVz^D(a3({)>+CtpV!Eq%`xSFms*ZSYX;@z9 zIzvD1PAFF5eCM7E&BizO(NEbdRA2NMC?nA%C5nFi1@4IRPPX6`CF}fa(-!b6#}k&ry?>$B4?2zNTP4VM(3%*4>{vR-l(5M51I)ZUXs?+_@t{T_j}MecstzAwa#E5# zkHb<4g0PK6A*mCXn`t)(|8(ITKbzo`3Zu4uWA^=&K7#BEOiiYgpKIe|>r006q@E7| zEPVf0RO7zX;V0U@0){@5FhV`VF%{hx!+Kg}V?29^Oceyw)vyMUGyeW?7S2Tql<)VP z|E%LgxQ(0prE|J62_DB1zn+$_iFT4ve!or5W){2HFG~}`66o!p5TX!DpuY6AwOCTS zqZ%3F*n6Rh+oeKR(q>3wMlqM2cK@;<1hec1V{c1nzjq9n#Z+CK^aSTm26lIPymUKq z`jdB)PaOHIhN%b?cJEZc3Y^E?nwi54y75_ac?#1q2c~gHt59<-vH(H^nB(gY6R$Yv zrX=6zu%`tNe(c(oloW*oVlZHqeNEC?Qe5%NyMJiEaw7J0BCevK<^n2Y~{E z#s=e_+Q^h8KGFWADqDufu)|fu61&y^(4oTt`I@*D(E|QPv=;ziX1OaB`rdTA|EA>3 ziu>G(lSsdrejG6i8$LyOavF9NEW9>0f=lt$|+^8r$fvJ_5pIMM; z7Lg@QylqE+5M7Og+-hUW`{b3u^Ul%Ze0Cc^S{X`ofBFl8XC+G1=f5g$#5KNfQDi5kOR-|=ReZ?8!930U!DwH#Q;{*#VqA9 z_*Z-*9Z5`8i6~V4HSU_ea!ZTPt@teZ!6E4Mo!oLslIZSg((_}Y>PUFxSxnAJBRvs2|xE*|o z=aa~~wV5{PM@;ORFCY?K z3V5O(bR3lB{veZf?-9`BMHj~a$IO6`YC*IK_{^k0YDTB3v^;3El@}M~&JB_jb|4jC zS(-dA0D=z+!06zO{jnCl|4OQJP#%vh<4yWOaD=j~+R3OZT#2I1o7J&k5p z%7wbFcuD47?(PbG=rU+GP|Bv)x!+BQ{$eg*wfCrdv!YnTLjYJ6-T zl>mvjgSjV{u7s4*YJh0J_Jw0}3|t5nWbWWfF$aa?NW$(=3qumkr($cwLgWZ6L-3FD zY-w*!QC!GquLZ8#;Hm6}LUTR?H4Q7?L|*fYUx-|{w(ZA?u-~rZL?Ux3*c+5apr$q5 z?$Ku!TWdTbk2I%CR?(Z&hbLlkAob@?Hzd{SgIMuPWprKJq{{smx-EbS-N)aYZ2$Km zO(n;rHz_LYifEQlJ!<#=L41@S*uipA4TO~a4A+=u9?9`M9$U|VY$ z93G{ya@`4Qhhb&VYyB~*9TnlOtIY$jhMvF)#IYwi@o(U2s}WnA+>C?O$4g%lJTNjy zGZ{X;Wet|!ao94#OB8>iaGof=LeaE)R zr=P_5Y&V2qq-C<;?4xME9IxPoP;B4!L`zAT-WMYavkM=M)msslVHTn+=nYD6R=b0< z$Dn^g`9R^ivh17uPl~y0k}Gm^9L;T$+sidWCuBe^D~G9I*pj7mKsg>+=42mSWjC?! z|2)=SIDl5IX6Y-71D!?Np04TJGq?$6cftAi9FOOvc4NK2<`N%)GB`A&Av(AJ5RQu!n4SG z&TDc(#WINKE=EjHNTrFI!=flkMYciT3Jpeh?$}!6>JLmx1fd7bslK%Y3NqgNas%wE zMoH~!CsFZp8_RcK?XCGH`~YalZfVeoos{_F`A!7Sd^2{Wp{8A?8x_6} zL%r;fK$(rU=+RfK}gEK5sHz>YJ^RI<$Cgib(i}zO3 zHyDzChi=y<3G;y9C@FL@9UoFMVT>D6pE+`y|H^J?l}>hpyicBcmi}oAt+)ko+{`82 z6nhQm%(q+sdVt!#woxFZn|xnqEIF2>h(e?34*~33VHCrNP~wDDbJw3__FR1Egy7$J z86|u1+4z#`X2>hf{`FI5hJ@y1|AdITlKEfbZ`@B#7y34h3ywi9aT5bBWRl*q=X{s% zN5q;7?{_b{e=*YGb1%R**Qv)V8#vz3mgIH&N@cm~Fi{l=k=Gb`-IDbpxJNfjU!grP zCg?R}NhSEzL5aTn?H5+)#+S`|Yclp~Pl=$!*w1{JjbG2d;>W=Vr3SxLEBA%++~mD2 z!bJ4NXW=Xh{xZJq(>mV2S6bq6jpgaY+>R1m`Ta@J3#eF@ZV?l3eyt?yRv&^Mzh^7L z6L&0E-CC|sp5)!Wnl8j~zHzVhD*unR6$j>5)6mENE!;K27tg29nY+=(=X2|cXPyAc zJ9C!jq=~4BuFoxc@X4LXO6P9t<(oU7G5=~vm}}IAxxGQ>6Q}Izi284f*6rXy0krtt z2*S*`Q2hAsbqs(R9l`RRwMv^dxdt(y@Wg#4Kz)~4U1{P6%TCX_Gt1Mt=fvSHq(6S- zNvqtt4W3dUO$63xK@c-Q2hz`M{dW9oAW%W$N^m@|6=E4z{C7_lq|p+Zf=aKR(3Ag8 zpbv=SX5&{P46VD=;|39YRu;8O10bExPx&(-qnBTyDo{jNhxzmMDeHAp45J#h;Qdlt z$yY*zU^R?-y*c>m1$QbpGkcH=OwV-P}r*HK7t({FY3W zd3AZz^elF`WZ7JkKu#0|q1%Ty1HQWX4)K~e9o=zBz@ zf$<^lBTP1LR7_B$7{m$jC5v`gSW>O-snbQA`qAY+>}r~O`Ia9d27sw_<1Xmw+a;J+ zK(tL~E_rec1SaT3rx{A^$!_m_Og*s<=Q*0G2%Jpp@pfVsarorn&O^|P47hOU3ao3+!`2WGt!mne98Vn8tzr3tQWQG+z(FK!Fc44x3++0hTvho~dp-Oc1Gp+{3 z7sM*!>2So_g!794(Ej1pAr%dRGoxZuw=b$w&DhSwhE<5B97A$x}ZzNajk^t;fnH|Ssr{;w+8GuDz%Ioo9NWpK?O#0sIL z4x0JjhE6*4{yX@6d`|=Oi}Q?0J1FBw5W~C3yB|8=*@Lf`5J<4(x(XD@l@)!Wd(y~$ zvv{=~AG{<7Qb-OkV90GhtRUA2Oj-DPrSEB|@_EO;!aWa{~ z?8M=}IC&RLStGK`J8R_bgx;D5wM!#b7l1U7=q-SupbDf#y1+t6z2s{{KNk8zz9RhO zj%x`XI)ozf+lK~3UgC!Q7s4{Ua~){^!GS8mqg zV~}!xr>~m>fE?w8zRPt+W=o;h`JqlWZ^8a9Y8#)Q)y@9KL1v-Wie}k8Za+b>o)i&( zk&G?BlMl1$8b2RMV`-)rKjwop5Rp5`teQue{;RTxH7DjH;8@{Z5q#p^X3(J2;e*$D zONO(}GxC{?ePCYbXP{nm*=w>!(p(|_+{`#au?H8!?8k6TK{nR>l8LSDp{Pjy_Vd1@ zN#zn5-H}p!faLlcGd|4-r55azkrkl(jcd|ihG)Y;H{uvkp|!5@`$bE+^x6xj_Ro}{ zrdxrz-9sa)zE3F3QX~dWnJ9W(jXOmovIMJ44t2(~vD~V*F1dqy+~whAn&``%cF3nI z1Gk8sfpPr%Lkc8P2^=CE){Eg>i)WX= zNai^oaw9=;EHw65uDtC)&+Qp%k2IRMjW zO}3str`;t^gKvY~JCApyF=I=nAkH-~)PeUFYj_=%h1nCm2t5Ugqwvhv)ZPeV>umzl z{%V=mL zIQ5>7^7}7((QRs~$KNp~FfmDyNf^)AW6Nooy5uCFC{_tb!HV?bZpe`3Re8C-pWu6j`_BL!&IS0<`T^lTgc2!ejd^1YUDw@K6*$@u1vNM|1< zRP!k9!KJdvhY+BTtGpSNUQ}!jL`Q^Cz4H>rU@b*rJ>|c?-+T0- zY{O&wb&BqxhZ1MiXydZZ+xRTY*5vk6ZD6noo*5}Hd$M6VTSE^W2GnM>TfY>L)rFc2 zX=d@uC~Jh;^yd6>3Y+%9p?w^TOCR6l}QM{H}zjSlbaa03t4hIZ1EHyPV{ zk6>c&m7(i^@~eJu@zaFVd(x}%boSD##Y52drq+JajnfV*-|?5L zuY9@AN3av6`m;)=vUg3k*w;`-|KIP|!b06QvfLt%6h)LBL=$*6_2jK%pa(AjweUMv zT3yt8%&6=Wp!HA*Uy^l%DklQzj8xvvEE?yr#YdFTp^?+#kt>CqA(U%ci^*SA* zgClda{nd_FA=bL;tC1wZrBA|`sH<76&G+;&bpb z%((f;C8DmEUnNHnW90o~Z}bxp-`7j;T^>ciI;>OhPyyY#R`aUCe=8wwX)TJmo5Dl) zSvDK=(x^m0B9>=kCk`Z!k=D~Jib)oKa!%Dj#{9x6Lo6pw=Mk1Al~5$5ep+elR74h_*TlF|w>l$AoQ5n1_Vp2=mV}&#~jFiSqEw z8;%O)Wz*oj7iHs-ry+Pb5B?sSAVQNAoTg4H4McaNZi(ixY(eg3rEe(r2>t$Yj;2JS1kbZH z8CeAI{``F@{|WwjoO?p+MdO%oM6*AqkLOJTpQIs?+Oi_xZ9d^ zH2C|-E=#77iql|CZa+a<{5c8%HAbs~^H6Fb08?=c(EPyqkRms*DEMnuX#U=#VzWIv zpP#ipN*Tu2ct)lp68=_sFaE*0m7Qj;EMJ47YRj~gY8Cldz0lo!@zh0Wm4a| zb@dqdeB6C=efa9lIFeiCRdg*ikVm03a-^|~K|P*y3%snM!%RShUE7?a0s_quJ?xPA zF7t+8fq9Nbp=haN&Y(ePNAXRi7?W_!8hN98{4^7tt9MwzpLN``x zaekim;INHhfPB|8Y`x&QcE7W_BsoFbr49dOypohj&xm)c+was{%by^c9sI9y{FQd_ zYq>RLD<8}G|9Y%^G9$|=LFE2`;6CCWSvqS;+!C7e_wwLzgodYkSf;lMcl$kjPw2kN zHXbFsKGUE%ifn%7rLT$11CN&tYw7Cwl}Y2uU5$QSf==PO;*lHbM0zD4Em zIsFZJ1$_~~RW5kuJK_$-`4igaZ?|=9J4J}3NV|6~Sz5bg&^ot8 z#$q6}lWu48P@LO-?uSSVaW3b-F4p;86ubWpn=UCA7gBBtoU{;j&&z{zG{-lp# zc?5EJc-=ps<#lx{N}3r0)q=M?g;{(JlR0d+i?nvQm6g;jert`OOXE~ZwI}+YV)q?6 zB0Fg~BfFOB^0n0KIY|l;w!mB$8j!T!E~pMdDISRky#K9eIZI2JLb*#mEwd4)53l5s z8OxJ}5|HrwCAk)g9+^trxM%BZb=kPgssnCeQTXI)laI`jSl{u&btpRgisLGq`ng@@ zh&G6G82wkLwHbC@ip+nvr_MjuC?SyWw|Iu8p<>bT#h8? zF_xg`%@jYL61*_glk(|UT(Ur2{pD62ss#Z~kBXD^Gz182!$9N4@>5u=kmrT%Zjly- z>umeQ0G5LjwQ|p!X4llGTS#D`kKibcJc`k(7vp(hme3wTsTIGg=I|3-O6(bV>xP%G+qUK&4iW_lh79{8#8RF*uwz4p!z(mwHHDo{kR{SV!ym{7C z8-R=u=Z62O_~EnSTzTqtnV*2}Fg^_F3S2dN1E%9$7C++rHJ`(&T7l4YPdi6-|B%&C zTC`wzbeipHWU0_CX2IKzBe9bur89F{Bl1VxlGwCsh)BKv+mP!D$%7a-vxf4}jaF9- zT}gu7vcdTxd1^(&?(5bg?D8hpoa7l&-f%FwJ{AVCLU?3`)g#71ZO_2CZjVsiPlLE= zI9b2OMj-uC%4a6AttZ#jWW7o0PTR^?LnrdUYV{@X$k3k=Ws@HV{NFV|E-K|Ylun?( zCKtdYi=1o{C%v*Le$8Cw*>9`oiT`~*A<=H+`}Vv5aK8WH%ByBustu7{;89MKH)^N#hFo89pa2 zkwRgnNHo*8rBuIF<@mFZ^^Iv{$(!zFIZvX7Sh0*zDa4I=_oj6>f~`4H2lfXkcv|4@ zU^OC*xsr|sVena&ND!mA_HKtsLE|$GPgxs>kYx}SRT(}2@Q047wTGr|e*=*zL3U{V zCAGRP&?Txj{>AZUj8UR8oUx1Ad=WRp_DKAglpnK-JK%jRX~X3|ujh8o`50EHGiNTS zV*H-2H-cjFb7Ay-Bj2vW)lsN88>m93aQVaP%H<$*z`Ku&4k&KwGIt6nfC<-Rm)3VH zi*DVm=F+>R^^$-OLfwfjR8a9pek)zkmO0Ik^Iw-h~WJ*Q_J4d1XuV6Hn4I;!0)go zKh1nU;Ix09ZVal?G2(szrp+r#sboNBoEHGJx{C{GeiREz=;(DHl*~?E%k>DHoE0A) z7oYea{?uYi(6O_(B-OX}#ri9qQ7GOHC|!6q+3Vn)mz@9k_`7(8lO7TDt1VNKX8hOK zPehwST%``@1)tR&cirAL^T+27>m+PfMCYMwjFZ0*nrGbi3N=Er9roY5$%J;#Yu0HA zHzMK9bgX&}7HlIdf|`npiZ2?|dJQof*Z_3_flqflE`P4J&;(dDUoKel+a1w#^{cg9 zT1j54`nqjta>HYS(;XwPzWdW2eJyMP0G=AfLCo4kN;$tgEqp3hQs(1SM_cN>D zrP5z0e1v)8@ze&3+Y%A?UkAynU3t_(EAQvNYB_hs;_9p34^ZffmQj)OeH3~%I0Gt> z0h*2eQ=J$sy0i%bHRl2g7}%-Iyrv)xq+hb-Y=aC_wvE|^wpdjo4Lz08ZtrB831QA6 zB^t{)5+u1b;8;4bx}V)zFF{odkTD;I0LiO-d8X0Fy$2tS2(%B?rNpPOXa zUq|Zy_?%1V|2xo5E-07*AFWOSeS3se0>DQ3+H#+$x{OG+DAb%b+t~Dj?i2{kcx!YQ zl+1q$#ELV!zip<~4^PvEmA4j@q6uJ=&c#&sCyH-1*?jQ+K?`HgWy#@PPV1Ga@xyg{ zCsmpAdW7$Kmch?MArRV)+q623JciF%Sw8Yq-oEnR|5~^8_bTODjR121N5i9=PX|i^ zCnV3O0R&d$L&NtAf|zU26ao;*;!rn7F6A+sXBjEJ8PN9W^A4p|tS5vI?SJXv$l0B0 zIXp3Icgg3SGBewvhB$|3Ab_YNPGvsqG2{}+X#DGUT1joGg8Xbg9e;{8noV$<-RNK+ zi1mp4v=$1xLf4c7&ksAEZ#=aXa2SY0TnovmoI3@a|1AkdLodfDKm1KQ@*~fjpELIT zp*wJXqp-`8z6zGTOxaSs;ocbYi6u!@J|KV-Y7G1*R~g5VtelDccAa&CqB=%EF2H|G zyJm9En7Hz`<`Zw`HDLU!`50h<&YO928!-8(=W0~Rg_41Q)$td$rKBJ;`oSHFqQ5^Z zunQL}ZNtP*!WKV?*aF1M$iVPa?^-E`Z$5NJUDWlz){^>L*N}S+KGD=OfPs~@ae75% zvU*Hq>?CN{_$Ote6$$X7og5N{tneknaSXppkIm|DsDwoKzw6!^WqagO@%^0{8th_s znqMS#H^104l0x-II%f)3N*w>}Dl%yfbU|d<)Gu6G36E)(%%oz559mxj`-aE-ntTmobMNLc83IW@{vu&gR0G{ny>*xcL%qc;5Ohp z8?$97pQVeX;jdAe(lu)>?SKN@w{s?38NU}5n zmjS+4ia+T{X1bzr^>qsI|9U9grCw*!U%}J$-|1CUoELuLyxyjtqj)gBXuo)o)lJ{x zLUADOW;JzqRUT9c*`!?ZD+KLaiOj~;mZ26IUYk|pIUg)jr7nLr(4hF{E)T*7!qwhA z#q&d7KC$wm5gEVM-JCr=U~hPI_jod{#If4A^83KK(k`^i$QbgMc`H@eiD{dv@k}`m zv@&7*xim7|Ob$L>)i+vQf>|{km)z$NTj1PEmYEp4qkcj*eHPD&i)-xDow_o6QI#Lo ziJ*CL`MvWl!Rq?IsaPGkSJs05D(exK@FlnIb)%y6SSP@t$>oMnCi zhkOSjawM!_g8c^X`)?54;!b1keB)b4jyNy3SVd>y(ie6a-$K2>`Y@}scR=g>%&g43 z%hM@~|GQ?~ar}1sJS*hk{&M~37>jmjm`e#LMgs$Uz+*pYmf7c}2@rch-ZQVtPLP@J z&nH3sb8{Ub_+3TcVcHn17?mY}mbVDR^A?8YfD$EY`WbfDsZv0Ld)u!9<7FPe3p!E+ z>TT(M7ZMHJc*l>nko*^2Rra+N(Na~BtH#`oyw<3lsHR4}DcGPOhF~kP*sh#O@(=b` zZYpl!R|D913ieh`fWp?2@L`m^1J%jMQDwg903w4g*L}VN`1Df;h96FvK`W(FVVpkG z79`R2jJrz7pP|O%Sgu9p`Yx62`mW`}jud zFjPmWi7?b*sR6WsRDNY8Y?0@X6eNzk5+nZkx89=g%PJjc<4_O#%sXL7w#Z+X<#@U+ zk}=_4J7Hxd%OvO!^M8Zo|q?D6#8 zYm`X&)Fm_Qg1dfZkQJv!92-VaJ^|En&b#f@JaS;hMsNxvN!}S^1xrbUEapxs5KU4L z2zZ;WoFTm&;5hO%&~p4lNjSv|waO9E1$`(>L>3%88iDw!eSJ(-E&nWcwe4S^zpi32 z&j2A0W7au1a`*pQ8Z@*R6x+*AEP>4R{t|OD0Mtj1cu#}h6Ab|~L2wt-BdwNUo+uUo z7eF1CW(;1G_58EXiBY5TZ*jJXDD#M=cYT&nx{)NX9WM z)A4jdrNZU$aw-*W?_^`Jzb;)j&sATf{tKrO$CSoJNXjXiG^N}%Ts&#(m@1)Z&pVlV z*0J-$g+TCP@464AX+Y?yOQ*PWmU*MJnP=~seL>f9wJTrKy6(CQ3toHx3PCbuJ z>*4PojX4l@T+v8)hFblck;?dRr4lq%ZTjJa8Tb6+%78X$W%jVjCpxZ1#ECg~(WCL7 zwvMRB2B-@h-oY)jhc_SfdR1s78=u0BDqXHz{yMIe@oUv#`NzXM#3xUDuwgH~ykX#IA%JtTChgy#9izZ(iR{>>XqKd7h!=8)Tv*ma_W~7ew!P%-Xl59KYy@4oJO`| z&%)|^28C&}wQlrHYFgfm@WawQ{7@BTNv?q6)9J`2_Q4&i(r=SfK#zN7Y}Mp2Vph$2 zY~Z~S6Lpdd#pbgFluw-Hi{p8nq#HOmUfX_8uXMEfkSTpm2Kh+6rcLLz#eRt^dp` zIqfaIm85gB@#fa<{xh72mK!Ga=>oxjSts(isnmo2>NPq*C^`b{9#vGVb%^{pZ#U`F zXEwmkHZOX0NWcEK%VpHL)ndwT{fj|j%i+Jb%l~jitslRmc)BV?wYo}0cu}JBdYgu? z(Q~`XntiLIdJ#*|@Rwh>T)HeTCV5$agi+}&@~4oV=z2t-s>pU!#!4()U466xj3)hF zX^?tVlk`$4ihCS`{3E=N7aCRZ!eKLy>n<2+^e26r+|PsG{Z=)qeF6@daBzCqsO6K9 zQsTHh2CR4f`q8L;w6pyi?lYikn~{^)?oSO#_eHuTU+t7a`%r(8m~rtx!v7j~gy@4c zv!1R-8`i4_ZBDzh9`=N!H>m`aI$Rrs-97QTPQ7=MmQhdQAEq5TJuf0+}v7KxtPyn(+G zt)*Z~oPcq(Y^o?eOWGVe+#CSoP?HNh!h(wd>fy(|NkqzQw6>(`D;O5=-(kn$)9h9J zdU)53e^1W^ep2j(8nD3EM&AJYoUWqXZ}$;W>P7HK=?7{>64cR%!Qk6z%@*Ay;VJi4 zQKRz>rHKNc6Qrxg^v%QiKg=@$*(0_*P3jz&=cZz%VrH>b){rgnfD&EnFA|f3iV_%< zh(YB#pG)(5^Cp(x$N55tH8#5Om5FjP&J(9-gLL0D2=~#az<{4CG*#3Bh~s;a9PH`* z*^ScXQP>w7yDw7lld6K7PgN_8Ta0` zpqLR07X@C%3lxMEzq11@q&#@RO!Sz@vcE-iQ#HBYwalF@VCXT`Q~8vG;qR`keX^=| z3#UhsPYl7W3;8@7Lay2nm6rKX$LY_BC43mKqN(#DaJ4vo0W%=xxt_L8;3_d4I9ucW z_+9nV$42z`Di9^5m>ty7a$&)qv)hQ}h>{g9qzrx3gcga`w>(R64+CF6fcH6$FkhoOu zZKm%6*LjV2R64)DhZKzP9?D%MPMf0S`_zybmN95i7}`n$t|BtDocchg-Ngw#A2J zq{L>O&SlAxwMBB{)u{JhOuDqy&y_l6$T8E}g2`k|MUsW?z}CW!m+7W{40%gn!4VO?Td*Idz{8vO=LJY&o#B8BSw93<&mnc>c)*^ zPe5V6*Nd>?;{ToNEPFjq>R0kkTKLY7{X{ZSdSk!yzZ2Z2wBx#~MC+jdX3G}rgSB7h zU-Jw%jb@< z(YQp7qkrKjEDd+%!jp(_V+~uha_Z&hWfYZE_A{>C-iTW*(f6oN;P2}8irs+`;x(Ht z#0F=Vd^JPcw*w=5G0iTStH`kcKmzP0Z=+0g58moCbFKP!H}*VDVcQ99#%09OxwARvOSa`N zKJaRDm2iP~?%RUbJ&C<3C|j@Z&E|O;O8)D|*7U!F<)xd~cgOHiA6^rb#7@mGu3XoN zuf~nl2pAOL$t?fT&3l6@c*6LAQhKe_C<(kBV?>EgiJAWM$ARluCc}-+asTz50^@=S zM6UbdZ<0F7$M;9fCh^!N=PzrI48A^-8EW9Ae?M1C*ZBqcz z#?Kz(ZL+7S{UV4pfBQdB!m(|CC{*ZRWiz2%631a zDCRpKrqzs~Bbg)1m)tXsRIwp@-u|5DYsAMw^lTEQ%{s5O97^X4>K3KFvjl#5zKhPk)X(b!{nLpKElqLJU`q{LXHqjgRw|Ul*{O63X zmV=c0)}Uco^TW!s6TLcB>ftqnrJa*s*VU!%`irvWv$$SS(qJtAxV=siQ(Y-p>5Ot2 zmvM_Mw0M@y7cEvAem!~N_~L`m;lt_Y9v#mcNW>lkiFQc;()d&S;C4UM?Y0PRap6)- z*N)g`(_6~rVElBpW7Z0v6*tC*nErUyJjpSGbO&-nLk>*-$;$ve{IqP|9Q@-(qHezq z{ukAC^4Y4$B9#RNK5edDt7RABgh+hjHsw(m2WmP(s%kVBOb(y&(A^!3_Z|6x*ZZ?C zirHK8#e)_;fDeXOD9Dt`8aG?wDs-oLQt@$K3LXgm_T$3Gh@=M8jl4N^yHKSlo@;bV zA|ymJ|D86^@I`aaxqOt|k(3J>j542M*2`d_W}a=arY(>)9n3AM9?k-Iz`V=qCZqhKg9l=o$XXrQV7B* zBVGbOWa>9;fUb5xUf3JV)qRUro_2SEn?p|(G{o^q-B(xc8$#e*-ix7>#hQGS2lCac* z;o+f<%o-UBOl`L@nybhxJJ^qwX0iCEWef4ak2GqOI#OMGc-xR^Fm9>aE&78|qO^li z3#Q&{&Z~TKLiBM$Twk7cY1qomW+0#{QW_rK?v=iMoS-#+9LCard~0R$%=HpSa`(ke z&)M{qhEJ|%@3xi~9rl~`qQ^v|KaSV))mtQANofuz{CHW%)~rhHA$qw?_0(52%HvrU zZ{5$6H(ZVot|K&AhR*`YXg;HbW%}5I+NT3^>yK79xMnReMKw%17vGL)ot@?)e zI5@7KyQx-DVeOXGHR;TDE9tA^H#n|Z-u9%YFV1I3+Zo}OMo;itx2yi;&tPuc5iu{M zjB8OYnk`r6^wAjN$#>QxMkjINsHx>14BY4*woR&}K2P>;nA)m0-uPP+!IkmLi)~-e zuJ8Dr%6`F&lz9G&ppk`@T5CgRga^35=fnfejde1jz6GvFCOUaserodOkV}dk<29wl z!4c=l5QUH)J_vo6Y=3?}pS(o=qc(& zf!s=WBV)g0Q8lorQs))EVqu1qR&MA+2YJ=rml;%&zA@uFVv4{E&A#6+s9sm?&+oxE znP1iTRPGyDhR)w-a~lE8k->lOhhMZ`dtBw$UPnIN^7A^yw``1;)%GJvg}>W5(}8Y%u!%6RVMu@Y{1Mm_JitQA>#K5fh%0L`3O0AG}2Z&$d%CLfKo;zsJS^ z6E6tK7h;>MOW|PeL{?1ecTBm-oF6=_XLfwHpi#w!dkVfHE8kc&$2tXN6JM`I?fCJ} z28pL#Cbd++$f5AMslTg^F4A(wXudLtkXjk_jb+ay9(fi&?&|IS?IwGy{HGridgGOxcyQ~VCNS+bOI>dM?A4tcy<0N;EMcy5u29M+ zZus-uay`Y(ez!lR*Jh#G{dDW#U{u-TrS48?tUy%DA_=9YydfU2Ci~s^*}?|jQ_x8+ zA^uP#?D%A_RBvxHgfo||EVyxade8Ebh2O!ngQwd69!8x)ubRhrO+TgsPUz}=q~~;4 zc=zASY2_P{hq(?;?`2`}GEM3t+_o))7JAG9gToZJPB-xS;I>3yTkht7c0gi^9P@BrcMN3x6@U81% z^Crs_b(FkctpXR5>yot8!XdRt<}01qM*QsihWhwoE!~PV^SuvVzO1bJf-P2J-F#XH zF0AQ&;Dqug;tet8!bcPFvu?lFAdJ)Iihj-`_G`N5;$EX} z8caPSow<3c4sn!_5ASv;!;zt2RUKj|A;FbXB061Zal|1@*I_I0-{l6VrV~Kb9@tj9 zam-Fc2s4wg=ZQ~0gcgM$o8E$Np!=YZ^Fk&M6LIub(HNIP0ykTdQm=F> z5qiFsyTdn1>1g4@=j`4hQwHzR-GAY$b6)zrZn29wACWx{@2lL3D+ljGF0a2zv{04X zZ)E#HDp3HQ=5MGF_V`s%nt6iP*DF=Xl*mHMNa5jA6|{)LP8EC8+U?S{UUpPtdOjv~ zxpo4hHKIQz4#T%cVOe)V!MQ21mke3csCWOQb(IIq?dJ%2OAA^= zFv8Tu4I`klEQBbz>sEU%`h(S3;Oc^~X6!AQqMUW5A6q-LswTYYL@=1p={HmZ&akvf z_C~>}k}`J7+18r78Tp+B+9Hk$Ub@8?t>tjMckPGIbU zC-f{L5nghaQN|%I0xoPk zLiVyul8}8H#x@nQ#gN@FBiqDaFc@Q)d9UetzT5MA|9by=?>~G#xbKP z<2-M)o=$2UdU@nQMP)*_kC7$?YnpOWf*CcizkQ_3-Aw@^N>#0RImv%a>6&4<&@tU~ zf5dwmetUsXWXCa&zS!o>{5Qv6Czd)>BPZS_NBR2bZPru|OAC72g*|T~jkzc!BNd=#^}(Vnh!3W}Y%BE6{#9A^2JO`u7f^jY+OLfZ{ZWF|&H)q2Pxf88(vFS1u=kaO@f$)tygIE)LTy&Pd;ri-uR?gb$hzLK@{hGzZH?52rdPQ<|$v7l(555Ukper1=UN>lU_QfMB2Z<Y(W-@$<$Ay(ComZGxU5fuogNr1>mhZaB~{ucOH%)-g=evaW>zGG9qMs9K%^zO z93Yy?eYPv|h=gv9-@MNgcWU4`+HudmTh?la#Fz<$+yx}mD3-rP zOc8q%e^LT+w12=erM$78+a%>=CXI*tpqR1zCz#=lw&i%pCW#85ixKRJdEbM9-wJL` z>A9ADoJ6v|JjpH8PCpc>D)oe?4?I0SRt9@{sY;!(8|xC2t5m4VR7-i84}-Hm6rAOAmEKl<+|o2z!z3Th9F{#p|3y5f4y^sw!i(nhLtuH0FL}hx zmgJlwm|o2_i0!8Ds_!5{L`Y7F7B(6`XnA+`*RHbSfi60Mw8)>9usiwc22`n7# z6$~Sof+v9vr+&*Ne17)gt?e z)0T^33$MUHq~G#2blJaU!UWxx&al!;k{9o6T`9-qO?~df`b0F;%ouRk{)8D01C#Vt z5Lqv&UCi(6xAU=&wHbRjc`yH#;U-f=-`_r;)SZ(E_e}@l)%dF_I9@K zQ6B#Zk=h(~rt1Jt8~mU>>H4?Q!+NQ4ChQfr`E+|Dg*bB_x7U8;t_Kn;2~pQ^W+W?0hjbR!6Hyu#;*-ebPVUd%eQo+(?gQUYhSx<$2(>680|l z($AnCRQSpwL|XnQBb%c+% z3>cUr>#&Glm1B15#pU2q=RNror{h^^WB#6>q>X3vGa2de&O;<3ct0?ErQ7l?q0ow9wZu-9#rgQ{*99ey$rgRwvMGbdj_=}lB2_rx zn)Gpf{H`8H`j@&OdhG*nBj@dL2Gh|XraHnBG2B|!6b~sPjaS_Cn38p=OOGTOeXmV7 zhXZ3Z6_uCatWO7ZfncH%Ss-}9*k>Ik8DD3SVa9DmBzTEwtr>YsHer2A?f9=jjKD8T@Yo$c%Ne)Q$rmY66qB=>?x1z^o#L@SCyNJPN{()8xtz=gel>ck zo0+Twl0#Z-t;*ilQ=%KAjiWdVHh&0?mhXS!@%_^v+xc?nfZ)umps-S__c5gWX?i-*9{Bvb@JdPe`Wj8r?(11!l-ppRDLYF6hj{Si z{~7|X)&#$B-=N0%wZwpH`5VkDo7|B``&rDdY~r9={Ld8^*TNLV65c#l1l+;4^pAH9 zB&b2Vbhmzue#CFlPCG13@(YK2&vSTX`LAza{P#`1Givyq)X0c!AUJr_h}jR{iyd68 z)X(F<^fvwZ^lhaAz@NO5eMSer#_$JL{vH^S$tQQ5q};yj*eY|ru;LG`ylvaXwWt3c z#@Mf_BwpD9mECnG2}vPyARhL+AU(e-nZ-5xtF6GVZ{a!AE2Ie%Q124r8fZZAPj zU8@n9{ThMGG`Zd-Bxl~_yI$PsG$fJU-0r92ypwa2z9nZjYYH+{aEP+){x3s*eBMG9 zX8T&tH0{#RCl#yCnb*@->RM0Os}ykf?#Iy0(PlH!IY@a3@=`pjBk0@@g>}25n50mH zbeB~8D_OE{0;+PE-tK%5=bZV?|8}oQ+ShYGo3N!t8$y4+X&c{vjOF6K2(uqa?YDBn z11S}kDK5tmtfr!b1?M~yPbxm1^}71jV%_&!>k~&Nm#%6o=MS`QY#bAQ9n@QjYR>ss znJHRwww$s#Z3G=OPB=6kZ0F^p&GMysXex~jc9pWXJmAoMY zGE{Kz?fbX6KHlv(#x<@rpa9sWoHdI?4#d|=p*PJ*L@Rq;m^;l_Ui6?&e2<&#z69s? zwbTS0QFZwjX78-u$ID{ytFXKfJx_)DE9%;h;a)j_nx6$APcByQ&zCHU|7ZD}oVu5P zw_7mb)Mj3xj#xI^vRLa% z(q2rK%^rEBcSs=Vo%-qkfNj9>bH~4j|0P5nt0(r`pzXMI42qI~Yb|@!%&1GgV5e`A zlL|;sBFGT=0~KD4wB0IszA@mZla-?1I*aME2jB)cu5tbQsc(}}>CwLja{h*|St)@A zKUg|i%btgy?-yJ3OH@B>^b2QYS_r}$!pDa>sNb%oe#W8Be?CH7?hlx-hYF_l*-eFn zUO_n_wPHVN(T(Q>H(5I=m@r&^e!%$fY;F!1(rY};1;Zy)_Q+tL%5Mo?Vo%iu}U=M_oVh2OE6PvJ#(3c)J?jdM5) zyHwj)K_YaXBTK=)%^io2equ`hF|Wr*{xgX4Jt;p#RuGpODFypNdM}43SQRA=Wz}Bc z_dI%?PWI1$``5(iO1Q;%F<6&*PP8gO$KNWv>wg><+;84~6w@WoDSiT)G`>M^d?)b&pq78dAFpEne zPc{xX(GlVyLvF$sMAToOkdk{Z+LL5Vb?C{x#Co}6wT>G<>gZHlR1qa*0tfHGL2TZKL^_b}@~!WFVF6R; zuNhGK&kU6NP*nz|e_bBYGyik~RUYH`)UD3!9(~_5Vcq1`d^76)7nIC{2BxE*)bS_f za~iOy@A9J;?N^S;1kbxXO8!ASJT?zF(VrtnXe|mo)qDo_Wwr~%&sw@Ux5^gOJnxG` z(n;?c@zK5mKz38_0hK<{8QH&V2^Ldp8N#K_cE*7GP(!EPLLlx;(uNzL2f+~q++QX) zHH;|*@%!$EZPm&6Y00+Vu?JZy@0w@0@3na#keX!wHgw&x+J0sg`Tnr~W%HeTAM0&f`K+9$ zel<6eF6>$~8hmA80FyW1EY$4mb9w07=F4`K_K8U@`KjTRj&z55t6cHv^AfkSwPJF!)Gnxu@qYRB`fY<1wPiBUcL+jwpl!ysSm`whMA-?erD==t(l zeY>UV02`M*@8Ly=<92*yE=8N)cs~5@S-^G=wGTL5gEJOvHyl@$gOq$!1ygA6V>_z5 zxeRLBLe1R=qIY*%UQg;XX046xjCfamkr$U)v7lSmjBkx1GEpvtDo6;VX!5$2@OI9;+TpuY3)O2$UY-}BulG#wR`dD&CJ z46HqLtkWmP19MqeB;OmD{l>E@mk(fPn!Y)naAMY!2ZRXC2a8~o7c|p>6=p&% z0GLasx}IzH*XCX|8ulBj;(p;ZQZEsV_kH+7i=cLrG z=CF|=Ot=?@wE6ivG^2M-t9kVY-)o6zb&)ekbdPb|DfLVYY9sIO8yeZ%EXpHb(UHE?T%-xczT%!vh+!Jo^%Q@dI^rLd5t?n|24C3U1 zr>Q5=TGlH3PRNjds+XR5(FtyNNe z`etP-Cl0yt)KYu*Cef%@cZ%{#VJ*xvHV&*kLXW=;w1tqxrAD-T7Gg(uX+H)+hfE5U z0_Ho{wkEw-VL}*J{|~jZ8x;{r6J7@vA+_RY57%z(1ziVkA&Q&pS5?l1+76o!fg*6t z=Ry(wxhx#{Ot1K5`G)4)3f|^e{9(q|_N4p637demC#5t-t_FN~Iu0S2H&6N6C5!3X z@kjs`fX^AZzs}_CXQu1ljv(#&Ovf)7bLIf(+HgxMIP>-8tXmG=x7N#)C+(QGf2M4| z?y_%W=H}0vIw29@lF9o3@xJPHUTT^AUbleaWaQW}&@O8wteRrA^5J$3U;D%LZ+${5 zc5|ntlcPk}gk=TzDLWD=s;BYk)qV+(S7HXcW&_^Pd|Nu>y1sAKzmSwA-Y|(1Xel1q z9NjjnJ}>sJ4k0BsigOtvJL479>b3u{*Fhs_6vLW8aQl9%?U7kW+_0ZQ$7p>R)j1})n;^gxkqQlt?F@2|CJ6!o~>s;d8l#l9( z<_T~4boVNqAJ=A;JxWqAocGp+P2(zjKQ5x)qqeNoE6}nq}!F zkgve8_@G^0wHax0niT34#hGu-sc@P+39`+3gjzb+=#obhexub3rv{&IQys+R8YBinYrLUYrbFB$bc(WZV zbh>f|pD(mk=8UQhA-4LK3e-*1FEiua`_sZZZLgAwY?9j5CiaE~05!lW!yq0XFeiv3 z2g~?WRiA7f!_tdq{BDXcn}@1HbZ1uO8_tssj`=sUn0#r~fwyhd)dP<~^s_UT{NCkcQ?pdU3`>r$~i9WYh{g5zK^vfI7ChI{pB1WLfcd$RBJ(|z?q z>?qEOYuRho;E6|*(!NUof786sNG9Gui2UGRJOYD`CzFjn1m?V@AQ+~*8}eBwnez># z_=w;p-#0rA9(tS7!^EsP-)IpF4K{h{AIqK?1gJTs?MINg7#8|~bD zQ`NC#v$#&v?rS9u_BP;*y@!ci&i;vir21a{fg0ut*DX$CkS)Q${*0GI(4iN~&nLZO&q| z+-ajOmg*O&I{W>hi|QFFR`n(*Ltv6dJaw(5F%6p|Z5l&9%hsYrY1-c3pTP4DD9vk4 z^q30EC%N~(K6o(Sftl~G(K7fUo4bDApxu*Vzpg!a|*L&6Hs4#D_$8nV+sR~76rbD^#cT#^^%`!r? zZJJ&*K4q-pqwyhdnP5~Cosp;F)$V-6V^oUPfEH!8I@HfIuXxw9<-$|LYjGJ+3YYz@ zG1v}w0Y%ltP}}lfk%yMy&n=MjU&s9iGn52!+W5kzRJhhH==e|5#d|Kyo|33yDq%2ul0u}JQ&rr+y9W4YGhw88T{5akWwp}UX|GV)y1XA zCQ~8!b=(suvH8*(qa<_A0m5hG$hG8=V3tggAmCovyV^oSx!&un>`|lVPpGe3th=y= z`l(+D(L&cnXPbCPim2c<24YleNJVgc5R(L%@H*amxcM7L-D>@{eH#dIAOkWXKpi_C zwV7u7#;)0DR&I;_ibIP)oa=1o#QvZvAW3O+g6VqQWCE23G<8|Ecwx#uv$hYC^$i7g z44IH?4r{8~P^<2BNUS~f%=Ag6P+QEm4s2;{iv&tYa_U7O0#3Sl8Hjk;c}BYWkk${< z80?EXxl3uJC$$+Dz}sdjW2gJ_-sta<1UDZM{Q%+j0%;BKilmL@G|qXBI^U&b%}ImH zmp=#xW7`|)@!9ALlbtUVSwqDZ>KSN~7vIA@lt663`sE#7r3y;-g8qX4l;U38% zM=m_z!1QgN9a0Ze6ZJ(cRf=5RZI~z^vkqAZ!Qq+tjH924p(jA7_+o=+2N_He5iaj% z&peGha(5&c+dH5&r$sx!MqdCha1$uk{KLP{{3V^A2bzYYKtK9m5_0umKfFvcXelu+ zT1&sK!rvE17bxsN%&W}g$l9$ncWrcV73sWT=gw`k*`!Ik1%Ch2B5F}HT5KkjR`!f^ z#%>0-It1XJ#oo3~2Z%uQTQM!z6Yg-eKu;~7MD94Y_vcO04;i%$Uj*9Ed8hje=YK>U zn^qXAhc+pq!e)~+cq;h9dK@ut5IG<=I!LStclJkgO7*oeb1en)yn#RrHoy4_o_qNP28g0$yYEV`Wjvd ze7Rl7j+V@R+T?BGhQoI$S-ZpEwq)%yyq8Osk2Goj4(y+~1|S3dU4(pHjC5VbTD?GY zMXK&4%x5L(lqL@m+qRvs&o~f?KF+pViy!OkS(tx;Q&>T9SxukCUZtOqCkGk9^2_ znYb=4tx*23YriyPuz&vAbEwDFT?C%2T7?j4lTEW>XJguJtAgvub3WobtO0`(daNbFn#fP)( zK;dA)sPD7z4toO;1S4{G6?F|{fBO8xtC{o^S_|Xv1@NUoscyUgNK{rNvm)2G)m-Z} zsGyZ(NM4{HN z?444^${`KLn{R}#j~ue+&CZ+ysG7v+jl}Ps%;|{POrVq6cC0iw8F#!GWE;VJOKfp< zO}E6)J`GgZ+ChVwRswl$B`a^mWT1O3!%y_&50W$VhzI4Q#SU6dE0?M8JtXo2EJhL4 z4yt3ceu&lhNoWlWZp?Eu`#)SlvlZLTeI6Y)Wm_5HL)Xvzz*$SBTJfSTRW6)t@lx8{ zzy(R;tD`l|?7}N?r1a(=sFLr%%FL3X4|e_S4g-xrq*wiRdxxh^*2_+(xA{sIor7T^ z+K**LqnhjHWa9IFro?BrAptnI@drAyByp}9Xd*XUt0)$~TTyyyX)@Wq(|zx`_~{?y z_~9xyqJmNQWqFKw;Oh}PcaM(lO@Q5 z$g0+f_W<#EJB8 zdr@MQR%!RY56}Ckkrc5O7Q#IC#X5va`q*A+BAU3P!#Ac6K!9w=`X%npxhbDBcKzDs zKbNaJ@4tL>!KWx>Dn8H@aT}x|En^n*TOAx&>lx|EwYwMEOzGM{-zF!$jySZuUMmOd zCttB!ZJ1KjvP1K^j_*jWFvqGpMW^QXoozH^eiaW+Y&h$^R1#4trlN32_>@%6)R%PJ zA)NUa0o{GIw^7S=%g<}?f74o^Z?=_Jc>&~i z;aUODqi3{d%aV#(m9ypTvS<@JCYO+RhDE3I>X=1@+N*M*Z!c+<^A#a0+rNe$FM$w? zYI@KO*^@psQK$@QD0d=$Y<00zbEV^5o$lmTkGWUeFI8e^)2{$42S{k7_`SBvF#F4Q zPlRky{RBs-khZP;O&RLZ&e%XQ1T!*4uAD>+2GzM-Nv0e+rj3NwJCVM7y-z-MJnx-#^Jv#|8f2Y_tj1H zxG9mkv&C_Qql)@}q(q5Y<6)Gm*2P{tDFsi;LwVyP-s|wnmbhRWqjK&l*fcT&J|Ny4nzH+&8Q<#nV1qN^o1J7o zP_0nJ7?K&t8R~*M-DlcNs7ez)%2?J5T|AWNkx1Nk2a2;jwZogY0H!7UNC2d+R29qS z7^vU$i8_9IvWC>@>J7oI#19#qNTm22pcEYET#AET5v%2vB+-%}}tnMQl z$h*ZAvQoia9|<3}GHkS-jPz>Fe8jozy1&qNQ||HD=_QU-h25HP7_!NFAghAM1io}> zfp381k-MndF@-n+B5D4>?2Ov`Zzz2Vr|m0nAYlxSx6VCI5*_nWXz`v8feoJUzn^;Y zYu);TTk@bxOVXQ{^=oOtUs7L_Ry`mjTU2#)hrKb5?N*$MQxAe#yW~xW&7yJy>+A(d zbod57D)kdAh1NAa=Ad=Y?;ZUnslV@Pa6u0cTV@*8%!$xYSV6 zobeybAJk183d=Gs{F$IP!!vy`-D05cWADU!doOO`;}CHikioNNUbUIH1HyiuEz3I{Mwec0`2o4 z?z0b6EoOjjRxTQ*j(Z%U85|rPJk-OCP=y9J;$Y+GGvl>>eJSzN>ZW75LC~q&0mKL< zO#gIKZy6gwjeZhn(0LXtHe`ozl`lAA*GwUXRNfoflcbF z_1evu#Jc;#p9_{*BDQs~6gEi2aTg!OQC(0K0O1_2yC<8VMHOL3?VD!XkaR94Ud9U_ zvU#HvBs+stk4=v-=zw*Yj|;NXCPte(;RwUF%Hb#1zLB+#mS27<-NTOcjPj;4;dFn- zjhOc0@7kY+K@Gwd<@>Am6~XxpyVb@YLYcIy%R(HZjT=KRxy)mq(a{-?AY`V{R)u$^ zP56?{HjL{jA}ZhR@A>!Hp8l*46nnBYk4t6Gf^)z83<_^+@)b6G1uJKY>s7}gdNY!QI#*?+Go>*oz=Uo!TSb3=BWR`A_V~5L$qkp zj)!(p!2{G?JL*-t=19;<*nM#{j?vNlHTn_&_}bUth3m@AYyDh@Onj&PVH`5oG1>5h1f*7+)C@iCb4T^FOQXHuF`vwG_wj zEUCg&y_hHtU%^@Mu^IZ(($u5CkzB+%oCSrfbH2DhYwt06sdNJg)&6}{wavJGZz0HYxDU+r)dOdKIA(pj@Cp(caCnx5xT#d;9C3$A1`s ziOKwF`hWiF?!X+b>wjsNL{WVV`11U}r;mNv#ZTJFD4(Tdie~p*4A#6mA`O{Coa6Ty zH!pBDG4eVNRKR~9k8dCqq4VQ=ZDCIbdL@CDyY4Uc|F3_a6Zr-|Jlp;EPV(n(PU_F- zr+YL1Qf~ZpR*N6t6mxWeQ0VUu1@!(57_)J-**^xYn;}~8k6}h%*0TD?c*LFumH#E2 z`0MlD@;X5Ft=|8~z&7(uAsJ_H6(e>|Z>?yYA@am$VEffewU_FV-0x1{ zT;?GYt-2%AQ{^{w{tl}C+zET4$_z0Bb5}B1mPT`)cTXgE^r$ohlc*c(Prue01pjV) zF5_eEKKaeRR3NxQEcC-FBdQgDFMrhVs#-=u|6iDTzovbd{I9>P-E2#{FO5F@AADC_4(!m($5(I%w-+dx3aR7I4wrRbqF zvcq<-1#i2_<9PKWl;(zfi5aG~S8%c-k;)Mj);#G2f$u&gDftrwxu*li4y%<%`C8-a zweBx=Fuu)~FX-n5TEm6;stv4%I>RQ`{!U}rqr4ck1WLR_>ra`_cg9zG27b=){kr>& z4`$?pJ4dDO(qsV~Yjj^Wf%!>*UNLuO$4IUJH|O_xecwT8+L0WwHwJ(QYP07rK15G+5;%PPgU5?Q?%ReC>pzj=hk!z;Z_xp0^}=1X{CV> z&dgYt(+m4-P+5$Vn3(rS%9~f>d=kk6LZ$PquPpeYo$I z+R9Y=vZkkof{NQbuXJ~Lio2I}xV8nV>*z*)^U-6N`vu%C0}EQ0-PVLN09s&N`G93i zM~665+?)OJ5nd|FluI2*qwET0noiAeLXTPg!ZZ#fNdptd#=+%?-U4BTM zCg;?3xDB8ku4~7183)=bvn1fttL99H{i`W;sYg71Z9(5J_ zOU4Q8SigK_;<)L9S*-PadQ{l5>JiT&eaA+K@-aor-9zX{a65V`-@5Ov4p3|GNJK+o zAe7o^YlR`lq)t9Us}>$<_|$$UHA!TdCJoDf6E}@lup8`m34R6O5D8islJr1+*wCi_ zZQ{J@#k@yiiP2*A=K~Ej*Uqf=lD2~CubaCn-ifW4U)xb`D9nk%E$OS=WY>K*36drP zWFeh=HB4zKo@ozXM&CI7OEgL7K*Q9oa1q`Ao_^k#AqOVaVEnYQclV5j{oFTvxh42?ORKBx6bAtQ3Y^RxcRN>Fkgq;l^WcZA3Q?szq3Yn#;~ z(XQH`R9NkIlU>RR2#OfWfL3fdNpT}9O8fV+Kl#zbC#J-XEdZ#ruw2r`<=uW<=R^4goS_s)-krFSkx% zq|4{^K}3BsscVfo(pRb*ylZKF?hxtC(sSPW*OeZ4KD?vf+VX{1rGy9!wljjH!ch)S(FndHq&g@x)} zAj=0YDe=x@IJc}#8m7E!1?gO`ZL0c3m!qx94bc-+tEa)stQCzdkn6pxc~Du4!tFrL z6Qkd1L!(mkLDniwi^D#@!^Olj*ZU@W1-~jBslCc+gi0dKqvRN;U6(Hdbo;|*|5pT( z>&WJ7PCle!`haP^x8`fxQWHX`=^UjfvcCruOiy{=;uF&eV_Kb2@Kj_fa~O4z2OF@) zTYFqD+?BL7k6uj<)ZG2U@;ZukR6;EB_ZhC4c-5rfCd6PrPzC;Z9PA&Z6?6NisUcWd z8yU*Pd$pVf@wOtvkv0$5-1_&h(ClZ=u3&E9?OocvK^EKfsMj5)fy9n5(wZGf8Hm6w z;Sp+M@e)=cw*BEA8;PK2a~-&O4+ka)zbCicThUu9W|I#wqN3W6ijobOkY;a}qW`*Z z{n4eZWKdn+NuEZJxDm~TDVqktljm;8{NNMROgMP(kn>~0rTj3ONujn@;`Y^=E*f^r z*&}o{TzFrLvfqA%q-;Z%h_|)I1YC2gcJCr)g4)jb8m%AH0DolX9)^?iO2HlX3X|&H zs>0tN@o(rFts=y`dsvHa zj24n}TA+N1(p?RdpO`ki5z!W@_+dFBBv9*aRqf!N|1)>K#+&Wi-IB4aNmx);kFnql z{IKt1@<3^lFyh|oLPM`%I9-#&tz3B8c?P|sR4#h8({ai7x4T>W?T-#8Z*QQnbtE_q zn)m|mIDcFfNtaTvYJiKn)VrrZ)*^R3;4iX%0DTNnTN!-OsPCCF0!t~_ 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 C5B}i* literal 0 HcmV?d00001 diff --git a/comps/agent/langchain/assets/sql_agent_llama.png b/comps/agent/langchain/assets/sql_agent_llama.png new file mode 100644 index 0000000000000000000000000000000000000000..6d832d4d4f8510e5c3437d195988fbe5eb99e637 GIT binary patch literal 291320 zcmd43XIPV2*EY;37G#7GMFc4`B2AitfOIVMDkOA>ih%SI0)!A^K~ZTU9i&SOCDJ>n zs7Pp15;}_Tm=O?u1p>Ywg3xtd>?zgGWq(x?DNZRH$mC@ z>{q_S+FDz^Uug}-<&O#aFDr+}SS_z1+`NtDuV~6Jb&6(wmCus!;1($ysoEmppiQ zIX^LdnsNseHaH)FU*?-3lx@3t}L( z3O?eeIVV!by=3|(K7iH)*x07d6UYDEA-cIYV|6QF%^@(^)%dOhj!!o;n~+7aijkyU zhzRdc-od6yC)Snh{`EW;eM1}RK*T^dDdlyBpQUE}rTg4w`mq~~ck`2(DFnF0yU8gx z_3cnbBZTP+#Wv;SzdEKUutk8<{W|{+Wyaq@V?;MoRKlU;roj z@ZNH!%&{P7aA$NYB0by%-1!S@r<{(+qlY^&n{}>HA6d3d=1303> zC?mz&8}rBn`SgpaxkYkVqelYf6w_79i{{Gx^GNv|<77U39nX(}ALQ*qKBWQ!6Qhih z6mF*5`yaV2r+srCv!XV?K96n`vp>U;=xpp2IeJZDbF3=cX4oG+xU1Qyv7S8H0ys{*wBc7@rPb@>*SANf0px;+`LUUL!~@2@mDs2=j(G# zS6)2L6?a!c_g-2IFKh{fGb?M{QE3!`BR@uc|B!?ywQXI-*lboa-88B=+)I6dG3edI z!ZdsTLIZ=f?3HC3IfI>?@NgML;yA~Tk>9Q@_6DYRZDt!8+5t)h+Hej!DQfKT2oB1t!hj@{8BRy8pVGeBWH-8VVP`-U z94#DcA;IyD_qU|23Gv(h(Rn5yYkrql;8ssHmSTJe-wYge>-f}U5NwAD=20?y(&T5Xup@(brv*ww1FN~<-Z2W^i6Y-hlrui43?EIy8L%3nv0$zjoi2=HSo;J3ysK1 z*)y9dFAZX1y@iM=X!Ap{@}F9<=5dRCIhqFClctFdtk{2c#^P6sK7^%UmI}**m*AA0 zSBD5CLOjJKy3GZAu;U-p6fO1dZI7tN@mA*|jh#eJwOboDHO$RE__OCgc7 zh7z(+7Hg=zNOu&`4EGx0-8~zbWZ&ex_J9yw48qO67b)BioM2z#4mlFk2Su}OB}Hl$srY1@ubwUTa}vck(90}EZMeh`De&)enKY_ z71Or9jrO%#bxwBiB;nh39TSyiglmu;CWC=JPkIRN>6w-k@|JZ+hezjZL%?UK`(%Oi zf}f*i$eo7kR0f#KSE;Mhq7U``QA3BZU0pHsh(?1c$zp2VZ1bfCI!T7DLUQxzs=CC_ z7sL{GV7@V#0^&VqLiIKu_> zCb#Cs-Ivid?gUI*N%y!=@p{~le{}poVcd0}u$;rq8x;iK#XR)QIxLO{VfXXVM`<yDSzLYGioV92GXxcq7u+)fTd4B}PWtJ5OnNW*K!! z$I=%neA2>3>YYm(cXJj?CN_{i-`vD3TF)~ge|nXNRE>y(1WU#g*(#+Fxk zIN^BK&)>%3sFYX)pSWs(zL~^ud|cmgSZC4jCugG;X|KC2OG^rQA~zEI=Is~MXio6L z^`zO?WfRx8H4f1D-uWNG#?haK*AMt`eO?PO`fam84bs1AaG@btZ(L7-kY?wiH(@<} zJ;RWmc49#rBf_v>(SRw$5D?3l^|NfxA-XXosE;j#v^Y#^*b8R;*VaOCk0I&OVgf^Z z{Dad8@q_>9#)nG>=HG+k9&9+RnOOFPZe{FHb2ayFc1&*8Ur@=YU@azjkSv6HUb)5~ zys(~>bvsBJYE3^|Y9^mGUw7i-4Tw*@iux7Xj0vCD1mBK}iGh=h1wp6BMU~QwF*>+V zRY*S1PvlIZSv5R1biQHr1ni|ohs1+8^lU~fI?0Md?y6fq^i+cE1WyE6@LsPN^-mFt zkU~d!Yh3-dAguGnqQUP87L}VIyg+PP?SRro${aJMb@?wws9KK6Fj8vph7fYIUG$y| zpN?)aYv=LuqeYfh#}yfx zDrvrcHTrQ)a_YGj?>{2^Gv(NOS?SF z1N(TrFWo6JrnU^}2H_5#ISB1(Xv3Jvy|jKmd{f8-yqS!-yf|7w2jNeKxosH1?o5l_ zi3v{HG#Ia<#e)07zPH#GV9x%vI{j)ZZ)1Y?R3+$Zyr>p;|AR_$&tENviyk+w%{zMY zZ$3d|=oH}oT4+kyqqBxr3!+mh?iCa0D~Oqkb#~tu#W&6{+C__o3wv)8%ZSeeRD;qy zqUhUpFiU2A3MOtWdF$po9?i?t@0%|*!Rcq8oO)$JvN~`Z9$INqt7aOpC74ZH*4W+X z&~_ihdo8GJyuv=+l*|gov3}t)H?&JVz(~Zn7XNL%uIW^DEgF)E+8V9OUgd0=PA$Lv znfZSbbwn#8@ufsOU45^0C$y_}m5@u%dUnk8kqa5k`t)0lQrkuP;a1wSozS2I&TIm9 z4$7ayTTTq}NZrJkW|TNGLy~N_7cW#9Ut2ihxHrL?80QN@FNh$A9{GfN$JjKvRW*8( ziK4#T8^HyAd+naFfIL!ppPfZ=NU#OUBG;8`?odLY6I%kRIE>+*Wma#d&qFYqf8p*% z`Z43}qU@|=N3d66_tqYWhMvAoR;QrmoocRU>AoNBTaYpvB*V{9&vitnkfT*r&{q#F zK23-^8aB5o%l^=V4VTY2BEOId^_<}1K#HudF}6!wZUhD(mg6HR&~tPAx|3wHce9Cc zpI3bZ+_#?5MZ*dl)8#sL5mjNCuF{U>VS99;&4w2jn>w6i)4xE_6d1L{sx7rlXi#)h zjh!vQs%*R{sod7JwryuM_9ruWTm#lq&A zXEm94&*Yo$1W2Jn;T?}4^dZmj46RYteoXkIdu+0FbxnN%c>5oTA-G%e53LHy!pIq& z29^Oy#RXLn#^M1}OIkJ$dyMUBi{V{X=*)JAr2t^o1dxM|2;my0MTKP&&Dv9jLOguD zQhUAiup(Y%DMimwG);}(+PY;1`*57ID9=0eOKHaL;7iS(*3b852M)|@T44sMm0)!y za~K`p%BkGf52&X}k3fE_-J1{m!ndKOlBLr1Jd<@?Uv zwY<}N+#E`xw2@#wkL zP?(lHktfr<=T@WR6TeQ5DV*x>pvb=?kPc(z9)jO@D4cB?vh~}-9$lgb{mUExJj#b6H$!<%i>4%&AR8~ zh9TV!_wf2jME%aO&x4B*2Nyr0n0dY3XPq3+4rlasTKvLhGWPUyW=XII0wHas&m>QmTf5=^2qTUQ^(;d6cGKBzii9R;L4yuD zvkCd|QVZOKJ!niZpHj5nclCv^+!B&A6}@s>Hg%S1-{P1tiL$@?C%=HW&qO6y073P| z73pP5#A?4E(bwF)6GMl0LhxJbt)~GKs8rffAAsYNw{5sx0S#ZH){0Flc03z6;GDW; z^Y9LvZ(iR?j%Yeh)cRDt^FH!xUr^f!&CpzupbV$2SC6+(?HFkGjv&Q{=>aC&JDCl^ zsl0~-c=MZ8ANZ3Zg;H3oNs_c(|8i1n^F4ulqc;NTXgiYCHLt%OY<%QYvs>5{@c9Mz z{f`m~h<9nQaqPP$+Tbx|XY@Rds084^x{}Sq>fnofFjK&&JjsZ{ESXv(ES5I=VefF1 z(qeHQ(1tg}*Kh5p-bQ?o*rd!#nU&)_sogw_(?a4hJd{ew;oH#=L=#l%H|HxiBcGp(mfK@BqZL&q_*viR*yD&rPCN| zI1&6yut&GwwTF0>Op>1*VqUQPIF5& zx7WFod>L6yrc(0WKPX?KY)gv1NJ2K96rWaPddcUiT4sk%Wfy7fFkO!(uqFK9P`({` z;6L;7tuN#dmaDt~f@n+ASmUhPi)|Y&>K>2aPV0s5AD3kzla}r#{BDuFgDUc&DBQta zc8EtgmbysUT8cN9KGoV;CkkC0|M;b@)y%kR^G;@7?g3}zSk`LQz?I7#Q#)kU1;@FH zsJ-)Q+*?@K*`e>qCp@p(?&+f--`6)6to?9Lt=J#0uwoIApM?Ck0n)!!k2&Bh!RBbX zLJ!AgtUpjeybZ3BRtcXNJc0Ew<&0?7WVT*|`=CCsmKZ}fo?8WGvR%s0UGu^mbarqX zp7O!FoOaSkbHQIpTGj5mdGkRf>vI3?H>eTTK~#+1)h{l48GW>6J z=(HwSZjRx=prpnn0n4Be?%mqaz8Mwhg!pE?L4_O zqm}+Im}5!g0FHA^=z+gmjTo@igvz9K{OULk@byDIPSc>8GPm?R!)wzqLFxrAd#(12 z<~huC>3r2E<{QTQ}u9|7@l_2V@+M#IEj&}MSVYyp$jgasU8gXU-( z>cD(9L6NNOfiYK(Z3SJt)`&j!vk@&JJn)|ikL`YH%|UR+W~3U;7_O&EHNo8+?^q^cqpHIvzqf3GHr- zPRD6eS5>G}hq0BW*YG8o!MK%^*B$q|?Wf6cl$-B|R&>RdG>(}@OB=8!1g(tRrnSFn z8!z9yJP@m0P#?oDmg5)cc<}v9t%hYUb*3BA(~83Tm^%oCy$fF{&@6@O?cFH&begk` zk*~2<-v5OzY?ee<-^!f9J38xF4)=`&tX_hbMSAgkjnT=7D)Y0Ai^f+Tv`XA#PZ60+;IFBH9tUhz^|nlL$7%byi}pWu*lcoQBScdJJ2 zG^4=)2xGfhkz7;Ao!N69raNj|q`NpNv1!&e*ZElat8dOQr<9rm4jW{v%~5=xO5}Ku z(^~Tr?Zre?@9Na+l*``D_y%}>i$A_R--oRG=qBn@bhRv>cwNiRObXTUvY9uGQVvVW zKR=XM6NTEHHH8{UVT?2Ky!q$_wiO{6JG-AQ`6QeXj|E_^jZjEO%sP2QyHmMb@OzpY zgdFB<*9!pD#k%vAy&FoJdj%#0)m*bLlHki`NpF??qwhS}h+j*PH4FPXdS^I}xygyB z`18+w6kg1>G;iDA(P8&<2wQ!CuOESK zce%gx-rJb7K|`lcJl2^?vW&Y$-MwmB>?dSwv2VKSKT65Fa^;l-nFQt(nkQzH8bC=l6paPtNA` z2Mw~k`cjLu+x>Eb%vZn78mF;qUo3-*L8~QPi_;QGub%hX((1K!1ol?DF8VJ-qQ zxer`kXQ;(k`a3wtJr3%3I@eLN#H~RxoAjxO(eD?zie@cM4fWqFm6z6|iM zNq+(OtBp|YvD3%@j>vIu?6jtXfBcl}=_kTFpzv9M4z z?q96$^9PmfLYH&qNgy)lBNynCO2KP`7{13+i_bh|Rs8FkMOKgXo^V3J4SN5|gNo=S z$_>IhuE;dz3Iξ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 i!Uw)F*+FFJjE9Xd#jFTQdC{Fel){k@;- zAvgfDv7a$xpa`I&jpPXGoM;H{K9``rg*{1MD7G6^C`M{z@nRD?>}9FDt2T29Ih{yc zi^L`P>o-nY$;cIYtT`Zm&Lr%l?2o*IJXAZ~Zt5XA0GL<|05>+b_Q+Eag5Wi}9M%SX;LJXuC1p+*<*PFVQTX zNu#whp>T~+T&YF*Pb%!|CMZXF6vQVTBzN#m+Mn)L(=gNJ)Osb_p##;C#g{`>nEbI? zwsbA|*&eMF|59@=@w7dVhKgJw>OwhudTu*j@^V>Y!fH9ztI$2mxBd9B`FR6Ko?o%> zYIeduz(>n?tCJ2Ag5SH;ydVXX+co#>b2}u%zuknp=t9Kuin%<_zK>HqAPpH>fE-@% zj}#BrFxUEr(O056eS;s=&u@ivRWAg8Pz?8eaD8x`>!-oaLNtIgtlRSv&(pREFfuwV zxp|S*vJ2<`k^Sykhuyvl$2AK7)av3$Nh2_1t&wOshdB$m57e&t9-wD`Kgb@{i+6j` zYrG^@R1{{Z+5}Qa@n*CbSS|>8cvRG>DyOFL zO-K8zEUf#I#KNa2w#1dUumj@zIi4cBrl%Ejys(n_&V4MGHwsmy7(ldPl201BPc$vF zyuWN~C$3aY3fJ3aL-cvH>=*Q?T6R)&8fTD4c)dwm5*0)v9;odXZ{unh?_rxeeN65{ z@5OIni@aI>2*qeBi}g#ru;KerZZbIfZVDMlww~x((;>U>5XQgtU4BatGvw^@svvp< zB&Zlo=WEw~F7BcZBm-mv@cMW~eX=+TjvvZCFlsLgL^GZYzgOy_Cw{UaRmC$&&uM*` zBV=^;e4h_l4Y@ke055qW=Ol2Vs`$%|>UK`6!nM1I@;jQf1LIwCxi|qOvW)&R;~2X5 z@o~FWaqI+Dg-%3XszUk%Bn*Eq=bs$K)hLjqRXHKeWkL=M>GB@GFuSDwP4it=i`@be zqrO$vdY4*Nj>Ww`~@X;qd#_J9a}aDdr)p1{%6 zJIg?I);QN;1+DK;O(gUm$bDmOD!CJ*THii)h52-v+rVL8?kbWp$zJg|IXE)?p}lMCvf?1i`SJKUVxQl z4-K~j8z+M!qlRnzk6#D$qvYu6u$u+XM|Ej7-GbtGw_U6Jy;1MMUbelW*oLfu?Ty!O z&C!EZxRJmhW1qEBcE~4Yu=Q|U8cfeA^-jvmP(3h;L| zc@Lg3$XDHkn|Qy8x{td|AG#F)qWbtaMEI6(JU%Ow{L?*vN2ZtF-`8QuF6q~Kd^+KL z^Ur0D!@<-cq^?f?oyLMrQSbG~m!-^WP~T9slsOV@tIysuv6X{{gk=;t))MKAu4sGY5f-KB=$iMGY_dnk-DhmQh zZ4KLeCtb$!@5pJfl+XsP_d++y+L>*@lSdnN(SNjB-_bfYwHf#=8-bQX19F-i0NtY6 znbS=FWo1S$2fr>O9D;PmE+Rn>zy6zcbY=Z~rV`oE{dcPnw5AY7aSjOP(YjBY?--@y zJYE^=2Rck1%76|De%;IppFUS{_rCix2iV~U1&swog2tPR?;BN)tl7yuVkJAvmNY1_ z0LW*%Pqmx=TD~xY*clJ7AC5jg`kAw0*U~<=X1uQlR@4MMD~)++th{&!HXE3 zuD<4;aV5#&6$XRBQOn{DSl$rxlz^#SA=p}%!DEof-U6j-xd!!pTQW|Z;nhkCI2ciC z!8&TzhI&Z$t{@RQwLfq72CMvZo>nj_L}7AIKt7B9y(|wB3Z5~yM5rU?U3Mk;rV0ie zuK~5oBaK#~@(4jh3-jP%)NNd{0_33w`$TS{(#Tc?UE+|q`3LNlzglUuJ{pX2-N_00 zc?f*O>Plhu{ke`93l++}8H>}GS^2F^f~N4pvkc0szn4S|SL9SLU*i$ZULsi>8#$v=j2>bdqaqXUEXGG?1{H z$4)q(x@?)dXh=UlRtQ|GdCqzb8Si1|?KD7Zp`57~$+p88D?GCv*%Mw3r?e93c1)*>3%K%=1>AT9jsU( zsBa7j8u7aiTodVXAHOgKmJ#~y2ee;P|3QvxOqyH=*_#$(_P#;W?}=+bux2+uOdwsz zM@Ow>R~B?Fn0fqtBd74n{MiwjYkUXZjdF*%ER}X%sKIVW1PnPH5~(6HP`8_T0bOul zqZ32b2S}pKIH%%hYCO`ZnMst)-L-Bm6+=X^W(T8nx?%@Mc=Ti0&Be`YE{kF{BgObl z-Hv{eXrZH=8@gRx%{S%vs%MTo=^?5xHDC*c{WSWshBxa2S7Qa>!>?T6BTQgu={2hi zBC|UrFtd#wAs^hQ1c0S|{trb70>_gE}v+=;$Ig-8p z%8k6#yRC9nK78_rZ7o4Zr@N>Rlb-kBU?(82;K!y(4Q#(OuL6n-fq1HdBS75CraLXbHB~1C&J;JXDT)L^$_PFu&%N{2eg!C(6I1d%cSwwtTlSs&KUxjI$A{(D{DRX1oHyG zzPwSn%DYVQKARHgq+sE}g%!5|7@Ix9Dp!83Bi`HPsGyHvq!6j%o7B#{I!8J^qn8vm zuJ=}ihbtZ}xcMLt8#P^X($UHPh`k|(id)La@81pQQjqX~*m(w024X!A|e)Tdv>=Ax27+Zwbe#+H|b->HSKRRSJX5vT^G3+~!_y_=Kx z>30p(n%eH3O6d)SaMce{DEA~p?a*xF=o)FkE}g)jyg{Np^4wFq25L3;1D^zfL)f1_f(u zC%9x80*7j&27`>~fEIGEDou+s>c+vg#{-kr8Kb9GcM8YxEV>J{e2tS;V@X+F zZ!o3ab)n9^-$A4&UwN0A@8Is8LY2J_L(FN5q|+91!Sp5q4H=rp6iCmIL-spb{lh8u%om+df#>pi!%AW z!x5V>rQ{hs#7v$N$n}o8Wv*tb>F=C6#2NB=+&*m5)#?>KF%X4c-yg|x|1#eiXCfhn z@i(_~qDQC3v1{r7Ic@0Wu(a(--sAxH5ejfLi!OWVykwv5i=u1i%D>4=wDs~j z%M96daNykp8P%}2O)7htCsuz)O0W1F{_Lc`;6vVOT<#xQg(_UH|JHlg)q0c`^04;5 zRa9r*$j}GOJ7*obJG?XFNEpa}+Y3YmV&n(p_(;c@Ko~^En-+wMUW(IEoq+Oy)Ot0; zb5OWZ=q}(Zm~_?ct($SR%h&!q^)Wc-Zl%gbw*%7id8+7Clrnu;^2M&kla5R+$tFKy zj2~60AWMn6sSV%x0?ykFRl}#ddMjz%tjH(dp+ID3BzPPL-7qRBDzOAk!>Fs8#NqA} z%o|BN>)=*V807wG2PE2NB9V5=pS*N-2YL;Vznz%ku3STB6vl})!ksb=j!ZF?)Gbr= zP`UC~S1WXNowL?@0!Mg_J|bK<-GTN%4$xB`LLW#ZSTM)e@bI4Rmr7{%D!#`mjLtF zBlF90*OkVZS$~1^XJ+>kf}d7s*ctKLu+sEj=86Q_^azT)dD>Mj_|#M%p=mC&Wy;+E zIUPZdBqoEM7i&Gv8*KQ0jvO@|B}RcofKIY57_7m9gm>KOb^h-kc^ zRa5p4q-gOt5Pos&>m5O&qq>kV-`7(VOH`U7gZwS$&G}OV-s{_u%F^LQX56GGy~!y6 zu4b))!bII7{tUY-=HA9d?F*vkBwc<;45;n)TN*%%T8Vjv0PJ+dBdvYc6Q~k-DZ1y= zV2!7GlpJ){PdKtWHd8n$Ud3gGehc|~5rtB%0C|z!BB#-XKfkvI7M+j$wW#+_E?hJn zE$S#h74Vn587^`G#|Qp|>3qoVw-6dGa5DOIaj_11B_VJ*q_6NUb@+-`Eo5==A@cO{V|1ZA^zP`xUq>`qX9_m>qp@4jCinEBm__W*Vb2Oo8 zH;%G@1fKx;*?rT5&*KYeK?ca54*pDhyLGP1Cv@CODmxGa5bEwF5W{Qk>n7Z7$I?psgK{)4b>OrCblD%@-!FUE zwvjo$4?GV2gp|5}ta6Mcqp0q6{DE?yG7dOWaF4%x9iY?g^icPhg7LO!@y8S3M6Meg zXT#VsP(>(00*_ES#pkX9^OTU25e1-%ilL8oN-E4ZPt(r6k*4!u^2$zYcGLQ zZs*L%J@8#CTPe?ftVlZuE9guL3w$3pxByNvFVsDB^uY1hQL<5+tW84pGl3Pr9G~2; z{}Ca+0@VGO&@BdaWAl$120S2+ts4ZyE`a>wqHP}I6gw*jx*?EXHg63uOs35q6GK%A z_{@5N!G-#<2~({qLL;!L)7K-#s^!(6E!^ZvLa(F+0M9V44=y|YVjpRz}M-*{R)9?@3IPHht5?Ge88@MXI$#p`W*_QA(I>zRM> z^EsZnW~WjG6~4_JRbPTG+eM0zUbZtIwym5O9ig;J<&S>0h2Kt=ePih%c6D8thbzl( zU+o&HzGZ+j61=%+bk>cHHfqz|t6l#<5&?(W|B8KHaYeEPf9hS|S3Yb^cS=Mj?n=S| zIfrUUC73s;ZEO}ob9yT4JI8}4!d#H0Yn8OLpFthC#3ZPD-IBX5;o(qfyv)q(dHm!6 zvuuy+n{$pDR}N0{@f!Oy;WttG&- z_C%L}(n+_>mL>_1Jc#*c52#n&ucEI~wAegMS<)8-8LlW@%C;9H$kFkkc>t7MBrWyo@0^DE`ZC~A z{h6?7$s8z?_xf)U2n0;G9d|+wRKn1JjAD_)eCbqUZz2oWeh8+}__{J#>~J@6%}IqH zRY2%+QCTAF4I^CwXLhC4g@Z*-K=P*b4y4FodwIyEihA)ZDY!sm^O_r4T&()oGk>MC zz}=Qk4#=cSu$?Ys0*nyvW7{3qZK0k8L)o<>=VH&Fjw?9Kl_J*}{mn^OcKGt?b6B57f`e8o5MkRE0gL)?49_)xgEMBh?U>%!3-z8J@z zC?ewHe<2`J8kf3zO=7_x6)adff8j}N$CGA-8RDj$N9GmP(>MPovii4`P@FZn?tD@LD|441z4sFX0&tumPNGPHb7FPCEj41e~-26RW%8K3V9`0Bhsmq zMesE*e(PvqIV<2pRj{4^8!^xzm>*l@z0c7*~i!uK!2yWPF z7jr<>-Wuqms)#b1TMiFGXj@+Mvezy9ai2H1y1 zm)l~eZfthB_@XJ**bSOt2r}zGMcWnIFyG4Fh1BE}BJdICKy986ht~+*Q;pZY+czE1`$7pNRHTlhg{!ubN{P_n%u@E9D_IozF38k6>Kwp z7K``>;0VE#ZksHuRu})m@{(LbPv^o3!ThC%`*lMr3}rvcV>!1w`bqmQ6%Z$o-UdZ} zYRRI~YpW0=%*Pu2iuBlSao5o*?UM`77pLWM(}Eowc8+tAo?%2=Kx0?_Bi+)8lfNvY z%&Q^m$3oJD;G2y6Dm%R@tFh%4ARkplNR6Wk%fxxduK0M<`8? zEGi6j&mP7YjRx6Tb3d5I&{tiS)l^wB?neOBaMr$R%U>SR)=LHrE&aMXOG-1t%uTt+ z!O!O6sa=3Y@N)C3orU} zY6j^f8gpLN>#nbWZM+}m{e|FX{}a-Jmw=R9h*U|yedP?XI(b*Z&3iBwg*$5j0%|3I zRAtoezTz$w`1Q3-iDpFrPh-oDkBE^!41~&updUhKPs{4L4y%|`6NozE0T^U6BXiD%Mw+T!LAbkZhkR{U}rMus?U zqL3kM+Mxbr9`HEI!NSgJml!K)73_#R=lBq^%Bma06=qA%iJMAi307SnYL~ESD{h&haT9f<| zOoRUU$1s>3E=YO+d$#awJ3V04=a2|&-bi^KEn7H{<$+|OP0vSH%QBfrPQ#0>hi>n^-^d&*}3lc+IqzpY{D3hSZA+`RUBE|?5i#G zdw(lX|HGsYX1d4wbWw@J{S#nkHa%{;sO)mX;z}Hkjl-m*E#oDzQNK53aXq6v9T#r> ze=jsvYvoYqR-DC5Kv#*QMH0L2=z~g(_ukzY-h;c=UrcW>bD&-IW1EaQw_ufG8{DPr zCC@~ep7aLOvh{JCsBPy|Y+GTNE?ASYMJiOGM^y(`%Jb~5z0l#bKe?C{F)wTRHV^}< zSwBfHT3mjezYyTh;O9Z;SNPf>4lxr2LIv2vc++CLi9MOx;uJq04|cf6)Gat~W7Bzk zS>k3{6}TVQwURYW+bTb)q07TO;h%=Z8lr#j7z|+UCqK#lD5P#-OmB?b+g@Ti+FdYGqe>vZKKz(@9fF}orw*Mb1&eB{!> z_oUVFjAg*~IRSXbJRc70VCBJh`_#W2e-dsBwyo(``kU*3`&^Yp1db{o+Uon_3RG~D z?Bn}eag9rM>!i~Tl4ncmq(L#j28p4Xd|#yJno3%YOz8^cRVLiw6G>uvZm+}LzB6qe>Qb*RLCs7NX?k)@c8b_j}1 z>-s-bePvYC>ldyHqJVU_f^@^sC8&UebayvMHz*AfB0V$+l0(-}l0$bR-3&wb5chY^ z`LDa~U5gKVVZq{kXFsu@cW+?M5(zM>@uDm(8l|WZLg#)DyVW*4eGC9|=pe5@8(i%} zHBvHuH$k*FuZ`S4$+mn-3F#+;n#K!+D@@VDAQSX(HW?9vSu_J4IqwQfqW_EM$~~0( zHjbXY$$bZ(BRNL(c-C$Gj1DY`!37LJ4W#S8|Jy)Dg>yJp8!9s4x+)cRi_g- zA8jo_mmpu!r#r->;W7Gc5s<5Xt@rFpmy%Wm2UFCjz#2i#)KhF45UJAFgu^$#Ev;Nfw5y8Oj* z=ZJ}4S4dPfcEo)1~j~bPUBB2zE;jx`D{4I0Cc542UdRXO7U$66q!ksgp+%R ztmhd6DthYR%QV;9aFjj6;H|UFTR-^=m{VrkShsoL>-J9`$9}($#HD*tfEx7A)Z5b* z{D%!GOF?xHU@j}79Q0OUM#7G*^4}s?{&1z?!|U{?<6B}8EB-=TZfThS71X^S+AHGT zf7??5|H)i@G;#5ZgUp+4M>h`+GWaM4k-y}enf}C|m>UjZhyEIVH*egem|~x9Bfg0F z9N3hlY;EhF*QKbN!316ijt2a@XO#wijiwY2)_9y0bI$pQkZ&B2zN4 z4d6T|2I@hKFOKc*ZqiCivBZ~ZfbzLt2hqGmzGnrX4@lnBzJIn&s8gzEsI5C@sWGwKv>92_nBkSlyQ(a5{sE z-6#eL-q>+^7{{!876b~Vb&C42S2H?skphvOOV49nD1g@QEtIk9@h3_?J9LI_`q{bl zCoV|M7$-Z>fJZN-G;k8b{qN(Tj&tz+qKy${gm8BGNGpF)gVxe767l(`zSw*^@0#7xNcRUo68J1n-(^0G&vK9r#7fYXSakZB^S)e!QYQ z=;v1v3K<*`2cX6{|a!?&j*^JY5J%8v<6#b^LoT&X?_uq8u!+G`4NNK z!hPEUR$BR#kdA64Y3!5_GpKPH`4#pNw38O{Tx>|{M69hJC3f{3HoQ71sEbNE*>Mwf zS|u(ycYVO^`=OLvbjf(ndFodrd_htC;PhxZlNvK!STcRQM=?bpVXxBlyF9KbFncN` zFl~HQ$*+BWiY`H`M;!7@E^C9aZRM98X8!2+e^$Y%EAr`D6u?)?+i=?B1zmJS$z&9ct(tQZ;tqzai<6j<=+6i z;kf-Mt|_m7XVUhL-8*J?R*lo@YE1e5)*H4qn*LA9Fg4G1s)WwpVm~Jsf4Zk($?4gsw!>xZ+Z>4fn>y5{)+LJGtH4HWr;2O1T&n2q{qqudYuAMtW!`No$Ui%5_Cyo#Je1vm z*(4}KN4^|K!g|mh^M5SxKW!Rx>>DqE2`~-7lxsjuW_<>NKxK6s>z}&@k8Cpz1`*rG zFMb!ClaliOt*PgfyL|EfAFQYYKclzxf#17R?4ZU1cYb81qFgVdt%duu(V+nI{EZ!8 zb!sx7T0ZCXX`+1UnhT`1>i5ouU9Y8%03>ImeE3VD=GURNZ$SJ-I|c3Q1l3RH%B3yu z`Mdaz%%-K}ZEyX;Zr~^c>T8G8F6wqdXB95Xs+wycK#=RB`z#UqJ#-+9c43!1r!)n! z`$K?OM^&m2)~1yb(mT3Go(uOe7=P;MWPm?}Jwp#HV5-ZWCbCm+Z&~BwVY#+5sFFIe zj%O~mP_zI(2|NlZ2S}CKLxnZ=IHQI8a=TUt0?IK7dQ&-YnP zkXC6$BCi{yzsr)$Z-|Pg#95MXpC#|?=?j@+8L|R><$q5Gn4DBM+YV>P7=5zk&DsHH zzeSSgKY#w8=V5UqB$q&<`jEif;Wht62ae z>Pwv9VF#kYOzmazvGIGqC*6`5WKtC3TGh11_o}w6hWfl%{H3CfR%yok^oaN>xX+H z;xO779fAEfS{(rGTOp=gwciWC+unmcnxl2O$&5cLK-&Q8w?r*{3!0-_BMJ5yW!qS+ zxzX-);^2E3z2UD*1TW|G0998X?WOcj%3=h2Yj1WM2H;6kKzaFi-O@arD8ju=K#)-V zZAkJDo!GN*55YU&X|X1~CysyG`e3V(Q*%z0#1U>9!y+6pETZ-_q`-$lI&@$lIr*ls zC4Ok3d2|jK5({LoFw1Qqv%JIZb+jF&sMU{??mr=?5BAJmTleYroXqJ<5Zf6@smpDg z+WpGSM?N?Hgf_L`9_^p79v#(&>Ywuo`DKN--^pWvYn8WJFY+Q%rSe<8T641fBhn78 z$ML`UP0sILPJVjha!(pCy^~5M9`|sCk`0VjVYV)dJds>{l^SD*I{>h z<+hFDQA~))b@0bR12+mGSg=tUR~+AC`7V4&6NQoeWq3Q37B=XQ^uR2JJ!`P1AJ2XK_b`^*v?fGkS|!O_1IM{l?`Uky>t zQ-iMytRRutiUD5gKS7R3@?gvZc1Oz3%!WyfeGIM7Z7#P`tbifoPqDT6QM%@d@6Ps{ zx&;4k2|sIsJ>OdGwB{Mvtq9-c0uL&_xB~edF*)?q0);+GX0j7|+wg$a&p;Zg3xH^M z&)c(DcMq(_bdT1+_83`IWprSgIWYO?_auP=k11*xVXYhTW9XYD)N^uKH{K9W)Gz;~<`JYmg8Z7nH3S44IW zThWs!>bt#z@(Ng7Cci8^EdJH*aoCTVZsd**t0=u>0+EDsth|U3#tK`vs9R+wO9_y~ zC_3Nv&0$ifBn*}RlU@#$Ed7>XJhpCdS+91fAHK=Qm^=KV7*{iw#mmd*q`v6KvyX3} zl9;!Snx7NW)P7e>!&omz1sjcCFjFdHPxaYQ7!?Cjt&I_g-{!9Ig@hrD~ee{ei?xY#H`8;w?Pmj zK~rjKk$ZJ8cD~+dv5mr=`dRNNwm5%MgV8EleTg>ebvToEtKZG(w?Er2uh8-d7Ku532jd{)Ho__#vI=P$QTUdfU^`MOm4chD zqcHeJ*E6pnjQZ?|B3&-yaqMM@ddV8EgKge1=W~27#0A0JcIfMzLdHodn> zY)>pc;X@dYBrfXzzC>lDL?|?ZIzX?m#6YJ!WuA7GUrX-4C`WAH%LNO4#*;X;fnVZv z^Wu#`JR?|Ufb};i#<=TjW{EzNBnmbI*T3{iV)K8!-2VNmzrO!RAG}mJ`bmdz6Wy+& z#LGOJDq}8eg7sl`%w5It4sJTi*|@haX*rcys(&;)C~h4Wh4X-tzE67{+OZ7ENw?BZ z?grF@`xoHm3_G8=*w1tsK(-v*VuQ#s&V=Djn;43WcLcMV%aj6wUkl6Fg}sR#zeql3 zh~IN(*pcWi60wDG=mO@xO1(~CouDp^Q`H@v>WIhzdYfMoSRX3NGs-2 z)9mnHm~mMiInT~lISAtcE0YR=F+;Xl$TJ7>OazsVrO&YcTKBm7Eyij0HJD7fAo0F8 z_8*ksC}4>hckug$R2Uh*R4yZjj0rQY{8bI@XlXV2@x+9v6R=T z35O@vN>=%h`!Bfb1Wrun=th{gzrd>UL0*Tbo(D9f6TRA+(;n7h1%qVj~N6RNNtIsM?$&Pa4=faD#nBUcbn}}Rh6NP@w zNFT7ilokU9$`qQ(*%x0+bPb!=9oE)bp7QDP3XKL87s+rt2Zy1nfvl1&6;fTu7ZqVx zpNrBSj5|-)6k^AltZNr&^PQ>8K@r){hqg_4ZLheSqR4ye_S(!lg;Ph!VF_e(sg=vm z3xgUvA_W=PWW)xA`$)YVL`LEp*H-Z7=!LYc#d6{we^CV{YrEhxAR1q8G#K>}fjw6F zTUM-4H(fnLBRDPdss8O!pu%}n6>6Y7=!vqUy z>zWeBU~cU8^BE+jcTRyr^BWTW?YpPc6?5t9YDYE07t?u?*!dZrX1%(Q*!t0WHVq_^Je>6f8T8v7u~dt z27l&RYV||$ddqVeqtZzlFS;ApoIB85?kxoIkAa0CxKzpV<9t6qqM63<9xym}U7}n+ zI7|4e&YZYLTyS4_E#^)(_Qzh>2F|5r2D2NR?3i9RFkS~NBLpKdl}c}7#}^6akrsEC z8UBh2^zYOD?{$1__^PL;$#6i>%)cP@%U22yQlfqHG3G_A7m`kGMYzLe8VIy7IYspK zP!qlIrkqrDT?<)j`iSjfjPY6{Tt&|$pGlO0Z><8{79w$`0YURaE0c|uyoFQSM;pEh zB&e->Z{bI*m%_62;C+^L@Qja&X!)ea;5fvE^#@A_b(a1i9(@r3+{&EX=AY<;0z5)8WQ(*J-1HaO z3fi7;CMgRg6|R50Hz*vc9$wY1x_{50#oQ2&lWJdhWu-8pGH{LC6Rtp-8ROo|)ATGq z(^;Q}J9IUS(b$)ZPD1S&!R7Z(zLJ{H3ejvu7pv<7g5M=`1=y_uDeih7wp)ooUj6y_ zn1MrlVLap!`2v|$zw0@4OQg`c8n<5{ymj6v>X26Z(FmAQ4UShHhE&F(KTc!lkt@<2uwbAr664?QoXtjiVd(r{bbX}?!yH5RrWnLD%%>W*?W=n~J z^uQA#s^N&M6H+QH3-!p^Jd?4BB`%9mtgKElH3c*Ci?J;v085&&QG3>;SAAYd`#V{K{En{ z_A1+-ZrUzc)$=7;fQ!f+bBP`0b>Dt3N^4lzZ)>pE@Xar)R{E^Q!@~T*nNaIu~ zr-dHz*`vx)&%Lwk`bR8XS}nKN{!R3 z_BhdBz+~dEbPptgzyrbg{_2h{lCT-kG*GO>hEI3!gprVO~AAeWF z;;*C}e>h6fV&RKd$b%gJtnrr*Iis@6#A*N!JWvk1Hxd;9KVt(M=|)()fVbv7#@S3pHxLT?QqJH>bz?hcE-Ii z=6@a0>coXl4!_8_VJ8~^_~3`np>1&bf3SG{CSIwWZ*Xcs%q1q7HX`e*oD&CUM4@-k zvLDv0iibm=&O6-UQqUdAZ$6o1G&PZm& z5g&TeXKpiWzJ%4JD{sm3%{XdjSiyQI!@_4`=Q(+80dPkUeTlsx2uE(A3bE)~S_bBB(T8d`~k{{ zB$Dk2vh+nX_F?rfEa6|@9G_q8j2Bz?ns&3;?gQ%OSNFx&D(u3T-Uv&XE&{A+9Hb7N zJ-4vOpLMF1@{P8!b9>yCxY-W(SnfO$c=Y@o$&~%_Hz&?t9GLz)jv*b{hg&vDR2KR- zC?G^y_oPn#-h$l>c{AC8H4{m~?TE2Yjc~reLw}6vBI($aN3`g}Y#7hw@b)hN5WV!& z8zE@5xG6T|N{Us-^P%z&u{gD9cOyIi*1uMC`DcioWQ&PzJlzL1OGatK%4 zIYNQ8xq$nW8D0kUz29{ccX2P+cX6L$JpJN8WW)Nexabc2kgqWaQbBIvX}p7sLoD@n z`|B9-Y7`11cm-6V3f*UzMxu>+O+ZY(t$q6nxC<0?zmic;Rs?%cru_0o@7tDO5fC$91XP`%NfzzZ>*PKAho{*^?pX*+}tqnLnBptmlmjO#ldb zpitZ=b!dxlab&S`!?8$xfNIAW7oQjRb>=Vsv~go>OrwmoW0-tz`$2e{Czsnbv)?(! z805!Y=WfTK|AK5%IzRF|8jpYrB?#P~HlWbXZPG+0Ao~1HghWkl1BHO}B%0yenZdq2 zw)jZ`omyJuE7)XkF#|#2u{7PH^RVU6!uVGk%1NHWEd|~*E(CwW%uw!If|f zrHZm*_00D0sN~p?kqxbPSIkDoed>e{f88hK##$W=nr9~$Qz+UtsA6f5k{g7BDq(A9 zjVCs&H0>Ms(My*CiDkxo!rYnXMKOV$-A5Htr=IQa3ItX*7F+%9b911t2qzK;b2`_y z-uyD=Zo}r4?y091PHJel48+T`4|7SAC2g_KZap|5<>)L@w0eD;ncPARE-&PaJFQyW zS8(G=gqi3%%#2iJ4~1CTuH5K(p@L%Zkbn3hxKEqy>wLyuw{gZPQ`g++Lz~_!y7MH4 z2Y4_|-hW>3rwXeO>KWG8M-c+#Id!Cdi#{RYD^{%B9=dCx&NeRayfgLj&Qt6#mkgmK zni{jmqK0*!GZ%e3viw}k@b>L>zZSF-Q*wSoCBufShYhw-4Ug%>Op-M|o<#JZ*QaRv zMR^A+t}BD`8fZ;We2yEbe`W8Dp=lu&W87d5TgfMi)jNN`qJl&h9gE0 z^ml#ig)?ds-YAC!5>s{0dPcKf73twBRW^0Xc7~ln*`uxVl(DB#mq9T#*5o zgRtww0P=QVF6F+j16qEg*SAjZ@<|tgh3@2zUsfFo&lI!+;?U`Wj(Dgnq2geirDo8=XF= z^uq%}1r`Ik2RCn8bEa3BMKQ?f9245a&@D=58xB_nUxd(_F35;|UHctI=a`k^?#*N_@ zcqKNwN(d>MGZCOlZnAIg%gGm5M0`euX?!sx5Brz$uahww4$4Dj3Rh`Jc@#I59O;cP zljI`Gp8TkI*HX}^>I4S3{UXQYi~RYrhC8}lg8J~NV7u88i$wWybXtn1Hy|+vAGE06 zoU!^~d6x6-8M$Da`W%7#B0@#2=i_c9E2AYI2lqoXIbTi;8_)-@QHWIK9LCRaCfy~S z9`u;OTE*vu;%`h%H6G{IqG(%TJ{u%!6Tn~AhrR3e?T{QH=g6`+qt2m9G@Iuh$rkjx z=|Mxz)n5$~xz9p`7eeR6ohunFJtFb5vA8S5CYO8boQy%?Q_ME6^o41NC}hV$UL~xx*PiY;_%75AMBl&4{dP9j!MqLtJv{NMUuA zPPw=yAPXpOa=RzgxVXb*%wo+pXqpi%VoSBn&96>z6n0KxRCC@B=pxC`5PiT+iiFFP{aVALNeHH#PON{N(I)LBSYT z*J1_>V4QsN5LdYu7YXS0AqRw@8|(cHEucoPA^H2lkw5s zMvyf$2lQ54-JSGiPOz7=glgr=V~u2PB4zGw+DEJszV-7pLzx;W8#+d7aTUvmwj`cJ z^$$H*TAKfw5^ncko?ERHWG2AUKuw68=ev4xs78QV;Y{Ywp-qazeI{Mrw7ypg^bUGB zH*W~Y$&qQq+$JHFvCK909ImOAOV1g!;BT+YrPRnLRcB#X*sBXYbHw>^rE6#}zO-5@ zkU8kZkxsh!0^;(~vCG=p{%nGIZk%b=1%E)$H6urW-8@h!t1hr`A#r|(3punEKX9#_ zx(pPk2WpL7_Ca7+w~U4z9r@wjvAmcMmjLNNYS=>cEu*7Cb=SI0g71hfN;ccvGn&!G zL`jt7!=REFGj9V>3U~FqWv|Pb>!P={UB=Ur^)+1m98$ucs^6G>MJbvE_-DDfsPl9%svX*w=yeSb>e<=y7zcsw5MWIWKe zcxDoy6|z5)_8*&q)(KA=P=!c=1$1vz%lN1}{RM^p5bo#; z&SccxplRJ@mO_3hqXWYOJ?Rp2cbYHDMIlI|*?eyhh?rh*(N`|}NipmCpn7~7IbBFZ zjW>8{N%&B;krY%B88V8EoUHS)Fc#2V4OnD(o49Psyd^iCQOo00(Wqs|``!B&L;|c<)mG(3Q(!iz-&PKG8XN8Lj z+F`{F+$_SrxCC?rrZIRd!NqB`Blh?o&d4vDyq~9}tm5^iiFaEhVMruYIW}*~9MqhX z)FbRVjLE4xZ!sg~+1L<0^!)F=J3XS0TYs4G1;8w<#oWlV^dPBi8^)*0dVbBUxy5q< zQ~18*JGMuWE#gOZI~Kb_lh801z-GvO{JF$sJ8AUexJTuaP1y)h>hXQutBus!9kg0% z{w48Pk9^{;5Cby!TH8XL{xiTv#wFAxU68eT`QfL?F zF6}64R-x5W78^G_^8zD~!(dC%(6CTfjPzlt;%<%#>0IC}!XY{MEg{$ZWZ|XaZ7sEY@ zfP?C;;!zbt?a14B-eQZy4U)-{x!ma>Gj{ew=fV#Fhx*yt5U5c{@v!TB?s9AQr{Gn6 zU8+o8NAxW0V_|SmYNZ@ks&r9z2!F}U_Gv9KuVjm;Uz82z!1TfvwjImpA6W~X)EV-$ zp;?6)L)YJY36W(c=28SNW?#p`{&CLu>dD$kKOSWCOZB^jpbxh9Vqxdl#B85bC}_vV z4>bm+OZrFIfYicdmr}4e#PGL_yZKl4E*~#lq2j3thTs@b|h07j06Y zBdctf+5AdgIYu{mKFA@u5#pNM#}{@w!kRNa)9pGm+jZ}CXqnoGgbqTPK!W4Ob!kbB zpItgxK<1oh)ic16B0}i~g5P+*d8On0qvCnA)ER-|2VIY))Mi_CS~A701mN}BH~*mH zbKD`?<+aKeThP|45Q_fjddUn6Vc1J|kXUyR6>ZI({!whd$nJQJZ5Z$bBV2D*>GBk7 z70&RY7{l3Q0Ul&xk>l0GWIgAMdu~*l&`^bN>O6#xo#(H;PRKKr*DA*Z@U=H)ms^kX z>sES#veI4Z)%PtZ8jTCe7(d4W%#zS-zz&oMJA&GBHcXSPnKMze3l8jbYFhmr89Z)F z^dZ+McI4d^zQLsCw%2!0yl`eV$mU=BoBQpMCT|@vc8us;h*`cBpm~gl36#qA)_bjg zg~lnvOC5)!sB15g)fylg$ePW_MuL&Dsj}F(5?~Lh%#QSR>=eliKX!>W4``UgC9PUh zvWXoDHtD7fI4}%&`gdx3!}ts#h$Fc3$u4jW7P^(S+%{G@X?$%xqk9=JhuYPSjG>{6 z#Z+{rd329-!dU84f4JiZ3$d#bID_f&jlbh z{%UMb)SP^Y+HS#aDW$PCUj0918SlQi27NQLyICZ$wHEIrn;yBN7#ErK#u*(=(n7Xj=&dN2talA(_ZZW;&CbnsEKS<2SE3B3`1+P2ABS_q&?KL=-E0f@So5Blg zPR&c$h$eP@7NfKae!@9M!?mOqwY`#rcJ`>bKcsaH8g)j^YD2$$l&R{Uudq(zqvzwcf5+pwkpZ~JZ zKdyOtF+melq%p|EIU_98s9Xk+?Ub>Pf1;`LZtx#PYy5lXY3f~odD932cEr9!JjE*ug_t|(?<0R-CGK2>;2@P&dn-$!u~KJsuxO`_NmyLN z^o-NUumVV(5$O9^MID>TAPSSPj9VcYbVx#d?+D}v)kP#zm*>vCJxl*BE| z!d0N8<#1~zGb)hu_+5R>Q~HF#+)p@|*#atg8+-59e0%E^nexJ@ zC)-VsRp1RFo&V&h;wIjL;a}w$YnrjE_W#5I>n0wQyqat28BUC2l-_)GqSWPc0(^m@ zO4<=omEwkswfO!KBVzK@^@Ml0ii;uIu5=&$i~@_9B{#*tILNjN>5u8@GI7!Wwl?ev zkjR@#=P2RQs26M9A$Vn(eyrQ+bNvU+@V#^4*-Y)CrCHJPls2ASv{XXcj44Az;8Sw- zk0m}eH0F-rfscRr7C0Mo%Vw5;7Q5&F?JOl8F=8o66xG-J2pQM(&+DYk7wyXL6qVOt zHc8M*g{109X5y@bD-t3y7Uz3Iq=#)7*d6<5#Zv7Va0)9u(DJiAx$onc7t3(8^g%u* z{8*O)#sru1iNEj_Mdqw#gJC!_OkMluPjlu>)gd_;E}fxbK~R zpJbo(>2lIY6x}&eIEv!jtx!Ai_c9Cx2@X;g-Iy>c1LwK&yHVO{<@q8aj3X8^X6qUc zGj~1xNb=3F-QUeu*zBE(Q`Hr-;hw@+RnkCL_m6%VVi9p$!<}S?bR3@L@_+>2$NfDg zsnC*DBQ62iZt#>4$LxR0J`4qOQ%UBRKkXT?&i!yRFqTXe%$_$_@a1liQ}SpEOS$e7 zC5@|W$GT{g788DNjAL}{p`fF8?+NePHP_E3o$Pq!dLOYiC403RZyCoBK>K!~NG!p2 z8e~6we95ewC=;}Cvg&+gbStJH^aY39gY@Ndxnw{AEkHAX1>M|_8}S45tm<1x=EvS< z(U`{kr!h7#32;-`u!f%Di&4%)oXKw~kXr_UKPQwT=`%ta|6NEGIcb^7z~=jYx2YQS zo`ng`e;f1>R=ozdr^#Mq0LDIlRj4c1YLiyIbSyG(y++n9YA-+;a{Vh^w4lOz<`X+Q ztyVrD8I4i++o0Jws~Mm_j|am zfCglSqe@O7t`%Yh=ramN>(s7FFEbx{+7|tABdDzs7Y?>@QiY5biPl+p`Ye#nsnP4|rQUe4D?_-EbsJ!~UkSutJHRw;`71Wos{e%kxQ$XAOU z57Ze$ynfwaI_FFa8v)K}N}AlE-k9E!8+i7cwZV-a*N9J!n$WWJ$S>>`lUfoyKspLP zACH9)YvZV0K>VOPU!T!0kZSCgbWQwY8xjpTW0F_>m|i6oWs5GygpRZ#moeKQX?R}$ z5~~H30BHO=v+)WoE^oxXEOmfv*0A?{F2DW`QH?!NMXmG+k%tW)O2GNMHa->v?Q%(iIH*MsA{qem#U$L8{0aIate-gJ1OZ*>dL!+ z`Rwd(p)kATI^+4blBVVEwNuw@u%%hIS+}d5iNE0G5fkN$thi10_LKWn%D4r;gSU^B(1I)e3)dy@R^BY>*{V1;cZBC95sz+ciUg8)Lqp0bL$d}h) z&?PxkJNW*jgo_L`1-7kN8*h03af{hg;?E*bu$FeR+|bM9WOIp9pt5nnncTOa&nNc{ z(JI;1EF~6u`;+%i(aUsh(I*1tc=VH|g>MT>6y|MpPznS~zRK0ss_YIk10R=kf5S|T z9-P3wS*d`Zk9Z$0WR`p6OGt1`ha_r2aIPUMHx&#e4 zgbjyq+dszoyH+((HNY{VWn9zHuYxTd!+fxP{6tgckJ4s)?&o6{HJb8!?NjzGO&()A zp>t@8S^=*Phypz|X6v|g7x~-CV3DqSa}pyO&{H?p__p#I%F(TaSm%S!9^!2&BQF+L zYKCM!kAL{r9s8H+15SpOYGsm&@~)yKsQ-FlfGM1ljC(+}xIxs^eIhY$4<-6bG8q2@ zb=PjJ&FVZKUda?iX${=utE$s&kby`bhR+$*C9hH71ejs5=RLW{C!+<}hHzs4o#zZp zaR&Chz*;;nf_GTGmmwm`%au7xuGUNj$L0xYJi!;wNo&y)bhkLwg;Q#W}NRWtXeY97L%99Vj|GuA_g>*N}f>{lm=Ou8yrX3_MP*4Y1yC#)aeEp zAQQ>Q#{~Ag6DCT&(=z7(I2;zKZLtYa28605!~~S_lTXZ_*Vm zo^m0uE`1^$9;Xe;@4-}8OlgHKuL^g!@rE1AUib%CGD@W#a^JgTv9_0W-DKqEY0lL*KD+9(xX$2Y5wl$nml_q$J`Aa>l zzReh`923}^maM;Y66Z$H^pvLkln*}h|N2h#?hdyzf0)ECu-?m!P>NP1i#F-e#d*nK7S%`H-S?N)Ey${>h^yhJHMLA#QZXH@ zxzrtQZj1QnNO;z_D*Gc;W4(gfnlz;t`(|+Z>)qDMlhG)rAgcoCD)JV&s#W?NwZ-A< zpI(F4zr1ObYsoghWQu;gv}3}QySlkVjbu=+rF_zHbQSc~Q~0#%X2u#@T!Z3_+gGz_ zIPOj0{A|-nOc*aUqr?msD81ZLDE+(I!3AcTuGP<^sWy1W_CRSFBsIOz<`ef_s;S0e4|@t1;lT*#O^oO4E+8a!~x!uavS#5srVW?Em7PxI)zVDv+p# zTD%WupY`?9WFUh6Zz6k1rT>IP6q=OG^l|~31ef1O;aoi`GKtVss!SCWN909VbMtzV z2o4_j*^xo7_I-LSe(1o*KIQJmg}W*g23VUMIMu%4%j zNcPBekU;`Tv!E{wy{Sgl5~8$kN3@N;sSM?Lm&k#fG|1Vs#tCJu@`Q}+M%K5#y0cq$ z7@N!*Ka-Yn0(zCAp&e67WOhD!)(P6m0OpC(bg~jBCr$PAO{w&|)OpnD=Zmo8#0C5r zR$;~_w*6!@VZik@nygx-AkK!nmJ!0ny4SIbV`NN3$FY;hy}pq zmb?OoW2CU%(YajQQxl_?whJiF$m=)aXP1*!w(y1pjr<^9=RAeikXJl0hp`If$ZrmM z95`{5Y-)D!Mxv?K3AZlqkkV<=%tMM)g%%n3*PqbuSL*ng3=>+QkgG3Q*Y6^PF#D$9I z5o7h9tg3aDwMl)BKq@t8fnEdmyzn_-TGD74J)Buv1aH;zaID$M1uNp}^_{w;ijgRLfAo9_7PMUb`d=syO3{&{6!+=x||ZhN!~gpg}oOwQxN1M`_(`qc>YQO?0RFsJI4s@MC)Uo1#wwj(Mh2 zRk$Lrz96(?4t5%Lhhm^JMEG zQ1tD{u`JVsUE*aLHQiWso+~QRrgR-%OcUiXcYwnd&RLtoR{~CdqF;;Gw9S@ndBy0A zeGnfISCU3|E(}YhrkH(5@rciV{r(2s)RpHD3FmTNaVQkwGCf=Q(XvMwZL!Ee)%b#7 zuAW<@0_rGF+iLpX4gV6Q_3HFhTwYoDzsgpW45v<$RSSN&PV)PP54t^JN!x4+8hGA% zLnY}Xr$)~9cue>`*2r3}F!?puiS@kjL+!S{ zBAJ#O_X{)7(gL!U5~+qM=@|U3BPZl;EyPvPGG9;O=kc$>hgIT^+E{33ZlTsT1We@e zgf@<^#?MoC_qNgI*?8i-=o8t~SIU75QkpKZK3rNP%wL)&p|q}HbHDF}W{nzSxxYSE z3rj2dgS+ngW2Bh(TL=%ww+g+0IH?Gif34ybTO!kcn=%` z&=#r|0=)4U4oT3xC0~7p0{h)MuQ)pD_-Q`R2Wt( zbviLESe(h2G?jG)#hfWYwn^<@4UBs;1wEMw^tDy037kw!`Crpkkbo}1rq+!9{Y_2^ zR9~g|Yu}rfC)={29U#48ftA|AQ@7jogg_y%mk}<3X6SCh{-|6p z3O#u#aTFEghlk=O1BfrN`U|2N$R{x2)Op|_!|%i%;=Doee7eVF+AsV{T49Qc`Y77t zmJxjGVv`Y{CR~ZY;eKrijo;$n%E)P(9<1%VE!)cWOcv)!n%RovVt0Z06;-=5v;jJ| zie{qXefCTXS_<5SOEaU;WkUAuw8fhC$U=-fZ^q^;!=2va$;0Uh)J;l2&3oYEx~mL zC4`Fi>L-QJfF=+IhZ61vLxNqch6Nz=c(4jT&lpM(q*a7c5~F8TOh0SarO}<0bo@VT zeFabzYP7Wi0t!eYAuR|>-uvGD zXZ{(+aYhF?`-{Ey+H0?G7(3EhjN)n_wEtAgwn@=f8{E9koIB#?PiWmqB%5eBg7Ai8=VM

Dx!smC`lWCYaoYx!TDddufxQ>GgF18&lut%@p;tWr@LKVT{b-k(Jo zwv!E#mc3~=c1;`mf+Hi4huIN!t7lhK0)36=XDQ;%VPb+L9~AQR@#mE`SqxBy>qCo5 z7~^jAU@NrliBpAReIZyg1DhX(BR-S$Igc6vnM!Dbr2!0qE-38^y(K|3Skh;(jLFx` zCHafkPq2^Kx5WX@%hoJt=sNO@?=lwpo{Myg1L!#mmwR_czj}q7T60E}C7#)TPR`l7 zY$Fl$8t%nfYJOIlbnLq1B)S;aOFGNrQ24ISth``0=w07&M1Ij1SIY|1?x?hqJ9U;z z1Zn3U4;s#&)O{~xI{u8k-~1AOHQs*gJMEZ-t`Y`|H+Ju;)WJWx{|tpAHBkuiy~F-^ z_B%^&nVHeIRB4)3*}pl7inC(p%W<9FtYY7LMvK2KOUDpq&C`cBOG*U|PnE>EBe?N- z5?&9h3gPtIMmit9H8ac@jn1B_mqZb?nrc%nt7iCGB8|gF0dbz4oeDd_3gc=h7>Wn5 zSaYzj`5O>pQ2p*dby7YURWzCo#g;hZjiXH4XjHVC>c5D8(iSU#$wA!vzyg(!8OUG_ zW?$_~GH8rrk5U5BEuA!UV!eRt>)UjnOQT#s&+(r%5uypf1s|?I8g!#yPmX+LRHrS9 z@9R2&eQ8>CXYj!|SM+{DZ_5Nv=evrX$1apl4u7mJwQrQ23Z$9*d|pm~ZW67kX2O1K z;DIn-!QKkY62DBC*omk-{I-)or%w6HBsm0ob7mQPd7~dO(ct)%X<$Z##Nf!FE(Oi* z324$q*ku1{)luO%RXc=n38_`Vl+xcy#sAGJ6tpno0QDQ)q3houy`+`LcG2yziM0Ff zM(#_TM#fAHw@2rIEFFEtr;TgHO2#8;Sasl=gZrjpc z2!-1q(R$93Sv@CjdGr2cN(v`n^FW;x{-GJ*&^d?uV&)BRXd-MrcUUx`tX_-X4%>-n zchYL+b$ZgqiXp1__ztj4p8r+I8qBnoKU>8eCgwU!)Yvfg1F;iDsieTkCkU_y{hwt% z^~u%fJXeGqz=`-q?-z-+)?#Hi(ZxbJa&PcOdas^lncEXV zqcfEO=qMZ0l?AP$w~`G;3A%5LAB{K|6LQ8RKgWI9tVKR4TsU43ZI-s9R_3Yf4KjkK zP65$)KyapnYSHu=7jqFp&9Q{1nbogQWx_=$nsS- zL&x4;_{vHSb84hQ$(1)*u+J;D^80AC)JUMw!=8c$qE?NqNAV-Nb8N)S$&4b)cc{me z^Qw(AAoVv$^IzWztu89~0OC)tM$AP+UDlhd`}%mvk<^e6I&L5FoJTxk=9zR+$U6T3 zI(5H`&n_7UpL$~UYwUIGlUd!}c$pnQC~1HScx0MMEvczg70xTxz%?hP;Su^5b7!Q57Hr$zj;KTOtc^#IkST}zU#qnLBm{#$ znhUBgBbkI-^R&=?Ui}lRNw0tCd33a(Xcnqb5jQF}5<(UWYMbXA9Gs%{9FjQw^Nh!9 z;v|hET*F@jF0CNS-TI@0Yhc0o(jXgV}rv;~+S$#AY z!}*;7OT}UKS1WLk6R7F}=$H&bxr%k_tt4G&uIc`Z<`NXgu2xC6nX(1}zl*(x5YF-a zhiL94Fqxaypd;mdCOWEceJ{Ukn3_apYyCNp$>rs0DgO8sNfl@wqzECx!R!!|pHK{3%S-8|bv> z2fwLHJrtg-)()r%d5i`To1nPi-hajr?vP9C#xyX|`Ctu@mZf>N|7P?4?(c4;q zylQ-6eOQDC&=e~F*ql#_SmNZ>NLxQ^w5c5%oUn1HJd`Is&Wu>8~u7!{%*ULS+LbMV9VS*Z1 zw5L*-NsN}WXMlNZ?&oiD z>WX6&qcNgCnQJ~eBrbV8@#DGUJ9o4dQWhnG#<_^R3Y}ia)Wrzzf#^5T4_)@)F19D< zb^f6rpn`!L+CY$Ia=&i*Cuja zN%|X~`CTkY4zCcykwe0!ldrFhc`=dZx6zYU&D3D;#0+?(T|%$whi*ZM)!-v7`Am>00A>bs(2<3vNK_*Zl zqyp9GZG$=1-U0er(#@OUH-1)`nL8ykKy(xg4cZ@W>kI%N&9(_JaplfLItrY&*WJ%Vgb7G%YVm@Z{slp*eL)CA+vC*b@PBC%& z=27LYS`QZ^+9DIHQ3pOAPMRUEZMELc>+gf(oe#sn6dh7($$Hk~(-3^c<8Q<%<$@NDPrxvD~iIgrL$~COPfrBO${E2O;$%v*F-83>N;vJeZu&J zyDIsv#YZPsas=#8xD8#Rl40Aw>-_}gDy{~b;K=vjCwPp}=rB<> zssDH`L@;i?3DqR$>e4EJU#E@I_Wgd7vHUfs^i(Y}w(znw^68b4DByd8eWr!O;eW^uXF8nbK@P8uPi#d{vC zEt}mr{P~ifCXN*&?RNNct?b&LX*r}H0|R*iTi0)(|rZEmxn{`i1g&6q&A1 z2^g2Q3qOZMtHC5t)l|V#x`n8XR<7vO9LcKbELs#8pO5gK7@^;{oI-ZZ<&GFv8BZ;7 zofl5OQXxup19P(iykhBfoZQsk8#*T|LXuA_2T$9^;wWD6aXj!0uk>29>W$dS4*Sb zi&dC16C4*;&FgB%a`unnStQB-N^eMrf&z>~gw;O92sUK^RbBML%e)7}zvS3sZd59J zjeqR1eOm_I>qB?yabg{AK%|?-Jrqp-VRQ`5!R*!>q4%b;;S@`EFMTAup4eLaD0NO+{Tmk(*au9@AgQ`cZ0RQ0gRL1qI)5o1GUhDE$ieD z(7r`P%uvY+u!@&(EOCXy`0FeuDxCa|o4#sQQI>3T2`%AaD5-o)2UtnbWjKE5++vK=-4-7NQqqM4bwl~)}6AOb@R;u0)3-bqwRVsChD zN&M#OL&Q<_Gbo^+DLg)#Yds&k^o;Vz8Nu$}YgF81(P5Z=>LX+o*X^Fk_U%5+X@uP5 z*za}NFoSQURDM3*ZDQK+0I(@&10aM;pHnP~yBkXsUu9K0HusL-4oBkMj?9PXb6+v+ z*}-H_Db18u-)7F8-6x$LaZCyu?$;tJbbFUIPGOK79KKgJd{_~OGf`buF3U;Mong-4 zdQ*0qHRQm6@@v#bJa%)uA_{O~Ln0PO@@5qyyqDd;*8-=(8mEqb_rPqVz0r~Wu6zF! z#Y5{{TCKeClPvMA3qx4$In?2*4|6P@6a&!t`o3lHWU*a5B%F~F88eK3+XUh(iwenI zQg8Kc3IppyhkO2^wGKFKWHM6^0*yo7*KB3wJf^as4`f#OscT+{BZG+YZ}TwE;h^lj zpsP}Z=wK7}O8~^}SBzB{!30`=`@tqB&U9_MrX9Sr=rpGWklIJa&KX%IXx;xAJNt zS}VW+#i5^Xf6A6lg|bM^bwL=^Sj84i#W0!XG)6(7y#!FrZd3 z;dmauR=iph)c?21Ah13JlmSn}e}oJ(XJ^Qu>`SMp(YD2g0@ZX>c6PsRy()~G@F>ei z5}@o9=x$|UtNEJF>t{!67JS>FEO814iH0Dpq#P%D2nf9W%Me{Q4ptNW+H5wqKwi_W zdmZi1I_DxX`T@8Rs81O<+r7k&Rfj2OedaUPdRBwC!lr|PL{`~ak^n9UmJdmLI4d0D%R{M>$UR+i9V7?= z29A{+wwpKd#TR35fBFgl>VS=^^ht9PAx3u4&=%%wkZkT&$Z*;ZcVDhvxO;_qRPaOOX$xSJE^_ zpB9gs`2&3B;HcUWR$h-~Rs)T{n3O-A;fg?Y{er}HH`ACI+^gROdb#{ysX|u#&4t~f z-qfj8G;_+(jQ&8H%Q%_?6o3lP#-(&8Z6ZWyR`Eiq{`g^hd|jBM9DIdXWV@`gxi0QH z&Fufv%vn(jQa=7}W+&z3TS|Xm3kH8L&DbrnnB0xE1e1$8~Pi zRx1C6C5Yo2r7l*JJNr`}T*H9k-enL~^2UkYV{v&^1bHzll|)6c${aTcN)hXc0_OS= z4Nm(NiW+s`U(~OY^%4bQjxCgctL(UIGmQ2*a@2R%2=s>l-Q%5Yy*_-;boSNBTr< zyXxBHs(ceSCK(N4JKoM>EY{oyI>aA-l z(~lL?ZFP!@wDBy-`1?x&pn%_?#QU(r5|}lA{%A-JQ5rX<5V&S>kC)UfgB5IePJKvi z+08m|JBrwvv;IXYv9*+>|ETV?_+=%RHn;$quHeCBK;=F^qiJvuX2~E*Ct$Gh{BtCJ z8|7B%Yx!l?FEAk{SdnCp(jk)rWcCXP!E(dy*1$knLJN59Y zWw)Q(Bq?gHHbATtO^gnPFUUyGHz`6JVdFF5qB-o0bEa(dfC6wyx0L0tvjr91<$-{E z9D20R=F&riW z1io0;i6!b)7+6NJ^fp2NUMoQXwfa1<^qVpD%5T2}m?3Ugr^efa12hmQ)!QCW%5;NeqDH~ zHENuiQr!78jw<=cf--ew7jnTL0rMHLXR8YFy3w!(hAgd2Uil(^QakO>P9C}zefaFX z{mou-IR9NotW5r#xdXWcp2+pcw=(^G9e z@Zlfg=72e_=PqYxVN!lZVa zfte&Nvu}=&GGp1VrnrBWsTwR3_uplT>1f3KyH26%6)T*f4$O$t7H22b%+!DRC~rp& zRTxjj<;jt~ES*}@Z=mrB-B)}BZjKEGATd|Xf%YqJ;?qAU=@9cuD?w3`F8~*Va(fuy z;lnfwUa`PL_K&}E%oc&9UI$yKEoI#ie4?n0<33($M)hP3e=lDiZGx+%2>X{^y6G>Z=@hIJs$D{!HspT#{=gMe7 zvky_S{89X={ICZF!^OZ|(V|%C=daIp|UzhXr^ zH4-i{>wz8v1LiVpSgTpT)lPV(&w2vGCbw;JfE^EB8`uGl7?i~6ySS#%s>SlfCpU5S zD!t-Au*z`ZF|uJ$E}8NYxXuUOb$TJ^fyEhm!gjjX^*v@ywl){N<>CM5bJ03ZHom_3 zm5znH_LyuVIj*t=y1HkXJSiULm`TC2{0iPBvwQC;r4!pVR{f(JN#_XlBMe8D7k9M} zJy45k1k|IP3F_ZJMk?AsYj)Y>-%Bb^?ESFyevjll@vTH&GgOc6?4b_w9ENPoPJHB5 zxv!Sep*vF1WPnvMd^g>^@NvI#`dxQSg9#c1s1e$sl{(+;?xAj1U#RjHy&5lskHakT zlk)iAOv*aS9M9R{Vv-FA!*>US-5h4eE;gBcS#FS#)^AX*ZAS(WnH00z$NB~cpX`GbYLr}A74Lwo8X<*b-3{HL8sTEv@-&LudL2GtLVcU?M#sJgk1HDaGy zLHS9orH9hIAMa-97SaAxZzv0cFLyYKLlm?xl7{5nL;u5l&_MCod1aQPZ48s~*$8gJKW@Wu&b7{qB2ZlUtN1-{IPIXOLFj8_G1p0L4KRJ zH47hpTuc@XeS*`y5mgFiyhj(S@niA{-bQA(`?dsZ>2cPibVH>k%65w4&cRgBSW=O`oDey;Rz_p>`erCx(lwH zPrPy~kk(MW7xh;p9atYEoo>d;rbW1tnd_+$YucXK&*SYG*{a~qXu`{0V1E>(lhWJK zDfaCR)rGrtN7dI%yX6L;>+XGrNdgG}|Lp(qi>J=vs zGhY3(CJdqY=G(~Myd3~Y_t#sVtR~T=JN90G^|~)bvH2yj-NFq0T%V8XeX|Y_4O9YgJ*4E&sM*$X%96bB?@V2- zXMOw^vU@Y>r}3`mPoa^a@oeC5JZA0V98^IMpH);)S2%p0d5g zGK~AJbjuC^ly|_yGc5m5S^~bnyFM|dFC`}&F0)?4!G%UksTHGg8(_1Cb?*CuIIW-7 zQ+|FOU5Ji5c{enZUNW*OixaB^$R^G7#KC?;jW{#TZxR{nMQ0-2%7rGO%HtxlOA$RH zNpy|_5owK#CRKUNyfU{yRVuRjm=kiogpD3|N_+ikPV?Wm4x$n%kQkc&^=?9mfOVVr zm+JJSV!JAZ&#_%?m=M=q;q|q1sbSCfs)1ju^FfiGD|^Pxcreb%2HQfk&5HT!o`{PP zBRL$BVdaO8=Jev;pX`uvrogcFlMxIhR~nRQnyB-*p4z${L#B1DI|t_(6qDX&1t)4A z6w(@+WXj;1en3~!#x}^Uzl1pU^V_t4I?0jWFnxL(rx$-kG$?vcpOW;r=LDFZWo2Bw zwb_s$u3Y8}mvk_a1%Xe<`Q-yW_n{HJKE*i8qL^P7Sbtq@caHB%dk)%ePwHYd&&hAY z6ip3@ig!DjP<{y0Iz)$UX2QRA8JuNP+^DKLBB>YfBY!5y1kHV8y;}GV{2KLmWORX- z*TQcaD&Qg+{SsWz5uKobyIntYUY>UOlVp2_7LSt%%xn76$t1v;CdewZs<@Ct*K|a>R2sz`F_OK_ z8~=o8KjyI>gWTohDEO5&yfEa1E^BSSNWKSaZ)PN=H;>u$EAABktY3nRVfH?HiwqIb zY{-?*$pbNQXR+~nqIrV1N0d!tUjpY>Ij>`6>Gc(Z68vEeVUem(t@LL;p@pT^X7C$T znqGe*buL7ZNgFbKd&8qhoXTfBD*B^x>D``$MBQTu;^Vyy&fBF!|3?n#C@sq#dG($m zul?HErD`pAUbkls{>9sW)E%@7G@_grh@_`%$(dMrvE~@XS)^+4tG=O}J#`~$-ylDg69r^j8TEmE@0o&}Ez;PiFuDd1Aw!ONiC)FnlJ`|iXzYHBJYBku@Y1kH? zLkm1_5)9xNtmpUmFLwAa!OM02U%?fU=|#pS)V|tux9+>iuFKqiFwGJL){7OW+nj{M7-J-mm9!8IlX3BCtTL>4pN|d<->jI$ zxQIgyVf4@_D#AE-X=Snnm< z+I_WCyR|0qC65)0?>dUt1hnpy$RB_c@oHa!=Rm83?y25y&@x(Ikcp|eK?UD}Hm?7d z2QZCO`-r5pClh6fAwmI^1@3+6l&v()*%vNUf%k8d!=y+q=pDIEJOasEI7o3kF)AmW z>`gRV#G@FejsQ0?k8E|j2kJ%F7wz4phGk}GK{3%|x=-wjl+ z&Akn3OW3EJO+P+K6_(wc!rTaM+&>u1P@sPON_hfGw`~&|)zp%J40ZCo1p^v!mAfw^ z5trC|$)C*YY$Vn1Zk)Vc!37i$y-ny2Q(X5gS&}yPTGC#I#t2$s##ucnzMzo%K$re5 zh{GBYg_>Ax$Y;LSKNBd^uargx2sK>sUKaB7(ne{KsQyW*qoW?B*GS4|^Nhfs1iQXL@A8NTI{1F;YfeY!@<0zqHxXx33O$MhHpWVA;AG6;a#vL*GKbVTcgWvQkU57x^4oPgM7O6}# zMjCvE(`QCEGQ{=UcqlCA_mC7v{UxfO-=fGOGQLBNNYVbc_M+B$ugy0q@$X=OSEbANt% zf5gJOtG(KcW*PMH1prxo*0@idSp!OR?+JURa&n|O1+4S9b(@NlT0Z8NlC}9@&3=0e zH(uw6)1UXhx-M?X&Q3j?vYk<;sNcW?=(L@*r?9<|jJ1U<`KqUX#q(D=iy)(Tuv9eL zKad`5{S|3%rBTzf?5sqmo9Qxkvm5)E5;m9McpZdQak4@oyn1AG`l`-dqDa=UF@L?! z{@mkRg;gQnK~hXN#AuM~$IY0|LR4HOn=!82eiWRMgq(Wxx2$et`nz_h;IK2hTsC~< zCr!kgNl9=%&@C@;SJ;$*ujw!Ks-=qhjJ)_RWQOd^?R9}uWADM4+ad~^E7mr>tJQzvRl6Gur9 zN!txy2p17661%Z843Nm|=Uj*r=9T2cle+oK5RDzFF3us6|kB zBo#RZ!TY0isaz~7E-)iCZ5{wP!w-%XrwWfBuo?v?UG3gMiNMZG0nKf$qLHH=6>+Bu z4@3p5?#%6219y`Rl2Um2p`1kBsN1qrOl%_7>J?PCr!aWv^$o`_ViS41s-@; z!OzJ6``g{?SDi!SVU-h;QCwCVhYEiTGgZYym>NWi?6M8Hsl|n zrE>+}%Hk}lwqiocDZcUN8) zq;~Bfu!jmeyhp{~=4V3r^<7}n;aL!^yEX@Br;UFw`Y;{$F|dE*HfJEzA`>fkbsy{! z2etXEScFweb*P7@PKtNcvv&;?AzC-j%svH28z88q96WWtRMfYS?f(3wWzMR~yWV*H zZQ@J`42Rd4grDX0zRX}Y*%=ncf!dJ@=vZ2wrwjteqj7imxhqAS+i%vR_%e!1;Ye4? z-Ew&6z_jpfNY{3n?k2(#k$0U0d~On!$0qmjYjCV&R%x~2b#eeY8aEx@C!>M^xoN$a@XV=9*qsDtIabT)^Zkd?xvu_a`l zJ=6Mrn|&gTR^om*9VouNZ9{+kn~@^kbr<^EfNWsx6)fA@mH5uaH}!EoQ=3d9XB7PB z?~3eFLx#E}ZrGhWH%Ag8g396ZM`$R%KOE~|+8$&bg*V$Jsr5HRm^T;1zHfg#I6tTn zzN(&McRPIxudR`FyVB6p`SvLxpl~@_P&yfR$YO>w=H!Y{<>c}tBHGu#)Hs2fq{nh^ zzi-`wVczT77CM2oDn^dlGEa=nE8 zqot6se`FM={tR-~$K%YU>!8kbGd=mnMDn(J^gu&EFZeF!Vy;{g|H8g5xZyito{u}j z-Ck1eJ|!~?_3yQKxyc@k?#tS-M@qe`6k{0V``Byb7SI0nq*|tlm$>IxukS*~smDx% z9Fq90QPM{cqv~gMXp=z2;0MATGw^RILj9<&n5$-u$ln|i);m{n`8T@bY>%h|J2qTd z72Mvtw+^P})!vAeJ)HG-x1|(kXqwi$laY0`Txw}Kns5b6ZLKX^sMv#`M5HD>i--y| zZQ&1R?FHS(!b?_${VMqDe`9adcEZ4zzh9M)GEEWQEV=JQfAa zCb*RJ_wO^b6s9hm3wXN$rQg$2R9G?!S%)8EU;FU zA(0;aqyC%}pTN9Uj0>h?t%0V}WC?bDutFY#3z??X$$|yqWHP|=(2b{Z`FNu87wxIu z<(j~Gqc!HLjt5!Rc4G@{wY`#cTJJ`2zWV*1xymP^!tJfJ9sKr-W`_xEF{9~9UJCr4 zRlbADsxABCWM;A|gr(|fZ%2P;__lSJYBDRl4reELmke>Xm{jqK_nJqXl5beP<7lap zV|l74%XpKog=j-IB0;ox z08RJ74OD2Tixt#blpfB5FH4iOo+pESO#!$y=7A53CEo4p*GsFYU*u{>Ztu$_0nk7C z0}vd#_7rt$|`o3ycHfa3tOdIFu2Q=Ni zrEOQNHQ&LL)<~^KHJ?qbdOP^OZ<8T9%KPFZ-<}ggqHK zmj*IT%Yx{1iq+;z;%eRJG4CjR8O`&nQOgQ;Mj;kZ-pW;%i5FFZ2T*~7b4eZ>$_~rR z#L(%NCwj>{{)KKNwVl^UkeIQ?;#0J}9@jXxZD&0=Mlykp?}w|#a^>Qz1M zoK6NfiUqKR|pLi(@SE*5&rP#C*;V7n{!&@nVqoz;p8{%Ik!=K6e_rDYHM>B{ElMJ4A zmW>ymzuo8A;d}qt&63;?@e>W@qr0``9^WKQb(tx{vdi6RJJJeyQZt1w-LKB}nH~`N zmA-`w1vjRjUrh3}E7J?}Ji=EIq#HF3?*%oTlm;b`nK8Zu=-who&U@kgD{7AoQ$9(x z!tsHKojbR=@b=5l;P1e|pDw|T3@g^^u57b(2)dX77k>YXkN6!H*UR_)53q>q_Mzxs zFAC1%{Q#^XN- zy0h)t*(Z!qJMs5Pxcron4OwB)hYRTNqq9&9bZTZvl3Ow@pS-Rd+`)hM@o?NaEWxjn z+ww4ZhP}ff%CrHa-#O+dZPTM0@_ucro7dORds;^^+I(Zb6zfw)f@cP*YI+T4; zb5LG-7rbYEuuk4@2>H4H2~shuLD#`jIdRmO|6(dr&)#6H2rW zLKkYM<8VIxDxrc;PUMlze8H#T+nrVyKH?CMuNUOTOmCNg^Hou6O8c~vFLRb%$8nUk zz>B#lN{1DDB*J?suwQJtD^&uAN56htA3_D2i#hB0gx=wcxgOF&b;;Me6$boE!4oB2 zhBiOWI_id?tGsV6IYYBEE$4Xe*I!;bkwYv9{Ukl3t0?QIQw8K!6OYCe973k4YTa$M z(T*!8;^RvlL#o*zgNVUt-TCO;A93+>F()LnKRM#+r+ruDQ$!fy?i1(4rFLK(WshIg z<9_eyewS6g59$S4!`Gh&?RwmUo#*G4ypEjEYPU<|n#s`hwn_P&?zMjI0S5_N?ZDI! zg&D05=2hGQ)ojJYjxEidrSH-KL0L7fz=DmI!!&(+X&RXfA4D67G9UmX*0 zlmH^H@GSS{Dgz$URL6Q+Skl7#m*b2&Wp|UI@QXH>-sVoPe1n9Bwtp5RZp(N`pK^SE z-j~PZX79H_NJxjXBkM=Z@e=K2Y&6IYUmJf|wVslb#x&odb#XH96Sg}w;_ljLqf)0y zC2_D;_r2qE#=I@Jl+=**PHS!X7nRgfpQhk?q#vhM_hJzJ){scVq4Hv7Wi_^@R4pHG zxT-coKBgQ?*!Fn|ryi5})_TGCtRs07l~++s==#*SoP+XaquJ16T@%PXEEMzOA-yze=eoOt*O4_?NokfukkKX&VqF^E_A98pVX2K9enRgdgL zq%NbOK{;T<9oegrhw<%`_R7_Zaba4>z>CDe2w==Sg&DUp;@fV#5>!zTF+psRcyz2V zN7Tvg*e#osMAmBxc|OsvCa$)Ah$=D$#y~L?3H`k=GLB=^=80$X3RR<`30bso#XLSu zxhGMadiig0QBa2-f9zwMmhU)D24@o88&Xt&D(yKLFu|k0ODLXMeDzSZ_@1{ghSYI~ zz`m;y8op{xkhUvEi#?`>iEt^*z3Pp21kUu4VXgJ zkSt02xIO1;vAr_Vo{6WGf}^_B%l zA3f2u{!QDEfVKJ?m4h#_%J$V(_Tg_jPcyu9iFsCzvCR9y%LU^Tq<)(D(oXpOQ&6xb@CCc}?x z4GH76VpL`-o1!fk3_P|22FnC8Jcnm!#}jmyZx|EB3VH7PL~nT_(dCP|fZ|XtgkkU@ zjWEyYB5vU}!#lIxw44>4DwZD%x9J+W)RT(dQ?BClH3iXqFh9I&NkLI~w|;}i z2L^+TJsING4wVW8vZNjoc$&!u88N1)R8)YeId5F%3)FQ6gLh!hrEfy3DC5)jhtkj|2(I%t|B0kdYySab5A=m{GMv_;K2t z<&KSZ*|*z+dh5MUy6p`4cG#qX4^T{^^i$AiFf)4Nn?kQufZMb9@*{RI1=B3ae**&k zo)ns3$`D4;vh4mP-%<0L_K}QDKBBS_JN!k*HZqZU z<>~PIAzwS&-#^}&GL-TBtdyyvo0xWXKL6-5Q{md&DS%$@dYS6{O_d^a`$gCm@E5mz zRQh#FjI-i|JFD*Dk4K$Y^wAyopxAT+#bzKm>fBpWFXnu_!fe;MTYm$fELk+f&fq`VDxm;G(vrQx79zLP-JvSVD z3ULMxh?7y4KWA7K{7kN9ILMxyHZs7&t#3|zbmzXSN8#FUBeI^*mzZy$l(rL&)`=z> z)2YcjYs*!kFtutR*Vvgr3=V*O`beQNKUum!BXIaLu!->k&Ivyu)vTentMV)}i1MLV z=u02*oE~EaA8GPfs@cB-f&aH%OMwD~4fxzzQMR^idmLU{*vo%&&|WYguiN+(bMUHg z%zT#LRv@nO=I4)HS!-mKwZ&${XEN^X&-ANO9FddP!}0(XGtP&ZPI_p9Pct5R?)U`S zVU4x={i?bKT6-RH#lvV3( z&!8nyLcA@GM@YaJ_WTT%gK&-4;y1f2J0>!#09*{JWW${*O8)3==;3MV#-R^i8sB~} z?d8?)Tv-QPlAap0@ZujZAUNc5Ql;C=8|}%Q6agBH8qm$dt+%uC(d>sQ&h4sHn!9gs z|BDs=T|zE%|AXI&(Rx$h2yn%lP9>SKyGuC>JGE6k)xBtpXN6BgLdiP9v5X-0;spr5 z?C)!^grlBuG(HT4hoyU ze5CA@O~{4~8(Ua=abi`}dh*=-TwDHKE-LWoZymbXmW2TWYs$KPYzD<#n%!&_Y4Moy zE1_EV$9~JCt(&~0J(UKw1Uq%hZ}L(@I)6Y1{lRtm;YR?XgsjJ?T=(J1*Wpj{-w@}|4ce|tj}bA} z$yreWR2i>vwN((UvR|B6yo9Hx*$ul{8B|LlY(>L;cScV?xKb{;n775@%QuQ4%M&o8 z9xpq$<_mv%{;O9uuHlrlTt~{^#`1OH`0=7ywwSX2mo>N7Byt;o`L1UOQ9LOk!#LP8 z4pD4mzMUnv{A>CDzo*X-YPhIi)eV_S2C7YLOFcs6k+pZXyLnE&lBAJ%BWM*o(5SbS zB~asK5^CNs;K5xufp*^D>PQX|vL*||55Mc@wlone>2K5OaHZSB>M)nkVKCau8F{|% z;c+h)YT4Uce}$9+I~sGXpMX*zKR|?#bCUxjV5e6hzbj*_Cr$~*1Ns@n+8-wNtfRFf z7KVSrQdy>VHkLc#;I%nB;lOlVi2V7*OrSW`P%BmjG^?V6wGctyuWo(01Pg~bLv+@f`<4LO^a|qu_sZGT9}#O z|2ZvAgt1~UP3_zVU9@S(CWp_~OHy6$0~QNOsVs+`eD{pSgNLL?z;=1yEnp5` z**go@P=u&|imMRDCq^`MV09h&9|-64ks8I#$zPLYm2PjGG-J&^lP__g)gCluNIyTT z9@wJXvGxIP@7Sw5_}|5-+$$e8c2rlgy?Gd6#l5&{EaX7UksNwV5HfxFG{m4YY`72$ zlTylU#m5r=-OqfVPb1r%3NH#d$UJP>BL#~8q{-)`J*S+%TF)KL8N?5i2aL=0Nho%Q zZrrf%wdO0-3FdmwWVG8tY_=tc8!uk$K3YfZCA=4OV9*Jfs=WT7O9`%AxUd2FW2wWr zR;TF|D~~1A6W(ovk2EV9n~p#d=QL^RC0967RVePD!lbFyK7VmNNG`v*^>`?)sy-(- z!(~MG_Kx&-@84aaICp9|Yg0y)q_ERD_{Cv4#fE!OC7%Kqy&t)*8rF%B*!;wI5JQRW z(thZ*%fc6)-pGqZDRYJQz^rGow?EH)VOM;bzcl^*Zo`9ZSdx>1zs=pOMClh#5wVxC zr9vE84bl@kF7#|bgc5uGzU3fFnp)b4G`3dX;skqG9Ozd;0~8JP$Y5f(>5Yu@iMQMs zJrzvkF2dzV{(1!TIJf`BF@ffue44yyP0zoZlneZCkK>~-Pa3E01I4PnAVUU$^nCvV z5=3n!t^ybJd3-W>Ri@~M&=uL+sSa=-2Ni*!2M4+P92!~Fs!>9@UkW5FN{vmIBEls7 zlD&__t8v5ZAN!d-SSD?mc)vHIC7+fspskYP_(EC#%5>iRf#BCz)^FXZdagPYELTr_ zM&4&Vd!QyW2)@gYW3}ANiS}=FJEu^;()Iu9cMUA3K`2ES=TK zT|9o^A5{`QFCcO+H;r`f1iRd-^?*W2WfDB$b#2YM95OmOc6xMTw4QyZx;Nj9NW6g@ zdG}NriA@LY+}n`l7FEc`_u*BxNB^k>yj6|Rw4rx;^|V~fmyDV5^6>;h_v$$AI?8Rp z;^KwT_VVe&JfDbe@MJ+fX6K^}=C*kQ>Qqsx5D&di2f)}SO|P~OdZWIgv{hj2Qa zc-oGb!Ap-r6Awd;tmwsulcB_fp{UYaSvJ+wytMDkl&l++2Om^Wue3Hs z?!<}oz&TZ^emCsQ$agRpo#H8!{CCCfAb8y<+^v8on4HAFT`9v)!cM=!r1&g2vJU#g zTI}kVtCE&C0)oYqJ=G~4ycOoJkSdQ_WA9JvId9k$!Pd9u%xAGW%+Itqy$V(hxG(Rn znn8SpfU~)EHZ?mU00Ef6n^rk7VLf}EArX~z`klz#qA5@{wZfdO8&bd2GArkfqOc#A z7?2ZWDN~dlxoCrg$D+pi;DMR8k3;KvYk33Ik=z`5H2P|&Sj(d^sW?ske$w3JXlJx| zo&JLlAxGp@=WLe7FLzrN#tj6JqfDV|o#X6{$yXDP{W=3t%~j8Pwup7s73!;5OF_X< zq|n(c|0Io1+3Xi8Ueim|7}KeehdMfr8>~rTb#`_ZI1^`Xmp*3~fSZ|HFlh>X_VA}2 z_oJ|F^CjDXwUlY!!Plqbh!kc#)J89Az5>X=qe{xA|6%JZqpE7VwUur}L>fet?(Pr) zX`~zJ?rxD%Qe@My>29P;Lb_wqUBad}y@_w}K9A?TYi)fGp>1E=S*iZ z+L(AvDZZpq-XWbsr-;GB5 znB*go1fT&D`$6yBKHDQ0)lg15|69tYMoEHRlg-}^@+AC!@LHyH4;~83Zp6SV!pM&o zJ^r&PBgooRx>E{7+<{wzTsF-P0ii(ADv#Bo9p*18iUd>=5cFtgs>o)TdCG*ksUw|+ zje9wyjbyD$!=#`u`b`xp1{bxuYd=>h!HT{<@x4l*p5G*6e z(g1|{+8?{-_(@tkQP0wAGE#>C=9iz^?3zx(>rS?0kPFhQlZ~q}+l;zP8cNm-+{I8_ z64O6HQJ4x)r__;SlOtXaYAj>FsN2IALqd+I`86WPYfttOV^A-*ZZn@?j3Sa;UbS_& z2pZ}3_+@>I&i8$ux&v%Br!a2YIRlXuZQ!+2JTA9G2e4AJl&@q-3^WyES4K-HE1YFiJl$tu2I+7}W(SV00mZega4~ za2K~bSHLgh)5KfAv}Db1$b$TYl9NX0;0<%^#^I)#ZVgxL%at*dhF(Z)3y0Nhm}_lm zF)QY-8$^^byfBdyUt@9+6dEW|sTqX7Ze%zP%e##gf&(?<@%LBMZrnK0QPs1!16o4P zm0A1!!3)Ay4!a$8TA^-a{iDGPoHk(%oJPsN&baZTpZ0!<^{cB(!dW1wyJv4Ao^;)~ zXHU5ad5u}ZB~uQ0cRyqOCEF|@V-J$o2!!6J2|)KguKX2d1W0~Mwl;SG8zBday^$9KXU1c@z5q!@ndM6_Y2GJ! zffM?1AKu99`+vqw_5}Hn15DA{GIrIesd$tre>0+W0^n}`bBpfP%~?XuVcghfroaMQ zaC2Ia3=rMHY4H=3%$%cnGP;A!+Sw#I%f9MnQ&?b6@_v=~X1BNDqF zQ=;-^$+mP!37m5`5}enx`IO0(6>HL-rZi~0r=bi_6+i#AJP!)n z+zs)7T1?UFNgMft|&;i#TUi3qrFY}@YfS#Ax;>|Gn z`HtXi&XixXhd_OI_ z_1duu)-92f`WiPT6kv4<;$Z2h&3d%7QZ)d%d1l~oKZY*iyN-u9_pZtBf7~F(zi#kr z?|(Q7U4M3#*-k&Z(5=(1i3WxwGfkTQGUcvuI<>+OM*k4&4~&BTGPL|KZOY=NZPi&4?FMiwnwdd z4jG?4IAd)g%Cq_aksD}yaTtrM+zx(KAL{Hxqibyom~?NlJIo+HdTt-Jl?D`y?b(b-rzG<6n(Bb%q>QtvD?~T71=1<%27jU8Bp|wT!ZzzGh)$zflKH=PZ^8?z*Z&M`%pGt3?x{km zt};C*I;~?`%`2lV%OU%=d;PbM{ErFs;ds7(ukqa~n+71{*oqBgq1ASjBcU7|-_Qp~Iko_C^*>4eCY=Heq1BADLWwUaQ(n3|N!;Iay@0 z4UC4=)3pGXRmirvWeajKb{fX86!YgxsiClH$|z)USADQ4!H80p`!{8qKUkJL69NvB zf;b-9GaqNm#e82+5ebnmTfp>Z_%PKf_~a?d1c`Db9mVLNaw~!}zdYRc%<0#t_CRag9&I6z~f)l>5mUX;R-LmlDF? z|Kj(iJlP~RO(}j1X$I=4qrO=q4F)g>|7>wTN63N>wUrT!z-N9oEfcZDL!*NRa zukd;E$7em%A0#oUf8cA{erDu#=(-erz?nu>1e7ew_kNUi`UD50Yusi~soKOeTNRh& zEujC84}XGNYySn1S)`x*!&XB4pTl0n7pUSc0Hg8!R=TbyFbG?dUK+Ytc;4Poh~3^5 zd_b5s;1X>sbs9{*pXML%R>I4EJeZu&Xc6L~hhGQw&<;DZ^#&T%6f|6_xSVFw$}A(U z-_aMcs`klb!rF7RBeztO(*T!~T(xf%%8{ShS*&R77DH3l`5l#o?8H&1Zwj4fvJx0_9ZZ8vxv|@TI z(r>}2KK$Jnc7cZXJ9v7?;Eq{IiAL8L_R8HpdMn72^5v#3YCptz9G5wikb^0G=?+bw zm=hjU#q_{;2XO}4@A)z|`b#{HtJ3b_&!@}5m3s;+SC3m zowOi4LfD9cyYKx1WdGXG+Xd1A-O;XG;FTCtOm7}lh>h-+0C~jo;&$53uiUgor{#<+ zP;-kliKjqQ;){nM&X=Y#AF)o0u&b)Z;?%g1UM|;b5dd+44&=G$2R{gZO$pEFL*AO{ zPkQKk#{#d+=RN^lVHR87Utas^Q6e;{k~}{G$Rm1IaM_kjJNu0IBpfzD}dQEv<1+HPu9xRf6X-S{GBvB(P23>fI=vE;qp)-Y!@6D03C`N zx4@GUhu4u{7%-z)l(-If-V(s&KU4Y(V@d}+kQ&qaWB8YaHI+h{xI*R5i4aMn(>7f! zOfJ8zcx`f&m!)Y7x+TUQ|IWy1xnGV8(7`q%bTbTf#G#Q5JuPxcT*c-9fmz&R9_a{$ zW>@k6(6>YW&BVdKjAXCAYJS$sNex>e9h}nn+Xj{hb-o}-sobc$$2Kc&`xYB?>|bFD z^kh@GttTb#G>hn)E4m^PJwDys>q0)57C0}yv`FiZK|D9$jpJr^mhZM7&5 z{Ei^`i2Q=`~b{X9IhDhU_>WP)D1D_ws{{bs?UzhS=qH9qzFNHo3i zNd<0NLS8Ls97{6iMO5Eso~}2U ze4h7dY&|_W-;1Z5?}LCA^jNXHvJ%6ZB3G$sy^VPv1OzZ>1}ZdrgZMq*lo7$6hH z1^9MYLzcNX=~#-ssJ-Pp?dOh%40bXEDxF`75nBwYhH|7tHv8X1rG7I!6z-XM=I=M= zYJdOQZ>Iv~sNns6=vNvvGnb3|KIHG!_P9(-?r8V*cc@9H!#K}q{V+uDy)vYqJlxJ8 zYh8As)4|5I?2V0eCDXo@^sMf(T||^sUW_R@ZeF?^Ute0WrQF?XblQqYS#&*LAUt3r zlPX)pVss~e+6CHbQOt6e8S~%6NUAYnwH3W*WLoh;8XAO1sIBz3P%dlCJHV|NJ#~fb z`<1p`*aIg0Meb!vJREC?u|M_tEo|D-RV;guEz4!#&e$)lwNu_~vC>VNl=`(tA5>e@ zndmdwu)DJ}EjmA`BNN6B^S{H?I8+S60|W5#7}{!+em>D?41l7wD!PBn?}D(>c*ltE z7OKs|+b(vxlPY%E|Hhs|>B?J>QqDY-V}wvDeuhE-pT@T~D!mtc?bUfr+USfqWxNoi zmsYUIlr{XRUl{@fxrll2|Jr5$CsSI&-dfWgb&;@oM==R%1#qx^zgJ^dFcCr!#vJa= zlUjCC2Ac}M39@#9gaJIqaw?nM1M`J<(1VE6j9KEj9pK$dBRWMKNsnwUxs#e=&TB{K zXL64!%q?vecDOVu>{DYJ0!egUBZRUnpmO3aZ5+@X`7h#Ja^H>VCv^{$xY{87Cls9?!_X|jLOb|Kaz0fWk z*tJabr6sQIBn%;kb%Ra0r8XpjVJLv%p=X`QQ~;!jZq3AG;Jzp$ajq3W?kyT6_Vrq}av-ioyd;J=%^NBf=C}f}h6gS0}B}3TICiH08=ppII{9vG+ckK@qJ^W*S_AF_10x`g_(a%-y1J1fEEE2GF<;vrep!Ed zfE`nnJUlyGuD|!+7}5W5V@v(w;JYnv)<;Xdb$_QN6VqEw0Q9tCY7c5!pMhy+UjLC4 z`a!&~4xMuFkjX2*j;a+$W_FwXdhIiJJLCISFcA>Mf5bi zW&6dMvE3LFdF?%~{a0iC{gU1()~vy+tuc!W0it_ANGsQvRCnPcsehP1to~RH(saY_ zTiSsf4(J$TgNNq&df8mB{h_nkcd^ibFoRMSd&>I*^ci#BlCYkGKMEF^M=it0<3Ps@ ztJR_+gbIAP=9fj4mX$sQxw@wM!+%G*?B02SX=`ua>3I?E5(w|v*l+*DcmyV$D!+*h zh6$L%4EKp}#K2Q-wg#dmE~f;(93Iqy2`is&0tGLwE5BiF5mE#DzNndr@hKrdIl2%Z z9wEhQrkMkNy{tv2=HQD@4bo5PIFWfp#Kaq)y*v4x&*bir5K!gvgGjPev#Lh*>#H`r zxPt6BKOO84`j!37&{fs|!_d8?WdTS^+f|%b$+bHd88lVJ)7oU`Vp0B32qED}Xb5Ud znQsQoYU2-Kw7N!l49*Qgq3nc5TwiLdQlf|s!r>ispOCP(DlW;xVpQ6m+-+`+S>5bZ zp2E2r{NXIDz1-i(u~qHqJSfnu+QA!JP+V{@cqA>%rv9iBtOS(Tnm_H;3wph;7)Dxh zza^x*8z&O6w_PzFGH!dAI`{Enus0nJ1i!kjQ4qrL_%m^osW9OF~p4 z&=b?LDe{X0?rmRv)`@je3l_q>NJe`p(SRk5CNW!x^iyiW@}*#})C=*LIm6F=H(g%K z1JT1hT<$H%8~Bq^1W`*9!abd%0s5P6W3wwA+n}SBdD&piOG4hao#&~Q2T9Xk zJ$OKNHu|Fm^6EI$S0L?`_JOgXw#ZEO25=AHe|5$T?S(W!uSgX_DqaQ{M;6=!Ei98lb)Um9#KvourrZ(;5%mi4K=1 z9Qkut0dEELkOdLYG(E;tskAdthIT2kZLI2NEZ@ZOr)p`x>VxfsU6itN4U_i<^-x_@ z@D_Z&D7&O;5W`z$rNF(==F1iW#Lx*)Smv#`Ix~w43{{j^G0L`kB-DJqob%Wj(uPKJ@FQlsv_bL#*_g1b0C zkr1{*T+=@M4>R>wAtft2aqZwk;bf_WzA{f{Rx2nYEi35&5%Gf6P{HEud)4~OQtrj? zZslR)mEMD7fQIFi^>%er$dp-@N;(bD5JLdKza>;;OkyyReu$+~?*&k<_&KkII_=;6 z&VF-!)N>HH8XbIi%bryvA9daqSdXaDdpYdH6>3Sl&SNdbBavi(DNSa%YeL z&6{|tEcHT5+hlQoY1eX!;eCzdGledF8TypCckf|p09$(5RBHQ(TDBKsNzLWAiPQk2 zn*;P4Ie<=WHtDD#VHc;|t#pqMBct$wI-}gZOPt_=Fa8wYtg@1)U!~g_K~PZ+*Q=OOE{`Ir0!%Qh6&lp-GFpX^`qp>(r8>$nCE z9ou)iJ%23eDB&AIT%Rs&Rv;4Bv$iH;lQ26MhKiuGG?g;oC@3py3Y;$I1V; z6U|tfc{RedK(VXG(8P0=-i|C)3XiA6&0lf~)KFJ+*H(Lz=e+4E+Ek zOrw?zr~nij5T5^hQX}#GYIu~*v0t%JtNEKBSsALrcJDeLt*7trf%m7*l3DA%6enb> ze9DL~?dqk0`5(Dz5s#A-6CXWN5>*=j=cRfnETTBkJ~@?6DBga-dMtDQGWcpO72rU8 zpqHF17~q3>i*u!$-$d=$I`S|}f&Dxi$B!D>?=k=gpU*eaR2c8U4$7)wVuh0geva<= z&-X@~MMeY82GNh&Qrkfnyk zjpytAgvj;LHl+=7>!%kPPA^GTz=v0XGw`(;0A2qA?#=~Dv=!{maY&z3HBn>BkFJw^ zhx=ely>e)|+=eDW3|A)}s`PH>{z4SBwd~TqUQ{vu-R}o5qU6t%N7m~^oX@loyD|dr zb@>Xfk>oIJcS(%0;97}xA>;JMGaMyJZt%j!SHuBbJRtB3*9(TxiOAJbC5>(0?Cqw=_R>`^L_EJ~FtNbjZFXXOCba%q2q( zcj5t!4@FV7z48;?CzuqiC*vD8I9iGhGD1kH{P9gNcDk2qPAe2|I7ya7L5- z6P?m0Gt19}j3rxUe2TC{=>sVLLNqFr7fuIM;rgID%mN)CKM3~^V3SchasDV|cfKh+ zbLBL9bLBaLV()8`J^@U{zUjx3QkeH6Xj0HIJEHc#@`dUQPVgxMJ#<)|fIe;6=7OgW zkfVKV$huwPKPImv0yRVz=6I2SuUv^UXu|F}@Kf@XK#V4DNFyi{OBy|yA{9rhgR9jp z0p&?WKv?UZ%FY|9Z)$$Si~b$4!rTn1LJ;`A=@+&bm+iE^w0O~>$^N^Vi}dcs3$&R= z(#t$fn{h5lM2`!B61+zKgBQF><7q#q#Z6w!Xx*P54YnvA@f)6~%~%#gNH`D`!8P`x zSA&L?j)US9=uoD`qbkvd?Q?(O0OWx)qCsp`3m{cgjQrknP#enDSz zqblvdg5bYQI@D%~b|cMs@*CX`yC9=LS_Zp_4&`W5a=f!$SUfP<=(gM)8kroOfTPct z;T-V@EWzLYm$Un~qgMUFfEzS^)@?Z}>z3*)p`!T^gylB&lk9XCn1t|BD4t9k{&<6C zUQSNfIDRb!!vTztYSHeLVVPnOn6K~Ak6QF3Kbj(h@cR3s$$~0|ppSC^J$83+C-OS5 zKv~l%2NwvHY2GMiwsu!0^c2*}o4NEgWc7fud+;h{+^0;+NucU3a>*G&A*|Puh7;=N z{yk=NPPxYo6vnhLSkHeE7K!*I{IL8)T(|zRw|omP@#_MuX#%j%)J@ z20M%KQ03~u56`-L?>>cF>%M@MHD6}lO%bfFSQEu4{+^n&jPw_}v@wXj<07%=ma>z| zW468;xeI7GNlvz3YQ^<9yz9bt)PoU5&8K~$%W=dJP<+6m5c+xX@H@lAx6G2v2S72W z&TI+dz^cI`dLQcZt7_Qxhk=n@=v_1M88O9hPX>#ujfdinLg_~8B-WciT64f4=` zI;h#}waJuF3|*~_p$#aJ*f%fj;m74Q4HdoszM(gf=J}gtID)5I6Yf1=eBV& zj1E2RErK>SLKnlhU*908`4A+!T|RZu3)?eZX`R$_(46>z4gR(iTD`&#o5 zKo!1%;oE9Hh-8-Lm0c6e2YZvZ4Cl3>>`9_-ik_&k1F-xk=E_3q5^75BwqBweBY1+OB=|9a0^-Eo z-@eDcE#%kKJQDm)5z{Zae~x;ICy99Xo!(uXjXKl;Q)IHe0&$m%tI)S5{0t*MFp_xY ztD+T>Mu;al;mGJM_QTuc4gBF|_-R;MG3LIQaTj`{W2n}9fr7g#wz%4LxIITLrpy)_ zHN*qO>uX~H<2Y@Gy%&6K1~{SBeLX^E4`sc6ax_&yrf_E10&`kX>{MGA7Nr=58t>V# zJK-Fm?x4l=jw@5NUb8}I?iQm~I&PNSpBj|ReV>t#@R~S0>m8cZIcj|>vyy@2H$hf- zZ$Ji6H=sz$s({a<31i_7z#?@hvcVsd}LuGpWr-3m#g)3jgw3 zO#2Pf;B$=l&&GMwSxN)mb?uBS@DaO|YS`HfXA%E)7)M zV@b`7;(rx*t126-u22eQ0Ic^ka6u-{8)Wov-)GDa| z6@O6GHyX3WZl$$TY^Y8vniRgt6#Ez8dsElV0@|9sE52BzF${MFzkmP; z)<>Ul>ERA$-;b;6KD_}ujrR$30c*0BcJC%>oe!R zBHL2v6|_jb4QTr|BUxN&B92eGgB@iqG1f&Wd7P&)6Y4-hi_j=w{oPgcZ?EWI08HP1cF3=i5*q5S(@1|Pc%9jJ zyAUW0*7YQ}kWHJd?<~r@m73t&Q=aWope1BmmGFGqLMbm}DhWM3leo;RGbQo4x$2;W z)eG@dJp^Uha(`i!nC`K=b_b@9+5EhOg1#NjDit^l?%#FO44K|7`r8Azvbh{ya0sCF zEaqs52aGdX0CP|$ptZLHl3h03BwuJw-TG)HzdjI3H13qvwq!InGYxj$TzwXcu`-0+ zHSP)4eJ9j38=NmGjq>1t;Kub&$BbpeG2#|bS zp_O?oaqIR*QzQ?3r72r*;kI&l4(Qc7=u;^sTo1aTHt&^aJ`ehc zxduu1aa?`aPe=7sRVVGmlnI=WiTjz^XQ?XoKGP~W+xF>4v8Ty)6C7$tFXlKE=Bo={ zbLfO-zgnjNV?H&bmrKq@2#;(1_|dohQn(S_O2$SU6#a1I<*&5hGb-${Nn-~a^%)7I zR7b8+>s0i1!&dMIRDwkBp8q}r%j3zEf1mQhI&B>)yWM`N8FFZ07;q%OW7k?wCA>dn zb*e&8DcfM@?;4H~SYeS##=9xw#vE)Ux19eON=6s)9PQHE`)zvLajG@^x&v%^K61AQ zXGAnZ6&5-os8#g*T4817PgZ?Ne~>%j6~ZG_hb3pQHQv9M_6F-v$c#RnZwKRs(DyhQ z!?)&=3Jx-A1dngqUf_VXZjBq-aXoy?Abu_I&+`_FF>z{iqUR&tB=!4#>d4@`Dmq&d zpGXM87N1kYg)_pF|NUvmQY$Aciul$nO=xGeWx?i_O3kSJO(Fz@^O@{HU~ zvVmc`#;>5Y5EAh%8ac6R$yT;<;izAeo^2>|-asy-df)J-F(*i&HtrMm*13MUqed;i zltR;e7lxVAxeFV%ZWBu{EcW<1P#j-fS2N`FHNmVwy;w4Qm%}(ghjyT4TwhvPGAALR z7&5xqyHhm0V|f^~%^tVoe!lF0;@_4A=TClUwq_=FwKwg}WW5*?ixZ zA|w!u$@?r|r}jZj3(>5IB>u_iAZ1MPXUC;whuyl~d<)_pVB39hkq)aaSl8;bMCX0W z6@Pp-$E`bk3L+HEM6)+s@A$a6;+3n?mguO#pwU%xAo0Z-Jp;MOQqlKR663Jr&bu~N zjH41xG zimK^$l5vDvvZ_ac=|Nddd958^Af0NeX}?$0FA!D|pQE5{#5tWU zn_p|fX>Nmu3|vwK{5JVmxamXJGRQ_i2hBENeHjz(^TCJz=|6U|h*msGn zBeq)3H<@V93tjJOlN=8TW>6&_?F!z6^VoyueKVS(yk(I~{r!Iz9!Qw{=^x&i5}4Cu ztq{9DL8dHhtGQ(NyK_ou*h4LzE^W1@ovu=a-1|0SA1#n?4v-BzryE^#6_BIkgn%=9 zTM*2M^WjCzJJU^bx&i7tuLjTG%Bmd6uogPb`uNn>G^_{;o@>}4N?@NI4{84CA07FD z)axvw(1NhlUlOoxS8b5E3ym(RSPncbRj~N!)@!+r8rJ8jYF5kA_DP_>{+4aVC4dph5&QOQ}p$ z3R2%*pfXA>mg$SgHlLm^9?!w_pE^b|JZAhi^RI^wv zFMF2UbU?ZPIoURkP!&?#_#Mr7R!+H?#ybhXB!gK})1)|;U9sbD4`T6u`YsW2-EU2U zZYCIHbsNK_gf63twGsxVtr7E!`Ms8?a`x-j`uNYLmC7A;>)ID$v%Z+4m%ja)u=X=g zMKkp4OH&HtOQByAqvsf)w@B`nuwBit!jsuX(`}dNU0&_<9FKry1BFbc0p%%mxY7yM z`2mej=Kf7earE@?d;iimS1i+JKS_S*mQRxBWPFSt=^UjU9c$frDClV$kgmyG!Fv6+t!Xz-jHttk>C6Y@Btgkby$)uxf86MFES+l=5~Avu{u| zSh!+-=z67xslzP`RH2`YitsC>SxsBURKO8AcFU)%QTN4TEO$gezOUtn7weygdX#*g zZ8f-<^#7EiLuhdE5&-W|D9L=K`NykWasrZ8v)o`>n9Us#y+iUGmz;i`V`nh@EkhKNo<+>b7-aI9F2hUYzP zH@o%(H{^mY1|fr9==bluqg9QnUa8ll|2%l}DxRt^v2rv_VFl3kq8A2>sg&>+paT&pspXn$ai^bX>a> zRg?7EE*|DOh>F>bR}i!UYgqY*R;-vLI~3z$c^>JuC5qHhI);n{=r!fG8MYm|=(Koa zmMzyBs*@kx-Lthe`+*<#h?iS%>Frk8od6f|n&1bHqgo+FXQm^+wwP!e7t4zI6YeDe zN1gJSOywkyRMw@)`}&agDs?gEXWaYwY{HE4)4bZS-qj|*t=ExT{puW zq)Cgg_2nB2ODTO&0@HiR>1G62RyUjVYdL1hx4uzc(_-bgoC9U-n z`Ovc+bv~v(<>}{(1C?VQktq_S7k&i^M|W$L7$mKCrlaBlK5HJe2HW%*LklTC^zLN; z(24M!d(E$v&rg4`I{NHA*ECwxvoT3O#W?GRJb*7u&@@`Ul;Dynv`;VKIqSB}QSWjg zrd=2NNh|c|UV(I8_j~ao&BnIZcH~Go1_-W{cPZ*I%zirp@e3fOlaq99;0~$CDsjG2 z5*b%8B+pLuHp2!K$;x8zWAMrq^H(o}*9gB1-#A zG##!cxm^1f_AJngj>yuvmEA=Zg)LY#B`h!xdwb!~AJe*O$UoJXd?+QdxcH;K=+Ydo z8fXRBGs`W(Gdh|ioT8IFu9upDAER8}jy0d@~zCKt>YZzs$sziUjAT4PK% zO2I^Vf+1_a!XhT@0RJ2e-X%Zz6~`YxT7liIv(eR(&y9jTu6{)}N7KF_YqTsUl>CQ~ zdh_#}eAvkczP+WqI%>-D6$eThx z*O7&ctn5LJa;bj&#M2AILRhSc!=%LvWTcS7b9N^Wm78W%;hmh$MccsB+-cF1rqUU^ z`KAr7koM(#pWC3n4%Gt7D&HWnslKOa_ze?w=u`(;j>0w%VAU(%Ure{GkG6 zi8sh0#D%UO8mwpR#fs-4cSOUtXIM-An!2@$6oko?H&xe1C1XPHlV2^@n>Qw)uVRhA z)+qI%Jl9LFyMP^etX&yp;5m;h-`qg5_+^x#{CVi;NYyDMk>d;|d@DfR#W1sDXQq7~ zIB9u#S&p%m>`<1Ydn4cQT0Z_xmgshTTvN_$CIW8%C+dbivSLa}f)$Y6< z*TH%1l*P#43(+(B=@HFieIEY!l*shnotm$EIH?M;GMXcP%y)yzi$66Q5FYs&1 zEjR2fRyV#MtKZlR?#wNUfEg}YPt#Z&Hq=~R$`!IK^gUaCt^v1(mg&Xm-b5E9L}S%b z7NLz;3G&nA3}+SBgfaQ+hFq)s7TylIRQt{Z*R*ryllu6@%8C}oJnHL`Ud#iAAJTBY zXw>sSPj~RKP4Tu(jY_Tfa=m}oKYGg7-()|TIR4&0EyJ)mJ^%RR3`i=pLxqYC7u{-*Y%NVvU7dmE6r{6 z1hI>7cW}nG`_ad(lyfytdK9D(70*TtH4e7f8u`vS5mm!nD`?F{tT4cQ;EVFRn_Fci zk%|00RVW&RK}&;$U*n&JKUK(--_?|TE~%*wx?}uvX_nxs>=hTr!!(ygPc#uWp8A#^ zZp|T@eVjl0kbFd}ql?AeW*?G0${XC- z99}E4WF|oqW+Z#lA?oFlK<%Dzo*$&2RW!JW(3jTIQpU*VYkA1X@MhWXPbG$HYl%)P z^SBw8aNDuM^uCEAg8!zC=Q|8y{F=J{^0T-^SigcX4H@4<<7ssaag(J65CKC){!Ei-k*juE0TLy>K z0~0w+S~+CzCBaMF03-Zi{#gqAr$;?q|c@#&#l_!qfP9UK=c`cx4)Z;jsvQA8!p&pW*D*($J5? ziOHM1y2P2dx@^x0y`*)atYRR$R2N@u>mv;ygRI@K zn*KB}Hx+7OSWkq=YZ7C5`-NVh13sDi=)tjKkSUGryLu?9N%lFN$+$Nirq z)`G0!%)!?hZ4Yt~`*JDnF-hG7tBN=Od>5Zdkr2!t|LIAG7FdlWtFom7@^u~r1i>tF zF}$f6)$^Px4m1dQ+U6BkJj2cX-J{cvd=;n@9P&HlAQQ)C;MluiR<9))0tEQHy-uB2 z;{)eIPC?ym@x_KGoRQ?_7RB56M2DnRCA3ULic>^*qlU7+dMQ$AbRt+?bZmCUV=_t8 z}@&%w!4V={d_+B(WOKzqF%Gjl?wBZ&vLqQXU z6*TOZ+y1abun^(QoJ)Dxwt4GU8x(NF1ian26mG<8@F>A^9OS9ym`L=EK2TUzL`1d9 z5<`4X!RSNrmv!#ui^(9>#NsV`GrFymAoF7W&!czSDbjQI>!>2|pvqr;71*IHT}7J* zQD*m>?XKfaI0x~6L#!aNOsvNjjf)0?6+ADD_O@y+e#TNhIgS`qFjmUE<5%a#xFEma zDU00qoI~ytlXzuC-8wEc7p}JA&}1TYy2+ z`6YFl5v-8>_vgIi**MZE}g?)bez zHX}!=8g^R(c`H$m2fVb*p;|_l>pEA{F-)*+0r|?kyy1f@SA=fcbw)x3JWVIp)Dnga zKg8_(l05__n_&2Mdwu?n(vH6@CfY8uHS+P@13&i9yj^aMy+*Yxq9y*bATQi*P4=cB zlD~&dEZ~yAL#!hl_!1GfsCDA)#$EQB@U8m*^=?N7ZGrFJN`A5Cc5SOQ2eo{5UG$WJ zr`ljUs+QOhoq)9GEB8+Wou9rZG_%U*)n)0goH06}5YO}_81NkkTBs4IdFq7vS3iA%A1y*`we&k>7DzS z`~Yu=g)W*yF6Rto0n($D%buvanGY(q@<$_(ivHpJ@THNFpwG!M1tO;8R1RtWq!Vbys5yxu^iO(pWY+-nTY+*^?qUJH}Lbw5R%uc zSwzdtynL*{Wfp!BBYu~(BAKbj2kcusyV=&NV!ostG_%u-MIwkazzNyov6iHMw8@fl zFV>1M*hgMC|6982L;W*+5^=5$js35zR@NUE)LSN!jgW`_c)viEs|Xb^M%;%C;_R5Z z?*X+pFCa!wB+q0o@z})CA|hpqUMzBmtJ6ZWnWf$0ZR*DiSpK=&C)ZB^>#b^W7z(JM z{*R{%7XTJ-s2N|Be z<}dl8%0KJO&Y2bmT(D|D(5X#Vv;TAns#V3ye=hUc_sPHeGq8OaEi34suACVvOGFELtz^hy1;ZN_J7nZ%B-s@lNPYh4pkg}|J@%Oq2|9joF6-KK4t6J&8 zX$g};ATDv$ynM>#wLuKFb8(qyisO3a!ad!}8hCifnUY3%e+<@S7<9T!y%bSzX=PC_ zU;5tDQgsxHw4h0iu+=H??a%yyI=8W!9fr*eZXidn)2#tULMMuqFMw9z_#exoIH zXa6heX*&ybzpuEWune8Uk~>kS^&3^L^BPR9^GTSsrOlDs^G^j8!m{HhQPb>PHP~77 z;PlZ6ns$D`iDYG&{?>^HJ_h)iIVKPZB+5fxfQ|5jE1#u;q}Fh8@_y9wY6Nn?6E2?r zy+`T4J00+@<%@F9Ysv1Z-zqB_x&#~V-3N(j``8{*3Z%;-hfEBs+e{wE8v=FR`a4=h zEsq~JtXh)8aiJ;zmVN?Xj(5BpyP*1Ka?380n_Pb`P!o%*dWVJW<-}OepPr}S|2)un z?aKq6+g{1k$99iS3eQM+nW8ocS~R09wc@y-)XO*eYNf$IAxEmW4q`y@*HF>^&3rNu zwu;X`EH7S06oHQrw%94jvrcScJ_-ztql43OPrzxJQ`2GnCmk`Mx|^?~?#J`w4=3nu z`oaVQ@eX6pAw4M!#5%aPuNB3`kgJ^PLpDyDmdXH zYuxBgLz19h`rNAH@ET_2=;VewZNe&R;R-t8q+g|6>%oATlWR`n{1rr{2pO@>tJ}PqiUV`j$E2nZ8L$oH@X6>!)hR z`=$IS^k@i{<~Qhr2rECBzd;9d1t9ze1ERvp=HEzz5@P?16Mh|U^Z5Nd9CT=LlJ%Kk zVkPXu9JU{GGSVC!GU}`FDT)#UbzVQR?_^<=+qbL_i?eN3mLE^j`<8Ybi}#yZSzF0WHF-ih(?l-h&s zTt#Zbbj=kHVLdx#0rErJ5|7fMY_8nL36A^IaeEG&dLPonJ-M$M9aJ?6^G^_~7Er%s zK?)VhPQJ&J*3#piT1U2}y3PxnH+yD>-|YGDX!#qXv`&5}31amZ&y<9iR~vf{dlkZ3 z>ldnvQjjKvHMr zQq}Dpqd_YfG5QV3sbKyGAu?A|p2kD|!OfQYZ@g^8mHQVt?K(TK70I;}scSL5?t?kj zZ9XyQNZ|)_oJ>h2ltaWcrcLV75m#0P^r;uMqbuqybh5vs6`FK56^$1b_%5kUK5U2) zk;-4nTNfcHyyLyio4|0t^>Ms{JY2Pjx*4w~hK|*?4E8wXE?oPzW`7Jg=$->S09dpo zUF3!f+X#qY6e*9c0E4Iy6$WWro3oi=ZOF(v*_3=&-67nEHO1V^93;?_F8%piFl}!(9Pw!cU{ym$Zh8L#>SuLpX)!mtaeL3n8@ldZMYwnmRmR! zNX`E!5xcq`KI|*U86&sY6@djGC}PqtWpo?0DpUmsP=qAtqKWNq2$P-;dn1qd;g0M? zPEGDh?}`9%FBRUfa6`ZM&vHz0lv%E>Ye4?i^}yZ>{Ox^j`YO?G@B|tfeWF$ z$r0XtxOf~IBcY2zIIbJ*Rj>K%#K$X2YcE{mWtIVWpIcx}s5;p7$ubA!CqC%~Zz>8d zL3VXdw-OsP2#tBfZ_%Lbja&T>8UOuOo)N&o3lI1_2K+PW-Eu1JPYpc_LO#?c)R--|(*^?&{?7rNIs7<_UJi zG$~NuLsKCzX^XPRATrv9mvhyAY2(w))Y=mr#x3>td?f$PnX6!7jF(PYPvM4#e>G`+ zA43m%k*p*%p2VvPG&Fy>U#f_cZk^XW`*n|7+hl89KiH*6bZF7#XIS-w>uGU6ZY;6z z!6fRmp2imMvweL>07LWXQs+l-z6EW>D%QK-`A-J!-d7INkP;)Tk(B7}|1)$D+-g!< zu%HET_>`~Z9Z@tlaN~3TaXZ6egXXJ`2wNE@A>GEZtV9_$iZaf_}98rWnm->}dK?Sxd@)pJziO@u&Z5 zVXaw@jEY`9*2AMDn`qac#(0ee%Dfg*b6(@|>9S6-r)cKRNKz{(umQcs3Rvz7r|9DSK-h)p28+}-X>*pYJG0< zsAxyc1wH1HzQvncYQf{-nAVD7mwfY;Z%Q`sGk=MiD)&i|;+VNKPY|}FZ&5i$v2GL< z6Js9aypo|)e{Cx|h&0oen zaf`Uf}sQ&_?mfY{U4{ql_ryF%04|SGc&vn!a)+G@>~OQQ14AY z`c@SSW~{9F6!C&OK%Ugv_t==s+IN%9%kTXy%f{yru^3;{+oQL^ZTmqK)Uj&KjfUo# z6B23@e$q_TW6&0`zs9!w{(>vyhagt&qLe`Ql=qNq#)_}q&{?_01$YaPN%*{h@OA5c z*zgAV6!1Jq5)BE3z+A!?$HR9qK4Yq;r@XhE*K=F`iZ%apvacv0^;Qe?0QhIoVGlLi zu-@7mf*hCGlI>#tA2#i#U>Pm@aUsu71%tVf3SV~j3MTjMO@KNUL*na7PemSS=lqJp-wy*GX-T!OcUd9Sm&P74%XcH|kB+=yNv>4=8SHms7K2B>`lUBJbC?6*T zFi&_N%4J1*KkiDvg)-?pwaoL1{h=*R zcn)5)!;CRSb8AOyL>*e+*+Cqab%gjT?$5?jY&0t#ux-USp#FN@C@`7T6IYQKz6Acj zP*4i$7S|2?mKgXZ?F}A2JSV5@IX71W+Hp#34fK@+6EMoo3`1%qgSSyfz>kfl`x zdb#4jOo*WHy+k*@K&ZGhk#jv{;XK@{_<)yQePNSbV znn*>A8z;BVRauv`eI(7~0(Mnyjy@%Os#jv`p_P5&-lF;(SAg>`*5@RD&Pm} z;D2X+;Wh5p8Vyu8%={K<%lmlGmhpx9g$+8#@bY=3ca}%N4EKd{vqbMRPRKuSh~{}P zbc+{_pAP@xLLx*2KASdd@VYzsv^WY%Dz(Zixr3J9-RCgp%zw_n>o{jpP!8_z8hO8C zV?Q3X#rY>86>ijFPVHLYLVEYb>Ezv9W;TEbEl2yfJ*tG&WPO7ZO=zyGJ~j_{r;X$? zYI|i5wxNZ7y%gZY@V5U?QLGu(aH!d2HaQb<7u;ju{K_! z5uRshcb6-s8+EyF484us*YgOlo;)486|=goa8LmNQT?c4?R*hNFFHE^t)FwRjpxCY z{M#WEBfrFH@G_s(rySIG*wLz{wTFmEfin4%|8LNsxR@?ooPp>0NiZ(V* zBd3aL`3ELzZ*a3G?K3Zc+rKn;<4|9DQQx2%b62?>XtQ+8LjD`^W)2g?UYK%1>Vzy z=`PT2?YUXLqD~l3dS#3++vV;Cos`!W2Rfx~ZOElN?szF48)_dPJn}q`9_#bQ1!8EJ zUU35S(R{3A%ijp1Br*H;T`;TSv!g;I^lS9!8yw2^Kdte0W^M`l5}-u0Y;tlW6$+gT zP(r0+l*iEDF&j2!A zq~5{=uJ%=nK+YE_>lwp^f{-AG@eg=65qS&AR! z=t;01?Fcg-SS+5_%S@d{qV;cJukqWqrmF)J$PXC}=iXaE1wb)>hMQ`8RSE-uBD*f^ z)=3+_aOHOc7-c0uLlXmDuJBL$DbvDAXF3Fl)*4b9GFP@Sw!Cxu+0`|3fL|@`G;XKm zPN3G48WP9QnZ3xf65U&o9W1<=dc>EABO$PVgDVFo2gZ{sp&hRAp>XygP{YD8JVF#M zzQ1A~7SBhWEgC{G3)npN!P{dLedM-#z$eRVJrkW{P)$(UrV{Zd{uToY)O45jXNgqx6ELn&H8Or;5z7%>zR6Vc5WSDYd}miovlXSnJ%(z)_I%khvosHKGYyBS3 zcZ~_8-#g-d1yMSw8QOb1uK>!~z(G(2B)BT|KE=M6m#}O|;M=nP@0IO>{~qCO$^+NK zE`CsS?dJak*0`lhtJh0x4i>C`_3(Uwxy6MwH>Z(xe&l~!0zRyM zJEb?o)>;IEkc5>RKozd3vxRK6kx0yWZYt~tRIe`n`jO}`)d)9U@ z*}epu&lGqo&LG@1lXrlp8a6-2J-?xFvKQgC&Nei5m&H*I*Z4(P_oQU6BxdZrRGTjP z&95|)eE0ppm?e*lu|pGuMmrAGKZm`wq5<_aN!a_{oQ&uvLKUD~;j0!6@p@?c6Fna&WQ5Z5q8 z_?}1J#gOsJzHYzXWXigO)_B(38R#N*mgr9ueGDJ@17wu{EkfOb=tr%%S|Yp6xXOM6 zHB&hAQn4L7&=K*OlC>$caS>6<9~j+qS))!sIRgJvr^6$MqNj=5Cp-JXJgz7DkQsG~ zdN96T?J;(P1aI~u`!e!oph#o}1sd6HuBwFii~CKBhLDHzQZ zhSg;{pEJKyp*UJUderl?EyS{JqHs<6a*;!#=a_91*Z4Z77*(V#n>L#%3r=+ZXMa`! z6=k#+Jry8qSwv$`9l;%|ZS0vmOP{t1BnrFbpu`A_AN{UwfBuor4?-HGa8p52nx0zE zbWa1)>Co@F(Pq*>*Y$UTqH}p1u+pr3g_jBAN7$^Gth^Q75 zXd4ALD6!k_hkIrmy!Qg?bSqrn?x$^ANjHywp>V(7Agp`baBKiQDY5Gk&-oxOtgNj{!h@etOjUhO+sw{{2qCKx{Ry`?M!3*>FKrXuMxWUCqRmf)Cl@3c21uxwE&2p9{E z#*qNA-@<({UyZ38vbMY)iLavT%mm|pDX{JS^cr4C$kaq*K*BA%7bv(u!pC6ee@bI& zoA0$H9nVzKUDD0JVx{!(ysgmW5U(!bx?_1>=-wY_y{`Fk)q9@P$=3MCrJ~Onou|F( zbAwL2|BBa-KT!sWo?C_7FZ5&SN7jZWJ=K=uU+H1JhCxW)cAKBOhCQHmM%Htw`Ql4J z#mpmkLsq||s`Y->B=OxTZag|X)zz`RnqW!V!C!(d#+>AK-dq~`GK-+10(VNOJy|Fg z1mw`MB*FZt56E)jXK%=DUb?_Q&V{Kwc}8?F`m5;uVsO(Z8r63lcPB+zm<|CNKb}kv z19$TTxndtuHp5()Pe+_}lyMi5$}FMn_x@i?VIiLlr} z(U-X@1j;yUETFdxLhgE=y`OQYf9)-+TRz%TM_=s7OH3jk-a~E6*J^pQo-7hAmIF`U z90Rdw&QuZf!=1!ucgjqa5P9LK4~6}0EqJbu@I$IuSejzoAPPq`mA69B%NW~6p9t2xTzP=A54`J>iCB6QK0O~+ooF49=6Tlo4gX(4{?C8as94KOtCbW@ zlwmeor@2Ib05_rb3T`-R2z1VSksm^BT4kUD&`%I!r-Z4;m+0KJxRcyme(~tG;im|P z1*NI=ia6`CkW@WBf8|g=iPS|MMwbd5XUe)2WhclUSB zUNMbH*aFP1-C;x8mjV^Qs~XxBFk_|yYWovKBb=W3`HNKrT#MuB04C5A6y$xaj`oTK z=x~E6qNRY+lkKdT=DN961^e7{R>G-{!|BhyMA^yH{M1=SKMMtTQAQ%6VmzB!)tFV^ zXvTEn;grK<=&e|SW#AKtlcA$Wj0~K`V5Wt>E;>f%lk<11hZ_1Kxa!pthns|l%>`n|)u#Ow^t zugiDVfmjKX;$Tl(31vsOgXd*Ap314(vmy85bu?F2a0i$eu)}F|TksmpLZ{`~Tjdx9 zepn&EZVJft^Vw?dTIZx|N`~}Z!)V0o^^Q1`BO;u&MJXGFXWf*T8RyLWWtOOHe6W{* z7)(ki>%n}#Q7Q}C68f)j#k=u;MPOFmaKZUWd7tHSG5XdM_fy&g3GUwsAordU%dxNd zY3qMhGsg?P+X`x;)*!EWRcK>;uotcd;sjVpr#i;9s0xLrolDadQ&C4t#0=1ASqOrG zR~_M8lyz+*wKd^8{3wm)*e1Q-oxe2UbyJn+d%qhs9(MIKsS6i#$twVKFZr?k0nudl zgJ3#QMF;bxkAmUVP%Y$o znD$DkR)d&G8tZB^LuwBl%lNHs+h21_#n?ODNhnv5!zzwHU$AdD52FVZ(^2VW-o`vu zZS$0i*a^z(J`JUuoj9Z`)@wdITpsu9;f|*uvP^E@Eik;T!BU>i&CD&pL0)mF%1ocwL!s!O4^;Liy?a(m<%ea%+g9=TpMqeFQjjp@h1sG#%v1hAZUtl5Y6 z_HAodxwC~y30`YrXFl^LtkL89Rzr{z==%^viKVIbGIVS93RlRr4zmS@4l|`_Es)(=Cz!#yf34#y^ykmxlboN*Cj*`;2L)~Z)i}kw z;_lv&v7t@y2I3$m0U*HY{|E%-hLq%lcr0SMKSF{^W4;cz2>WLVsCT(_3ZG1}rHN|( z*{-8IxMIi+Mu2Kh9-!swMX&7VYDm6v?k9QSusd&xV<);{^2N^go(;A%qDjZx7lur( z3PLKSGu!4i(IcJ#4X!I?72RLaZ#1?Av-c+XxlmvZ%SGl){X{~uo^j^5wSZCu_Rse9 ziRvv+>Cj#m!tB=0O6FdDdO#Vg+(BWZt3&N(sj`n{w|_2T?W}&XyJ*Hy5%l=`P+&W) zcXy8?IWH@@K{@lfYi&T^*|#`2LgwadZAEJCq<0|&*YPlfbNgBTkMHKsG7658Wke_T z0@~c(^CE7LE z5-mi9X9;T49p-I_p?TlhU&rZ+2^N*u$uSn$@G#*S4mNSTM($FCx#+BR>tkkX`;y3L zjpepI&Z)o6J{Nw8bchlsX)NkVFLDiA4TIuZ-lsG!%b_^LA%kx=EsMobw;lz3FP8xz z-ZHO7tF5YS40wR5u$JC7KvT-Fy6{Ei(`rgHNEK&hW6p4nQ(rgF`tks3gOyRhKyX-{ zq!+}M@aRN>@$1n>(`|k(LM(b;x3WqQDC}heG{+4RNwNb@9OU~;t-Fw}jcHrah^;e| zRNUPB^li>NICzj1=x53bfrv^urbNHH#;=mB^YNK_?ucaX#wE^T(HZu-z6ys;t=Vzn z)0eiZ#DmODn_4ogqr%#STE!CBT6K!kb4ghlgQq=qUA2=5_!4C6?4{TWYU4^SIUv${ zUw*aek&xQ9LeOJr5@yLbNzJjG)~OQV$a`85pq9RP_~8iV6Y{-OR%t~lUGGcvu#>!6 zq+;9S$lD>;l#@$#NN(->1fUKup0Si)#HKTLw7=w3Y^@{?@I!@?n#~JQ7J&n{Bj98$ zV}HG?w(RD0DSq$7Za@0y;yUvo^xw6qTR;cZqqN` zC+%yV?l@}JeGE(@(JjZyao3a%_iN!*c+ z>YG=LJ$7|249iEWb_JHjL`0!8YNb+{&*6vJKVqT1wNKlY)4HireulfW=2LB&kyskX zVT)Lpd{6OGdTP>i;HFtEOPcG`ql>qB`UGbnT#wv|U$X|%T@iirf!}vK>cD3Rm5F5> z=kMz*Wv@D)r`F-vg%nf3ZpfvbXT$a?qb^$*K)Y(`nT`y?eX)Gj`Z=X zkwm?*Gnif{5DwC4s-ry%*8ecd7Q)ulfZF*4;qn)-5VJrz;aJdJ5DnkH?&q`26IvXx z?Z)O`ltUIpg4pBeV=3-3u<4!-OS`-4%t?Gz!!DJJY2swRqNUC@N<|;#v~-# zu}I$1Rb0=rIdSi}EJ2GpSfr8}mFbP7tG$Db6rXA-8{pu{-nBC*PJ!D%4|SaGV6`~* zukUL!K?Z(=*tYW3ddqql}T;o-eI8^oJO^HMhx8b~ijju&WEnD8Yf zCk~W<^T$PU;pv%sHp^QCEz841J#s7>HJxrf#Oc_*N0vk3ai`>GsDmKWaXcD z@3TL_J(bg<1`_#hi{s!qcCPNDY6a5U5!0fnTZdcp;xA?-TPtc0o#Hdu`=|U@ubo{& ztzkzf{8ws{C_y(rL=pho8yxTc2DFPt2eW!ZvJ)NY3^{{Ha0iv=Jt-aN4S0`Ou5!Oq5O`^O*ms}s^~cAB7z&|jl%i8_QqoI{qi8?E z+0}7H+1$l%iMOS1aEYFSgzLcZaWkv1sWN89bZG1cs=IK}aY_Hc-BKU)z5GTH!CQ!` zXF84ZOY+}BLyuaiQ8w+sv~N})($y|ca?^9avWS=W;)_0>f?i<=a_faTf32cIZ@*5% zRGGYQm)A8+USq*jxxz>$yaZ_SS#Sa3a7@O=tQ_Me-VbI0RHoz2hhpUgLGbfFcsD_)FuIPUA#VXb}CCQm`Do zH5>9kp0b?w4WagcQe=LnayK~LQH3e+ImB{armJr~DGZ%GIXOnOL=DP2mP$9V3)#J*^n>DDyyeWuqQc^`%8c zO(`LSRl1kU$AEppV;uD21x0hPlly7QUJLkHA|U-M}rj6{jb`Rr$3X8u=Uy)keQ_1H7*W!U$HirRcA!%GW~iRf)VxbvX+cMyq%HX^}K6< z0VTr1`pB*p&7KA!R=td4ud>`CIT}nwj!ktODTfW5#-?}oJ($06aPM{dY0r;=1&vG0 zaLh&F0^cN3)q^ z=yV259_eLz}F4Sv6HB8Mt=IQl{Hi01u8fPMJ3aIGHa$D9F zK77^>jJ%nZn+H2%Ozmb*ffe!!sV*4tc3;jkaWJZ@vj!Stp(cR>}>MUg}+5IEoUO09P8tGemohP;m0gY3bY<&qc=(I7w7XUfBFT4xmBCqiQf2MhT7_JhO($so& zaC%0U6#t{~r)#ZTQB3Xe7cogO}J z<*O|z=I}EIhJt`Y$+jM(R`((CM40iP{eue_tRT>MGyZeIcmz`JE^_8h8eavmAo{LZ z7y?P7jVCDfiaQ6cSX1~GM^mSWjAR>K8IL=c>nrX6#Dz!x@6*yB0%sx}YuZmHvIXV- zjo1@q-Vxpx+BY`{HfIqgT_I5lIBQqdRk_#{ZeB5%>NOiuDov9qWzQ_dcJ;{(0o4{K zuSO*Dta_Gc_>O#2&s?az@t?kz8JLdCx>cenO>+rD(}(Hn4HZRmO^Tz;2r@l`A-R%-_{NGJMF$vZWJjPHk%$M*;85 z1rBB7CBD)itSxcF+L)*PjrSBfJnhaj(b(Sm{ot*sXlrPC&4&aE)*Hsgtr3W?=$49m zQ*6}P&_^!bb8$`8|X6^(1@`TcLx)W6(r+MOi}OOAMY%o zD~YfHbE^P;q}r*PnOX1<8$FH_paZQB$iu^4ZGL8Jwuw<9X)JSgo;m*ir-lmvZD08{ zhMBKDvh8>!8nHCi6BEq^4y%miQ!%Hv^!z9&K&STtvqhVo(sbmY1Ha&=YRFgK0-%SZ z_9_*iDp)iz+~@fMsr~sK}Pb?Fi^W13nXx zfFk6547=)0^fpS8493Phka2{~#k+w`Yi5bk8Tk=5pY{pQrqXzfq!n0NNqEdVue(+U zW(LKn`NO%T;K#1k+>er=dY|Njui7Xnb!m60h!L;Qm^Bm8z)g-6>O_}FA=X@FDbG#g zPTrLudHZobhvN>WEQs~|%%=wa5gT*NW`NRIpt{fI{!V-rZ8Vh0E)4N33~c zn#H^4MK(2GK(T-UttAN0A_v=$s=*`2(cp`9)}(4*X$zLAS&n9PAME#zzR%y0$1vmA zOI4)v7rnQZNFYZ?&Hz5XLSxkDy#`oQYn&3o)?ZRZQsECI}ER8*J ze&DCO(b6@798Ei>>cBKNle1d#d4|sffgWH1GBUCNK;<#HG>9?qo!kwy?y4Q2BWXg3uA4j*M0Wy8x%+79~}bILH@sSP$zri zuRXjRNX=-SU~Kbk(xa|EFV|}5^k%|KTjbc&Fhcap>hVvAy__pC={Fdz^~+64Q*<#r zZ6f(TVS0;I`JH2qx+Laxauap@mKDQ*=sic>1d#8MZ9&mcpDW*OYa*VD*4umZ)T92@ z{}~KzLg?7AvoLe>>$S-C$kyX(OoXfbSIThv`P3D0uR-ceE5?uqaGAu+x|IXpInsh< zVIT73X3cA2SL{cQ$P*0C+tBIa>&f5z-Ae@ke&;DePfwWUOT$wsnF#zU2U0uk-$nw( z5#>wT6umoj*~0u=?rl4J`6j4Jy=a8h7j)%2Xb>~QPGcuVYC7B~CCMluVvcsRqEz;Q zr{QgX{h$-z1AAA-qwx7h=%$yyE*d0iJmwha1I@Cbpn9W%*|;UHlff5Iwkp1~8w_%s zFY?pD;!Qewwnq}KAp#CdWwf2CL7_{kpYgPc3R@+ zlA7b&o_+*M*5hSeWQBBg*w7xMg%TAZ+}a=$G(6d@_(+-9aw-q`vG#f-rzKp43HHzo zb7>+2bHPju=v>$bMh-Mmh>$SsRi}whSLDCHpmL&e7nP0zHjiZMB{ogEe`maJI(74B z->>G|kX}91F(Wp^cBZU3TQbVL^dum8Z_kRCI!qCoKWJw#+k4z4imsLty@{&%6pQ}W zH$SvfJ%9>eOJlb2S#K$I;&H#fw(s3Sd_C*hM<(L2=~!B7+OH1r)ZTrSpZ=RJ!xakE z{w-Zf{s+0mY(NG*jy?+y8Jf|(@3Xvx;EHU^+rppbEsF2&y*f_-s3OaEtg5@G*z=JZ zZ8=#V(`64_DOm#7Qi0K;zbEx~tx<`@?Z8RDU(EV#U&;F-h6FqS8tX?6WNNBCW0%10 zhZi??ztfBF}Td>x*2=qKur#8sTq^v$EBolco? zCkCalQdJl0g@2cPLodVq(9a%xiHXkF`{Ud*0_9cB(qri;1*+agBsE}k*87tJFnNeM zP&{m?9;wjVR7{brd%)Fcpy9bgHP~&;vSmWHW@|*PX;`(DUEK01mdI!@%Z_es9e7o6 zO8^VCb1L#!Y*#m>OhfyI=f|1VUN5L@IMGJ59V%Momys_n_OK6y8yP3{_FbE4-L_p| z99^msg`-B|Jn5To`%(tVE-YjIa&yTPhLM3N1#x#ZKM-cC&7|dz{NSA5)LL54xqpW2 zWLM|W!?H)XEp>Z37F;h2PcNUE;);KqU1jR`|1RUs{&#pPt4F`VBClLMfGvH-tuAwB z(-Br5pwkmvhKZ$U`cCm`^K@o+UJ7h|2x}zn;ft31)$Bepy;P!d{k$WW@afVm82$mu z4|fe>S)19Bd7>U>dGzp+`*7CVE)vaDxbfrm_5gq17HO~0EAX<&Vl8e*iCj^R%dzJz zMjv|WEra5gmbH@BOhi@#C)RPuHtTv~Rj%`oj+QlS>kh}@d_byb zK(p^T_$&W*Ce^{SesGg`otB3l&Su^;q&Rcku3U8T9aNOjR(SSz=oR#c%DA$h{d1M0 z57Nj@-C-a77~Gj+Yawe&2alD_h@X4Mv|Ihc%YBu?M!mvo4S>UAc!9Uc$CV(zMoN~l}BH z!~k&>RkgG8&c@QaLti`Al;I}c1!M7Tm$LlGfaje)Nb?rYB+De zjQ7o>jyfQ-wWBgk%(T1=gN4e$V-I|ZlqCOWm~!iO7Flmf=%&#vq>o|Uh$>}gO@Y9L zGnOO%H}7^a^(%U1o0j=>6m`#T$4gKU_&ak7<_YrMaoL0yG|uCZWO$#q>fdXdLB$qL zJbmQur=ET6w&T8Sf1+K&^Q^VE9*Ihz4pp`bf2*MEj8E11F@cr4yT; zoR&+y(?p^Noa=X12vf#tpkp_?9tJfa?)s@Ge-ljs(23)=Lt|AcOF zK5G{$v-vIk^y*pp*4eM!CEpX`{Sx=6(T#vvJ9jy&ntYEBnlJ9O(Jb!sXZ_FK zE56x^jw*+B@X)yMMT{u`vVB0|e$m zgoJ3z8K_OxDjAw#{e2HcTVtg^bN@nk;VWmtMdsTZ(X0DPWGoRTvm7s~!^b-G45si_ z);2-(Hgp^Mr8T6`z!1dOIW}NL3&t){lA%`0w)(D$b^p=AreaZJ%7D6J_lyJbw&FG9 zi?uuB)g-&GYHDD_rwXaab4;UhcU!I{{4#>a@waYE0ET0-Ru{Z&rF(8R=U+eYyv9`q z`9ELvJBl8oQVkm%0%;uPLxFV@56C4219s${e*>Mr=(d<+>z~hQ3+U}TA~=anvDsr6VJU(=7g<V8fiS4lhfP(3 zXzn_zDrl?Xx<(CrirQ z6>qmVRs9!*(0RafC73}xpUvnZEmukt=fvs6zaJg=^YNDW6xP~-ej?2puG@~BQRa4( zDiEcY)BbX=pdjZ)2U$tLqmGR%0DVCp=2(j&0s?DRMb1pww&?J3Hf$A&!?;uNqOU%| zKRT5G(hA{>bA-zer_XscA>CG5d3WG3w;+|-T zmv+5C@anV;-S5v-HVdTw7cJo^m#^xowWaZ=ZYp7a61^Oaycz48v-u|{7{E?;hCBmpLH5u>iu8iI2)qaJh;kJG*3(7yXW4m1|!t|+70@vCcb4a ze8pE#!hlw?jcysPc)7BvvUu(@p{!^8dk#!7$mZ;r4`(x2bDwyVg`rx@|vbwaNRe|$+fATdUS!Oc!*QULun|O4kw5!M*-$F

w^qKg!)sg9n|5UQ)-_RgM{uIpB*OQxp%$1hA#Z+mtrHoxJz?ZjCZtDC$O3Mjn2ac52Z^D87OH9?3Nww}0W(S`$L(*(oU#HLPqztj6jhj{~zRvqS?(MPhk9u!o z8~(av<;}ZE>A@GC&GyJIn-5LWZRamm0}B-SUvZN5^J$XD&F9?C%`<0oW192R?*q#x zaRk2j$%l7DM^9fodFeL@Dv|$4uNtOz866{93O=oUg|~LKJ#!gqZYT{YhF1wp?>hw= z@CQMuoLQJmiZk*DU7g6%(iKW;4iUK9v;o(?soM#il*R#0%GkHX|7(-6uhYm__@cKq z;VG?_F?B?K8L@Ikbdv}~Qu=CMmDf#e%-mUL!_>z0O&UO1IT8@TpZ-myI^dhZ&bIak zv(`6vHqkemUlYl3I?-m!XEEK|XV+!-M&AgaRL{Mcw|JYA;(QlGu@u|M%WZox;Ag6d zFOPo9Tm=RgW%=JmM&vV00utsc`JUwD912ebGBGMbWUsx=Z%K6sH_5PQh4tqwJ6xC9 zxpy}*f&j5kr3DM-CCSUlwfmOzCeDu7XkeW*-9Ad)m$8tXW%s`uHzv|h96N3{e0A@* zr_=o#$AkU{a}0XK)U3h&&3W4zX{l{uMOx_)IDT++W@6m9Bxf>u)cw?-zlzP+JDI=J z8s6O(JFZ6^ki5{_*T^~j-O1}RGHJTHl)Ry}aIi5PoyfmD|DbB?nyfjK-7{5`?1dzn z&H1e)H6vocpq^DaM~b2G(REqm*nKU1h0X0Hs2Im0s_gFBi#yMA!?p-V3$PprH5naJNm?E6>bXf8Ao(Bx#4 zQg)4&UuETg6s>M-qL)IVw4nQj47a(q_-r*pQ!{%6cntm*PRl04#&Zc79?|{HYfmgq z!@--V*y$qTvSCXfv1uRkU=Nvgmw|&wIOVvXw&MA2@Gu_OhJut4*+I6=t5`IVt+f@| z?S~B9NNC;^*}|6gZai|Rk!g!R)%p-Eu3u3z1dZ1hP?tbiF14P*o)o@1CB~jnKdlrU zr~$KRppfMK!<7t=`YXp7nq6!KkTcJ%pe^Km(pL+3gUWXK0u=>;#sZAAS9nW{P0&+v z(k+30G_nC=Ic$@kex*wYF}v8ajomu@%ze+BzDVe#m$0VTh7M-hY)1VG=2$`n5GehQ zs>L?0zOekCo0rKil2XW+Hjf2-+N1qz6y@DQ&I*hK@od084yptIAK&KC{Y|xgsP8_M z!2VGjbVR*~hU-k}A~Jzx4U=RKu7qB7t$e<2qv-)kA#vsci;rta;6X${^jWLvDd(xV z;XsAEZTiD@i>`zh!1LX|G$l;Z@o7%c^5xPA>9$(W?cu7s8NVe&++Bt_0io4>;6%yEZr|qi~dhJ zqx{=v_tsSzf^sVzVA(@iT;+0lbM@UqGY?B6T^qX>l)CfwaT4M|;#K?sImP14hk4=` zKwvHaWWxqv5lipz{LvAZ`|Q#ke>%F4zZEcE?*?ZUUbyF_I7P30G+5*JY8%~nR6+Ji zVsp(>#kGCT8fCd z!VCAA-|PIRon88CF1Njp2me$x^7e}dYR+FTBAZm5{1S&s)9+b$ZlhV*)FEWq&K!cC z0XCC}daylj*J{-Lz#8>zn3z+n9$giX3v4Fhhwx3Iw>uBRM%3;nJiIrzautZNVc!ze zG!42nRpM5h-%b8O@cAC&`E9l&Ec~@s|8%nQzi5>css7OB2DgopT+`N%BV1kVHgk~@ z747vE5sBnmvIo8Odh}zdtB3BTrPTsKB+Xb!d0EPs`gQ)x1IK-hT6qD&9oij8$FE^y zdmi9LmBnXNLfCIiKpbVQ6s50`eJ~Uq>PfUlP)Nn?h}@##MZM@wLm9v{;w3ZmT#t|Z zRQ@>^FSZ>J_Tm{c0f~UBaS4%p)|D+v>%EwBLjCi`f4!M+|2AItT$(IN8tDesCUqMb z>?lsc*K@6V+tfK|D(AJbah%-44_aEuM5xX_xw+;S(Tjx4JLkqpq&YD5GK~S72d!-r z3Ka{quQIn@Px4?T-}Hv+-?e`O;J_wLJ_co0!>Zs*en6vZJI=;ozv`MEw51IT?Y?YH`7>xBKtJmpY z?eiT-^*~}&&pYlWzsOiml)5L=i;0uLc(6zShG|yi9rh_~bquj@8iFRs(VZ_44%<4` ztJ{p0)Bc?$@ab$lAMyWNn`(-4W;!&?H7^w9gi~re;iBoH=8bpx*(-)YVW;86$LPi@ z%^2M)nqNP8at~M%0mb8V5{Jg?6DyMOEjt=RH6b1PYevaCn(GS}U_1|3{s@2p?Meh8%jk3sRRX)cpV5PV(l0xNH3epBOR$ zkBM#je#SdPI}AI5Qpeb% z4Cz=n>w%ig{_yLi6rFRy?XUW6w-uAE3YwCnng@9*DujHVI9YEDcINit@2$BtRt&^? zkTp%}2~n@BRBS^$>3I}v+e#!^VhO^K%3bJ(wXV((UhXo~#KbB`AyGZdd-mW_4@mBUn4H70Z>6=e9Q^dm-mF@mk{v}H&U!+4mk>jF!2YGX zSWks`G4g;WQuZR><@%U=M)PND;!#hG*|ggu$O6FzuaKd&btMyl7|gJ0B`F+IU4%$1O2{$=q|B65X9?5v#Pi@zDn0uFFuba0O? zc+jG;rC4i^h8N|MYq{TIzHL4|nuwIigWy-{p5!r7wli3P>&eD^_PLSU*XKkhoIEWy zs)6gD=ZgxvyLjbPv0HtGg%+*0%;F}&)2DA^_XJ9sRN}A#n2f5>hg2a&vD_ zQSiKXp022Ud)AOpGEJfvxJ4A(IlL8>o;vHwoxYegqjL~Afdq&W?r#BlUOy34>+kCQ zSy_C^dvnjWtM4%3;dzoCdBVlz^4y4_j^Y;thh|>G@>y8RPY)7Oi8V#gZR)ldBd9pO z53;0=pxy^EL4G-X8gh|{U`RDsY=#YYF%ozD(Jgn*X&V2TGzY zh5HE8ywB%oFA!jt!FgjdOAv#ZQ58u#ZmK+VurJtVE^<`y{qCTTs{4Xn$MuYahg|)74`r`yXCtJY|vHAO&+z*MZm;@2C>f|%mrt3N28IsM*-U%4lR$L$e zqz-zlJx-gZ&T^P;7Fg?B?o5&NE(`6#U&dKh7WIbKtta%)ANRiSSp9usom5y5PG5*; z*Y@WK?mYe(@bsC##yo1(4qQ-uC><6*nTVRGY{Nv>8t#>}PNn&$lU<#s)HaXBA4CLv zjoq6nqt@t3hD)qoB+j8-^(*S!cD3KmjTQ|=Y)AzC+gu~{$YbUlWyoU|HXbfYxT@lB znEty<&i~p>*DBRdko_SH0r7IW%#5&pnp;2qjev05A)(k1{-XBDQ_P^)`m2~dH z**24)&JU%xCSM80Hp~!y4a&TfED|vp0%{EDMT63pTx%{D&Mr}}dYWfO`y{d! z;tv%a9Rxryv5+C-*cb7($Jtn)?_hD(3smA7A8N9ct-Qu3wGafz3&GpJF}}ba-4kh9 zE_Er`WMDajEl-~p=LIj#!kWi0IfD1z!Ej!=A^k)k$fV#&Tup2XR@2~q8#F0a%P6KM zF5TModA_N`Y4N^`Swp(5lhm^v@$}4^zt^)i;ppXQoXFtsx%UwF(_X6p9?y;`yZ^Tm z)s~P?BDCRQYe)$b*_Q%~h(Q*A2rt3F@%cNiaZSs8Jlp#ZUCPA-DD)cQMH2+(^i`h> z`2N)Z5Tz|YQMv9Di7gpAT&$h}dO;Pl*lN5V?uG0mgIbM?C##&xS2b~^z-%m`yd&w5 zT`n#ed}{bA^9_FvZGhp$E7)3uqXp&&d~15od-gx@?d3n7hiRyoHJ-@Ys-dPFOC*neQ1rF)gP_Xk${OkEESeOdq3GU?UcW0JKy zG<4g(3&?+4f`32t?eP=B@^ovq6?(BJ&gL-TK$n^wF6o}l=kU;pZu{ZtWQeI=moSDW zxP|`!J{>UtObHJ@R%+z_x;Cc!X>9#LD*dlf89DcHOEVCe1(^0RC0&ga?Kngr&BYd@a0_2ru1@oVs}1 zK6rex`{(_JUZ{G+m5#s|qIEYYK*RPk?9wr;T?>abB#*bUY5JP68)P;$X!`o?ysPBO z&b1fkk4SSM_unkO^Dnz6r^{dbrem?1{d9hq3&^Fae9IsOKce{ImGp;Z41ODauu4%aZhA0#ukozIL4A)c0hAS^~7NgN~b_Ma&0HHKzFRq zslgoD9&{F^@%}>RgJGV8sFaHPMR;~aljWO=2rCx!WI~K@uh?wG)kr>Hxp=6LY?m*M zV0hj?vNt;hVHfC}9l{ovYo_{YdP3Nft}AD+OmLYtZr)@g#^YctyWt4qxT_LsZ2_Lq9% z;`jPX+eYNf6z;X5o9C+aZ;eWQx;mkRc>4_GkVurtz6eTkLA|* zH=fx1*Bk_c0z^;fUDZR*u8re|%)b(6Y*(`X&=V5jWLsu$F=z^gBD>hD8d&{ZL$R69_H`UI?>PQ%UP9p>MxF?B8xy1Ocl)Zi0l3Ql>Qn@gCj z!+}f5J0(f+Bg-l5EM-ELYEB1ljacT$)URkEg)-!+BT9GNoJl&*59#sk9%#mROO$+^w6QS&?xAYMY+>Q9G2?oiL@%kv-mI3(tC80Hx>qlElzXQONhlYpV*8GhwE z1>EuAM$h}PrO(}cvhqxoS%Ud7b%x=sVNCIDZ6Lv52IUd4lG~d7)G?8o*d#^>$*va{_}lR zJ&qZs;~>EIHqCw(zf?ff-?+JFG=B@ifUGhNivrvFKXa~(e=Lelm2!Cb`pCrA6fM_| zU_rBuii}((Tkmg;;#qJ%hd*&~n}$VP=Z0;PoYinY^)$1v+Sfi0>HJuZDwr-*9jsPO zzG5=})RVLWoCYsn=r~3F$S8(@4%O-EEO%cvSyoj{ zhN3|OYpbGx0ptP-KOQ$-rt3eIZm>uZhxM%I*xsKx6MP^=2@3K3>Wz^)%;~ZJ(dJW_ zS;4mbpr?@;FoFN+GMrS8{9|Ha4tcH!GMA>BXsI~;z#_+sL? zD0FC`X_ykD0?-M)7RwcG90Xe;Eaxge0prYnWk7*OG6QILtGowBM2d_+rY36ixo7>WxMrx#UF%h$;Lh?u$Tbmj5Dm%w+Jse%8HJ!8 z@hBpUo^=E&tXb!k@Tuw-7>yunlWt3Hyjd^gv10HK#or`q;Iw_tMDO&xatieH210BP zjp>TGve`)HVIBfgWq}68g-R0Hs;AR8o0p$x0daWrj`1t;L={En9MkF1qx<~28 zPz+aHdYDc0Dpm-B4+Nimej}fb-Tyc8wNdZy_aB6pj)lf=i1OXbT4{f-+dQlf&^JkZ zLdSC5EL_&w|D$}JbX{I{&N3^g?(K>veoftdWOSPmZ3Ze4HD()v8R%Rnr=++^_AnJJ zv7cSl-+9SA2g6#_z%F66+V8hsn18hHHoi3V19^=5Xo80 z6h3Ybde=QhCi>H#`N`mCW4uv0$f2g(OQVR`$?r&tDz3P24|!__cfH=H@om(N`d_So zbra8h&~`aM7Aa_?ixD{EuvE+oZj2P(!cZomHr1;xK+^*KRr*%#pPGk7~^B9QzMfc9`pzEvq zZ8gP>btw~kzj}RqSVJmPNRkQOqYy43G2<1sE2lIogZxZ3bnR!0m`0aq3foi0vyel^ z4aP4?eDFV&kW_H6lnp3q@{kZ2L}vL{nKtvZa3k*9upGomZEyhX&a2@<(&^$x!(jZJ z)ll!_BF#HWATOXmt?ltG&nebh}HG`yT$CuA(cIho%UxGj}-3^ORk3nXag}7~C{bLLG#L{`rTw7o4@jjGoAv z81p!b5S>bbwnI&3%{E)Cs7R<^ND(Z`$X!Rmip!~QRC-%rM+7b{vutNK#Zv}jdT!At z6Vchfb5nQnpXY9BF-Ivl31P!Etc%JW%Lv@VwSOAL0B-a5p#Cj{+^~Odp;K6M^p7DC zLtR-MH}RRi*hT@Lv!^+n_~OBS4S%f$;!l5^EEvdO?H@A-`pt3M`m51J0Sl`C(B}oa z#nrr>bA3x))n(f4T=1ra^44HE1EBLWeu~$h*Az70>1)9j4e#fM=vWp#g6PnEHTMnT z5b#gY3_Bc^9g`hDikpd8;doqKdchdCdj%hL{jnZ$JDbwR(Bj&wdV^fkjU-P^@vkP>00ruuIK$?22RYz=4QoYq1+IxOF zdfk)z_WbT9d(tt^HB|3=e0uGn&(mFZ4viE|I;~KeR?P{+?*3~z71_i-L?EOX?9DUh z8~?^Y{D%J(mW|)(d?4it-b<5HaY)=fo!}OYH|!3{=GR)Sy`3-#W7)g0j#zA>)gzS` z@bECR&Z&*rjWew#hw^7Vt%ZfAU1An)YK+{k9WQdf9!quLT+}J;0kbj0NCzENAFHEl zpDa{T6=asTmUxCoO*ds)FGlHEH9wRkBZsiL^%_}aDUjkO$KsZx6OIDDmr)5BHveHa z(>q|)%DV&n@paTNiZe`9F@XNWYblD^Rq&LSu7x;f+h)7~RRY%j{q`Oj1cw8O7Ke*t}YwDD_3 z7M96V7gYv7=V@YQSHD}N`kgg&?{AqmNSr~C%G<=0`yo=Nwj`u%RZ#z*Ei{7Y^}x1{ z%gHm2>qj>MClS;%@8&*6b|03j|3hm;65OHxch~02*Eq<~O-3HST>cxaeX4N3=q7h! zVVEBG+g+MpC2;EDq{AGp4kOjE)pVV1WWWiL9GDK|P_I&(Fv_>vzoh_>0t4%R?EKYM z_Ydv6B=JGA+;|DRCZ2i)?hwb4Rk3Uyc*@XhC59ggHsDlniqC(&Fx9nIJl^nl$iHM; zB6JjE^u$dzu50_XalpdNsota0nbw}TYvb!;;DB`h(SAK~%#AIYGbl2aq(NEOc&~;o zr>?Pm6CQct!SwoLdjoR|&urVEJ+wimI9W!s#s1s$5>{1b#1h{2gN;+el__%lW`HNPtW3IWyUQL_M?J=pAgT*axv7nxt39oI{1E_K#( zMD!;eqAI~t3uIEKv3ym4dQm^I;`Il1-)xWhVZ!mAjCtkPi7uwWWWJES{y3{uZ7|K? z783LQbZL(5ltJN2#+hQ`isVXVQryg_Yzz=lx)NODk=|$NwNT15I3@x4Ehu}1Jm)m}MQ6hAFJc{T80zx5oTO+mz!(ODR(Y_N=pII=JK+WLrOF%6 z&n1#;mmE9MerN0RxT1}NG&yG#l@p$-~+X1r2 ztpP1l0$)ocf822bAAU2XDwrd8!s&V1E#9_isg!1_3pR#^spvgk8^0~|VL-D9tbMCf zoPO_^Lv(vYOw^O0sN%l|O*))@3^1xkJyWMEG-IF|tP7YI)51%%_0FF)oz9+NDjh=4 ztN4HaY+AfLFGNt1Q=NQjo}~O?a-huCaxOc54EodnJqO6ZvsQ7OUS&D<8SYgP@K6jX zVd>%F#WKTVFSX-d)h-S{13?+K{QTDG{mE7#HdE#Xl6YA&$heHkWPJKnO@CEjJ&l}Y zu)bsQzGq90eAqNRIlOJ42!Vo@(Z&#KWe7f?x)!FUfwWXBm$O%SBV|45){rhYi!1QI zgqTTjT-;Y4m0qYJ?H-9)_zDq4z~?{Rij48>v{oN!KH*;o(7h^d=k*>t`IL10#Fp$; zi0-1+yY0^xV`}C^dkCwyK74Gpt4zrmVF(}i{bj$vNq=bZwZ;|ZTSfP04me87y zoyAl)zG>is_enDvbu*7X2(vpHJ2#w-(NpU(3yt2@RUeA+x?dQERPR{AbUCKx1rau6 z-KP5;&F34Ut%p}J)o0n``<~G~Te(1V)tNAR=guqW_-*bT;oH>LIa`|N>xvfae%7Dn>OQfACK|J+W(e`kHSe z?`3N!!jl-hZ|aGveNLX&&ejoUfy)EQ8d|Xj=tXv@$MWuX5Gb^A|G8TsH@`CT@%p^Q->3QCwOejaDc?YC+s>x1(ybwmrK9UJpVOo_E&DzG z*fH7k>B9r%-gGr_SPKwcbVn?9Ywc{gGh|~W^~dhsx~E27pr762qk<5|&9)89A4i*U zTP6?f!pW;7;Q|~NGypUIx&GM5J5IMh*-jFugEjENGBHkK`;vD1)TvxwI zCTk*8#(c&EIOmQCWBfmL8N#%ul>4-oersW6^S?wYN~42;eQN{Cd^R|e9H!gxR=xt6 zYsRdqZ9;B{{h?%z?^M>pS#33Vhy^?&x zB;wIHbK|kQZ~c_5`?%gInk2C`C;fWAF|~9o?Gv6ZVghKNs^b$M8o~WUZy$5p4ct$j z-2n6I*q@T>Y0S54dKA~ah&LPsHxPPHv+8YYNMIiWXMCtfpl&a$QT4%oSlSbyA+WT3 zJy{7Ab=p$8b$ym1gq1siYprJj?jV_$nZ(weTD4XOSBrE0K1N^uEl>Pz{ryF=%~sc# z(w!`dY-pO}2#u*KniS3`aJ2hPs| zAw`G3{cFP&;yQi~02T9G6eiwnyk6atP0+x9^&mBEBno<&w~c*GxO&3W>(OK$FYMGL z>(ZJpd?r>hZ>~0f8tG$Z9=saoxFSU*dx`I#IGd3^g+pK4vJKg~*y--MhhUjM~k&* zOE~}V4zVbkZSQvBkx7p!!X#~T(7peG9iP!8vieB#xT5^O>%Z`4Ipdvb*0(w zCDC5D^pGurhtpMHN7-7_HCc&er2RAphON@-?}&w*Pz zGh_gqO*`@rv&d_s2XO6=52asOi|{G|{tE=h5U6?rwQlwtp-&@bdb6Un28^1arI1M1 zZ&8+5ne4lHb^nf7=)8;M3c5a?dRD_^k8xr$KX$a(u=J(q%dKTzmQ|;9*zZ*wmn7f& zVE*HXv{CQX&o8tC;u<}k|A4_KGHP50oLo4jGiG9)V`6IG`sN5cIHP962DqSST$V+a zjFx3Ah4xa9@8&dAD(La5a>_XMbFZ^T?-S^I43DxYv~3dBU0U*VkCfI1->pgc(T^Co z^fwO|w%tGZ5@308j~??6Q({9(ZoncMWmu_dRHIh`^BxsW+Fi#j`%2fGUf!FxIk7Fw zxYNbB>}@l-L~?X@S>*L62e~gu1^j7U?8#T(fK;gkCA(rs+r1s7N9H5NObi}OCu_UE zBRc#FSM-R|PNeH%R}xO~OtQJR3sy=Bmg&J5P-e|M5HF?8vM%j$!tcs@(orKVzHqJK zlup!PiNj%J^;+BF>j1yntEpLG>g$aA;yYF82H`W=W#(CAWSYOiL_Ye4`9xh3@HVJ; zP1a!0?ypKDJ)J6m^^p@4jICnM3zmp)GmJZ;2%aECoFc_@2ve-(LN>5}yQ@d!3 z>1-3yp3wXih<9e;<@^i7oZtIekWZF@mYSv4fbAPhrnjj=p+~Ojb0?hXNqL!PiVUZe zL2TSBwOU?4?_N10gDwRHJ>5rt*q>VXqKY>0lW_@TI zw}B<&f>a-S(STCwt>nla%a?x|qHS)y3#ArLj!H4{IWbw~J*~0$##fQ3rkug3p7vYT zfiC(N|JK&A&GR=6G$XJ#HqLrL#uNPUF*&(iA>rLs2?NM<9vHgJ{k=z(rU;0wKBST=ox=6B z?4hlpD}#Mf^>VS4TngfCew{zLeHdgSzKuS`!8Mm$*L7H|tVzr4OyXPfO$Uo&1Z^wf zL3m259QsP<^yzQ=`y9H2PEZ3^$SP=&^MQyQ&){V4pEJ-Y9U4^hlw3xbY8dhkbKa_E zkY{}$c|{?Z195GACDE~w>&P)yG~x5gn>S?yar&b_dEDRlm~~mld=9j~^YsrdmA;|b zJ%s1Rb^cMx<;$kPI%vyll}OQUtSMZLglweoi=JdFEFacXMYmaZhL9B)Pq4$yLeoyL zB@-UTGVNne^KFE`Rgtv2^HbwhVqrb#^~|@wOL&j2D}1#na7pH$_4YyZt#BQ!3mqzZ zq#RPSp`2DMP`C8pH#F&-lhjFmozti zkJtXckY9FaW%t@}LV4#@(Gb{mAg$rLF^z=A+;4Ly= zTcLqoTSJgN?=+F^cSK{$@^Mc>!l=3<1%)I_{p$1${kEssVin<)i%Fd4+w~9L#p)L%swS|n099#usZ{UgHuFLCkdkp~!42gCzHdpBeJ=6KCw`I` zULvDKCxJ}vL_lPRu;t=JALPp3XDMr%H?=C4?A?OSg!A@=*OBzXi#~J%ajI_Aq2N!~ z@xIr16L3p5HTGdHBg&9pd2B$$em#_mBCu-%Nl_wTt7jLGJfKbOlxx z03cW1Q$L}!K#krMHBR!%c*V^4i#xy{Ji(~vw#uUw=dW^yYYjf+To`0Wmu3X_bq%Zen&pC2Xbrt>u%d7+@|IZ{lU{>N z8hofGlqr=EMIp*2S{Udmfz5UQ>g_PPcZ1?GWsa7vk;CX5i$j059M)+(P9>I7$N9l* zh2(-GOU{Z9?>l#%m3z2=FE+0Z{)F34dV+C%mC(Vhtu45jTlFU<*r5kVKRjA|BwH-S z{gjH|YIikH$K%Q~Y#}0SWwL=4x!7kSnKmzTgmCWCD~1Oj#92i`UyT=pOHrwYQr^0w zqgcW91D7+C@y0`Ka=KcY(kvLThsKROP{}F{rYFk1q=Ww7ufp|_1r!T5W`12^aPIN? zB8nKfhw}XuD~>D78B#@31sl(5g7;;ljrBOY0(A6UGF6Q8O}GUU9K`Ak^th^4B*K`{ zwP|a!Ef=UEuqg}bUN2^`Xq6ZWEoT>TgFN(2GVMRrc8h6~EeEHc_I7#nMkbj(L0g6x zTVkJ793AhM)&AJAT|YkXF4JZ(3!z=n}xo1F!J|3 zk+$Up%c7cwH&}MO*>lpw*m8fTZ)XKhn47L&S<4H&OcQ--{e0rNqly4%TvGbyhpkYO z0YalG7*%`T$8iYZNdxa6U9$}kKs9we@Gg_&cauZZP@#pI`XBO2R=o5MH)3%JB)WA= z3i*>@w3c(9`tG$apL!>MJXp}Zgs?*RU4Adqy?=yUw_G&a5nkAp?uYczh&$fnYq2?_ zvjixX5gMDxT~{mQ}u#5b;=%Xe#k`!OZLDnT+NbKwSP?=nb2 z!h20KFFf3uY{-T@Utm<5&n;&>8)Bl#>cj`T(?GCDlJa7CLJ5Vg4cOJG_P&%foz!4t zz_@-zG~BR2E3V||)w(18$Be_lTof^ok|w|LdG5?%nOhhwzFqbq7+i{(qniRx_Vfbc zENki)f|xdEdEh9cp(&jT+OL5yB!!qwDoJONvu3_WX0E&F%Z}x{7w0tIn}PvXtDQf8 zu1kKLOAz)t&E$3m3f!7#xrdEyD^j;NEVKN%aF8d~BSS?bcp`2C!17FPua z)E(-V;_SuBs~$PUHhLbLpk=Tldc0rlf1#)H=iJTGr;(aaG%fi>tnXPAvFPst1FTQM znqG!qM0bT5c8*#){sXWR zecO25;n$v}SYgeF+4Y$ZB^gOLc_Y^_lR~6UJkX<@{7>9>ci^4He_2x6f6G(SSl?Ar z{mFxoCfT<2fdE>JHCgE-)UY!GhjO`?Jdo0byG$cu$k_5lCpL~vEl%+M-k1KQ`+D%p zi;W&RKySe<{K}~wh*U96^M=%x9)2&&r6?1D+FWrragn08ZoTcUUQ=SX2+vxo+#Tlv zBr5wLpur$`GnP&E?Z4fiwdy*1~^A4E2C=##%2MmFAhF8X`jBaiCDMQ(=)=|Dgp?g-<+hpFk4-`|OgS6MD(99e1 zMqiwLnbj>)i$;^GB2Ol!rj}meTn|IX=MPCcv##R!6rObXl0Rm<)#DiJga;_=v6<*} zYQ4eTHh^bvS*{MGdCDls<&YNTVSOHaff@Ha;-mQ`EU*>SC%~MZA6#HwuELn^Bmkuq z_&Lu7vUXHG+^VKU1|>VKR%EQJ#s!>V;cgW?jD^8dz2?uP)55`sN>=QAnt4k(72{?l z`ZVK5sxM-0dd?;DHIHl$s_0>SAJ<-mz`;W^y-oF6>F$Mnbe`*myd(fX>N$9|SFk71 zYfSG-?tT7?jTl_}`->CZG#S_{3Slq&fXW%v3~Y;D_lN}Igz(a_Z&b+YE^ z3|jd}5e-C0MnNQc*f>vs@JmnQ46kurZN#VmwMzECE(4Fz`-Qz+ewqye*hILyk)DkT zs1i$f(0)_!npa0^QOn&^KsqSFj+k-I=JSAabtG~Ui>%vez2&k6aNc)hmlu6u0r@#2 zrVwRCJaxoCFh6S@bUbFmg$O-(F~m*SxsSo4Wg{ZH#JB5EQaA=`#%*-_`$t;6!@M-! zdG~lDWXtC6dfXLl+Sxb6Sq^YQact?%{)8{Im(UmIA~r9p`1qiW`J3juH7RvlO$5j~ z2lUV6fqo*ng6h;~nVW9=&^<%izb9POt_;G79+j>Ta?Dr-n;~5?9Sm6Lis92_O*=CD zm_OxYhX`=%95nXnvQ&-#+2p$D z&Wyz%$X?Y}#T8h^SY~n5)obz@#LoDwJ@_Y&{%J+>WZvk6XWPW?tS_##-ABs2<}N1=otNzE zgkom>Ksutu|yN9P023;M5MvQ zWh!yXB?gyO%WFmPDk!kFiL)C zS^!vw45TL5F=3tFt6ZOWZeZLZ;7SZD&-b70IV-Ow@fJw?g$5VwiiCl4PX)uTK`I}) z<=Rw88(&-LKe5-%0^-^nc7J)mKjR$Il~ONhW|dsV0jE(Q{sLb$xE^q?u!**Q$7Ox; zM#axY8PNGC+N)irxJVkS#V|^Jl{*q4zov$Zdbwsor}Pe_Cu{g>d~n%Y^<@ zfkIcLPg#|ntw%}BUL3hDUIp*q#4F*Y$INI=sjN920n8_^%9cz)pArZ-+WvqKKK74g zGj}Lb3({rUBczwu-}k&u?}!tAzcH}}PXDdI6SH*_1DZ10Gy+A}>}1?qBW^yJW{hOQ z)aFjvZ5*CRKJ#(Ur*vtqhYv05ni6L1oz&EPzNGUc0;-y9YCn&#cOrduoQKY`ka69n z7ep)=E(1@PmFKe+D@)=l`^R6v5BP@dp`R0eW!9iDfnwHp_ilci9hD556jeXqGut$m&jz#C;w@|ujM3Kp7o?L z!+C*TF0C-fkx1LZJx0z@cbA)!BT8|$jNZ&SgW_4cW>OE-WGbmNeIA?H)tsWfrVRWh zZ1`{&<}@2ESlm~dXydZ1fLI_Rq)jsX4Dw`+D+sY|mn|RD{FR6o)Bmdh+Ln~^;_=0#n7U*vI7J~Gqk*K^$u z*#2>QRUb9(M1o{lzcqAKj|GZfP zycVZbQDoZkax{cy))DOPEH35%MDa(8nA^`YR+Cz4UhX~gF#Y;yf3Ls^X3%Cnc-ns} z>0n)A`SsI`tD!;vhwRrPih!GQASMSbZSox-CEs3ufw9g>s*!v24&(_2=$9zsnXOQ{ z5AH;#aFhjiP?tyw1dpvocTpwLW{3f<APD>Eoj1M*X&G5rwzPU>cA!zT#Qe?s z-ydXpf%ftanmS7sfKrK83~7j&*zWQv>r-KymR46=6Oqlrc8wg$?hK}rXOcL zQ8VIrx4pYU%_*04VZiZP4BJ(WKu3XRIQYh>Me2`YNuLUNg3HRi3e%vW=}??$hm%cWN*aWTeJ2?iwj$DTl-=haWAnP|F#1YO2=sQ}h`Zv)AMS-< zMESSucV&vk)PdE1t-~_4MTenxtD0AAMmwt zsFCViIj`%l9ApxYQCLrW;-j-~&tU%udz~yvQj&C*aQ^dut|U?-a(@FPQM*JD66rn8#bL4%zNOk&4U$sGPK&{JW5J1~Qai zd%MXgBMWo8Abg5}YwW&LF9&N>ip*DXtCy;BWqXEeG)G)kWp&d$P|qiZg0c51RyLQ? zFqj81v05&@b~RIDJC&(7WW74=0Hj z&}YsvR$td!Gkv#BC90%%c3y;R-60JQM(llE2Y}zkwy$;ozB|)&;z_Ro=4bQoF6XC` zE=QkxZqY6!J*w_M5vK`|?P){*4xP$(PQT&cqeaImBfg-Hm4z`=b9ymJYga%?JCOs& zeQdiPMHbaZ)M8E>a7xO#6_L}mdcQQIa0!l_jV>r>vRTU`*La_hvdZX{hf5Pk?De0& z^ylT%O7Th_bu&|^zjj!N$&=DY-3Dn?U^2O=lMh}E-L#x%>&9*29kW!F-lUyWZc}nL zK59>E=23l*p;NgH(disVoqXmi4@6}(uXvp(7a%uwuL_yV=3eSC_A>m~r&GjB^9MD4 zcdT)t!gF5?->SKk$tCb}rmybVfI%P<&xh;W>hwg)*GNn;92*`kUTh9>V3*sVulED8 zl5^a0JFNHam^QO+$N?3}-nBy_~} zDA~Dj{y=jFdp*s514skHs^`19>1hF#{fxTtl{zt}wN~jSF+QR_Et`iSY9Kj@I`z}& zXGE@A){eN9`yoI1)B#~P6!hRWs2twVk{oG>I56E>Ec6QR$`FxW($%!%YX}eb;XYt{ z=;{CSxnl9dwt(x2vv=&(Jb%z1eTx;TO4HLB8x*()#aZI+c7mRzNk6E5SHep-hklDY zW?*S=&?W)#%kYU3`A(hxe3^)-*NTxIqsdOOxC6r$Kr8gx7nYL8ROXN*u_*H=a^$oN zt{Ar(fpv=~PYbMLSrT(n!7Pdkv!AgJh&>Nu5B=CaDB<86mDlrSM$WDj^rxBmpP){y zJB;*Kx$F~HOPQWK`l+5n77?Z}+C6p34zY9`XQY%l~mOrB`d zq#$=mX}bG^fMT#^*K`A=97M=LZulPc_HY@;FOb&v)`0Lw*9dQ zY!TG$kc^e>YWQUG|kpk`mv_- zLq%P=SqHun zVYagB3-BZDq>k}q7Skoo0KjlT+hX3}mJhS5hA&xXmYl1rdLp7YKIQ$@GhR!lPE`|W zY-^L>)t2}|ZI;pxP3|WSx1QT39p^kDGMhZT38fj>frTh*q@E{d`3+(vF=)uR`+7zaMV!)VxYF{FeB*h zj2{@Jyg=upCOnlVxOS0j``rbfRlWQ$P$v@a&~vV2IaKv4wSL_SuiWkb8=roDoe(JK z!VbmtC*SNp)AeNLaos&`m2C|!n{1E3<&3PHzAI>ds-zpu=V39_dF~N&QTHh_wLq`l zCW;^fv*cT>HRike*jx!dY}2Sm_LVv2!p6F?!0X(X5Tz4!&YGXwobz8^B9H@{eIKxe zwd@y|t@nS{hq*BOb_PAtN;@0jN~%}p=49b*>@-bHPtARLWU84{VqaHte*#-7QL*+Y zYTe)dR>hJ`${%BC`5YB8#GcM$9^%bmn&hQKKG1y{%%daw;gG#|S#bMxji_ z@T0@EP(nG9RRHNx(L`}w+J%Cd}+~0eW zi@put`b4@>V41yA0gP#?WCcHs=Dp)Q<7oH6LkEU1clq^2PxjGsYFg~*#Vd_lC7khF>|YfNtUNMgzAMEBCd+m0e;ubnna4ep52USwVDv>`u2b807}c=-y7?zk>mUh=o=|1iGy zkUmLzOB$>rR$h)eH;dHqyc7f8ii-Nq+UIR~#VkrVuk_~A(u zd~KMD_<3ja?`*k(;z!RkT^?%4DD~kR;Llj&ks+x&ZjkF>&yjlvIm45t(0CDFw1Sl*m9iu$^r2o<>xuOtu_ zZuI#-(XPVn)i^&TEu;7tJwRKK{=WIkAmAnKC-GCLT@lwY4I%lij{209v^d;x^_SSH3lg zZcQM$RFY?Ehs^eYh=9MgGG3lge*&pdWUSz?G=e2H%qxMGj~`R z?r5R$r!aR+dd0f^P{0GzN$;T1Jq9J4`=&d_M>_N7>tX?=9BQ5$xCVEg*dkNCibz69 z`ky29bsNpI>$GnFOXYF(d)ZX!Hhb?YytX)pi(OUeFMaMG&R~hoQ?I z*f1ZvBVI6ZEmq?aVuz9D{(1c}Q7kcf;9~>bl^DIN3QE}ky-$U~m?3!d+(m}TJ_%Q! zdTD0XL$w&>xtUvg-44j=x1<6Ya};kbI#KSgRdR|T*_0i}Zvk_xsLtf~ zTrXdR)Uh5`tHU$)LPf*k>5RUMo&u|?STQnST;;`)XrTYP@CP)--f(AueW)U79+f66Qfk-hmp|3l%p_suN1RS+&l!`7Eh67`~fK*_NSlIy;YGAtjS4_FS<@VS!STiPD}i z-TKOjg0X)R9l(qg09fd8jT1g8I}EQ%CL`-8`!-RQp|V+IAsTwlts!~*n5@*Q^8$lK z#&<-~V{#~l0Kqs*1n`bPi(`mtGa& zYeJaLq* zgKOh90~WLNc4seT9b%T(~Ryls|$T`9+7iK^S$V|etX=MzOCNyoCf zFrF7?esszz9(>Yv=VnSN@P5T}!4gtZ_+vX9TL2a5s7_3TlP72lTtc`Ri|fDljSK)y5Nv(Mm9*-e_5UhwA<+eHJ=}b>G;DXlwOgYCr@(^SPVj zYZ_zGJLo$oH!0H&F=2}lze64=%!8TT_u;JH_m;y&*4VvA|vL#2E`SA z?T^}wNF}`i(c)W%SxlMTjGHeZGH9G05)V6o~`iJn185N zsXx6+nIQ)7>>EJXm<9h_DK*o{9$sv?Zr%-}+$IBsyteied2&9P!^_YexD%`FRQZx(3>0)D7t-!ip9$@u@AI>oeOE z7L$E_CfIaX;MuHUtMoV(&Nt;cEy@47Zk(hWK{gx13+h{%R#5r|WA0>|$=SAH{#6e` z+ps6SD386eQn)!}Tb@<1p(`l7;MCz{)q$c5-~3`@7gJT2$#2hb}qAg5aM zKLxhKaW)^VS&R)iy7Av|dm->MM5NpI2K2%unudK=1BDGr3-W+ISmk8cF2M;JV5||u zLDcv)6KZGXz42-8+NZEwMMRnF2dq#C#zmMt=Y+oB@qPgd3QA8uX5w-iSgxM!rt+?7 zcG;7F94HzP^H8q_BxscqM5i}_k1PQLa2yuiFX!rEq*INVUFA3;{8PQ^f63WmhY5{C zhilIPK}%>I#2EdX4=^k7XGFlzE5GiGSjicEq|Dk4pw7G*-QBv(D635Rt*5jnVzm%1 zMoKh$5$;tP&zTPF=|C~x6|<-YauXKvefo-eRoADB%~~wFu8&BP^azuck#y^Q=S&}u9SAb@1l!0hk2Y-G&tUi?IB9idX0^BiR1%v zUR(K}3t0zC_QYYR{&{Z@XaJHhG?NO$LgB(jiVP7d^Q**A9e8(mK&6`Ng0rzJ_#V)y z2%bqg_h^a|PTq^|Wp6BXTx;{Ml##9(+@- z5GBeWqQ-fpfxw(E(S#`QMwSUb6_=Z$N{rG8^y+C^rAU}VG$oXx^=sulz$Yc)xb9W&ulce_Ypovw@cPvcvFo&VJfMkM9yTAwH9ukv>TkxdzV&<}*Fx@jyA{8P8JPQ$!Xss81Zh0}d0g#T>Z) zUj$wvLTB~C5aZRrw*QZ$&0YPd&x=UfCL%O6@q@=sM8OdQlx=T>HJBRL& zR#GH}?ohgi7~meipI_X&*8L9_i!*4J_^+J!XA}J5zf7p~2b1>eDToI8?4salZ|rwJ zg)b8U`z@fX039;*nYsjSlgLiBK+v?&fnJcE>Xj?T(5>xqG0UIQ7?!_hAz{JWaITJ` zMYaB$*ZI$8HsA2%%Puqa=_-PU6y^>cl;2>%f?>%VqszIlJB6e@doIUn;jg7F8j0=O zA2cE5B7VSB!RZHaV6Rkc09g2Za<(B@K1Vk+1)3DYG@#hAlo1mlEA=cYoSnJEb?rK|dlT*`&Ge-?~=i?aX~YmcQ3Kq3cgV-}#t( zRo#yfcreDF_8p@6zR@mg$hy+BYO1{u1Go~!JJ|vLR||$KI{9P??p}|_j6GNMKRiE_ z-0ke$XT z;Nx7bf%w}YqN6+P9ls=w2W7fJ$jBGkQuJ}UmbGT%GdKK;O616ai+dD!&!V%6b` zY+Xj8`v!SiQ~2~zahS8fPFaN%IDf#ZaX3Ys9y1C>dHhj%o=j5& z%E|KC-RpC0%&q$LN#&4e<)LO=io=*%VUNKD8g*=jPdacQ(*GJnk*4aHX6ZzD&QPw( z4z_Kxtje>$_VM=-{+fwQK%FEJ3B%)u+-5n#tN|*LF11(a>nkM1Y&UtK>rs(HDiqdi zLB|eNRbDbKLe#=agghst>3hb`Ji@Uf0tk4w$BxjF25>Q6f~0&4L4|u>wOEt7rMV&M zH3O5{eri=@CJt%anV>t}4Tu3Qyy^GOwAOX}gLfLuq3&200i*sj(z1H=x_XY3D1OuWi!pSU?8{evgbmQb`+T7f zCN9b@cjd^u{xZ{bPgOZ2jSxK)Z^oZu&R0_9rw`5yQa~2s>{`X6iiu`npLwMD0Ci&d!pR8d;5(ZKkjnE}xIe%J@5|;Nh z31&vm7YTrG<}219E+lvlX<=3?emQQUkJ|$Q)r$KQsacZz=uWsP;iWtYT;&QUAt@h_T;^$#Gfw@CpTAhXMFNC`y zXP@{Inar5enauo8PVa+Ks0nY|=C;#7An7GNz*e1}MlL)X)_06GB2DL$U&?Pxb>wl@ zW7_bmk>^_fiFoP51^uvuSpDNbQ$yhIujZb~J!hCc;-PKvqZ_|&If));-Gek~t>w${ zdhsi-G1gsvhOf*{UJ{0qH`W3tG7m#ck{_DX&cOb;c^Xq6PSe=UIHkVUlGx7Vhs`Ov z_T220nq@L;RLP@Jc3D|}J$tioJaA+ISyt$NG4#3cqj%cf?}WY6Z6fSCQCAMRKFQZD zZaal$GrxA1FLl2X;J9YfbgbL5YIjIzmMtU|Irs?!yV$Qw<@Y5^7V2?`e&~E0Qlhuv zk%nlZ)A#S&`5x@vcIB5L=r2_}xU4|6f|`U^a;bS-=hl53uRhuBG!BkTiBun!ApCRV z5aPK#zKBi<#A6Wa}u10g}1AB##(urt4X=EwG zhZAc#6w`ep}xeN zfa8>n8oe%=+x8i+21Mbwz&l;fs>rw``BtNG&rI=_Wh z&EW66HZ#~m6y&lkr<;X;^pTTkM1Md>ti)E<(*GFN@8Fan8ZnLcOmSu)X_5=+N(LK9 zT#CWFp#&zD3+lZBJZG!Q+juU9&VjCDo-gGTLwB5pEdn@~_YQZ2$ZECWY_}C?*ofh1 z0yk>z=2_24Ey6FyO1x)rivc^%0Oge?dvIaxS4bE|TPSvo(>m-)E1?c+v<>7PcyhEA ze={n~#pr>vb6w6>t_JwXpyC|VinC-eSP+lZatVH29Ns-*wr}yEjLrP%xnrk6P zW3vxw8zg#NAaTik#td@5(+OXb0BBT?sG-P&lY+ybu!}NuUE-!h!2Rs%S_u0^Y>W9t zm+?E5OAPb#P_#pTU$KM14{r{{(YK!Nc~0&R#{Q~Mz%PCiENtkrs!uz-$P%kQ=_K>A zUPdzQ;@F;@`O1Dzi_nZntPd^dm6Z2D5GL>}*pqJ!_VT~lKDKJ1%%x_QEH~KuJ^0@J z$ac0ylK+oL@OCNmSLGfR`t)#Gb6Vsem%}q7)MhBUrI#fY@?eiJDIJOHnT#nzS)bFF zEb&$oWm)4jPDcEpD@0pYMT)|Md^jg{_*yEfc6zt;a;){NmRC-7Oe{Qy{rlm6B~gH@ zcj4GnH-Ouq>h6-)$$)$c9>N^?pf1}o7$2WdJ!|er+P3G$%cDDC;aQ3MyGyCh0{9oG z^ir3!Nacun&!Gb_O=_L8U(?1efUpJvVqPoqE{0$(D{I864U%AVDzf^$R4qQ$MC$s- zxJ~a#RQ>Mn5cc8eLC#;bXe$%Hw^U9*7uPtXYvT{!atu)UB1S9X7Sxp?Ki7&;mGn35 z>&M<)QWQqv$FKE0cat?DYUOFzG-=rIGa<#6FPwZgK$K$8Elnx!y+?XMb<%gU*daZe z2C)5S97_)z(+(2}M}!@NgTK;BSXlMm%pA^9xmc%WRpr_D3GEX{8bioNdFVoL~2EBiSw4)Rf(iP;TNw(NL|M4(^dvdz{ zG?4?6i(O!Rt#;B#R$2|&RI-G4HLz10jZH-O9giH(93lOB_-p#+d{uTIE5byM#>y9B zR*lo!zVDWh%K8ptXJ5YuOO7PC8oJk=cdvaf-Th-;+ftP7aDoKl^3aQXn(GS#sVD0m zgh>nrp@R;90FD0@J{Lb;%5KLodgP2LMZt&({d`@6RPdTN-KWo1+D{0(L1bUY2(+KD zME#Vflzkdbm%ehJ{?u9ElJXL~7bmY9JiUDWRf}}-d?x$ln7#bdAp%7Le2i2 zcxxaS#y1*{@T#R?10puC+nD}+zr;jv^QNJgw&RV$jezu^R=K*b!luEY{a&{in{7(o>V4P}le- znTBLLm7I!%v(0F~$0O}$imWz{437RJ+%rA;jPL;iy5k-BBdxjpr3LCrthE#{*u~QC zgwztn_5FwYHZ}dx9rka`c*MmG!6X917BSHan!ZyXGDIKJ=eB((%^>2W4v^6X`Bood zx=x)j%Q5;zfxy#r|DV;@dslU|>#r3SG$OsXInrwXykK=;9sA>%mV>Kiao;#e+-O2G zd2+tTF2MkD=bC%KljHJ>ell*POoWgewCD^z*-~Dr-uH3WB)!M|Jc~d9LMJ&E81F0`E+NPYHXo&4SSk2^#W7_b9VAjB z(9k(vpf=oC>T3Am?u_)Dd&Uy8OZ!^oSB~zmEh;Uu{`9-ICW7nL!F|V+wb^52mwDf- z2IrYyfyHChSNpnQ)`kRkqz6?|aFC9XI!SDR1ZJ2qvgD(^;1QmezhE z*HFb~)7PVL)vgup%17rDvoNq|65|uCoAV3b4w1pS0p~2($PM>a$zp7?=X0myAMfZi zlpiT_E%$WuUa=1p=Qaioh9(mqItvq)#`0EHhtgU{#TlG7Yg1r3L?K~vgf&QYZGQQ~ z;nqS1Xc0_}_+Sz|7i zRgf%ESkhNHr5WSeleXg})@g}n)^YnjdgoSVTHbL=e4PpIw|;TXaclE^@e47bXV*Ma z_Ekri2`=Etdps^@Z^2Fo%pWu4u#LO)^J>ZkF{EDJ9S>XMIe~mz*S=QxQH_?0)p%`)iOlm(Ps<7qS+|MW&jg zC-03%kX$I5rW@Turgjh40pA~y)1?nnA^W+}uD3HG64oSAa|T6>qaP6ZE)lh;PHz?c zTE7i`^fQkj`8vEF9TknUuv^yUTcV^1{3`R!joh-gyJ;85csVUIpg_xs55;-R#_uax z@}bxI{CPJ&kY&=h$pDr4D!#nQ8=I~i)|i(iZZd&Qwf`>D0Lc*z>im?T6UBH0`(nKlnf{r`mydRsABwKB&Geryf=2|bwWGu@Mg7fce{8o)dX=ETh=FWM zijshOt;DoZv}^6>+^&&bOf<`0`11?xCG+0QWR2xEpeiP*TWa`8e7LK|J8wD@h5ajH zK~6RF^(s&`#TeHGk&3ye$&q@+uft3ezeqkDy#fNZH-XD33F~`r9MZh-W)3GcoQ=4J z3kl7Nh2TBMiQ%g49dWy5rf48ThlVKP4Sh);LfE~TY}|Lpk;;-aj6(YTFq6+U!NJ&N z=o7c)R1av4Gy1lkQ|#rHAILky#=0iOs+P;T^&>so%_}1UZ=1^?+OFyFT?Ciea@7nD zgYz0&cHKXiZSpjjF5tzPJ9$+#`_EUsOY-C?bKZIeVS-^UAVo`6z2g{BeE!jSd zy&h%yNiSWdKdf2A*=zmlo#o);()p-{^W(lRy8>H$DzLo}7VAB~USVpE{oVRMJ!@ky zj81nuU>iRwfoaO7HCHq7*U?9Z-R7kwaxsJE;@ykar|MsReidUj&LztGRZ^&O>K?#P z(Xs#5Z#75bjS_#>qMgL)accET?=ds>${TrC(XBEB%b>b7c%&xaec_Pz#UokD;7*dT z@v^%tUt@FX-tEe@pY1JYn~GYUsysL$%L~aNX5*&>FI+p4;Y;BM^y~vi_n*oH9aXNe zNw@2@V2n$bDM2-CS!#O|(K`cmc&hfrpneDcpb+7F>Jr1^osu1LOx>a9D`-+JXR32{ z?k{=o11yka^`f^4y&8FD{EZ=35x44c({W*0gsM-1=esQ(Pj*x3XdP zeI2btLFQR`vJ4HH6}#qHn#yQ?syv5xPlxBvI1H8SwQDIFBrfeBi0{?zt51$gw_10j zh1-PIXuUEBq|Zd~uPFBS+N$QBr!~0N#i5 zx3W?i$8Jy^!iQJ>g*tC1h`dQQNEn{=Zd1wm=ed=vw?$TazvFpx5^9165#U=ev}W*X z?zd=TW==mC!&FL`#Q9V79{~|<#6y8>@A!EfvHl ztnUylEY|3rFi{tY;i7@XOZ(MaV@&w#`ziu`OO-k~!J+MKix> z2fF3vH5-&IT;c|M2nXr+cF*V`W+toiGov<5Ti+HU^EyV{fB{>23ft4MsG+#ZWqFq< zdCtDpAm)jI^F zJ{xj`Q_g~@k(jD9LjS#NPzRJ~LZ%Z8AGU>#6FHVO`MasK+ z9*)&g{JnN{$FXYvUa{*Wt3>Bv?Wh>wIvVT#_o_HNPp3T zsX%95jUo0$u83|2b+{quozIrP5wfXbAjXz7Nv3JtbK~1PJXuv`CZM3V@B~t8g2nFt zDz9y2x%!VtPE<}w`jO`dW47h|-yorE@^!voo7pVwdNxLM4yUoM_Z~HZnf-^0x?pyx&XK?3#Z5fGI*xtvtabOwW2WB7iYx)qB6S55#Rz)I@r(kPW8-82bC`gLu|K?^rb-LQYow&bi%o-EEY5x* zqzAWYA;P3dWEJ@a-lsJ}mXM|7yc}HVb1H7fryO$+98r`6qy&$fO%+DbNM-M`)=B$b zVOh&dNV8E{nqo3{p1;JQ{~qQ-)pmkk{AL!Yb_$?~E#yBN7Fk-H1;BySc=dquSHmb?o6SxWBOCJ8isK3;> zWb-4yxy4zJj&m|kyQ^rvbrv6FMJw9Z!lK+NuF4PyjZ~UV&ewLbhU>WZ=Jsqqa~L%0 z7Q)eL3L+QwU1MtRB={A|%-Zu ztuyz|?7U>)XCv42V!^jc`h9_kaPXF5{n|^bAmBuv8iJ@!sbhJ4tQz~^bS|S#Y>wA& zJnn8}?iX24imm-rc;_}GvnDp?Sk#r37F#!;oby;ra|}2 z9jC%kdEc9sNqW{MWBknU)+VAl0(`4os=tVUvfoziET8QbOIE3EogAZ!sjY>GT5a(e z1@f0X9hw(M2SpXIg5x}GVcbxhp}m!>OgZ08De^3z2U@srkG+=(=AXP%RreL1Z7lb5 zZ7AjzcNY_>587P}4#w)Wn(DVQFNPgvZaw3mXhRkJDQV@Dvb zY;A5U(%q!Wz<0a67|DrcYLRA#6No#1$ZPhs%@D9W@D7_s@RKovBB&R1DtB3>#UGx0 zWxv_o<_@Ua?CbO(hBCpfTRNQhP`quv#g+(c;+F%t_Jr~&A)NdV1B)^a!Qsx)R6XiQ z9{jPOoDf(9g1{25Ci`G&u^Wfd`*=B|BvkAt!3X=ML+PkXSpNY9>@kB^tTv2C8oL*| zL{JXL9!kUH88Z+06n2RVTAd1a^}-&yI6RaB@`tr15CJ8gD0KhMi7MRlxFl2+oA8;n z;q9T)zGZk8L8mFg^IaYkw-b2Gq3|nAua&FFdV&?b(uN=!bO!^^EGT&(O%JcRe=iQX z(Xc#Cvjk=R(Ws?j$keI;tY0tMcDZq~48+_R6b5($v3(2`sTQ4x+E-2&_)C+hc}UFN zoD$L_3`}>npZ;T87|6*qF{NjiK*+>?xZmj6x-Mx}*YV@9@Hq*GXDe;>nEJms!TC!i zAs`lg`w<1%9y9~Yefq%l&Oot!PqE*DAH{@v_C}x=cHZ@v3A6$PVT4*@4N%w&QIh}a zIf=rUdJy#1&8KF)(DpK4VH$=)!!M6}wFq)C{3gH=$os2kv3Qh*cIewO_Y5=Jhrfz7 z)==O+K47zfqU8Vfh3PY2>)72Z=$<(D-x8m_G{O<+SB#XOOC}Ko3#h(Vyw)(q%QhUO zra%^j$W-}+ldCaUxWt~|YvoG~zPjwz% zxWMnha(>Z1fc8{Ld>fDsPM0UZgh10~j?1P0sAq6by^x^dh}V7^lol+Z+TWsA4qnT5}`%ByLD-42uW z{Lg6^;Dj^e-W@Ef4$~{sUhr5^ely(A9NY=}-LD;KuYa3|xsE{BgXin!FT#G#{wBKl z)RKO(`UpQE_AHsm7?rg1%M-?MZnl!|yLUg~BdNJm)_ykEv=qqO(`4@CixkAlZC^=x zPP#(>zDeyuD9bxaPNP2Pa@AezqEp+;$V%KTW!N+$g3B*&yPCD>k&1^u1TQbfE@q*| z&?c-CMgMppaL@JY;Kg*S@vD_&-`kXDHCoNgYNTr&HJ+;QV!TT+>6l)5q9o)=vzX)S z5$|!=)|`sNhz-R4M})65zQRF6Y$iHpqfTT zldAa3??QpN@qcUT-2Zlrq(rzCPE_Q)sQk-pP`#*nGre~IwNYO+LQB678M$7)+;h~^ z?3c5i9pmq{qTkU&g6)kbzR$Y-8$5WQ;VTf(&b}lBRFZ}kA6JMVwMit;}TB(+|O}XrPS47l+Wy@KX+x1YR(-})q960=KcPB?njKfgqG5Qzmcxf$x zy%o2^p{Q&y6bL4LO6QJ%r2ea@>E0|(x}K)(Ogzow!3bNw+Nhx|+GU$l z_EmihBsa!mBD6Ti;2~>Suf(2?2S2dJeo$1Sw92E(@vaSedKK-9^;7LFsPuYz?0Phj zOEOyyHvaR(*N<&1c_2gPeIUJMG@d`h_md2;nPWAb?l=GAe^M2-SI;q2y1E%_FE|fy zbux&eB%}zk>hCdVsoJ9zxS)|C&nwuZp}p!v!O2Y0mLOI8)wf>e$jppBqso#dxg#t+ z>?3P_S{cn+_g>8C7S}b`-^zBH>m7F)3Ume zs-~0uv!O`>Iqel7iELfS%^J&Gh343Ydvpf6@$rL(jc=vk3vG1Oa^!XyNL>AlWCu>o zSV~WdJ}BRIYLnOdSvNS8MEN1cPdOj;STF<6l3yj^$xOw=^m@JW~H6?Te$ySndXVI0b=w zfu`z!%%d!j1NqeUpZMEHSmF1-iB9Xoz{;*7v<2Zt=U_?PRl|F-T>(4V1(We{zs+!M zI#}up3`>|HL$fDczIWk9mTfr7>#C=DOjSV-!*WEj=dKqYSuquSsjmds5eNt@wW5E` z`q1QWv4Mpi`08`?upXhzk=It@aAL)uzBvwaZUh09V zx3G8?431uaAb8^zh=6qg1@HerF6gOvVNBMkeu`(h4zbT>T&$e|#c#+0(rH^G%2k5s zf(CbVhJLHq$E8X?u&;9i{*@qcHHW5^RI3hZPLRPe=3ReLvVObhIe1w0}%gv zUTt9dpYy$-?2&0j-{K6ioeM}p-SO|2$0~q5a`~ zN>Z@Minqn!ViBEF5h0*xbeG0l1wcR*jN@+u8(s0?4A{99 z#W}d3gMKWE%7OK{P<_=ZM8<(Hh9!aJ0DSpvA?vgSA(_V$hSl!9k2h#`2CZPbBwe7- zjXkmFC~ERNN`C(-Wn0MP5W=aCQSjGVKy3?kQ_@S2q!>1pCmctEWLq|sxN=z3nxAVX z$kv@g>|k93viJ{1pI-dC64mOE125y!ix8~P4$I&Jr>gn)Z&jVjww-mc19`*6X`1%X zmYIa|XG(}h61)C^Rx7*^E69wiz)5Y!SKxpS(G1P6pnQI%?D1;up7zq|uqlB%Siwvh zAAQib@SIUqmqm?XGP{CEHa)B099*;U^|Sy_-Z6b-M*gDr*@rKol`ltX)I{0z4F%;} z&asAsh(zV2u1&Fq(gd5Ea(n|2g%?M zLxH@PgLxgs%}4>A4qYg1-Ok+$$H3Z4ZaJd{&T1U>Y_d0J^*`SIWhwq2^?G{XF0hP0 zKc`Fyoa3hcZ(hF|MI9+WJCPA-NE~!!`1&TuL zNeuho{JbBBA|pM)VdSQAvwPvQiHytuWh6E8>BSJCSnJIRa?% z6F|G^YH{Y#WOB0%qxILEiaA3o9^zb2{ma-@Z~ig*Cpg4BCn&hkN3FSX;hCM5Fh4Cf zpnU+As^sWR%a?L$76rrIbRN=~!E9|Ia8%rG!`_d^<9z{iOVZ$M@2C#Hgs{4((Zb<6 zn>nYSRTTLH!p(pm>wh-QS8y1%rdy1$NV3XV-YTTGf_n zcsJ?b_ta4>j|?;<%>~vD;Iyl_!evCU&?H=YaZvP_?MVBk{l2Z$(b%)*m`imtEz%^Z zXqpXHvzKy3pSNs&-RyL1qq!Fh%jkj<=m?=*EB5^5+z0;`sJQiNT^?ggMdCVGIa5Tg zSS7oY*%Ub@di2w|>u$jE0d=M#0@=pxxZX}jiLkBj&((cA-F$nv@r6zMT%$V^{onk& zg_XaIg8Y}sTa!0;!Jpy>{@n8z|78a~#e7%?UKX8G1k^<|u~I&4(y3PD{*L$@iAF5$ zf9zc4WiSEu>@w36%b=JE?~7z^JEQN(_rV6SGcTB{5Yw!eRsLm70_brVEKoyYU$L|e z)r0L*=C4Rf4;WoPW+xMH70imbUudN7EXjp&Gm zdx4{10^XB~ht>69LDxH{CT+ekcRBFp=ho)X_%*EQHsv{n5x(FT1u{D6$iBBg--WVE zL3AJ^w@WPoRENnWDofgnEKJmaMr54j#D)< zSZA4qd=lt}p0#Yf33Ks(xJ9JwdERRx2Ivl9p(0MQs`8S1r7$2s?+GX||5F!ZN5wE} z8q^Way>vfAw3m>V6D=%~JDyM*v>NHd6BjYXw(|0={-) z+>lH9nX0ej$?{gX-Y29@FD+m`zDE>fxxSA?%LD3 ziCTId7NzmG$5x{0x;}_2Ra(Xjf?gLOT`` zn*73utl?`>v*A(84(`D?bR9kWMHC9!%X~u3G@hJN7qMr&3VW1GWi+nyfJ>6ZhS)wH zyGOU2YFRCvbON0gExE=bK@L&e?E|fU`%-Z#`o?jmb};kCt{+){s@rI#D9$jPO@pf% zTMjomDWO=m)Q;~A2$ z1-rL2rN)qcsj05`TNk{=k{sWo4rD75s;84Hjp4HqBiOtT7~#^NIEfo@u_b?nLCfb` zOdizt1SX%dRpmfHkoy-+og>mDmi+MQ{-w8SO-Y{QrlvuW&Fpul9jV@Z8nwSFZtWAd$4Z%+KQkphfs3 z{Kc`KT;?b=bh1@_S(+9np2a`6B)C!|=MDFQWqnTc3COtQ#;6$#^^4VO92MsbvcZI? zRs=KqH2${Ck8!^5_aym0x_`t=3YPzhSz$2UP=sT(PB>({zl zhkBn_3Uu5FHh?B)o?2_c#quJuj%nfkD$dG+$)(@&is2>E4Z08%@3if7$bntcZXbxw z26{e#ZaJdalmKaAA0vo`9l~H)9ga_wje9_jn?sq&p<{+JR3Eu)qw)3{F8julu6kI+ zKqbTKs`9Yo48fkbCRGIQkoS0DT0T&Gs#wl$en3(M^9}0o>Z=Y2F+2MvOtMYc^&$Dq z@v4i}NN*n_2!^f>ANlvCh+}N=YTA{b*n)-&qMO@;s+hX z(fOlzU?=@#hsQH3FeHsqx=YcS$U6S4X=NzgoyJtn}Dngm{gZx_3Qf--unQ7ar8iQrk*!cH;;r7)6N-j9GZ% z@!(}@f7zpul!(iM4#&gLw{Yq|J~U}G#V}(pX?8ps_1nY>6S{Qv-vG)eU0oo;SxH<` zB4Wg_^a-5k?-_`>WSQy-eVmOwA7FrOV;Z@JCbI^QzPRl=VPmBT#(FG8xAQ6=cWk*I z8tf<^?&$T8%$pwFo@*Qu_ohq=+M(kD{&|}vXY{CV;1(TOA}M;nVLyI>_KlirrXCBdcTl2+OoNj6-MqntlcY ziqN6LvM12S95>3nDVW1eYgsf@0j%0Y^|0L{YHlQtTuip+iH`9&_cDQb&G=7z_$b>0 zBrLV+S2YPVCvRoohSTrDewUAD40g%p)j>P-TRZ474IEupQL{YTmcqtiaqGOPVXH}H z&yZOz*fMBHio+^zaIg8CxDuz*iY}g4;EgWXic$W%6Vvfy@V?2CP+fi zw7q7FMS1DF9{gc@H6x?yB0yy(pJe{?ao&9mZi+Mhj6%<6i70ivz@&Sv)V ztzq7d%bS%1#q0tJqK&6JY-GH;Eq=4)fv2r}U9R5ImTLfPU}mT!Hj*hQIc>WT1F&#? zd1mj-4UsoTQ|_B$o|$-u2fbNi=2{XmYdln?ez(i)0yCQKsqem+ivp@cmnve&=6k(c35f6jQd)l8NxzH` z?(rLQdf#2z{+vRG7ZOy{5NFddvctR2@3hMNrtxWO;;5AyF-_ZKD=lp>mA((^4grw< zhqKxUd3K+qo@t3s$uDoBP^>_iwSNd|<^spTg1DEm0^QyrLL|+c7!LE;WyhY8l)33E zwc!;4tx%qtVjR-CYP`#x_!fIF6*CDn%u9s@sr-ifogpP94c+~80BbvwdDfukv3=%R za~R_8O5<4NzX9Tm6CP-%yqzIPf*}Q)x2L$;wFbO~r?IwpHl#iQkp2gFvg(DEUh@ec z37nw34-+-*oDL`CgsZKhV(rArz3~}rq@N44Z&q%xPF5(y{oGBQ_cc4Py22XDLLeH# z{YLzE-Th1+?TL9^vieo`An=j!`AX5Y+i-r{<>7%nRX`shHFLe2u`7*`Zf05c3xhr% zGLIdAFZ46aBpBD4;qCIhjOaM!Q3H zm-4<|J3Fj>!lS|mVD>Y2`3-k@JLZOMajwmB5Px>nK3S68SGi+MRtb=uwnP47g%RzH zR>apy49g5iY?!zU*NH-S=l3H%;RraL0otsn`~pT)nuZ@nm!(wr`Ifz)7Q{7j=ZP9- znm5*vm$LztEyE?oA%AGj;!C?w=5M!CHK=3ZvblD&h5Fs760DtH4G&HNf+a^3qX0%v zY*CQoyWaOyod4|PsOy0jj`?thq`SM>gQJjo-)*F><0S8My6$fj{XOr#%|2Z3(A^o% zpCDKKC&wipd<`x6h`Ju`MaM^D9&acfb^g!teyu8hA}n`*3de$Pr2+V! z&jP?`>z1wwqJaIctC%)itWLGJU97GDRqp~{b=yId8eGU752Rj*U$pRx*7LENV zo5nW$bVmR)TB}MWZL2dsF^#J9nRwrSzzLT5#I7?kvO+SCOP-qN5=!@b$4OM~`lGW( zI1>RktiL__x!jAX4SBmCx`YS-yeYJ1g-*h6| zA~L#3!eHK=xGV zGiuWlN;aj#A8^RZbu1A)Yd1S%6o09 zDuy>p_JLr4Jg}&S>ot~{Jh|Jf)MA$rKsUyjf0a~<5dodsEtmi#P${y{OYd@C7w(#a zKhn0-j$Yajq7#7tIJ~tpzcmv5JZXMq`$hNPno_!zRF|Mjx}CLvh@g86OP4RTbiB?n z3+h_-TurTG4VT~Y`W5TABmI14f`Fb&8$dngRhS+rdKm!yF`%D84jlJJk=l z>iY7M=Y?4n?vZWyaTemM)P5n*pjU(aq|G_DER9dwe*}v2Y#-De_Tug%NRnE_VI-p4 zcXsinIW5`O7K*|ID<`#7}K3QuyY%`L=GX*!6q!e(^il^;dMwcX-< z+>I%G03@4vK;=Fe{FKNGmynQ9OaUmOXm^Uy!w2E*r`V$z!ikJbOr`owPGX*3N1{cF z$(#w3e>T1ScT0;u5NCntBt~FVf=<*2^9_nBO0i3Ao|EB(Og4v$En>_n^yk9!DLm#+ z@F;kLcdXX?BI=!%L~ek)b1&b#+AW8B-J94)-!&kNHX8b_s^P!T{*_Vx%2uD`PJsLs z^YsY_FcqB|N_j`qGDRxEd=9YIk(S{7UwwEB1^2p3t*4Pv+kD%R4jZ6%8jeox4mK!^2?t318 zUw-qBp^fIZ_%>P!EQEJ65wLv ze4<@{)?;4U=R!2Sq5Ci~`HIvD&TSU}DY{0fZmyxM{R5c>y53wcF)G(ZX#ssBvh9zl ztT=EpuOfjxLgieV8(05%e9GReGOW7}k&rMDx5s%C&>8+a4>WLaz7`OIDXbQfHX|UZO zrNDte^bsM!?`q`TX#dbgax;E-<6SXFQITPon=v3uZz9dL#d`@KiS=6$Y{dGnnbV?O z-pRWAzm0Rj%8Lb3kTYKy9eJ3JjIrpxWca?&I2km@H0;rSDJ^MT0Ni*}X7NCrCw7pk zZo^SCZl~2GmeWd}HaqPjMGulZqdV$0+*QMCD`qVU*hXPB`g+^a;9-NTkQ26)972mQ;^#fnpXkWJd(e~ zqf?=#O+t0gGo$s78s6*u!KA9UQ!&-M0`5nzp(T>;18mH{Hb>#du%}SdZa(MVfA04? zen6_K-irMb)Y8q*BY!}#ztj!UzU~k#em5;aoAM_J+ONZ+w0vF*?ZnNaSxo09qb4!k z3wRHE&C2wbMOxFs9^&dO$qc}!6>@p4GVOAGYFTEW3ynt)+!S2#?RDJx0pZt+?w)V3 zpB(1usz`nxn{4D0LHWw&b;~*CxGx1Y^?S(n$jKf9lqryREIjmBza;)4tnFv^<-x+F zzH>)ma&zR0-))SvOv9U}cehCEH3~+r<#xSbLKUq_y)Pbzi>1luPh`DDjBCv1(VlnK z>#(z5_Lx(B%2{kE_o#TYF%Waz!L_O+=6mJhNmHrUaJqMZr(zSnQ*Aqu7XpwS7yA?W zVJj^^Qu$b>0pBK3r;jxQl0^LGIRuMswl#s4Pmo!L8qjWb&cT1Oq zfTRdWhcwdN%?(K0ba&o#cfJ?8o@ej>@$Rqda0$+N%{j+7$9ew7n;4+Xwvq<*Zu&g9 zt&&6St&W~WTPTsG2}LbGemsH0DD&`YspjjU8CQ^!G#$7J*2KJ5?1=4^#Y&_#=1tFV z0CR3cfdnn7s#-=hGJ@MbyaF`D;ZOy==ai@1_K2xeBpn7oz!|`mJu>;$P^-siL}h>M?aho(Hyr8m;*EaN<@28i>DhWwZUQH7mEuRI4=F_6 zVGE+9!kh#%$@@)vO((o(%Oi>sP^S65o#j1R5ebKRyZsbwtIUr zYGk~Z*$*4m-$l39T`(n1<7xMwr#i=|ZVy@>;?380s?T!4Tt{ZSk6&ME$X^HU3kM$@ zh?_b`dC9oKa@B9%37PNW?PkR^UAL!7e>kbGo^|ElG&3?^E2TPo^Jx9a5WaOqVPY#A zQjgX2Q+R*>)#thL7$0xXMG78~a z5l}bt^Ih+h({JE;PS)6E=xosz0gD95OVWv4{NoCPE)=)x-RjyDvytpth#g|Sz}-cL zjsje#K4OpK_PCKCb}`SVjTWMggHA{sawLH-_j=zeG*@PwRfCkpvD-mm)FFJEhE}1S z&yV4_P><_AZ7MWk4rNOxauK#MuK&gnxH*6mc=rhZjrZNn3HbfDYE=)x6iIHXY37hCjS8Xyi~k08q^Wc5$^R!==ey(gQ8dZnCPbeLWB9X2a4*)qatF?U4dx83 z@#_y_JV*K7iz@0nMfVNflQ7mOCiOOLv)%kZ6M^}S{cfvLZp}C=r1b<#sJ3z9F=2VX z<2(lLITHwtw-ChpwuGWhb^6H!Ocvzwmp3VTeDD;LW((}9s`4KwG{jw@&aI9!u7O|6 z5GZT0b;t0O6$e;fC$}9|f6n3c%AV}3`HD)^rQwhE*A-)t9QeA~S#!}_(lm3iW~KGh zsC!7~U8%_eZ5&osnf*||iLsn*Q*pbop^(vroG|YV2111>K6mvJCD#;(cF#kaL>9i@ ziyy4R3cr}LPDVFIWUVJslZoA;SIX`zzoR=%jL2HaEPX|>G3dJlgVVXqrmAO+*D#CN z@urK=sO=*YlLL*@>_TZ-9>lc60q-3Y_Ibw+%jt`8-HNLVifZJYQmTji={mn_@W5%n zE)Ygd*@<#(XD%~_bTnMa*F1aOew@d~VqY;uAbdbOs?V*&40P(ULv(5Bm|)De^SeqJ zy2-OZ>H%}WP?Q(X=Thi0moWHfX5M)gZ(ENOQQou|I)u_1r)sJUe89q`ppK=M_Z7w> z=C=12mbg9|Q`I#h#nMYe){>MfQpgJCX;#SkP+>Aa#CJ~Xb~XyN<&2l|;?sZ)qz+u7 zQK9Qh;UIoNj>P6bWAU_W^gR+M_UzE7>1j)xNIgI9iJ{{rPCsb!ygpGvMvKPh0CR?q z@hnC+ZltLA*>*Y7$c=Od#-3L%c=c{}g%cV?VsG}w zGQrqnKk`MYHhH+7*>+k44K{uL7}4Mhk2D-e?3J5?fwU~qb;EmmGUB$S{7#E=9P9QR zs|Q(d3V4%=Flu!ETGt1ku61H6sn5yLOk%yUbsI1Wh(ycDb#Hd+eUBeMFD?W83v9nZ%BHBhJN>XbDv}u0Pfb znR6AoZ8Y?$dAZyrGB7~yEyCZB9Mecawr5k`f0^=o&rNEKbwJK;zYXXZZzJxNm>8p9x5m@Of&7!))NK-hVwCv70RBA_=w@e=%mzDPjrC ziI};4T*%}3g`@El2Pun-?ltK=KCqfPi84@d^HwjJCC}BIjbd$K{&b~Z?sGcJY+i?Z zT%7`@Cw@YB*2ur6{htU635-OQA*;!C!tIH%;n#0haFZF^AJ~fH&UG-ce2|ktLjN(T z$R(W*#$YR~CeRJ;`Om8POIh{C{dj!Ja3Wg%A!0hGTVtoAt8bn{(?vt<;O~Yn7Na7V{JDbunHFUr$M%2&~HaLY=i)>@z zB9-G0OK}fx|J3e|SIh^D#Ri_96ZDM_YD10RL#&Ae&Cs2s?-UKp84uwx(vK`57GElU zWx9wRIzR+4<((Rrksq5-YJ%k#;QlT&v_*(@w6R`-=?vE2Dfhc?hZ_q5B|!|O4FG7B z#qS)T*`~cM%>lzL=Q~4nHr-(h>P7ph9;%{rs^!yS`M~`-Wn`Yx56}qU7J5SPJAwd1 zP@Njn4VY&WWnH$&W<7fO6JqUia&f(O_eAt}MyeV;U;X>qRA=d}F=49B?}- zRckx{BA5;qHC)AEjs;QOLTg!jZ^!xHA{(dN5yUy)W6Tdcq^3`nt&R@_r{UKI3oqul zN)-Hd=&11*uDN`rZ*;LW`?j&&`*xy*^h~1DLQA^1ByrlvIwW+3ltM#84I@Y1fvFk4 z=ha5u@5AQ%+kxHZ1g~CYfQK;mt6Mc_4AXOw=ryZCd)q^%&Ush1v7!a;ZyZpVZu?jV z2EhusQzaYFDUXI+y~4l%k2R3_>Ya8^Mpxev2E-nK<`Mk2gC>q~gx!BADeD@)A(OCi zHUy$mPLG64D;l2D9|M(0E)0*I+IeqwNBd^c54CI~#CBvOlb1#L0GR>$;ElWq)W0r=zb@o=;;NAH;0uh)>U2qFc6l%b;1Y2C zvMdJ@qZF7nh{n=VcdYSo1WQ-_h9S85Qq~)mAO3cWa3cLBlLQn6OW|*S984lc&0VHl zSzdMPhuqHSJD3ZwknuX13zhfyy|yAuL7chobAn+(ikF^SmDc{yXxHZZ5GK7ytVu#W z;d;cX;eH~{AE7{vX>7CnatTaGFU9A}l(&ZgIpbJ;`r)}2cbSoyz93V!8V&fxX(5Yr z?(x1i!Z6~R1u79BF%3e8v`SL1ls(j`C;No1lc;3S0)6=HTWz$R- zQkFCBJaT>u5JtqOe0${i494aU5xc|Ljc#heTCH093g>+tZ0e=3t%z7A-E1J-X)?t# z`yK%`Z~tsCna8;(Ws4Y1iZrE-4rjg(?K^rlzAtBwuv~!J=2vhq_#Om8djVbdU3Tnv zJ00dWZQ+V9Xc1S3cqT;n68UK!OKtGZE?Yp%*vwNcHR{DC!a0J2gL6%OqZ4{R=e)4i zbP4CLn?Kg0f7p&HP>_R>`Z&z3gahp-X_A5UU}r`I|1V8#EYBsQo!Tm3iuotUZvz4P z4h0G6m~8kNDpB8VJBrR=${&d_6Zh|dXo2HGz?CJ!*QK1G##T5%24SYS=D%^CV<;Y(&X_vxa{Vb6mn4beAr68E z(jn*G!o4WT#}?#$1k1ceef7-^Jn?i9+UaZN#d`bw9vf(3n#TlT+KqkyzT*31=U%4& zcQt)UF>ldM+1J4ojM%0#xPd??t9gEhR^Owud-)}1x^Bym%diZe%R!8o3yV8rzWe9& zx`Fl+=BKILEYRXP!ajj0&p=jFUb&zJx}74~QRkW=mq+NjSgar9isXJiN#?Q>l9k41 z5t0iyr-yEQNd{k?CuiHm%`#5)$sb}F`<)P3wQFqkXh9j9+GvS5jOOeqY_SjoJ^@P< zl0W2tz(j2VP1@sFJPoOm&x!N`?iMJ%jI`Xd6z@A%^Wn^|JpOE!f{5+l*-j_qar)=g zk7BJ_Auy*j;t8sMw!E^!T?iy2w->d-Y7vAyDzc;+B_AK>IBt!8g{BG==U`aP)?>p)j6ut z{kJfc`!t=yt3$$KtI~T=M!pVAElK+`**Apu|Ad#CqZU^lKee7@Sjj_NHmx1VzyVV= zcHe0pM@M4!;ij;gl3wjn7z*P0RlSE+$mcY)kJu^`QdEjNE0sI;Qk;`X@=ITS;<#x97zTCJ!y^Gj8Nth#J?spWG1Aj+vC`Pov^ivJMaj(?M0XhK}rb(lZ^jbaHn1zkQJp(DwO)@m!u1f%Jb%#dgRS!Osbb=>c4`_ z1xpD0RFeS#;3|lSI@tQ+ zEoV;1}q#i zdckD{`JB7ypo-7sAT4DD*#*75Gc_%AaJ0Lf8v-iD5k*CW4$Z{=&NZ|uT+$-+7qd8A z4qRMZal2q@fA&Sfq+2f&H($A$yx`h8Q(w@!ePY`ga>U>FyY@S1D{RBL*ft)VuN*` z)Ar;7mRCd&y2_I{KlK&FSMqfK+2a?1AzoIbOgi^J%+I0=FK9d9dUCb91Q z%*=oIl-pCi@7|M=lJ4Ctg&O)J6>Ha5S^s?ODT=p4(qc1R@l}`8bnvs+)h5;42e>Ok zf1*IE4=qVnlO;ZsGD#BPYto$Z>)&HllBQKjBdCOuJNuW*Si{P!h3@;NiR3Q-B6ivP z${h_x>8yGJ-*jOm=ihjZl)bDDX$|Il8p2o9JVoR_wf)}YhBe@v16F1aoCp6-iDq7K znQ(LUDbMLUcLLC)^XNhdfIHX}6O+u13S6fz=c(01;nk$1RdU4+4?H~94}{AvoFA&w zc%8<)LBS+?m$EFpec+FDnRtG~S|X&K^z)|pN_Vb!F8TcgJW!S;kM=EzRs$E+C7Lpu zwhJp?N+Py8xA0uPTlfqX$Ek;Ot!7e`$1rv1S5Gmy-~>3Mev14Zz>_r0eM&tz-VG|nqZsl^5&J~z4j`Nm6j zp@3^LO3HxawzjrhtC^}Bx08(_w>@Q&f6f}u=X)>NEygp6y)Fa?4m*K(zlELW*+ubC z`bw}qq2s9Gd6U`7<3sv0=Lx`Go&dNNuyb&~F22YiYa-w;oD>FQbuQ5r0>c9vhrr&~BS$~Bm)(D$tO#Ya7_2X|z_ZJU8sw}}_Flw^uHm+~3s z0MsLWI$b4)Fi4~Ky%$s%*g%Tyu*;cHz?j4JU=fqCK&M~ z-yL(g2*tPGd(#RYlcP`meI=+9ZLt=XU0EWPPbQrwS``r&$bU@;+PTDq{qE)}3s(!8 z5YPnpgmpv{p|6N0_+QdIH2H6upj88={X@jJcaP}*;85jUGNj6Zw53yS9ar7x~;Ml5<&FXaf*%9fy9xvSrgOWB-FzJ zUrcRd557=9++U7v6K{uetyrcIog}+qhsr`RF-Xo%9aAtLn!Sgw*E(~duf0>JvLLsNr?=!g)9qtWVvu2fpW*WTRBl)! zFF1v0^YZcG#!!Zv`SdpceIn%qfy)MOMU3djE}M9sCq|$JX6b5jAV`eoQqag{*BMNLUG&8np#|Y10-IGiHdG=-}zh$ za@oq3PDfFEi2jH^zi>H{Ba>`D^Yvdk@w;z)@+yb;q8>Dse*P98f2JQ&un;}R4O^rZ zH#kL|Gy!N|ug{z_TACqWk|*gn`1hU`Ht(oB`Nx|c3!;9< z4BsPAF7=V^%-A$1r;D3^sPVXDiTz?yUi>cPV06Ffni00dI~RR0q3iueCUv4oj=H%$ zUvQ9E2X^Grjar~$U{jE8JVDb&zr&mV4ZI9=IhRkC(n)19nm1xiE_R|HF&Rg@o(zeb z?M#+p;^X%&B`)+v!Rlv8XT$X%H^ln75%D<0QJi|ADxLvVBl z!Qj?(s?5lvikUYZ-3@Q0X}oS})*uw$;m2@%*Q29BRKx>d+XMB=v(Ag9K;km$(7Sh& zDQspKA-k_x$H$3F#5Rzog=%*2zx>ykT21_mT8JP3#tfBe!akxQk{5~h42EE`zRZ>o z7Y3iFFV2XAYP;eti57wEJu||R57Q0bg3m0sKi2829ilnKxv1i-po&}NJI)>fhwbur zZ5q1BffuQ6-oFhaxJ|zX;aU-5>hh-DbBMsd#{#Vsi0BbFz5`uqV|m?Bjxv>Z6C`B(H}>>?OqQ%;FLdscQWD6&lY7Bkv|y&(%kXz_s*MEuC}3UHZk& zWT-1^C>j$!zy^>r4b6t75CY}3<-W6;XKrC;0i@K${72*re4liv`{ata&R!LA-|`f` zbp+Ii`|uwGypk5W_fabO=V*wxF}1Zfk;}SQNt9OeQPwh3N3;~Xw+TOpnkpxtEbI~C z$@`n0)1aI8bm+Z~#GFq;V0b-qBizsxv0rC$#IKl{ z5&g&a{-l)wob*qBSdLfLd{orvYbm7$53GdSi}xB{ zC*x-{469zUA4adWW7c_>=JvtC`8kxILZP^M6y0nqk5_I^RUB(VDD?B->?gnuJe1OZ z8IgbbwAqxn3{w}HVxcy6v^>O__Fzu>6Ko{sF}5jf8@2QXh~e$6S8vJ5m+(J8Y?5|# z!sK2s(r2GZ&IbTyn$ydZasWMG$gG5!#3o)%bw6azxxL@aXm8tf61C}Xv(KY}>u$`8 zUUwnBC15~<#iaV>iNhL46MkJhkM84N;}v|;vnM?ar%C~@dG&`@eqY66uLEL1wiTaC zFJxvc$2)^DW8ES31vdK#eb8*RUs|YFL{k1~ecaZ0MpwfXGSeBlWJ($!z?SuQXMvXh z1NQzGp`}ysVEjJ`dLOK9N0b6gH%3sR#Xerciy8c@Dm#7?W{y2$naj<-_(A4%aVc*1 zL;nMev(4`^j?6NaWJyepe%daUrp>WaRmxbFseU_+g174Xe~yIDwU%MxF_ol9(q7mO zOv@0lJE7$!wd}Ut&|$CCA2RJL-Wh{p%f)gcu7)1{1y|bT$60b!oc&sVm(a&OkIOuv zx$Mz&XH51Twr`E5ktiCy0fW9K^L1G%IbYqI(z#_*j+Ps87Sf<~lh4oMqa_?t->w+> zormb$LT!>cqtJ}&!<=jdKv9NnTu!T+dKXg{u8{^V4TXC1(h^bQ$@?D7G_;vet+Qws zAbVFckI+&hs8~*N=jvy;f>8zDPpaodkN~csl303fo*}m$i(}5ZkLGzS&6WUC{dqd73;Pg9$>)3U1M|qEbdWASG zhKiA@y!V9(R!ADCzHATx&HZ5rgQt|m46kB-5TEi-%`v$}MK3=V&GaswR6nfKtE#6>++jxW z7?7$GA!9S`OKe>V@BB|UiMhp^FIg6tI_eG*gDm15_vWRwGVxZW7J4`z9ahIejA&m9 zx{gH>oBjTIEVP7dH@3N8x^Z*bc`mTU@issu>0+wa`0}uq&E|SW2^fT{o-?}QFnH}I z#r7Aj9~lV9-^cgPtspwg$x23O9ata<(X0RLti0;muUHQgU~jskDtvoN$H3$E+XmO$ zkoo$gSan-Y%k#>4FG9c_&0&5FptCMFn8(&do2zKh4K!W1f@SNQ^D3_?#_aI@k;id8 zTWjVVb1z%kpWO9)OiJ-BvuRdMX%HgkeY&<`B%77TL?UEhus1|(uqTIYmSWIxT@h{r zXlyPFyuAkD3W*jwjwg=|)ZNr9x+bYet~Qm|-yC_LO^JISXk{5m4?UaKDC}`Li!5$! zr&(B0O?q>6i8Qk$_&i!r;9JVLE6xi=aw0A8x_0Q`|$8`>Bm z{%$Azr=GvkpNBJ{T^sJh%dZSM{A6|~9nyfb(e{$u{pwC6IdEWo-;LXT^`9>2`K(Za zU_bcFDoo()i>!;ZW^U~o^I1r?po5BHTMCn6GE*qi9%O)q>`<=~n^|>2 zY;4FupO?Yqj8Ho0l)-tGEEPSR|D}3~kG}4WQsE&*LJ9iyKLKwe;tH=Wu_sX7=f#5! zCib#rw(wZiOXfWzx0c8re1uzx1@B5r|=d7`^gBs@oEx`UK@g(Yc&1>Ty%FGHtJAG2?Ago?_y&wqrrkg&wi z$|h&PhTCozt_tDIkWf7a+U!a(jFjWw6~86v!{LZc6H7*L&}>?Ug(3EA+}E5AC_?I_ zX=J^mYZ|AmQF`)+%`3P1Og`YZ(dAO; z{6(&2oB!P7UjI=sMFHYmjy7#ArOo_^ksg!d^M8e+l)Xzo%{$_UPT)>gWB|pLED~&UJs1w#U zTb3)p+d2t%)?UlkeIQIY?f9)kOpEqnMCkv#xz+F_w6cmf%IE@=S_+{G4MgwQpv8#$ zu#b=@!9EXPks;O)u%|;?BhCVqnVU8R41r93Ac{-=D>{V=fBIDP-H&kn^F~TUVYK>>41Xpg9`2L@koxQ3cwpr}BfL7)5=7kN;0O?vTU~>yehzrcQPyo9Js>6M zdh&}1}KOz~Kd{WJJd>AY_mt8PoLiusTtorXQ# z)!zgli>SL$%)BB>&!vdSKTQ@BEzIIBmMe+j3*no9H`qnv_B-~I{IL>w& zCMrSU_!2)Jn{(kW=cj8!us4~4lEG8AKPPw%2oul4S3UZK+hyQf8h!0y>$guyr)!an zhKcI5sZYfJ@AH7wNpqJOM2yQw9j@X(>Cr3Ku}*DX%Dpe^^~{JD&{2w|BcV?JeqV8) zJe1=AH!JQ5rB~*)DeDRyEq}<})Atc%H>8qWglXNettdENF?2{ zjlnmtTMOL#*s-h)p2gyF#>_XhsJR}yomxfj&|ihbzUG`3;rEyEmxZcIXy#}X*4uX* zXP{IpxGRvs;MbtSOQo7hxY5nsZLFR9E_Mu8$7-Q5BrBP9bUZQC=woHKW+6> z%8jGc5=PUhx#u~rBOyk8_FAX^AiQXNm58Y8`$Po-oo(_*skodc5Gl(Evkn5QJ1keC zv4q9eFW<599lXM@32E&1Rc8_2+^yZq&pGjNGu4c0v+e$D*XrDW9c2i}8xE73hxc2K zICvyY@TM~$u64t~`PnNbJMo#$*1=rqbIB{W)v2ZE{+|s1|1kl~I=#+zkwF(=(UMQf zi&H$z&M>TKf5|+B2l!~!aiMP}N=>9WCQbv^|5S!8NI&kvebFL;zZibqc0x~5WJh2; zS7ev93)_JWgof~gt0I*_MQ~t@L52r4{X$hR?WNSAm6XkQk`UVxgXO{iGS}Jz-csws zSlq-q9Vz;Gffcl@O>+Q(b6QL7!_WmXQ=O=^-_CAf(ZJR2 zbqQgIyuWF{V#p0xfuNet;Ik6zK=+k7?6F8IC_$iHR=Ip~zR28d_ z1YG#Fh7!_Hi)q#*?Dl#sT~0KoI5_f8?q9%10eqonJ=p+U75?e!N7S{9lj&@9eyJ66_j@g4=KN&zk3$8-<6e~b=6Sy6XQbhN zE{l&j;!yW;_^}_bl+#P^BR-uhloS0t5PL|1{r_-yi&Y}15GKq+gZ9+mufd#HKbXUP zjT0>j*;(!cB>lzXEKa8_os&7mI~~XVFvLh|tkuZ092w5y;_ia(QB8Wa)-Eo8Eevc8biZr zhpPFk`a9t9r!}m0!#ndg2#6QCbS5u&ciQtKO_Zb9J{O|KCoPO2Y{MOxKdbvuw3T>$ zlBh(j_KJVIazEp%PaIXM8_C-?xJgqcUh91Kc@+>2V@ZRUbylNJb5Vw%*rdG zXT~~S%Ph!ojlna&ldB)iFigPA);4wXLITrvX7;hDiU(~`1zn%=y7P^bP!w@pB845H zMK2jOEE^tGGFv8|4X!_4%I_-jPPq4ozkywPfydU?o1Pc`am#aYQz#jh{MCaVDG84tTWep`_6BE$(M zaLpK|(db8M=_aa)pp3G^E`N-{q&6zTY);5b+1E%l(R9i=^@`Y7);?%Pv5LrcU~M=f zHn$ceb+l5?4)jvo7rY*(F}yXD;8eW(A4pPs{8_dV`}xgD}5)VMMsJIu@SDL2k_)gr>clIk{nrpd!1 z_m{xAgKj~CS1gZFOH)i+e zTM2l-je=vSdzZ?>T+a>nX^`^N_Yr#l&1Yu%711YMXYf~k4IWeH6<=t)0)CiB06Hy@ zhSZa~1?UkiigHcgCIcD&IR$%?P;pSwj>E%0IVtdgmfx4>)h!%cPv!64mvZ+X9v~x& zPC`f!XUt1+1PF34JQgdm6~VP%0fz}jYUIvZe4k#CH;ZWJ%YWYj68Kj(Nc4a#SSrE= zcx^?el!@C2r&CA7NZmIF-@9PQ-s`#N^3Qkj3U<7~0Z0W~L)6`@s@WgvGY(RJK`!et z@62o7DdWbS=#u?JdKyYUGxX^F=c#?JXpCJpHMG%J82USJV4fZUj5|xaNJDm)hpA?! zea2@RV!2B?QBew*SxZK5-DhymghUCg0z)&tAb1Um419XglWQ^0YGW5?9i2B_L+Flw zT`nC{m&?8VTXEFNGL&eX2LU9j@KB$wf{IPPsNu3Exkani?4~o;rY>#Psvt^K(Ys0w z)_OdVSNZ$*Ek2h!);W^v!HdoYDfbPu%4%5(3+`Qd)1W3bCjWS-W?ISKDU$5Ie#OTw z_dRBp=RH3Z*o=4gFwYSOvheVs1y%FPQ`$ML`V{-=^?@>(n-K(Koox=@K8?BCb0djX zZ}vAdfBA=ziI^D3G(25AECkignlLw_HfNcW}bJ$d+=vx5#13$cmrLomEVZpzs z&s3sWs*noPSU|?2<@$ai9(nVK{=dU7YixTOY-ReNul=72K zja|?cs#vVps&8DB0s75~gGJCj*?`umzecK%L)&b~ViPBN=vkXB2muCc`=n_!IlVF; zb)%Ma8z)a#WtU^c?vU;7QDnLM(FTD?0|z6tb6I{EG5sm9|^G+rE8(Ksi+n# z_$Hi(e{z4)o-u{?31qv+zp_AK0_&bb1v$w*W0oE1>|2lev*-qcvSw<$<3ju!bst^` zb~=FmkDbhX4tj!1m~9xr(NzgY>>u$S+%lx$2;%I~X4uZ^RXt`Z=8JOH0qI}OyE}1s z@mnWk51uD5F+)V`E}oRM3t6^?sA5&qhRd;mErMmslEIy*1PEB-bZ@b|m1c9)qz>!k zGn&ac?-z;D&jZgkHV*)i`|Xx${>t1vEih2yu#SXw z$!t6^KXPlyGS{{>wpZp;a;Vh^GhGt&Z#c7ws8UV7^i#=m3U!MmXp$&T<&_pKNQl#_ zGUqFU2uPGNc@}jZ;DpT5je3wsaqyPuWjyaG9z1&0Y)iONos-5plCwZ3bN8Wr?B+GF zN?Dv~`9&j=x{dxyCh{!{>Dn1^nmSC)yRPA?>WwNU2`uY;n@)@2e2FN@^U8KeJmj z;uv>UOt(j+cwm03H{!mHv{>_m5W2~A&$X9zKeWYpa(9VlQM2CfZMv&@Z>yPNrHd7v zKT;8hc64RlBo`;ImDObO*ZK1=6Q!Dy*zBD~)5ktXfP2s5PL3~dV9|CY@UVyM@3ZWq8@&lbzM0V)0MQ!V z7W}EVyhHc3-7ad+Q<*htw(r5LgI}`7Aqldci}S|v@YFkH?isN5#o_u(u%B;o=IJ+L z-w-m(`uL7o*pngoN-Ci9@I6QUP-P}=93vl|Nfv%aV~nNewE})0+Z3OL)3)ol-~AZx9%I{ ziuKcG<&^X3HmAV`M@yKlTuSk2y+p~@dH$7pm)i`OmMlq<)L8i1yX>e~Pjt(EZSu80 zKeY2uDbv*)3s~nvMO_$XbDBfiyK@X5zk1f{J$r>?b{a3Bd`*Okb>N|G8`3#JN1c)K z^?cW8-xP6!D-iD*&NUZF|3Kli>Anw3OZB6ibr}V3$8q50XA_=b!6fe;n_a!?#ah&< z47_dTmC`7;`$~4;N_JtT{tt=ik11rnWs2-TtTO^J77M-Ut(aZdax8fKF>$bNzt(V} zdItjojsO-DHKUw=*Rf+e-rj5LuR)Sv#{-t174wQC>%-rH$or1lH}LHX9OCtw8B1sW zkEPtrU>}6{(Nx!6LnJ8)x%R8Ldw>y1rF)p2pE4K_AjUX#xsqQ$sGXtzh|mT(j}Y-o zWnD^X?}jevF`t(%zW5mo|DM<_xKfM{io>7fD%%WMD&;$7Ni{o`bK1L$>&v3E_gWhq zpVf_an8@fXx#_@4IPc?8YH~8D%AdZl=D(gqvsr>@XSgCjk$`j^ws7)+Mb@NmAbkR= zn87GKiIS3gu+9!JF?1qANsyO^uTm<|J|MRa5|b*N9lzFH*z8r?Ve^+lTc+X7MqkF| zI3P>uG`Z04XOy2{W=;zKwy**~0%JDw2|szf<3E9(wo_rJ#R@YT#RKXjQ;N-oHb&d94!S zQN4rHzX_pJS_yo_E2=W;cQEEq)wqX3=mogN=EYt9E>(263L)77_Mu&iW`4Cm3}l}9 z3};+y9APlZ>2w=%)ADSXM+Ev&e%?7;rST5oOP5Vn13c2PFfv*ZvK`Sj%|in#_h9mS zm=Zrc<~5C_^5_C29_f=$o)gtb9zKRFVCp%D+GVB-L@QXPfy6#AUua52L-wvD&&9^Q zPa?=23~y46>wA6VCjZq#9)IbCvc&H|#nx?O+w~(nV@37PIL0?=$oyzi2SmezZu|8^ zE+-A0`Lg+S>!QoK556f?{nfff=poD&PLY*bM%cL|Wynd53HrKM#N1AvBH=Lp6UkM4 zve!>*<0Dejm)G*`3C9wg7Ug=H(jC^Bk$uayw!!U`50sF8^A!Dx%WGhwVyiDz3Nib& zX763Xn|N{)sG&}ki~I(5cU-LVo>I;!lSlWyJ0NJ>;x2L?+t#?p$)7mz zXVhnaa46$dI}AL&YqP-F{J2jOQj>(P;hOi$yVIbH=AVknnNC%3=Sj(Qch3z`Xsk}~ zJ(Es5XlOG8;^cC)QGs5?OhI_zgMAoZaM!g?N9`AbUzNoz+x&Z(rt{el*7XqDro(Et zU~)RFBrWW131fTGxgF6{8-F%&YO~ejS!#S2tk?pjk-5&(7d@s(uCu6>;gB*^E@YeveVB2UrFy`hg}R$$cpG?+ z2o_V`o4s)67Va$W%lL~5HU5D zE_6V7n#01SuloVo+SqA{1opnztv+FRdy*mNGUp$}WdRE74JFMG^+~Pozc}k-X*n&U z$mqsw-Y1Jgsa!(SiGs`;v+3<89?Q(Tef~jE8(q-fw**fVl7q1SW&&HoV>LaN(2}5D zz~22e!ZY}X%1OTXH&WjDC}h+zR57fW0Vep;n$Pql#m@D34w1CK4XX=1{Fbksgr5pQ zHm>6dutT2moU9z@M5-2=xhIt0GFStk$0?-YfF|abR-)D7u4cKB$rd-w*X47s_ETM} zecIU6tC$@m;;bj4(po5Oj1Bf6rrm5-jOaYM0d_jD8H4wHQwFp~wdo&=TG}L3re%~! zRvP^!1GZ6D;<;DMVIzyT7XIS_X}s1ebQL=tOd5oHUK7Jt+ASFi*G)@<8}AVY?5S;6 z$t#>F*g4V6Nb8t{lt zJJ%AlO}Xr#Ilm~)sgDRzUU5%)#xyBWII5xFWSe3)S6|86MtTBWIOIRacWm*SRh8rD z+uiBRt_wxfWr%C1zJnJ$I<8RZgr7u8=-`*tpc-BJsyG~5#m8cIBr;9#oT;172Im8Xk)9 zYpJ>Wp+h;=QaFq$w%&5isnK-2YQn4~Y3znbi2tljS@06a+$Is~Dmq#hu2W72 z;m_E;{AHO@BvXPrt@#w=>O;PM&HB`60oT8;_#6P zkuK7~OPwsl>t@VekT0coGVun%tS5mqr)ZBa8vAS04LQ4zlYjrQqRrqSidvyKID(2K zB5oJT1PIRph3&5@2M~253>&)q-X{@B{_3Mr(d_dG>J}9n_#UW!3sfjQG4wVHAq-R? zxee6s@))=#OqyIN;MJN3Y7UNcG&r#7PmPQk2tAQ@`{-R(#gd3Nn=Rm$)Tn+fr3r9C z8?geKhz$q4DGjG2?h_oF=rYpolexOgF|do`Xh&!i`KtNkKm=0oAL(DVT9fZXN`8vDans~(4}*l(Al zL+?&fD}xDs5$ehw=ihosY@erhDK|GepW|NwS#sncOICj0OmY(L?fRvx0%i}uvAMWs z5OdwvDxPRrd6t5Yc*I1e^FI;Ab0zQDKJ;S|p?y~6 z+k)`7a*rQ!?Q8CHULizQN7P|I#R&4)DyBS}3%&(ytj7HfOqb#* z7oz6|XB(Rz8l>`*6~SGPD~6FC66tU*-01qdvE*lwsOjt*HZqFjv3_!w(-AtiU3i(4 z{(fSKNT@0G8Zxr1mPOEvdw$$Anp1qTT#n`m9aLb;^`-4$wtzb9j{(w^IMTp#P>HaChW7P#N~=ve#bzW(f|&l&2&B z*0sf;$unSkJ=alQ&!)agNyTZ8>INzA)Tw6! zMibT`pC)4Kl5`Uhi2{01Oyf7C)1|h~a1+t;2ooz*0_7W1)^0OR^Y*w>-o8i5b~70f zo4c^nAN4x(rtX~O#X@>`aZZBVpXj_eQ3^)EP54vc{zb|IR;(X-us7{;*N;F!*;mr~di3e!*|YAkzG;@1V^AeP1QkQTolY zs@_XJ6{o&{V`3CTI5}*zOA)0ph=lOX)3r5m#=$mW0bl}Nvg$Vidb|XxATCUmiT_2h z_Wc=fyse|57X8OgOQQW3j8*pXh$cm;BZA?c_AMs*3m%FVI@~H^nrGxoZt{J5rq)&U z{M90^N%1emI)zDG>cH@-;9o~UJ7}{k1SKrOO_x08^ubz&ul7~IbXoIrfE+L{z>kCK zvk1C|Dn2#(`3C8~)&AyxOe~LNR~&*bTH)t=P-(BO?f8`r6-6h*MB7fuxOj_7A=uZX z9V@H)_IQzGO{?-_-i7ei@{S;Xzj~mi_h^{BwZK@x7MY z@{2H?`oumXS_J?}95ql#2fvIScG`cOti#BEw86z}(j0vnh(<7)e?INi@y%}fg&&y! zr1+vr-v&6iVzAmV2WZLmnIZbY6Yvg`4OiKSu&#N1`vOWz@s0+=uwbU5Ki6Rqv z*bnHRUj$iCGD2|}n}~u}M+8;umo}bAP$ijp>^3ZT{FHNX0Bz5ohR6584EfOX(6rn- zrZ3ZgJxip|gfZvyUuSK&^V_*YSc3y{L(wMD;+Zz~?^QfRN|Tlyf987XSe4JY(#D&x z1U5PmRlIcY|7#qt36qDecUvGkk225bivg2u4n2A)PT^2Uw_(KG>qXm4rwZRiY;YL= zW=`V4rh|tBIoP*|@1raX9BvjL1eNg>fx`{_(t!HjnUMnIH#A?csa#^4?#lgu7^JKY zw9cMBox2R)rxAL`VJS-;uF$aOK)V$GFv*NxWT0$kodOd|t~Pn$KhD@zs}~{t@@*JI zuk@<8i7UYV98G}cu0)YlI(JWUFW9@}fWc30tozbG0j0Ln#S@CgvyA`7GHS0GV>sW}^w`QjDiE_e*n zf=))EA=4DGmzYM#<4hDD5)jOA(#&~s5b@wu1S2}bufDm9G?ZPDQ+sdqzG4hKBvWdv zh8800T{6p)DcWkMK-IPY8ig29!*Kp3y8+mB(}$2xQ>Wj-?+c8Jf5JP)9N^6ad-*)< zMZxPUk&jsc@7=!tx1B{pEQ0gIs;0g=KIqA>kwMo#WEKtTZOY9<+&6MzY~PcHY@--> zGDN?0m^CWpK3B_Fj4yD{-Awldo3rHpl#q*O!oN+$y+#IImB(&9s_J5!Gw$xpz(VqY z7p+`vD?0m4u&&J~4m-^~UiCU*Bq9HEd;2S1^gO=3MtJ5Qu>QhyL@fM0`v0_2+ad^% zVocJfOd`Ihi&i&@%S^!sj55!^U=qu*@x~m!4b%@H8 zmPS&f8zhGsLOMpeySru>VCZh%?K#hRzxVqKW`29`d);eY>x#;c9b1nosqi%NwD6K? znDA(hYJq(E=*m=o8t|n3)^QFec&TDs#j={ z<`{8PKoI_#nlMg0nsYDxdT1EhrsFzHeX8mtq58v+(7Ha#&t2V*Tpb>@c89J!Z#t+;)#Lc@o~c ztl37+;`~qTG-3ysffMC3>8ya#JgRf!=KE8l(2f=)%{myc6?jxNyVqd!-43k(JbL#l zC8-+6pVc3n`!=-y-@E&-di_&6j41ncRlLx$0|BNh6hMY~_rA@8 zzbpnIO)K5Sv%^C@ zvn|Lnf$y~2k(#F0jwyG-Ni_A=Nc8W`O=C@mH4GMo(^t+%*Z8npZ`}#dFFl5kmWyh< zB}IeG#%WFVFM3+qkJTGLxgIneaywq(aCi0l9NQ8SQ(k^2Dz2{6*%N-fC$a~QTk^y{ zOPMqE%9OWUo2DZ)7$&u56FS4(*YR~>9GyXFhg_jFD4~~2u1B@=7GN8~{}7BHKFSvA zJf?ZU`uxmXuU^XML(=l-fY0sD?|t?#GwGv4;V=|oI8%P$7!U;CMwwmG$fS#D%iQK8 z0Be*@q9G>Yn14-Yxn%K-nof(>09G5!@A)sCvo79_&jHvq_5nPR2jPS6um)GX75Pcr zAK<-Z8}SZ{^CP@3pGbI%p@FHyb~p(|dOQemE_o~L)V zz+;+r3Mb$Vz_l6S?GDczpONuoe7CAk+VmA4>wA4P4UzB{{94L2b~75exhtH9cxRj$ zUg^Ko_SZa~Wy>OOxx5hAq|K|w4!f5r3F%jhEJ9a#7Hl@lt_#prW|xr;G+o2PF=*)l z(ZM4Y#cPUdudDR}^N9vxLcQ1Bn3>1AU-;aj&WGbdqAN=81#I-znx+rWn0UYtyCTuJOx7uNQ%l^I54-t?nup z0>3jrlxCIBRy|xG+*a<@YVqL*fBCmCxP1Eh|BqM+rTTjc4#f343ka!C0NW1N+f!Ir zH1jj&{6KU7tJaUkojuT$ecn!ZuXLkb!Su2WbCk>xupWv}D0HL3^KaMADopQMbJZB@ z#9sR!RX;z}UybSKve?C((7&*<7;%3;X|))+y)+)OS0k6B{~Sl5t@U^(2noF@eI1C4 zUgK?2mTNI6AV0d6$7uTXbqf^-Kw^qPl;Ls*FBxfFyb7mEzn4)J#@Pveomaxp!65KTz>dmE_EusgU}V+kr+WwMh9rwLw*#nepMw z(t{0r6h(y**`z#5v7ty4)%IzUlBxX{$CSC8<33$0F{ZE0eH(BE4O9s`c^>@C8{l8FWOspr7M6!z3( z74ivcdr1YPny$ss`#xmS&1Pb8Tjk`=4+oW9HVP{^tFCy?{CS#s@sQH@6rKAobH0RN z`^Agrw{Hp+Hy!_X!~5@GoaSZe$;Sg`KK0a3mCKm_Y3$q{$B<^af_1`hMvq^$Ywn+Bq{Z4!v&8T3>Pvy(!Ku(X-=>exPf4?t zN>?ia{;k*xUhwxp{G^(++Tnmv0Ex42%M&@n;^EOJ8Rs@8Mxc-IOy%T|LwWhb)e1uS zMAf_%*#K$=HhwR^m%7&qn__1_1nm+uvB|}Pq&p+`4Ri-$VXwKj1>!b@?@8WLw!mvM zQoo$cR-cnuER2f-IpuZN$uK*1CWQ(CjefOk&{GT@88+p(If2Q;c&J22*&!T)4!XM`FQHW~RK7USr zG_9voOG`|7``u$$eQ3RS?1a)`?=tutCOn_o8zjLt4wr~hX#I+Lj)h~GWqSvmEfG6` zcEdmIH3x!!Z_cp!SbHZs!C!{g5N-oH?Ttp!8ONo}QegwO_Nv+A3>9RC5P9;d=5eqm z!JZx=s@5)%#fmk1?>Mull6a9Pz+i8^$$~||p7Lr(D^VWc;Y)>QkrRyBF{l0b*SYB5 z2F6J3-#sNG4Q%b%ryC`VVf_MwESeEnK&7}&HTO7-aZ!v~5~=`nR@AJS%1(?!Dqf0* zVKhf8hgQF1SOdjv2aK!v@!#Ru-@AYBjj;#fDeo+>T(QRgji-#&ujmX+1~hX-smG?_ zKvgGb*F3K834M=u4G_()Caqj4YUZ>@J9jFKACqJAFSC+;c!HRC-kOETs^~grV^SXw z1}8d1{)|9KTMuG0c!Qu7=L#J(EP{1PsAmr^1$AOeL*DSM~zI_!BpEmWv|pK@`4 zmr{!|Jezrp+;PhcuB(yXVsf6vewU{!=X>N#wB?0LyF8iSd5R&37gvQ%olygXK21N( z=oL%T>bdMwBOl|nxyN~zB;yX}MFB< zA==@zdz)}2ttaBVza_Q$J^HG;QKLg+2-h{%tIS$&sXXiEra(D+2@AcC*%dG?UU}VZ zLbQ1s&mM}V-ykD-#DtWS&uB!^)~-+_oNRI!g* z@zGLK@JOR3d-N}QQsx$@*^QE?ctwhVWT;|?us)yfEQ2Ag={uUS&oy1wvuSlrktt#9LffC$K>G>S?KQ-{{#ed-o#V4Tf zL?#=Bcm7X=zZH6E#@w5$1QsrQV1KKu7@@KNaT7f>?nEQN6Q5Trm*teMN!kLeL2TJ# zXgIL-l>si64*ugS+eTKX>E9v1=*7F58Cd`~V$;QYvl1EM7@MfrGGxI)h{gUE!!vpP8;Lk%}=MEX^Fe*xW`i1PG~ zkJKc#=M(De#PrK!3q9rf3Gf@XgUixQ+9%Ap*;u(ODyLbtpV#dR8~#jOJun!;(rP*z z5{4p*&qjoI$V#NrJv|(+#yFFNxn+q~>~!mRTypij#KB!@U(3Mb;O{=a$jjJ3X)z!@ zGQqO|&z5pkHwKz`Z=^2HiBcw}wa?v3LmA?e^@L9KRx{{~u9;>+7q(^{;N9sh=Y8u| zIziexRF`psXNlsM-HCZyFp-wOg6MOMm23__xm~GurM{yXbYvZW(^ph8(q*7Rj#HV<(ynLx-H(gGs*|x?O9^5{xT_+z zUCIBr04(GD%E{_$a|aQP!TRmtx@%p;HNBNM)H9~vbBccAKk~tUILv3li|(QyXB?j< zFj-3 zXr5dn_&4?TS8Tqx#*4mAW0dpeFj9c*wnrN9J*E=1GnCFwM^ge=CXg0` zZUszrD+#I<_a&bTE90uLc62fn#zSU1SaH80^^&3@RN3`or?#7w2=@VlvQ)GzG zQ>lUW64Rx8oAq^wy=&^Wgs;VnGsC&@L~x>VGMuu-jjC~9P$>0Ocd{G!PluON!0C6? zJoXuVx6^LYQItNR-=V$DF$H<9!&ri~;kgzN0_m?)H%9&H#i5d+dm^W3o)kM|n6}4R zBc%cnOBWYRTBM^pO3{}#iz#5{+$Y2Y}lUc}8+8=SMv=W%v6nLigR3mf@6j#^mj_&IdkX*Y zG^DD*N)^Qtz*@8C*&=CmA)eGfvF5{p*UDU6#*5Xz7zn7GwQG=b~XkJpISYS{|lyQpaFq;C7pXW685mSG<0oNt}3kKwj96o(Vy4=*J_99?~9SA zVZs+VBLUB$I=Qog!nu&>bQ5Zp)@YeEpxIk0lLLU;6xpKD2If}7$>}{4_SKP34tuu= zOuS=FVbq&0l)FaJV;$|njG`9-uN<74SA(9j$)2^Sx{C{Rjk+Y!wXD2QME|x$qP0+L z+N-FVnrQHLrPJ*P5#?>r@dz=nUhqCBrEQj0Tqk$E_bHNxK1IBEvDSb^V`bg@LzC+= zX5C2+E-lNf0HGW7yyHBt11{4bQfC}w(;8uM70dRCHQL#3TR~+yMEcX@#>4X&KD|M< zjfUw7V~ZW*MQTUzcQnG+HvH!wMp^{+3q4!I^~!4ncSxOUM@vkX*ZKWxdB-f47gG)N zZvBGag5YI1$Tm941~_2kp^0o6#&ap7{e)*FW;+dhU zH2RABs{!@avr7zOLx`KJfAVOWAGUE^qU%bn{qVsrDzIB_OR!>C)ce1^GCZ0t)dHPMu1O7 zXr$aLhIhW>&pBOLM;E2>)eJ--xlp3f8c#B`}#C^WKse|j>w5T>_ zz}+sHZP3mx!Y!d*izb>rse2Yy$ikY+c27V_7>&$$mY8-GyGJ1uV!Z;{nLAIHJkLq=k)UYU#R=>zu0zgYwkrI&HZtan=T&my(tF3!nf;W-r3zCie0@Vx{mJL2vgJP z`FHoSBL0_CN-0oa^cRT*zg_%m*9cf1aLXrVyup0~pokFsM~?$Z(}+v*biTHt|LXdM zk1lh~>HLa4(_!O9E-(*`j$DK+KAJ6EYco_UJU>C$9OAWEM5^kjt0x~Xbi?Pa!I%!O z9)JAc>--vQGR*t#M@|$V-5)z36rA+ZChRKv6v`^&DM7NV#0c85&)|d`0~yW&1wxks zgwR5FIRhCc9R{o1CRg%Hi?-yh-zlD*Xkh_&iJ!*w8rTI-H?a9+rfn@6(W{H&@nh=(L^~G zrYEl5YTm4SM0ijGi3PTl+T@ciCYd>wU8$Pl*?iAR=Z?CZX^@;s zs>@0}`;*0AZ~GK?YrrbWltsg0W@};+d}+?phllSJMa!#My!`ufbau$xSaPg}vb4Q? zYT130Vpoe@AgDLO$Ynu;vKllM{uycS9fEk(<3Ld8E(@?mZY^WslGah$%`s6LT{Gqz z)~-?HP#`&VBCr2;jHxAAY07yO%;`w|V7jG|SjPM2w?+5;U1yqDT98|`!0U}}D!zT= z0F+1DRJ(GIvMB2QfM55r#brjg+;YydZrZDx;vz;9Ya&o@;8XPm1q4;+R>?LiUK%2+ zjQDLy^IpwnTgW|zr?!Z^!wtRffKi!7S?ToMgHKm zgwp4nnjL4%R6wpKufCS^d-DRi*OHy-m~kE2H)YntgDYP#MLXT{L1FvKcGUOH(`V*5 z7AHxSN!JNuVlSRm{mfeM9TLzyyAq!8U3%t9+IF~}@!iLORUkSN;k0mk@a@S4#q^6Y z#g}mkLSC!uKtz2R1;}W1za?hzKcLp%iMHHg-A80HML~X&jzGR1^3Qx@XUI_I23v!L zT}Yg#83Y;x2eWg}lLrjo;l?%(ul=4eyypn%eiIy_=e~$!2lhdJD@>9ffmF-3^xcwG zc5J{)IP&cRx6<%SbdIM$lw1H*=k;{U{_M3qyn&d}pjYYLgVt~yYXAMHq+b6Nz{w*S zS7J}$wpUI5c!W!xBbSbQi?Da85ErrX1#MqN&+kdw*n&=G9XK76fZIHyslhFtNOWL} z+d8??+HFMCO@wlLSY71uQ6~guJ>iihO;3zxfO(%UwZWnan@ewyVq2UazHXaXQSnYF8;U!RRe|r0 z8^=yBE__VP+V$w{clWRz_!Z97BLiK}>Y;KG@In5$j#TIcZYA}P)}b1+R14Zmp-=oL zSd^$B|5B^@tmD^`0%x4jk=Lbj9i%SlKRy6b`CQmVTpA1XN zclr8SaqwPKIVv=}ON42jl?Wk)>G9{l-z!8)nu}EpS(gp|B*A$ag}Y}W%~rqlGpxQ5KF7$yL)M7kgU#>M(4;fjuF(LAGm}s{-$~XtseF!Lo_3$t!`)q}cSr(*fJw8u5NM z*zM68H%I_0depyFRfv9~IMNb#Z5(&{@g9#o&pS-^&H2>`!Z?jW&qH73^1>ig@zgI` ze%-5|^M}6!%7f7!u2lbH1jil~HG0g?CU^Jf=7GO0g*w@Qd)^3-m0GrqV>8ad(J4_J z^#+d9LbpDo0u7AvlX%;qW(Y!WA6$cE*rEsR9V{3#A2wZJ7-W1TQ@5Ql^v%L9rDUNJ z)sXb(KvFffttQ}YkUPI_y7;LCYZQC5PK^d9b8ItMsHvTxWNEuZACKS~=Hch~1|WSc z`T_EL_>`a>T|Iy}ocSY~JJ2j?%JL=6`=K8-3whut@4qgIpJyEW?nM`IZ<(|0nqA|A zdTb@bn!CclbC%nRXXUI)VCCJ+>AE2x4jtFi-iC{^@UuXg*FDXN;LggekSS7PL3roO zP9zhML92U8l>YNMED8A>hmyLAHSH{^^5fw6E+RVuh3*)1uzSED?va`u>qe=CHP%*< zSg0P5!~Y89!Xh$TR}im)dMfDFU^#rjYl?HM80o()g9L@Ti?lyp0Gth z){)ja#Iomtdz2i+spHiv59C_Oz$;A`tWVP_L&4a$v#nLtx*>N~iK9TavyLY$N8tQq z6%>fwMf%~@F`|<9F1x1vw*YPzNp|q4@C4vXF1F(M7dg#@`Fv0=S*omBLNZxdqQ`-T z=a;j`t^{hTWODcd9j1Mt?Wztv`a8w>cm76u`AZel zZ|yN>6qps^9>RMDz`gdAZF#g#PCIv1O~WH}Q%=C#U>=bYa%iCkK=Hosz5+!cnE0;l z8mB>Q!1E<4`aP<=y(Q_agQVG-mdgWkXuT@a`%GvjU-c_Q+v09J+LDr|q}(iJnfyv(D3RlhBvQCZr7qK?&CmQ^x9g+# zg=3pj2LwSl&;IbIG+uM2+?@z=oqnH&+}~im0~JAXA9W6Jz26Wbio1z#Rtfx^9C%O+ zz3mZ2oLJi`F7sPL3~m#=WSOt9*A`}yhnxCo6d!dI@9rP*mvqe#HQl@oSG$`#=)Mpm zh76ZX?p=Ax=nXk{w_=``7cEQ3>w0ZR8#(93KM!GpT&daV)E{pYl;?JPGL7-{tDi&(m)o)-4QMwY^LLm&e7@%~(n8HZ{LVzha4Dul z4uWS$TH(R_^qIvid6hdAG_L?_V^B%nM%b%Ntp%E1khP;hd=Jq>rF5}7^S#vv#eemFIU8%NzFDlfaGYZOR~1mA_ut@mMD z|H^cpJ4ZBavj`L)SqN{R24GHtB0X2KwxM@+e{zE?^mLDk<`WsBtFrWQqLzLqLJ56q zS~_&oP_zsMraJb6AAzLA+l`WS_fM1?CP%dNg>IeOX{Kppx>e4uK&~5WL_IJwjZ)Dr z#$rx7n+1BX>D7{8o^;KjbFZ~lcL8$Ie@Q+6a6Rml9z?^x0NjdTnpF>6@(nZF8bR1+ zR)F%-OH{Q;z^@ba4=wfgpVb}>Gb{gIi*QSeO2PF3ydh}BHRSL|6f`u#lTB0?F#Oa5 zc2C{;cBW~%sULo<{$0TbetuZ-P#WZs{Ip|ia=YS(JWVd0jPJJ0(6QQ?$&a9Hu{rmG z4F6|i)h#G@G`5j%Pg4s+tGUi80w284$Kb)#y$dVa%7CK71P@mYJ?i1sSG04D^bQG) zd*vMx8crgV8}xufb>@OUO~)*rWkx}+q1w+`{Tp`Amh9lg_E{bv?|dhuH##F%F&<^7 z3(Tt;ZZhAyl3@oC)okvP__!*6b3cI@ONkJu2M0}Emu;tlFN{{BgZ?~5LNu1mWV5_(=hg-cX5c+B?Up__qlHjHQ2`WU^iD-& zwvEQaBd|ND+xPAKnzc4%2kBLrr}*=}uE&H2g=|XAB9(S0Ps5WT_Hu&Z_lF^6VJTaL zan;~t7ZH*zTrIp{GI!i__vVR(mF%ZP1}b`c6zqw|)PZvDH_BnxW3SI-f%+v9Q9R%A zhMQ=&HAQseB|-HzKP6|PTtSw0qqSTOvl4Bb!I=+gnia4){C}h~Jt+*3SB1^eRMKJ; z)rws(yEJ(xbc@Eqe@wgzz=S-npG4W<6IcGgO=2cK zO>dr)`dv30h{pQlbLh{5!ZTAt+&1hdA}179Gb|DPRj<7-=xgcOn)K{_N`=|qzZI2c z2c_BD*qk&FPimVZH~|~~ZnkazSESVj^x;J+c}=D<`G{}roHZU3VVA>z@f{hP(3mtB!{HU=6w2g0DM5s^co~e}aQontsTDZJutp^e5 z{w8@U_DGa8k$w9G!!#XqY0etQ5^$9Vgi$@)o+gzZwv~degn$Tc4|fh&KK-DOrx{Su zS!62!B#(kKWbSS+^H|?>+pAkvf%gDC%$!M0{jXAmD1nC$oy1I6FrSzMj-PkW?Vss} z;d%hrS;1m>Z?^X4nm1tq>WhMeuomDg_Fb4Dmii9+y z=gGq@5|^07>n)CT(}^u`4&2Yr29|qF-_hc<(LKri9r^}WT*B5X$N@3gcBN|LfHSys z8Kb4%?*_<|Pg80lP@)X0+0UcvnzO;*?RAvo_tvNx#H^%3vR;hZZgB1^Jk|M8yl`Q& zgo#^mV}A${Hs3wtgeciW0~c2m$Xg=vDaV+A1HU``i_lee(go&{0@1DLBI{MC(k#w{keRp>2!pn zS+s%SxN-UC!5j=|jcz-+GdSgseJJn$P(y|MZA503{Q=AgmAr46_%kaaguA@pM=qQbi zWb|P%|Fu+RQtNzH^XJDidp|<51*%ssJ-EshH&gxMNxgC}sPCSs6y1Bv=RHG$+`i=9 zdSmI zsIz2&15LJo`Eysc+Kz93hijj#(C5@QG+ zu50eOO|L$FT&X$|SaA~+!1!*`D2=ED>gq~;0g)-fIe*b z8|`5~x)#b3xo}Ovy_3;K(r2-ldPdRe{uf#uO}+VEPRww4U~ECg6Tb@r!c6fS@5wPM zdYB2U5NA#OmL25MZU^Y687)7rhINKTx%vWtijPHV%F(_)R)6k!*T28NHF!Ou^h)+S zFEEb7WPDDZ!~=5+$_!Yg)SqSMiGz1;D38M&o3Pkl`hweKaKgJuM(&#XsTR1fh5$1($8X#R(sETUF^#3ZD z9mTiWuX!oPkC~=fC~!ya8`>%`p7>jZq&;-rCO|J#>?Bua|NUv`$4KEHNvzmM%-n7u zz+inG__l`7R4fjp~?SrWO3lCTs$7s{!Cx9W=?09sgsM<02S{z*V2^0;|5y?r9rW z2*MQ32Vk@FNuP}LY~kuGI-^#ux7inYvm2VGVG)+<9CI;Lr(4{ZPk1SC<1B>^NmxKm zew}#P;^>%;F5aRD6sf5A+mz~KTFJl>=gnW0^&j};xbAx7;@oa9xOWTEl~MtxSJGFG z!f(?rB2j)LD*|>I`8J-hbiyuSL`_HBiKo_VIY~}8YLzVBVMnO8S3^f>$2SFWcJNBl zapS$lE~&T&4?i{Uy;sCv`{S8|bOdkm-nHeQN5tDyG#Mf0xLo>0Y(h|h429F*`K3T- znBgoG;;dP~Qn~I$o3PyS9rirgZG`X*zRWQ}99fMqbfP1NFNDwd7dQu7?icJ>@5=vZ zD`QF}WvPED_+8wVVXJzDYP;IL2{nOBa8^kvgcQ1MC;@hI0aC)u<#$vyov!50`C_7d zq`lyLA&-M8o*>xoP4|UXQkl+$qa++ORne?}`s16+GOGH~nP+E(KJN7U#bLzr1+%WU z?!kC2OV-`K3RFwPKDtDvjWC%Z<6Q^)I zRoZZl8Rop+t5wNXVzA}4(o@RKr!o+B>ABX+P>S7T%S~iGF8VoadAzj!=C(Q!>DwkVoII^n zgY$}Ad{T(%ntnJn)<)x($H_v`s^b*sAck>MF;j^q`hG+z_vAF?7TzS?Om}p7Zl%m1 zG2BwU%3k^f4ieUc-9e7+chbVuJem=j!iUh|;?i0+&g&k2=3$kg?-R$Ly@$Z3&cBn7 z=^|UvWH|NI9A7jKKcvsJtm(IO+?CH%}@ZU^RiogmlItvyLyxi2DxF zgr}f6j-}h(6*)=_o;5Y;jz_6<-Ll4oN(|RV9!}n@^f2OgoJgI~ti?fV{FiD;&;pQ& zyVy4nFTd&V)jrz>`H$VLs6~*&9v5p|bkof!oSjr>dXV${5Wb!;Y(GZ)u)EG8EJl&}8oCY9*#jE1k`|A60C4 z8m)WxAU7f{EtMG(WO1kQ|L?>GI;>xjU{T`)BjQv zAN`}4Y%|C7F5Pgp71o%?m+(j}%)s|U@>t#Q2Yg0n&M-8{z|VALnOCM5*@m2X?cE6apk=h&XhN{1NKb5Hv=m9-J7(j3-qQ?3rA3_4t0(ao z5m4bsKlMVC7TwR1eQC;fbQCc*z@Uv8O_67)C1;cor=+w^dgl5kv?AXthC5iPGbSzp zE!`_)J0aEfEJndw@nZo77NdLq0IV!~^F?IJ9Ne*F|MMuG@21kE?|HxgGWLX0KD%h> zHbeli&sLn|vvY_h#L+o=$O|eKr{I)x?j7R3{sM7_BcgLz)+Eo#m+e4|@y77A@4nux z1aR(iUo)C+&{3E#Bzqm3dtA1^W%1a{;%LEAO~B+>)V+Au|Ek(slcHrMI{`SIO540_ zS3hIc?v%Klyeb(`M#hC;oaCI1h2yf6`;+tSi2EC}3{UuQEmvIL&yAqUI17$3es1r2 z=}GSnM0Cn}&u!kTM5t-eO&k|n9HM@($-QDu6ejE7$>!F_Gd<78uJHh(;m(BT66R@Z#=vOogT*;@N2mE!=guN;D%e5So8@0*W3n&ZD#+Dx=s?!UpBrfi4c%JUYT)9h* zGDkC?UTR4KFQP<<9_}pZ8JP+yjB2_15mFYyFo#<*4og(B zV;J*K!;gFF>1q2BH`ZI#`#l=tqO(jdC@f}M=Q(b&tI}m2Jjlx72&&|4VB?o0`4GbE zRrgj&wehw!Mpfa!tX9~`?+&NqHbMBHLPa@){Hayntm3ih#+e{wNbwcUoP_i8;p=$r zo3HUzrhFQ>R8A2`(tMu)fWT&|gbPySs%Yv{zx>8zdvr2y%Nx!Iqf+Yj%J4v>b4ekh zg+~cS_^+ka_&t@kyLoh-sXV?Z@kPrg&tpvvXa8QUek+Rwk>lEM*d7_Dhfk>eJ6iV>f zubGaE;HBb3Pq*T4WpXYZLM%%CsqgXgMsWB9XPFvD*zCeGqnTn3_uEAWuq<`Os;(_# zLR7;Md$r8H2v#Oa@513#AdPflt!H@&%yv%@bUue(l9m}xp136 zT9PSYF;Vd`-<6^c=|;F<8rFN(ey--8YCCS%C@m)lIqM4^4UQadl27Q4+1)Y^8*tjn zK&tS!uuS*?V(|A@f{X0N1a)4z$FF$irLAH8X4RHP`E%ZL<|Y)&1FVb6a`$HzsNMcS zp+QW9G8~oSL7BmVIf>m!QTWJHZeqB8Aa1hx=4}ydiLREHE$%G`jqA}uG1*jp!m$aG zu^TeVIn0BYi^7kR2YbAg+A7nix0t(h>kc8=ZZMEF2@l*d_`O|~k_f+|5m z?y;iVmZWy#q`ZJpgzuCcxYtKQ?=-L;npUMaFo$SNn$NYv-U0WPAehH%`g<eSroQZ_b$4djX&zBxT@)5k)SUQ9{;*je#Vpx$-+=93Fq2BXV4t)~-5Su;&-8Q7 z>ExzlQH-7m)JUCt0)oQcH8{S`Lss5bMfXPk``*YE~=3~G^{yUz0__vbjyG5 z)eS1>3aV_XH&r>0hc@5Tcc09f1eT|HlI6$?tuG5F?aLfJ!{+CO5AqZ@>Ixc6)ydcN z6ZL+0Q%m8|KKtas0|6!s;|Gi+-u}0xzgE5{P}B`tqurbKl6ESVo!vHntigE9h=jKzNw&pBel+06$`6_W=zX(r;PEbJmI~5djBl?*xi>cIrcDUy^qs8 z!F|BpFiNF92U|s>QASY*ZP&8Tp2U2yP+L`1@3w&AW^5M+4Ao2ZZMgL#EiP}e@@B&? zN5E%PGwgQTP11+EhQ)+^rRVmfY@J`b{Id~O2ScHL+re|#wZnBBD9v)QL~e;76gL|ic{oJiFu z8huOwoAIhR4=t00k;F>C-hUbql9=S(X&gL5HRyG#Cj@ z7fKPIg; zeHRTIqi`Xy-lNZJiFj?}0Pd+cUFTcvLXwJ`^plan>-!uNyp4^{vqlxXecmo_j(~I; zkcEph^vT@$zHH{P!=BM3Rf9rD8;?o8x9|j2e$1ap7@br+GI83 z2(ux1yLfZxJPz${=^o>RQOK_53pmTD57GT3nB?t$EvpNWr{vhfbxbua7IjWai;Y}@kMKblubSrxk{|J( zI{y^Lso$im4iaKRxFmDFfLR zie;$jk>^yCJT}YEWwORw5#Rtl5D>sH&U#G7JG47z@`0+KN?@$=G0v8-aP^I!o)N}o zFoz0#l~LigYDH$>66dd@Zb~Q!UyhSD3PF6PI7KHxB-m+xthZU)_jxqUYXCAjSgDf{ z3#x6ZpikPWYs4b4#@H~*E;E#>DA6PH{aTN}@hQ6(JNz*zL_-gRP`NRu%IDC-N)LVtVbyaQc@pW#4G8akB6CUzc9JS*}gJPc>Zn z2*1%Hh+;ec_|n#c8Q=6qm!^u9W9}ISVp5_ntD!p~c@430fyn;~dBrJa+AvpoMWD3O z8#-phI9~GYDv>~*s)+HpOv%thC(EQyxkRQf6pNVAa1F=jmu%gk1~oz{dCJn9M#93 z#}_x6*2|$7HNWFLI&ajl(|Zi%9)B&R(A+oB@;OrQ_NCGUH!CtlB8s^-(*;Sk{VjG# zLG0u>{z#hA6p_rEq7cnd$<6KTAVnL8s21F^Wdn{_nL^`7lcLtE)1NUzD!!MV?LEDQ z(A!#p&%QGBgUwwLzpQ*-xDOpQWVm!&GF>5IkX5BZzWdY7^lRU7#2i_?eQd)!9>>eZJN_x^Z4RvxZMiX%eKH1Uv4!Q6u9$|PW=qRB zTa%Wp<&`_ak{N{+o$mNufX}|(Cp}?v+ACQ=2gbT?$;x>ii=?wu<%K~%>K3#U3*~0c zKfSW_fH0~lLDNBZGq+TQIZ!XrT}LDDBLP9PhPmrd0m8fS!TgAXQ?Jy_#|}1q$~_Kc zJ%)*+LzYUvq~MPIhsH&A?z?o8I_8oK8`r(ZiHr?6lhe)8*6*Sf#Bcg8>7JH1`EWe- zy12iy$XKVo()^1K7qz0b@f*+fsAIMZjp@#>h@BggNq zg&mo3J`ifh&jyctbi_xx>@#DGlY%loYO>VgqmSj^sYDwvOa=ZLqHEHing`y{8GQzAyEuYk$- zy>UJHcvFIJi*e*WTMXj{A}!8x13s@SX_M()K_UVx+NWZszjQ7Z+Q)X(?Qa041zvBl zA6}8N4aVkTTg}4?j)VM1*X*B}2>Kp8_*$yK@R*{{q)eWHw~C=W-53q0>ZbMD$!AnDa#(gdK*W%H}UHu$7}-^>G3wFjH>z}58$YdLl>ZtAD_GQIP_JAz79hc|~+cNY|TZ+v14IBHD%oSmA)+VKMj^fNt%TLH^Nif6 z#yb*j)KKk!$58JZDMBcR`1Z(GL?>t%9`7K@0k-2MA#aPSB zS(6rBtV|{0C2?pTV?3Nauikb&3EJo$>Fc}WKy@ts)Vrzcnn$+%aQc8>Y6EndGob=lkn*S)aX0a6<6yVEw3@=TVBa*Um<5tD1m**z6wxZAQ7xOlO|<@6BX09yt_VdN9W)> z{s2*u2MV%=JIE5awf=q+)Ux)=%?f_#RJ)J0Nex!Wzrd{s;3 z(8{ie1#1TN)Z3$$^-gz+6U#L$dgUdNZU8NyFJd+JFcPh(QVfX^zL`Bp1em}guEwV%G! zchQ*fd61&z^G%PxS;yEEA$18^r?+YD&)E@Qaptm~L|) zMfvyoEuUhD^K&VAA2;8NEj@bwu&(##=?{cvVobFn4Ka=?(0k@o8dJa@M=35bI{vhL zQ4j|2g4NLjH@>mjH1qyM5@Vv{8G5lzfCOZ~N9@E>P#)GL5`TlEW|n++ZJoZeqR-km zf%H-#g+~hVPZLM#*-l+pd3o`>sO*wu*m=4BJ;6V`R@K>T-yEtsI8}Px%MkT0ne9d| zeZHZT~lZuCuo1+v5Y?;}liR5+)!%hf%{KOWBORKIZpI z!Kn%-=4WsJsiPF~43Br^5`T{Hq~919)ZbeENAE4c4LWxh#=j)S$@;)7LZ&O4$ zkDkMXs(l>A;Oa3K*BPI8Z8pN6KcGnCRdoDhQR*Z2<}U2+E~y7+TE$2v!aZGQiuW>T zj;I$_2KS=44BF)tC?>;N)RGYA>~C?%+;`G7KRJ{W7rEJ8D+pC z#+EAUCQ5ML&Hmc|5I^rIH3^B;vfikfDF4!(G^P z`bnZ<*=HzD16}U1+$uTVDve+q4vbYfv%yzEQUq^7Mcge)jg1MP2@Sua^oloKWAr^% znY^FM?cp_cSnI!mRMVzGnI8OpY*A%275TS+EU4VT(5rKSE&;wntA8;G-cs9yp)Ued zn+xyA#`x5co)nkH2F?V;(u5iU^QeUa+S=y-!_|MrHMwnHpfG!T zlr0Es6+}RYh)R*7ARqxmMFHs&dW$6i=`8{2He}NcRZ2iQgeIX$S5ZnLp(oO%h7gMM zPVS2Pod5gYn-6~S7uK_$x#k>W%rRH;Drz~qpWjI?rl{=ZijV7h_%lKsNowP;{IQic z(1S59%X_qo$QYHx%qcDyAGW^0h1IyAZz-UHgO@Olqw$WE1Pq@k5>l-(`o`m5@SrU% z({6ObG&NAaL>NE21xPyX%craIzDx3sOH-*qb(>KqEg-eCFAVzQcPK?!tD|5_&3dL< z)>xD%+p#cYgC=&G0VU;K&qt#I*9G*1l@7wvDfvtTf_m_MeLNI?s1>SYK$ds16-$!B zhqGR(5zI0?2Gl68J@xvJi$CR-zI30ahq-S>!_%f@FLI#*eP6KRPsn5ED0 zNW(#YV~Lo^yWRwS?dhnKRCFm$P6Q+xoRN*XNGIj4hBUE_qpt>fEjul{3c~aHH0uqx z1iU<#}h<#nN6(mRVjdXZssFzxjPl%}rnH{9I4}(&&Y? zQvKk;?#Koqd-_6Q1qrD<1cp#mmV0E3_b0lJTc}}He@yGZWQlDKTf@efw#y+!K>-eK zZcnat28mVFHppC@$JR#?jgE!Bj3kak3yV^CWlfDG!fvNY|F&<5IEZqv< zj71GTHf6}9{R7y3Q6Oe$%TH)mbmyiIHs8^%y28wbHl?vYZ+x|3I?sJ7q zgteWhvf)his~9Wq!7jU~u`kc(M}j{R##~|v0{&^MZ{kF3`JzTrR`>jfdeubkL70Kr zsE^7oUY|!l9f*({5Yjew9 z>F$%m4Y(hiq@@xIdu%RPyN-BT>3@<=`6h!mC_4DI6^@?v=F4m-)Atcn+N_4+H$5d} zN99H0d;Sw5EByNJI|?XrB?v$kmhMfI=N?hB?%;EP)IMmA$rvy3bbpX+OpEe`KdEqpS%&6Av7m7Hc{2_E^FI%1`(_aBvsA+Lss?T9h= zNh|nMT-I7PSZM-@2$i8Vl!#pN zl5m?J$!Zzed3q~T_b=hsZ#e{+d5YzIBOjo_c;cUlg4?MUB7>0l-UrA{NU5iW#&`Zk zyNjNVQPXzKUqwsQ#t82SgZ3%&Di6(&gUAlgLC(?-Y_GU1hZ8w`OpH-z(lM4Fm3Ck2 zcCj(14c_wXK+%d^vsCGUsgJFciqq$t~H3SP=aS=FDy&Vb$R zisf+l-j5kZ`YoWG#_i{<^VY&hGEjUOA|#r-Gd3eF2D!%yt*5ha6Tsg7HTX00_udXg znde829nl#L`P}^R069*aGpW$ z-KIBQbQuM(X>8xmshTOCTlD4oC zRxBGc3}2^IzOS?Oy_}YX_fE}`tr_oV2s^LT=sS0%M(tT9Q91$R#q#0vMmTw|Awm9h zBW61UG>RftFJG1$y3zZkS#4F-c{jkfqHhamZBLrq^&0afn)XbeJlP=$563z{jaIe2 z6FEBDWk#2nZ$QGSnN(M2q8aU#p#Zth@m>J|< zz1Xw&!;k>7_({FwAAxPJjK|(h#WsJiH}>2!F!9`7-CvP2AxpCsMNWS1=ppP{cT-yh zu=}6+NVGp$=vdKnPWsch|4}jvA*<8}6YtygGb7;OD#zso<}NutD4fwd{h0JAqO`_TdO@>5PBT z{i$fQP?wIH%-rbCf$`;{7PWMq)@5OdOlL4K;{&|<*xW82=8iESM={$^`FhT!TvI1= zx<=tqIJ9jarVxi*oE%3r^(w(d4f3xIG8_fP{nSu5T}xv~0#JO{29!n)mF`xupc-OP zHU8+sB9XQmW(q7eGFJQG0{XHdC9Xibyd2#vorfTszJ3dS|5z%1)Z0CN7!q#fZJ6ls z2Mdc}@-Syq6=L0L+;c_(_oH|4#KR|iH%B~qk8TZ6CLfElkB0n_P}@S1uwQnBT~2|I zk2=_#-guOP3l_&wd(GnlB(V5iFZ!PC=*< zt;_2gr_?So8t;?de(0?v`&oUi^u@i$xrQjFZGSzjud>80YPWf!tr{Ku!?Ht+b`r`U zV|u-lNvEh!#9t-R+c)W`lwcVSdb>;PHGC%DAe?+Fak#n1;bxur&8wMT1sFH%EZz$U4I4jp-GZ4 zvQ|s}F{G=4pXR&=V^a?(jd^xAe-&!Kb0|B`tV3it!XoM&>65^?Av03m&|?|ZH;8|S z$g;42N^rvY&z4XtEE}=K&KO@DVP%e!-6IxEJJ|WrU(UiJPsN7I`CavCZZS^!v;>ZC zATiGA3hz<-y6{jtWqUrBvrR2eESj_eazxLmwF&6&4_ldRVdKAE(X$`Dv6^>T(BQ^O z_#s%O!Nn$U3rC;<^{q>Y?zICML2<8T%KfeF-0O#ynwzy+ZM_c8nb9Mgdh#TRCdpu;X05MiIu9CRFc^F zncN}og{4Iuw=hBUzqjvo!0nNyHn!aCU69J_MKfGu2^QQxNJ^tDsE4&Z=9!{KslPN% z8Thw^$*|$5rCOyCX|v)aZRGx^hQe|e>#5dSta`OP7}u3B*B(hE z2gG5>HMI7dt2+2o*w)Lm_Bo{Z3xjwLhxYbqI2w_06v{gH6~)i69#t1DkTch`i~oT3 zL?bMn--o#-HM-BwnlBE@c*1%z%jd~q>uUp( z3+hb1_x_I%*$*q`fkc9o@^)l=yX-f#T}QM8B~m*PJ`1}TR~0E&_n~dB#boxm&AJj& z8+ia}>>ghF(%Xpbh27eQ;`l)N2Rm+QmYDk36u{f2`U*@ttD-E!Ss-FrpG58m(Y@G9L z84}(KD6VeWL=PO`zpY^*w|kigpM?X^tEeoP#)F41hatN^bRSq7m)4ms)UGVPXR02QpYWlo4H6vC9kENr_FWip`x%*oX-w z9MjV{x?Hwa5IwRiCzy=iwV^)YE0IKcJz4dgQApskJompQ$UTX%Cfb5hppt zF<$d0qcTBF!J9lXg_xSA?0LvRZ?T6Kc(H%un~b*FlNt?vU?^43#wl_;PYlBj}Nr(kT2)mz?lH0Q%+>O#%OCU$#Go`{0x*?6Amu}PxG5XTK->PPoP$kTuOqsn|koXAdGma z@)o3YmGg!XkJb*QxBc23vXZCmKw-nH=m*$N?jN_;8XMyT1H`foJ~Vq-{yE3efEn70 zgV|7UFCFYES6Rp0_g7y&-M{5_@xgS8M@MT)uVr3j(>+bX4<8gBO@0$!DO*xC!cfQ3 zpiwcx*>7dKF@+_|6bA7z>Z+)Q2QDOac!8jsuO_u zxC5hS3{*_eQsY)lHL2)?4W;cjhg|QAdD-3{`K2+X=`XUf43tI?_ly0uCRL68p-*hm zQWdKuu*S!gEftDGFhJp&Zj#3fbNH%HZ$j~j9(9<{vOLxC9iEXyR2}`gqPZp;-T1+X zwLR7WijT%eerz(gHxPVy0CTJ;KC1J$vD6=CGJb%upk5u7dHru8QdrfH_ieFkP91wN z$}3r`x}2woxc}~qh4&mAOl&xllE!q89HCFMg~;ljMgFnxv1>`FRG(Vs8ii|P(jFM+ z)h%DwV7fsx!gHlqj$4fPP*ZAT^YCwC6tm+ypCW^Q2@pAjX6Hx!VF}tS{;b^loBf(VEpgbVx!}$WG#JNa`Lhg@iiIF=B%Rh_G?W&4k|~z z!;1y6mZBCHU{7nVZ)7y2mrTgtQ%>^QnZ%5i`sqbAP96EpSYH>{w0H5y9qyE`+A^vM zb&qM1RLz((wR`bVAND_=296l*e|f7KkUE_PKPx5LY&MF=fuowHDnj6mhFy+}f_Ra> znUHKvB!I$9;{K7DF>;7ktFOlW=%(lWX|6MT&RaXZ2Ip-bc#yupE_%jaq>7QRSd*l< zC!bzjSL1B1PNBCSjP+V1EnBU=xo>gBB6=k`TKDs4T5-1IrPWtZH+p+h5}hSgmy9fP zrhtoDmrvAh*vRi?c3Eg9|E`&rR^`6U4Ue0Ro{=_W>snreo1o=vx;FtW;iu}soR5Ooc`+hBrlnMQGxnk!MV=)o^t@obQ z$aXYzx5>by6Ck}l2ov`GWwE7|89;cIQ8)>L&4N8qCBgq2j$**1;~$z5fMbwdo!8uZ zPEkCr{y$rWJFFQw0Vc&sx|a8G^PT)-HpHz5rjKrsO>8Hs)fMYh)GM$RXFq9Fe(Q&+ zG~w>vg=hFYyE3)Bn}u%X)=gb*I8NK5lX;`$rEd-6|HLMtbAB{h+3V#;l~OQ!?Wh6P zjyEQ6m+jl;RdOogoZaK+0BD4vbriM9y3g}rDWHTda?U}bG!U~?}dDI;OBKX%G@H?jBA>e6@ z)5G#FM?7y05fV;?8c7(alz0>tLwD3`>Z@rP)U-|(g|imCJCV-t8%^1Y=bEhIPr#Wmx5@+}Pv~~4YQq%r7`V^HaWVwoq2 z6mt%&o<-qflW^G#mvnqjx@>|wrCVzz*_{n3>(CfR7GIw3Gp-3gh#!t8AaSrqzZA?S zSol=`dZcr|G)?}k1ycjoW)w%u`{2`@xl4C;k6FNC#r4F+fwr+R%P zYvd&^Wy|SOuL_C>UqSiNz+Ki2srtBI*h>QBTRzzSxk)P8RQ~A4;?6W^kh#KjIW4LI zbZgGKSR^Ldg1;L#W4rm~Xe}s0Uwnd}l2vrKh>w0Vtbu!k>8T}#@kYa}d_v>Hj=<7- z+r@?bkAP^gJbWdK^qg}nD)=6`xo`m~+h-kD{kM2R{&&;SH<6}GUyST?Jb#_hMm|(M z-c~nl)_Tmh1>LqQG3B$1n@_rwU*T$dKHsPaK+F^%snxJ&g%veSq|mJHI$Evu6J?`N zCDHMX&GR{+Aq?$^nb#d~XoxOv@Akc|xmjw_ZDIacK~F@DSuQ6K;M4 zh@Cm>utE^@6NPMKOP-WSwuFAc<%X%>GzkAuH;t8Xn(F)WLe1*=T zOG}p54arH0_}YFdsTu7$fWb85g*2?Qe{@GcVbiAsjL!*zmgn5S!L$A*To(P)N0RG5Y7+2mNM@> zILYe=U+Ly&6sJ8(Itna-XMG+F{>9AKa|I*cGRsYy*^oS3Mx|M7;s1Gv1`cDd;Y@*8 zr^`CYD%!rHU5^p64*p@l3nIZKSTdqtxBw(n8d>IJtylFCbB^TbAv3<=zSH_6Kcl{m z18UEXqvpbQZ?PeEYO*pPM$7bUDV1nmzxKg>q@z|k$kcBKRBwgq9|%w@NvV-Ttc}j@f|r*ni>)Y zsy1kd!sZr+aM*pM6u7mq6+*YQgi=WV_u(a z#3(v_z@k)S%i!M4AT#P;g5;O#_3?o_y}qiYekO~Itu2$z7I+GrGk-7l8k6>FO|^G% z^wi%pYAg*@M@m`yEt>}WWfiSWed8}*z~3_+|7;}IJmLH&&_s9uO?vaDUb05*#`tPz z5bzctl2vHeVeRrVTz@&hFc?CDkpv`%5qI{wlLS3jpwyFxD`ArLxg7-UYVVdKJ$IaP zZsK^`^4dMeV7=%&t`1N-6iL=AP2Ve$ITs9btM52nsFY(?IYvE)mx}HAR#=#C5XVvU zK}&NpuCRm)!x7b9@Q*Q{q(~a2^$h5Dx%SuUQQ5HBsOsK7hDw$wjolT)GddZ|fd{Gc zzx;1rYd)vHrSs%>1~NwA=y8y3-Gs6A#QExn9r%VT>BBucJ&&U-yq{wB$9^nw83CQH zy9cOsPI+-^?m0--<|Nr#(8?B%V?Ud$JEW6ioDOYkcCOJ+LOFwcTl;X50+e<=-Fx@e;0LyE&pqCjgG-i0DslQIHZT3fe5YO`lL9jyvF2F+35_3{ zxKcOgG;%S7fh4Y+}Ioj^<{Eiihi_N*> z0q%fXp`LxQ-$z0sx`-C*cz$oM2m$(!5 zxCHcQS)L!`CVX;qwt{xMBsGd4J!ieujmKWJU5t1&oBOBmqOb{C!foNWgjXmQYozq? z`>5i_R4;j!MbNS4BgK=0W6_w#iES>s#VK5E$Cr;Q=nD{?T1m#4*QcB355~9dP9^Q+ zeSI^_?2Yq8lx!$77%a*6-fK~xVVCfaW8qYo-P$KYcAc~ zYulSg+0WBa&00)srqvc1smnROkvWfEq)RwW#8TFHZw_yFVx2<%C)8Myk@dHhfgPtJ zQ7va0+98O3iog5RTJrDSu~Q{xsv3|?*=5qTxk>u}TP z_SmgeW^1mHBn=hE>#sDUrmHW3|C0wI)`*+fKh%kR4@9~Jkr;+Db`UE2lJ6F~XW28? z;f0Wh45^Q^Xn9&R*LRtyz606cpjuF7)$8-bRzMb8S)d*o{&71Zjd)m-v?lTu`dfl# zY8GdHzweYW*0yEL9u?%GO6t^)&`JU(GX}24PK8@omz6onJK1+3l9jU6e0~jMy4gQD{bn9HC z9OOV>ssnR*=94)^3EqJj=|wp;L3i6k><4% ztDXiCB=h|i7Jo`JWoB;6mGeMm2GZNznI*H;j?H%8t#o!{9Sn%T8{_7%pb)*}$c zHT)aeC6TA0pkyNNu7p4hX#06<<@!_Tv`~7E#-I6QDSgdwssMWW9TDwKzK=P{x#~Mz z-G<^%>g*iN64@IqtPt1qII?I&dU+|XUdnpcrI|i%2n5CCwCq?xJEcT4hH8<5U)|=_ThjWhB9Dml^W^p z`)Sid?N!>0168++L3uJp%9Yf3^A{C5PL(Cmkrxstt37P{m2C1?{uviRO)KzSQ_)f= zei?aAKgy^yjw4Fzw&ZYdkCKH#j<85{Zhs=?yX=Pi^9{YiPETq7iT(v5-1r`)v6Qox z8uw-+zV9IGcepOftu8ZGxB~KCDmLbNmMPFL!)Gjh_2S01Yg?f_M@3wN=NxMUaXtVX zu&`X+jZdIM;?*z@l9P{kKLB(Cnl0bQ?fSZMORG=?89je$2&N%MT&IlJvLC5eHe>H5 z6m(jbn~PFkRn10`xwhV%PTG?={Uk874S(2Pu5e1+1$GoPPdy*T>+@neQT)oLnwvY? z_Q9ZL1Yzw_h+w|3k?kt6UW}2Y>z)OG<{{8V^z=tYHwM$`S+9%fOf`JYF>`r_R2R_E zVZqKDTrpEsR`hCl`&MU=n9>2@AUBxRBb%eA$!iu#&D(Wbbv6BC z!NF!&iROo{>+JT-s$W@_L)J}yMrC!R)5i>Vsn3yv>}T3GVvcr>8?%9hKMbr`=vC@K z$Gwv9|H?fRp_Qzgsryeu`2~AKzplT_pm4$i?zd>m7kUzIj?MxGAH8uh=iqZuU*R%0 zrWx^|4c?Rv(|_6tGcM!s6?%fQv|KjV9$!SsqH^vgZeVi1tKJh8R7x+-kleG*tEkJ> zKLn?V5ZD`~^#P55F6^NXOGKO$iF4EZSR=up5k^JP}4Zv3>f<@}BYHv$bLEvAc;??j6CaXBw`4-Fd(auusR3NxLK7zdZPS zlPzSgD-Be|pQeS&-+?+J=IO8OaU|sva@p}4@@viCgO2P%%}#!p`1&}}XK18pOzXld zdmFER%ZgiIkDrO5s!uNRI9pyuCfkK7`?}WAej)O9?1QgHbJDVqk}*laL3m!3&}F9S z2lQ1W`!SPHtjllD4j3dbmFipmM)>V_wDyP zvJ8&Bx0=L6XJ%92WV!f{(k1LCj1npyc3^GJNG>k!|HXW!hw8)MA!%-d9fbiEnz~4Y ztguurPJd=WPE~26D!Trvdl<3WN+Rbu`mzYdU%zN^DuS%hIFaJti22%;r$VMaTst** zH+WpSAU&ULy7SgV3ah_B#*^=sK%D=#-cc`Ut9@fKkIVsL9H>Rx(Od&7TY+|D z(?qy-{$7YYGYTyY?C9Tn7YIp7Qo*cR8xY5w zZw(*w^TDeRVA)=sq|9czl1$&Xxbwc*EMMrBB|;3D21Y>F6C&8|XvLwxP}?O+BY2DIHMc)pk1oDLz4}`mjDEen-qxJTv-3*)fO~Q z>BKc6fYs9j$t7zz(iSuu)tg)-lDnijn>|46+o_Kp(TtXw@qpsTR_meoaRVr@6-`Zx zVf*_BA#~mDKe{z`TrFc0yuL-`PfJ?wYm?;5WMp>01?kU&8}g$Ywobz&~KG0<48Zfy0X>Wr-lJB|F_R5`;Xr)E;;I)v`j1`S3 zuRxP3e>=U%`wxcC#LsI@T*)m#6zYfRdl^BAi!rG&bTMA^p%jDqt!%oF*pM>fqJSc=t-p6z5Moat;1KUgT;l zWGn}VRvc$xK^X&A2YFt(UDrlpCZ&RJ?(cQ3*5k>uLlSI-BaKDkamOwC?$V884me?a zfvl-?O}Gw4If>^(>*^KyF<%k+HDESj0ODn4bRpl0SIL(|bJ179e6<&nd#O}za9H`n zwA5p2XvnWaHtVO7ptxJG*I~m0QM3H=(*P8Rr%{Zxs2qZ|<2Lw5JO~LVK8z&nA(8ra z(o*9Jq@Zso{{-s?PEQ#>*Wr;69Xk~K!**dYsD<3t8{wdjh^|_b>JTrFXSLOEGm0lT}2Q`cK6Ld4Wy6P4}e7w#`A1W|b zbDMdr*XksiXo4mlbbrT;;DCb5BOB$=$uR@Ho`4g~OmgTR-5a*Qc3OUSGp0X!cYOFz zvAM|4X7A0a?aE~M2r(&W90)XB_3-NH*pucrZwBY-q&vh8wN8$uwsHDVq z)YAD+qy00$gT-{2V2ePbt4z-~jo)KrzoB;+F^b?TS%~_o22dDdQ{z19N_FX*ra8`tfop6^zo}PF9$jZ_CQJCR{DiDve~B z|B1U}EkV(!-dY<0M@~AsU2oblZ4;ynC{6EP%uYQ5ZKJnCztQjHJbRVhl3P1-}kt5F#XM|Ca?vM2RZt;^R9l#*l))R^dPzeiF@go?kUIV&Bo@@eF# z&XM$^UCtBxr$;21mMSLopL4Iq%{co?27tBP?ScSby7MPt}&IqMQ0KUBZ2E z;0B2&L4$#7^D^<6%ll|u7pdXt?Z=8(1Jv{lS{}|;P`p!gejy)L+;Re_X+ShS`(JNK zWOVByR}^{2lx=3Ir7cxf#H9l~K?R7~g;7zRTyw_t&r0hJ6RhYJ?*ryViA#e*l^1VJaA%YST&(syzz49{31Uu5ye?|4Y(XDNNm_- zK-F{70(CW)L~`BM8gL><-Jgig=eUCAyg*s7cW$(E#-p3sDOtdrN9^x!n`>{M-9iO* z(+Zi5E*1ff|1Fp^7hc=8%DVh^P1UPj*bXtHjbs%@NWp-XL@gj4@sWqY>kl$TZ4O?h zDw_!oU30s5QfbC#K7Jl)tSkYRJXl6n8i4v%3qFl9w zS<$tQOXikFo*&cAza+bBo>!U}IKwL*3LQq^=3CH4be`Y>Ank@nN;H9%O56oY4Yqu1 zoXD`jHORrz9l^oF(rE5p9W+94+EkTC2(0}1X6SFt#GRLm-)Tc2i%CdLjBjT~dP}uH z&dG>~Nd@0R#=NWZq=AjEx$9&?y4kl8EPJG|u#C$~TDkH`Iw7TnEw5828mjMOYdlZ{ z+H)J@^d>M7Y~Y_2wx%*rRsYfM`&;=)ilVsN-rRMeqYco)2VWp_3l{`>-#TP1_hSy0 zdhTyk#KyNn=zqiIbvcl#A`9u-DOZ&$Qg|KSene&lF?q@?ihn1QAqk@?xD0ACC z^q7M}v4bri=41wbcMtMR5|5SlFBB1?GGGFFkAo*F)h_YuxGMjOzezCxZN`h5qBX`Z zfu%`$*K$=ixuh;W%GmT#AvXb17k(tNz?tfI_tXKf-StlMw->Hun(`QTnjGz;cEpo) z8Zjvm0X<*MK}$)YzhGktDr>TihIY}?isP~?E^Ex~=ZMUd=-$VY3Ilo+GV5FzK~)ZMIQ(YIKp<#+w|I!ba0dmaNgqF_iB6O;Dm*S6K~!(Y(tdBvXLd z#%8&-M=lgY{iEA+AUk0%s;VJf;_T zL;Gn`0{j?S9THKY3qJ@4sX0e^3)yKWUWV+P%|_>JCkB@F+!rkt>AJVMqi_G5lezWI zDhECUuN`8w_Xc0u5<{E0V1Kz0{KC(*C19vN#b2lrXD<%F-U-ck{T3a=9S(CcrmP0W zTRXWbZzmGXVrQ&hKh0N}=*#zO3F}gs*k&Jlx<8lR=eYM#As}pIBm-@Pbd`|(vUMIi zp!dS2NMw&FHa!ZwYxvgkk;7PhM{SqnR?BLg4oN2w;-b;vSc#mzsDUU}2ZexJKrA*B zFl|0_IU-1(sOb0s9;obw0&~^O&yT->j1(vt{L`OLK3Vl~_^L^l9{it^cMc5^xT&;8 zT*9U7_=C?G%7eL~%1OeOg+eA3e$;!8HQqO^ooeG|XEss-9K)PO^kgl4V8`bJO5(te zul1QTvb?JGU+C*-qY(Wc7G(Mi6@!Ij@y}{Wn!s#W0`;^WWUymJQHV;9sgpfM1w_mC z)a00;q@uNV(Ibipp{Re?1{hr)VlXomX!73|LjmBGnSRq?GRocj=wyg7t_ zJxxhvh67U-t6^68U;$tloL zulS9`2 zgJ!Vyq#_ys(3he#=h8TRMM3d6PC|68xeZG)Y9^MW_AOhB2+j!1CeItayr{ z70k5{+*$!MMUK~D>gYxSS6eiCsn^sca}66EUu!mp8o(5mGIB&<>($ZKL?(PIf@%+ZP#Rhk%7v1lvLv z=$L5;F&F%F*tx!GChL;gf?!lc@Id4eRMthFSf(au|w6u=%c_pwUHw5V_sBy!*`jYZT@x{F3U$z?m z3{2%KJXdm{H%>)k+5Lt1o#-NVn)Dp)C&{gK<%^(cdq2wb@SdiIj9ZCF9=-jqS=1I! zD1AQWOUhan z_mBjW>u>MyErzO!fzr&7pn8LGC}0g31fFj2)4NWc%IN51zFTA66VfMcE)C&wq+)_x z60}>t$*N+W)rzLv_qe0nFASP{W6cP6S_lI`|nf8j>sFza>tK-~qN| zrpUj?%hZLoj)=)i`m>clp%HSC*Web|5z0E`__R#WW|^}0SbCR?eB z=YnrhpMrr=i!O0{v=8TC`hG?cV^ydH@EiREf~?-gacD65=AjmVuu9-k zrpf~&Y=7V-y!V`!m{UbGJFcE%&;a^tt>iomj1`Y$i^AUL4Wzt^e-(^RfTmH|@yx z5_5LaO-;&xzoKJ2c=OGaoBxHdRJJeWM-(zn#ucV3hucD9=vw0Y;iP#|?JM+jk_bL{ zO67fA(eJzybg z;|q;U@>g4h@@0L_=1B(Ms%2NVS4t9384LibZ&&~J1n^{OxP6?p0mDSF_WVGbOFfq2 zm;^=3tyhY%ABRtuCMQFpO)C4)7z){4FuBPxe4+@^!vD4^CT3vAlBx&_;`9yXD!PUL zM_iu9NCwYI`#idZKE9Nx5@%PXf(P62A}(#SPG?Z-0Mh+@Uvzz3I%(*8t+8@LtVg*n zFotI+o@yot=r`oSi{Jo@njLkZ1Q_V~NClH6z;!Y>AIHvf;+TqjQi3eEo@${;$m(Nk z6R?Sy%(ZLncA`h{Oa#UPz3@9efbaVok9N=vcODZ%vFuK|<#l%*B4^VTk@)(>XKyWF zsF}xa{>GPI=##f!g!VLe+=nMYm>? z`_;~?OwS9ff*h<+6sLA|V3oD0OH3%obF0*@&gqT+_dq&wktu$LXU~MYGSxM6`(D(NH1fn~Cg>)^#a{+9 z3;%xR+D8J9)YmWm)Wn-QZ3-piy>~EjJb6b!FRMzzr#~~#uzLS<#;EthNUuR}EzncD z2x9zTs9%CPesdcWiUKo$Pu4_k}E#j)AP}9>bp*S{4aa#LqN#sXOhLbxR0? zMcQEe&~xt|g-fJ*pb0)duMup_ zam870xryp&MKuFre7wX3c?VNBgUZc|U|u8=3<=o=%UEC}G4vFb45nce>~L%D^3;eR z^D&-#w=BvGkGq7u3jTIbgrd=2#m*r{JB2EIv?9_J z6o!~R+>>gri@!H;h~wYkp;(L7G56npSi(X~G`M!zQJrq_XD68MG*^m|s}aC~%Yt$Z zFXvRkXFY@*qk*ylOq7;{e-WHsK(WEFEmM&3z&YnrlP zBMPQijRra(0Ub=jUK_3`wp>{o*w~X|L8@zqZ{z08+T#bV1ZQ+Zhzb@m7Hq$?CY{`_ z2Swydlm{~-Gg)X@>EFFwFr zE>i%?um&zfz~9_{)_*`SMnvR;O|%HmBydD&h?a3$x=lANK2IO77P)QhL4{U&ob zP0M+1D8BX**b3%2Arxjgp5K+b{Qb#WOe;-81Y~&FQLlhxFi7)~kTO+W8twu{<`o7j zM}F_S^Y43TnDaD4Az6nZrVk7)0GRXX7cQhZ45O+GO3kbcGU~~L4RyJN{)(<_sOpsT z0M68!8`xh2TJBcDo^$pTyC`uGwI^>-h8ucAc~8A8gq6-v+b}23*803|uNr)^ev+_X z|Ag*TZQ%ZnxoQEu@4rH(+_oZHS(Q_JBfddhZpv3jndRj~e`QR97LmeHJQ&DXGtW^; zY=d15Y)W$)-@ahSwxBkn7sciAO<{D1^l!`nLGj;NprIp7hvR{IDFKw7RZf*UJzjz= z&ZmgxHIPPMdcfG;GD5GNmMQjdWpqW%|I%?aQ7v**q_vyxj0_9O!fjSQ1@{Z?Uel}p zWoL4}kG0J1Yx#)VKEo#aaI^n0dKji-yq~u>aHenmyHl(y!+1Jqj|?w8JX|+Iw>)9M zc=D~^`{_pIj{2yJHsduoR5$)aZ?ts1E9;o9a5GejGcc%k3)MBj5+Gh_gpr_k`2E`n z56+%YPV%s1CPu~BZBy+>frsBc6cjPa4z}qsryw*iNSE0ak{@WYp~eG@*v$Pno1>N3 z)4p3icaSvaV!!ughH3B5M5)^HR8Bm|G}78sLN(Rx z4JHlLeOw>Q?-ZLENcbQiD?8w|f??!09ZZO>y*u=zKC$~xId?N{)8L-aS{i-%+SbYD z!)j|2_%E}Be0UscFaN@p@?@_S)?ZxSZ!AH=|8&Af)x59$FYK*zo4nKaMy!O4MlX}} z!ShCP6F^EL9q~>OFH1P=qIHmv4YB*~0g;MESLlLQES7%=lpNS+_xi}W4J-A87c^HZLEUAsen>bLkTtqOv=m>|6`G1IqrP57X4(Kr( zgLnJ)sFVKbM#QGQ&)f;i0oA(LWoLs$uduP;RV77m35%K8m}|RM=EzoiML%^sz+Q;1 zF-He5h|!6Wrq4t#fF%$=IkF?=RTBqF|G$BA>UJ zQKJ=ja1b-Q^3|;Yj?OncRPBMzB%^Tir$*F)g=96OR}DnL>0RqViopGV$p~l#$2*6j zDI!Q(ajHb<}ItJNHx4*1ptRDz%YRu=&7(}?tu(j3Q$Y7cy zSXgo%@f?+@*-ZpDL<9`{zEklkU-BiVdwAQ6Lz3Wx@W~F9>pbKFK6LF}&%&sC1WGIB zPSuw1T0b2U=o(H4J=2`Ymep~xGipo6r#K3`VIdaL%-FjphxFFTE)|a-Hk?*@2i0T_ z-+&aBFvBI~DLr*;>}kM95W`Pr6yLnVv|Wj9>#50=!XTmaT7oFdGIR^3j@7sIB=&ek^x>iBtlU~b0@mnA~FK9kE`L|aM?kIysm-c+5GtdRcI!+w~lZ;i_5 z&yV3v+2QqyL}dgA0*N?qCknbkP#&<#2zqogXl+WSf2o|P>rvl(K+ZBuykM<8g0;8F zxttN$2)!5F#K+6fTg+arn5o>YY;zM5k3xQ3FQ_#u$mTs%$9isz&cBx{Rd9mq+-_tv zTrsl}%eNhV(Uy@7Y2%px&p{pO9SVHy=y< zk)SAl^KQnGG6J;CVL9pY(Vn{LT>@asO@yy68*pD=GcSAMiMU4pKe3D@77?Ev4;z)( zG#ewBhswm~UKMm7QJQaUgBvafRqIOaEop8Hug=U<;Xx)D!F!FCt4nQ;V^Um&QaHMC z5c{RFb3Sywwf+poip<7*XhxyT`a#g)hS|oj8?h5gatmC|wOs!hyg^kO=BDT^)eEuB zbT#kTMitcR3VJ@ki=C0(KuHI%zeFs!i+4r?Gj-n_af(2;`(wl&S z^brJ<-g~hSiZtn+s0avBq=gP5J)ueOsHi~bUAhP%^b!aqkmS1ob!NWbKg(e)N8ZbQ z_uYH$DSPje$eX>@K=je|D_^F^VyR@{7kKpYnEeUzemJbhqD*l^ZbaRIyUPKL2{B$d zRWHBz{?e3Ix<9tiU)5i`9V-a)BW8MUcT%ZrG+I4+j(c(;u#`d0EM0lkORHh8?Gn!E zAd7j&dGoe(fA{`gmCQ|4X+0Cdr*qUIi58hbY`q0)m@hz{#LKF4W>8V#MzAdu8%VR` zoin6@RZAUl^LcZsW3s3f-$h==0bWyN_rjk}|? zZ-2<+z1-8>oMO02hV?TfOWiZXR;SX89#x*MF|EACWZJ+EbZm1&pp9yN^~>~SQ&ciU zIIMC1eeF_W{9sIRy=~67i(2*O-fR6&UN7R}%q}H5`ygvX^8_04AD8zLlRK~1{56PP zcqwdespFsk&PDk-bjUt3;ZHM?&b8Co+XOr8hcm^AV_(M7`L%bXh)K2Pj{93nj-8dL zcKtjT>{6wd+k}$&OeK@yOf?C3S=aq{>L10pob&}yWh08%GUtxSn1UiPaZ|zaQq4Aq zfj8}c&)uNqFDB?P$wslnGv zFzd?@Fo+R!v`@MSsz5YFGAOq31g?8?&3k;DpEbI>9!tGh1G!$x05H>0_00Z>yjG}9 zd!KnaiWUR&K#W;MJfeuk67l^sI!UunRzb176(xzkePy*ON!BoezNf_#T?VmC&tCI? zr_kMmr0tjDj=<$D{@pt|?JJ@(8!u{16&TZfu@i0RMFzR;iRo`;gJ&F} z7TZzOtuBsU8dzxy|K_B=%sGCoZi%WhT!BFF9&>xv)|~*(ys;)Cuo^zaaPiHW>th`W zx%@b^cFtD3v(KmWB4eAo?#7WSniGEC3{aDmO~~Mqnwfnxhwr1?g-fD$n-)ati zMMcM+>1JxEt+Jw)+Vm$Nq4z=xR+4Wysmb;7v=xUXo9q{(JDe;Q(VE!TSB5BI&Tiei z5KD4vr%u-HBs_imN6gMDNTJ&@C_m?ksQckQ_*kiQ*CZXRCnheVTvN}o#PddySfs>U z#XYH=!3)UJq0JZjX(Cnatq-|u>XwGt-0H3umnzub@+S?(gO@G-X-F!K6KcyJdZVYZvs8z-wW@wzRpWCxh9zLIqr6+$>_2b9S#v(t^oqW>`LS zfiJhy{&F0CnVvbXFlVrMyTVra{zc?t9guX=1+pJHAH&Kz@*u(!6)KR_Ice2*I~xkN zgas4Aul4jmu5|f9AmG$L1jX%YB|sVJ{5$zw_q4vacLpyMd2bkcfR=Zuqy3`wMua~` zJ1W{Wy|#UDM+R@V9p@IE?HbporO@0}D`L19`mjtuh|Q|@@s`Z0UD;&u8%-qUvc=ss z9B*v)OV9>8Z3#tn&@#?$A#Tl;)QQ*AbNP|yXVpSpF+k!9z__p zgb5Ngs*@$3`;#j{bun7rWpPv_(0PKR;T@K(tLkW$O41;^WWnNl?JadHcYMSTMJiAv zI5kcepsU{eL|2W{R>^EVQUu3<316~Tn)hm_#mD_E+cl9eaR(+YZ9FjWjjls~!p?gy zEx4#U@oMv%?-UagS4bzrqQ?L+k>%!u;B~6{_1Y2roEUy70z+AG?7O8h4H(dEU3re% zRi4CGPj3ehT?>)UzUU&M-4#~n+=3JOP zBE0+P8VQ)qYf& z%dIyD!si|N9~_JODTT!PUiu<0Bn|KlDLDK$0%>FxR&vFs4#5b=K6t~Xsmv@!u94VH zBmnb2>?TB>N=@iVEzV5UN600M1u@?)w#7lJn5wC*-7_|d7js!opm@R+R$vTx4wtir zkM~y5W`bkHouOd({3~H&USY_Ud0S>xwN(5@sblBpS1mioSF(mIk&eJOzNrFmAvIyN zFidr}tl_G_&ixDZo5bxBy6{wS%bC_0*q`_%W`Ci5e(&`r%h)Og+g7ei2^H~Q?9~PA zH)>ipu0ofV%Kue2V%1Fo_ONHEK zE_qJibX}2?YPlz{ls1=@=FDJSx*xdN_YBEU2mXSV397Tn*xmWph3_ zlhV!ARk!K1xo2tO`g*V0DIUmRY0>Ai;oN1vEp+vSVenoYm9+4e5|tCFtCxjj_e88duLPU> zKUUJ;OQA2-fcaUd&T^Rfk1g-a2s9<-7w4LLmhIi1IE6Zm+aB1OM2`~^7NrI8ryyQw zW6YaYBtOh@N_o{!$zIdcG2&W(h|K;RndN?JcYXa(VCk~J(hX%gK8w-iLaPq#Ri|8d z7g@IvSK^Enm+};QRIzex_n@A(hHh@{n&;bS!xOWeSGynpNe4bg)W6Fh&rww4kI7M? z__!*eA$~=!VjxV;QblyKLgbpMMu@{6iFr8VShQBlngyYH?TyN?G*M|nJ$KI-#0bJA zB~VASDZ``9p~5F@YZqXs%gOq~$qS`l=$WApL(N7U$Wg3aTFe6bU&r0Iy?JBVv`SV* zJv8O+9{|@e@m8?>CYZ}f)5r07RKN`y_h0H))~gA^q-~tAl%cMhmfjpkT^3^7ZN}ZY zq&&5sHSOleM0ba8>1uI(kn^Yduiy~wu_Mj}r|XP#G|fLQJ{UzVUAHx)lETVXw5Pm| zD>PSjEb|+6*s7pY&2x}bshPVf^u*0YiWy2~sFwk-;07SwP`C zDAx@R@`F{fip_%8{Sgjv(c7QpJrbg-dGrc2%8Kw-&3UF=k8&mY6<^z28c*52EEHEx zTb2J#FULV`g(LEQ4ia`NAuw!fq8?uK<-Ev+8b4KX2$xCr-|FLA&qnlpcOe)jk^|-z zHAC3J?sTpQ)Z?SLg0pw+{X2a9I!OM`^3F=63_{S#%s!`1&99M%X*aTFWk20t6YRgO zO?%uo&`Dz^jzxTLlwii$zEVp3R#qg^a!yFqV|5_T+<4C@Ols*0wl{t%q5BqgoL*&Q z!na8znLW^X-3Bdm6c!Yo`js=={$P5!zQgpghH3k@7EtgM2NMx>-t9+vu_&apdIwqz z=gS#Pu87E9jvIrx7O8~ew{y*t{LFmUXmtJiyeRq~xBH_wQj61|`>ZbeKIzcxlT6SE zF8OTUxK_ce8;$!l`W@0!#Dmx3^BssQ3PQ?%)M2-37T1VoPaNVkI|$8PI*BuC!kK>B zkyTzm_YMXg4I8lropvjOf+iz|EZqyUh*c3=&evyF{XdPHr^Sr3%llTHE*q>S)+ylM zroXOU8i|kd`KIwgX?LFBInK1COJqC(%nSoEA!Jp)uW#7!vcsR=X)@;^dkY(0$^^C%e!c z#npN*f2B5kzE>W10VpXqF2)QXprP4lZHf~@P*{Q29TH|CwZ9Eb^aC-mC`e&-Bi79w zwCcX_>-r3v6;U>AiD1EjD^^8(qSRM#UsZW5rA<)RZ@P1Fi8;DoM5cC&&+T(IRNrTi zUx)PxzjoB7gO;ci@J&@yTv{Hh<~YC>Qc>NbP3(&2l-ugopA++FitB}Ix}1}^%GqqS zIhAKCqc%<~_7}(4-g@mylIusq7K#FCS1*m@v$&=_#PH|K<~BMIt6Gj?Z2M&9{)O8` zb?@4iSR(C{<>qdw_~4fu+Xv0Dwl~1)!J>_`a#CCZ#CIZEI%i<}?XJ^W4}eF*hDktl z5fOa_K z7%~A5{>O*gu_yG1vzVj7U!;L)evZg{Axmc;jiO?7+zTM-?dcG96OsCZPG=x=jN|)n zycWkLn1%Zd&(NW8a~$S*R80q8!;&rtrDCY#Cr331A~Hb?`>iLc@{3b{Xy-ijC%!K3 zY_;T44vbBM5?V5!B-6R*dou`Ksj`~`E7$C`xxaCdrMX8WUErAKl+NtsT+?LU*rwfW zGVN!g0zt_wVbYDb)gUx3nZU3>4pE1Mj}pGgAd=Hf?6zrus!M&Ekk)NCV*DiWE~D$$ zwah|#Md^6jp4U_NBPK6mMv=CA&D~8&k;J`m9&X>s@VNxp92AVYHUDv|?HG>{BEo3h zW0N7UKB9P`Q#=Ymb#b9P|#`9?t{a2)J5gn-z*K$oB zC{4NU#NVsop>tk5vA7JCgoEBWrq~VrDY!a`X};AX4Dy9z`t0^aL% z*v~v`dGlUSU9rv~CN+7c_VP21dII&EQQi+WmMot*a5?p_B!`BL$Mv>gJk$Ckm-6+e zbn7~5uCL%{_Z+}!pXA(ywG?;Y3ToQhu)=;-G|wZs7~%`?x{j?$1TLkNvUFM7WAnJB zlqG166h>I1UqfgY)fkTeAGT6vuG^A()oQDsdQ`c z8S)O$8;9)gW25}-%$FYlQdDo135xM)Id>jh-Q2PQdza?PYa2JqmB~(ozG;$jBF~8@ z#qe2zmVzS)sP^i{`KxX))7WO&@1r6qcw zFxGQh;C*Zxg3-Hv-_tl*uSRwen>U7vlawIb1@M{ur_SqSlW5TQH& zmvI|{2&by4fyaF&(q&#*fubTkFtQ0=K`zab}Jp7?yB^0$V-fR(WgI7 z{P!9*HbXtl@9v4RRby|C$9gh%)fNUr)(Bv^P-nzArDx~PfD0x`V9Lq>Hshk+8dG$|7PQlU4 zoML$)jwDEl6rQI2bycD#94MQ{&*It$rP`_Oze}d&da3)Ai=by*voKJtEJ{0GD*-C_ zEfcwRFLiZt3O;F(;Ms>adFKW?!>N$gQCqT%(3y5hXMXd;;r1Y1`Iu_u71BcqsrU<( zNARZAA9o%X`pd=YN*Vx(=t@_S-ABr+2mesXZ!tqTS{-b6>G7QK58z&v$0%K1!aD?U;sJNcHc zFHRP`jr%cWiUw`T(f~mj-tnoA1-*C_G!%w`pdtFsJqL-cpri4D8;B|?m5vj>yE*fF zfMoXGr;YN!i`Oh@Kvfe+>fWgFFJ<)Y8LX?1cflUUTF>+ph(y2tst#mIIqkR48T+;C zf*e5{ApJHDu)MTOdT9#;1y60Rg^y91%`HmRzjgs?py2aNFX;El{AlF4T<3htJ7+M# z21A)!Z1% zBe`OM_Zhq3lL8l>pHS6T2F zrOBL0(cvq58+QcP8UONcvJ?rZ5|i)B2YqU&pjm?)5q<|yNjU;Fr>@a+0K5cf;RHX6 zUjzKHgM?`+H4lFM!+Z580l*In!t<5$7>eW#ySgR@2E68#a1BLKrG4k-YI6n)O22KL z*9#4plfa2q5C%0{RR%9@#huizw=-kp9BXiKJ8ngKKX11{Y)LO5G7~{JocbYBS>#wb zGawk4k)yh@>);2cIkdR}q==>8l%)Fs;63BGq~%#EsqZE^N6&U^Nvb5+76CY4er5qf1U7dfTuu_~#eI%Tn5D5AQ+x@$F{q zMT&9Ij%Ui)?<9PAf?bd_Y}&+Cai7Q%fKNb{2FO@$QJj6sul@U)2Q)y#ba9qy^6`a} z0H@p#XNBPv#yZq~0t@~*%diPV#f@Iv=%^UeIPVOk(Dk`~UtF@_3V7Op&dr_aSc8;U zzpTJTQ~F+8x0uxRM+g-2c_p&O-5(UWcpW7aNEap>fHpo=j5q@YE{`d%6indEg0cXB zpeYYI#KdIAB(5G}*1#`56M<)4=W!V$d`a{>xfN&gBDL`Eu}kETYJ7%E0a)3+jwKis z@o*s3IbzT|oJ0~S^!i?;WJzAK+{1@i3wLolTBSopJL~-XJ{l3WADAXm`9M84(-|N; z^)?Gn@4R8(U?hrofU{Bf?>-p1J2S!4N(I@H0cMbbi_w*bhFSj5f;`&7jF!`qerfg^6cwzwKSM%nONRb^BHk+)?H&~d6cja}f# zAkAzBO`+}{Xfr_9)x_rjy}D`=ad`dPaPY(|dkyc$fO0EIwmlPUNPPpNEa+m)d~v9VO0PW}z4-GiQK8 zz}1ak0*Ls7cNM_k>yY$q!74&x;wP6)f{w1G_@&AKuHAl14u-6tgaW-hNHDtRS{hRN zkjT87#2f=ck4I`KlKpo4wZrSI<&Mg$x)lS9z#UT-Y2+TQV9Uye@Q3iBQ83rtYgu`;> z{4tVn(!Sj5!^K`Ki;9$Zu9f&kCdCL8c$0wAd@pZ$PaEaL7y8(vIT;f=Lv{&RwsioS zojt^oiJ$b)TsQ^Zh|ZALiijs|KhS?t)FvfIoJ-2wo!7~#WPqe&&F=&Ln0+LKjK5;} z4RT)80DF7gS_vXMbPG4y#_Unw2n$N+Z39*2@)>u4v|O-{?_-WOU2p&MQ(kPoS3V z%XteoLxoGrLLBt3K}x|kO$LO<-`82s;7*8o0G!n!6SA}+)&prrn%A7(;ZWfFxG~nJ zN87ey$eLQ`g*~6SxcwgHF?(|k=)5OD#3OIS2|rT8{Rlf(>J0F1R>j;_6SHrCZQM+4 zKPqv9Z!70;0KzzcbPN~?0+7!+fP#9NT&@N@yBzs@fPvz6>=3k6{Z@YB%C+l>N2&(M zaR=*CmCAtbYFwO83gYNi<;Q`@$jRk*rj(mlm z21B=0gUKR?&+P(5mWD#`KpQ24)yPM4i*m@&`bH=?1TF#q*9dFQ^>z!oR1;d2R<_vs z=)-CK+b4rK)%0J|lhwH4M`14*V8|pgq%KqW zTaIKm1IdBItILIdWu?~Z&iXtUC=K8l_frCT$X_|lZx{J$<}|T0O3q!$1ML;nv@k(u zgvCdgB|B^Ej-El{?%}2ek#smnPB=(-#+gt>r}*V0+xYjx>|VOY&fC6iAp`@jmE6zt zr4EOLYZby{jlWCx2yZz0+aa-rmoaWFF((i?GH(bg2f={?DkN5Dp}H6CKUtj!cOgzA zF~M6<7P+;WL-m}arD>h}%aT2StiHn>=Y!5G8}d{h2JbIpxZ>`UsgPWnLUA$$PJr(v zN2N<(PwPs=lQ0PYmC*7NX3}H_#W#O+6rZXlt#Xm$jA^=;Z{H`siO*d$64CNv@78MM z>^G00j0O&p-cTMOOo$dFFR#+1pq;~AB;t<{nAR=4(5D%?I{bkco})e$oi!^xdzMlV zkf#BCT>&iia=ywaG{r^IcK4%YlC2BHw~suAqQH*>CvHS@X?qYbLezAG4`(z?&N#yI2d`-DqZVa3wQtnNY*SPX|$DW#Veg{yO23`uu7`dELT z^0(z0;H^`EY%v0`ZrWE)NS{AVp|;evj4Wh}-cEr7z)+)A>dHUY{5ti)l?9)f&(`2S z#zV?26`II_PA04B2CVW8YgQq<5dzba`c_EUT?;0Y$6L32+;;3kSC{UuF9fEA&7sat z23S0k&`QvLIUfKRxy{R^{R9>78I#0g*wf(RRO6joF>+HR4fd3N=HJ(TSae;ak?a6I zQj(TfNgYyV_c{vkC`-s@rWaje^`i}LYptH$?Z_1atqA?IEVZ9RB0TzhNJ5qe7T4Rliz4M=DW(}8Lt%{;&Hymwh^9{hRX7c2Ruyy`u}hbQ@)U4&B_PE zqQc5|D&XV>4<1m4gT;B22E6YiY{VI7z5hBRua1g8hkg-N)i;@DcEqKNPjNV}>qi zvv=zx;t%&eh%S9W0X0o2@hI$00v8@hV9RuguC5m_kuhQKcD+)H%P7tb^OplX%YzgC z6tI7<*!oqae5n58oyqwgui#YOcuWK6Wst~i6}c|!hcjv`JIbto_xNqYS}wetsoRGy z`p5j>Cw`9sT@NyK6@YxWPgNUI-%#$oiil~JO2hzsIZ88b1Zox6V3mytLZuYwPg+kb zk(ey0{YUpC!6t!;09x}0g4>#C_iX?>P`l`%_FP{#*BLa|0ZOZGV?Zb>RWg~Yr0r{@ zG*yGPn!aH(m0sf53dnvjt)&Ea)xaGEUR^Kh%iXYSD?8li$FBaur=BESHm~01G|$?O z4~kZ6p}&97=a(BmKtR{^U@~uOVQbl>4F^sD`t55L0Xc9r5JeW$>MrLJXD;2)evgij zK6p%*I9{S&uBX5ST?@I+E|zWrd<8{wCML)|6D#D81>}ib)pq zd!vaG1Y|xA`_TZ003**8*LG5^Tn)wO8b)fJuo(nIJ~cR?3w#s7%r|AH8p|KvY>23D z`$&IZ5{)RpO5~C>H-QOjFKxeQ_$2^%xQE2p>5%|uA#$?iH`C134Ys>a+egSBQ0#sR z@h+2gZgw5EG+HY5mj8jW3RK8#is^+9#Dy~`KU?ZACx)HXw`TZVHAF#>mCUbC=Lg6Oo2n<#uwAe zCJ!#0e0*e1ZJX)UUe@=1UJ6&_00gC6@=qaUCe6tgT~dMIaXT~aLuq>~ZTp1Bl}yPP zP!mX`zvKgS>N{K)K`$QAT3APK%9$>sSHwJkd9A0>aJG97T)3j&3&|Pv{lT?nbQv zo}7P|!_oIA-y%68&ng}ssx97jdS2{3xfYm4>)JaSPtFoT=yFgskbj;EwqU;yz9fuc z1teUZ6`2$31v2B>Y858moGa7^ea*CiCd=c=lB?(h5I6i-)fOKT!zayCtDfCbSTYkq z+b!O1%P&sfR+F}Ou@XJ{X4224PxRqbI|}Eg2-1UY75GRH?m!-e3Y<6ZEgwhVN9gbCh}9K@sL_qV zD3^6E`<8520}}sNwqZSyY@shg_i6kbJaf~EN~;uhZh#F$0=F;W@N7YX~|yY_R|y)7uuwi5l$~vF`-Z zY2X;K0gw415pDoky`h3y^~eJO_S`p$^kCQJ)|zu_dBA}aS#so1o)toElgW7O%URU{ z*S5>BLeIB%lr^c|>mwc8TKHGAcpd4l74ZfftFvePvth`|Vr5!#}uTV{rL^Mdth_k{{KSjEh48Z@S zyCrD@Lr%Iy12lCCL!61uHiFRT7g=|sq)s|;h|qbKa%%cLFX$$u=aQB!olBQ(vhQ@K z-2G)4{o#l}vy$ER%C33Si>=Fyi|9ik(zrU$9s|VGIiNeMcNEhfOIk3zF!u3MpKrXc;>A17eae}m1bdFJX0Z`ZIW1F%Mn4xzJQ@0?Nm zXA{=?VIZA2DsuaqnCTEb(CM(i@9EzZtBUTo>vnZNT04xd{x?hcVG*S`698EMmsAx_ z>kqb%wmDhFV|i$iPj|TJAMXWpFY$_^O4WwHr;*N6F2G%&ZeO_}R8diHbJcNq1HSau z53qX1eJ46^&bzNe5S&k6AuK#$F0caqGtC%HkGJ4y1J z?qdexHI;lkL!hx=l}x!x&K(#=5Ga}G>@ZT@WQF-@dijPc#77U&?OjQvZfgPmrS7j4 z5M3_5Id7=IPE63eeDJ!R`7Ck(-8Jl=8MQeI&dpw5Z;ytR)Ptu5pGJ-jta6uME=-S* zIi&Mp8IAGVeR~Uf-(d90Wyi_wGphN zLz^{98-mFNz1wo@)JIOC+efe1&4shiU01e1*Mnb9S4@NNW^_p(?&x1b`Tz6J$0^OL za~d=5xe&I301&-7y0| zdF0is*z~njq*OYXq)?kzV9K79-v(K+1-^;qh$F}w$X7Kjn;;ym718bA;Is0U_J!R$ zEvZp$U7K*g{GIAZPx_X(Bz{zv5AQzoeB@%s_;U}lfJ=5{co?JP5QZ$mmEv;G#K>7! z>qB({>lI^Zt`pjj(egbl&ThAGdbGQ{t-Xi~mZ{o4$W#vk@P)?i-!IYqu>`0<5L*4b zqJV8pG1g3O=%+UL2bI7H>u{4&e-`=DupgX5B|;zpnOap5a9oaI0n z{~008C!w85=LacgY+k3AfAu_bVRwwcmEv696J;Dm9x*&awagNSle_!4;8STLNaSgQ z!vlGkK>vG-vZdCOHROz6zdv&#SEeeqGMjWVmKiTq>dH3)y5t-PN9KL)Ls6f!NQvA; ziRFUY*tJaO9XJWav9*a%jW7~nji+m<*R$EG1+wFMBo7XNz=eyQf>chk71z{n6H3>B zikj_&pVH3L3zVEs8cFBVFIqCiQmZ`S1ixYVUGUT zDf8l#3!^&*|@K5&_jc{N=D=HNJbSOP}?9S@!70M^$DPbSqodq z29a=1J&n5VB=X9p?-`4UsW~bf%Jf=?2Ec%GoRj4-jcsN~(TbeWTsoE3t4BP$ql16`M{P)~S$$1rZ=~pi&gV3zqIZe(rsw zJz08>m_R>exXZ%ukXPbZBwf4(=uUyYq|tv4lW+QYDqpw z>Tx}er_?1inlNYfYUoJUx>5B$S`1r_61#oEdDTBS9|-y;+Z5FOrI7Hap;-Xn<(SZn zaB~|^^OH;Fn^(Q8%X7UOztUbQQVfw85|(r{#$)l3bcHMR{umG7F?mhJ)>QuVlSpf! zM;gd^_4`HDqQaFm0Yy~VOxO2Snesk+w%7gp{tD?2h-&WNEr3aWw0At+knr6R*Nqal z+$uGM)_9h18A-&i7S&SGgI$$a1i%ysNg-ADY6T@vJnsIin=AR)*Do$J1@Y%=M+E8n z<~MV;<63fN5+%nZ=Kyat5A=Bx?PeqCZ5g%Z%bKPExhXG-aYE0fRPy6Q;2Ebp#!~84 zi%@x)7EQx87u`;s01{PzgsZrjBwn1$71tcHX+c}|&%;>jFW(WP3q0=Lx=uAdd8__$ z9P8goW{^idAbf?C={<#e7Nj9S{KHmcP!M2t>Af20de7R-bgl$6wT8)*w-!)=w4=pd zz|=xh@{fv#jFyIS21KsRM2LkWNLDAbBIdQWd5Jx zhO)_Ax%yEScgE+Xr<2%Qwide|O2-pYyvP`Hop+?}Le|9ZyG_}Ik%(6i2bqGl$0AYZ z4bx&|)*JjAabiJc1Kpd&dYbEhAxi2ybTxZ*n>bh8vT#WuU&OswLlC}$;YBg`3Tct; z4cd=0QyNIG4(JM%=*sKsuRWJC`2zZ={8PGe3IrHc&|cxNbQSy~S@bT>7!a@|*_6|l?ptUdE9MsSd6_(}sBk$qf@48Tq|cY%i@{Q- zqQE1?TaqGDvxWKKj^qAkdvJ4TlS|pBQW+qqryv9%ISy<@n@>u<{kC{ufhxXc#%6!t z37QdbPd{%9T~a)>SUqyQS0bca96ukhW6E}TzWwVL}pfF_nO)*BFmXVk!{3A*a|szafBAAQrK zs5{l#QbG+8H6`UXm5e2eTXf%+rG;)`*IHCyEjX9^Hg@quy9*~}1|t__Kn^b5KP7%~ zV5x~2aB~^fDwTIydHH$VNxIbCbMi<6r_J(nA%KkYOvd zT-r1*6FI!k_~1g2d&j&~$-p3h=M^!!&vW&A*2Ru?cx4$}5}laczI%Rn?}|FL04of! z2m`PLLC|oB^m$8B_CG~L#W{*@z#9x9Zu@ZQA?kZ;nMn#OUHk@XUu#Sof<0_r0bQAb zmKaheWWZc6)>S|*e%;|ZixLrIU;60y)N*mj`p3lA>{2gbh3gxi=d>S>-9CzBpNWM2 zf(|HF>;X?4P`M3aDjsy|42QHx>I#>oP8=)$Kwp$UG~Dj&#i}r)H9`}@K@!6L<+7jr zrJFIIhhcS7#Id-A4?U0TZL5&kBSq)@$Mmj2oq0hIzMA)MYc~dlb4&=eS52Dgep(aj zfL}R#*SihyCqDZu8CS$sbK~6li4N(#b*kx`E|znAf8M;DNQRS)B&|j7RRp# zCcj4T^;gg^|Ehj^bgxZF?3S)$A;g(2~+W7jF5Tb^Nq{vm*X7{Ktn_zfF$6?MB0i4m{35T)%oQoDY#Y!_yeak_iP>S_ajM*Dw4oALcqu;x7gc3 zZW^M%5j+#=D9t(tyq1!PQueR)Y1R{|s+Pyzapu z8Y=}N8g2={}C94*`@%pbG#1BG15~=EJ%Q>T}D&co%$yn9K^k^=s>w)lUynb!l&NXWqDR z2g>K}v3I<({nog15oh^BDWLND^dR}GE)wLI2b@rBZ`vY8*AAO z&{LSwba9)E2t;EYfv^G%9xV!!Sx?rb)zZ@x8;M$%H7 z|Bur4zNuilly5lPI+_1q@38VZjmN`vH$O(aVkn`D@co`XXho2sOkw{4P2n!m;#*2w#Ygr_x64YpNN_WoYPDI*`w_+a_#rR*COA=%&li@VX*o^7g zcc|MED6&5Z;N7VbUf7JnR*)bA=`g@#cYzATAyhvegbFY`uJt;6sYZfTrXpWg1oq2F z(4M1A5vh$YI6n0>6P+&rxXeh{Mb~XIJCBDCihz!rk%B&`E~`?rvp%S!WXdj8)FDZ5 z+*0?>kc zmIP4vcRYfY$Y<0C$!0jf7;g_?g3UxSIkWGrir#et%GhyrYu89HJkW70S9^`NHC$;{ zCq(v?O_Bnt)I@X+*E<{$+fn1Au00X7T3pZwL7HB^F_pQM-tCGZYgytc)y90fix8Ex z++(?AmAv+v!rW)mZ$n@Gx*$-ZJ)FIAAsD04e`T(0-vZYjlvvXU*A|0kt=rx#iddAB zpg-CXw5_g1;fhlLEn={R)zK&{Mj#XD8hA5dd=d$~aVtIX$=K6FwI&&7(d6fZXA7iE^q$2j|>?O4Q4U(fm$eVpOkqqft3Y4M6(8|Z1*q&ju|T8IV5%Snm9Xxr2>b|!t+ z6dgTU{vh*xx<#qD_EPO$s$*KzS340NLw5_~h^gSIedSV#x}?;~_5-w^)u;PPvc|7N zDl!L$5SWb?M4ZA(?6!`A4yC@iRw*v;g0Pf6=Oew*+=qi0PfRM?S53*D$8DkkF=}Ta z(WhTrJ@xaC#$T`A@{;}{%gVy(QvxpZn{KVKp=!-re7~`Jis?rjFT38^ApND!F@s7= zYk3E8gO(qI1$3mO`h5afa+x!VALpM?w!5S;{Pxe7XmtGb^8^*4JLmrT^=FihI`#zV zFV@%jIE#x9bXj%o4{}n+-pbaEN+3K)3MRAINm|i)z>?O+!u~qsLinIa9_D=ue09(m zau?OQ=FLkVv+zllx?cu1&-5yrpHeNY=C0q#AK0cib)}V*`|Q6S1U!KR>x0$OsPH!iW)o~j8&3@hz9wrqduX2%wM;wutoPk?)Pgty7 z{mOn&!PIWXLnm2lmBVpHUZtt_v-fk)#c=Z6ycEKI*@YOZt@i6Qzn|@|491OMmiU>M zvuETdyBN+N{lkMmjjT!LBEf4P_LqI1ZKT-JN`C(QIkbJzGB2)beC%bzb}$_6aaxhG z(-o4@n*VBejXuvdq3-hw#%=8g4)yNq)c^Sc{h}tPc#Te-sb@(O!of%X^s=uaxCl+9 z*tkP+IY-Y3%5fnf;oO>q;QL1++uCV2RNd$+y}SibPiF(8H9D^(^7GLOYYT8ue2(@g zftHr39p4yOgT$O4v(Wn2Lio8NXsHMqTio{WC2{(^#yTbo*+ua{N7;$NbB^s9d9|x)Nu{$xe|j$$+G;!>9k5Bf z{?Bs#wQg4;1x(87WN7#DUBBNO^x5ZvKPvU)cpc)#fKXq{W(a+d4x=n!N?I6|jVi-U zTNPY>H9Vy!=rxy)wW*I?YT|y)QPuVDH~Dj{*5oM=O)K`B!p_g`Y5Y`Zcz{m%NWCk2%-?7A~{ImFf&P7J* zsfg7Ds$t140)i*v+vH1QQ`v&^G&DR8h(i764Y~PXv1iMpo^HXT37K_P-qk&Socf&0 z3}152@R311ko3}F5Bc@rzo%m5IrM?+WAob>btot1Y1=3(QaD)Rf++$%+zVO1^1`{B zZ%0pg70t!Yu6LkU{O9`xcuS5Cr#Yko6PQWl&JWw}a&^i$-Xj5<*Je_ePPiB)j7_>2 zkNzts>s_M7?{9f=wVayp)Iuj7d9OqCtz~Y^u@&Xv3hglze1Z886&e{34S$%brLi4|@W2Ekpj-Ok z8h-B58h=3q-$z)xQNV|{-H@UWE;Aurlui~*3G{ynq`Z3rCh3rGPxeInOu+jEMXTt4 z491JYuRZU?e3Tm1Se>N_=AS<0N^ZOoy(vKsvKF0rSOj~+4haI<%7GOAc1qOJd4T^VuIcMM6(;-$h}4Uzrl z40Fu4Wgk8d>4%-m2ev^x2+zeyr5tHBeGOq%Tix?88RSK}gSy=PEU$I5G5q%mev`3r@L{P6j6#Pd^39$!`mQ<+nYn&}H#4{=?XFLA$T0ZPH-_jR$Tt1@+MofA=YTe&I zO4SwJvd|d*Lyim<#x%ht_bT))FZ_*qyR^%@SpB}sc1icG$SqL= zi3X9Ff8FGl*>F2|2N=qkWbgt-{bsPXe=S`}D^3t<*F+0b!_3dB!KwbUaei5FChFKP zpT!$P-qs(`B*cyipDQK?O2yJI`D0Wryi#qtT0ik|;{USKR;E-o4%-M zYwsYmg}a#-zj!}z5PCm9RXG3W(0-YA@YjD`#jy37ZHWA9^cw#)?wR)mk%i*7sQi6;-d{XoD7$j8VD&!3RdUStt-?Sp? z(oRj>S5;xOcbLq5-P>IuAt7(aYfgQR83y}n&x-zoa!t{6aH;2$DwXs9dNw0u!g=#5 z4Y%r>v>~vwqfb#Cnuq@?&STo#Otuey=eSE&RD3YqnvvL?N=_ZyAM~KE#b!9)Ck?7? zy46z#$F;iXOoiC%GaV3~;VlsoX?~`7d|=f;wXow8+KP4#HeD1UH&1wVFTPeiU1D!e z5q3W1i+B}jaCv#Dx^%BNrbJ~+?a5-Sxc!z#bQjf@)Boe~C|@q0Mm9d(dScFrOC&jE zE;@&1rc0@c&^*+~e6pJ*2lpuoN3zbRkTyJ#Y=ax3l3Cwl9HBbK?EKmd+tMS#_O_Sb zZH$toJNPr7uabQ7*UI0#*|BnI#zlN7wDLn z2AEG!(ch^l#YO)dnp}_6+$dStgZ-vrbY7=g?OkkAPs9sMXCz#j?hc(g>SJ(9hFRAs zBo%v*_64bm_WYN`dXlzvi6-IZ^)4G3Zy$qcFgnIGW=qZ0b0K{^FSIcSIfDQ z!%dP3^Oy74m5Uk+duw!|hR>y3``QcVQDBCaT1hJ~tDavov*i`l3pZhc9hDme_c?WZ zopZ?VF2s&# zU%pn+{rTl0BK*yO*+QuyZge5Bq!(&toJMUeXoah!jrF?t$)JqN*^8aI9heDav5Eo0 zfvU$|&QhmoV?v>J+Mr*TjY#US)cBko2P6@LQ9|GJpW{JH zv2VqqmV6Bg-)j&Q7f4QZeQ)HKo@kR{h8{$uZuLW?4qD4P@xjbq5%;xW`SH{(DY@?k zf~7?cUb!YwxJfL;vr!G{rH;Q9>GNVNghG4nQoELFUa%dFlSdX3x1*f25nu`yRFg=d)w`%gFrj>2=A!!Hl>J9t-A@{tyPnjm+nzz5`YN}zW=id))5~h-yoqwe!KkMRf&8CX!iq}^P_Ecdi=%h<+lIM2kVv9LCsg&7gE_~&D zgbCOxsw1-l;vWs3MD#0*S=YzLsBe$Xte5^Lg2lX5My)#mC-}V#gRUtV1zoJzQNU~! zj-WYnfgZZG=G zNn-JY_$frZ^lrzgi78?aBoo%ikO3Q(bvZMb1gWZgC3oa z-5?KigyM7=eO3aVd;=OTaXZo@-`uhKaH~l|YYK54v8H3#Rbo|}`#a&L{e1FI2DdoN1dhtNbMqY=^= z23?=Y!mqYF2xh3D&DHp~VVC${EMykfBY*^2_-U%fIWR5!WyP9AU%Xt5<;IUM3LoUh z%Rl)j+oLu(5W6*1@O1xl+g1E%i+O(jrAeDl#;jK&huob0A6xGk4`dfnHcL{O=Q%-{QJgjwJn7t30#Q8uSLn&|Q z+zP%SITs$AWTYG3|BZ!(#E)+L^YMurUcbR@l)Wv|_o!5OH9dc_EfJAjqhM&?4{`Ea z%5_%~hEZnqEl6>L9+jVrZ03C5JfZQ>D}Cz*du9#m2XdrVMk)*5^z?1BX@7|XTrLfF z_f}W8#6*KB`F{ZP4g%EcwrOiR2m6h(v>W>UmyhcChX&djJbgky@at*llkEmns6XSF zmG#Eg{H!D?BgDCso=cZ=^=(U4)DOFnGcp0?ebHSThF%Vx>i5(@f3ppv&yzMMXdmxn z7lDLj+4_8XKH_uxQ(`H~u^6?%(BBgd;K|UwZK|o$1%B2Vv|K+CrpCV<4`y55uq&}JIe_(=s%p+O<^%pXR?%k zq&Usrwa8I9x7!Cl6H}A;38wJ z|K=HjN+MD2g^>rF0LQS5CtJQ3ssHNnKQ%m?EH`fdxp>A?>PXA&>Ary|!bmIY?*si9 zRn0_EbZWy9g0uL@a^XvmQm0Il4C3aR(s|!-q`6G1)Ryc1?~}#(2Om#1{PLUi;UCoG zl9~>)sz<}mIlM%@z!g8EG4Aa3SnC237(Go|*XY-@=RSl&BYsQPanXO4E1VrP#k!&1 zs=#!hY7RU~{_F6b^z$d%N=7rYmRi{%F19%RYwP_z6Liqmc>SHP2laOg2acPt)48|P zJ$Lua|r%>MlPn|uh-7} z6Bo@pg+BW&@ggyaxFE5urHLsUbqlgF5;}*eKKvqMLp?Uh`1y-YJYMbBuAQ2G0_}7w zIadM=2jBqVvogOV7Z4-MIhllV^WkFtM$6ujEo%0R#nQKR=dZf5a4*R*IxBIJKfV6I zYxar|MP9B8>;#k7IIm##%p2+pTZ*E_u>B*co?4zbkU&|TQ~ylk zbaliC_5|U(Q)CT;?LBs@943Q%jFWUz|Kwy|@5mc_h96J&A_|j5t5n~bOdYvwQh^+c zJIyT!>@pYD8?S9g@0OlS7w<8F^I`b<5hbRTCelXAEbGkpb> zskuX;v}JuU(wLFtcT#dteSLFRT8vAoNM5!g$+BjA2%Kqs9Haz^Ur?yj@6uY+Ei!<_ z<#eB+=K?}^*0Ul%w$zGaiWIc1B$F$1e46s%QqG@E+Knm8-h#T>Sr`uWD_{e?SG{J# z0#_jEbP2vez8HgVamerRh2PIF$=Jn7=WlKuaI z-~U&sD61>cl}CLgQ!V1oH!SDy+>+S&elDSTLdy2`H}y*niK}5|8v>uj@b1u3oS_$} z*&(Ky8fa$ZOQFxLb30M0E&S)08A@8uU~PWuGbE{$+6I_VVAB$7z3TSH!P!T#Qw7VY za}~g2BlCDR(c1Oq8ANOxpipu&NPMvRDxJ%sTrTZb(&sMNA%=y|)B`#su-2-W; zaRbR@9({ACz=qYi)0?r8rjv?3g8O3N`m1_@!K2;VOT>!=2Rdae^EPEL$SKd6(|k3T zsyrhfzC-u_N0vsC(NTS4D2d{aLa}I;}7YeQDWzs4H*EXT3d$LcI z(9@$6d)7Au=2EV$Xh)dzr4Z&xv2wae`dC^GR5adl@hC?He!RJrJ>b-;cyp?@$nPpE z0%pla9u049i$xKI&xo9|kqGS=keqQv%SV3*X}yUk3v?0US5@owm~I}fYs(2Sbk)~) z+nB`1#oW9rFGm zB6^AWr;(p{JgZy394?hHV&vU9$%U&!D)?;Q_+<5N+!Vz^;o%Y@)p)|1qoLXU?4A*pj>8a?u=>;n-*`>_xO8Ezzjrv1rt$#y3 zYQ;{9<`l^t#+367zeKk=&WO#jm^SzYiuvN+!&k=b2gd3oiNzE7-Xbw0gFeQ$Ypi^0 zhgG5vb$ung|5hTiBHuOa?%75O2&8_+NEclhu_L6x=4rPTmN%~p=w~g7O%!`lGwpBO zC%jmyUVff*BqghWfyK4~TAB-7BY3Ws$1Zxl$h>jUia_^PlZduhGuyAa6Co9(;VbB0 zkNbmkYh69&%tj!q)w~|tfg@9YAE-{812iRz_#38a2a?d4+xK<567YVdg_)glT$&$S z$^Y*-F*^5=mCWB`DC+803AHZt%Tn*X+yuVegfi-|Us|#~3BlQMM1fGldB*3>Go(en z)3o8{ zpUezY;SE?hWEj@U@IDU|y6GK27PWeK+&iC|IS~nBe#9vWMnp`c*E#!M8e*W!Zx}uc zBgdXG_-TvZ1k@vAT8A`OM;iLnpD-;%^Oo^!1DJ0xBMYO--Cj83!{M<+9(NF8yvgtB z)Htzji-XcvZXMi{eS*_%P7@#qmTmG`nL1Y%&d(eK_g~INewOfCZtv!r9QOK(2#3Wt zEVa4Zw7q6wc$eX+trvfzgz&pUpDy+e1HH4*QbpA2qIF)GVp;p!=#FVOjT;)BG6WX1+w#IH~9!w)=T=$6{9I>Fj2P0Pq^d~YKa{i2)>`n8 z=lfjDJ@5rnJG*dl(|zi2s^h>A7jv*{m+AeWNV9JzaN^RyIkfNmvDS~W68@15JbC3C zSFm?^#+8_#`I>@X9r^_Z$?FQHLNHRz!L^0Fug2A0!Afo3oA)iXrOoJD1EHZoN&K9^ zz&KI+Y#ktE0!#_xxjTCu{62&bwyec&M*b&sDe1-T&u(XutixOa2?1++Fq#DV!7z~M zN(*6`2h>HRLq`wsNP!fA$n=a9>oXVuV`<9F&AE$PkAKrw+qmZM8yKqZ0BhoZPN%9#kVMHeEivdpPIseV|8`h|)^RewZf~=(4 zR9{^)A^PER_pRiOCK2OHidI9{CF>pk#But)k=7ASfHRp`7a78V>BImNi5d#D@A9$2 z1AED2Q6Q{97_It1~BMx|5TKxVGSs|)P}rec#P}1LyJR8XV$}y}`GW8R1~eB(l`5FNSnby6rw-PD|(;u(rAC*qwTTt;7qS=kl!! zj~01{zsP72v^~YYsBji#m!+lWo-HBk#L6F16g3Jg6XG_l0;ERi)>jgz-+>8zPL2AB z@bw1KeD^U*N$bWVz?wzhe!wcobf7*YFS0_Ae3!Fyoz{Mk-} zUsD0{su8_iE1^UI#Gr+a;kP~hVvv~T14$?dLn2q=vH`81E-y0@J9dI)lT@5`=id~& zN$d-+>NYFyI1#U029~!7&nApP_IVIaKHz}bc6UdA5k#uBPN*UB(BRcb(GeN34x>>lCNRfAtk zf!wYo^DAMxi8=ViHFk#elS`jFt^u5xuK$L`Sv99y^qz#NZb&WS5xjVm->cBXYcHF> zNaPd9+3Hi2LTYyRNZtFXbl(J`fOC;sCg|-$f#Qy`I{mxCbZ3^5Mym<2QfS@7;L~ zpFJZeG%NGsDyH_?e=uNYbk3LO*T_w~hU|8^`IB8%Z%pmG-n_GtfG^N zai~+n>|dx){lZpK-&GZrDXq0F)ibLy)YKjN<-w6Z^b4M`UiUunWCT5L*^p{{5|SOW z+iLvY<8WLuJNS!@dA+p6>g(=oeF^88!``;!jsY>?{xQJlQp9icgufhLKa7a{6Dohq zO6ybDaz{wT0)7E38P+vNcCS;F*7XXxG3U15vT~Ex01p*4+N5@Sb=r8F%K^R+a$dYE zalLpLoP@y#3#v-9mX<~kTby==7%}7KqKu9J_uVUFU(57}rsm7-8JqcJ0X|Psk%#7@ z$!T=uL^7%)p+ypyn-HRGBAd-&MG28qSA=@^E?gW@Nfsb{E>!?s>tV0&O;2|$6?TNt6Sq2r#+$XwCy zvf$t#?z|tp?T1ech_gpLV~8#gYJje z9u-xaZZ*v%@H^f=<+o^hQ)hi558a;!M`(%rad|NV|Dw!;RH8Vk7CLbHvwBt0NPWwH zlnmM4$Be}>dKEcNR^Q7jJr#{vJ|PLTC6);^{WgmuuVLnY4`sUt>MCJMN$&byKE#h2 zX8w%ra6%4Bg7>*)K^pGyX!ucn;p}T|vT{TqXT3DF=bYirAJ&79@ueq(vZtv@$tm zQ4LLyz;F=qKRlTl;r-HY@fOu1IV5VyK#B2XW{Jz+s)57h~#z}w$ z%Wt__7dX528sK0t^O$}rvSR0Y76+`20j^KCWe4kJ`X)kcEPF(=c$%*ufAKn_kJpSu zs$fCFb3af;TeSt%f>y|v*u2SCF4$%$M>pcy4soZGlpCXx(mlthnW#L#_jaq467h{1 zunpZ}h*}E?j>DQyE^Bv2Sr0UGfssmgM4ftzy(BrWU%7HJCd&Bgf|a2t&T@~o+%K~` zEnyJ}UJ){JgxnyQ5FE?4#kY zh-z}FFNo7gzo?LN3B(1L1JZeXj303$x_?jQYJRB>PpR26*TELZp;qBWam40;9>32h zv+hE+C-A15`OUut@vMoJ;>h%0i&8x34>SH_P~H%LI1BpylIma@1VHSYq8(*SR&Q*O zAu1$WB1LT~VXEj$sY|a#=a6{p&{PrSer7v73WyZ2IF}H(L9qix8G|E#8kxfK`pmoOiwN-Ah$yvp5>x0#H(X=C_5wDq(WK= znxU-TM!*%+&ykf9mYelH2SD9Pg$vPLdQ%uzN`ufpI|Q1v@j?yrcO_=<--yql+6R9F zRn#HMjXF`&{GV^tBSXVkl7@Eq2~|V*j9y9n`)je(*drTjw6^l_~Knx6>$spY|Vd!0AKOK+3n z9Ph6H8HVd!4QuJAdWYd=rE#<}4urOPt#i^kKW;}YUN-|e?Bs^Om%&cGtLbYlE0zGVamE-6hiF6ni@%no?Irm)Lj zv0ajxOv%$Y`k6&vIVD z1Ey3ugpoB*2)5k0TJ}}%lx0QDv)OUA)BApc$Ca&b8bYTeSf3Q|2jogT=U%K_2KA)) zMAeFYX`q<-nk9Vr8?IDmxoeX8;-@SNN5S^7C3h#XvF=zYfmA{|1hw@nyk$^6 zaQI4=&8;_8x9l~)$Np^O3cx|+@soP%}HfI~UAYaUT~^YL6f-C83uEY?B41x2(P_{i1Jy6I5B%uceKA>0ot=&4)72eV>B5w6Z=E;OiE3P zu7tAz0BJTE>?&Vis64wfFeOQfum~Djb@0yN7KP^HyqPYNtA{s3h*HnRkaB!2H&SOa z9h4epNj_6=C~ru(b%}naVv>lM0b=32rKndz3uh{Ig_g@(CXeJf=a^L?Cslo9Q(|z@ zZPiNV&J>U3FWYckHI8aNZMBWm1;{0kBDFJoZq*l23nQ(C@O1Ey$1;Bpam{GA!>X)O z!3O8X^zow!_rTbaJpEX2+RxVAK-$lgc9{5Y^=eDwqMc9VvSX|s_<&Crp!rYNG*27(eNE%{rlfg85^ZJFhUr*ri$`l*k9ih0klG=}uEvXU669VR z_%_hjyiPZAwv=~OP~lGIz=4+hR>c%+dA%JViLIyIt}Cd?h0=lt!FO~WpGn!#hhT{p zY-){Zo@uzn`>uvw$$)s|jMGW%>gjzo)STfY>y3WR_(5UI_Wv<>WKBqRDxW^aY%<^Y z^K~Jq0Q171Yc81av*;l2<@bRSRG9vr#YS6v^;}JBBJh^I`Xmi=TItjJ)8Xp(;Qa?o zgOxbF)FUN-m8|S;qM2#wDr-d#WuO}yjYSF53!@$!`tt_GKLu5^7 z)4|Mi4cn!Iil9yZIn1xgs{ed{q~+rs!*G81L4QvUXFp1%PR$1x!EAHW{(UF0-md^) z7PX=zc9}Gdf-o{z=2^OtEo?WIRe+hTBqVfZ5Jg-avT+{vAU8 zToXtAa>FN(xZ{~h_vil`L-@8okyCHt$s1cpQ7-?1XU5tb4*$2j#5Qs%#x-Y`a@wrO zuCBmFRm@0~Fr_)w!(1}VfcRkVfEwgC87Y>#2BLf!8#$Nh=R90okW5Ac`i4Z^f@aJs zG0+Ivu$YH)J}mfxU`TgX|H$IuLD)i(dIsB+Vw+KM)Hs9}g zu*&-#e$V#$qL=t5@-&9A;T#gLCqSs0_IqCh)$?|P@OR|YkQytfy7)1mQUlgK20*}W zuTaMof^@px zE;>IPiZAaEYW2<17kt+LmOG0Pun>}lG7I2#|Fpz5?Q?iT_$XD%AKLJ!tNyMNARV$l z^&0h$1rv}5Omw$IHf9&mK8~v2I~0X5!|!kYd@z(&{y#{YyOeOU&2KfUck^{E`zJKG za7rFof&vmD@$jtT+vmgs=Ar!_Z>~B%G6Y{p#p*I<%U|&-mtt^AY0n4>$YU?HLo(^p z=Nm+SHF1-v`e<>R*APWfKD-~I_U$WS0p!THoI0;%vf0yCQ}}DnKc;Fm05s`ny)g~@ zxPG)os@TLE`Pbl9=l^2{zB`?_G2>rd(*SpyUsoGt0d;grR&?{SiE4$KQpszE)3ZAQ zV|tF!qGT!>(_mDd`23w4v+T-F2bbhgCvW?tulB;71TQ0I&FqisKe?oSBp{J~Eo zir;I>RJ~HSR{<>E7!E_nX^Ua{zO}ybG}Y^+rK7p?{7wR;;bTd_KrC0A-=$bx4nubV zhV-z1zrH`$qkf%lZu(QQ6<_J)0mrzzf~Rd<+5T<02odb3sXkIKNzK04XFBjX=mX+t zOSdTJR&AX?cEgoggO_Du686wo(6hyF2`4RaE9Az%BVt@pNRVlaS0{0ni41b{jw@Zy zN_1deif6Gms3|)C1-5A+!GKxcHi=mbGO=DZjAJ+Z`honLbj^SKrPhF4{5{ieujpXC z0_~S07RS3EasGkr46F-s!u%T+=x}U3i{2X&4VQS1DFe)n|Mlj5?q5p_s?<}cvuIS4UUAKNsb)`kKlDaMFwPx(uSx+bJwphDu^e`32V=d}L z9IVwo?lzAd|Iho8vT`!0S%y1cg0%r|(>Z1Y^_0FSH)e2-08G&THG5X7vGg-D+1x*x z6i{SSF^ve)*|A6I{o9xy6g{*x=Ih6TW;yxYqIOFAkL^13u0!H+6pdBJ{vzs%}QjQiLz+^L%-a7+iKUi>e5l>bKoJC+Pec z^Jv#%5HC+GCXr_~RusH({h9471~A*do68Aq{bFD7oSr2D+UY{6A=aIi)3ERQTMvBQ zmu}q&8@{_0y^kA|sT+e5dGLOj7Rs*2 z;_=|agN?b%9W8NrrI3FMJ=8CZ3p|CLSpYAiqOtjxi2qV*eDCr48RE+;^<0fD<6%by zb(tc>dQ0%wnM}k4;l3@ZJ(Xy|3y=T56~edcY@Nr{}nUKdB-=q9JeOlR<>r+$qh?ZObMq zh(d=-jZo=g~fONUCP<+ zN$gQKCc8IRpJ?9w2I%~$&Ue}gdB=99)~e$a@{`-lI~l$fh11_<651y+Sf@wrdWLxe z_@myq{4JDa9j9k0_u5L{K{#MWaQbI3tBgeP@Hybt={>;M3$at9VHH0VT4VZc)Z=&* z{t-g|F`#F4EEk6Zn`>o#O=%hw%}?w8`>vo|0Zw&tu7;M4%v9w~Y4BcfI^|`nKe_@bKjfFx|S6z>UI^><1ROXYCMIPrm zKAo(lvMeS-RmOm$HOp;GtXR9=3|~RGj|FSm!R}`^SF_Kiragma>{3|kD_rgGjc-R1 zBi~(Zb?uU|3m6+rL3wr^XS_ev6fql!ovh>#-5WhIyZjPbWN(eYz;KR-0erO*(UI zAWAz!qCSUby+z#h7!!Cs<{Q2&_8yYIKk*AbQB}scO1|E6E^8Tp{+$YIYzf+s)`z-o zPT50wN)aQJ7 z#Ni5R9EC+jK)X74LgK5>dU1FTk38N7uJl%`CWgK9-AlRKirGv`}gjB4?}w(eXlPQQ>~7;U-f)3(8wjcAMYWY`U_KlTTeBa3&R zX4U2{SJprM*a+B;>uJx=K7@p28hGD9H@$e}62u$A@{C#;NQbS^ucms&kK92|<^4d| zwvC$b4w%s-s;FiYx=JA=r~gt}gI#S{2Ko3vU>|?B1jX1k>cfku2*ZOh)fhv#OKV*L%1jjLht||6W!H*C)!e?kfu{Y=e@*eK`<;4IJ`7 z%5kE!C~sVw#3!s?&5x!1cIGbNmf{Cgax$YN%w@RSl!vHBJnWnIK@zRC5DQgG1@P#BYR|B!| zR9)Ps1o+Co*6AmH{o)O@-x)D#cHI0F(j)9&WsYKrVRm@30s?Zzii_39o*Xf`-ra^r zSS=2L73eBfCdOb?4CCV(3O%fK6mPphxsdCxBe})BoQNqOfY-)?owr`A+|i}bqcGA! zc4FY7jBRo-&gMN_%DM9;+f=u>4Q>k*+}Tn11rP2+!|gfEiQ_hIhHdA&!3Sf2)>G;? ze`&L+J5vz0IbXs**4jAjTQzYX8luMbzt5^T_PqLr6k7u z6Yc=5hwjT)t)-wW{)Da<)>k@kCD2L*+jC;2>zk}7w{XGl@Ad3b^P{ePa@c{_?eBmC z?;%)v7wcTje~gZ(DHZyG9b&zj@(>o<^zu2jt+kgirRzyv4HQa3S#0ekO9^g@d9Xj| z2J@Yg^F=Mc6EW%GZNW{U7}5FR5zIes289XZQQAPtqc+9kA4rAxcPZ8kd9rJm`L9!f zQZt6`Wz`*p1UqcuY5KjZvqgN{qWRx9IL^W{W0yZ@RHnq$omadFSN*sUY*%#pw?ylm z4vnDH8T_*sblso1&}XFiBemmtvjx&XipC4~hbc9pgqg?Hdu!djFszD0vja6NUkdP> zRjN*j&|va=&bc2&3M$27_(36kJ1u@9ITu*#Z#{&b2kZRy(q-fRaGoFnH2fe*JQ%!i z`fy~nf6Vl80{vLq7^cap@!GGKy)Oftu5`P@*GfOXs71}Ux@*|fsn?b+(4ZQf z^zqgSZ1`9e&*U;-iy0qQ^5Yu9-xPQB0<;a^2T~(*j2OK5jxR`#ureLWTm_Ne|b}^8jNUGg&c$ zgG_OOI&y}S%j=Ux`hskW#arDgf_(sYk~pE$SWm9Cv;&KAv)mXiuk zKu4QoM%>J@C?SBQV>UoXL9sZ8WYX7Z+dbZi`I+OnbBUr&#Fd5^W?CNYi%1szTTJU? zEt;8jB^2?$AP$S~`q`K`!+*UpuUc;!J~whZ|C1Ycj@j;Vg$1M(Y~o=8%4Vkw>VT%} z&FaFi+VBylNbBqI>;^S7wW<>IO#Xg_29!C-tds=`Xo>NoAv;wQH+#)iO+V8>7GRS2z>3Z{>qnCp zpS{tDKfuhLH;%{N0*ERAGE>5i60vY-wGPhn6rfmi!n z-=ErQO?v|A#EaCi?l6tmbaEs=lWbO#z&3D!py9ar#j(T$S`TVy zvhOq0@JBo>&|ZzAiY~D4sMTO~5K~ClcMKx>Igyo`XwNzT$uy{O|E&!MVQ&0&jtk#` zY-p|`Z-sD?e}JC8&m(Z1oy)&Do$)P4Xg;1=D`FWndt+%Vxq^MZBdFN*t_<~Av&Dev>U_Z#cde(%D6^HNgg;5v#*< zI0Vj_*;~8P2Wfpy0)=9*k3B=u3$-Xjh743w#EGBD>4=}-SSnEn9(9LMHs{Eyafsik za(L*jXSNSl`(_en^ZfT!R?ZyCK6!a_0Z?>y{&!RuS0v%gWxMYHs-Z*Z$AcE+R>1(tV11%kB7+1eP#>-@ncs`ZTr-?F&aGe~-FkQ9R z(>KQZvpH2OWvJ2n=ft*2;BI(9Mg>eZ`I@IyiB(sS^pLUBHLA7rBJ+q^TTs6RLrqp65 zbW}35Z9K`hZhBJZUt_l)QoTno=&%`n+(srZ0tMS~oa!I9os8aWMJS6AuM)S`hhJ(_ zG`$xX{{@OA8j*gB=Nr-@Exf6-K(&{&I@Mw&Un5GU&%S3nh&+zOaf_V0Y`@ttkWU-a zCi?Ew9Cu6Y=85T2|^YqLu!v033PgZ(5W zxV%TM{Q}J_VCJ3}0Smz0#YbjRK{i&T-i@OzWTarrQQ!1Yxkc`#Z_P{8!&ehE#EXV@ zKCyVdF~`4$(~yt)V;XACRR!u?W9m zLX3#f+1%xSpev6W3&x@Hg&YZcP*J6X5+NDDZdtTBsyvuJAngVzsS$fyXrtQriQ27e zVJEcsKoKuxM*OqX7ySxdtj+cml1RX(Yj6t=68F7GI8VX+=t=dChJEQDE3&z&DDv*q zvXFe2c&|gVk3xF#v7AhFideOmJ-=4MzHi;*y(k=6j2B+t^e<9L@Kj+~LO=yN5a6U{ z?nCjNC+JEHr7GtH$O-m6HE9%^$s(D1NrhX1np1I1YRm9)@e-iO&YL=72Hys_Bwxe^4Y{jRY-7GaNeEv+X<7GH~*O zO#@isS-w*kQ;+nQcfR$pEF@_8fJ9#Zjc_Oi8XLGTpG($X+%dqV1xZO1ym%Z*?KQPHa8 zP$j2#&Y?8~)s7e>u!wu13Q8xlcE5szfF?b5chA``ci#x4#AX@zCrZM4wU$UAiKUAn z6vNbqy+S^sRL=`e!rM8v0jYayFX0cyj%A1&q))1212hd+=;km}r8sL<|s-xH81Dd>^TkHc>@ z<sfp+vlKo1rEt%+?}54j~3Nt2eQeBo5e6I z<~gRI7DN%Asf>-TJde+JddF)>X|xefe*Thke$@(8kM$AjMf=u7 zc`Dd)Jk87%mZGQD{z?QCZTSZn!weI&r*ktcLWiQ~R@n<`(=~hC=&o2; zC9Y*8u4s?!hVgc#r!ia^fkCEfl$=8_$aw1uH2rwt0Q`_qr2`S-p=@(&-C z(cgy3uzhlj28nWF8Vaq*BN2PMDk3$m!(uEB`f^6d9B(Z1&R07bS8FziJ>)Pl7Gbxt z6%1n`hBbk1O9h6H!`ZZQf#bld9EKxh;bjC}K0y2rS<1KLDjW zptoztVn5o8$8YU(fP0E7>(@A$53aahhy{6O`thJA3@h`HzU51;7Avm>!! z%w{h^>r5c!X4{nCKY*~5;r`NGiL!d+eL8Zc`#uflg%%yY56~M{o?0HoJ&FPiOOy{? zimxGW$K}Y6M6Q|EebQz;pC+6x+4ftl zAAEK3fpYJ6LuqXxQIZeNASNV7%s~31rk-Xt;07*xv@a+LY8c_RskOFDA)LEP^NSO{ z_$d;JGN?#%{BOE7QnkYD^DSbh*e(6~b5x+Gg$8S4U6azRe$r{z>fzub{WGni&5c!{$|uln(~(P( z5p<0x)Gc{{+i&=n^&uzWB6o6_TALpWUYPx-g?wW2Dt`0~Mg~}>Ty=w{pb;e5+|Gg%s ziQmt=Hv0WLN`NTrryI|NKTZ3etKA#l8guw$-d9Q#0F|o zTCFB7Rw*gHWS;;upAlxs!~=fHM6A%k>w)X^?MDwZ$Lv}3E>SFzQBv=!px>thBd#n( zii5V!RZ5tLTspzWZ4qpolg+%jzY?>iD@1>+j0N34oE8$d`yjdCtS_=6b7 z>0izAtRref55_lg>H~NJzJmg_wmy$9>RL?Ri#t=66!|h9XFE?%_6H}}c`Z=*UDC^# zP)s~0aV7r<&J%mis=Uwlr;Su0`DsqHOy)wtIKfBf09siQzGT1$C4MKJvGUS^h^fq3 zMm+v3_Q;w!M?T)?J)9X_*A@lb4eOHI_o=REXrQ5hI`J60H zCw8A;-*+^GOoH-4Ux>SONBwoAh0*uVGpR1)L_fZmmG#yXBk-gdw?Dkkil~moQ^68~cNvPO<1WL_EdV$x?1HHzA z>wj6kE6G`S`2mIsq5I^8>litZD$gc+Sh+&FuAI*9QNsP}YqZmvK%u^G2)|V0Dn0IpM_Fjr z{b8_RD(7IcTDd`wgBps>^tYHA4a%L!sJUtHXcp=Nsbt_pU4296*^|YAXy;WSansKM z6t`b>L^(;|b7}!%dtSZD-`+IyTk?hV>@K;xu3FcHs!0C4(C`(!{_6;CgqPjrkzu<| zuY)?jn>NFGZMmW)AgSb_WOXgZatR1`&V>FdM1ibd=qZ`2$(T)Lc443}&Ndx^D*|H1`h)L;H;n8E4GmKWIcE71qEqlk`_XYu5; zGxP4h(7+f0rXdVx3v_a^ce+k{%0HhkxY-x*+fD&9O$0ni5kTMe#>J+y@25Zlp^g(8 zvK~&)E!{X2UYgtP+B#EC4Zt2*-c_v%bMc)!z&y1;Mk(W}W(Br0+85e@S%8|LX)9^T z)Tuxyu1dM>oXUu7J`q>4eNTukhdxd>wdYXBW%YS{a>8|0@-Fbx>n|%*NIV$^y!$Neg&20x%7sIS!2p;EC&Z?T zD@#Ggpy^z2WGzEq={_rqnGzNccw~*&^bPTfC@;9mI_c0oaLMdD*3N&Brp!t#@RQId zO2G{k0X)PZYY+SruSREHt7C~`v5s?PZI>8}#wH2MJ(v9Q62JWclEs&@YFX>(MNY~4 zz^@;S_ExYuANo$zFfgS+QpnsM_lFYMmt-o5yt`NtN_K&oyh`qc62nBj)U)Q(xW+)t zw#n}iiVzYdT*ratq)8~=(zvyu+MZXWTuqc67B~ln z6q1w>K1>qbJolF%8nGfa7{L;5odDVm(ego=7~(gRH@DN8oBRDzjkyi#9yMqkxlY ziSjKhEw#KwBEDXR)p=v6P)GN%T~0PaeP-BFItUsdWR?Y2-<9R6~oUq=yO*&bu4z0Y?9ozQ;ZbDE8qLV#*DUHI zrw>H4wh`6r{r=u_Hwr!;xW`5>d*@JX?t#4HIP3oJVm!LN+M0EO&ljs;b-#E_44k9! z)?&I|88|%D*fjxJD@$JDfaVh$l1hi_t)lrm1Z_{c?*B(%EyQ^(qh%uq)mP<6QvrBn zUj(^z-ydc$6+tLeOT%7(0#A%0UZe%^xT;rjKZP33PeX}%P`V}e(S5>_@SuG z(ASPy;!Uu8L(kI|hR`yTt7o?aV{|OkWOEawG%fNm_jczKhL3ruXqe#Fk``z9a zSY`|qmg(5{FhLL+UXvoAgTjK(WFyxmCT@hk{VGpAMw5Y=s^k&!nR)_zuP`9HMjf!O zzG}`tqiA4r1%IlMdsjwP_F-lbSZmmld#CY4%_6))3cK;@z1!b1+=r-5vp<1r%V5b1U~NKhsNkRV?34Q(vukZ${uI#KAQ3j%Fx`hr;~YZY~>G;gZI+4T7i79P~Yt!-hW2ClHfeq@j+hR{nTD*qszKH$;YOt7TUq8bqTM9eXCTQvL zf;O%9HZ{wZkdr{`L*3c zg~+~7oJf;SWs$6%^#3?N?k9`0R*CIw?|gOn3cqzbHD2l^REn1PVsB*Y;YuWiJxHz6H8fI68zPc+lGT|dO)~U#y;Uvc(~gwxh<(>!Ydxq- zK4)2MiADg3Hs^=v?zOvkvD2+6x(;vmWu_juhdo(n_@_-|etNQkz-N}LW#A`2MG`Ai zVvOU#W7*C{nMLmC66LBnS;>S|x6pfrqbmRgev{;|o<0pET zh#(2c~< z3?VTLAt3$U`23!CJ!|;~%e8=;d-geJpS`dBxt!QxK%uH_z#C2PJ2Qa4x9{Z&swCPv`oTu|8}p=mWT8t4a_UIIcOO}0?ZLJHrTk^3 z>x?`$Oz4*m$aG8euN_+e3zB8#Sz=8*XZuK=D4JXfCLZ2<_H!m+$8XZmC0^_(=*oZz zKYNn1Eut(@+)9T-CbhN_gj;DQp?r9BNGi0zn5Tc34oW24>DAzZ;tzOlF|RW!T621_ z!SP-CB@XCaWz(t&*ojM1{(1!44(B`qyV&7U6ab(c7tmf1&X7dW@KOVphRo0aTSPE9 zhpp7Y=$a9iOw$4BHP9|a?ak1!CLQ0xUneaVM2-_N{ z(W@Xg(@**MC5Z^gN%j?@~dl4Hx(bRQ2} zWAF5Fo=02LVfls#!~q+(QaX^8&O9c=f-kTxs$hRhn!;O=CZ`1`{9X^K4q+kGp>dAp z+lzd<Fu}s8%wx zql1oIkluAoEWskH*WFmpC{!CROLeqP-|gWSj_hc!AOBwl>0Ng7i#YHjmK86j@&S!Jm8UrZ=o;!j#RnWqks|YKB^abDQ zGZxU<;x*qd2Y|)9WsQm!hSX)J6#>(Ui6nyu_R~Jb=IsaWvyRQ*XJ~VP-W}e!@yWSU zu;O=#AZSTlJb$w%l!&3!myo7ZckTcVl%ZYhS4?|(t!Nn<=ik>HCR!$S#J;8Jj_bRi znf+LbNNLG~5-ks{7j1oUmxPuyWs`jFZ!?w3oeO^YnobjSBR70}v}f$?vQsH7#FqH? z^Ei6y70r!$X|uZ8$(&u_ThOV9PV6Uq_S@%N%#8DV(mEJo@ zY4C}h0_3{$4}Jf>O<&?K0PWW3Z?eD+d#Ww4Iqk=miTvMtQibHjGRFTfL*+QrOX~G5 zop1h*pi93HRS*VHti8bmrfLjI_Kg6rhmWgwV<7WC%J|MamLITa?zR25*V{afPwBg# z?RPD8%NgV<4xn0Op~MmF%omG)m%e7hZGKmX8RBYX3nZXYPRKq(Al zQV&)&#>Zny#lbHZ*I77%3FV@gEcjN{7EyK^H?Wa!l#Kq8K+lME#@ni8_<1yRK_>&F!CXu!n!Gz7T-hZxR7R8sgV|S zeH&bw1zG9p`u8{=T59l9;fW8qgmCR-3V7B@z=Cn;*W;?mY797t*g8cu5`&FS)J5Hh zc7RD40Rqr>Qb=h5B`OTffVWWVJf>L5J$p|+G0>icJ12@}08uNrGx_MSf$gwLMm&3Q z_M!$I7NBvvRmb5r55oI~**DbH8ewHbx`Yczc zs(_La-4_CR*s*ztC!3Ff#tssg!t4;6dTCW~S9 z!kskRwoncDVp6nC=#tzV=T2y-K-F0vTUo>Ek|)z+^w(A;4y*3B6fYWjpI$nT7&xm@ zxQceEG-ZR)e}Cx)37qF)=0l-ZX>Ec_ldwXEB?eF>Hb&ou!GeScD&san7tEh9c3`AugM?KxO(%9XKCpG}#O>!l&4wj&2gm5e-YhXh287 zg8R2Kek;}CG@OMOz!s)EWPb-l+GFpki?Y&x3CI@Ai@;R60E162aV~Cb+NP%|i7KlS$!R-Bx8cH~(o8QWP&)7)Rbou30Xim2>6VIowzD~`5-Bn@O9Z1W#l%*U9LYK?Qc-!6Dh+4 zG&CC1s^`SY!&YAXHVsMetBW-!6=DF+_OFA*i02%F4ag^ZfwsqsiHx>gL%^{v4b9v4 znhBHc3E{>nJ@IqIfB(kXRIfessG_=kC@~iV|1(S-Z{*!2s!Df{?xr zN>isC59cr#q$pwuCMvbbo+M6O3@RW`Y~V?wvX?`FdVkZLe}QN1{nxMyJgvCGV_5hN zLKM8~8W}WaO91RbeV@DYDzFkMqoZok^}s~<`&i-LbP}9<C?ojLQ?uS)CPq?>iwy z#2j=TkiszSQ%|Cu&7yJS70evXi2M1Pww{-n{jP z$uH}(b&scO{86f0c;Bbz6aA-KD6|YPX5F@1HCz#HOX3Wb{PC) zRwD8KYGx^}eqXy62V^|pR*aCy>I{UhAv4EG)P5FsB0pMV8+((Wu2p+rtRlMRqj70A zp0H@$Y3G;ud+0fEtc5rsH>ddqtUrq-TkbQvJVm;il)@T&`}h5oZ4s2ByhG zhB1s!s^9{C087grMaHAOcnW6nCxUPS7|f^3f2RV~ze{cMY5@)7xSNbW7Kzeac1NyV zZ4+CECTz6ATRl1r{&$_?#T2m`A!5y?D*36$*QF#8KU#@2)V$FUjwifoQ--Vks!xV+ z5^lU>7*7S_?ewl$1m^nl^SiO-C1{++B~(nKg9MmDOL4!t@%B(7MZ#wH{tHFp1VxY! zL+y72m@b>eChRSztUD$Gj& zg}Yg_+oMN>$ah%G#H)p+?5y#m2kustnU!n|c(}U%ITvL)w$$1MM$?>6!IS@@6ab2> zZedRqPo^X~pBvi>VSeeOai_=nm=zxwGl~A^HXCsaDa|cw;8kXI>_3G|&=!VYEl!e;w_cJt@PPBr$YB zE+kQih7v05jkg7Cx-a5>X>!HQEEf#AloffwkJhQq>D>PKQP8>5RL(WAI+S$bz7LnX zQ^SYM0t`-R0KPgFQGLfT5Zn3QR*b*3kW>3TAeAKQkdF=Ba3%$rXa{CHf1ZL-58wKC zi?XSCqH*e8`ab4;*Q}r6j$+wdifBKrBQ88^`TMx$!#H!oeglwp>hQMe#E4vg-{wNj zCd+hYz~?!K7Gc1Ux&%67uO2tMN^{uz4e!`l!*)^fFQ(*Whi?0B+cb?5$X)zPYzs40 zz~~uTT@}Ms!aFo18vt2;h&-9t!w~T+c^Wb~@0Tyx-RZKKQ^ypWr6X#{V$@FO@Mj&F zo^bEU*q_mR614Pia0nLJu+Kf-lz!M$C(vnJd$2$uE*ja;Wl7m7mui`g5+xx_mF^lG zfT&R!xxlTa=T>`uTESueeZFRa-eeP&aqQE0V&7Z2`FoNPnbn_7C z67~fQAeLS9GCx8-DS4QGAFgn(gC(K5r zLl15X@e&jH$KZ~E_C;AkH!GmF;OY&Xwgv3ToWx(mt7$)-sUJtM^?aGX^_E+u%r&-U9Bezc6+(790? zo;4(#juz))T*=VNjrnppRSc2aOVb1(Kh*UjNiD|RAsmoi6twzeX0v;{e?)t(LNh?qLskv z0ZO6KH{suConTr&gnV=ItM(B2 zx3M1>|0t8W15GRDg@zJP76F9QBJtbf?<5~o!VBjEm*;lY!f$gatgy|&-=(fkl}>un zGoLD~GysI_)Hbo zBDA3|kDX871fWsy34Fmlw^g+L50}X#WzOk~yD5jI#NGmo19Q%-XX=fofe}SofQ4A- zm`uF_5YBjA!>Q?uN;EU(BmNZl+r2jsTBY_uoTW%lZQA%Q6)4_-+Mlf;6~8ogwnc8B zL3B6}k~_aUOGs8{r0L66mBCe}=B?H(aQ>=+d0qJB z>je`)Q_<-w4I&qlOv_RW*pq}u_>M@JW$@j1?vX-%C4(^>lU9k0cmnzyCDWb5#ql?}TYam6z=1 zqj9FBFdR#iT>6LaI0ot+>Shm+qf!h&qc++HVz>GvadEjqde(bhPjgyP{14V)5@-Sz zRJjhVS zAjQ!0pr`QJk2gv?eMdAkJ<1)&Zu&Fg7e>d#OQ`thKjRn03`YPlr4zyDRt%89O{+s;$dlPzvZkixMlIY#%fJ~tnnh(d9(12#6CQZXzh<{xq$r?zXjDG z*B_$j&>lob;_KyA0NwjWRpN4_7YORjpMQPoKw$_92k|={s`EvxXss6`tkEqJBXey+ zG{q*hExsy$`V-iTNBlpfI=*+Ucs@OG8U`ve*Ip1k@9Ab?dMw&2889brVs;ecu7+q( z$UY@bJY??QG#|b3QfrNmEe}--d6%N~{s`uV_h$~9x|JHAM!7M$x}hf%2(MLrNIJ_N zE9})=IWyttK8%7C_24Bt=WtTD`8d5#G1^>4p+_5EfXd3<-tIm1h&=AxW?Gp zuWy9dDoyY*L#=#GgVBJ3vnHC0?}Q0{Lb$XGg)u1aBI_>SDuE940z(ZkaP_Dn+u9q2 z5q3**>WiL{6lj##@CAAC#JP9oChXflhRG92axw^H7Z?i-vO|dbHA-wp+%`#hIB1R( z-(A#@4fKbN)OskN8;3BgEAd%H4q%9(yYd+I98nuf}o1}2TYta-n_?t zc`S+klGU|Yj=9QXr$x(-W2Y*;R2cfq%n5{Ow=gfD;Od=UI1l*HNhKX&I58fV(bnOH z!Wk5Wb%eb;!#a#qFw65G7>F>TEhxh?%^<`!8wkE+)G~Z01|zQmitNV31ClhJepw8p z0Sw*+vu6)w8Ll~K@ESoukpK^n&Y_Od&dwIfd+@%_$0X(f{a7Yi5V&yIJj2f&_ z(NacnmEetH)f#O>&W{Z>99hytjOrz@fp)cb^ zHo-5CW{=gq9Rh>_S>OEn=;jPHg<%Q$F2A7SC{{0HD1rR#-Y!b_iCg+5p410QWqQJZ z=b`r4JVemSwakSn;{n(QPY0sFFf>@4+)o3&QG4tyZEMSkDW#is_&} zo36sP^Hc$;>4sw!4ca)lb^Ws|UK1bIy7xFCvbTV|%Wm1kB+r}5(AkXbG{ZmjEQg$p zS}Egt@=-x`cE0SEVg1shaW0O79Za?0u2p2s8?AiaD?OTRedz>s>1yb}B&@3DzA%v7 zu(;0mJPyH}9AOm@F=l-YlUgL9-v{FR^m;46NguD%XGm43TW%zFF~v~p;gZKGcujyH zbzzJRoe}|L*vOBIs6<~@$5zVbVC63F-zI)jUk^)CaIC~nQC1_KbSAUT_y~QQr%U2M z&nmPfUt{m49{54|>W1U-IJzd+)vUy2Y0ydzXSc`o(pR}$kcLKp`gVj4;=bS}_>Z50 zLVF}#iEpUZ6da{rpM-gO)=5pUoKVd_(a;73;(ao1@7yTL_?@g)n(=?qX=g78wqTw6 z&IC=$I2H4pdje;uw7G!riMn}JEo;Yh5%bX&3QayXWGOcvuT1LlhGB9~Li4Vhf`jeL ztLz=ZtJR(GtL#2B>o+;Wr=?0j>x$!UfSY^*33zzHRS6#fU7qR|ql!_-x2umGASIIM zcv|Pb>IF^gd_@5ZM_>{jU=qeWVlZXVrh#?Zn}{S-JpFD$n&8vyA2N?Lqvmc|?&|>F zICb7Xd9h=@d<~HiR_t^nzA1m+3*ZqI;3H>=Qv2WR(nYRjtiR-s>$70bC;ppK_`Wis zJWefZ354Exo5ekcuY6OTBgmvfLes}iRvAIIH*R~D`eX6s%jdJOAOQ@ADC_AMCq zvW!_|wnc0a5VzchyxE{d6T5tFf%??BVY+H6lG&NEOYceFx(Cf#pIypV%a<#4%NnsT zM9``|aiiz8-eQiG#T$^$tRPSz=J)XoaX6BZYVVqP1Wk-I)X%;_(*xE67I@b&muu)( zX*m+(^i=S7JK1W+uao{j%4|9VoFUWDCzi4c-1K~#A7aQSeyge-xJlF|gLV(Y`zqT& z>?cSOrRCMsbS;YMLE2SNT5mSlMZt-7UNiAJNmqT+rB1RpbdnA7BoyEox9eN%5*;R& zU;lZFe6i7|@7w|>VLe7m-CY5ACQSGI>8Ha0usD|Un8UEn81T(7!_}v`P6qBW#sZ$lt+{BeOiy!Qi+H${ z>dCck(13f+(&lYThD_R80bBkseD;HT{xI6hR1#%yS8%QHA4M5Q0(~iLOLP1n*mbRo z66*>Sp=jLk_pt@nT2pANrh&lbp-Dwf<=r7VUMHe-{d&{Sa{ZA5j0hY~ST~e1;&x=B zAjIbE*Lx^o(^d!UME)^eG3d$l7|)(6zK0d%SmR$j`(#Dyyp^S@Oa_d)yqK3I{3s`M zZPPp*&1qes`;63J37UamuqqS+Te)uw?a?QZe zU|i!b+dA0t9!9;niMoJVb1p8WbwKtZLSrWjxSJt_E}e22%F91uco4?jA6oJIiy@jo zp6kEB^EU_FOp#Yj82qqwq4X!)OkMR|Rah4o8PipEP?u>a@kFdhLw2go950$0OL_h{ z!B0{T(ofoeye(~zjkVUm?W)8vA%2h$ShSHIen2Y3L2;pxu_#WgD$#LST@f=qT{XLr z)|#N*(D~p|4-UN&-gjM*nlKIvcArvy{=vNOQ09L81QFdg2*KcfMYhb;FICxMBy|TS zhe7!6mry{g%{EpN(H`Pd>ns9%l@;w33Uo)J{|?AMOYl{zWpQ1zvgt9ni9PtD{=s}= zG|VS|i1^GK7zA7j#&2*mCn8|tctFpj#)b5?3?i*a`%>q5lxidM=k&WHcOq~Zc(&x1 z*HP$o6jE;6ftvJP6u|Ef5%%a=ugXYghnqkt8|^e@s8f_{m3-Z0LEqE#WDg}x{M7H+ zL@7Wv5TU*vT+!qE+q8Jt;Wf_Ka*^A_;lfqMku24!?*$l(*dqo&kLA;HDA6n>_%gS7 zlG1hop5GK=*?~;N?^d7O5A#Kou+vzLGT$rE3a>ZMB=|H!V3V1hx%D6?&p721ReSws zs&2tU=NuA7p}9jqG}MrC4`_x^^OD$e2u`rbkLzuB(W1`yC^$BJrRwbfb0_`k4*Go0 z=q$RiGAboV+XgjpM>9fUtMi$IlMI>6@Df3lC4Jx)T~E*h@rPsZmS!tzGISCtm4Afa zyZhAf#PJ9ou0ztdMW&to^QVZKJv&W_1fmOafBd*{$9XWg$J=(S0^i@kZq<8{QCI?Dd=I zv*<&Bk4;0su0Px96Wb(L#BzfSHLTW~&>9`_jD9VQ7vVU%5>iSU_rMIURUq3PDN2T`(nUd)P%;*`M$Ew57Nj;q-VdPN{{7b~>>@fi8m zexPHW?96{56j%Uh%(VfE$@3Cl>~Mi7Jc9HZo?)pXlo3vshRt%ygW{1F?4w+c6|n7U z+%x^bDx}x*(XEYd+(0SU9Rvu7IP+@4vYH0~pCSO05G2iY9&;1ZL+(+nqvyRl)Y>mL zjOp+`O8TsC@ut6Hi)(kM=W+1=`uI_Nj;z%0;<%Q)cERVhT2vfF72&ETTI4AGrs5Ng z#A`SC=zX{X36<`Yr%E_b3*!GY6!M;Dyd%g4H$f#rP_0^ksRtWiajPkAJ*^`)R_Qfy znmb)*Bl3O&E+&jCa?CzCkd;+i5AdcG1FG7(A@am5+zAO_DIdilmM8CZ(5Xk_$}}^A z+d~p5Q|wnlCe95MJo`m4_z>{Gfm#1Um}lM~xmW_`-9U_=V1u%x_hU9s{DjCanP`K9 zl+_y>TQ>qtje|T?0N(1H*-W)2^V}XMY3dEGv^)aWWuvflVrrAYtF+H4ffxWcz@B75BDRSLe7g|$|-XC;=SjCZU_H?2@)o}`884`t2FPFlrJpvd=(m~SaO})-X@^dTq=ci^ze8BxGyMCS* zoF@HKuiYpt?vecW*B@KsEG3v&sdZbpfdYBJvqF#edu}IA%-pEihz5)EJU@=PxuT87 z<2wPut2QEwaGYpi?J@ch{53)p+jKu>WklZsM{gkfIC|N{pX9exA}=K2RMVdsDL5@q zONMw#LWUW0BoOCNqBt2xkTf|;Ful-O@_s7(@-`j!p}dI@Wgp{n-i7Zl6Zd|md3 zFD0MbSiC`TFKBO~`c8RQrKNG^R$(tcM9EopI6$olI>XZ1BoT+y*6kh1I zp8*?Q0}sM$C)36Qx>t+6lZxSzH>dD9ym=PqJ%HqYO7dm-ee;?qSG5g73m_}gY?GMz zu#>$Fs>bX1cp#AU?z?!mIr$g+E9eUHA9@x*A=r(|Aqknd=1 zVMuFC#GnQ1P6BjIeSZm-$2#Uo9Af}hqW`<(9@uuY^kWq1Om}8+9~P$|Ay1jrOk%j* zrR!~Nl*7Xzc$UtwEDa{Yv^!cpK?y`Da}?yahHu|aeVfS&LDlj1r{gOka>4Z&H=s)C0}$oWPDB}M)djl_}`Xdd|orcu3mCeks*<+ z&nB&Rt$8NwTBkhKGrb2|#M*QK`_mNtUSXhtXpswsz2ZUtFuGOZgUK6_iLt5W@T*vH zGrZ=d32oHOX5t0Jen;bxf}_Jd#-8X%LEfI&s-e$C8A9Q*Q!U5z+}z=^>y`!v(_6Mt zSG*4N$1SZ5qh^?S+N2YM@2ZBkCQNqd=J`wB!4}9((uw5YQOSry#l|NqAGR%zk;-RB zVKMi)v4XPu;#i*C3PjaCoqtZy@N|iA zI{#prG{hpLzs2$YS;orh0JGBwCWOrpJwXbi!zso8{mG zMtMavn!QQSz*?}D-3)WPsmSrqnY)7k_ zeu<$q0puUGX5o*3U`s`1jTVLoP0c^CFW0N;G^@5>dcR5Cr%(%H=Ke01N#3@-KM4cFd6D+J^WRR>at*M{eCO>Cw7ZazF) zg?}baGP=7V-GR6`^SGHf!gGGkfD(uvO@sUjhUe4l+&dZ4Q)aoTG$o7RnL7MFy1r8H zxBN-sQ~Nf(xz1I5953QK`XfK6FpvA1>jecvcLEOCuu5;f__XYP%nqF;D)9#{@q{7_U|u!`Dnm_5b*GGF1d&m-=`GBm#|8D0ayQJ z^W9iwxv2MadfN;5G`zGs$y8=Hq%ts^_f1Qc z6seXuYW*25 zd;4qmy~f>&>j}AAaY7-hl1=m_wmSZvOKs!x^~~J=wLQ7x2zD1>$Rk)y`AmA*LN+I4 zEAf5k;HJb81+Ym^j!O~i?~e21ZGm2<^%vUm?*cglMk(nLH=xq4siGg`72D9=EvZ^? zlGxKpD-V0Vq~_Q2gfSGF#thLv=MrO^P12eh<*Dy$5`V@)qF~51B%ajsJIYVc7%g5LSaDt+vNt~; zZw6nn2Vh0w5|)!SzwGDb(n10#K9ibq2&9Rs2i98$Bx@y}a^CgAS?+28Q#()ZpgwN_ zk$bA>CUKNykphrP1p|KA#}nCtg1vOsvL?MWo4f9DwrNkJS#|q`etG_*v;wxS*VToz z{#Ens@ec$F9>ww$=f22?*>}5JHcBz`aa$qM#90u#ZF*{{*MkG|-EGqh#%tMtTlA-x z8}6V=ts(5Sez(PWZS1w8^9>Kui+6XQ<-dQnk^n<^8K~HuA;d)iMC!9<$^M4x_T4V5PKg zDsXN#pAR65-HW&TuFy@j{ODW!;FWomw$rCJ0ay1;`HpQ$&0ncUeFazccNErh^;?#* zcTIyI&BHHoW1rjsG9TQj-IN%KRri5tqu?d^Bwx39jq~BAjuRNd<4v}YXAP=(Pfdm?_DtOcWJ3GOb_voL)D>Pf5J{pX15_whGjgg^f*jDlBWkX6yP}n=7z&$i5~^Nui=D zEDh{AU+h~3yb5dv*j`?-{$J7^_%NJh=A!fEPgRa1+x|Ni^*?~Tg(9|91xWbRFuH(# zmqFEiRH!R92>$+;ZO55sS%fByHoayB8Bn3Ew#b}Id8&oJ zyw^-1N|^@Ce)vm&B7Xjg9Kq8R%=L_aba*9P;6kbYd;D8LV5m@)Llv8#ho&NxG5dqdj2vfxs`KBrlCvE! z?=W9~L`bD!drhSJkRsrI6yuY}H9-M^iz@+M+g?)(mB@=yfyn<|ivP19_37`{-P`}- zSRvjE4Ke*&pNk3@Vc>CR*&OD{C*p)14@e~jEl+SCuJzyIpa`RqNWYQH3$FCtGav0>|7Qg&a=7s__GI2!LR1WfBIRh zT?5C(2>=uft1;s`ue~`oyxwZs@aP{FRCj48aKy;NSMsLlHx4h7ht`|Ie>+^5Ek^q^ z`rW|6Fg2XDB8I1vzlP10*C_{gNmbFD6aF9E)d9OytRUC87%x?Vi85$ZWF)Y+2hgW@ zR|4}k#)+nF3D>KA*Z(li?k+MM?}F}H!zBUnO%i(D`I$-omrH!NHkFisaFczfU>v;D z1VHoL#~%LNZA|+~PqSB{(00vJ!jU$0K?Uk(3E}$a9N#dB747~LTMv@XjqQE zZ%#N_4#d~^xyC;U1ENe}IJoeNV0c1KT3+Hn3nQs@gq+EcpP zB4fug9?&Izt3LcMv6qy@7)iYo;b(3vs*cct_k6ODn4=8?#H8#kn&1KS`?AtGkkBD8uQY&Uj$yIu9m4G zi6*N+xWqQ;XWDI|x4az2&oT zPb7+`MyN`b-(o~5)ehCEBQyh<%g^wOt-s=z4n9SeO`K{%;2Ud}=2}Pfhet<70#%wxjyNega&1Rb$vrq&ve!MQDHt&YqpV@2~t8|kU&!a86 zeNL-CvT_?ZGO0Mfd8;QDMD^U;Eu;3;Wph)&JMv4o&J&36CbYg%G4LN1C%<#|hF?bb)FDaRc2eMq!V zrMf1~*guyIVz+|$*Qs*+F z#pJeb)rPH2%O6re)sxTAuFIJGTJH?CrFubR$T?YqlPw1vjQQB8lh~HqlT5CZ&#ZC% z&q&@ScOX;l>2a3_*W9Ondpe6x`#a01D8@$GtWOUQLU7<&wILo4a4~~OeXccV$l&LE z#xyfm`Goh4mE~@)bZM;I#Bh@Y59*adQ0Mz&2z_REwWS$F3Fglfxdoz_;?bJ;UPr{= zE{mcswfR&((G19d=}iw_2ZHLBY=|bLVODKk6IuW8)4Si`a;>4-WSVLcRs{|XZyV#E zF^%u?ASIyemv=a~$iftuuzwT47k)o-caGDM+~p8<85&yCiDA=m7Z2aGg(-Q?bkGc= zn=VPb9iY!#@MxgeO`5MHclgmjl}LH|>z{;}_b?0y5^`m1QZxaQo3}$A z8QZ@8?+Yds`F)^{Jn^uQ7j!y?n3cT=7z5~+*h?`rG1G`ki~@w9CVrC@a$Rj@DGo8U zV<{z%Hc+lA1`XI6LU8R^D%&wgWns;E5@cm0+UTqWK*4m}&t`PYLpwsALwXv2CmsAA zb;!LTS^d>fO>avI7koEXyO*+h4DoUq)bO-!YN zj|RphDve9F@}a|o(c(kb?b^$Kuj1F4h-HtO zKsIE~Xg(R4vcM*9%LA~!i~)36b3|72Rr$AC(`xQ%Meplatn-_d*bJTh!JD=s1@aDaM$mPnwBLmZD=x!=Z}DO0yvK29 zt{v|NQ`*nUir$F3800s!9^x{F`m=C&;Va;iZ>xIQ%KY|DoXL-!!eoSwc$&PPFBhRw zUB&0Dme}ick|-ZplYabvUqw4J9Ux@OBR$N{T^Xud+-#4sAW!TzRXFScB95;a;t=M z`K)R10k2i}I&!`EnvHGeLS4DKzc+zb$igsCq;gEppwu^d$!*&&637(7NgjJ^%a+#P z#9k34)qZ!r&L*LG-&o1$u6)r;y7=I5y-StL`sYiN0aINywO5x;P@tiCHilUG2z8h@ zF?4HA_O(YL50R%6i1$!l$lxP$wL@Z>f|wS}Ebio2c-Ddf&1hu|2o?i9^z)|Lc#uOq zitqqPzofok8la>O?(`f(Nc5??h3Ie9SXReOOsCu4o5EQ&_Ic>&4@r{69|(Y?*`sa} z1+5g*1}IxIpBttrA+>779@*36#8i&dek5CsxXzd}g)-v4lMaOZ;huN$oKA9R8`{Jh zNYsk~Azz;5o8b4VK!tVlN&)t~DfVxiQs*~$MNMTrO$d`O>EuN6X zky^$t0g8X$2ZR$3hhQKhH$Sg<(CxMO2=O}QolwDL$4Kc`5-t3>4DMy1eZ&E{71bv(1@5X~k?l#{A*(~HvaJHRmhhRaxI$W!gxHyAfQ+FVLT$g-g9??A zHcgS}leCJoRjOtmNc0_|Z00{4u{K&si{?)N9Wg*o8>ot#voNkPrK%TBI`gjMUj3%3 z7d)0s=)}g}$@FHDopc9pFSk*@)13l%e3GBYJR#}@ifWmSrRGr514Ya3tyfvjG~X2J z*{eV5OmZVexgK2GS$FUHyO)$lJOT3g8NxB`hqE?C;A9ed{uy@@B>s; z3ylBc!I9tm2EmCEwT`nNoNrSI$C3gSeY_}r&KG-hWj22g5>oq>;DXT3?!h!mDyYx- zOItodXD5L_MPOwn9nM?I+R$phwNU-6*yr`+2L%OPS0J?I?VeiO_ zt#v=hLhvpLPVDq_x{4n`LV(ere***5iunuiz=P`~)LlyW|~HgjQ`tyIdzK0Sci*s{bB(hOG}(N^Pt1Lwjgxs?wM zxkk)O7&A}3>SJBViMEV7AD_hZa-b5cB+7Xu(b%6@^xn|y59{KpZ_HB%OaV+mO6dqT z!VQN@UUd9*RNA}3c9Anvh>_e4#D9{0baFbqXF5W0A*y-Y>)eZns_l8;je8v~;_-ek z|6>qtx5!Sc!)?*9KW3UV(Z^K4WE{6hcz`rlVoZ{%uDHhP!RwdVF%=0%xe^Ck!pMW# z{MeCkieH-)UOtK;<;gYiBa2>l^Ddvas)l)ko?<>ANH2KMbEn1w?ms~`J`=6<69~)) z39DB$n*m_K^DMf}9Zb6g$$rO6F6)(RzbFtaa~WVS<6bi81b!3&Xd2>Q9aMU&+=kyG z2WlE*#(scRGC64_*Y@0y-cCzRe>lssO(pWV=S9@7T?r9Q0A8`B-R(8Vsp9ed6ER4& z5^UUH>5pA=YnA`jy$yM(8dS;4flrwKT7zA=iQkv7egDX910%7#^3_UnW6GjA>UBOO zd{khc>j+G;_zyHC*0!I?m(^-sn$hMHj!&0<8I+v4dN`U40n4~syL`T$uEanclO7ziNi)VnFK8eu8C^N|>r!2&bNjp^55D_@=pyJyMH!_SN1GF!XUhUA$~ zL`TYi2g+s;>s(|m08*g;CH3~h)oxz~OSM)3mEQL`grPtS-uaGjb@U8!Dw?AFUiMTL z;$K}2e&ZW3!eR!Vdq(*0PRdmzvZJP*u9RgW(f ziDT>Td;%ek4emd#m~&v_L3i9pT3|7gK@xhXYB94eIC3dxSfAnpWS$<$-fqnOZX2nH zyjp$hob6|j_3>l7^U-`B%kmXy<70S%PRd4|qrTP7H~z%R2Bu>#ab3QBZ*Ey>Ke;Ow z!V^uONesz;KW=Y7Fa6|P)~$~4z8}l`S-+~4E(23qc0v@hN%lJ3VQNLFpBuN8(o=ag zcqs3bFahCTiRi7BfGOe84vBhLBZ1u@E=3=skt-d--*YldBvJK^SJ&VEze5szhHlJG z_s+|gn!z)85RG?oTKUG~p7reLFqiL8%WB;Dq(T;KBVjyU&s)2lucrYOpru1RN7{mz z6_>rR#=OzjTeUnb7d#jXiu(;RQ|n*^Gb{4`naip17Bo(Qlmc5FmexGSKV~wRGT3x1 z08t;VSut?Lw8243sm+15w^teb!>u~?!fScP?(N5igmUwBqo4UfO_Y%FILGA`U*6cU zutHnRa7u4eycD`A-sL;E$(%p<+J9hsduW*&mxEzzHj=V}PKx+L5yMUf&g*DrP^RA~ zpKe2TCga2TT{}0wDy_3-(>=k1(yfg})i)$N;X-&FT&-Ed2kaZeE-(g{MFLLxst&V=m+tD2K|)TrM9u<3>;j5GM0;CG>M%4%KJ>2Cm&E=* z=YDw5(Ifx0A|{}>I0ckI9*oxgahoXyK+>sPx6C5XeSG+)`I_IK{2F}qGmMaTTS{!^ z=csN^o$m0+&4)kY-9Me=gmwJSM3~VMEpKjmx&d351GQIr

srW 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 literal 0 HcmV?d00001 diff --git a/comps/agent/langchain/log b/comps/agent/langchain/log new file mode 100644 index 000000000..65e62c8c0 --- /dev/null +++ b/comps/agent/langchain/log @@ -0,0 +1,46 @@ +[HumanMessage(content="what's the most recent album from the founder of ysl records?", id='cfde4aba-0464-4ad9-bd1c-d3fc40bbb46e'), AIMessage(content='', addi +tional_kwargs={'tool_calls': [ChatCompletionOutputToolCall(function=ChatCompletionOutputFunctionDefinition(arguments={'query': 'founder of YSL Records'}, name +e='duckduckgo_search', description=None), id='142bd66e-7ec6-4381-bcb6-2d0bd4fcecd3', type='function')]}, id='6430421d-2238-452b-9fbe-4d6cc8bc0cd8', tool_call +s=[{'name': 'duckduckgo_search', 'args': {'query': 'founder of YSL Records'}, 'id': '142bd66e-7ec6-4381-bcb6-2d0bd4fcecd3', 'type': 'tool_call'}]), ToolMessa +ge(content='Prosecutors allege the chart-topping artist\'s label Young Stoner Life Records also stands for Young Slime ... a YSL co-founder who reached a ple +a deal in 2022 and claimed Young Thug was a part ... In 2016, Young Thug founded YSL Records, with its full name, "Young Stoner Life," perfectly representing + the enigmatic persona of the label. YSL Records quickly became known for its ... The longest criminal trial in the State of Georgia\'s history has been plag +ued by endless problems, including the recusal of not one but two judges in charge of the case. Young Thug and his lawyer ... Prosecutors say YSL - the acron +ym for the artist\'s label, Young Stoner Life Records - also stands for Young Slime Life, an Atlanta-based street gang affiliated with the national Bloods ga +ng. YSL Records calls its roster of artists the "Slime Family." ... YSL co-founder Walter Murphy entered a guilty plea on a single count of conspiracy to vio +late the state\'s Racketeer Influenced ...', name='duckduckgo_search', id='1d9ebf6b-bf62-469a-8d45-365c0fa15bba', tool_call_id='142bd66e-7ec6-4381-bcb6-2d0bd +4fcecd3'), HumanMessage(content='Retrieved document is not sufficient or relevant to answer the query. Reformulate the query to search knowledge base again.' +, id='6f2fb9db-e5b4-4483-b69a-06122c996eb9'), AIMessage(content='', additional_kwargs={'tool_calls': [ChatCompletionOutputToolCall(function=ChatCompletionOut +putFunctionDefinition(arguments={'query': 'YSL Records founder'}, name='duckduckgo_search', description=None), id='6d073578-5bf1-449e-8d32-4f3b5f999a06', typ +e='function')]}, id='50a644af-3117-4513-be56-5fb4b16d0481', tool_calls=[{'name': 'duckduckgo_search', 'args': {'query': 'YSL Records founder'}, 'id': '6d0735 +78-5bf1-449e-8d32-4f3b5f999a06', 'type': 'tool_call'}]), ToolMessage(content='That same year, he founded the YSL record label, which the rapper has used to p +ropel close friends and family members to industry success. The Birth Of YSL Records And Its Impact On The Music Industry In 2016, Young Thug founded YSL Rec +ords, with its full name, "Young Stoner Life," perfectly representing the enigmatic persona of ... Young Thug, who runs the Young Stoner Life label, has been + accused of co-founding the Young Slime Life Atlanta gang and violating the RICO act, among other charges. Here\'s what to know about the ... The rapper foun +dead the record label Young Stoner Life in 2016 as an imprint of 300 Entertainment. YSL Records calls its roster of artists the "Slime Family." One of the YSL + Records founder\'s charges includes conspiracy to violate the Racketeer Influenced and Corrupt Organizations Act (RICO).', name='duckduckgo_search', id='afc +cee2f-f36f-4d86-8abd-8d05d733649d', tool_call_id='6d073578-5bf1-449e-8d32-4f3b5f999a06'), HumanMessage(content='Retrieved document is not sufficient or relev +ant to answer the query. Reformulate the query to search knowledge base again.', id='22af0af8-92d0-4876-ad4e-16457c37f1f3'), AIMessage(content='', additional +_kwargs={'tool_calls': [ChatCompletionOutputToolCall(function=ChatCompletionOutputFunctionDefinition(arguments={'query': 'latest album by Young Thug'}, name= +'duckduckgo_search', description=None), id='2315fb35-11ec-4a6b-be86-405a1efef411', type='function')]}, id='189ba925-9f82-4e9e-bdab-6dcfc49a196e', tool_calls= +[{'name': 'duckduckgo_search', 'args': {'query': 'YSL Records founder name'}, 'id': 'cddeca43-88e2-4279-90aa-4c0b58b8b3c4', 'type': 'tool_call'}, {'name': 'd +uckduckgo_search', 'args': {'query': 'latest album by Young Thug'}, 'id': '2315fb35-11ec-4a6b-be86-405a1efef411', 'type': 'tool_call'}]), ToolMessage(content +='In 2016, Young Thug founded YSL Records, with its full name, "Young Stoner Life," perfectly representing the enigmatic persona of the label. YSL Records qu +ickly became known for its ... Thug is also the founder of Young Stoner Life Records. However, the rapper was arrested in May 2022 and charged with conspirin +g to violate the state\'s Racketeer Influenced and Corrupt Organizations (RICO) Act, according to. Prosecutors alleged that YSL was a street gang connected t +o a sleuth of crimes. Prosecutors say YSL - the acronym for the artist\'s label, Young Stoner Life Records - also stands for Young Slime Life, an Atlanta-bas +ed street gang affiliated with the national Bloods gang. Trontavious Stephens, a co-founder of YSL, took the witness stand for hours Wednesday and Thursday. +Stephens testified that he had a criminal record, but he said he did not commit crimes with ... Young Thug\'s arrest sent shockwaves through the rap communit +y. On May 9, 2022, the YSL rapper was apprehended along with 27 other alleged gang members as part of a sprawling 56-count indictment ...', name='duckduckgo_ +search', id='153464f0-aee1-4097-aae6-191ffa372aa6', tool_call_id='cddeca43-88e2-4279-90aa-4c0b58b8b3c4'), ToolMessage(content='The discography of American ra +pper Young Thug consists of three studio albums, two compilation albums, twelve self-released mixtapes, seven commercial mixtapes, three extended plays, and +sixty-nine singles (including 71 as a featured artist).. In 2015, Thug released his debut mixtape, Barter 6, which reached number 22 on the Billboard 200. Hi +s 2016 mixtape, I\'m Up matched the same position. Atlanta singer (and Thugger\'s rumored girlfriend) also released her own "From a Woman" Friday. Even behin +d bars, Young Thug remains prolific, with the rapper dropping his new single "From a Man ... Mariah The Scientist\'s new song "From A Woman" isn\'t musically + connected to "From A Man," though Mariah\'s cover art works as a flipside to Thug\'s. She sings about finding someone ... Future, Young Thug & More Join Mus +tard On New Album \'Faith Of A Mustard Seed\': Stream. News | Jul 28, 2024, 11:00 AM PDT. HipHopDX brings you all the newest Young Thug albums, songs, and .. +. Find top songs and albums by Young Thug including Lifestyle (feat. Young Thug & Rich Homie Quan), It\'s Up and more. ... JEFFREY to the country-ish sides o +f Beautiful Thugger Girls—has cracked the mainstream, laying the groundwork for a new crop of fellow eccentrics like Lil Uzi Vert and Playboi Carti. In other +words, Thug hasn\'t adjusted ...', name='duckduckgo_search', id='79667433-d46e-4536-a04b-842223008bdc', tool_call_id='2315fb35-11ec-4a6b-be86-405a1efef411') +, HumanMessage(content='Retrieved document is not sufficient or relevant to answer the query. Reformulate the query to search knowledge base again.', id='2f1 +b3773-8837-4f14-82b5-0a8bbccf3948'), HumanMessage(content='I don’t know.', id='a08edb17-a41a-458f-903e-0f7e15908e3f')] diff --git a/comps/agent/langchain/requirements.txt b/comps/agent/langchain/requirements.txt index ab3ff0c6b..431a5060a 100644 --- a/comps/agent/langchain/requirements.txt +++ b/comps/agent/langchain/requirements.txt @@ -1,11 +1,11 @@ # used by microservice docarray[full] - -#used by tools -duckduckgo-search fastapi huggingface_hub langchain + +#used by tools +langchain-google-community langchain-huggingface langchain-openai langchain_community diff --git a/comps/agent/langchain/src/agent.py b/comps/agent/langchain/src/agent.py index 0533826c5..a7713a29b 100644 --- a/comps/agent/langchain/src/agent.py +++ b/comps/agent/langchain/src/agent.py @@ -33,5 +33,15 @@ def instantiate_agent(args, strategy="react_langchain", with_memory=False): from .strategy.ragagent import RAGAgent return RAGAgent(args, with_memory, custom_prompt=custom_prompt) + elif strategy == "sql_agent_llama": + print("Initializing SQL Agent Llama") + from .strategy.sqlagent import SQLAgentLlama + + return SQLAgentLlama(args, with_memory, custom_prompt=custom_prompt) + elif strategy == "sql_agent": + print("Initializing SQL Agent") + from .strategy.sqlagent import SQLAgent + + return SQLAgent(args, with_memory, custom_prompt=custom_prompt) else: raise ValueError(f"Agent strategy: {strategy} not supported!") diff --git a/comps/agent/langchain/src/config.py b/comps/agent/langchain/src/config.py index 4178e2d9f..6bb1b12dd 100644 --- a/comps/agent/langchain/src/config.py +++ b/comps/agent/langchain/src/config.py @@ -72,3 +72,16 @@ if os.environ.get("timeout") is not None: env_config += ["--timeout", os.environ["timeout"]] + +# for sql agent +if os.environ.get("db_path") is not None: + env_config += ["--db_path", os.environ["db_path"]] + +if os.environ.get("db_name") is not None: + env_config += ["--db_name", os.environ["db_name"]] + +if os.environ.get("use_hints") is not None: + env_config += ["--use_hints", os.environ["use_hints"]] + +if os.environ.get("hints_file") is not None: + env_config += ["--hints_file", os.environ["hints_file"]] diff --git a/comps/agent/langchain/src/strategy/base_agent.py b/comps/agent/langchain/src/strategy/base_agent.py index beb4fa9f8..8c0048b87 100644 --- a/comps/agent/langchain/src/strategy/base_agent.py +++ b/comps/agent/langchain/src/strategy/base_agent.py @@ -36,5 +36,37 @@ def compile(self): def execute(self, state: dict): pass - def non_streaming_run(self, query, config): + def prepare_initial_state(self, query): raise NotImplementedError + + async def stream_generator(self, query, config): + initial_state = self.prepare_initial_state(query) + try: + async for event in self.app.astream(initial_state, config=config): + for node_name, node_state in event.items(): + yield f"--- CALL {node_name} ---\n" + for k, v in node_state.items(): + if v is not None: + yield f"{k}: {v}\n" + + yield f"data: {repr(event)}\n\n" + yield "data: [DONE]\n\n" + except Exception as e: + yield str(e) + + async def non_streaming_run(self, query, config): + initial_state = self.prepare_initial_state(query) + print("@@@ Initial State: ", initial_state) + try: + async for s in self.app.astream(initial_state, config=config, stream_mode="values"): + message = s["messages"][-1] + if isinstance(message, tuple): + print(message) + else: + message.pretty_print() + + last_message = s["messages"][-1] + print("******Response: ", last_message.content) + return last_message.content + except Exception as e: + return str(e) diff --git a/comps/agent/langchain/src/strategy/sqlagent/README.md b/comps/agent/langchain/src/strategy/sqlagent/README.md new file mode 100644 index 000000000..69d573b1c --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/README.md @@ -0,0 +1,44 @@ +# SQL Agents + +We currently have two types of SQL agents: + +1. `sql_agent_llama`: for using with open-source LLMs, especially `meta-llama/Llama-3.1-70B-Instruct` model. +2. `sql_agent`: for using with OpenAI models, we developed and validated with GPT-4o-mini. + +## Overview of sql_agent_llama + +The architecture of `sql_agent_llama` is shown in the figure below. +The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. + +![SQL Agent Llama Architecture](../../../assets/sql_agent_llama.png) + +### Database schema: + +We use langchain's [SQLDatabase](https://python.langchain.com/api_reference/community/utilities/langchain_community.utilities.sql_database.SQLDatabase.html#langchain_community.utilities.sql_database.SQLDatabase) API to get table names and schemas from the SQL database. User just need to specify `db_path` and `db_name`. The table schemas are incorporated into the prompts for the agent. + +### Hints module: + +If you want to use the hints module, you need to prepare a csv file that has 3 columns: `table_name`, `column_name`, `description`, and make this file available to the agent microservice. The `description` should include useful information (for example, domain knowledge) about a certain column in a table in the database. The hints module will pick up to five relevant columns together with their descriptions based on the user question using similarity search. The hints module will then pass these column descriptions to the agent node. + +### Output parser: + +Due to the current limitations of open source LLMs and serving frameworks (tgi and vllm) in generating tool call objects, we developed and optimized a custom output parser, together with our specially designed prompt templates. The output parser has 3 functions: + +1. Decide if a valid final answer presents in the raw agent output. This is needed because: a) we found sometimes agent would make guess or hallucinate data, so it is critical to double check, b) sometimes LLM does not strictly follow instructions on output format so simple string parsing can fail. We use one additional LLM call to perform this function. +2. Pick out tool calls from raw agent output. And check if the agent has made same tool calls before. If yes, remove the repeated tool calls. +3. Parse and review SQL query, and fix SQL query if there are errors. This proved to improve SQL agent performance since the initial query may contain errors and having a "second pair of eyes" can often spot the errors while the agent node itself may not be able to identify the errors in subsequent execution steps. + +## Overview of sql_agent + +The architecture of `sql_agent` is shown in the figure below. +The agent node takes user question, hints (optional) and history (when available), and thinks step by step to solve the problem. The basic idea is the same as `sql_agent_llama`. However, since OpenAI APIs produce well-structured tool call objects, we don't need a special output parser. Instead, we only keep the query fixer. + +![SQL Agent Architecture](../../../assets/sql_agent.png) + +## Limitations + +1. Agent connects to local SQLite databases with uri. +2. Agent is only allowed to issue "SELECT" commands to databases, i.e., agent can only query databases but cannot update databases. +3. We currently does not support "streaming" agent outputs on the fly for `sql_agent_llama`. + +Please submit issues if you want new features to be added. We also welcome community contributions! diff --git a/comps/agent/langchain/src/strategy/sqlagent/__init__.py b/comps/agent/langchain/src/strategy/sqlagent/__init__.py new file mode 100644 index 000000000..f8bf69ff4 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/__init__.py @@ -0,0 +1,5 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +from .planner import SQLAgentLlama +from .planner import SQLAgent diff --git a/comps/agent/langchain/src/strategy/sqlagent/hint.py b/comps/agent/langchain/src/strategy/sqlagent/hint.py new file mode 100644 index 000000000..06fb5b155 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/hint.py @@ -0,0 +1,56 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import glob +import os + +import pandas as pd + + +def read_hints(hints_file): + """ + hints_file: csv with columns: table_name, column_name, description + """ + hints_df = pd.read_csv(hints_file) + cols_descriptions = [] + values_descriptions = [] + for _, row in hints_df.iterrows(): + table_name = row["table_name"] + col_name = row["column_name"] + description = row["description"] + if not pd.isnull(description): + cols_descriptions.append(f"{table_name}.{col_name}: {description}") + values_descriptions.append(f"{col_name}: {description}") + return cols_descriptions, values_descriptions + + +def sort_list(list1, list2): + import numpy as np + + # Use numpy's argsort function to get the indices that would sort the second list + idx = np.argsort(list2) # ascending order + return np.array(list1)[idx].tolist()[::-1], np.array(list2)[idx].tolist()[::-1] # descending order + + +def get_topk_cols(topk, cols_descriptions, similarities): + sorted_cols, similarities = sort_list(cols_descriptions, similarities) + top_k_cols = sorted_cols[:topk] + output = [] + for col, sim in zip(top_k_cols, similarities[:topk]): + # print(f"{col}: {sim}") + if sim > 0.5: + output.append(col) + return output + + +def pick_hints(query, model, column_embeddings, complete_descriptions, topk=5): + # use similarity to get the topk columns + query_embedding = model.encode(query, convert_to_tensor=True) + similarities = model.similarity(query_embedding, column_embeddings).flatten() + + topk_cols_descriptions = get_topk_cols(topk, complete_descriptions, similarities) + + hint = "" + for col in topk_cols_descriptions: + hint += col + "\n" + return hint diff --git a/comps/agent/langchain/src/strategy/sqlagent/planner.py b/comps/agent/langchain/src/strategy/sqlagent/planner.py new file mode 100644 index 000000000..bc54d7d4d --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/planner.py @@ -0,0 +1,322 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import json +import os +from typing import Annotated, Sequence, TypedDict + +from langchain_core.messages import AIMessage, BaseMessage, HumanMessage, SystemMessage, ToolMessage +from langchain_core.prompts import PromptTemplate +from langchain_core.runnables import RunnableLambda +from langgraph.graph import END, StateGraph +from langgraph.graph.message import add_messages +from langgraph.managed import IsLastStep +from langgraph.prebuilt import ToolNode + +from ...utils import setup_chat_model, tool_renderer +from ..base_agent import BaseAgent +from .hint import pick_hints, read_hints +from .prompt import AGENT_NODE_TEMPLATE, AGENT_SYSM, QUERYFIXER_PROMPT +from .sql_tools import get_sql_query_tool, get_table_schema +from .utils import ( + LlamaOutputParserAndQueryFixer, + assemble_history, + convert_json_to_tool_call, + remove_repeated_tool_calls, +) + + +class AgentState(TypedDict): + """The state of the agent.""" + + messages: Annotated[Sequence[BaseMessage], add_messages] + is_last_step: IsLastStep + hint: str + + +class AgentNodeLlama: + def __init__(self, args, tools): + self.llm = setup_chat_model(args) + self.args = args + # two types of tools: + # sql_db_query - always available, no need to specify + # other tools - user defined + # here, self.tools is a list of user defined tools + self.tools = tool_renderer(tools) + print("@@@@ Tools: ", self.tools) + + self.chain = self.llm + + self.output_parser = LlamaOutputParserAndQueryFixer(chat_model=self.llm) + + if args.use_hints: + from sentence_transformers import SentenceTransformer + + self.cols_descriptions, self.values_descriptions = read_hints(args.hints_file) + self.embed_model = SentenceTransformer("BAAI/bge-large-en-v1.5") + self.column_embeddings = self.embed_model.encode(self.values_descriptions) + + def __call__(self, state): + print("----------Call Agent Node----------") + question = state["messages"][0].content + table_schema, num_tables = get_table_schema(self.args.db_path) + if self.args.use_hints: + if not state["hint"]: + hints = pick_hints(question, self.embed_model, self.column_embeddings, self.cols_descriptions) + else: + hints = state["hint"] + print("@@@ Hints: ", hints) + else: + hints = "" + + history = assemble_history(state["messages"]) + print("@@@ History: ", history) + + prompt = AGENT_NODE_TEMPLATE.format( + domain=self.args.db_name, + tools=self.tools, + num_tables=num_tables, + tables_schema=table_schema, + question=question, + hints=hints, + history=history, + ) + + output = self.chain.invoke(prompt) + output = self.output_parser.parse( + output.content, history, table_schema, hints, question, state["messages"] + ) # text: str, history: str, db_schema: str, hint: str + print("@@@@@ Agent output:\n", output) + + # convert output to tool calls + tool_calls = [] + for res in output: + if "tool" in res: + tool_call = convert_json_to_tool_call(res) + tool_calls.append(tool_call) + + # check if same tool calls have been made before + # if yes, then remove the repeated tool calls + if tool_calls: + new_tool_calls = remove_repeated_tool_calls(tool_calls, state["messages"]) + print("@@@@ New Tool Calls:\n", new_tool_calls) + else: + new_tool_calls = [] + + if new_tool_calls: + ai_message = AIMessage(content="", tool_calls=new_tool_calls) + elif tool_calls: + ai_message = AIMessage(content="Repeated previous steps.", tool_calls=tool_calls) + elif "answer" in output[0]: + ai_message = AIMessage(content=str(output[0]["answer"])) + else: + ai_message = AIMessage(content=str(output)) + + return {"messages": [ai_message], "hint": hints} + + +class SQLAgentLlama(BaseAgent): + # need new args: + # # db_name and db_path + # # use_hints, hints_file + def __init__(self, args, with_memory=False, **kwargs): + super().__init__(args, local_vars=globals(), **kwargs) + # note: here tools only include user defined tools + # we need to add the sql query tool as well + print("@@@@ user defined tools: ", self.tools_descriptions) + agent = AgentNodeLlama(args, self.tools_descriptions) + sql_tool = get_sql_query_tool(args.db_path) + print("@@@@ SQL Tool: ", sql_tool) + tools = self.tools_descriptions + [sql_tool] + print("@@@@ ALL Tools: ", tools) + tool_node = ToolNode(tools) + + workflow = StateGraph(AgentState) + + # Define the nodes we will cycle between + workflow.add_node("agent", agent) + workflow.add_node("tools", tool_node) + + workflow.set_entry_point("agent") + + workflow.add_conditional_edges( + "agent", + self.decide_next_step, + { + # If `tools`, then we call the tool node. + "tools": "tools", + "agent": "agent", + "end": END, + }, + ) + + # We now add a normal edge from `tools` to `agent`. + # This means that after `tools` is called, `agent` node is called next. + workflow.add_edge("tools", "agent") + + self.app = workflow.compile() + + def decide_next_step(self, state: AgentState): + messages = state["messages"] + last_message = messages[-1] + if last_message.tool_calls and last_message.content == "Repeated previous steps.": + print("@@@@ Repeated tool calls from previous steps, go back to agent") + return "agent" + elif last_message.tool_calls and last_message.content != "Repeated previous steps.": + print("@@@@ New Tool calls, go to tools") + return "tools" + else: + return "end" + + def prepare_initial_state(self, query): + return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} + + +################################################ +# Below is SQL agent using OpenAI models +################################################ +class AgentNode: + def __init__(self, args, llm, tools): + self.llm = llm.bind_tools(tools) + self.args = args + if args.use_hints: + from sentence_transformers import SentenceTransformer + + self.cols_descriptions, self.values_descriptions = read_hints(args.hints_file) + self.embed_model = SentenceTransformer("BAAI/bge-large-en-v1.5") + self.column_embeddings = self.embed_model.encode(self.values_descriptions) + + def __call__(self, state): + print("----------Call Agent Node----------") + question = state["messages"][0].content + table_schema, num_tables = get_table_schema(self.args.db_path) + if self.args.use_hints: + if not state["hint"]: + hints = pick_hints(question, self.embed_model, self.column_embeddings, self.cols_descriptions) + else: + hints = state["hint"] + else: + hints = "" + + sysm = AGENT_SYSM.format(num_tables=num_tables, tables_schema=table_schema, question=question, hints=hints) + _system_message = SystemMessage(content=sysm) + state_modifier_runnable = RunnableLambda( + lambda state: [_system_message] + state["messages"], + name="StateModifier", + ) + + chain = state_modifier_runnable | self.llm + response = chain.invoke(state) + + return {"messages": [response], "hint": hints} + + +class QueryFixerNode: + def __init__(self, args, llm): + prompt = PromptTemplate( + template=QUERYFIXER_PROMPT, + input_variables=["DATABASE_SCHEMA", "QUESTION", "HINT", "QUERY", "RESULT"], + ) + self.chain = prompt | llm + self.args = args + + def get_sql_query_and_result(self, state): + messages = state["messages"] + assert isinstance(messages[-1], ToolMessage), "The last message should be a tool message" + result = messages[-1].content + id = messages[-1].tool_call_id + query = "" + for msg in reversed(messages): + if isinstance(msg, AIMessage) and msg.tool_calls: + if msg.tool_calls[0]["id"] == id: + query = msg.tool_calls[0]["args"]["query"] + break + print("@@@@ Executed SQL Query: ", query) + print("@@@@ Execution Result: ", result) + return query, result + + def __call__(self, state): + print("----------Call Query Fixer Node----------") + table_schema, _ = get_table_schema(self.args.db_path) + question = state["messages"][0].content + hint = state["hint"] + query, result = self.get_sql_query_and_result(state) + response = self.chain.invoke( + { + "DATABASE_SCHEMA": table_schema, + "QUESTION": question, + "HINT": hint, + "QUERY": query, + "RESULT": result, + } + ) + # print("@@@@@ Query fixer output:\n", response.content) + return {"messages": [response]} + + +class SQLAgent(BaseAgent): + def __init__(self, args, with_memory=False, **kwargs): + super().__init__(args, local_vars=globals(), **kwargs) + + sql_tool = get_sql_query_tool(args.db_path) + tools = self.tools_descriptions + [sql_tool] + print("@@@@ ALL Tools: ", tools) + + tool_node = ToolNode(tools) + agent = AgentNode(args, self.llm, tools) + query_fixer = QueryFixerNode(args, self.llm) + + workflow = StateGraph(AgentState) + + # Define the nodes we will cycle between + workflow.add_node("agent", agent) + workflow.add_node("query_fixer", query_fixer) + workflow.add_node("tools", tool_node) + + workflow.set_entry_point("agent") + + # We now add a conditional edge + workflow.add_conditional_edges( + "agent", + self.should_continue, + { + # If `tools`, then we call the tool node. + "continue": "tools", + "end": END, + }, + ) + + workflow.add_conditional_edges( + "tools", + self.should_go_to_query_fixer, + {"true": "query_fixer", "false": "agent"}, + ) + workflow.add_edge("query_fixer", "agent") + + self.app = workflow.compile() + + # Define the function that determines whether to continue or not + def should_continue(self, state: AgentState): + messages = state["messages"] + last_message = messages[-1] + # If there is no function call, then we finish + if not last_message.tool_calls: + return "end" + # Otherwise if there is, we continue + else: + return "continue" + + def should_go_to_query_fixer(self, state: AgentState): + messages = state["messages"] + last_message = messages[-1] + assert isinstance(last_message, ToolMessage), "The last message should be a tool message" + print("@@@@ Called Tool: ", last_message.name) + if last_message.name == "sql_db_query": + print("@@@@ Going to Query Fixer") + return "true" + else: + print("@@@@ Going back to Agent") + return "false" + + def prepare_initial_state(self, query): + return {"messages": [HumanMessage(content=query)], "is_last_step": IsLastStep(False), "hint": ""} diff --git a/comps/agent/langchain/src/strategy/sqlagent/prompt.py b/comps/agent/langchain/src/strategy/sqlagent/prompt.py new file mode 100644 index 000000000..dae63766f --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/prompt.py @@ -0,0 +1,225 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +AGENT_NODE_TEMPLATE = """\ +You are an SQL expert tasked with answering questions about {domain}. +In addition to the database, you have the following tools to gather information: +{tools} + +You can access a database that has {num_tables} tables. The schema of the tables is as follows. Read the schema carefully. +**Table Schema:** +{tables_schema} + +**Hints:** +{hints} + +When querying the database, remember the following: +1. Unless the user specifies a specific number of examples they wish to obtain, always limit your query to no more than 20 results. +2. Only query columns that are relevant to the question. Remember to also fetch the ranking or filtering columns to check if they contain nulls. +3. DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database. + +**Output format:** +1. Write down your thinking process. +2. When querying the database, write your SQL query in the following format: +```sql +SELECT column1, column2, ... +``` +3. When making tool calls, you must use the following format. Make ONLY one tool call at a time. +TOOL CALL: {{"tool": "tool1", "args": {{"arg1": "value1", "arg2": "value2", ...}}}} + +4. After you have arrived at the answer with data and reasoning, write your final answer after "FINAL ANSWER". + +You have done the following steps so far: +**Your previous steps:** +{history} + +**IMPORTANT:** +* Review your previous steps carefully and utilize them to answer the question. Do not repeat your previous steps. +* The database may not have all the information needed to answer the question. Use the additional tools provided if necessary. +* If you did not get the answer at first, do not give up. Reflect on the steps that you have taken and try a different way. Think out of the box. + +Now take a deep breath and think step by step to answeer the following question. +Question: +{question} +""" + + +ANSWER_PARSER_PROMPT = """\ +Review the output from an SQL agent and determine if a correct answer has been provided and grounded on real data. + +Say "yes" when all the following conditions are met: +1. The answer is complete and does not require additional steps to be taken. +2. The answer does not have placeholders that need to be filled in. +3. The agent has acquired data from database and its execution history is Not empty. +4. If agent made mistakes in its execution history, the agent has corrected them. +5. If agent has tried to get data several times but cannot get all the data needed, the agent has come up with an answer based on available data and reasonable assumptions. + +If the conditions above are not met, say "no". + +Here is the output from the SQL agent: +{output} +====================== +Here is the agent execution history: +{history} +====================== + +Has a final answer been provided based on real data? Analyze the agent output and make your judgement "yes" or "no". +""" + + +SQL_QUERY_FIXER_PROMPT = """\ +You are an SQL database expert tasked with reviewing a SQL query written by an agent. +**Procedure:** +1. Review Database Schema: +- Examine the table creation statements to understand the database structure. +2. Review the Hint provided. +- Use the provided hints to understand the domain knowledge relevant to the query. +3. Check against the following common errors: +- Failure to exclude null values, ranking or filtering columns have nulls, syntax errors, incorrect table references, incorrect column references, logical mistakes. +4. Check if aggregation should be used: +- Read the user question, and determine if user is asking for specific instances or aggregated info. If aggregation is needed, check if the original SQL query has used appropriate functions like COUNT and SUM. +5. Correct the Query only when Necessary: +- If issues were identified, modify the SQL query to address the identified issues, ensuring it correctly fetches the requested data according to the database schema and query requirements. + +======= Your task ======= +************************** +Table creation statements +{DATABASE_SCHEMA} +************************** +Hint: +{HINT} +************************** +The SQL query to review: +{QUERY} +************************** +User question: +{QUESTION} +************************** + +Now analyze the SQL query step by step. Present your reasonings. + +If you identified issues in the original query, write down the corrected SQL query in the format below: +```sql +SELECT column1, column2, ... +``` + +If the original SQL query is correct, just say the query is correct. + +Note: Some user questions can only be answered partially with the database. This is OK. The agent may use other tools in subsequent steps to get additional info. In some cases, the agent may have got additional info with other tools and have incorporated those in its query. Your goal is to review the SQL query and fix it when necessary. +Only use the tables provided in the database schema in your corrected query. Do not join tables that are not present in the schema. Do not create any new tables. +If you cannot do better than the original query, just say the query is correct. +""" + +SQL_QUERY_FIXER_PROMPT_with_result = """\ +You are an SQL database expert tasked with reviewing a SQL query. +**Procedure:** +1. Review Database Schema: +- Examine the table creation statements to understand the database structure. +2. Review the Hint provided. +- Use the provided hints to understand the domain knowledge relevant to the query. +3. Analyze Query Requirements: +- User Question: Consider what information the query is supposed to retrieve. Decide if aggregation like COUNT or SUM is needed. +- Executed SQL Query: Review the SQL query that was previously executed. +- Execution Result: Analyze the outcome of the executed query. Think carefully if the result makes sense. +4. Check against the following common errors: +- Failure to exclude null values, ranking or filtering columns have nulls, syntax errors, incorrect table references, incorrect column references, logical mistakes. +5. Correct the Query only when Necessary: +- If issues were identified, modify the SQL query to address the identified issues, ensuring it correctly fetches the requested data according to the database schema and query requirements. + +======= Your task ======= +************************** +Table creation statements +{DATABASE_SCHEMA} +************************** +Hint: +{HINT} +************************** +User Question: +{QUESTION} +************************** +The SQL query executed was: +{QUERY} +************************** +The execution result: +{RESULT} +************************** + +Now analyze the SQL query step by step. Present your reasonings. + +If you identified issues in the original query, write down the corrected SQL query in the format below: +```sql +SELECT column1, column2, ... +``` + +If the original SQL query is correct, just say the query is correct. + +Note: Some user questions can only be answered partially with the database. This is OK. The agent may use other tools in subsequent steps to get additional info. In some cases, the agent may have got additional info with other tools and have incorporated those in its query. Your goal is to review the SQL query and fix it when necessary. +Only use the tables provided in the database schema in your corrected query. Do not join tables that are not present in the schema. Do not create any new tables. +If you cannot do better than the original query, just say the query is correct. +""" + + +########################################## +## Prompt templates for SQL agent using OpenAI models +########################################## +AGENT_SYSM = """\ +You are an SQL expert tasked with answering questions about schools in California. +You can access a database that has {num_tables} tables. The schema of the tables is as follows. Read the schema carefully. +{tables_schema} +**************** +Question: {question} + +Hints: +{hints} +**************** + +When querying the database, remember the following: +1. You MUST double check your SQL query before executing it. Reflect on the steps you have taken and fix errors if there are any. If you get an error while executing a query, rewrite the query and try again. +2. Unless the user specifies a specific number of examples they wish to obtain, always limit your query to no more than 20 results. +3. Only query columns that are relevant to the question. +4. DO NOT make any DML statements (INSERT, UPDATE, DELETE, DROP etc.) to the database. + +IMPORTANT: +* Divide the question into sub-questions and conquer sub-questions one by one. +* You may need to combine information from multiple tables to answer the question. +* If database does not have all the information needed to answer the question, use the web search tool or your own knowledge. +* If you did not get the answer at first, do not give up. Reflect on the steps that you have taken and try a different way. Think out of the box. You hard work will be rewarded. + +Now take a deep breath and think step by step to solve the problem. +""" + +QUERYFIXER_PROMPT = """\ +You are an SQL database expert tasked with reviewing a SQL query. +**Procedure:** +1. Review Database Schema: +- Examine the table creation statements to understand the database structure. +2. Review the Hint provided. +- Use the provided hints to understand the domain knowledge relevant to the query. +3. Analyze Query Requirements: +- Original Question: Consider what information the query is supposed to retrieve. +- Executed SQL Query: Review the SQL query that was previously executed. +- Execution Result: Analyze the outcome of the executed query. Think carefully if the result makes sense. If the result does not make sense, identify the issues with the executed SQL query (e.g., null values, syntax +errors, incorrect table references, incorrect column references, logical mistakes). +4. Correct the Query if Necessary: +- If issues were identified, modify the SQL query to address the identified issues, ensuring it correctly fetches the requested data +according to the database schema and query requirements. +5. If the query is correct, provide the same query as the final answer. + +======= Your task ======= +************************** +Table creation statements +{DATABASE_SCHEMA} +************************** +Hint: +{HINT} +************************** +The original question is: +Question: +{QUESTION} +The SQL query executed was: +{QUERY} +The execution result: +{RESULT} +************************** +Based on the question, table schema, hint and the previous query, analyze the result. Fix the query if needed and provide your reasoning. If the query is correct, provide the same query as the final answer. +""" diff --git a/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py new file mode 100644 index 000000000..bb76716c6 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/sql_tools.py @@ -0,0 +1,32 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +from langchain_community.tools.sql_database.tool import QuerySQLDataBaseTool +from langchain_community.utilities import SQLDatabase + + +def connect_to_db(db_path): + uri = "sqlite:///{path}".format(path=db_path) + db = SQLDatabase.from_uri(uri) + return db + + +def get_table_schema(db_path): + db = connect_to_db(db_path) + table_names = ", ".join(db.get_usable_table_names()) + num_tables = len(table_names.split(",")) + schema = db.get_table_info_no_throw([t.strip() for t in table_names.split(",")]) + return schema, num_tables + + +def get_sql_query_tool(db_path): + db = connect_to_db(db_path) + query_sql_database_tool_description = ( + "Input to this tool is a detailed and correct SQL query, output is a " + "result from the database. If the query is not correct, an error message " + "will be returned. If an error is returned, rewrite the query, check the " + "query, and try again. " + ) + db_query_tool = QuerySQLDataBaseTool(db=db, name="sql_db_query", description=query_sql_database_tool_description) + print("SQL Query Tool Created: ", db_query_tool) + return db_query_tool diff --git a/comps/agent/langchain/src/strategy/sqlagent/utils.py b/comps/agent/langchain/src/strategy/sqlagent/utils.py new file mode 100644 index 000000000..32bf611a9 --- /dev/null +++ b/comps/agent/langchain/src/strategy/sqlagent/utils.py @@ -0,0 +1,219 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import json +import uuid + +from langchain_core.messages import AIMessage, ToolMessage +from langchain_core.messages.tool import ToolCall + +from .prompt import ANSWER_PARSER_PROMPT, SQL_QUERY_FIXER_PROMPT, SQL_QUERY_FIXER_PROMPT_with_result + + +def parse_answer_with_llm(text, history, chat_model): + if "FINAL ANSWER:" in text.upper(): + if history == "": + history = "The agent execution history is empty." + + prompt = ANSWER_PARSER_PROMPT.format(output=text, history=history) + response = chat_model.invoke(prompt).content + print("@@@ Answer parser response: ", response) + + temp = response[:5] + if "yes" in temp.lower(): + return text.split("FINAL ANSWER:")[-1] + else: + temp = response.split("\n")[0] + if "yes" in temp.lower(): + return text.split("FINAL ANSWER:")[-1] + return None + else: + return None + + +def get_tool_calls_other_than_sql(text): + """Get the tool calls other than sql_db_query.""" + tool_calls = [] + text = text.replace("assistant", "") + json_lines = text.split("\n") + # only get the unique lines + json_lines = list(set(json_lines)) + for line in json_lines: + if "TOOL CALL:" in line: + if "sql_db_query" not in line: + line = line.replace("TOOL CALL:", "") + if "assistant" in line: + line = line.replace("assistant", "") + if "\\" in line: + line = line.replace("\\", "") + try: + parsed_line = json.loads(line) + if isinstance(parsed_line, dict): + if "tool" in parsed_line: + tool_calls.append(parsed_line) + + except: + pass + return tool_calls + + +def get_all_sql_queries(text): + queries = [] + if "```sql" in text: + temp = text.split("```sql") + for t in temp: + if "```" in t: + query = t.split("```")[0] + if "SELECT" in query.upper() and "TOOL CALL" not in query.upper(): + queries.append(query) + + return queries + + +def get_the_last_sql_query(text): + queries = get_all_sql_queries(text) + if queries: + return queries[-1] + else: + return None + + +def check_query_if_executed_and_result(query, messages): + # get previous sql_db_query tool calls + previous_tool_calls = [] + for m in messages: + if isinstance(m, AIMessage) and m.tool_calls: + for tc in m.tool_calls: + if tc["name"] == "sql_db_query": + previous_tool_calls.append(tc) + for tc in previous_tool_calls: + if query == tc["args"]["query"]: + return get_tool_output(messages, tc["id"]) + + return None + + +def parse_and_fix_sql_query_v2(text, chat_model, db_schema, hint, question, messages): + chosen_query = get_the_last_sql_query(text) + if chosen_query: + # check if the query has been executed before + # if yes, pass execution result to the fixer + # if not, pass only the query to the fixer + result = check_query_if_executed_and_result(chosen_query, messages) + if result: + prompt = SQL_QUERY_FIXER_PROMPT_with_result.format( + DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question, RESULT=result + ) + else: + prompt = SQL_QUERY_FIXER_PROMPT.format( + DATABASE_SCHEMA=db_schema, HINT=hint, QUERY=chosen_query, QUESTION=question + ) + + response = chat_model.invoke(prompt).content + print("@@@ SQL query fixer response: ", response) + if "query is correct" in response.lower(): + return chosen_query + else: + # parse the fixed query + fixed_query = get_the_last_sql_query(response) + return fixed_query + else: + return None + + +class LlamaOutputParserAndQueryFixer: + def __init__(self, chat_model): + self.chat_model = chat_model + + def parse(self, text: str, history: str, db_schema: str, hint: str, question: str, messages: list): + print("@@@ Raw output from llm:\n", text) + answer = parse_answer_with_llm(text, history, self.chat_model) + if answer: + print("Final answer exists.") + return answer + else: + tool_calls = get_tool_calls_other_than_sql(text) + sql_query = parse_and_fix_sql_query_v2(text, self.chat_model, db_schema, hint, question, messages) + if sql_query: + sql_tool_call = [{"tool": "sql_db_query", "args": {"query": sql_query}}] + tool_calls.extend(sql_tool_call) + if tool_calls: + return tool_calls + else: + return text + + +def convert_json_to_tool_call(json_str): + tool_name = json_str["tool"] + tool_args = json_str["args"] + tcid = str(uuid.uuid4()) + tool_call = ToolCall(name=tool_name, args=tool_args, id=tcid) + return tool_call + + +def get_tool_output(messages, id): + tool_output = "" + for msg in reversed(messages): + if isinstance(msg, ToolMessage): + if msg.tool_call_id == id: + tool_output = msg.content + tool_output = tool_output[:1000] # limit to 1000 characters + break + return tool_output + + +def assemble_history(messages): + """ + messages: AI, TOOL, AI, TOOL, etc. + """ + query_history = "" + breaker = "-" * 10 + n = 1 + for m in messages[1:]: # exclude the first message + if isinstance(m, AIMessage): + # if there is tool call + if hasattr(m, "tool_calls") and len(m.tool_calls) > 0 and m.content != "Repeated previous steps.": + for tool_call in m.tool_calls: + tool = tool_call["name"] + tc_args = tool_call["args"] + id = tool_call["id"] + tool_output = get_tool_output(messages, id) + if tool == "sql_db_query": + sql_query = tc_args["query"] + query_history += ( + f"Step {n}. Executed SQL query: {sql_query}\nQuery Result: {tool_output}\n{breaker}\n" + ) + else: + query_history += ( + f"Step {n}. Called tool: {tool} - {tc_args}\nTool Output: {tool_output}\n{breaker}\n" + ) + n += 1 + elif m.content == "Repeated previous steps.": # repeated steps + query_history += f"Step {n}. Repeated tool calls from previous steps.\n{breaker}\n" + n += 1 + else: + # did not make tool calls + query_history += f"Assistant Output: {m.content}\n" + + return query_history + + +def remove_repeated_tool_calls(tool_calls, messages): + """Remove repeated tool calls in the messages. + + tool_calls: list of tool calls: ToolCall(name=tool_name, args=tool_args, id=tcid) + messages: list of messages: AIMessage, ToolMessage, HumanMessage + """ + # first get all the previous tool calls in messages + previous_tool_calls = [] + for m in messages: + if isinstance(m, AIMessage) and m.tool_calls and m.content != "Repeated previous steps.": + for tc in m.tool_calls: + previous_tool_calls.append({"tool": tc["name"], "args": tc["args"]}) + + unique_tool_calls = [] + for tc in tool_calls: + if {"tool": tc["name"], "args": tc["args"]} not in previous_tool_calls: + unique_tool_calls.append(tc) + + return unique_tool_calls diff --git a/comps/agent/langchain/src/utils.py b/comps/agent/langchain/src/utils.py index e8a317a5d..bdd25f518 100644 --- a/comps/agent/langchain/src/utils.py +++ b/comps/agent/langchain/src/utils.py @@ -139,8 +139,14 @@ def get_args(): parser.add_argument("--with_store", type=bool, default=False) parser.add_argument("--timeout", type=int, default=60) + # for sql agent + parser.add_argument("--db_path", type=str, help="database path") + parser.add_argument("--db_name", type=str, help="database name") + parser.add_argument("--use_hints", type=str, default="false", help="If this agent uses hints") + parser.add_argument("--hints_file", type=str, help="path to the hints file") + sys_args, unknown_args = parser.parse_known_args() - # print("env_config: ", env_config) + print("env_config: ", env_config) if env_config != []: env_args, env_unknown_args = parser.parse_known_args(env_config) unknown_args += env_unknown_args @@ -151,5 +157,12 @@ def get_args(): sys_args.streaming = True else: sys_args.streaming = False + + if sys_args.use_hints == "true": + print("SQL agent will use hints") + sys_args.use_hints = True + else: + sys_args.use_hints = False + print("==========sys_args==========:\n", sys_args) return sys_args, unknown_args diff --git a/comps/cores/mega/http_service.py b/comps/cores/mega/http_service.py index 8d9c45dae..799cc5c80 100644 --- a/comps/cores/mega/http_service.py +++ b/comps/cores/mega/http_service.py @@ -159,8 +159,6 @@ def stop(self): self.event_loop.stop() self.event_loop.close() self.logger.close() - if self.process.is_alive(): - self.process.terminate() @staticmethod def check_server_readiness(ctrl_address: str, timeout: float = 1.0, logger=None, **kwargs) -> bool: diff --git a/data/hub/version.txt b/data/hub/version.txt new file mode 100644 index 000000000..56a6051ca --- /dev/null +++ b/data/hub/version.txt @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/tests/agent/sql_agent_llama.yaml b/tests/agent/sql_agent_llama.yaml new file mode 100644 index 000000000..a2842d9e9 --- /dev/null +++ b/tests/agent/sql_agent_llama.yaml @@ -0,0 +1,37 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +services: + agent: + image: ${agent_image} + container_name: test-comps-agent-endpoint + volumes: + - ${TOOLSET_PATH}:/home/user/tools/ # tools + # - ${WORKDIR}/GenAIComps/comps:/home/user/comps # code + - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database and hints_file + ports: + - "9095:9095" + ipc: host + environment: + ip_address: ${ip_address} + strategy: sql_agent_llama + db_name: ${db_name} + db_path: ${db_path} + use_hints: false #true + hints_file: /home/user/TAG-Bench/${db_name}_hints.csv + recursion_limit: ${recursion_limit} + llm_engine: vllm + HUGGINGFACEHUB_API_TOKEN: ${HUGGINGFACEHUB_API_TOKEN} + llm_endpoint_url: ${LLM_ENDPOINT_URL} + model: ${LLM_MODEL_ID} + temperature: ${temperature} + max_new_tokens: ${max_new_tokens} + streaming: false + tools: /home/user/tools/custom_tools.yaml #/home/user/tools/sql_agent_tools.yaml # change back to custom_tools.yaml + require_human_feedback: false + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + port: 9095 + # GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} #delete + # GOOGLE_API_KEY: ${GOOGLE_API_KEY} # delete diff --git a/tests/agent/sql_agent_openai.yaml b/tests/agent/sql_agent_openai.yaml new file mode 100644 index 000000000..124eccae9 --- /dev/null +++ b/tests/agent/sql_agent_openai.yaml @@ -0,0 +1,36 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +services: + agent: + image: ${agent_image} + container_name: test-comps-agent-endpoint + volumes: + - ${TOOLSET_PATH}:/home/user/tools/ # tools + - ${WORKDIR}/GenAIComps/comps:/home/user/comps # code + - ${WORKDIR}/TAG-Bench/:/home/user/TAG-Bench # SQL database and hints_file + ports: + - "9095:9095" + ipc: host + environment: + ip_address: ${ip_address} + strategy: sql_agent + db_name: ${db_name} + db_path: ${db_path} + use_hints: false #true + hints_file: /home/user/TAG-Bench/${db_name}_hints.csv + recursion_limit: ${recursion_limit} + llm_engine: openai + OPENAI_API_KEY: ${OPENAI_API_KEY} + model: "gpt-4o-mini-2024-07-18" + temperature: 0 + max_new_tokens: ${max_new_tokens} + streaming: false + tools: /home/user/tools/sql_agent_tools.yaml # /home/user/tools/custom_tools.yaml # + require_human_feedback: false + no_proxy: ${no_proxy} + http_proxy: ${http_proxy} + https_proxy: ${https_proxy} + port: 9095 + GOOGLE_CSE_ID: ${GOOGLE_CSE_ID} #delete + GOOGLE_API_KEY: ${GOOGLE_API_KEY} # delete diff --git a/tests/agent/sql_agent_test/generate_hints_file.py b/tests/agent/sql_agent_test/generate_hints_file.py new file mode 100644 index 000000000..3551b7306 --- /dev/null +++ b/tests/agent/sql_agent_test/generate_hints_file.py @@ -0,0 +1,45 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import glob +import os + +import pandas as pd + + +def generate_column_descriptions(db_name): + descriptions = [] + working_dir = os.getenv("WORKDIR") + assert working_dir is not None, "WORKDIR environment variable is not set." + DESCRIPTION_FOLDER = os.path.join( + working_dir, f"TAG-Bench/dev_folder/dev_databases/{db_name}/database_description/" + ) + table_files = glob.glob(os.path.join(DESCRIPTION_FOLDER, "*.csv")) + table_name_col = [] + col_name_col = [] + for table_file in table_files: + table_name = os.path.basename(table_file).split(".")[0] + print("Table name: ", table_name) + df = pd.read_csv(table_file) + for _, row in df.iterrows(): + col_name = row["original_column_name"] + if not pd.isnull(row["value_description"]): + description = str(row["value_description"]) + if description.lower() in col_name.lower(): + print("Description {} is same as column name {}".format(description, col_name)) + pass + else: + description = description.replace("\n", " ") + description = " ".join(description.split()) + descriptions.append(description) + table_name_col.append(table_name) + col_name_col.append(col_name) + hints_df = pd.DataFrame({"table_name": table_name_col, "column_name": col_name_col, "description": descriptions}) + tag_bench_dir = os.path.join(working_dir, "TAG-Bench") + output_file = os.path.join(tag_bench_dir, f"{db_name}_hints.csv") + hints_df.to_csv(output_file, index=False) + print(f"Generated hints file: {output_file}") + + +if __name__ == "__main__": + generate_column_descriptions("california_schools") diff --git a/tests/agent/sql_agent_test/run_data_split.sh b/tests/agent/sql_agent_test/run_data_split.sh new file mode 100644 index 000000000..2fc2dfcb0 --- /dev/null +++ b/tests/agent/sql_agent_test/run_data_split.sh @@ -0,0 +1,6 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +DATAPATH=$WORKDIR/TAG-Bench/tag_queries.csv +OUTFOLDER=$WORKDIR/TAG-Bench/query_by_db +python3 split_data.py --path $DATAPATH --output $OUTFOLDER diff --git a/tests/agent/sql_agent_test/split_data.py b/tests/agent/sql_agent_test/split_data.py new file mode 100644 index 000000000..1b3f5cfc7 --- /dev/null +++ b/tests/agent/sql_agent_test/split_data.py @@ -0,0 +1,27 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import os + +import pandas as pd + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--path", type=str, required=True) + parser.add_argument("--output", type=str, required=True) + args = parser.parse_args() + + # if output folder does not exist, create it + if not os.path.exists(args.output): + os.makedirs(args.output) + + # Load the data + data = pd.read_csv(args.path) + + # Split the data by domain + domains = data["DB used"].unique() + for domain in domains: + domain_data = data[data["DB used"] == domain] + out = os.path.join(args.output, f"query_{domain}.csv") + domain_data.to_csv(out, index=False) diff --git a/tests/agent/sql_agent_test/sql_agent_tools.py b/tests/agent/sql_agent_test/sql_agent_tools.py new file mode 100644 index 000000000..fc14efe8e --- /dev/null +++ b/tests/agent/sql_agent_test/sql_agent_tools.py @@ -0,0 +1,19 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + + +def search_web(query: str) -> str: + """Search the web for information not contained in databases.""" + from langchain_core.tools import Tool + from langchain_google_community import GoogleSearchAPIWrapper + + search = GoogleSearchAPIWrapper() + + tool = Tool( + name="google_search", + description="Search Google for recent results.", + func=search.run, + ) + + response = tool.run(query) + return response diff --git a/tests/agent/sql_agent_test/sql_agent_tools.yaml b/tests/agent/sql_agent_test/sql_agent_tools.yaml new file mode 100644 index 000000000..ccd5c8e71 --- /dev/null +++ b/tests/agent/sql_agent_test/sql_agent_tools.yaml @@ -0,0 +1,11 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +search_web: + description: Search the web for a given query. + callable_api: sql_agent_tools.py:search_web + args_schema: + query: + type: str + description: query + return_output: retrieved_data diff --git a/tests/agent/sql_agent_test/test_sql_agent.sh b/tests/agent/sql_agent_test/test_sql_agent.sh new file mode 100644 index 000000000..4a49b1a4f --- /dev/null +++ b/tests/agent/sql_agent_test/test_sql_agent.sh @@ -0,0 +1,193 @@ +#!/bin/bash +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +#set -xe + +# this script should be run from tests directory +# bash agent/sql_agent_test/test_sql_agent.sh + +WORKPATH=$(dirname "$PWD") +echo $WORKPATH +LOG_PATH="$WORKPATH/tests" + +# WORKDIR is one level up from GenAIComps +export WORKDIR=$(dirname "$WORKPATH") +echo $WORKDIR + +export agent_image="opea/agent-langchain:comps" +export agent_container_name="test-comps-agent-endpoint" + +export ip_address=$(hostname -I | awk '{print $1}') + +vllm_port=8086 +vllm_volume=${HF_CACHE_DIR} + +export model=meta-llama/Meta-Llama-3.1-70B-Instruct +export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} +export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" +export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" +export temperature=0.01 +export max_new_tokens=4096 +export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ # $WORKPATH/tests/agent/sql_agent_test/ +echo "TOOLSET_PATH=${TOOLSET_PATH}" +export recursion_limit=15 +export db_name=california_schools +export db_path=/home/user/TAG-Bench/dev_folder/dev_databases/${db_name}/${db_name}.sqlite + +# for using Google search API +export GOOGLE_CSE_ID=${GOOGLE_CSE_ID} +export GOOGLE_API_KEY=${GOOGLE_API_KEY} + + +# download the test data +function prepare_data() { + cd $WORKDIR + + echo "Downloading data..." + git clone https://github.com/TAG-Research/TAG-Bench.git + cd TAG-Bench/setup + chmod +x get_dbs.sh + ./get_dbs.sh + + echo "Split data..." + cd $WORKPATH/tests/agent/sql_agent_test + bash run_data_split.sh + + echo "Data preparation done!" +} + +function remove_data() { + echo "Removing data..." + cd $WORKDIR + rm -rf TAG-Bench + echo "Data removed!" +} + + +function generate_hints_for_benchmark() { + echo "Generating hints for benchmark..." + cd $WORKPATH/tests/agent/sql_agent_test + python3 generate_hints_file.py +} + +function build_docker_images() { + echo "Building the docker images" + cd $WORKPATH + echo $WORKPATH + docker build --no-cache -t $agent_image --build-arg http_proxy=$http_proxy --build-arg https_proxy=$https_proxy -f comps/agent/langchain/Dockerfile . + if [ $? -ne 0 ]; then + echo "opea/agent-langchain built fail" + exit 1 + else + echo "opea/agent-langchain built successful" + fi +} + +function build_vllm_docker_images() { + echo "Building the vllm docker images" + cd $WORKPATH + echo $WORKPATH + if [ ! -d "./vllm" ]; then + git clone https://github.com/HabanaAI/vllm-fork.git + fi + cd ./vllm-fork + docker build --no-cache -f Dockerfile.hpu -t opea/vllm-gaudi:comps --shm-size=128g . --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy + if [ $? -ne 0 ]; then + echo "opea/vllm-gaudi:comps failed" + exit 1 + else + echo "opea/vllm-gaudi:comps successful" + fi +} + +function start_vllm_service() { + # redis endpoint + echo "token is ${HF_TOKEN}" + + #single card + echo "start vllm gaudi service" + echo "**************model is $model**************" + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq-len-to-capture 16384 --tensor-parallel-size 4 + sleep 5s + echo "Waiting vllm gaudi ready" + n=0 + until [[ "$n" -ge 100 ]] || [[ $ready == true ]]; do + docker logs test-comps-vllm-gaudi-service &> ${LOG_PATH}/vllm-gaudi-service.log + n=$((n+1)) + if grep -q "Uvicorn running on" ${LOG_PATH}/vllm-gaudi-service.log; then + break + fi + if grep -q "No such container" ${LOG_PATH}/vllm-gaudi-service.log; then + echo "container test-comps-vllm-gaudi-service not found" + exit 1 + fi + sleep 5s + done + sleep 5s + echo "Service started successfully" +} +# launch the agent +function start_sql_agent_llama_service() { + echo "Starting sql_agent_llama agent microservice" + docker compose -f $WORKPATH/tests/agent/sql_agent_llama.yaml up -d + sleep 3m + docker logs test-comps-agent-endpoint + echo "Service started successfully" +} + + +function start_sql_agent_openai_service() { + export OPENAI_API_KEY=${OPENAI_API_KEY} + echo "Starting sql_agent_openai agent microservice" + docker compose -f $WORKPATH/tests/agent/sql_agent_openai.yaml up -d + sleep 3m + docker logs test-comps-agent-endpoint + echo "Service started successfully" +} + +# run the test +function run_test() { + echo "Running test..." + cd $WORKPATH/tests/agent/ + python3 test.py --test-sql-agent +} + +function run_benchmark() { + echo "Running benchmark..." + cd $WORKPATH/tests/agent/sql_agent_test + query_file=${WORKDIR}/TAG-Bench/query_by_db/query_california_schools.csv + outdir=$WORKDIR/sql_agent_output + outfile=california_school_agent_test_result.csv + python3 test_tag_bench.py --query_file $query_file --output_dir $outdir --output_file $outfile +} + +# echo "Building docker image...." +# build_docker_images + +echo "Preparing data...." +prepare_data + +# echo "Building vllm docker image...." +# build_vllm_docker_images + +# echo "Launching vllm service...." +# start_vllm_service + +# echo "Generating hints_file..." +# generate_hints_for_benchmark + +echo "launching sql_agent_llama service...." +start_sql_agent_llama_service + +# echo "launching sql_agent_openai service...." +# start_sql_agent_openai_service + +echo "Running test...." +run_test + +# echo "Running benchmark...." +# run_benchmark + +echo "Removing data...." +remove_data diff --git a/tests/agent/sql_agent_test/test_tag_bench.py b/tests/agent/sql_agent_test/test_tag_bench.py new file mode 100644 index 000000000..6664759f3 --- /dev/null +++ b/tests/agent/sql_agent_test/test_tag_bench.py @@ -0,0 +1,55 @@ +# Copyright (C) 2024 Intel Corporation +# SPDX-License-Identifier: Apache-2.0 + +import argparse +import os + +import pandas as pd +import requests + + +def generate_answer_agent_api(url, prompt): + proxies = {"http": ""} + payload = { + "query": prompt, + } + response = requests.post(url, json=payload, proxies=proxies) + answer = response.json()["text"] + return answer + + +def save_json_lines(json_lines, args): + outfile = "sql_agent_results.json" + output = os.path.join(args.output_dir, outfile) + with open(output, "w") as f: + for line in json_lines: + f.write(str(line) + "\n") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--query_file", type=str) + parser.add_argument("--output_dir", type=str) + parser.add_argument("--output_file", type=str) + args = parser.parse_args() + + df = pd.read_csv(args.query_file) + + if not os.path.exists(args.output_dir): + os.makedirs(args.output_dir) + + ip_address = os.getenv("ip_address", "localhost") + url = f"http://{ip_address}:9095/v1/chat/completions" + + json_lines = [] + for _, row in df.iterrows(): + query = row["Query"] + ref_answer = row["Answer"] + print("******Query:\n", query) + res = generate_answer_agent_api(url, query) + print("******Answer:\n", res) + # json_lines.append({"query": query,"answer":ref_answer, "agent_answer": res}) + # save_json_lines(json_lines, args) + print("=" * 20) + + df.to_csv(os.path.join(args.output_dir, args.output_file), index=False) diff --git a/tests/agent/test.py b/tests/agent/test.py index fdbfe1c5b..e345e8942 100644 --- a/tests/agent/test.py +++ b/tests/agent/test.py @@ -45,11 +45,16 @@ def process_request(url, query, is_stream=False): if __name__ == "__main__": parser = argparse.ArgumentParser() parser.add_argument("--stream", action="store_true", help="Stream the response") + parser.add_argument("--test-sql-agent", action="store_true", help="Test the SQL agent") args = parser.parse_args() ip_address = os.getenv("ip_address", "localhost") url = f"http://{ip_address}:9095/v1/chat/completions" - prompt = "What is OPEA?" + if args.test_sql_agent: + prompt = "How many schools have the average score in Math over 560 in the SAT test?" + else: + prompt = "What is OPEA?" + if args.stream: process_request(url, prompt, is_stream=True) else: diff --git a/tests/agent/test_agent_langchain_on_intel_hpu.sh b/tests/agent/test_agent_langchain_on_intel_hpu.sh index 9ba25228a..77aa1fb19 100644 --- a/tests/agent/test_agent_langchain_on_intel_hpu.sh +++ b/tests/agent/test_agent_langchain_on_intel_hpu.sh @@ -6,12 +6,17 @@ WORKPATH=$(dirname "$PWD") echo $WORKPATH +ls $WORKPATH +echo "=========================" LOG_PATH="$WORKPATH/tests" ip_address=$(hostname -I | awk '{print $1}') tgi_port=8085 tgi_volume=$WORKPATH/data + vllm_port=8086 -vllm_volume=$WORKPATH/data +export vllm_volume=$WORKPATH/data +echo "vllm_volume:" +ls $vllm_volume export WORKPATH=$WORKPATH @@ -23,7 +28,7 @@ export HUGGINGFACEHUB_API_TOKEN=${HF_TOKEN} export ip_address=$(hostname -I | awk '{print $1}') export HUGGINGFACEHUB_API_TOKEN=${HUGGINGFACEHUB_API_TOKEN} export LLM_MODEL_ID="meta-llama/Meta-Llama-3.1-70B-Instruct" -export LLM_ENDPOINT_URL="http://${ip_address}:${tgi_port}" +export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" export temperature=0.01 export max_new_tokens=4096 export TOOLSET_PATH=$WORKPATH/comps/agent/langchain/tools/ @@ -88,7 +93,7 @@ function start_vllm_service() { #single card echo "start vllm gaudi service" echo "**************model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq_len-to-capture 8192 + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 sleep 5s echo "Waiting vllm gaudi ready" n=0 @@ -115,7 +120,34 @@ function start_vllm_auto_tool_choice_service() { #single card echo "start vllm gaudi service" echo "**************auto_tool model is $model**************" - docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq_len-to-capture 8192 --enable-auto-tool-choice --tool-call-parser ${model_parser} + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=all -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-num-seqs 4096 --max-seq-len-to-capture 8192 --enable-auto-tool-choice --tool-call-parser ${model_parser} + sleep 5s + echo "Waiting vllm gaudi ready" + n=0 + until [[ "$n" -ge 100 ]] || [[ $ready == true ]]; do + docker logs test-comps-vllm-gaudi-service &> ${LOG_PATH}/vllm-gaudi-service.log + n=$((n+1)) + if grep -q "Uvicorn running on" ${LOG_PATH}/vllm-gaudi-service.log; then + break + fi + if grep -q "No such container" ${LOG_PATH}/vllm-gaudi-service.log; then + echo "container test-comps-vllm-gaudi-service not found" + exit 1 + fi + sleep 5s + done + sleep 5s + echo "Service started successfully" +} + +function start_vllm_service_70B() { + # redis endpoint + echo "token is ${HF_TOKEN}" + + #single card + echo "start vllm gaudi service" + echo "**************model is $model**************" + docker run -d --runtime=habana --rm --name "test-comps-vllm-gaudi-service" -e HABANA_VISIBLE_DEVICES=0,1,2,3 -p $vllm_port:80 -v $vllm_volume:/data -e HF_TOKEN=$HF_TOKEN -e HF_HOME=/data -e OMPI_MCA_btl_vader_single_copy_mechanism=none -e PT_HPU_ENABLE_LAZY_COLLECTIVES=true -e http_proxy=$http_proxy -e https_proxy=$https_proxy -e no_proxy=$no_proxy -e VLLM_SKIP_WARMUP=true --cap-add=sys_nice --ipc=host opea/vllm-gaudi:comps --model ${model} --host 0.0.0.0 --port 80 --block-size 128 --max-seq-len-to-capture 16384 --tensor-parallel-size 4 sleep 5s echo "Waiting vllm gaudi ready" n=0 @@ -138,7 +170,7 @@ function start_vllm_auto_tool_choice_service() { function start_react_langchain_agent_service() { echo "Starting react_langchain agent microservice" docker compose -f $WORKPATH/tests/agent/react_langchain.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -147,7 +179,7 @@ function start_react_langchain_agent_service() { function start_react_langgraph_agent_service_openai() { echo "Starting react_langchain agent microservice" docker compose -f $WORKPATH/tests/agent/react_langgraph_openai.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -156,7 +188,7 @@ function start_react_langgraph_agent_service_openai() { function start_react_llama_agent_service() { echo "Starting react_langgraph agent microservice" docker compose -f $WORKPATH/tests/agent/reactllama.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -164,7 +196,7 @@ function start_react_llama_agent_service() { function start_react_langgraph_agent_service_vllm() { echo "Starting react_langgraph agent microservice" docker compose -f $WORKPATH/tests/agent/react_vllm.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -172,7 +204,7 @@ function start_react_langgraph_agent_service_vllm() { function start_planexec_agent_service_vllm() { echo "Starting planexec agent microservice" docker compose -f $WORKPATH/tests/agent/planexec_vllm.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -180,7 +212,7 @@ function start_planexec_agent_service_vllm() { function start_ragagent_agent_service() { echo "Starting rag agent microservice" docker compose -f $WORKPATH/tests/agent/ragagent.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -188,7 +220,7 @@ function start_ragagent_agent_service() { function start_ragagent_agent_service_openai() { echo "Starting rag agent microservice" docker compose -f $WORKPATH/tests/agent/ragagent_openai.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -196,7 +228,7 @@ function start_ragagent_agent_service_openai() { function start_planexec_agent_service_openai() { echo "Starting plan execute agent microservice" docker compose -f $WORKPATH/tests/agent/planexec_openai.yaml up -d - sleep 5s + sleep 60s docker logs test-comps-agent-endpoint echo "Service started successfully" } @@ -275,7 +307,12 @@ function stop_tgi_docker() { cid=$(docker ps -aq --filter "name=test-comps-tgi-gaudi-service") echo "Stopping the docker containers "${cid} if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi - echo "Docker containers stopped successfully" + echo "TGI Docker containers stopped successfully" + + cid=$(docker ps -aq --filter "name=tgi-server") + echo "Stopping the docker containers "${cid} + if [[ ! -z "$cid" ]]; then docker rm $cid -f && sleep 1s; fi + echo "TGI Docker containers stopped successfully" } function stop_vllm_docker() { @@ -298,13 +335,35 @@ function stop_docker() { stop_agent_docker } + +function validate_sql_agent(){ + cd $WORKPATH/tests/ + local CONTENT=$(bash agent/sql_agent_test/test_sql_agent.sh) + local EXIT_CODE=$(validate "$CONTENT" "173" "test-sql-agent") + echo "$EXIT_CODE" + local EXIT_CODE="${EXIT_CODE:0-1}" + echo "return value is $EXIT_CODE" + if [ "$EXIT_CODE" == "1" ]; then + echo "==================SQL Agent logs ======================" + docker logs test-comps-agent-endpoint + # echo "================== vllm gaudi service logs ======================" + # docker logs test-comps-vllm-gaudi-service + exit 1 + fi +} + + function main() { stop_agent_docker stop_docker build_docker_images + build_vllm_docker_images + + # ==================== Tests with 70B model ==================== + # RAG agent, react_llama, react_langchain, assistant apis - # ==================== TGI tests ==================== - start_tgi_service + # start_tgi_service + start_vllm_service_70B # test rag agent start_ragagent_agent_service @@ -313,7 +372,7 @@ function main() { stop_agent_docker echo "=============================================" - # test react_llama + # # test react_llama start_react_llama_agent_service echo "===========Testing ReAct Llama =============" validate_microservice @@ -321,7 +380,7 @@ function main() { echo "=============================================" - # test react_langchain + # # test react_langchain start_react_langchain_agent_service echo "=============Testing ReAct Langchain=============" validate_microservice_streaming @@ -329,55 +388,51 @@ function main() { stop_agent_docker echo "=============================================" - stop_tgi_docker + # stop_tgi_docker - # ==================== VLLM tests ==================== - build_vllm_docker_images + # test sql agent + validate_sql_agent + + stop_docker + + # # # ==================== Test react_langgraph with vllm auto-tool-choice ==================== export model=mistralai/Mistral-7B-Instruct-v0.3 export LLM_MODEL_ID=${model} export model_parser=mistral export LLM_ENDPOINT_URL="http://${ip_address}:${vllm_port}" - # test react with vllm - Mistral + test react with vllm - Mistral start_vllm_auto_tool_choice_service start_react_langgraph_agent_service_vllm echo "===========Testing ReAct Langgraph VLLM Mistral =============" validate_microservice - # stop_agent_docker - # stop_vllm_docker - echo "=============================================" - - # test plan execute with vllm - Mistral - start_vllm_service - start_planexec_agent_service_vllm - echo "===========Testing Plan Execute VLLM Mistral =============" - validate_microservice stop_agent_docker stop_vllm_docker echo "=============================================" - export model=meta-llama/Llama-3.1-8B-Instruct - export LLM_MODEL_ID=${model} - export model_parser=llama3_json - - # test react with vllm - llama3 support has not been synced to vllm-gaudi yet - # start_vllm_auto_tool_choice_service - # start_react_langgraph_agent_service_vllm - # echo "===========Testing ReAct VLLM =============" + # # # ==================== Test plan-execute agent with vllm guided decoding ==================== + # test plan execute with vllm - Mistral + # start_vllm_service + # start_planexec_agent_service_vllm + # echo "===========Testing Plan Execute VLLM Mistral =============" # validate_microservice # stop_agent_docker # stop_vllm_docker # echo "=============================================" - # test plan execute with vllm - llama3.1 - start_vllm_service - start_planexec_agent_service_vllm - echo "===========Testing Plan Execute VLLM Llama3.1 =============" - validate_microservice - stop_agent_docker - stop_vllm_docker - echo "=============================================" + # export model=meta-llama/Llama-3.1-8B-Instruct + # export LLM_MODEL_ID=${model} + # export model_parser=llama3_json + + # # test plan execute with vllm - llama3.1 + # start_vllm_service + # start_planexec_agent_service_vllm + # echo "===========Testing Plan Execute VLLM Llama3.1 =============" + # validate_microservice + # stop_agent_docker + # stop_vllm_docker + # echo "=============================================" # # ==================== OpenAI tests ==================== @@ -399,6 +454,7 @@ function main() { # stop_agent_docker stop_docker + echo y | docker system prune 2>&1 > /dev/null } diff --git a/tests/cores/mega/test_aio.py b/tests/cores/mega/test_aio.py index fc735e70a..4187cb034 100644 --- a/tests/cores/mega/test_aio.py +++ b/tests/cores/mega/test_aio.py @@ -14,6 +14,7 @@ import asyncio import json +import multiprocessing import time import unittest @@ -55,9 +56,14 @@ def setUp(self): self.s1 = opea_microservices["s1"] self.s2 = opea_microservices["s2"] self.s3 = opea_microservices["s3"] - self.s1.start() - self.s2.start() - self.s3.start() + + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process2 = multiprocessing.Process(target=self.s2.start, daemon=False, name="s2") + self.process3 = multiprocessing.Process(target=self.s3.start, daemon=False, name="s2") + + self.process1.start() + self.process2.start() + self.process3.start() self.service_builder = ServiceOrchestrator() @@ -70,6 +76,10 @@ def tearDown(self): self.s2.stop() self.s3.stop() + self.process1.terminate() + self.process2.terminate() + self.process3.terminate() + async def test_schedule(self): t = time.time() task1 = asyncio.create_task(self.service_builder.schedule(initial_inputs={"text": "hello, "})) diff --git a/tests/cores/mega/test_base_statistics.py b/tests/cores/mega/test_base_statistics.py index ef4e7da3e..878b3016c 100644 --- a/tests/cores/mega/test_base_statistics.py +++ b/tests/cores/mega/test_base_statistics.py @@ -3,6 +3,7 @@ import asyncio import json +import multiprocessing import time import unittest @@ -34,13 +35,15 @@ async def s1_add(request: TextDoc) -> TextDoc: class TestBaseStatistics(unittest.IsolatedAsyncioTestCase): def setUp(self): self.s1 = opea_microservices["s1"] - self.s1.start() + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process1.start() self.service_builder = ServiceOrchestrator() self.service_builder.add(opea_microservices["s1"]) def tearDown(self): self.s1.stop() + self.process1.terminate() async def test_base_statistics(self): for _ in range(2): diff --git a/tests/cores/mega/test_dynamic_batching.py b/tests/cores/mega/test_dynamic_batching.py index 945054fb0..bcb185b8f 100644 --- a/tests/cores/mega/test_dynamic_batching.py +++ b/tests/cores/mega/test_dynamic_batching.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import asyncio +import multiprocessing import unittest from enum import Enum @@ -67,10 +68,12 @@ async def fetch(session, url, data): class TestMicroService(unittest.IsolatedAsyncioTestCase): def setUp(self): - opea_microservices["s1"].start() + self.process1 = multiprocessing.Process(target=opea_microservices["s1"].start, daemon=False, name="s1") + self.process1.start() def tearDown(self): opea_microservices["s1"].stop() + self.process1.terminate() async def test_dynamic_batching(self): url1 = "http://localhost:8080/v1/add1" diff --git a/tests/cores/mega/test_handle_message.py b/tests/cores/mega/test_handle_message.py index 56e150c37..078bcdcd0 100644 --- a/tests/cores/mega/test_handle_message.py +++ b/tests/cores/mega/test_handle_message.py @@ -1,10 +1,6 @@ # Copyright (C) 2024 Intel Corporation # SPDX-License-Identifier: Apache-2.0 -import sys - -sys.path.append("/lkk/move_gateway/GenAIComps/") - import json import unittest from typing import Union @@ -18,9 +14,7 @@ def test_handle_message(self): messages = [ {"role": "user", "content": "opea project! "}, ] - print(handle_message(messages)) prompt = handle_message(messages) - print(prompt) self.assertEqual(prompt, "user: opea project! \n") def test_handle_message_with_system_prompt(self): @@ -29,7 +23,6 @@ def test_handle_message_with_system_prompt(self): {"role": "user", "content": "opea project! "}, ] prompt = handle_message(messages) - print(prompt) self.assertEqual(prompt, "System Prompt\nuser: opea project! \n") def test_handle_message_with_image(self): @@ -46,10 +39,95 @@ def test_handle_message_with_image(self): }, ] prompt, image = handle_message(messages) - print(prompt) + self.assertEqual(prompt, "user: hello, \n") + + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": ""}, + { + "type": "image_url", + "image_url": {"url": "https://www.ilankelman.org/stopsigns/australia.jpg"}, + }, + ], + }, + ] + prompt, image = handle_message(messages) + self.assertEqual(prompt, "user:") + + def test_handle_message_with_image_str(self): + self.img_b64_str = ( + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8/5+hnoEIwDiqkL4KAcT9GO0U4BxoAAAAAElFTkSuQmCC" + ) + + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "hello, "}, + { + "type": "image_url", + "image_url": {"url": self.img_b64_str}, + }, + ], + }, + ] + prompt, image = handle_message(messages) + self.assertEqual(image[0], self.img_b64_str) + + def test_handle_message_with_image_local(self): + img_b64_str = ( + "iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAFUlEQVR42mP8/5+hnoEIwDiqkL4KAcT9GO0U4BxoAAAAAElFTkSuQmCC" + ) + import base64 + import io + + from PIL import Image + + img = Image.open(io.BytesIO(base64.decodebytes(bytes(img_b64_str, "utf-8")))) + img.save("./test.png") + + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "hello, "}, + { + "type": "image_url", + "image_url": {"url": "./test.png"}, + }, + ], + }, + ] + prompt, image = handle_message(messages) + self.assertEqual(prompt, "user: hello, \n") + + def test_handle_message_with_content_list(self): + messages = [ + { + "role": "user", + "content": [ + {"type": "text", "text": "hello, "}, + ], + }, + {"role": "assistant", "content": "opea project! "}, + {"role": "user", "content": ""}, + ] + prompt = handle_message(messages) + self.assertEqual(prompt, "user:assistant: opea project! \n") + + def test_handle_string_message(self): + messages = "hello, " + prompt = handle_message(messages) + self.assertEqual(prompt, "hello, ") + + def test_handle_message_with_invalid_role(self): + messages = [ + {"role": "user_test", "content": "opea project! "}, + ] + self.assertRaises(ValueError, handle_message, messages) if __name__ == "__main__": - # unittest.main() - t = TestHandleMessage() - t.test_handle_message_with_image() + unittest.main() diff --git a/tests/cores/mega/test_hybrid_service_orchestrator.py b/tests/cores/mega/test_hybrid_service_orchestrator.py index 0838d25ec..89522eac3 100644 --- a/tests/cores/mega/test_hybrid_service_orchestrator.py +++ b/tests/cores/mega/test_hybrid_service_orchestrator.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import json +import multiprocessing import unittest from comps import MicroService, ServiceOrchestrator, TextDoc, opea_microservices, register_microservice @@ -19,23 +20,21 @@ async def s1_add(request: TextDoc) -> TextDoc: class TestServiceOrchestrator(unittest.TestCase): def setUp(self): self.s1 = opea_microservices["s1"] - self.s1.start() + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process1.start() self.service_builder = ServiceOrchestrator() def tearDown(self): self.s1.stop() + self.process1.terminate() def test_add_remote_service(self): s2 = MicroService(name="s2", host="fakehost", port=8008, endpoint="/v1/add", use_remote_service=True) self.service_builder.add(opea_microservices["s1"]).add(s2) self.service_builder.flow_to(self.s1, s2) self.assertEqual(s2.endpoint_path, "http://fakehost:8008/v1/add") - # Check whether the right exception is raise when init/stop remote service - try: - s2.start() - except Exception as e: - self.assertTrue("Method not allowed" in str(e)) + self.assertRaises(Exception, s2._validate_env, "N/A") if __name__ == "__main__": diff --git a/tests/cores/mega/test_hybrid_service_orchestrator_with_yaml.py b/tests/cores/mega/test_hybrid_service_orchestrator_with_yaml.py index bd2320184..8d70ab43f 100644 --- a/tests/cores/mega/test_hybrid_service_orchestrator_with_yaml.py +++ b/tests/cores/mega/test_hybrid_service_orchestrator_with_yaml.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import json +import multiprocessing import unittest from comps import ServiceOrchestratorWithYaml, TextDoc, opea_microservices, register_microservice @@ -19,10 +20,12 @@ async def s1_add(request: TextDoc) -> TextDoc: class TestYAMLOrchestrator(unittest.TestCase): def setUp(self) -> None: self.s1 = opea_microservices["s1"] - self.s1.start() + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process1.start() def tearDown(self): self.s1.stop() + self.process1.terminate() def test_add_remote_service(self): service_builder = ServiceOrchestratorWithYaml(yaml_file_path="megaservice_hybrid.yaml") diff --git a/tests/cores/mega/test_microservice.py b/tests/cores/mega/test_microservice.py index dbaff9a76..b621dda5a 100644 --- a/tests/cores/mega/test_microservice.py +++ b/tests/cores/mega/test_microservice.py @@ -2,11 +2,12 @@ # SPDX-License-Identifier: Apache-2.0 import json +import multiprocessing import unittest from fastapi.testclient import TestClient -from comps import TextDoc, opea_microservices, register_microservice +from comps import MicroService, TextDoc, opea_microservices, register_microservice @register_microservice(name="s1", host="0.0.0.0", port=8080, endpoint="/v1/add") @@ -18,14 +19,24 @@ async def add(request: TextDoc) -> TextDoc: return {"text": text} +def sum_test(): + return 1 + 1 + + class TestMicroService(unittest.TestCase): def setUp(self): self.client = TestClient(opea_microservices["s1"].app) - opea_microservices["s1"].start() + opea_microservices["s1"].add_route("/v1/sum", sum_test, methods=["GET"]) + self.process1 = multiprocessing.Process(target=opea_microservices["s1"].start, daemon=False, name="s1") + + self.process1.start() + + self.assertRaises(RuntimeError, MicroService, name="s2", host="0.0.0.0", port=8080, endpoint="/v1/add") def tearDown(self): opea_microservices["s1"].stop() + self.process1.terminate() def test_add_route(self): response = self.client.post("/v1/add", json={"text": "Hello, "}) @@ -34,6 +45,14 @@ def test_add_route(self): response = self.client.get("/metrics") self.assertEqual(response.status_code, 200) + response = self.client.get("/v1/health_check") + self.assertEqual( + response.json(), {"Service Title": "s1", "Service Description": "OPEA Microservice Infrastructure"} + ) + + response = self.client.get("/v1/sum") + self.assertEqual(response.json(), 2) + if __name__ == "__main__": unittest.main() diff --git a/tests/cores/mega/test_runtime_graph.py b/tests/cores/mega/test_runtime_graph.py index 9a140e0b1..e1449d7fc 100644 --- a/tests/cores/mega/test_runtime_graph.py +++ b/tests/cores/mega/test_runtime_graph.py @@ -1,6 +1,7 @@ # Copyright (C) 2024 Intel Corporation # SPDX-License-Identifier: Apache-2.0 +import multiprocessing import unittest from fastapi.testclient import TestClient @@ -54,10 +55,15 @@ def setUp(self): self.s3 = opea_microservices["s3"] self.s4 = opea_microservices["s4"] - self.s1.start() - self.s2.start() - self.s3.start() - self.s4.start() + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process2 = multiprocessing.Process(target=self.s2.start, daemon=False, name="s2") + self.process3 = multiprocessing.Process(target=self.s3.start, daemon=False, name="s3") + self.process4 = multiprocessing.Process(target=self.s4.start, daemon=False, name="s4") + + self.process1.start() + self.process2.start() + self.process3.start() + self.process4.start() self.service_builder = ServiceOrchestrator() self.service_builder.add(self.s1).add(self.s2).add(self.s3).add(self.s4) @@ -70,6 +76,10 @@ def tearDown(self): self.s2.stop() self.s3.stop() self.s4.stop() + self.process1.terminate() + self.process2.terminate() + self.process3.terminate() + self.process4.terminate() async def test_add_route(self): result_dict, runtime_graph = await self.service_builder.schedule(initial_inputs={"text": "Hi!"}) diff --git a/tests/cores/mega/test_service_orchestrator.py b/tests/cores/mega/test_service_orchestrator.py index 28cfa6383..bb3e15df5 100644 --- a/tests/cores/mega/test_service_orchestrator.py +++ b/tests/cores/mega/test_service_orchestrator.py @@ -45,6 +45,8 @@ def setUpClass(cls): def tearDownClass(cls): cls.s1.stop() cls.s2.stop() + cls.process1.terminate() + cls.process2.terminate() async def test_schedule(self): result_dict, _ = await self.service_builder.schedule(initial_inputs={"text": "hello, "}) diff --git a/tests/cores/mega/test_service_orchestrator_protocol.py b/tests/cores/mega/test_service_orchestrator_protocol.py index 9ee203489..db6cfead8 100644 --- a/tests/cores/mega/test_service_orchestrator_protocol.py +++ b/tests/cores/mega/test_service_orchestrator_protocol.py @@ -1,6 +1,7 @@ # Copyright (C) 2024 Intel Corporation # SPDX-License-Identifier: Apache-2.0 +import multiprocessing import unittest from comps import ServiceOrchestrator, opea_microservices, register_microservice @@ -16,7 +17,8 @@ async def s1_add(request: ChatCompletionRequest) -> ChatCompletionRequest: class TestServiceOrchestratorProtocol(unittest.IsolatedAsyncioTestCase): def setUp(self): self.s1 = opea_microservices["s1"] - self.s1.start() + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process1.start() self.service_builder = ServiceOrchestrator() @@ -24,6 +26,7 @@ def setUp(self): def tearDown(self): self.s1.stop() + self.process1.terminate() async def test_schedule(self): input_data = ChatCompletionRequest(messages=[{"role": "user", "content": "What's up man?"}], seed=None) diff --git a/tests/cores/mega/test_service_orchestrator_streaming.py b/tests/cores/mega/test_service_orchestrator_streaming.py index d2331dab6..e2d11b1af 100644 --- a/tests/cores/mega/test_service_orchestrator_streaming.py +++ b/tests/cores/mega/test_service_orchestrator_streaming.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import json +import multiprocessing import time import unittest @@ -38,8 +39,10 @@ class TestServiceOrchestratorStreaming(unittest.IsolatedAsyncioTestCase): def setUpClass(cls): cls.s0 = opea_microservices["s0"] cls.s1 = opea_microservices["s1"] - cls.s0.start() - cls.s1.start() + cls.process1 = multiprocessing.Process(target=cls.s0.start, daemon=False, name="s0") + cls.process2 = multiprocessing.Process(target=cls.s1.start, daemon=False, name="s1") + cls.process1.start() + cls.process2.start() cls.service_builder = ServiceOrchestrator() @@ -50,6 +53,8 @@ def setUpClass(cls): def tearDownClass(cls): cls.s0.stop() cls.s1.stop() + cls.process1.terminate() + cls.process2.terminate() async def test_schedule(self): result_dict, _ = await self.service_builder.schedule(initial_inputs={"text": "hello, "}) diff --git a/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py b/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py index 17831219a..bc0fe4823 100644 --- a/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py +++ b/tests/cores/mega/test_service_orchestrator_with_retriever_rerank_fake.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import json +import multiprocessing import unittest from comps import EmbedDoc, ServiceOrchestrator, TextDoc, opea_microservices, register_microservice @@ -45,8 +46,12 @@ class TestServiceOrchestratorParams(unittest.IsolatedAsyncioTestCase): def setUp(self): self.s1 = opea_microservices["s1"] self.s2 = opea_microservices["s2"] - self.s1.start() - self.s2.start() + + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process2 = multiprocessing.Process(target=self.s2.start, daemon=False, name="s2") + + self.process1.start() + self.process2.start() ServiceOrchestrator.align_inputs = align_inputs ServiceOrchestrator.align_outputs = align_outputs @@ -58,6 +63,8 @@ def setUp(self): def tearDown(self): self.s1.stop() self.s2.stop() + self.process1.terminate() + self.process2.terminate() async def test_retriever_schedule(self): result_dict, _ = await self.service_builder.schedule( diff --git a/tests/cores/mega/test_service_orchestrator_with_yaml.py b/tests/cores/mega/test_service_orchestrator_with_yaml.py index 3a3c6509d..9da5a7791 100644 --- a/tests/cores/mega/test_service_orchestrator_with_yaml.py +++ b/tests/cores/mega/test_service_orchestrator_with_yaml.py @@ -2,6 +2,7 @@ # SPDX-License-Identifier: Apache-2.0 import json +import multiprocessing import unittest from comps import ServiceOrchestratorWithYaml, TextDoc, opea_microservices, register_microservice @@ -29,12 +30,17 @@ class TestYAMLOrchestrator(unittest.IsolatedAsyncioTestCase): def setUp(self) -> None: self.s1 = opea_microservices["s1"] self.s2 = opea_microservices["s2"] - self.s1.start() - self.s2.start() + + self.process1 = multiprocessing.Process(target=self.s1.start, daemon=False, name="s1") + self.process2 = multiprocessing.Process(target=self.s2.start, daemon=False, name="s2") + self.process1.start() + self.process2.start() def tearDown(self): self.s1.stop() self.s2.stop() + self.process1.terminate() + self.process2.terminate() async def test_schedule(self): service_builder = ServiceOrchestratorWithYaml(yaml_file_path="megaservice.yaml") diff --git a/tests/test-agent-langchain-assistantsapi.log b/tests/test-agent-langchain-assistantsapi.log new file mode 100644 index 000000000..c39a97e13 --- /dev/null +++ b/tests/test-agent-langchain-assistantsapi.log @@ -0,0 +1,27 @@ +env_config: ['--model', 'meta-llama/Meta-Llama-3.1-70B-Instruct', '--recursion_limit', '15', '--max_new_tokens', '4096', '--temperature', '0.01'] +==========sys_args==========: + Namespace(agent_name='OPEA_Default_Agent', custom_prompt=None, db_name=None, db_path=None, debug=False, hints_file=None, llm_endpoint_url='http://localhost:8080', llm_engine='tgi', max_new_tokens=4096, model='meta-llama/Meta-Llama-3.1-70B-Instruct', port=9090, recursion_limit=15, repetition_penalty=1.03, require_human_feedback=False, return_full_text=False, role_description='LLM enhanced agent', strategy='react_langchain', streaming=True, temperature=0.01, timeout=60, tools='tools/custom_tools.yaml', top_k=10, top_p=0.95, use_hints=False, with_memory=False, with_store=False) +test args: Namespace(agent_name='OPEA_Default_Agent', assistants_api_test=True, custom_prompt=None, db_name=None, db_path=None, debug=False, endpoint_test=False, ext_port='9095', filedir='./', filename='query.csv', hints_file=None, ip_addr='10.7.4.57', llm_endpoint_url='http://localhost:8080', llm_engine='tgi', local_test=False, max_new_tokens=4096, model='meta-llama/Meta-Llama-3.1-70B-Instruct', output='output.csv', port=9090, q=0, query='What is Intel OPEA project?', recursion_limit=15, repetition_penalty=1.03, require_human_feedback=False, return_full_text=False, role_description='LLM enhanced agent', strategy='react_langchain', streaming=True, temperature=0.01, timeout=60, tools='tools/custom_tools.yaml', top_k=10, top_p=0.95, use_hints=False, ut=False, with_memory=False, with_store=False) +send request to http://10.7.4.57:9095/v1/assistants, data is {} +{'id': 'assistant_ReActAgentwithLangchain_86106da1-87e8-4424-a4e4-6b2aa131d29a', 'object': 'assistant', 'created_at': 1733791024, 'name': None, 'description': None, 'model': 'Intel/neural-chat-7b-v3-3', 'instructions': None, 'tools': None} +Created Assistant Id: assistant_ReActAgentwithLangchain_86106da1-87e8-4424-a4e4-6b2aa131d29a +send request to http://10.7.4.57:9095/v1/threads, data is {} +{'id': 'thread_2fa8fae7-6cfe-4b35-b2e0-eb214a80a81b', 'object': 'thread', 'created_at': 1733791024} +Created Thread Id: thread_2fa8fae7-6cfe-4b35-b2e0-eb214a80a81b +send request to http://10.7.4.57:9095/v1/threads/thread_2fa8fae7-6cfe-4b35-b2e0-eb214a80a81b/messages, data is {"role": "user", "content": "What is Intel OPEA project?"} +{'id': 'msg_c7ab1fa5-30bb-45c8-950b-abdd4b0f9e1d', 'object': 'thread.message', 'created_at': 1733791024, 'thread_id': 'thread_2fa8fae7-6cfe-4b35-b2e0-eb214a80a81b', 'role': 'user', 'status': None, 'content': [{'type': 'text', 'text': 'What is Intel OPEA project?'}], 'assistant_id': None, 'run_id': None, 'attachments': None} +You may cancel the running process with cmdline +curl http://10.7.4.57:9095/v1/threads/thread_2fa8fae7-6cfe-4b35-b2e0-eb214a80a81b/runs/cancel -X POST -H 'Content-Type: application/json' +send request to http://10.7.4.57:9095/v1/threads/thread_2fa8fae7-6cfe-4b35-b2e0-eb214a80a81b/runs, data is {"assistant_id": "assistant_ReActAgentwithLangchain_86106da1-87e8-4424-a4e4-6b2aa131d29a"} +Calling Tool: `search_knowledge_base` with input `Intel OPEA project +` + +Tool Result: ` + The Linux Foundation AI & Data announced the Open Platform for Enterprise AI (OPEA) as its latest Sandbox Project. + OPEA aims to accelerate secure, cost-effective generative AI (GenAI) deployments for businesses by driving interoperability across a diverse and heterogeneous ecosystem, starting with retrieval-augmented generation (RAG). + ` + +data: 'The Intel OPEA project, also known as the Open Platform for Enterprise AI, is a Linux Foundation AI & Data Sandbox Project that aims to accelerate secure and cost-effective generative AI deployments for businesses by driving interoperability across a diverse ecosystem, starting with retrieval-augmented generation (RAG).' + +data: [DONE] + diff --git a/tests/tgi-gaudi-service.log b/tests/tgi-gaudi-service.log new file mode 100644 index 000000000..f6582b98f --- /dev/null +++ b/tests/tgi-gaudi-service.log @@ -0,0 +1,343 @@ +2024-09-25T18:38:21.777789Z  INFO text_generation_launcher: Args { + model_id: "meta-llama/Meta-Llama-3.1-70B-Instruct", + revision: None, + validation_workers: 2, + sharded: Some( + true, + ), + num_shard: Some( + 4, + ), + quantize: None, + speculate: None, + dtype: Some( + BFloat16, + ), + trust_remote_code: false, + max_concurrent_requests: 128, + max_best_of: 2, + max_stop_sequences: 4, + max_top_n_tokens: 5, + max_input_tokens: Some( + 4096, + ), + max_input_length: None, + max_total_tokens: Some( + 8192, + ), + waiting_served_ratio: 0.3, + max_batch_prefill_tokens: None, + max_batch_total_tokens: None, + max_waiting_tokens: 20, + max_batch_size: None, + cuda_graphs: None, + hostname: "c84c01d5ea43", + port: 80, + shard_uds_path: "/tmp/text-generation-server", + master_addr: "localhost", + master_port: 29500, + huggingface_hub_cache: Some( + "/data", + ), + weights_cache_override: None, + disable_custom_kernels: false, + cuda_memory_fraction: 1.0, + rope_scaling: None, + rope_factor: None, + json_output: false, + otlp_endpoint: None, + cors_allow_origin: [], + watermark_gamma: None, + watermark_delta: None, + ngrok: false, + ngrok_authtoken: None, + ngrok_edge: None, + tokenizer_config_path: None, + disable_grammar_support: false, + env: false, + max_client_batch_size: 4, +} +2024-09-25T18:38:21.777937Z  INFO hf_hub: Token file not found "/root/.cache/huggingface/token" +2024-09-25T18:38:49.912211Z  INFO text_generation_launcher: Default `max_batch_prefill_tokens` to 4146 +2024-09-25T18:38:49.912238Z  INFO text_generation_launcher: Using default cuda graphs [1, 2, 4, 8, 16, 32] +2024-09-25T18:38:49.912246Z  INFO text_generation_launcher: Sharding model on 4 processes +2024-09-25T18:38:49.912444Z  INFO download: text_generation_launcher: Starting download process. +2024-09-25T18:38:53.522093Z  INFO text_generation_launcher: Files are already present on the host. Skipping download. +2024-09-25T18:38:53.918677Z  INFO download: text_generation_launcher: Successfully downloaded weights. +2024-09-25T18:38:53.919058Z  INFO shard-manager: text_generation_launcher: Starting shard rank=0 +2024-09-25T18:38:59.690613Z  INFO text_generation_launcher: CLI SHARDED = True DTYPE = bfloat16 +2024-09-25T18:38:59.690660Z  INFO text_generation_launcher: CLI SHARDED = 4 +2024-09-25T18:38:59.690737Z  INFO text_generation_launcher: CLI server start deepspeed =deepspeed --num_nodes 1 --num_gpus 4 --no_local_rank /usr/local/lib/python3.10/dist-packages/text_generation_server/tgi_service.py --model_id meta-llama/Meta-Llama-3.1-70B-Instruct --revision None --sharded True --dtype bfloat16 --trust_remote_code False --uds_path /tmp/text-generation-server +2024-09-25T18:39:03.930109Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=0 +2024-09-25T18:39:13.938953Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=0 +2024-09-25T18:39:23.962697Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=0 +2024-09-25T18:39:33.977358Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=0 +2024-09-25T18:39:43.999526Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=0 +2024-09-25T18:39:54.020195Z  INFO shard-manager: text_generation_launcher: Waiting for shard to be ready... rank=0 +2024-09-25T18:40:03.832775Z  INFO shard-manager: text_generation_launcher: Shard ready in 69.911394193s rank=0 +2024-09-25T18:40:05.899860Z  INFO text_generation_launcher: Starting Webserver +2024-09-25T18:40:05.931919Z  INFO text_generation_router: router/src/main.rs:217: Using the Hugging Face API +2024-09-25T18:40:05.931972Z  INFO hf_hub: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/hf-hub-0.3.2/src/lib.rs:55: Token file not found "/root/.cache/huggingface/token" +2024-09-25T18:40:06.394450Z  INFO text_generation_router: router/src/main.rs:516: Serving revision 945c8663693130f8be2ee66210e062158b2a9693 of model meta-llama/Llama-3.1-70B-Instruct +2024-09-25T18:40:06.609777Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|begin_of_text|>' was expected to have ID '128000' but was given ID 'None' +2024-09-25T18:40:06.609792Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|end_of_text|>' was expected to have ID '128001' but was given ID 'None' +2024-09-25T18:40:06.609794Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_0|>' was expected to have ID '128002' but was given ID 'None' +2024-09-25T18:40:06.609796Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_1|>' was expected to have ID '128003' but was given ID 'None' +2024-09-25T18:40:06.609798Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|finetune_right_pad_id|>' was expected to have ID '128004' but was given ID 'None' +2024-09-25T18:40:06.609799Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_2|>' was expected to have ID '128005' but was given ID 'None' +2024-09-25T18:40:06.609800Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|start_header_id|>' was expected to have ID '128006' but was given ID 'None' +2024-09-25T18:40:06.609802Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|end_header_id|>' was expected to have ID '128007' but was given ID 'None' +2024-09-25T18:40:06.609803Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|eom_id|>' was expected to have ID '128008' but was given ID 'None' +2024-09-25T18:40:06.609805Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|eot_id|>' was expected to have ID '128009' but was given ID 'None' +2024-09-25T18:40:06.609806Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|python_tag|>' was expected to have ID '128010' but was given ID 'None' +2024-09-25T18:40:06.609807Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_3|>' was expected to have ID '128011' but was given ID 'None' +2024-09-25T18:40:06.609810Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_4|>' was expected to have ID '128012' but was given ID 'None' +2024-09-25T18:40:06.609812Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_5|>' was expected to have ID '128013' but was given ID 'None' +2024-09-25T18:40:06.609813Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_6|>' was expected to have ID '128014' but was given ID 'None' +2024-09-25T18:40:06.609814Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_7|>' was expected to have ID '128015' but was given ID 'None' +2024-09-25T18:40:06.609816Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_8|>' was expected to have ID '128016' but was given ID 'None' +2024-09-25T18:40:06.609817Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_9|>' was expected to have ID '128017' but was given ID 'None' +2024-09-25T18:40:06.609818Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_10|>' was expected to have ID '128018' but was given ID 'None' +2024-09-25T18:40:06.609820Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_11|>' was expected to have ID '128019' but was given ID 'None' +2024-09-25T18:40:06.609821Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_12|>' was expected to have ID '128020' but was given ID 'None' +2024-09-25T18:40:06.609823Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_13|>' was expected to have ID '128021' but was given ID 'None' +2024-09-25T18:40:06.609824Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_14|>' was expected to have ID '128022' but was given ID 'None' +2024-09-25T18:40:06.609826Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_15|>' was expected to have ID '128023' but was given ID 'None' +2024-09-25T18:40:06.609828Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_16|>' was expected to have ID '128024' but was given ID 'None' +2024-09-25T18:40:06.609829Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_17|>' was expected to have ID '128025' but was given ID 'None' +2024-09-25T18:40:06.609830Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_18|>' was expected to have ID '128026' but was given ID 'None' +2024-09-25T18:40:06.609832Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_19|>' was expected to have ID '128027' but was given ID 'None' +2024-09-25T18:40:06.609833Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_20|>' was expected to have ID '128028' but was given ID 'None' +2024-09-25T18:40:06.609834Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_21|>' was expected to have ID '128029' but was given ID 'None' +2024-09-25T18:40:06.609836Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_22|>' was expected to have ID '128030' but was given ID 'None' +2024-09-25T18:40:06.609837Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_23|>' was expected to have ID '128031' but was given ID 'None' +2024-09-25T18:40:06.609838Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_24|>' was expected to have ID '128032' but was given ID 'None' +2024-09-25T18:40:06.609840Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_25|>' was expected to have ID '128033' but was given ID 'None' +2024-09-25T18:40:06.609842Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_26|>' was expected to have ID '128034' but was given ID 'None' +2024-09-25T18:40:06.609843Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_27|>' was expected to have ID '128035' but was given ID 'None' +2024-09-25T18:40:06.609845Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_28|>' was expected to have ID '128036' but was given ID 'None' +2024-09-25T18:40:06.609846Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_29|>' was expected to have ID '128037' but was given ID 'None' +2024-09-25T18:40:06.609847Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_30|>' was expected to have ID '128038' but was given ID 'None' +2024-09-25T18:40:06.609849Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_31|>' was expected to have ID '128039' but was given ID 'None' +2024-09-25T18:40:06.609850Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_32|>' was expected to have ID '128040' but was given ID 'None' +2024-09-25T18:40:06.609851Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_33|>' was expected to have ID '128041' but was given ID 'None' +2024-09-25T18:40:06.609853Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_34|>' was expected to have ID '128042' but was given ID 'None' +2024-09-25T18:40:06.609854Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_35|>' was expected to have ID '128043' but was given ID 'None' +2024-09-25T18:40:06.609855Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_36|>' was expected to have ID '128044' but was given ID 'None' +2024-09-25T18:40:06.609857Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_37|>' was expected to have ID '128045' but was given ID 'None' +2024-09-25T18:40:06.609859Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_38|>' was expected to have ID '128046' but was given ID 'None' +2024-09-25T18:40:06.609860Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_39|>' was expected to have ID '128047' but was given ID 'None' +2024-09-25T18:40:06.609861Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_40|>' was expected to have ID '128048' but was given ID 'None' +2024-09-25T18:40:06.609863Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_41|>' was expected to have ID '128049' but was given ID 'None' +2024-09-25T18:40:06.609864Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_42|>' was expected to have ID '128050' but was given ID 'None' +2024-09-25T18:40:06.609866Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_43|>' was expected to have ID '128051' but was given ID 'None' +2024-09-25T18:40:06.609867Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_44|>' was expected to have ID '128052' but was given ID 'None' +2024-09-25T18:40:06.609868Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_45|>' was expected to have ID '128053' but was given ID 'None' +2024-09-25T18:40:06.609870Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_46|>' was expected to have ID '128054' but was given ID 'None' +2024-09-25T18:40:06.609871Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_47|>' was expected to have ID '128055' but was given ID 'None' +2024-09-25T18:40:06.609873Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_48|>' was expected to have ID '128056' but was given ID 'None' +2024-09-25T18:40:06.609874Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_49|>' was expected to have ID '128057' but was given ID 'None' +2024-09-25T18:40:06.609876Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_50|>' was expected to have ID '128058' but was given ID 'None' +2024-09-25T18:40:06.609877Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_51|>' was expected to have ID '128059' but was given ID 'None' +2024-09-25T18:40:06.609879Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_52|>' was expected to have ID '128060' but was given ID 'None' +2024-09-25T18:40:06.609880Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_53|>' was expected to have ID '128061' but was given ID 'None' +2024-09-25T18:40:06.609881Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_54|>' was expected to have ID '128062' but was given ID 'None' +2024-09-25T18:40:06.609883Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_55|>' was expected to have ID '128063' but was given ID 'None' +2024-09-25T18:40:06.609884Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_56|>' was expected to have ID '128064' but was given ID 'None' +2024-09-25T18:40:06.609885Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_57|>' was expected to have ID '128065' but was given ID 'None' +2024-09-25T18:40:06.609887Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_58|>' was expected to have ID '128066' but was given ID 'None' +2024-09-25T18:40:06.609889Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_59|>' was expected to have ID '128067' but was given ID 'None' +2024-09-25T18:40:06.609890Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_60|>' was expected to have ID '128068' but was given ID 'None' +2024-09-25T18:40:06.609891Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_61|>' was expected to have ID '128069' but was given ID 'None' +2024-09-25T18:40:06.609893Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_62|>' was expected to have ID '128070' but was given ID 'None' +2024-09-25T18:40:06.609894Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_63|>' was expected to have ID '128071' but was given ID 'None' +2024-09-25T18:40:06.609896Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_64|>' was expected to have ID '128072' but was given ID 'None' +2024-09-25T18:40:06.609897Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_65|>' was expected to have ID '128073' but was given ID 'None' +2024-09-25T18:40:06.609898Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_66|>' was expected to have ID '128074' but was given ID 'None' +2024-09-25T18:40:06.609900Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_67|>' was expected to have ID '128075' but was given ID 'None' +2024-09-25T18:40:06.609901Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_68|>' was expected to have ID '128076' but was given ID 'None' +2024-09-25T18:40:06.609902Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_69|>' was expected to have ID '128077' but was given ID 'None' +2024-09-25T18:40:06.609904Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_70|>' was expected to have ID '128078' but was given ID 'None' +2024-09-25T18:40:06.609906Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_71|>' was expected to have ID '128079' but was given ID 'None' +2024-09-25T18:40:06.609907Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_72|>' was expected to have ID '128080' but was given ID 'None' +2024-09-25T18:40:06.609909Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_73|>' was expected to have ID '128081' but was given ID 'None' +2024-09-25T18:40:06.609910Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_74|>' was expected to have ID '128082' but was given ID 'None' +2024-09-25T18:40:06.609911Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_75|>' was expected to have ID '128083' but was given ID 'None' +2024-09-25T18:40:06.609913Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_76|>' was expected to have ID '128084' but was given ID 'None' +2024-09-25T18:40:06.609914Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_77|>' was expected to have ID '128085' but was given ID 'None' +2024-09-25T18:40:06.609915Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_78|>' was expected to have ID '128086' but was given ID 'None' +2024-09-25T18:40:06.609917Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_79|>' was expected to have ID '128087' but was given ID 'None' +2024-09-25T18:40:06.609918Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_80|>' was expected to have ID '128088' but was given ID 'None' +2024-09-25T18:40:06.609920Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_81|>' was expected to have ID '128089' but was given ID 'None' +2024-09-25T18:40:06.609921Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_82|>' was expected to have ID '128090' but was given ID 'None' +2024-09-25T18:40:06.609923Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_83|>' was expected to have ID '128091' but was given ID 'None' +2024-09-25T18:40:06.609924Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_84|>' was expected to have ID '128092' but was given ID 'None' +2024-09-25T18:40:06.609926Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_85|>' was expected to have ID '128093' but was given ID 'None' +2024-09-25T18:40:06.609927Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_86|>' was expected to have ID '128094' but was given ID 'None' +2024-09-25T18:40:06.609928Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_87|>' was expected to have ID '128095' but was given ID 'None' +2024-09-25T18:40:06.609930Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_88|>' was expected to have ID '128096' but was given ID 'None' +2024-09-25T18:40:06.609931Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_89|>' was expected to have ID '128097' but was given ID 'None' +2024-09-25T18:40:06.609932Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_90|>' was expected to have ID '128098' but was given ID 'None' +2024-09-25T18:40:06.609934Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_91|>' was expected to have ID '128099' but was given ID 'None' +2024-09-25T18:40:06.609936Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_92|>' was expected to have ID '128100' but was given ID 'None' +2024-09-25T18:40:06.609937Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_93|>' was expected to have ID '128101' but was given ID 'None' +2024-09-25T18:40:06.609938Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_94|>' was expected to have ID '128102' but was given ID 'None' +2024-09-25T18:40:06.609940Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_95|>' was expected to have ID '128103' but was given ID 'None' +2024-09-25T18:40:06.609941Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_96|>' was expected to have ID '128104' but was given ID 'None' +2024-09-25T18:40:06.609962Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_97|>' was expected to have ID '128105' but was given ID 'None' +2024-09-25T18:40:06.609963Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_98|>' was expected to have ID '128106' but was given ID 'None' +2024-09-25T18:40:06.609965Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_99|>' was expected to have ID '128107' but was given ID 'None' +2024-09-25T18:40:06.609966Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_100|>' was expected to have ID '128108' but was given ID 'None' +2024-09-25T18:40:06.609967Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_101|>' was expected to have ID '128109' but was given ID 'None' +2024-09-25T18:40:06.609969Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_102|>' was expected to have ID '128110' but was given ID 'None' +2024-09-25T18:40:06.609970Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_103|>' was expected to have ID '128111' but was given ID 'None' +2024-09-25T18:40:06.609972Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_104|>' was expected to have ID '128112' but was given ID 'None' +2024-09-25T18:40:06.609973Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_105|>' was expected to have ID '128113' but was given ID 'None' +2024-09-25T18:40:06.609974Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_106|>' was expected to have ID '128114' but was given ID 'None' +2024-09-25T18:40:06.609976Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_107|>' was expected to have ID '128115' but was given ID 'None' +2024-09-25T18:40:06.609977Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_108|>' was expected to have ID '128116' but was given ID 'None' +2024-09-25T18:40:06.609978Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_109|>' was expected to have ID '128117' but was given ID 'None' +2024-09-25T18:40:06.609980Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_110|>' was expected to have ID '128118' but was given ID 'None' +2024-09-25T18:40:06.609981Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_111|>' was expected to have ID '128119' but was given ID 'None' +2024-09-25T18:40:06.609982Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_112|>' was expected to have ID '128120' but was given ID 'None' +2024-09-25T18:40:06.609984Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_113|>' was expected to have ID '128121' but was given ID 'None' +2024-09-25T18:40:06.609986Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_114|>' was expected to have ID '128122' but was given ID 'None' +2024-09-25T18:40:06.609987Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_115|>' was expected to have ID '128123' but was given ID 'None' +2024-09-25T18:40:06.609989Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_116|>' was expected to have ID '128124' but was given ID 'None' +2024-09-25T18:40:06.609990Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_117|>' was expected to have ID '128125' but was given ID 'None' +2024-09-25T18:40:06.609991Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_118|>' was expected to have ID '128126' but was given ID 'None' +2024-09-25T18:40:06.609993Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_119|>' was expected to have ID '128127' but was given ID 'None' +2024-09-25T18:40:06.609994Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_120|>' was expected to have ID '128128' but was given ID 'None' +2024-09-25T18:40:06.609995Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_121|>' was expected to have ID '128129' but was given ID 'None' +2024-09-25T18:40:06.609997Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_122|>' was expected to have ID '128130' but was given ID 'None' +2024-09-25T18:40:06.609998Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_123|>' was expected to have ID '128131' but was given ID 'None' +2024-09-25T18:40:06.609999Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_124|>' was expected to have ID '128132' but was given ID 'None' +2024-09-25T18:40:06.610002Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_125|>' was expected to have ID '128133' but was given ID 'None' +2024-09-25T18:40:06.610003Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_126|>' was expected to have ID '128134' but was given ID 'None' +2024-09-25T18:40:06.610004Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_127|>' was expected to have ID '128135' but was given ID 'None' +2024-09-25T18:40:06.610006Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_128|>' was expected to have ID '128136' but was given ID 'None' +2024-09-25T18:40:06.610007Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_129|>' was expected to have ID '128137' but was given ID 'None' +2024-09-25T18:40:06.610008Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_130|>' was expected to have ID '128138' but was given ID 'None' +2024-09-25T18:40:06.610010Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_131|>' was expected to have ID '128139' but was given ID 'None' +2024-09-25T18:40:06.610011Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_132|>' was expected to have ID '128140' but was given ID 'None' +2024-09-25T18:40:06.610012Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_133|>' was expected to have ID '128141' but was given ID 'None' +2024-09-25T18:40:06.610014Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_134|>' was expected to have ID '128142' but was given ID 'None' +2024-09-25T18:40:06.610015Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_135|>' was expected to have ID '128143' but was given ID 'None' +2024-09-25T18:40:06.610017Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_136|>' was expected to have ID '128144' but was given ID 'None' +2024-09-25T18:40:06.610019Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_137|>' was expected to have ID '128145' but was given ID 'None' +2024-09-25T18:40:06.610020Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_138|>' was expected to have ID '128146' but was given ID 'None' +2024-09-25T18:40:06.610021Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_139|>' was expected to have ID '128147' but was given ID 'None' +2024-09-25T18:40:06.610023Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_140|>' was expected to have ID '128148' but was given ID 'None' +2024-09-25T18:40:06.610024Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_141|>' was expected to have ID '128149' but was given ID 'None' +2024-09-25T18:40:06.610025Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_142|>' was expected to have ID '128150' but was given ID 'None' +2024-09-25T18:40:06.610027Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_143|>' was expected to have ID '128151' but was given ID 'None' +2024-09-25T18:40:06.610028Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_144|>' was expected to have ID '128152' but was given ID 'None' +2024-09-25T18:40:06.610029Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_145|>' was expected to have ID '128153' but was given ID 'None' +2024-09-25T18:40:06.610031Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_146|>' was expected to have ID '128154' but was given ID 'None' +2024-09-25T18:40:06.610033Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_147|>' was expected to have ID '128155' but was given ID 'None' +2024-09-25T18:40:06.610034Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_148|>' was expected to have ID '128156' but was given ID 'None' +2024-09-25T18:40:06.610036Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_149|>' was expected to have ID '128157' but was given ID 'None' +2024-09-25T18:40:06.610037Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_150|>' was expected to have ID '128158' but was given ID 'None' +2024-09-25T18:40:06.610038Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_151|>' was expected to have ID '128159' but was given ID 'None' +2024-09-25T18:40:06.610040Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_152|>' was expected to have ID '128160' but was given ID 'None' +2024-09-25T18:40:06.610041Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_153|>' was expected to have ID '128161' but was given ID 'None' +2024-09-25T18:40:06.610042Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_154|>' was expected to have ID '128162' but was given ID 'None' +2024-09-25T18:40:06.610043Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_155|>' was expected to have ID '128163' but was given ID 'None' +2024-09-25T18:40:06.610045Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_156|>' was expected to have ID '128164' but was given ID 'None' +2024-09-25T18:40:06.610046Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_157|>' was expected to have ID '128165' but was given ID 'None' +2024-09-25T18:40:06.610048Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_158|>' was expected to have ID '128166' but was given ID 'None' +2024-09-25T18:40:06.610050Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_159|>' was expected to have ID '128167' but was given ID 'None' +2024-09-25T18:40:06.610051Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_160|>' was expected to have ID '128168' but was given ID 'None' +2024-09-25T18:40:06.610052Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_161|>' was expected to have ID '128169' but was given ID 'None' +2024-09-25T18:40:06.610054Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_162|>' was expected to have ID '128170' but was given ID 'None' +2024-09-25T18:40:06.610057Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_163|>' was expected to have ID '128171' but was given ID 'None' +2024-09-25T18:40:06.610059Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_164|>' was expected to have ID '128172' but was given ID 'None' +2024-09-25T18:40:06.610060Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_165|>' was expected to have ID '128173' but was given ID 'None' +2024-09-25T18:40:06.610061Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_166|>' was expected to have ID '128174' but was given ID 'None' +2024-09-25T18:40:06.610063Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_167|>' was expected to have ID '128175' but was given ID 'None' +2024-09-25T18:40:06.610064Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_168|>' was expected to have ID '128176' but was given ID 'None' +2024-09-25T18:40:06.610066Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_169|>' was expected to have ID '128177' but was given ID 'None' +2024-09-25T18:40:06.610067Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_170|>' was expected to have ID '128178' but was given ID 'None' +2024-09-25T18:40:06.610068Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_171|>' was expected to have ID '128179' but was given ID 'None' +2024-09-25T18:40:06.610070Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_172|>' was expected to have ID '128180' but was given ID 'None' +2024-09-25T18:40:06.610071Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_173|>' was expected to have ID '128181' but was given ID 'None' +2024-09-25T18:40:06.610072Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_174|>' was expected to have ID '128182' but was given ID 'None' +2024-09-25T18:40:06.610074Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_175|>' was expected to have ID '128183' but was given ID 'None' +2024-09-25T18:40:06.610075Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_176|>' was expected to have ID '128184' but was given ID 'None' +2024-09-25T18:40:06.610076Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_177|>' was expected to have ID '128185' but was given ID 'None' +2024-09-25T18:40:06.610078Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_178|>' was expected to have ID '128186' but was given ID 'None' +2024-09-25T18:40:06.610079Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_179|>' was expected to have ID '128187' but was given ID 'None' +2024-09-25T18:40:06.610081Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_180|>' was expected to have ID '128188' but was given ID 'None' +2024-09-25T18:40:06.610082Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_181|>' was expected to have ID '128189' but was given ID 'None' +2024-09-25T18:40:06.610084Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_182|>' was expected to have ID '128190' but was given ID 'None' +2024-09-25T18:40:06.610085Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_183|>' was expected to have ID '128191' but was given ID 'None' +2024-09-25T18:40:06.610086Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_184|>' was expected to have ID '128192' but was given ID 'None' +2024-09-25T18:40:06.610088Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_185|>' was expected to have ID '128193' but was given ID 'None' +2024-09-25T18:40:06.610089Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_186|>' was expected to have ID '128194' but was given ID 'None' +2024-09-25T18:40:06.610090Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_187|>' was expected to have ID '128195' but was given ID 'None' +2024-09-25T18:40:06.610092Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_188|>' was expected to have ID '128196' but was given ID 'None' +2024-09-25T18:40:06.610093Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_189|>' was expected to have ID '128197' but was given ID 'None' +2024-09-25T18:40:06.610094Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_190|>' was expected to have ID '128198' but was given ID 'None' +2024-09-25T18:40:06.610096Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_191|>' was expected to have ID '128199' but was given ID 'None' +2024-09-25T18:40:06.610098Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_192|>' was expected to have ID '128200' but was given ID 'None' +2024-09-25T18:40:06.610099Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_193|>' was expected to have ID '128201' but was given ID 'None' +2024-09-25T18:40:06.610100Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_194|>' was expected to have ID '128202' but was given ID 'None' +2024-09-25T18:40:06.610102Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_195|>' was expected to have ID '128203' but was given ID 'None' +2024-09-25T18:40:06.610103Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_196|>' was expected to have ID '128204' but was given ID 'None' +2024-09-25T18:40:06.610104Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_197|>' was expected to have ID '128205' but was given ID 'None' +2024-09-25T18:40:06.610106Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_198|>' was expected to have ID '128206' but was given ID 'None' +2024-09-25T18:40:06.610107Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_199|>' was expected to have ID '128207' but was given ID 'None' +2024-09-25T18:40:06.610108Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_200|>' was expected to have ID '128208' but was given ID 'None' +2024-09-25T18:40:06.610110Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_201|>' was expected to have ID '128209' but was given ID 'None' +2024-09-25T18:40:06.610114Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_202|>' was expected to have ID '128210' but was given ID 'None' +2024-09-25T18:40:06.610115Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_203|>' was expected to have ID '128211' but was given ID 'None' +2024-09-25T18:40:06.610117Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_204|>' was expected to have ID '128212' but was given ID 'None' +2024-09-25T18:40:06.610118Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_205|>' was expected to have ID '128213' but was given ID 'None' +2024-09-25T18:40:06.610119Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_206|>' was expected to have ID '128214' but was given ID 'None' +2024-09-25T18:40:06.610121Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_207|>' was expected to have ID '128215' but was given ID 'None' +2024-09-25T18:40:06.610122Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_208|>' was expected to have ID '128216' but was given ID 'None' +2024-09-25T18:40:06.610123Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_209|>' was expected to have ID '128217' but was given ID 'None' +2024-09-25T18:40:06.610125Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_210|>' was expected to have ID '128218' but was given ID 'None' +2024-09-25T18:40:06.610126Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_211|>' was expected to have ID '128219' but was given ID 'None' +2024-09-25T18:40:06.610127Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_212|>' was expected to have ID '128220' but was given ID 'None' +2024-09-25T18:40:06.610129Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_213|>' was expected to have ID '128221' but was given ID 'None' +2024-09-25T18:40:06.610131Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_214|>' was expected to have ID '128222' but was given ID 'None' +2024-09-25T18:40:06.610132Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_215|>' was expected to have ID '128223' but was given ID 'None' +2024-09-25T18:40:06.610133Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_216|>' was expected to have ID '128224' but was given ID 'None' +2024-09-25T18:40:06.610135Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_217|>' was expected to have ID '128225' but was given ID 'None' +2024-09-25T18:40:06.610136Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_218|>' was expected to have ID '128226' but was given ID 'None' +2024-09-25T18:40:06.610138Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_219|>' was expected to have ID '128227' but was given ID 'None' +2024-09-25T18:40:06.610139Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_220|>' was expected to have ID '128228' but was given ID 'None' +2024-09-25T18:40:06.610140Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_221|>' was expected to have ID '128229' but was given ID 'None' +2024-09-25T18:40:06.610142Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_222|>' was expected to have ID '128230' but was given ID 'None' +2024-09-25T18:40:06.610143Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_223|>' was expected to have ID '128231' but was given ID 'None' +2024-09-25T18:40:06.610145Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_224|>' was expected to have ID '128232' but was given ID 'None' +2024-09-25T18:40:06.610146Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_225|>' was expected to have ID '128233' but was given ID 'None' +2024-09-25T18:40:06.610148Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_226|>' was expected to have ID '128234' but was given ID 'None' +2024-09-25T18:40:06.610149Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_227|>' was expected to have ID '128235' but was given ID 'None' +2024-09-25T18:40:06.610150Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_228|>' was expected to have ID '128236' but was given ID 'None' +2024-09-25T18:40:06.610152Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_229|>' was expected to have ID '128237' but was given ID 'None' +2024-09-25T18:40:06.610153Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_230|>' was expected to have ID '128238' but was given ID 'None' +2024-09-25T18:40:06.610155Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_231|>' was expected to have ID '128239' but was given ID 'None' +2024-09-25T18:40:06.610156Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_232|>' was expected to have ID '128240' but was given ID 'None' +2024-09-25T18:40:06.610157Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_233|>' was expected to have ID '128241' but was given ID 'None' +2024-09-25T18:40:06.610159Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_234|>' was expected to have ID '128242' but was given ID 'None' +2024-09-25T18:40:06.610211Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_235|>' was expected to have ID '128243' but was given ID 'None' +2024-09-25T18:40:06.610214Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_236|>' was expected to have ID '128244' but was given ID 'None' +2024-09-25T18:40:06.610215Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_237|>' was expected to have ID '128245' but was given ID 'None' +2024-09-25T18:40:06.610217Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_238|>' was expected to have ID '128246' but was given ID 'None' +2024-09-25T18:40:06.610218Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_239|>' was expected to have ID '128247' but was given ID 'None' +2024-09-25T18:40:06.610220Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_240|>' was expected to have ID '128248' but was given ID 'None' +2024-09-25T18:40:06.610221Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_241|>' was expected to have ID '128249' but was given ID 'None' +2024-09-25T18:40:06.610222Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_242|>' was expected to have ID '128250' but was given ID 'None' +2024-09-25T18:40:06.610224Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_243|>' was expected to have ID '128251' but was given ID 'None' +2024-09-25T18:40:06.610225Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_244|>' was expected to have ID '128252' but was given ID 'None' +2024-09-25T18:40:06.610226Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_245|>' was expected to have ID '128253' but was given ID 'None' +2024-09-25T18:40:06.610229Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_246|>' was expected to have ID '128254' but was given ID 'None' +2024-09-25T18:40:06.610230Z  WARN tokenizers::tokenizer::serialization: /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/tokenizers-0.19.1/src/tokenizer/serialization.rs:159: Warning: Token '<|reserved_special_token_247|>' was expected to have ID '128255' but was given ID 'None' +2024-09-25T18:40:06.610938Z  INFO text_generation_router: router/src/main.rs:317: Using config Some(Llama) +2024-09-25T18:40:06.627921Z  INFO text_generation_router: router/src/main.rs:345: Warming up model +2024-09-25T18:40:06.627943Z  WARN text_generation_router: router/src/main.rs:361: Model does not support automatic max batch total tokens +2024-09-25T18:40:06.627946Z  INFO text_generation_router: router/src/main.rs:383: Setting max batch total tokens to 16000 +2024-09-25T18:40:06.627948Z  INFO text_generation_router: router/src/main.rs:384: Connected +2024-09-25T18:40:06.627951Z  WARN text_generation_router: router/src/main.rs:398: Invalid hostname, defaulting to 0.0.0.0 diff --git a/tests/vllm-gaudi-service.log b/tests/vllm-gaudi-service.log new file mode 100644 index 000000000..4230ffbe9 --- /dev/null +++ b/tests/vllm-gaudi-service.log @@ -0,0 +1,272 @@ +INFO 12-09 23:52:00 api_server.py:625] vLLM API server version 0.6.3.dev1405+gdb686905 +INFO 12-09 23:52:00 api_server.py:626] args: Namespace(host='0.0.0.0', port=80, uvicorn_log_level='info', allow_credentials=False, allowed_origins=['*'], allowed_methods=['*'], allowed_headers=['*'], api_key=None, lora_modules=None, prompt_adapters=None, chat_template=None, chat_template_content_format='auto', response_role='assistant', ssl_keyfile=None, ssl_certfile=None, ssl_ca_certs=None, ssl_cert_reqs=0, root_path=None, middleware=[], return_tokens_as_token_ids=False, disable_frontend_multiprocessing=False, enable_auto_tool_choice=False, tool_call_parser=None, tool_parser_plugin='', model='meta-llama/Meta-Llama-3.1-70B-Instruct', task='auto', tokenizer=None, skip_tokenizer_init=False, revision=None, code_revision=None, tokenizer_revision=None, tokenizer_mode='auto', trust_remote_code=False, allowed_local_media_path=None, download_dir=None, load_format='auto', weights_load_device=None, config_format=, dtype='auto', kv_cache_dtype='auto', quantization_param_path=None, max_model_len=None, guided_decoding_backend='xgrammar', distributed_executor_backend=None, worker_use_ray=False, pipeline_parallel_size=1, tensor_parallel_size=4, max_parallel_loading_workers=None, ray_workers_use_nsight=False, block_size=128, enable_prefix_caching=None, disable_sliding_window=False, use_v2_block_manager=False, use_padding_aware_scheduling=False, num_lookahead_slots=0, seed=0, swap_space=4, cpu_offload_gb=0, gpu_memory_utilization=0.9, num_gpu_blocks_override=None, max_num_batched_tokens=None, max_num_seqs=256, max_num_prefill_seqs=None, max_logprobs=20, disable_log_stats=False, quantization=None, rope_scaling=None, rope_theta=None, hf_overrides=None, enforce_eager=False, max_seq_len_to_capture=16384, disable_custom_all_reduce=False, tokenizer_pool_size=0, tokenizer_pool_type='ray', tokenizer_pool_extra_config=None, limit_mm_per_prompt=None, mm_processor_kwargs=None, enable_lora=False, enable_lora_bias=False, max_loras=1, max_lora_rank=16, lora_extra_vocab_size=256, lora_dtype='auto', long_lora_scaling_factors=None, max_cpu_loras=None, fully_sharded_loras=False, enable_prompt_adapter=False, max_prompt_adapters=1, max_prompt_adapter_token=0, device='auto', num_scheduler_steps=1, multi_step_stream_outputs=True, scheduler_delay_factor=0.0, enable_chunked_prefill=None, speculative_model=None, speculative_model_quantization=None, num_speculative_tokens=None, speculative_disable_mqa_scorer=False, speculative_draft_tensor_parallel_size=None, speculative_max_model_len=None, speculative_disable_by_batch_size=None, ngram_prompt_lookup_max=None, ngram_prompt_lookup_min=None, spec_decoding_acceptance_method='rejection_sampler', typical_acceptance_sampler_posterior_threshold=None, typical_acceptance_sampler_posterior_alpha=None, disable_logprobs_during_spec_decoding=None, model_loader_extra_config=None, ignore_patterns=[], preemption_mode=None, served_model_name=None, qlora_adapter_name_or_path=None, otlp_traces_endpoint=None, collect_detailed_traces=None, disable_async_output_proc=False, scheduling_policy='fcfs', override_neuron_config=None, override_pooler_config=None, compilation_config=None, kv_transfer_config=None, worker_cls='auto', disable_log_requests=False, max_log_len=None, disable_fastapi_docs=False, enable_prompt_tokens_details=False) +INFO 12-09 23:52:00 __init__.py:60] No plugins found. +INFO 12-09 23:52:00 api_server.py:178] Multiprocessing frontend to use ipc:///tmp/b03e0fed-aee3-48aa-ab57-8675627b48e2 for IPC Path. +INFO 12-09 23:52:00 api_server.py:197] Started engine process with PID 77 +INFO 12-09 23:52:04 __init__.py:60] No plugins found. +INFO 12-09 23:52:07 config.py:403] This model supports multiple tasks: {'embedding', 'generate'}. Defaulting to 'generate'. +INFO 12-09 23:52:07 config.py:1042] Defaulting to use mp for distributed inference +WARNING 12-09 23:52:07 arg_utils.py:1104] The model has a long context length (131072). This may cause OOM errors during the initial memory profiling phase, or result in low performance due to small KV cache space. Consider setting --max-model-len to a smaller value. +WARNING 12-09 23:52:07 arg_utils.py:1160] [DEPRECATED] Block manager v1 has been removed, and setting --use-v2-block-manager to True or False has no effect on vLLM behavior. Please remove --use-v2-block-manager in your engine argument. If your use case is not supported by SelfAttnBlockSpaceManager (i.e. block manager v2), please file an issue with detailed information. +INFO 12-09 23:52:12 config.py:403] This model supports multiple tasks: {'generate', 'embedding'}. Defaulting to 'generate'. +INFO 12-09 23:52:12 config.py:1042] Defaulting to use mp for distributed inference +WARNING 12-09 23:52:12 arg_utils.py:1104] The model has a long context length (131072). This may cause OOM errors during the initial memory profiling phase, or result in low performance due to small KV cache space. Consider setting --max-model-len to a smaller value. +WARNING 12-09 23:52:12 arg_utils.py:1160] [DEPRECATED] Block manager v1 has been removed, and setting --use-v2-block-manager to True or False has no effect on vLLM behavior. Please remove --use-v2-block-manager in your engine argument. If your use case is not supported by SelfAttnBlockSpaceManager (i.e. block manager v2), please file an issue with detailed information. +/usr/lib/python3.10/inspect.py:288: FutureWarning: `torch.distributed.reduce_op` is deprecated, please use `torch.distributed.ReduceOp` instead + return isinstance(object, types.FunctionType) +INFO 12-09 23:52:12 llm_engine.py:250] Initializing an LLM engine (v0.6.3.dev1405+gdb686905) with config: model='meta-llama/Meta-Llama-3.1-70B-Instruct', speculative_config=None, tokenizer='meta-llama/Meta-Llama-3.1-70B-Instruct', skip_tokenizer_init=False, tokenizer_mode=auto, revision=None, override_neuron_config=None, tokenizer_revision=None, trust_remote_code=False, dtype=torch.bfloat16, max_seq_len=131072, download_dir=None, load_format=LoadFormat.AUTO, tensor_parallel_size=4, pipeline_parallel_size=1, disable_custom_all_reduce=False, quantization=None, weights_load_device=hpu, enforce_eager=False, kv_cache_dtype=auto, quantization_param_path=None, device_config=hpu, decoding_config=DecodingConfig(guided_decoding_backend='xgrammar'), observability_config=ObservabilityConfig(otlp_traces_endpoint=None, collect_model_forward_time=False, collect_model_execute_time=False), seed=0, served_model_name=meta-llama/Meta-Llama-3.1-70B-Instruct, num_scheduler_steps=1, chunked_prefill_enabled=False multi_step_stream_outputs=True, enable_prefix_caching=False, use_async_output_proc=True, use_cached_outputs=True, mm_processor_kwargs=None, pooler_config=None,compilation_config=CompilationConfig(level=0, backend='', custom_ops=[], splitting_ops=['vllm.unified_attention', 'vllm.unified_attention_with_output'], use_inductor=True, inductor_specialize_for_cudagraph_no_more_than=None, inductor_compile_sizes=[], inductor_compile_config={}, inductor_passes={}, use_cudagraph=False, cudagraph_num_of_warmups=0, cudagraph_capture_sizes=None, cudagraph_copy_inputs=False, pass_config=PassConfig(dump_graph_stages=[], dump_graph_dir=PosixPath('.'), enable_fusion=True, enable_reshape=True), compile_sizes=[], capture_sizes=[256, 248, 240, 232, 224, 216, 208, 200, 192, 184, 176, 168, 160, 152, 144, 136, 128, 120, 112, 104, 96, 88, 80, 72, 64, 56, 48, 40, 32, 24, 16, 8, 4, 2, 1], enabled_custom_ops=Counter(), disabled_custom_ops=Counter(), compilation_time=0.0, static_forward_context={}) +WARNING 12-09 23:52:13 multiproc_gpu_executor.py:56] Reducing Torch parallelism from 80 threads to 1 to avoid unnecessary CPU contention. Set OMP_NUM_THREADS in the external environment to tune this value as needed. +INFO 12-09 23:52:13 custom_cache_manager.py:17] Setting Triton cache manager to: vllm.triton_utils.custom_cache_manager:CustomCacheManager +Detected capabilities: [-cpu -gaudi +gaudi2 -gaudi3 -index_reduce] +WARNING 12-09 23:52:16 utils.py:772] Pin memory is not supported on HPU. +INFO 12-09 23:52:16 selector.py:159] Using HPUAttention backend. +(VllmWorkerProcess pid=358) Detected capabilities: [-cpu -gaudi +gaudi2 -gaudi3 -index_reduce] +(VllmWorkerProcess pid=358) WARNING 12-09 23:52:16 utils.py:772] Pin memory is not supported on HPU. +(VllmWorkerProcess pid=358) INFO 12-09 23:52:16 selector.py:159] Using HPUAttention backend. +(VllmWorkerProcess pid=357) Detected capabilities: [-cpu -gaudi +gaudi2 -gaudi3 -index_reduce] +(VllmWorkerProcess pid=357) WARNING 12-09 23:52:16 utils.py:772] Pin memory is not supported on HPU. +(VllmWorkerProcess pid=357) INFO 12-09 23:52:16 selector.py:159] Using HPUAttention backend. +(VllmWorkerProcess pid=358) VLLM_PROMPT_BS_BUCKET_MIN=1 (default:1) +(VllmWorkerProcess pid=358) VLLM_PROMPT_BS_BUCKET_STEP=32 (default:32) +(VllmWorkerProcess pid=358) VLLM_PROMPT_BS_BUCKET_MAX=256 (default:256) +(VllmWorkerProcess pid=358) VLLM_DECODE_BS_BUCKET_MIN=1 (default:1) +(VllmWorkerProcess pid=358) VLLM_DECODE_BS_BUCKET_STEP=32 (default:32) +(VllmWorkerProcess pid=358) VLLM_DECODE_BS_BUCKET_MAX=256 (default:256) +(VllmWorkerProcess pid=358) VLLM_PROMPT_SEQ_BUCKET_MIN=128 (default:128) +(VllmWorkerProcess pid=358) VLLM_PROMPT_SEQ_BUCKET_STEP=128 (default:128) +(VllmWorkerProcess pid=358) VLLM_PROMPT_SEQ_BUCKET_MAX=1024 (default:1024) +(VllmWorkerProcess pid=358) VLLM_DECODE_BLOCK_BUCKET_MIN=128 (default:128) +(VllmWorkerProcess pid=358) VLLM_DECODE_BLOCK_BUCKET_STEP=128 (default:128) +(VllmWorkerProcess pid=358) VLLM_DECODE_BLOCK_BUCKET_MAX=4096 (default:4096) +(VllmWorkerProcess pid=358) Prompt bucket config (min, step, max_warmup) bs:[1, 32, 256], seq:[128, 128, 1024] +(VllmWorkerProcess pid=358) Decode bucket config (min, step, max_warmup) bs:[1, 32, 256], block:[128, 128, 4096] +(VllmWorkerProcess pid=358) INFO 12-09 23:52:16 multiproc_worker_utils.py:215] Worker ready; awaiting tasks +(VllmWorkerProcess pid=357) VLLM_PROMPT_BS_BUCKET_MIN=1 (default:1) +(VllmWorkerProcess pid=357) VLLM_PROMPT_BS_BUCKET_STEP=32 (default:32) +(VllmWorkerProcess pid=357) VLLM_PROMPT_BS_BUCKET_MAX=256 (default:256) +(VllmWorkerProcess pid=357) VLLM_DECODE_BS_BUCKET_MIN=1 (default:1) +(VllmWorkerProcess pid=357) VLLM_DECODE_BS_BUCKET_STEP=32 (default:32) +(VllmWorkerProcess pid=357) VLLM_DECODE_BS_BUCKET_MAX=256 (default:256) +(VllmWorkerProcess pid=357) VLLM_PROMPT_SEQ_BUCKET_MIN=128 (default:128) +(VllmWorkerProcess pid=357) VLLM_PROMPT_SEQ_BUCKET_STEP=128 (default:128) +(VllmWorkerProcess pid=357) VLLM_PROMPT_SEQ_BUCKET_MAX=1024 (default:1024) +(VllmWorkerProcess pid=357) VLLM_DECODE_BLOCK_BUCKET_MIN=128 (default:128) +(VllmWorkerProcess pid=357) VLLM_DECODE_BLOCK_BUCKET_STEP=128 (default:128) +(VllmWorkerProcess pid=357) VLLM_DECODE_BLOCK_BUCKET_MAX=4096 (default:4096) +(VllmWorkerProcess pid=357) Prompt bucket config (min, step, max_warmup) bs:[1, 32, 256], seq:[128, 128, 1024] +(VllmWorkerProcess pid=357) Decode bucket config (min, step, max_warmup) bs:[1, 32, 256], block:[128, 128, 4096] +(VllmWorkerProcess pid=357) INFO 12-09 23:52:16 multiproc_worker_utils.py:215] Worker ready; awaiting tasks +(VllmWorkerProcess pid=359) Detected capabilities: [-cpu -gaudi +gaudi2 -gaudi3 -index_reduce] +(VllmWorkerProcess pid=359) WARNING 12-09 23:52:16 utils.py:772] Pin memory is not supported on HPU. +(VllmWorkerProcess pid=359) INFO 12-09 23:52:16 selector.py:159] Using HPUAttention backend. +(VllmWorkerProcess pid=359) VLLM_PROMPT_BS_BUCKET_MIN=1 (default:1) +(VllmWorkerProcess pid=359) VLLM_PROMPT_BS_BUCKET_STEP=32 (default:32) +(VllmWorkerProcess pid=359) VLLM_PROMPT_BS_BUCKET_MAX=256 (default:256) +(VllmWorkerProcess pid=359) VLLM_DECODE_BS_BUCKET_MIN=1 (default:1) +(VllmWorkerProcess pid=359) VLLM_DECODE_BS_BUCKET_STEP=32 (default:32) +(VllmWorkerProcess pid=359) VLLM_DECODE_BS_BUCKET_MAX=256 (default:256) +(VllmWorkerProcess pid=359) VLLM_PROMPT_SEQ_BUCKET_MIN=128 (default:128) +(VllmWorkerProcess pid=359) VLLM_PROMPT_SEQ_BUCKET_STEP=128 (default:128) +(VllmWorkerProcess pid=359) VLLM_PROMPT_SEQ_BUCKET_MAX=1024 (default:1024) +(VllmWorkerProcess pid=359) VLLM_DECODE_BLOCK_BUCKET_MIN=128 (default:128) +(VllmWorkerProcess pid=359) VLLM_DECODE_BLOCK_BUCKET_STEP=128 (default:128) +(VllmWorkerProcess pid=359) VLLM_DECODE_BLOCK_BUCKET_MAX=4096 (default:4096) +(VllmWorkerProcess pid=359) Prompt bucket config (min, step, max_warmup) bs:[1, 32, 256], seq:[128, 128, 1024] +(VllmWorkerProcess pid=359) Decode bucket config (min, step, max_warmup) bs:[1, 32, 256], block:[128, 128, 4096] +(VllmWorkerProcess pid=359) INFO 12-09 23:52:16 multiproc_worker_utils.py:215] Worker ready; awaiting tasks +============================= HABANA PT BRIDGE CONFIGURATION =========================== + PT_HPU_LAZY_MODE = 1 + PT_RECIPE_CACHE_PATH = + PT_CACHE_FOLDER_DELETE = 0 + PT_HPU_RECIPE_CACHE_CONFIG = + PT_HPU_MAX_COMPOUND_OP_SIZE = 9223372036854775807 + PT_HPU_LAZY_ACC_PAR_MODE = 1 + PT_HPU_ENABLE_REFINE_DYNAMIC_SHAPES = 0 + PT_HPU_EAGER_PIPELINE_ENABLE = 1 + PT_HPU_EAGER_COLLECTIVE_PIPELINE_ENABLE = 1 +---------------------------: System Configuration :--------------------------- +Num CPU Cores : 160 +CPU RAM : 1056374408 KB +------------------------------------------------------------------------------ +============================= HABANA PT BRIDGE CONFIGURATION =========================== + PT_HPU_LAZY_MODE = 1 + PT_RECIPE_CACHE_PATH = + PT_CACHE_FOLDER_DELETE = 0 + PT_HPU_RECIPE_CACHE_CONFIG = + PT_HPU_MAX_COMPOUND_OP_SIZE = 9223372036854775807 + PT_HPU_LAZY_ACC_PAR_MODE = 1 + PT_HPU_ENABLE_REFINE_DYNAMIC_SHAPES = 0 + PT_HPU_EAGER_PIPELINE_ENABLE = 1 + PT_HPU_EAGER_COLLECTIVE_PIPELINE_ENABLE = 1 +---------------------------: System Configuration :--------------------------- +Num CPU Cores : 160 +CPU RAM : 1056374408 KB +------------------------------------------------------------------------------ +============================= HABANA PT BRIDGE CONFIGURATION =========================== + PT_HPU_LAZY_MODE = 1 + PT_RECIPE_CACHE_PATH = + PT_CACHE_FOLDER_DELETE = 0 + PT_HPU_RECIPE_CACHE_CONFIG = + PT_HPU_MAX_COMPOUND_OP_SIZE = 9223372036854775807 + PT_HPU_LAZY_ACC_PAR_MODE = 1 + PT_HPU_ENABLE_REFINE_DYNAMIC_SHAPES = 0 + PT_HPU_EAGER_PIPELINE_ENABLE = 1 + PT_HPU_EAGER_COLLECTIVE_PIPELINE_ENABLE = 1 +---------------------------: System Configuration :--------------------------- +Num CPU Cores : 160 +CPU RAM : 1056374408 KB +------------------------------------------------------------------------------ +============================= HABANA PT BRIDGE CONFIGURATION =========================== + PT_HPU_LAZY_MODE = 1 + PT_RECIPE_CACHE_PATH = + PT_CACHE_FOLDER_DELETE = 0 + PT_HPU_RECIPE_CACHE_CONFIG = + PT_HPU_MAX_COMPOUND_OP_SIZE = 9223372036854775807 + PT_HPU_LAZY_ACC_PAR_MODE = 1 + PT_HPU_ENABLE_REFINE_DYNAMIC_SHAPES = 0 + PT_HPU_EAGER_PIPELINE_ENABLE = 1 + PT_HPU_EAGER_COLLECTIVE_PIPELINE_ENABLE = 1 +---------------------------: System Configuration :--------------------------- +Num CPU Cores : 160 +CPU RAM : 1056374408 KB +------------------------------------------------------------------------------ +VLLM_PROMPT_BS_BUCKET_MIN=1 (default:1) +VLLM_PROMPT_BS_BUCKET_STEP=32 (default:32) +VLLM_PROMPT_BS_BUCKET_MAX=256 (default:256) +VLLM_DECODE_BS_BUCKET_MIN=1 (default:1) +VLLM_DECODE_BS_BUCKET_STEP=32 (default:32) +VLLM_DECODE_BS_BUCKET_MAX=256 (default:256) +VLLM_PROMPT_SEQ_BUCKET_MIN=128 (default:128) +VLLM_PROMPT_SEQ_BUCKET_STEP=128 (default:128) +VLLM_PROMPT_SEQ_BUCKET_MAX=1024 (default:1024) +VLLM_DECODE_BLOCK_BUCKET_MIN=128 (default:128) +VLLM_DECODE_BLOCK_BUCKET_STEP=128 (default:128) +VLLM_DECODE_BLOCK_BUCKET_MAX=4096 (default:4096) +Prompt bucket config (min, step, max_warmup) bs:[1, 32, 256], seq:[128, 128, 1024] +Decode bucket config (min, step, max_warmup) bs:[1, 32, 256], block:[128, 128, 4096] +INFO 12-09 23:52:21 shm_broadcast.py:236] vLLM message queue communication handle: Handle(connect_ip='127.0.0.1', local_reader_ranks=[1, 2, 3], buffer=, local_subscribe_port=42205, remote_subscribe_port=None) +INFO 12-09 23:52:23 loader.py:368] Loading weights on hpu... +(VllmWorkerProcess pid=359) INFO 12-09 23:52:23 loader.py:368] Loading weights on hpu... +(VllmWorkerProcess pid=357) INFO 12-09 23:52:23 loader.py:368] Loading weights on hpu... +(VllmWorkerProcess pid=358) INFO 12-09 23:52:23 loader.py:368] Loading weights on hpu... +INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetensors'] +(VllmWorkerProcess pid=359) INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetensors'] +(VllmWorkerProcess pid=357) INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetensors'] +(VllmWorkerProcess pid=358) INFO 12-09 23:52:23 weight_utils.py:243] Using model weights format ['*.safetensors'] + +Loading safetensors checkpoint shards: 0% Completed | 0/30 [00:00