From a93880212b1138260eacff90deffbc7a03d1e472 Mon Sep 17 00:00:00 2001 From: diegocabello Date: Sat, 15 Jun 2024 13:53:00 -0700 Subject: [PATCH] gonna do more later --- docs_edit/.readthedocs.yaml | 11 + .../applications/business-analyst-agent.md | 978 ++++++++++++++ docs_edit/applications/compliance_swarm.md | 0 docs_edit/applications/customer_support.md | 42 + docs_edit/applications/discord.md | 105 ++ docs_edit/applications/enterprise.md | 0 docs_edit/applications/marketing_agencies.md | 64 + docs_edit/assets/css/extra.css | 7 + docs_edit/assets/img/SwarmsLogoIcon.png | Bin 0 -> 204554 bytes docs_edit/assets/img/docs/query-plan-mini.png | Bin 0 -> 125179 bytes docs_edit/assets/img/docs/query-plan.png | Bin 0 -> 399648 bytes docs_edit/assets/img/reliabilitythrough.png | Bin 0 -> 41362 bytes docs_edit/assets/img/swarmbanner.png | Bin 0 -> 289792 bytes docs_edit/assets/img/swarmsbanner.png | Bin 0 -> 240379 bytes docs_edit/assets/img/tools/output.png | Bin 0 -> 151667 bytes docs_edit/community/ecosystem.md | 70 + docs_edit/contributing.md | 123 ++ docs_edit/corporate/architecture.md | 358 +++++ docs_edit/corporate/bounties.md | 86 ++ docs_edit/corporate/checklist.md | 122 ++ docs_edit/corporate/cost_analysis.md | 100 ++ docs_edit/corporate/data_room.md | 112 ++ docs_edit/corporate/demos.md | 9 + docs_edit/corporate/design.md | 152 +++ docs_edit/corporate/distribution.md | 469 +++++++ docs_edit/corporate/failures.md | 104 ++ docs_edit/corporate/faq.md | 110 ++ docs_edit/corporate/flywheel.md | 101 ++ docs_edit/corporate/front_end_contributors.md | 40 + docs_edit/corporate/hiring.md | 61 + docs_edit/corporate/metric.md | 225 ++++ docs_edit/corporate/monthly_formula.py | 66 + docs_edit/corporate/purpose.md | 14 + docs_edit/corporate/research.md | 82 ++ docs_edit/corporate/roadmap.md | 13 + docs_edit/corporate/swarm_cloud.md | 195 +++ docs_edit/corporate/swarm_memo.md | 21 + docs_edit/corporate/swarms_bounty_system.md | 92 ++ docs_edit/features/20swarms.md | 187 +++ docs_edit/features/SMAPS.md | 50 + docs_edit/features/agent_archive.md | 73 ++ docs_edit/features/fail_protocol.md | 67 + docs_edit/features/human_in_loop.md | 49 + docs_edit/features/info_sec.md | 48 + docs_edit/features/promptimizer.md | 68 + docs_edit/features/shorthand.md | 68 + docs_edit/index.md | 16 + docs_edit/mkdocs.yml | 167 +++ docs_edit/overrides/main.html | 9 + .../purpose/limits_of_individual_agents.md | 55 + docs_edit/purpose/why.md | 134 ++ docs_edit/purpose/why_swarms.md | 53 + docs_edit/requirements.txt | 22 + docs_edit/swarms/agents/abstractagent.md | 123 ++ docs_edit/swarms/agents/idea_to_image.md | 124 ++ docs_edit/swarms/agents/message.md | 112 ++ docs_edit/swarms/agents/omni_agent.md | 94 ++ docs_edit/swarms/agents/omnimodalagent.md | 79 ++ docs_edit/swarms/agents/toolagent.md | 111 ++ docs_edit/swarms/agents/workeragent.md | 78 ++ docs_edit/swarms/framework_structure.md | 127 ++ docs_edit/swarms/glossary.md | 48 + docs_edit/swarms/index.md | 1151 +++++++++++++++++ docs_edit/swarms/index_overview.md | 0 docs_edit/swarms/install/docker_setup.md | 186 +++ docs_edit/swarms/install/install.md | 89 ++ .../swarms/install/multi_agent_template.md | 6 + docs_edit/swarms/memory/azure_openai.md | 131 ++ docs_edit/swarms/memory/diy_memory.md | 603 +++++++++ docs_edit/swarms/memory/pg.md | 350 +++++ docs_edit/swarms/memory/pinecone.md | 293 +++++ docs_edit/swarms/memory/qdrant.md | 86 ++ docs_edit/swarms/memory/short_term_memory.md | 250 ++++ docs_edit/swarms/memory/weaviate.md | 204 +++ docs_edit/swarms/models/anthropic.md | 109 ++ docs_edit/swarms/models/base_llm.md | 227 ++++ .../swarms/models/base_multimodal_model.md | 299 +++++ docs_edit/swarms/models/custom_model.md | 107 ++ docs_edit/swarms/models/dalle3.md | 261 ++++ docs_edit/swarms/models/distilled_whisperx.md | 123 ++ docs_edit/swarms/models/fuyu.md | 89 ++ docs_edit/swarms/models/gemini.md | 178 +++ docs_edit/swarms/models/gpt4o.md | 150 +++ docs_edit/swarms/models/gpt4v.md | 201 +++ docs_edit/swarms/models/hf.md | 91 ++ docs_edit/swarms/models/huggingface.md | 155 +++ docs_edit/swarms/models/idefics.md | 107 ++ docs_edit/swarms/models/index.md | 178 +++ docs_edit/swarms/models/kosmos.md | 217 ++++ .../swarms/models/layoutlm_document_qa.md | 88 ++ docs_edit/swarms/models/llama3.md | 96 ++ docs_edit/swarms/models/nougat.md | 118 ++ docs_edit/swarms/models/openai.md | 200 +++ docs_edit/swarms/models/openai_chat.md | 185 +++ docs_edit/swarms/models/openai_tts.md | 135 ++ docs_edit/swarms/models/vilt.md | 95 ++ docs_edit/swarms/papers.md | 3 + docs_edit/swarms/structs/abstractswarm.md | 516 ++++++++ docs_edit/swarms/structs/agent.md | 163 +++ docs_edit/swarms/structs/agent_rearrange.md | 274 ++++ docs_edit/swarms/structs/artifact.md | 103 ++ docs_edit/swarms/structs/artifactupload.md | 49 + docs_edit/swarms/structs/autoscaler.md | 178 +++ docs_edit/swarms/structs/basestructure.md | 137 ++ docs_edit/swarms/structs/baseworkflow.md | 42 + .../swarms/structs/concurrentworkflow.md | 77 ++ docs_edit/swarms/structs/conversation.md | 265 ++++ .../swarms/structs/diy_your_own_agent.md | 349 +++++ docs_edit/swarms/structs/groupchat.md | 147 +++ docs_edit/swarms/structs/groupchatmanager.md | 90 ++ docs_edit/swarms/structs/index.md | 363 ++++++ docs_edit/swarms/structs/majorityvoting.md | 111 ++ docs_edit/swarms/structs/moa.md | 379 ++++++ .../structs/multi_agent_orchestration.md | 15 + docs_edit/swarms/structs/nonlinearworkflow.md | 96 ++ docs_edit/swarms/structs/recursiveworkflow.md | 23 + docs_edit/swarms/structs/round_robin_swarm.md | 127 ++ .../swarms/structs/sequential_workflow.md | 606 +++++++++ .../swarms/structs/stackoverflowswarm.md | 114 ++ docs_edit/swarms/structs/stepinput.md | 64 + docs_edit/swarms/structs/swarmnetwork.md | 167 +++ docs_edit/swarms/structs/task.md | 29 + docs_edit/swarms/structs/taskinput.md | 84 ++ docs_edit/swarms/structs/taskqueuebase.md | 130 ++ docs_edit/swarms/structs/workflow.md | 200 +++ docs_edit/swarms/structs/yaml_model.md | 251 ++++ docs_edit/swarms/tools/base_tool.md | 118 ++ docs_edit/swarms/tools/decorator.md | 92 ++ docs_edit/swarms/tools/main.md | 387 ++++++ docs_edit/swarms_cloud/architecture.md | 138 ++ docs_edit/swarms_cloud/available_models.md | 10 + docs_edit/swarms_cloud/getting_started.md | 94 ++ docs_edit/swarms_cloud/main.md | 352 +++++ docs_edit/swarms_cloud/migrate_openai.md | 82 ++ .../swarms_cloud/production_deployment.md | 319 +++++ 135 files changed, 19396 insertions(+) create mode 100644 docs_edit/.readthedocs.yaml create mode 100644 docs_edit/applications/business-analyst-agent.md create mode 100644 docs_edit/applications/compliance_swarm.md create mode 100644 docs_edit/applications/customer_support.md create mode 100644 docs_edit/applications/discord.md create mode 100644 docs_edit/applications/enterprise.md create mode 100644 docs_edit/applications/marketing_agencies.md create mode 100644 docs_edit/assets/css/extra.css create mode 100644 docs_edit/assets/img/SwarmsLogoIcon.png create mode 100644 docs_edit/assets/img/docs/query-plan-mini.png create mode 100644 docs_edit/assets/img/docs/query-plan.png create mode 100644 docs_edit/assets/img/reliabilitythrough.png create mode 100644 docs_edit/assets/img/swarmbanner.png create mode 100644 docs_edit/assets/img/swarmsbanner.png create mode 100644 docs_edit/assets/img/tools/output.png create mode 100644 docs_edit/community/ecosystem.md create mode 100644 docs_edit/contributing.md create mode 100644 docs_edit/corporate/architecture.md create mode 100644 docs_edit/corporate/bounties.md create mode 100644 docs_edit/corporate/checklist.md create mode 100644 docs_edit/corporate/cost_analysis.md create mode 100644 docs_edit/corporate/data_room.md create mode 100644 docs_edit/corporate/demos.md create mode 100644 docs_edit/corporate/design.md create mode 100644 docs_edit/corporate/distribution.md create mode 100644 docs_edit/corporate/failures.md create mode 100644 docs_edit/corporate/faq.md create mode 100644 docs_edit/corporate/flywheel.md create mode 100644 docs_edit/corporate/front_end_contributors.md create mode 100644 docs_edit/corporate/hiring.md create mode 100644 docs_edit/corporate/metric.md create mode 100644 docs_edit/corporate/monthly_formula.py create mode 100644 docs_edit/corporate/purpose.md create mode 100644 docs_edit/corporate/research.md create mode 100644 docs_edit/corporate/roadmap.md create mode 100644 docs_edit/corporate/swarm_cloud.md create mode 100644 docs_edit/corporate/swarm_memo.md create mode 100644 docs_edit/corporate/swarms_bounty_system.md create mode 100644 docs_edit/features/20swarms.md create mode 100644 docs_edit/features/SMAPS.md create mode 100644 docs_edit/features/agent_archive.md create mode 100644 docs_edit/features/fail_protocol.md create mode 100644 docs_edit/features/human_in_loop.md create mode 100644 docs_edit/features/info_sec.md create mode 100644 docs_edit/features/promptimizer.md create mode 100644 docs_edit/features/shorthand.md create mode 100644 docs_edit/index.md create mode 100644 docs_edit/mkdocs.yml create mode 100644 docs_edit/overrides/main.html create mode 100644 docs_edit/purpose/limits_of_individual_agents.md create mode 100644 docs_edit/purpose/why.md create mode 100644 docs_edit/purpose/why_swarms.md create mode 100644 docs_edit/requirements.txt create mode 100644 docs_edit/swarms/agents/abstractagent.md create mode 100644 docs_edit/swarms/agents/idea_to_image.md create mode 100644 docs_edit/swarms/agents/message.md create mode 100644 docs_edit/swarms/agents/omni_agent.md create mode 100644 docs_edit/swarms/agents/omnimodalagent.md create mode 100644 docs_edit/swarms/agents/toolagent.md create mode 100644 docs_edit/swarms/agents/workeragent.md create mode 100644 docs_edit/swarms/framework_structure.md create mode 100644 docs_edit/swarms/glossary.md create mode 100644 docs_edit/swarms/index.md create mode 100644 docs_edit/swarms/index_overview.md create mode 100644 docs_edit/swarms/install/docker_setup.md create mode 100644 docs_edit/swarms/install/install.md create mode 100644 docs_edit/swarms/install/multi_agent_template.md create mode 100644 docs_edit/swarms/memory/azure_openai.md create mode 100644 docs_edit/swarms/memory/diy_memory.md create mode 100644 docs_edit/swarms/memory/pg.md create mode 100644 docs_edit/swarms/memory/pinecone.md create mode 100644 docs_edit/swarms/memory/qdrant.md create mode 100644 docs_edit/swarms/memory/short_term_memory.md create mode 100644 docs_edit/swarms/memory/weaviate.md create mode 100644 docs_edit/swarms/models/anthropic.md create mode 100644 docs_edit/swarms/models/base_llm.md create mode 100644 docs_edit/swarms/models/base_multimodal_model.md create mode 100644 docs_edit/swarms/models/custom_model.md create mode 100644 docs_edit/swarms/models/dalle3.md create mode 100644 docs_edit/swarms/models/distilled_whisperx.md create mode 100644 docs_edit/swarms/models/fuyu.md create mode 100644 docs_edit/swarms/models/gemini.md create mode 100644 docs_edit/swarms/models/gpt4o.md create mode 100644 docs_edit/swarms/models/gpt4v.md create mode 100644 docs_edit/swarms/models/hf.md create mode 100644 docs_edit/swarms/models/huggingface.md create mode 100644 docs_edit/swarms/models/idefics.md create mode 100644 docs_edit/swarms/models/index.md create mode 100644 docs_edit/swarms/models/kosmos.md create mode 100644 docs_edit/swarms/models/layoutlm_document_qa.md create mode 100644 docs_edit/swarms/models/llama3.md create mode 100644 docs_edit/swarms/models/nougat.md create mode 100644 docs_edit/swarms/models/openai.md create mode 100644 docs_edit/swarms/models/openai_chat.md create mode 100644 docs_edit/swarms/models/openai_tts.md create mode 100644 docs_edit/swarms/models/vilt.md create mode 100644 docs_edit/swarms/papers.md create mode 100644 docs_edit/swarms/structs/abstractswarm.md create mode 100644 docs_edit/swarms/structs/agent.md create mode 100644 docs_edit/swarms/structs/agent_rearrange.md create mode 100644 docs_edit/swarms/structs/artifact.md create mode 100644 docs_edit/swarms/structs/artifactupload.md create mode 100644 docs_edit/swarms/structs/autoscaler.md create mode 100644 docs_edit/swarms/structs/basestructure.md create mode 100644 docs_edit/swarms/structs/baseworkflow.md create mode 100644 docs_edit/swarms/structs/concurrentworkflow.md create mode 100644 docs_edit/swarms/structs/conversation.md create mode 100644 docs_edit/swarms/structs/diy_your_own_agent.md create mode 100644 docs_edit/swarms/structs/groupchat.md create mode 100644 docs_edit/swarms/structs/groupchatmanager.md create mode 100644 docs_edit/swarms/structs/index.md create mode 100644 docs_edit/swarms/structs/majorityvoting.md create mode 100644 docs_edit/swarms/structs/moa.md create mode 100644 docs_edit/swarms/structs/multi_agent_orchestration.md create mode 100644 docs_edit/swarms/structs/nonlinearworkflow.md create mode 100644 docs_edit/swarms/structs/recursiveworkflow.md create mode 100644 docs_edit/swarms/structs/round_robin_swarm.md create mode 100644 docs_edit/swarms/structs/sequential_workflow.md create mode 100644 docs_edit/swarms/structs/stackoverflowswarm.md create mode 100644 docs_edit/swarms/structs/stepinput.md create mode 100644 docs_edit/swarms/structs/swarmnetwork.md create mode 100644 docs_edit/swarms/structs/task.md create mode 100644 docs_edit/swarms/structs/taskinput.md create mode 100644 docs_edit/swarms/structs/taskqueuebase.md create mode 100644 docs_edit/swarms/structs/workflow.md create mode 100644 docs_edit/swarms/structs/yaml_model.md create mode 100644 docs_edit/swarms/tools/base_tool.md create mode 100644 docs_edit/swarms/tools/decorator.md create mode 100644 docs_edit/swarms/tools/main.md create mode 100644 docs_edit/swarms_cloud/architecture.md create mode 100644 docs_edit/swarms_cloud/available_models.md create mode 100644 docs_edit/swarms_cloud/getting_started.md create mode 100644 docs_edit/swarms_cloud/main.md create mode 100644 docs_edit/swarms_cloud/migrate_openai.md create mode 100644 docs_edit/swarms_cloud/production_deployment.md diff --git a/docs_edit/.readthedocs.yaml b/docs_edit/.readthedocs.yaml new file mode 100644 index 00000000..652488b9 --- /dev/null +++ b/docs_edit/.readthedocs.yaml @@ -0,0 +1,11 @@ +--- +version: 2 +build: + os: ubuntu-22.04 + tools: + python: "3.11" +mkdocs: + configuration: docs/mkdocs.yml +python: + install: + - requirements: docs/requirements.txt \ No newline at end of file diff --git a/docs_edit/applications/business-analyst-agent.md b/docs_edit/applications/business-analyst-agent.md new file mode 100644 index 00000000..a7c2f504 --- /dev/null +++ b/docs_edit/applications/business-analyst-agent.md @@ -0,0 +1,978 @@ +## Building Analyst Agents with Swarms to write Business Reports + +> Jupyter Notebook accompanying this post is accessible at: [Business Analyst Agent Notebook](https://github.com/kyegomez/swarms/blob/master/playground/business-analyst-agent.ipynb) + +Solving a business problem often involves preparing a Business Case Report. This report comprehensively analyzes the problem, evaluates potential solutions, and provides evidence-based recommendations and an implementation plan to effectively address the issue and drive business value. While the process of preparing one requires an experienced business analyst, the workflow can be augmented using AI agents. Two candidates stick out as areas to work on: + +- Developing an outline to solve the problem +- Doing background research and gathering data + +In this post, we will explore how Swarms agents can be used to tackle a busuiness problem by outlining the solution, conducting background research and generating a preliminary report. + +Before we proceed, this blog uses 3 API tools. Please obtain the following keys and store them in a `.env` file in the same folder as this file. + +- **[OpenAI API](https://openai.com/blog/openai-api)** as `OPENAI_API_KEY` +- **[TavilyAI API](https://app.tavily.com/home)** `TAVILY_API_KEY` +- **[KayAI API](https://www.kay.ai/)** as `KAY_API_KEY` + +```python +import dotenv +dotenv.load_dotenv() # Load environment variables from .env file +``` + +### Developing an Outline to solve the problem + +Assume the business problem is: **How do we improve Nike's revenue in Q3 2024?** We first create a planning agent to break down the problem into dependent sub-problems. + + +#### Step 1. Defining the Data Model and Tool Schema + +Using Pydantic, we define a structure to help the agent generate sub-problems. + +- **QueryType:** Questions are either standalone or involve a combination of multiple others +- **Query:** Defines structure of a question. +- **QueryPlan:** Allows generation of a dependency graph of sub-questions + + +```python +import enum +from typing import List +from pydantic import Field, BaseModel + +class QueryType(str, enum.Enum): + """Enumeration representing the types of queries that can be asked to a question answer system.""" + + SINGLE_QUESTION = "SINGLE" + MERGE_MULTIPLE_RESPONSES = "MERGE_MULTIPLE_RESPONSES" + +class Query(BaseModel): + """Class representing a single question in a query plan.""" + + id: int = Field(..., description="Unique id of the query") + question: str = Field( + ..., + description="Question asked using a question answering system", + ) + dependencies: List[int] = Field( + default_factory=list, + description="List of sub questions that need to be answered before asking this question", + ) + node_type: QueryType = Field( + default=QueryType.SINGLE_QUESTION, + description="Type of question, either a single question or a multi-question merge", + ) + +class QueryPlan(BaseModel): + """Container class representing a tree of questions to ask a question answering system.""" + + query_graph: List[Query] = Field( + ..., description="The query graph representing the plan" + ) + + def _dependencies(self, ids: List[int]) -> List[Query]: + """Returns the dependencies of a query given their ids.""" + + return [q for q in self.query_graph if q.id in ids] +``` + +Also, a `tool_schema` needs to be defined. It is an instance of `QueryPlan` and is used to initialize the agent. + +```python +tool_schema = QueryPlan( + query_graph = [query.dict() for query in [ + Query( + id=1, + question="How do we improve Nike's revenue in Q3 2024?", + dependencies=[2], + node_type=QueryType('SINGLE') + ), + # ... other queries ... + ]] +) +``` + +#### Step 2. Defining the Planning Agent + +We specify the query, task specification and an appropriate system prompt. + +```python +from swarms import OpenAIChat +from swarms import Agent + +query = "How do we improve Nike's revenue in Q3 2024?" +task = f"Consider: {query}. Generate just the correct query plan in JSON format." +system_prompt = ( + "You are a world class query planning algorithm " + "capable of breaking apart questions into its " + "dependency queries such that the answers can be " + "used to inform the parent question. Do not answer " + "the questions, simply provide a correct compute " + "graph with good specific questions to ask and relevant " + "dependencies. Before you call the function, think " + "step-by-step to get a better understanding of the problem." + ) +llm = OpenAIChat( + temperature=0.0, model_name="gpt-4", max_tokens=4000 +) +``` + +Then, we proceed with agent definition. + +```python +# Initialize the agent +agent = Agent( + agent_name="Query Planner", + system_prompt=system_prompt, + # Set the tool schema to the JSON string -- this is the key difference + tool_schema=tool_schema, + llm=llm, + max_loops=1, + autosave=True, + dashboard=False, + streaming_on=True, + verbose=True, + interactive=False, + # Set the output type to the tool schema which is a BaseModel + output_type=tool_schema, # or dict, or str + metadata_output_type="json", + # List of schemas that the agent can handle + list_tool_schemas=[tool_schema], + function_calling_format_type="OpenAI", + function_calling_type="json", # or soon yaml +) +``` + +#### Step 3. Obtaining Outline from Planning Agent + +We now run the agent, and since its output is in JSON format, we can load it as a dictionary. + +```python +generated_data = agent.run(task) +``` + +At times the agent could return extra content other than JSON. Below function will filter it out. + +```python +def process_json_output(content): + # Find the index of the first occurrence of '```json\n' + start_index = content.find('```json\n') + if start_index == -1: + # If '```json\n' is not found, return the original content + return content + # Return the part of the content after '```json\n' and remove the '```' at the end + return content[start_index + len('```json\n'):].rstrip('`') + +# Use the function to clean up the output +json_content = process_json_output(generated_data.content) + +import json + +# Load the JSON string into a Python object +json_object = json.loads(json_content) + +# Convert the Python object back to a JSON string +json_content = json.dumps(json_object, indent=2) + +# Print the JSON string +print(json_content) +``` + +Below is the output this produces + +```json +{ + "main_query": "How do we improve Nike's revenue in Q3 2024?", + "sub_queries": [ + { + "id": "1", + "query": "What is Nike's current revenue trend?" + }, + { + "id": "2", + "query": "What are the projected market trends for the sports apparel industry in 2024?" + }, + { + "id": "3", + "query": "What are the current successful strategies being used by Nike's competitors?", + "dependencies": [ + "2" + ] + }, + { + "id": "4", + "query": "What are the current and projected economic conditions in Nike's major markets?", + "dependencies": [ + "2" + ] + }, + { + "id": "5", + "query": "What are the current consumer preferences in the sports apparel industry?", + "dependencies": [ + "2" + ] + }, + { + "id": "6", + "query": "What are the potential areas of improvement in Nike's current business model?", + "dependencies": [ + "1" + ] + }, + { + "id": "7", + "query": "What are the potential new markets for Nike to explore in 2024?", + "dependencies": [ + "2", + "4" + ] + }, + { + "id": "8", + "query": "What are the potential new products or services Nike could introduce in 2024?", + "dependencies": [ + "5" + ] + }, + { + "id": "9", + "query": "What are the potential marketing strategies Nike could use to increase its revenue in Q3 2024?", + "dependencies": [ + "3", + "5", + "7", + "8" + ] + }, + { + "id": "10", + "query": "What are the potential cost-saving strategies Nike could implement to increase its net revenue in Q3 2024?", + "dependencies": [ + "6" + ] + } + ] +} +``` + +The JSON dictionary is not convenient for humans to process. We make a directed graph out of it. + +```python +import networkx as nx +import matplotlib.pyplot as plt +import textwrap +import random + +# Create a directed graph +G = nx.DiGraph() + +# Define a color map +color_map = {} + +# Add nodes and edges to the graph +for sub_query in json_object['sub_queries']: + # Check if 'dependencies' key exists in sub_query, if not, initialize it as an empty list + if 'dependencies' not in sub_query: + sub_query['dependencies'] = [] + # Assign a random color for each node + color_map[sub_query['id']] = "#{:06x}".format(random.randint(0, 0xFFFFFF)) + G.add_node(sub_query['id'], label=textwrap.fill(sub_query['query'], width=20)) + for dependency in sub_query['dependencies']: + G.add_edge(dependency, sub_query['id']) + +# Draw the graph +pos = nx.spring_layout(G) +nx.draw(G, pos, with_labels=True, node_size=800, node_color=[color_map[node] for node in G.nodes()], node_shape="o", alpha=0.5, linewidths=40) + +# Prepare labels for legend +labels = nx.get_node_attributes(G, 'label') +handles = [plt.Line2D([0], [0], marker='o', color=color_map[node], label=f"{node}: {label}", markersize=10, linestyle='None') for node, label in labels.items()] + +# Create a legend +plt.legend(handles=handles, title="Queries", bbox_to_anchor=(1.05, 1), loc='upper left') + +plt.show() +``` + +This produces the below diagram which makes the plan much more convenient to understand. + +![Query Plan Diagram](../assets/img/docs/query-plan.png) + +### Doing Background Research and Gathering Data + +At this point, we have solved the first half of the problem. We have an outline consisting of sub-problems to to tackled to solve our business problem. This will form the overall structure of our report. We now need to research information for each sub-problem in order to write an informed report. This mechanically intensive and is the aspect that will most benefit from Agentic intervention. + +Essentially, we can spawn parallel agents to gather the data. Each agent will have 2 tools: + +- Internet access +- Financial data retrieval + +As they run parallely, they will add their knowledge into a common long-term memory. We will then spawn a separate report writing agent with access to this memory to generate our business case report. + +#### Step 4. Defining Tools for Worker Agents + +Let us first define the 2 tools. + +```python +import os +from typing import List, Dict + +from swarms import tool + +os.environ['TAVILY_API_KEY'] = os.getenv('TAVILY_API_KEY') +os.environ["KAY_API_KEY"] = os.getenv('KAY_API_KEY') + +from langchain_community.tools.tavily_search import TavilySearchResults +from langchain_core.pydantic_v1 import BaseModel, Field + +from kay.rag.retrievers import KayRetriever + +@tool +def browser(query: str) -> str: + """ + Search the query in the browser with the Tavily API tool. + Args: + query (str): The query to search in the browser. + Returns: + str: The search results + """ + internet_search = TavilySearchResults() + results = internet_search.invoke({"query": query}) + response = '' + for result in results: + response += (result['content'] + '\n') + return response + +@tool +def kay_retriever(query: str) -> str: + """ + Search the financial data query with the KayAI API tool. + Args: + query (str): The query to search in the KayRetriever. + Returns: + str: The first context retrieved as a string. + """ + # Initialize the retriever + retriever = KayRetriever(dataset_id = "company", data_types=["10-K", "10-Q", "8-K", "PressRelease"]) + # Query the retriever + context = retriever.query(query=query,num_context=1) + return context[0]['chunk_embed_text'] +``` + +#### Step 5. Defining Long-Term Memory + +As mentioned previously, the worker agents running parallely, will pool their knowledge into a common memory. Let us define that. + +```python +import logging +import os +import uuid +from typing import Callable, List, Optional + +import chromadb +import numpy as np +from dotenv import load_dotenv + +from swarms.utils.data_to_text import data_to_text +from swarms.utils.markdown_message import display_markdown_message +from swarms.memory.base_vectordb import AbstractVectorDatabase + + +# Results storage using local ChromaDB +class ChromaDB(AbstractVectorDatabase): + """ + + ChromaDB database + + Args: + metric (str): The similarity metric to use. + output (str): The name of the collection to store the results in. + limit_tokens (int, optional): The maximum number of tokens to use for the query. Defaults to 1000. + n_results (int, optional): The number of results to retrieve. Defaults to 2. + + Methods: + add: _description_ + query: _description_ + + Examples: + >>> chromadb = ChromaDB( + >>> metric="cosine", + >>> output="results", + >>> llm="gpt3", + >>> openai_api_key=OPENAI_API_KEY, + >>> ) + >>> chromadb.add(task, result, result_id) + """ + + def __init__( + self, + metric: str = "cosine", + output_dir: str = "swarms", + limit_tokens: Optional[int] = 1000, + n_results: int = 3, + embedding_function: Callable = None, + docs_folder: str = None, + verbose: bool = False, + *args, + **kwargs, + ): + self.metric = metric + self.output_dir = output_dir + self.limit_tokens = limit_tokens + self.n_results = n_results + self.docs_folder = docs_folder + self.verbose = verbose + + # Disable ChromaDB logging + if verbose: + logging.getLogger("chromadb").setLevel(logging.INFO) + + # Create Chroma collection + chroma_persist_dir = "chroma" + chroma_client = chromadb.PersistentClient( + settings=chromadb.config.Settings( + persist_directory=chroma_persist_dir, + ), + *args, + **kwargs, + ) + + # Embedding model + if embedding_function: + self.embedding_function = embedding_function + else: + self.embedding_function = None + + # Create ChromaDB client + self.client = chromadb.Client() + + # Create Chroma collection + self.collection = chroma_client.get_or_create_collection( + name=output_dir, + metadata={"hnsw:space": metric}, + embedding_function=self.embedding_function, + # data_loader=self.data_loader, + *args, + **kwargs, + ) + display_markdown_message( + "ChromaDB collection created:" + f" {self.collection.name} with metric: {self.metric} and" + f" output directory: {self.output_dir}" + ) + + # If docs + if docs_folder: + display_markdown_message( + f"Traversing directory: {docs_folder}" + ) + self.traverse_directory() + + def add( + self, + document: str, + *args, + **kwargs, + ): + """ + Add a document to the ChromaDB collection. + + Args: + document (str): The document to be added. + condition (bool, optional): The condition to check before adding the document. Defaults to True. + + Returns: + str: The ID of the added document. + """ + try: + doc_id = str(uuid.uuid4()) + self.collection.add( + ids=[doc_id], + documents=[document], + *args, + **kwargs, + ) + print('-----------------') + print("Document added successfully") + print('-----------------') + return doc_id + except Exception as e: + raise Exception(f"Failed to add document: {str(e)}") + + def query( + self, + query_text: str, + *args, + **kwargs, + ): + """ + Query documents from the ChromaDB collection. + + Args: + query (str): The query string. + n_docs (int, optional): The number of documents to retrieve. Defaults to 1. + + Returns: + dict: The retrieved documents. + """ + try: + docs = self.collection.query( + query_texts=[query_text], + n_results=self.n_results, + *args, + **kwargs, + )["documents"] + return docs[0] + except Exception as e: + raise Exception(f"Failed to query documents: {str(e)}") + + def traverse_directory(self): + """ + Traverse through every file in the given directory and its subdirectories, + and return the paths of all files. + Parameters: + - directory_name (str): The name of the directory to traverse. + Returns: + - list: A list of paths to each file in the directory and its subdirectories. + """ + added_to_db = False + + for root, dirs, files in os.walk(self.docs_folder): + for file in files: + file = os.path.join(self.docs_folder, file) + _, ext = os.path.splitext(file) + data = data_to_text(file) + added_to_db = self.add([data]) + print(f"{file} added to Database") + + return added_to_db +``` + +We can now proceed to initialize the memory. + +```python +from chromadb.utils import embedding_functions +default_ef = embedding_functions.DefaultEmbeddingFunction() + +memory = ChromaDB( + metric="cosine", + n_results=3, + output_dir="results", + embedding_function=default_ef +) +``` + +#### Step 6. Defining Worker Agents + +The Worker Agent sub-classes the `Agent` class. The only different between these 2 is in how the `run()` method works. In the `Agent` class, `run()` simply returns the set of tool commands to run, but does not execute it. We, however, desire this. In addition, after we run our tools, we get the relevant information as output. We want to add this information to our memory. Hence, to incorporate these 2 changes, we define `WorkerAgent` as follows. + +```python +class WorkerAgent(Agent): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def run(self, task, *args, **kwargs): + response = super().run(task, *args, **kwargs) + print(response.content) + + json_dict = json.loads(process_json_output(response.content)) + + #print(json.dumps(json_dict, indent=2)) + + if response!=None: + try: + commands = json_dict["commands"] + except: + commands = [json_dict['command']] + + for command in commands: + tool_name = command["name"] + + if tool_name not in ['browser', 'kay_retriever']: + continue + + query = command["args"]["query"] + + # Get the tool by its name + tool = globals()[tool_name] + tool_response = tool(query) + + # Add tool's output to long term memory + self.long_term_memory.add(tool_response) +``` + +We can then instantiate an object of the `WorkerAgent` class. + +```python +worker_agent = WorkerAgent( + agent_name="Worker Agent", + system_prompt=( + "Autonomous agent that can interact with browser, " + "financial data retriever and other agents. Be Helpful " + "and Kind. Use the tools provided to assist the user. " + "Generate the plan with list of commands in JSON format." + ), + llm=OpenAIChat( + temperature=0.0, model_name="gpt-4", max_tokens=4000 +), + max_loops="auto", + autosave=True, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + interactive=True, + tools=[browser, kay_retriever], + long_term_memory=memory, + code_interpreter=True, +) +``` + +#### Step 7. Running the Worker Agents + +At this point, we need to setup a concurrent workflow. While the order of adding tasks to the workflow doesn't matter (since they will all run concurrently late when executed), we can take some time to define an order for these tasks. This order will come in handy later when writing the report using our Writer Agent. + +The order we will follow is Breadth First Traversal (BFT) of the sub-queries in the graph we had made earlier (shown below again for reference). BFT makes sense to be used here because we want all the dependent parent questions to be answered before answering the child question. Also, since we could have independent subgraphs, we will also perform BFT separately on each subgraph. + +![Query Plan Mini](../assets/img/docs/query-plan-mini.png) + +Below is the code that produces the order of processing sub-queries. + +```python +from collections import deque, defaultdict + +# Define the graph nodes +nodes = json_object['sub_queries'] + +# Create a graph from the nodes +graph = defaultdict(list) +for node in nodes: + for dependency in node['dependencies']: + graph[dependency].append(node['id']) + +# Find all nodes with no dependencies (potential starting points) +start_nodes = [node['id'] for node in nodes if not node['dependencies']] + +# Adjust the BFT function to handle dependencies correctly +def bft_corrected(start, graph, nodes_info): + visited = set() + queue = deque([start]) + order = [] + + while queue: + node = queue.popleft() + if node not in visited: + # Check if all dependencies of the current node are visited + node_dependencies = [n['id'] for n in nodes if n['id'] == node][0] + dependencies_met = all(dep in visited for dep in nodes_info[node_dependencies]['dependencies']) + + if dependencies_met: + visited.add(node) + order.append(node) + # Add only nodes to the queue whose dependencies are fully met + for next_node in graph[node]: + if all(dep in visited for dep in nodes_info[next_node]['dependencies']): + queue.append(next_node) + else: + # Requeue the node to check dependencies later + queue.append(node) + + return order + +# Dictionary to access node information quickly +nodes_info = {node['id']: node for node in nodes} + +# Perform BFT for each unvisited start node using the corrected BFS function +visited_global = set() +bfs_order = [] + +for start in start_nodes: + if start not in visited_global: + order = bft_corrected(start, graph, nodes_info) + bfs_order.extend(order) + visited_global.update(order) + +print("BFT Order:", bfs_order) +``` + +This produces the following output. + +```python +BFT Order: ['1', '6', '10', '2', '3', '4', '5', '7', '8', '9'] +``` + +Now, let's define our `ConcurrentWorkflow` and run it. + +```python +import os +from dotenv import load_dotenv +from swarms import Agent, ConcurrentWorkflow, OpenAIChat, Task + +# Create a workflow +workflow = ConcurrentWorkflow(max_workers=5) +task_list = [] + +for node in bfs_order: + sub_query =nodes_info[node]['query'] + task = Task(worker_agent, sub_query) + print('-----------------') + print("Added task: ", sub_query) + print('-----------------') + task_list.append(task) + +workflow.add(tasks=task_list) + +# Run the workflow +workflow.run() +``` + +Below is part of the output this workflow produces. We clearly see the thought process of the agent and the plan it came up to solve a particular sub-query. In addition, we see the tool-calling schema it produces in `"command"`. + +```python +... +... +content='\n{\n "thoughts": {\n "text": "To find out Nike\'s current revenue trend, I will use the financial data retriever tool to search for \'Nike revenue trend\'.",\n "reasoning": "The financial data retriever tool allows me to search for specific financial data, so I can look up the current revenue trend of Nike.", \n "plan": "Use the financial data retriever tool to search for \'Nike revenue trend\'. Parse the result to get the current revenue trend and format that into a readable report."\n },\n "command": {\n "name": "kay_retriever", \n "args": {\n "query": "Nike revenue trend"\n }\n }\n}\n```' response_metadata={'token_usage': {'completion_tokens': 152, 'prompt_tokens': 1527, 'total_tokens': 1679}, 'model_name': 'gpt-4', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None} +Saved agent state to: Worker Agent_state.json + +{ + "thoughts": { + "text": "To find out Nike's current revenue trend, I will use the financial data retriever tool to search for 'Nike revenue trend'.", + "reasoning": "The financial data retriever tool allows me to search for specific financial data, so I can look up the current revenue trend of Nike.", + "plan": "Use the financial data retriever tool to search for 'Nike revenue trend'. Parse the result to get the current revenue trend and format that into a readable report." + }, + "command": { + "name": "kay_retriever", + "args": { + "query": "Nike revenue trend" + } + } +} + +----------------- +Document added successfully +----------------- +... +... +``` + +Here, `"name"` pertains to the name of the tool to be called and `"args"` is the arguments to be passed to the tool call. Like mentioned before, we modify `Agent`'s default behaviour in `WorkerAgent`. Hence, the tool call is executed here and its results (information from web pages and Kay Retriever API) are added to long-term memory. We get confirmation for this from the message `Document added successfully`. + + +#### Step 7. Generating the report using Writer Agent + +At this point, our Worker Agents have gathered all the background information required to generate the report. We have also defined a coherent structure to write the report, which is following the BFT order to answering the sub-queries. Now it's time to define a Writer Agent and call it sequentially in the order of sub-queries. + +```python +from swarms import Agent, OpenAIChat, tool + +agent = Agent( + agent_name="Writer Agent", + agent_description=( + "This agent writes reports based on information in long-term memory" + ), + system_prompt=( + "You are a world-class financial report writer. " + "Write analytical and accurate responses using memory to answer the query. " + "Do not mention use of long-term memory in the report. " + "Do not mention Writer Agent in response." + "Return only response content in strict markdown format." + ), + llm=OpenAIChat(temperature=0.2, model='gpt-3.5-turbo'), + max_loops=1, + autosave=True, + verbose=True, + long_term_memory=memory, +) +``` + +The report individual sections of the report will be collected in a list. + +```python +report = [] +``` + +Let us now run the writer agent. + +```python +for node in bfs_order: + sub_query =nodes_info[node]['query'] + print("Running task: ", sub_query) + out = agent.run(f"Consider: {sub_query}. Write response in strict markdown format using long-term memory. Do not mention Writer Agent in response.") + print(out) + try: + report.append(out.content) + except: + pass +``` + +Now, we need to clean up the repoort a bit to make it render professionally. + +```python +# Remove any content before the first "#" as that signals start of heading +# Anything before this usually contains filler content +stripped_report = [entry[entry.find('#'):] if '#' in entry else entry for entry in report] +report = stripped_report + +# At times the LLM outputs \\n instead of \n +cleaned_report = [entry.replace("\\n", "\n") for entry in report] +import re + +# Function to clean up unnecessary metadata from the report entries +def clean_report(report): + cleaned_report = [] + for entry in report: + # This pattern matches 'response_metadata={' followed by any characters that are not '}' (non-greedy), + # possibly nested inside other braces, until the closing '}'. + cleaned_entry = re.sub(r"response_metadata=\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}", "", entry, flags=re.DOTALL) + cleaned_report.append(cleaned_entry) + return cleaned_report + +# Apply the cleaning function to the markdown report +cleaned_report = clean_report(cleaned_report) +``` + +After cleaning, we append parts of the report together to get out final report. + +```python +final_report = ' \n '.join(cleaned_report) +``` + +In Jupyter Notebook, we can use the below code to render it in Markdown. + +```python +from IPython.display import display, Markdown + +display(Markdown(final_report)) +``` + + +## Final Generated Report + + +### Nike's Current Revenue Trend + +Nike's current revenue trend has been steadily increasing over the past few years. In the most recent fiscal year, Nike reported a revenue of $37.4 billion, which was a 7% increase from the previous year. This growth can be attributed to strong sales in key markets, successful marketing campaigns, and a focus on innovation in product development. Overall, Nike continues to demonstrate strong financial performance and is well-positioned for future growth. + ### Potential Areas of Improvement in Nike's Business Model + +1. **Sustainability Practices**: Nike could further enhance its sustainability efforts by reducing its carbon footprint, using more eco-friendly materials, and ensuring ethical labor practices throughout its supply chain. + +2. **Diversification of Product Portfolio**: While Nike is known for its athletic footwear and apparel, diversifying into new product categories or expanding into untapped markets could help drive growth and mitigate risks associated with a single product line. + +3. **E-commerce Strategy**: Improving the online shopping experience, investing in digital marketing, and leveraging data analytics to personalize customer interactions could boost online sales and customer loyalty. + +4. **Innovation and R&D**: Continuously investing in research and development to stay ahead of competitors, introduce new technologies, and enhance product performance could help maintain Nike's competitive edge in the market. + +5. **Brand Image and Reputation**: Strengthening brand image through effective marketing campaigns, community engagement, and transparent communication with stakeholders can help build trust and loyalty among consumers. + ### Potential Cost-Saving Strategies for Nike to Increase Net Revenue in Q3 2024 + +1. **Supply Chain Optimization**: Streamlining the supply chain, reducing transportation costs, and improving inventory management can lead to significant cost savings for Nike. + +2. **Operational Efficiency**: Implementing lean manufacturing practices, reducing waste, and optimizing production processes can help lower production costs and improve overall efficiency. + +3. **Outsourcing Non-Core Functions**: Outsourcing non-core functions such as IT services, customer support, or logistics can help reduce overhead costs and focus resources on core business activities. + +4. **Energy Efficiency**: Investing in energy-efficient technologies, renewable energy sources, and sustainable practices can lower utility costs and demonstrate a commitment to environmental responsibility. + +5. **Negotiating Supplier Contracts**: Negotiating better terms with suppliers, leveraging economies of scale, and exploring alternative sourcing options can help lower procurement costs and improve margins. + +By implementing these cost-saving strategies, Nike can improve its bottom line and increase net revenue in Q3 2024. + ### Projected Market Trends for the Sports Apparel Industry in 2024 + +1. **Sustainable Fashion**: Consumers are increasingly demanding eco-friendly and sustainable products, leading to a rise in sustainable sportswear options in the market. + +2. **Digital Transformation**: The sports apparel industry is expected to continue its shift towards digital platforms, with a focus on e-commerce, personalized shopping experiences, and digital marketing strategies. + +3. **Athleisure Wear**: The trend of athleisure wear, which combines athletic and leisure clothing, is projected to remain popular in 2024 as consumers seek comfort and versatility in their apparel choices. + +4. **Innovative Materials**: Advances in technology and material science are likely to drive the development of innovative fabrics and performance-enhancing materials in sports apparel, catering to the demand for high-quality and functional products. + +5. **Health and Wellness Focus**: With a growing emphasis on health and wellness, sports apparel brands are expected to incorporate features that promote comfort, performance, and overall well-being in their products. + +Overall, the sports apparel industry in 2024 is anticipated to be characterized by sustainability, digitalization, innovation, and a focus on consumer health and lifestyle trends. + ### Current Successful Strategies Used by Nike's Competitors + +1. **Adidas**: Adidas has been successful in leveraging collaborations with celebrities and designers to create limited-edition collections that generate hype and drive sales. They have also focused on sustainability initiatives, such as using recycled materials in their products, to appeal to environmentally conscious consumers. + +2. **Under Armour**: Under Armour has differentiated itself by targeting performance-driven athletes and emphasizing technological innovation in their products. They have also invested heavily in digital marketing and e-commerce to reach a wider audience and enhance the customer shopping experience. + +3. **Puma**: Puma has successfully capitalized on the athleisure trend by offering stylish and versatile sportswear that can be worn both in and out of the gym. They have also focused on building partnerships with influencers and sponsoring high-profile athletes to increase brand visibility and credibility. + +4. **Lululemon**: Lululemon has excelled in creating a strong community around its brand, hosting events, classes, and collaborations to engage with customers beyond just selling products. They have also prioritized customer experience by offering personalized services and creating a seamless omnichannel shopping experience. + +5. **New Balance**: New Balance has carved out a niche in the market by emphasizing quality craftsmanship, heritage, and authenticity in their products. They have also focused on customization and personalization options for customers, allowing them to create unique and tailored footwear and apparel. + +Overall, Nike's competitors have found success through a combination of innovative product offerings, strategic marketing initiatives, and a focus on customer engagement and experience. + ### Current and Projected Economic Conditions in Nike's Major Markets + +1. **United States**: The United States, being one of Nike's largest markets, is currently experiencing moderate economic growth driven by consumer spending, low unemployment rates, and a rebound in manufacturing. However, uncertainties surrounding trade policies, inflation, and interest rates could impact consumer confidence and spending in the near future. + +2. **China**: China remains a key market for Nike, with a growing middle class and increasing demand for sportswear and athletic footwear. Despite recent trade tensions with the U.S., China's economy is projected to continue expanding, driven by domestic consumption, infrastructure investments, and technological advancements. + +3. **Europe**: Economic conditions in Europe vary across countries, with some experiencing sluggish growth due to Brexit uncertainties, political instability, and trade tensions. However, overall consumer confidence is improving, and the sports apparel market is expected to grow, driven by e-commerce and sustainability trends. + +4. **Emerging Markets**: Nike's presence in emerging markets such as India, Brazil, and Southeast Asia provides opportunities for growth, given the rising disposable incomes, urbanization, and increasing focus on health and fitness. However, challenges such as currency fluctuations, regulatory changes, and competition from local brands could impact Nike's performance in these markets. + +Overall, Nike's major markets exhibit a mix of opportunities and challenges, with economic conditions influenced by global trends, geopolitical factors, and consumer preferences." + ### Current Consumer Preferences in the Sports Apparel Industry + +1. **Sustainability**: Consumers are increasingly seeking eco-friendly and sustainable options in sports apparel, driving brands to focus on using recycled materials, reducing waste, and promoting ethical practices. + +2. **Athleisure**: The trend of athleisure wear continues to be popular, with consumers looking for versatile and comfortable clothing that can be worn both during workouts and in everyday life. + +3. **Performance and Functionality**: Consumers prioritize performance-enhancing features in sports apparel, such as moisture-wicking fabrics, breathable materials, and ergonomic designs that enhance comfort and mobility. + +4. **Personalization**: Customization options, personalized fit, and unique design elements are appealing to consumers who seek individuality and exclusivity in their sports apparel choices. + +5. **Brand Transparency**: Consumers value transparency in brand practices, including supply chain transparency, ethical sourcing, and clear communication on product quality and manufacturing processes. + +Overall, consumer preferences in the sports apparel industry are shifting towards sustainability, versatility, performance, personalization, and transparency, influencing brand strategies and product offerings. + ### Potential New Markets for Nike to Explore in 2024 + +1. **India**: With a growing population, increasing disposable incomes, and a rising interest in health and fitness, India presents a significant opportunity for Nike to expand its presence and tap into a large consumer base. + +2. **Africa**: The African market, particularly countries with emerging economies and a young population, offers potential for Nike to introduce its products and capitalize on the growing demand for sportswear and athletic footwear. + +3. **Middle East**: Countries in the Middle East, known for their luxury shopping destinations and a growing interest in sports and fitness activities, could be strategic markets for Nike to target and establish a strong foothold. + +4. **Latin America**: Markets in Latin America, such as Brazil, Mexico, and Argentina, present opportunities for Nike to cater to a diverse consumer base and leverage the region's passion for sports and active lifestyles. + +5. **Southeast Asia**: Rapid urbanization, increasing urban middle-class population, and a trend towards health and wellness in countries like Indonesia, Thailand, and Vietnam make Southeast Asia an attractive region for Nike to explore and expand its market reach. + +By exploring these new markets in 2024, Nike can diversify its geographical presence, reach untapped consumer segments, and drive growth in emerging economies. + ### Potential New Products or Services Nike Could Introduce in 2024 + +1. **Smart Apparel**: Nike could explore the integration of technology into its apparel, such as smart fabrics that monitor performance metrics, provide feedback, or enhance comfort during workouts. + +2. **Athletic Accessories**: Introducing a line of athletic accessories like gym bags, water bottles, or fitness trackers could complement Nike's existing product offerings and provide additional value to customers. + +3. **Customization Platforms**: Offering personalized design options for footwear and apparel through online customization platforms could appeal to consumers seeking unique and tailored products. + +4. **Athletic Recovery Gear**: Developing recovery-focused products like compression wear, recovery sandals, or massage tools could cater to athletes and fitness enthusiasts looking to enhance post-workout recovery. + +5. **Sustainable Collections**: Launching sustainable collections made from eco-friendly materials, recycled fabrics, or biodegradable components could align with consumer preferences for environmentally conscious products. + +By introducing these new products or services in 2024, Nike can innovate its product portfolio, cater to evolving consumer needs, and differentiate itself in the competitive sports apparel market. + ### Potential Marketing Strategies for Nike to Increase Revenue in Q3 2024 + +1. **Influencer Partnerships**: Collaborating with popular athletes, celebrities, or social media influencers to promote Nike products can help reach a wider audience and drive sales. + +2. **Interactive Campaigns**: Launching interactive marketing campaigns, contests, or events that engage customers and create buzz around new product releases can generate excitement and increase brand visibility. + +3. **Social Media Engagement**: Leveraging social media platforms to connect with consumers, share user-generated content, and respond to feedback can build brand loyalty and encourage repeat purchases. + +4. **Localized Marketing**: Tailoring marketing messages, promotions, and product offerings to specific regions or target demographics can enhance relevance and appeal to diverse consumer groups. + +5. **Customer Loyalty Programs**: Implementing loyalty programs, exclusive offers, or rewards for repeat customers can incentivize brand loyalty, increase retention rates, and drive higher lifetime customer value. + +By employing these marketing strategies in Q3 2024, Nike can enhance its brand presence, attract new customers, and ultimately boost revenue growth. + + + + + + + + + + + diff --git a/docs_edit/applications/compliance_swarm.md b/docs_edit/applications/compliance_swarm.md new file mode 100644 index 00000000..e69de29b diff --git a/docs_edit/applications/customer_support.md b/docs_edit/applications/customer_support.md new file mode 100644 index 00000000..5a540cb3 --- /dev/null +++ b/docs_edit/applications/customer_support.md @@ -0,0 +1,42 @@ +## **Applications of Swarms: Revolutionizing Customer Support** + +--- + +**Introduction**: +In today's fast-paced digital world, responsive and efficient customer support is a linchpin for business success. The introduction of AI-driven swarms in the customer support domain can transform the way businesses interact with and assist their customers. By leveraging the combined power of multiple AI agents working in concert, businesses can achieve unprecedented levels of efficiency, customer satisfaction, and operational cost savings. + +--- + +### **The Benefits of Using Swarms for Customer Support:** + +1. **24/7 Availability**: Swarms never sleep. Customers receive instantaneous support at any hour, ensuring constant satisfaction and loyalty. + +2. **Infinite Scalability**: Whether it's ten inquiries or ten thousand, swarms can handle fluctuating volumes with ease, eliminating the need for vast human teams and minimizing response times. + +3. **Adaptive Intelligence**: Swarms learn collectively, meaning that a solution found for one customer can be instantly applied to benefit all. This leads to constantly improving support experiences, evolving with every interaction. + +--- + +### **Features - Reinventing Customer Support**: + +- **AI Inbox Monitor**: Continuously scans email inboxes, identifying and categorizing support requests for swift responses. + +- **Intelligent Debugging**: Proactively helps customers by diagnosing and troubleshooting underlying issues. + +- **Automated Refunds & Coupons**: Seamless integration with payment systems like Stripe allows for instant issuance of refunds or coupons if a problem remains unresolved. + +- **Full System Integration**: Holistically connects with CRM, email systems, and payment portals, ensuring a cohesive and unified support experience. + +- **Conversational Excellence**: With advanced LLMs (Language Model Transformers), the swarm agents can engage in natural, human-like conversations, enhancing customer comfort and trust. + +- **Rule-based Operation**: By working with rule engines, swarms ensure that all actions adhere to company guidelines, ensuring consistent, error-free support. + +- **Turing Test Ready**: Crafted to meet and exceed the Turing Test standards, ensuring that every customer interaction feels genuine and personal. + +--- + +**Conclusion**: +Swarms are not just another technological advancement; they represent the future of customer support. Their ability to provide round-the-clock, scalable, and continuously improving support can redefine customer experience standards. By adopting swarms, businesses can stay ahead of the curve, ensuring unparalleled customer loyalty and satisfaction. + +**Experience the future of customer support. Dive into the swarm revolution.** + diff --git a/docs_edit/applications/discord.md b/docs_edit/applications/discord.md new file mode 100644 index 00000000..dd7de16c --- /dev/null +++ b/docs_edit/applications/discord.md @@ -0,0 +1,105 @@ +## Usage Documentation: Discord Bot with Advanced Features + +--- + +### Overview: + +This code provides a structure for a Discord bot with advanced features such as voice channel interactions, image generation, and text-based interactions using OpenAI models. + +--- + +### Setup: + +1. Ensure that the necessary libraries are installed: +```bash +pip install discord.py python-dotenv dalle3 invoke openai +``` + +2. Create a `.env` file in the same directory as your bot script and add the following: +``` +DISCORD_TOKEN=your_discord_bot_token +STORAGE_SERVICE=your_storage_service_endpoint +SAVE_DIRECTORY=path_to_save_generated_images +``` + +--- + +### Bot Class and its Methods: + +#### `__init__(self, agent, llm, command_prefix="!")`: + +Initializes the bot with the given agent, language model (`llm`), and a command prefix (default is `!`). + +#### `add_command(self, name, func)`: + +Allows you to dynamically add new commands to the bot. The `name` is the command's name and `func` is the function to execute when the command is called. + +#### `run(self)`: + +Starts the bot using the `DISCORD_TOKEN` from the `.env` file. + +--- + +### Commands: + +1. **!greet**: Greets the user. + +2. **!help_me**: Provides a list of commands and their descriptions. + +3. **!join**: Joins the voice channel the user is in. + +4. **!leave**: Leaves the voice channel the bot is currently in. + +5. **!listen**: Starts listening to voice in the current voice channel and records the audio. + +6. **!generate_image [prompt]**: Generates images based on the provided prompt using the DALL-E3 model. + +7. **!send_text [text] [use_agent=True]**: Sends the provided text to the worker (either the agent or the LLM) and returns the response. + +--- + +### Usage: + +Initialize the `llm` (Language Learning Model) with your OpenAI API key: + +```python +from swarms.models import OpenAIChat + +llm = OpenAIChat( + openai_api_key="Your_OpenAI_API_Key", + temperature=0.5, +) +``` + +Initialize the bot with the `llm`: + +```python +from apps.discord import Bot + +bot = Bot(llm=llm) +``` + +Send a task to the bot: + +```python +task = "What were the winning Boston Marathon times for the past 5 years (ending in 2022)? Generate a table of the year, name, country of origin, and times." +bot.send_text(task) +``` + +Start the bot: + +```python +bot.run() +``` + +--- + +### Additional Notes: + +- The bot makes use of the `dalle3` library for image generation. Ensure you have the model and necessary setup for it. + +- For the storage service, you might want to integrate with a cloud service like Google Cloud Storage or AWS S3 to store and retrieve generated images. The given code assumes a method `.upload()` for the storage service to upload files. + +- Ensure that you've granted the bot necessary permissions on Discord, especially if you want to use voice channel features. + +- Handle API keys and tokens securely. Avoid hardcoding them directly into your code. Use environment variables or secure secret management tools. diff --git a/docs_edit/applications/enterprise.md b/docs_edit/applications/enterprise.md new file mode 100644 index 00000000..e69de29b diff --git a/docs_edit/applications/marketing_agencies.md b/docs_edit/applications/marketing_agencies.md new file mode 100644 index 00000000..d14e359c --- /dev/null +++ b/docs_edit/applications/marketing_agencies.md @@ -0,0 +1,64 @@ +## **Swarms in Marketing Agencies: A New Era of Automated Media Strategy** + +--- + +### **Introduction**: +- Brief background on marketing agencies and their role in driving brand narratives and sales. +- Current challenges and pain points faced in media planning, placements, and budgeting. +- Introduction to the transformative potential of swarms in reshaping the marketing industry. + +--- + +### **1. Fundamental Problem: Media Plan Creation**: + - **Definition**: The challenge of creating an effective media plan that resonates with a target audience and aligns with brand objectives. + + - **Traditional Solutions and Their Shortcomings**: Manual brainstorming sessions, over-reliance on past strategies, and long turnaround times leading to inefficiency. + + - **How Swarms Address This Problem**: + - **Benefit 1**: Automated Media Plan Generation – Swarms ingest branding summaries, objectives, and marketing strategies to generate media plans, eliminating guesswork and human error. + - **Real-world Application of Swarms**: The automation of media plans based on client briefs, including platform selections, audience targeting, and creative versions. + +--- + +### **2. Fundamental Problem: Media Placements**: + - **Definition**: The tedious task of determining where ads will be placed, considering demographics, platform specifics, and more. + + - **Traditional Solutions and Their Shortcomings**: Manual placement leading to possible misalignment with target audiences and brand objectives. + + - **How Swarms Address This Problem**: + - **Benefit 2**: Precision Media Placements – Swarms analyze audience data and demographics to suggest the best placements, optimizing for conversions and brand reach. + - **Real-world Application of Swarms**: Automated selection of ad placements across platforms like Facebook, Google, and DSPs based on media plans. + +--- + +### **3. Fundamental Problem: Budgeting**: + - **Definition**: Efficiently allocating and managing advertising budgets across multiple campaigns, platforms, and timeframes. + + - **Traditional Solutions and Their Shortcomings**: Manual budgeting using tools like Excel, prone to errors, and inefficient shifts in allocations. + + - **How Swarms Address This Problem**: + - **Benefit 3**: Intelligent Media Budgeting – Swarms enable dynamic budget allocation based on performance analytics, maximizing ROI. + - **Real-world Application of Swarms**: Real-time adjustments in budget allocations based on campaign performance, eliminating long waiting periods and manual recalculations. + +--- + +### **Features**: +1. Automated Media Plan Generator: Input your objectives and receive a comprehensive media plan. +2. Precision Media Placement Tool: Ensure your ads appear in the right places to the right people. +3. Dynamic Budget Allocation: Maximize ROI with real-time budget adjustments. +4. Integration with Common Tools: Seamless integration with tools like Excel and APIs for exporting placements. +5. Conversational Platform: A suite of tools built for modern marketing agencies, bringing all tasks under one umbrella. + +--- + +### **Testimonials**: +- "Swarms have completely revolutionized our media planning process. What used to take weeks now takes mere hours." - *Senior Media Strategist, Top-tier Marketing Agency* +- "The precision with which we can place ads now is unprecedented. It's like having a crystal ball for marketing!" - *Campaign Manager, Global Advertising Firm* + +--- + +### **Conclusion**: +- Reiterate the immense potential of swarms in revolutionizing media planning, placements, and budgeting for marketing agencies. +- Call to action: For marketing agencies looking to step into the future and leave manual inefficiencies behind, swarms are the answer. + +--- \ No newline at end of file diff --git a/docs_edit/assets/css/extra.css b/docs_edit/assets/css/extra.css new file mode 100644 index 00000000..d9116a60 --- /dev/null +++ b/docs_edit/assets/css/extra.css @@ -0,0 +1,7 @@ +.md-typeset__table { + min-width: 100%; +} + +.md-typeset table:not([class]) { + display: table; +} \ No newline at end of file diff --git a/docs_edit/assets/img/SwarmsLogoIcon.png b/docs_edit/assets/img/SwarmsLogoIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..09ff9a2825dc3fe4a6947ab06d9486e0d2fb0410 GIT binary patch literal 204554 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 z zcU%Dt;{^bCtrypd0j9X7pj?HfH76ApLhUP9Zp0z(OxMaU9M&+f`q{B?G+}NNiA>?i z-6oo;&Momne5>z_at&aelM*WPlm0eSvY&C!oWZ*cupe6!9j9I!Cle3D4>75m#Gjdh zeFX1_uT{xu@6p2bZhj)8UJ(GYOudRSEFgrNc| z`MaiJ2tWsHTr2m7;viy$)>ENc4OshVEX2Q2QqOAb^I_;@z8s$)9`*oP4D8@oP9@L) z7l#I{a#rh8D$auiScP7-e=UGL08kZ&{ND?Z3b6ixC_9RPtW|*Z^n*}s@3%gV$OY{z zbpLb*N81>%ip7=%xc?I4>95_b9RpP}rUtOed5NOBj<7|Wa4iOnU;wL}OR*WiDke5W z6lOLX>KI}jvQ;>D0I+V@!Q*xS`Gp<*2BikKnUnK9L7_vY+Qq?XohV3{(!`}X6AT0S zPASmYMN+Dmn-c-Q9~A|S$zoO%cU%#~ls443f38OS44$)aW-u>`C*r~m3MpMTmKR6d z>q)$@_C~5$GFE6+hX?XEVJcGV5D;aml6uL*c{^#BiNkK}P6Y5LOy*AN8lzv`#AbLt znnOv(udyAtp@h`7kd&e!14NW4kVOOrj2?jiqcirqt)L zjEV0tCo+GN=%0)U*VYcj{8G$;JTDz*H}BG1+V9*HrRIL`QMCpmtD_S_NQ0|bPWh`eRBNw<@ z>$-+ugFe0pHL432FFCgi?ouI&3J#iDD#+Q;vTo^`CF_~2YcMC|Rqpb1B%C@}M0|sr zf92xA&R>WS@u^PcSV!$&dx+Oyd2vT9UrF^^%%cF-W?PrDlL-Y@xe{QN16LlY+hH}$ z;k6%@B22l${&jzABBq+b8YZV)_1|Ou`^TSYaV)r@xO2cC8j;o3Kk7vr&#UyI6P8eMfvhVU&6@OCX7{2FXX{EnqcdFIie*ly zJf+%#0+Bdl;R;CCY(Zh=I;CgqS<39jxlyblQyp8Gc`46vLCJL{f32M#XEr zstgt~RR485Txb7g%2q4wGj$v;C`ZQfZ1RZ>tt&cty0eQVA5@*pVa4K7f8lx&ZWE1F z%yg`f-n4+CV6)a_x&SdUWcOtq5j9Bh)iTKH_TR!kQDAh_lo%1=qw`WjR#1L=3_ zF-tu#{Xs$1kB@`A6$hTn^*vQyiY7p@GEYLhFJX@bKs8WB@)vRY^|kwA&i5f>g)2i6 z7h&og0{Kpj9egIHHvG$!D|UeWgcMjqE&g2H4{pLunZ{q(pW3aiQ_z-TR&%K;`np4w z9kjYuQ#P;wYp3e`>dd@TinL3P(ig=PVdf?foH{eJm~b7pWNKoj7$R4l8wEL6Dwucm zV^Em@$xe6O^F^Z0&^q*qCldhec<$6^PeB2JGE(0{M!|sUa|#5@CumrwJdA4O{}MH7 z)R0giN`*0ujDnh4I3+t4N@bp?#-L7}0@M0OPO%BqHuHFkTNrgEG{`upcN?3;&y8}L zJM|}Za?g6J)2My4k8vPg;znbo21i=Iqzh#^7Rq#txeTgV>x*`EjOrROe#uQ{gvy%R zn1U+p$3cb5_GG5>fOf{gDd2Xj?_=vf#v^su{MFB#B5mw*DQ{7pV@mEJwLYbEtzQeH z@tiZ_oB-8LSE@XyX6FoywLLYRGD=nd{J$|-`H{_+=p9UA9756ZyUMcnk^bfP&VHHF z4eGxaZi9RWSj3A(Q??Nc|^Ftdr zl$F4~xh!&4rC`lb|IEB41-+^tlsd=9hjgjbsrUvq2CqJYlGozgfkG%LVSBxhJ$moj z!C}hM$Y95dP85fN(v-N_NMvxJL`Ujwu%b$(ZC;*x*X%VZrOPyHGmfrO782PcUo8q1 z735>q7S4gw$0=?uCMKpVwNS>aNP+utA2LYm-@KbIacwfqB~($C4}+2-lL_`N|4nog z;A<|lrHw05$*$mJrYzD=l=Wxl{Z>j??&nUS&&g!bbE#A6wtBpsoJN-B^?HAVijTCh z$RKep-+WwpEB{t?`s|(kC02%r{~?2F0#68uyG-@`4V790Ac zz+Qf1-Y?E8E#h+$WhXJqQ5h`r-$+e%3Kc7E68XPvmcf3@)T- zciYrMw<#2xX60A7i9EIk?!Cza#v6yM*GJSzRC4YQ#U{Cg(knpLT;@W;D6&@5>Dfz4 zO_l7`eGhw3%<3y_Q&Kg|PHBZj&9$aDQeU?Wq?t5!)^KleowJ1v@u&6|$Njh&&VUbL z{DdE24*=IjGdS46>&6aF3QS-L_vV4A*s|IwgG|8!T4C5MN=!_#3d_P2n8c11o<{^s zU5V)y=>g}=3cghTz+2gk;r3Ry$v}DrK>c!Nz)Hnsp*Y#MvsPUr7`sUWRM7-BcJPJC zQpB$>9DxHw&%{}{X#1|&E|JVpgt#H>%JEivx|r9$TqSGovw871=Qx z5H7-KodURRahE#G3}&p#F}hGD_OF89*g!NtYg^u>zPSRF2bmjJESZl2JPc?JGN`aP zserE5EN|z$1?BmW&TpGGwzYL$aaCjC9*3LmvDKd)f6!0|{yWS+{o z-Dj}GQ~SBTh;RCx=Y<-(mjKwpC#7c4$_mZT(-nsT5w&e^H}dB>4fZw#54kq&nWsr; zdSw7tZKCX6S-=6^g`Gaq`I6$c85vu?&^jI!pjPM%ws#+MYa6ft-df42fGXl4_DJ=+ zv5l~v!J{x<_GBjXs(~Q$eZ+mDDqc-YV|X?MsBXezAWWwGG&AKVloO?=#42_>S#l5s zsNz6(k8?X%88_6Q&il%3qMPj?Oq6Xb*V%Lj9-Y=<2dgLRgg;_eX3D4O=<^Ie#IS#b ziVKvWJ~_Z{ajhppS%-p?xTyVFG=#r1AQiW^!tzzSS4m{nFxbL4iY@~yoDa#b`yBQV z>|yxcZCoH4sM>WmO=8Yq5qCppnlFa{*HzB?t+txftuqzUd1^_|jF>%YT65KB1J?tK z&Ih5pO0@th*uk%v4L&MK6TQJ_|4Y}DV_D6~pSDT^^# z8DFHApoPe(K)*wNu$RY0GdL~an4=UoUn-wyNZIRVdT%IiiK}|QbUjWj<}#VyqzbRTzF8>}f)D)Zu?IyVYb zYS6p}ygH^b$D|vVB&Q8Z*SG~S>PAKy*OFhD>Amk0#2p39y886YN6CDo?`vvSK-J{I zrcEreS9AX<0Guh=S?Z7f&XRBAhU#@-RghJUV%Hu9^}3z_SnOnRl$`;qn(B}_ok&{5 zm0c{r)#R@xlNG!F08%}CeFs{^=4e8|RphTE6fB4wrV4sdbiy%pIAs03`X5HrJNO@_ zV*3h!b;tgy+@!7%_c?Czi29%YqAcQd$X{RnNZ^1z{TJ$AxI08U!Ze%YAegqWIFyis z)1649hAV4tLf>UG)J`7lD!}d4lhgI*w^l$(r7?u*(NXto`mFCVTlkso1Vr}g>|j!R zqd2>Dx5jEXjquavU#f$MigK0TclHb4!RC-(+(mruiUJb}Lzv!gQMkau5pr_&pdSbK zhJkf=x7^#wHV9wgBw~A89PmTND(qmPT$ws%v~xuF3uFj2Gl|+%#$n5 zYVq%CI6?i3 z0+dmw+^4!x7D7WgH4O2&4Pif~ad4b(D5RX#6MY$vqTgdquf}I>I}sLx_P$uZV#9*+ zOiNlI@qE%Z)Fnb<>m%wH(--Y$JQJ&T8MghoEsW|NS%j_47%#5HX0_TZ;B~7_ ze}qOH+uV@?FWyPOUnwi#9v;9*LDm(b0+9Q1JvO%T+yU7rT-)yTnW{~|tkf*%PqViT z03@@k?F)4p3R2hvUz(y+ufGneHPH4IxQg-=#fi7YeeF z#Kt+W2w)BK-v{L}54i1=t((;O2I(&GoI41&A;}TH`w9Nyj`#&=J5yY82N7hBAV{4>T%3i_ zUwm~MJ6P>jDb(H7AMnLU*uWCMu9Pc2cxVF)$X;q)GgD47s&EZ{MlW%Q`DN$IN<$QB z74Py>GEj9&7G?y&`pr}-6-w9bFe@t97Ow!jvFG-BJ7=lRGhi$9DWEPyW7QVhd1-Gn zHnwL_QWR}CXcpe7E$&J>ItzL%dRa~!NLrWIVlNu>ifHcwgc49haR&;E8~HaSU}$!= zsVUJ}A*pLjQAPm40Rm;UPu`~WU(!>(TA}3idi-~Yb}Zu-@a*PoA+)g&%E_V({6-^z z3Ze=q0q8j3SMu8CpwoViuz`s&``qd#f+)|;*xH%<9NO4ZpKY#2F=z8?L$rv#YJQo+ zZtU!SwVkvc>t;#X3s&`l%BE*wo0xfWev!0?b=1ATgR&{`IB9&`P^%4#IDw|kO+Ua! z?p;K@S?ONbVYX$p(humkMt#2$w1^>n}3y_(Eb{L}CKumI(H zz?AE;KidOfQ(+AYr}fG6j&NGeAh^muy%U+)QTDmrvh`ED`c%?vQ|-Ig1HUdp-)g= zN(Y{wq*HG62sw2Qf%_f+duC=gb{4DHv5MCvma&>G*al9s5nw$RHn5(bNOGw8x@hFN ze_*3jv6}b^Hm0~F>|d;6uw6aBRHyn*-GWUFYIMy&Gux)>OxNIwAwxU3acc+-M_GRY z6lWuGap&&#)Foagtk=2a8yov~?$oHUYK`3*EZ&sXdy+u;&nH$hL71ZVT z4kmP&dQ`B~M`B>IFjE~YoB^<;;=4qd`NA!~A^R(cyUct<-bDps8MvWJJD)pnSp~B5 z$0oqhJ3y0&DrYivIsD8QkuRPL#uS9uVxV7k?G)!&>qK7ZUmDxI-Can=di+&C(Y{l{ zf}W!?McpvlPX|F;kHjH3+XUpk7{FlAqKQa##je@$57a zMzQ)RUMtQf{G8YgGu1f@+vRmMO&~%mPW^7@~2x=^1i>QRZdabPC=g+&t zbc&utVNf_y&W;DtGh3lL{R26;?k8Y<73|<&IytT0okjeW$d8ee z23I(X0M$Baj*T<*arMMRU9g7%h&UO-Y*@t$(@2$<+~NM28yo;wp$*J0;khX=RW_`y z0uPPg4fVRjFZ4*AaMP%wI!6gujarRUKRN?fo%~wnI`xu7$0_BetVL(#j$JmZ@kZf^yclfeR99iM z4#ov_nEDW#2vAd9uzNclKP5JE0FHr=KFdV)XBKrzFYH;f96JQIcW9ncA8vtuA5`}_={p%%{+qv7{!+|PJ zy=MQz$?g^4I=)zD4eyhk_sa146P)@(_6n{jSi+_;d`!w3&YHv7=GCxE6?3QdM3d79 z>I>Csx8xLTu#ZzvGItdlc!eYX3dqZ^UaC-7T^~mO^-%O<++>Os=xXi`fvw-(z8Xz< zf@aJXo^9-RbDVesV^*kOpV%r43Qu-3q?8>31MGbkw7!P|6N9XJ1flLW1M6pD2cLAX zXFYL%HD~-^oTM7j9soTgxc0 zZ5Wj{Jf5>G+O~oOCt37I9mYcq(-f!a_5C8%S2KbK0?!X)S>N_8w;}a#KT&U6&xi-M zSj>%P_I8>vQlYQC9vTeF3-GaMNGw`;)3{%95BY5Zce1%8>f6mp#cmiGfECuYY>0$% zMSeGv%2e%QVfn0#fT3+L{8~wFV*#7#PEeXgu{uCn9`#)<{i!vYEuN@Qu;Zi%1tq8n zFSJ3S0zkRPGu2|oNkIalaw65pOnNfdCi(5m&z6Nov9XGUf`wn=g=-aC9+$uJ{#Lv%UsXRsRYYktCMoXjh7E`OI`cZV7c1)a{Y=bjcEgn>c!QY7ziY#B+=wmz;!mT zv3w;5jf+OGQ@3bSNl~MWUCCx-Hi`m_Sey)ulhO^A*Un{+QdWNF#*Q3u`GqZPBSwYA z!s5u{=H^My-Itc}AQ! zfXEivkx@L0@wfn9vbB^lXg`~*aM^{-yV~Ol_)2$_L>InwF zm-fli$1!&X>^ZGWf`fj!9yc3+A{}1%Sf~V(8uz|&Sa^R^S$|w3ePK%9=fZ#BXAXX5 zQBtacK3fpJ4$ghN50o|-&N*4fRUd=kPDT==B+YSs{BRdMuus)UO}3hqwNP@1H7X z_~4J`%)j;6gpiJ*oARF=IhS%di&zzpY6t$6AO2O~nr&O7606y1;V#Qv5pk42^ck6O z*y8+npR3#*I!hQp`WKCs19BZ$9~hPT+nY{&PMVv;pjwR`3?-(;`DpYBF1EzYAsj{A z?!;&C*yXKcelUwY>o&*9DK|Kim07~H#jlFVS;dwWRO|L;2c0Gya4w+AySo3Ey*~}I zYt7Dr!S(Kah8#7gbtNmx*=1D~)&-1FFxpVb;DO1w4dQET41XY^!_n|{L^oj|f>34< zLH}r)0D?BrVPhN5MxL>aN1P^T+h7zPuRf|uE{po)tE);~rKB9su=o3|XASRu&(4#o zThqNt-LvjJx%b&;pL6!!XX{<>TI*TQGr%}C*AG3eqYmLXd+JP`gdh8Lp}T5nU#YQr zyo!ESm@p=VrnVXyrlp2iY0~MYsL}}X#W5R5sRS>t*Ho!hGX>_?>!au=Ez5)iMorY~ zvRW%kb<<+vJ4%Z{J*^9eJrRv+)N1{YMT$5ra+SMFQnKRin)@JkntV*|gz7*O5oqB~ zGIP9EAw~2R>)a7%b3lC!`(O|!b@kMkRcUn}1kDC&^8LyBrjA63d6?O(+k0ggk16WY zXp$^L8td8|j8P9}pB;TdQPh(WYEh)hW%Q_0u2%|mb?~n3diwkA+O{SJ`dyevH2dV& zM30~RJNz^yQJ|BVn&|nZ(;}Y`we~B@cy!XF=U$|9XeK<#0>vg(Y?CT=)N}trbn8(-Qvy3_%-V5BTzH~abz}*kCicqG7i(zZ?qCF&J53RH z(WcWA#%7VSgM+P_79Dc3e?t)uCL&mNVC-a7Nk^mD1*E)zU74e}I9#ar1l+{m!wwdG zt~*9BF%iAO@EizY9?ZkXA4iv`Te0X>+H*WbED`JLbmj1Jyw4%*)hAQ~2rH6w>{Q7q z5dm&u&wBg%b;?u2SSFoUPOZMW!L`?$t(vP>QQfJ^Z_?s^kR7KJ_;=b-tKGo~$YdVd zH32mLJMl4mRE~3Y!3wuF2;-f zi~P%5U#mM-Cx2$!#xL^5Q+2i^(&y4v1&1m`(#f#~rRqXx$`R{6m>IBbUUXQca02IQtntQp)e#N;11SeQvpB~l-#>gF>>eq zb(%u|FL%25ry@z-#;GdJ1e{{sQPipSYuYwbs;Q+d$Lo}!xJ%J$RkR!{qR%mD3q!3@ zsk{@8RiEo;7jiuA-U2x?)xahgxT82xq~I(PFKvJZX9DN!TNt`{^`j1Z? zT%?%Nr8-@Sb?uetQqQY-kK$*i9B-;@20foTY7|^MKU9Nz!sQN@OqFzX?a^|STtS)~ zXVEOqIbAZ@$F89zL_^x{so~O&A*i#hot4*)y$G4#)K{Y5vlE|Ha`N)5p!6G)hL=_P zfCMMgdpfaW6&7vR(T=e&S19)mPmJ=LAX+8Xt~HX@y1lmgYaLUdY*$wA3~iT^=dPk- zj#=EBFn-nQIyuIu()J>`RDm>UM5_r6a5urpcEs88zmd`$Xl2JFZEm%+!QuWKkL~W~ z5doBokR%|}C9**_DfXlcm_)t4UHi@P>80{B$Yef{p0m_ZM)gS2z9jz;MgSZ~$-4n7 zqAX85Ua~ul0}T|YFTkmRlH}lW_U1G-%ntUzC=#Wv%k|fN&isK~VnKgid2JVqgI)b) zd&{*1J^h_xXP}@a;@T@mu;J-qr0s2XHeBbE=#?{+TjwvxiJZSp0Z*5S0O9Mjng?{@*ThFt#X@`)p zIJH#dauNxDPrDt5T)Q>*$~kk>x_k&d4Oh5$s$g9gM;^uji!vr-as!9V=?BiH&Jl9P6UA*eJE(9vGOG7J{TOAR)(* zD=p3om*$*t10QnkUMwEo z8x_C#eLH9V|35uidSg7|^fC0T$a-ec%9E2&q`GS~jaZFr(U2n|APE+auwK*1J&RN) zz)qcBEo@GM0Xx}#Ei{QRq=~%`cE72=3dw|gKBD3UpD%KHn6&Rz*qoNE{)!0&@5j;W zB)J5sbRW=7Tzhq4bq;1D{ZESST%8he)se$occuIHB!UI8#Ocq`b4<0@%x+lZddq9B z8;QK%);Hw21dm5h!ldqzCbeGG@3zvy?y@DXOf z8_93XBtA+(qE-*#VH361*MrtsABKzG*9uD@rpEzS`V6GxxX#+JFp>1ME~BTFYppwH z)Uo0%?p&qbYR(m@U?HVury3Wum-Wy^&fT%1wmNb;Lsz%y3#FmtJcB!3QgR5i(g3T+ zi;)4Cx@ET*B_|uS?kYE^y&oW?ZfBzQ`iv$h5fK70) zU2%xDM6qzRKoNsyy#q(qq=$JNSN`FyriO)k_$f`&BwBmUsqu0QYYiszzO0dZq@yimFr zo8oF6icXyza?$DPGC5XW{|BcY{ej=ObniR<%-rtZpE=f<&1`0ETMqT-|EanCzyIs6 z{LXiN9=e(S_}y)FlvN9^ZPZ zMXlf7M~+%WNnpENK*LhTOzW^P9LoawZc5`4cymv&E~28d)SL@R<&~axPAd=I2|$zAS@%TpEjUqx zXtO%=k}KV?0Uf-LR4~kL1fYTslVGrmozJNb>wLdqVG_q`+N)evlGYoJV7o<69Vl+t zzET;wV@{HO*{hGn?64w2zE>Klt|_f6jM& zWZc_HfF>iH5L9uBSfjS*AVMA5K8_T&^f09BKs3?g)bOw#iUaDitCdIO4Ck6jq4_qw`0ID>7gI}d#^LOTEY&JG-?woAf-t66M+qUgG**@9k=Gt_s zt&Q7;x953&@1Jnb=bo7_X66!4qvfkO8f0^+=2$Zs`#a6!63X06xnij~))h&JQxObL z`Ux3$5y{6yR2WfNpUkJF-o9X@r3n3)7fH^->zI9^<5T{F`jQ7qy*M%msnv08Gtafw z<~S3$Ehef^+3r8G_{OyBeiiU;#W}{;oHcWi()#EY@$J>G;P$!yZ}i_h?QwoIsY4Do zvJNE|ERC=3B1H9@faOblI*`OtW4z{Kg+rch$fDjStlnAT1U?Bl14R5mB&xNd^bNJU z=p=j^n6R`1IT`QZ9{S2~_fF!#C{_4%b=T;zlO^ReKhJI)IOUY4)RPVJ;6LsoN0L5a ziKvuQUhwvB`bhRyyb=-@-$1`??eKd+8|sw2lbJ7TH)GV=X!th4hrA`i%l4p<%qBiN z{29wxx2AUPCu*+!?~%`q6aRi#JJhTzqSb^Y$?8x$%Gl{~y)_g!6>fasKge%Qn$PCJ zSN8j3`YYZ{YTyeUTIW_CIz;X|q_xtlyVmTY3Or#{30VGIl+mfv@9?Uj7lDzQ+=pt82JELTztZ5PUEGIw>sp?^qZXDp}6Gb_b`REOP8^ z3phz>$6yLEbP12f5hX4%4`~$Ta4Urln@kMtyZftu-N;q}rLz1Dm3AY@JCjd`wL3`I z*kmw%(J^z6^ud`lVFkN0|IeLcgZ&X<+1<&_TP~u;UXoS!6H0fc3)2l1zu`67uCz+H z_rYE?Ob&oJdeHSr(pxE!8_y^VGTGW7MZvR~y7uDTWUgS!B^is;K@FE$tgV{{?);KcAhl;Z}7^(O3qdMb~UfPu9 z(ojhw{8Q6|>PGhv&PG9C1e_o|tU;U>_W4gykI#So7I+kX4{!-ib;;ps$TZwE#3Pos|7&~CxCfFRtcNi8PAUg*U`E_2IRFy+K zw{l>QfnnWO0f&RC8T$|C2pdy-x6Du+Lw(UdE}TNkcnRo;?y)h*S`e2&E);!W?DccR z1(&>UzskhoPmb~T1N+J+LUU6$iv>yZv(EfYJXig`{Q~A+z+=Mh0-wb zOodmTujctcOVodV?rq{%(9rRG!N)qP#!_-R1Xm>7khTmI|o(Z3@up+73tQm*Q!d5s4FMI3R`TLVnyfSXm)qjRa)Xevh_OWLgN)5S z@-WUXhW*ivXVfcC-Y=w)<>4ER#S|AbuXbduSD7yu!XO7Lc*}S_?UBZv5_8Ae($6R+ z!WoZ*`>hI!;VL0iMwgmuQefIW+Tkj6WExMdN(Chq&lMcntdh9vJ_Yoxt!3Z!I5{Hmn_E-yIdaA0pU6C#}U-q4a3&Uu8-?9MA_o{L7q7cF&N9u!c-Il z9Gu+quE%!lLWP_r18Tdykz_ki@diriwe*$R2~=GFu@R8gcY-hEYhRS^gx0`FOolcX z$O;888zY<=5hit++`F^so2{^p;6(nT@+h~n){6@vho{IyGAQ-PXC8upG-q|qj9SlwN>Gc;!C z+ezYI3;wTTnB>7KNUo9f26vgUSFr2DeMkAE)v08!9eLvc8xrOQ-m|v#!T38e<}%d} zEcuccqdC&!x-3dLAFAe*d@h2MdZrsp#LDsXqb4D>BVa^ zm#=9B{V{7$7=aB)z_~k_X;*NaUB z8Q2+BdiJ+L?|3jH;Ou4aJ>-LleKh)Jb72>@_xHd3f}MBjXjyO!6L3g$wUW{qgcA~3wzY1y z3umr5T}-$pDGH>*;vTgr@_`doL#^vW;&O6)BooDg5q!6;9K4q``sb|6F(fdTMGu=L zdNd++SB!sLN4Ji0hyIYcSC5+t@vN5PJ;aMKJLRWNlLzW>fJ_!Iz65uWaT(o!c{=a` z^HUqy>w_?%K2y}9P)yBK<%?UOzGBhoDN0P67 z@`ab8EvP;IWq|Q<$Y%f1R{g6EC#X+3j}iRj^Ww=?Ds?ung5fN#@XC_;wOpD4S^@y_h;#qR_1ew*w`+M?@4BWxscB`SLi=NC zjMz@J=tuQFHk2IgIH?r-U|Lq*7@B|5p8qRGDRwl`^kA-SR^U;1~Q_ zFR0dY24s!Lm{VJu+@nib5HEa4%R1eI|1bQ^ZN)?Hh%A$&-OsZacy)f~Qv+r{AuG8~#%? zy4bSgdSY)*Xj2-NmL*#QTFYZIm9|0&6bq?+pItN*McsWxs-Wq(_Wec_08IUC(>W!D zPHACV5>GMFSb>C}>`YcAwDh%5p#sk)TyWn0{sHyOPEs!Oasc&Wq^BsjO4mDyl&CKB z!s(j>nM9qLO&4+{x9gaw8g25MMFpcpfPAyDptCovN2!e;jG#f7@J}Cao6gAJW&fAk zo1Mkauiw}MuA?(56A{R?v-NZ4!;b062wX*fPC}Gc85zt7d{BpptR+&7Vb2bV;xi%* z+{lx)MuUQKLWQ9|UcSHx#rj<+OkQRto|&`W$T~P^E00b_Wo=3;WHZISN(ZO4yp66h zRi(;^Yxea91>6{;rqq+1_m2_GEB=W;N*G2!6xGL;pe<@Omm5p<^95#ER}Dgbo!jK{ zDP6Fd?RwUoT4Gpp6)(LRhLVO-q#g_fRuoPZeN9Y=-6~u%$mwEOV`bl>^YcEkE zbOs4P8brz}5K>AWW@%w!+5Q~f_wCP_H9@$UV1R^@}=cb3clPgZGtYom80BV>- zy}B1HC5bag_v>rVKu`qDL$FjWtVBJ5JXR-qny0iLsaI{<9s(sZ42g_SaBCDSd6a>w z%P%M5x|FHnf7RnA6H57fX?YV_E#VT!@DMNBk}-JF13x$$s8PNo;VjcxZkJl4Y*&i; z2nW0EG{IWTryLN3k5(@$W49T!gbAG9{X zZFL4994MF-Cr-=Owl1IOSU0gW1l7(KAvvyRc?Wmv->Kc@W0(Y3oeahl453a-gruXG zpL@ge0cTWV^*3wGe0tT7RBHgYrmgC)LfISt5v|$>h1%77+b>*enO6Y1fy_%!5>z&8 z0E5ta&GKW~b0aC%pqmD+%kx-Ns6X{EaFX5xgx0ZfKU*qrN=Xgto9zt<{Xad%~N81(q<`mb_eM4FY-x zRGAEzKxQww7v0J~N9fqt&pugsXotpHXKc1nXn#I9QL`Z>Lr~Tv!5?LVp`(k^@romd z?KBA=9PbO3AD5*fc!XIaqX|aa=7PxIiuUr@{3MX$ZD{$%0COl`lzrbi`%x)<^e;?- zZ?BqyKMq!^QFb2rW=X0cvI+C~>T#*~3r6H|Qkz%g(}P40r6;P)s~h_$B)H#W4_p!D zCPOxBUd9NA#eWhmFpXN(^n!CI1EdLZ)-iiwfET_)aN9qyFXAeT1(z<4OBTW+#i%;4 zayNc2l2pWP4}#ZxV|QInxWA84-jE)s{4%i*zSf642v!kWh7d7IO!B+na$i8ave#d2 z*n_b1kMMq^v#VQG;F3#sxlmhP0$?nXqiagS>dZd-#(SJ{zgttrV`|Z{*~lDu1LcV0 zIXOs$7z=|bXkJfn!!F&Qs}`h;>8Mp9O)yy+P=<@Bs3J%ut9rIAdfIqC0=tfq>XWcFOPjM$1)_a3&B~Nv!spOKsQFR?!v$*Auz>q2c6K+j39B^^HJIDr3 zLH&Yz$$#h{hndEwl=5X4YsuS>0tD9*ImrDjB8L0UD5wbe_UYwU2WNTYB!u&{mo-1$ z>hIqNj;L8k39qV;p9FSq@nPuF5C-Ds5*5mwe&xrRK`M1duE+y}Z->v2ng#gf!GO7Y zExn)1pP0`b5zR+mR$G;*o*= z5PT;OJr1{$<4j3HaEY&mMMbYY$E|rNhI$1arfIJ8=lmJWc|=H*DQnL&#@UusyW zlG)`qz5ZpSbd-GH3d;4wQSTat#~26EOhXu zpd#GmjxFE)y8=xh&@We_QjZ`_xQo#{nK#|rjy&(P7cOcs8Pn96Pf&hN1IgE= zpXvp}&^XJ^8cY$SOmDeDEQxgVxAj=Yc_-BeIo{D2mrjlKv5FL_I%(QhWm8Zv)Tv)c z=UPS+^sjYu;=YM`xeURKCBhd%)G*6rsiJH$_|{zF6m{g-+k_U3$GrO1{~6%u3Ny>j zG=^;J#T=NsylN%rEVyw6XtsT0m-Y!bF$v23JEYL9Nu^yH)_nqViavL3QHMAeZ8hHi z_;j+VO(ypOg+1uJ+%+ydOQr^vN2LpmCw~GVQqzYOnCB`W*@{TQOPWD^{5^ocy-Y#frE)LGPC&rr%5LU+_xb zT=F`f6W2}v-hyyd5)MMME_XyCr@|F_^=E?%OvQAf7~;QIkZI>1QN-T8sR8+kCma5Mkg&KC=_&P6+z`=Jn;ocdDumL;~g zo5)HlqOSDwNU>INW<}ucSxO958L&!i{%Tis?ET6^%5FEDL^$FXdKsux&`)47nq<>H z$#M264=dT9+y^SP0U`j@#m(+n+nur8!tQRg?5%S6D6xr*^91yMChYq^k4h*RmXPNOTPv%2X(b%Pu2cVRMu%=C`_ zxq6+xzz9f@%XA;X1SN=c?mfb^w5$4rnQcR>r;IP;sZl^|?8Zg2t{c0M_FQOad`8GD z7jIGcBwT6_yZ}CoaBmMfw|QwIV#TXRI=q`1i9{#Xu8}ElZoYkxmwb@Y$ZFzf^K3@~yA8fX-8B&R+;1_fxwHePgACd1fS~Ittj=h&-oyuCYSo(i z);}YHtqmkNPH-%=p;;uXq4R&G^+Yi6{Cm8G?7D4M5k@IE*sxr;J_&YbmC6#S+79}F2rd*!G+jD-Gm?@Fvx zZ>Z8xsyv8XEzj5LT@8kG)?2^J7M8|b4&K%IAi%l(BKd_j-*PQ7s$M&bmyXXfp{&b- z5t=}Oo_b9`{Z+~}P{N_gb(w7tBe$I1og-mRx1XsZOcHp)E-v`5Ig9UYBwix=Ib3IF3-(Ht*&rc~*VfvFu4+9+0wrH%r6C;9&cgLBn{Q4(R*jLJ{) z3eR4?>ci?dV#Hz?k4E3k0W10t{(4A^(l1)0W7?^0(-8DRTrwU1d87;!;=J=?OOG z??CY~2{91AOY^}ThNITO(2z8|TZ|(*m5U(?G7Gcgg?f~_ zXI37QCC?KjekVeAMBHLx4+RZ270cMYRu(((ejnz2?@&c1q`4$`-?-D3!t|7`W;qWv zEHGoV+?CoVzVukmt9M1uVY$jZ`?-dl{S0kJ6Ad0`{g%V`)Ft2_qV<2Qo9P|8e*?ck zZ<lH;NGILCT14i|=i6vf(_Jtu#i=05jCS~+p z)oMfrkusfwK7X9o7tOw=rC|C*nd#5DBj$gFE)Civbmu@W)xyE(LyXYbp*(b4mw|he zC1nM?hX9wO0$t^1T3?Hq>kwk*x}&n~WN1bggAa4T^}0vi)c;s;($BKX!l2C$=6zRA zD;;?nkT;vP12qU4u3N-gha&UHF`+nD+I{lw9@|td;Cc~oS=0)`# zINslKMG1*tng&S+2cr{gr{ z$3L12ilnA>x8suRf&u*LocC$p^MMn?1_)}M1tvHajdO`sCfV*(-d~>lR#lQ?X=a$0 z>>%J{5YaiYqFkX&=Ba_s!gi=AO-zfLc%F=I0wv?HTFtusCr^LcLusVr_a5}iseLDP z!fKp7#Vq43_yWx>C~kFFP!kA!%HZ0t`nXAaE+iPEmA3xvp8+%p{0cLTAV%*R9t`6w z=XBO+6hd~5k3C&Iw;0OYbuI7C$kHyvXI`TLXR6|PxNMR*)1C(zE zMM)ssX(vJ3I)^9u__J0pB>vPa7vNU^wmsawP?rF8Vt>hugqTI_b~#k^j9N-|xaKUB zL@<9kzB^1*?_fUj0(}|W>oY01i(6wxi`_jN#>Cm$a~{SQr%JuT+$VB?GM7>#e)USggJZUJUw8FdpiK*XPR3-u}Dx)W1p`#4O#AdTS7gXtI znwHxf^9d0!g6{4RcfIDJ70)n}V;LeVkOG%()ii&_mWBtdz=srHfe(6CU z$6vF;xfQoNb%JT1lE=B5NYh{+<31eK1zdCMM!Uyz=i5)mZ{*zmsDvGQ1_+db&+c^#O|V@efUc^58O z*Gdv3Qd=_TMfat>Wu&f*-unL{)~u2J=K$9hB$VICTS;T8dE<%(HJYEp>8%}QN$Y)z za^ko~a|TyndU&8hbK1fp4S-Fg8ug4(T~r%(xfFL{;46)g4A74TwV)cHojB3*PY;?G+II&r*VdPC*h>gp>jMK+Phu7 zL25mYh-=wZA0i|*g?Uqg$+jQ8V$o6I;)DNGgfj;SGm_5y+B(A9~%>7r(8%z8U3Y8)E`+SSqvA?#wLT$cB}Kfq3E_KoJyYvu0*%Bu%Ri!8kJ>hZKe*&u78wt?#Z`;{}$N(Xzff zrDL1vT=j$2)Tjv1R6Ew^ux`*EonI zqKx+;JmXx`yj;JSK17c*`UI`}TjsAM0^9~%f}ojWZ-?!Xt$1##`?xy7eKypWrK%Z-9d6BKU;(50XUP4)gRIr|obT^J^Ug z#vHeHReQ2@O*pm^d9htEie*H0^!cd^_tl;e`zLXEiw+z`CH!}{ZaK1~3c2dovSZFqg`8vmLTW2;jC^~iEX&EAv2rWj8m zWuv0uti+TBXA81|FK|(U;Y^gRjg0B7^vs_^Ki{`MtCj>^OGiHUke zeS>8hm3CcXB(#%KZha)vqmCywKc>XO z+APhr0V@Ch|8r}T)~#9qt#~8(c%vG%X4@{!r=wt`xJ+tNGYyv$TNql_ysWkySvbh) zeo`OZ$9tB*8v@iB`*}>czz{!?qdDrkq6je;EsslexGcEknLVRC6_~>}bSu_^n~wL3 zOE_VcvoKM&^1GneZQ8 zG6*@Ci`YGwH>c3W&roc&FmN~5+NNokujoV$m?La6$n&KCV<(olExYfC4s0cut(a{p zl_;Qaq40<_t$?(&uS3a>xYi}cw+0ydd}9A-FmPc;Y)m&%QzG-@3`zo|L*WeH$cbqY zfr~HlY!CN>VvC~Zz+L?Iw(iL~=n+-WX7!!d3^F2zRYM)xo%+}~`J8zdK7?lNriCdD zaL!zuLG9qLFlLs#klnwq{Ph0;h~||P6LDGXL-sQPX0O(v6uWeB_$-{>y1pyjsFX6A zM^__5sf`+ecx}r`M-!g_L}tuJ0t92-wA?UH>HLNj%=Dq$u4hm79{Wffy6O5D2K6rt zEv*F+9G~J1i<^o^W9(9xyiu!;dkNl9xGMl&uUL;xjMRtOtn_(-+&!{tc6cxIHH+{r zO#Pwf0A!GgfSp3^TQXHX?gVi2gs6#^W=^51z>1WZcQ^;N(q{Wve~qU(#_uP^Y$hIs zb8pH?r}o(!#cu}hFC!;)bu62v5z+o-mspY`0ZvkWzIu;>w4Vdj!QI6_8PVO5Y>FjS zn|6gi9l-?sa6(Yd9 zdjabV*Ka9$&ER!Y8B-(L^5hghPoW9QqyEQe^XaYw#Rw>+kq}|XRVmJU8% zl21X@s~Df4nT27uU#OWsc}TrcF4kfdr21ID1*m1a!o2f$-sP5s_vYPki+@r!7(&bb zB(&s~1^3!j*24D7;o7v$=TJgv>#bN{Y^%Si%+XR%Cb~ULMQ1^0Jv>E}cs5Pwb6Q

uEU5EfBDzUT%#h3wz(CvcF<=|LHad+}T^1SBGu50q@^|D*2H9!TqJO5V7DZyF zxDXW&{JId3dTBo9qA&*(KH_LU@|3@dR$AX`s{)2m26u_}@~^IKGEAMS)~>NKJEJ9s z-#kMq)hdY9a325DC$f6|wD5TrzS4e~kLtJh$(Za;a*dY32RifVSzFP~;j>AlK6#@5 z2|Bd&D7HsX*V8RY6|vRP81rOqJrz3LhmW50LX?3h55 zO${627dTWkbm=hcrxZAjUi)0UA)Q#2G0dU(q^!?2^RS+@&{c9rdYgcP@fVL!vnRqo zVC4dyf=-2-1xXZmex37dbA~koa)UkvjP=M|cmh^;&Y7GOl5Vsuf zLVa`6-G4ipQQ}v~p?$oAmCA6agjN zE3M`mQEeMO$=XO()xq?C^OL1WNG{F@!u2cT21!XX)tN*x*a@{10A(_&M3sI$N5p^9 z5SKQ&It=Lrr5i?Qx&FMpb4=`9s4Q2{~O+yb;ufspwVWmwX zxq%0JTr(%34t~pReXe19>5cl$``yvC#1SrL9FKNFb8%er^s2s>v0J8mC9oqOAK{zO zWWLt($HW!N?-@PEV$?$}1x4g}*9!;A+uT@(%+w+nkRHXP=N9|9cr&*^EgquG3BNCb zwy-;Ihrn}n?ki-_Y%Qiu0_m$FAc5OfF^TDCbNoZw@iJCRi%g*H&<2&CqsXK(;XKo? zSM>(q6!N2{zRKc&K!vjw9cA`$H2*T$xZ2Qxxs%JaiLchI#Bi$ zomNqeZZlHjBvF^zI}xI*=lNgGWmnlb`J`TTs2~rOqYw{z_=Ep$fp|eh_UvB~Gm^|18L1V4Kypd=D6*UJLJmXWFrF2nhmI(XIKOv{sBPGaI?R#LeJ0_) zOi1zd)8Qgz$4NU7!oUKY^L)RJb6Ch`TIeNxa5G5mvC8=k7+-ZYRKL+IJ>eOtLea?Z zBSB1r|E>b_$oD9|R4sSTWEQSod;-wc)~A15-e7_}`KT97ZU&dYVdt2uxtP{Z>~=qh z^xl*47<7;@xi=IWBoZ1gqd&;CM3nj|c3H~o8~RF5l(Nbv!YWD#MSkH zn+N{OPx*~G(8Ho+g`pJ3TTB?(6y(W68fAlHKCL4Y=Y){blR|!AGVpD*6N?h_pIZm6 zG)HQx3~5EDXvu_vMtPw?CR|4(*-LrkjM{_#Rq`nos!FizlAmJiW}Xd`Znp3nGsezb z7viZA2>C=m+39$!kY5=)Flkw%L9VUz?Iw09X283<8k`aosvCGSI&u#YS z)l}La8O7FBz=OCR<9)`Y5aP*M8V9%_2|n5am>ygDVkgLJ8dGsi#1hlSpqR_=B2F6t zpH%-I&I6sfd7Qwkaf&s2e#B^8x)7_W9?Kt;DBJrz$iJOujdZinVJ*d86);Ktv+M zkuu5YeC)6^A;X8R_a9c8=%nM5Sz%p7E)7L}4y4v`YGMtgB96cw_iURtE|V34=Q*h| z3Czx&EGXg3vbLHf!GSLl2 zD^wr>aPf@gAidCLvmw?L6qm8vi<=TawtqZJ**G0JwPo;edCPi(>ThZ?CF)vDEmF^ouZ#Iv=+S_j9wXWuPgAU|ZP9&|Y5!+*~AQm0cLX}nnk zVM0f@d|m8C3QX|fcQ8SF#}4QcrFl&H`K=H+!`pM+3g?;?R)ZS z1CBk0Gh1$Yw49^_(wktUi)f}pf_O=t>+m7m1#|>hUF}Cc-e1Oe;;>Z6Ro$#Q>a)pj zx_me=e9{6ne~+dK(Iz_{o(Xz$snIv*caT+O~o`Gf7Tqar690 z%A1zWP$$#B-Ms$KR~R6P1*hJC0#?I5<_kh4UnG{0v5I7aJb%QVn!j4KPFl}Mia6GH zjICPP83n=NvrM(`_i>G~951Zw(t<7xrGj;{{M^=WYp&vjYC zp0Y#x)n%zt$8i2Qs|AeA#FlpWu6>&S4>!2DY>ghvlN+NX4v-s+C~Qc}cA2h{t3nM0 zaN$c=e{$s$O1Mn&P>Y;pLe|Udfq>P!t$lD^U)S4Jq2H_dj}?ZzJUfS+7u?tV|Njx&M=c!mc5Op7dn z5o`XCS$7myzCbAhKIhwlB;tr>Ir{5wxpFOkdov1?jhXV(=+hi8qocSr6=OwaT$|mi zxR92T^gp)S$`O>lE(3IpT!GP~x`55^AW<1V(2mfy4N}8Mf}S5(_F0i>!Iq#yHHnWE zx9+ng4fcOA8T4(o4K(OYjMHArN)b9J&Wdl==0UwWO6jOzfvjAE-JO(}y!&;HCj9%% z$dWYLO06SW3Y96sPBL`}FS5JkP9A6Fcc8OjsPWVf&X<_HNkO>G>{;ixTlT!6Mtz?X z*pwXceh3~^_OX61NJ4JUVG>ZvV8U)iVet4m9mAJXv+nxlgq2$1bdrr_|0&c_5Crobt9m-Fx9q$zI9k|ub5}5_2#VJz)=QO!JyVTCo?mUL3RKr!ktELuW39qljo^N3ts9aS_- z>YGZ}IA*WZR&jI7^?!A@wQ7=z4@bWh1)ju)S&%!n#S!t$bVnKx-dOL1-mIVgh%j?> z^P@3jxY7NaM3KnRWr>W~o^aFe%VKg1fjj?Z3>#(CONGYoR4YT%giN|7afSM~;V9_2>#q&B~p z%`6V;>~K7wa6CjS{=Dq^{l2hv)H})G`xS{Fr>rBbP=kW)Y#Q!t1b9pD8>I4MgjRiQ zk`s5Xk=pmy25My9BhWEV7!WuuTEt)?*Q>_yI+!5E$L~z=lo$Z`R$*Fdkoo$9Zw`ca zFsAm+En?%wu8>!g#XCYHjnv{}%C0)C5~EK4OC@s76J5G>D-VTeW?9&OUFezc#@(?3 zu%2^=hQ$`R)W)P{D7$23F(cj~PvzH}2y}s`AS8s8P*}uv#>rUS`$wfoj47=S^tJ0O z8;8gzmrFdZNEDmw&(1%4orOL7Yf8i9;oBGo=Nb6EUnqRUpO0yPj{ce+;^t=@@v-ML zOp(;#Qr9U!A*?qPeS_M)nPb;=pa{{iag?S^Z01PfTZx5XKkF=SxrT#oWIC#}%(EA} zJAV~|v22q6KKu&BC42h3qg~Rnf1%bBQJHpKkVj%8w~l5D`25jjy`4xHUs@(AU>S0w zO2#-sUtj%H6)`R8=*usFsXtR4ky;|66_z^Hl>HSXLHl0XDquK{eRjPf2E3ErRlbEo z+A%e51918Ye6C>{ZFTV-U(KzD-jKUR=__{cEcVcU3!o(vn^IaBiZPMiy82Mm`&Jj} zq#PAIgICdA*yW)Ta3TGaBbT(IvDvBF&a6DPqL(gMky7cvO?pJ>CynUC$LR!gf0+2# z0hUi<6vnm#0}leO}&RT>CvuR2&Fy3e2=ryp1H z%0erCY4?Wnahs^ZC_1vGAM^ShagsA9sz+dL;(8!qW{Ev20~<`)&#FTQ%M}(qr%1I1 zPwAEZ1&_nUv3dZxIpy-?e(httM8d}Z7sS3qO;<`lS?Iyd$56$kV=$3tLL%Ht>+{Oo zpGD7590idbeQU#z$FEQ2ql!xZtAp;@3V(uL6S2mr#;EizQw_+}BWXo;vmL2P+bjgyA13k_ZVGYDIjA8l6p?~+>hv4oubsrM|9lU zVs$J24OgY{cF`g?X40U}hprhk6G0ub+iF%O`sU{BXgJaO+W2UFG-EoMSy^E_ivnYT zJPlx^EHVw!a=yV?Cf4JBMYbF?Gv%TxVcjwnzlXwTs@iiFQVc(%f?YLd~@pd@KWM~!Ltq(bo{+jGFV{%3VP zPvnlAVVC)qLz#;%acBiaq;)tpCT7L1uTAAOOxi7Yh`%Ni2u709*w2P=Lq$xd0Jo}d zT=PF1r&Ue0IfmI7_)`qV(@mA+Q2&KX9Gb`A9{q`!`aJMMufun$vbZuS7pFUAHsh)< z!4GoIXt+-(uCyM2h1OSYKw)E&@APFehMp>>qIlIn5iNqvMpwIC(1 z*f17=v#L{1Pp5DP;W2$@^@s9Y=^MnLWck$A@|z(l>Wen)&)qd8+++Q?{Yqd27Amb-aDA9@aFs6f)L2?ut(=V<<3rle#&~b5@stQ+|bC+_8-uvoIn=;CX#=cBzo@-Qgv~ zMM(4-dKyfl_X5M04YLXr_0KEfBU6Wsmi(wwb#Dn3dQjH2i8E5Bl}Oh%!0;= z*~T2&;ra>9pp5-jp4s}++S+sxhmSc{Z_;Gy`%2Ar-aZXm5c0f4ieiJba|Ul*&wAf7 z?`~5I+c-5(MnYelkSYBrC&Jye5nN`}HF<%!a)}n@{Jif4B{!@B3KN`+~%5rUW?(E#8(xtuBo^Hs5&dKd_GaY9P)2X0b zvl*TKvGLMD9pH*9I4yoPjPVugLPoS=8REjAJa#$69w8HfV#&u=SPiG1#ggS=$m#)u zIi&oUA4Y${uTg%-EC;$rZiSUaiRrSt5`T2Y)r@AnOs{J0nd9MC;tGDy0FNDN{#5Ex-;Y;QV{ zPBhS^Ey=HI_i)42TaC(TYue=!n504fW*I((Oy?q9&2k&6iJ;snOc1A~v4O`+q|^Hb zye;Yg$PKteT=jF)aw{Bn#0<_7jKwDu=k>n$I%;&HTQ61;8{l}gU@aS$z^@e2csBckt>m5?X~en8=~1e zc-yjT+U+T5KOHeZDXOsHoB<_2$&Vz!R=}Ho!60s76RGQVM6{mRAK@JA%`fIObN5o# z__?yOqIK5|L&9901nzAxRay@2v%9DO!3Ns3r5my{_&L+qd{ToZ%C%`;JJ%&_^1oKTdXD0;{yt0w!41HJj5bO1d2TwgV{H1wT?5I zn1*Z$+}8U1Y52<02Q6&$KbL$2(Hg9x0U`-A{9eOF9+!vW<@OnzMTwUTwNGau!hD{7Ha^egbtBb5g&6PDGoZ;o| zBY%)M$vY~5an;r3d3B9n#?eqy@@> z+lNh1OCVUXe1mM@`dmKrC=IuEYJ~_*QBGM%(T9C^q0o7yS6z}OGQgx8>5OwVJZ*7e z9y=}bYDg%3YT+}vB6LR=cckm1)|K+fY$l26t4K)ZCWDDU?HIK1HyxRr^yANF>JFNJ zJC|a7A+EkZ-8Vg^u!ii#LOg>~gV!!t-x0sL{VQpk;i$Kx!BaM~?%F4yEA>c&@x(5} z?Rm&{NKgs@3||z?DDl^ zlgE8wyxa$BrjY-X+$>3ypFzGL^7daTrU(n0?R2o_*e@B5E)O;Qs*=$_hSs~YdDB&c zTw{@ZKYe_KihUUYtrr4>wB9lYGS%+*h{Nc)5O zzH<>N_Tpc@ZWb)`g)fo#{qwvLIy(|M*<+4=t<|~23CP((bzZ-rVCBu|WvvTaY!_BC zBP!Oz;K4p=*Z}B%{)C#9LQ3>Qr}9Q4FuwMU@sN`vHmo}R%#-CMLhC9g!PpiiqNjoD z=BXc5n8E@aj&#GouYWlTT*_t3Ao>b0&E)!6<(XrAn`ZLa(9%=~ ztEvw15H6!y#7IqX69v6Dj%$ho!g$m_F1sYLX^#)qo`Kdx{l@djv-Z0STw3ubfOojP zb2}Yw!dn?F4OamRGBjj2@PMD&=$Q`o9v4(M3KGVvE6x&fo;GAO*fFwc{^ZwfjJo9aUmCfHd__Y4T z$ipqSb8|JX&$mKWo268{J3?y@rH382*&7u$txAvT(|YRaFwM#74<|pdL0pK&o3?7G z)OOk}caABf4|+AfU0PIz?cLR`r%0op*}VDIq*LEm`36NXC^?wIztlr~}BilYSn z3TiT&!27mptF^;th{_p58{>`kc8F9Yu}OAB%gg} zoM7lx>_VrErS!D~fV3;khKb&F1+ zb<}Yjm(=Zq&XBOBpjtk&fCi$>*YJAi=r%Am$!oeFXITo4W%YTiOHvqtE@c~)ANt(i z`Ij`a&xjp2AWutw=KDM^ed_De(v=~EV~@dK%a_yE3$A(P>;AfbXZv&B%K1-Q#^gHT%Ht{-6F=P77C}i&Jx1HDIPAF4mS& zLj>Da@?KS}Y7wOK{V>ASvF4Gl9@p}|D6Tcy=%;NvykC@k(S0$hN%ss&2hc029%4UU z_NyMhHi(0=FZ=ZC!#L>iYvVb6Pwybgax`Dl+&<6t7UJSO#l5E#m#W>kJC7OQGVlM4 z)4iwa)19ZGm_JCU7PVhWfPwO;I*NMnAwzTN7Pl%drRx~jXQybpzW6iaO4*OJ@GhqT;(^XuyzgnA<|of+NTEp)t0me) z`!h7ea7tN3O9=~Y*I0U5HNDZ18QIvSTH_XXWEW)9&t)7)FV!R9r3o$y&cU?tCP>{Gh;QP4U9veWc9Y3OoGlO=Zt4g z=@5_mupj}8l2CLeU+O9`MMETkf!HF~VODdEVaPStzR81XY8WPwYvI{Q9_LHoYqajV zX8@c;;182vjI*BO(@|9C9vhvmX{}wPhpHbgb=S*r>~+_VXaFddk>UeKw6>B3jyJ4J zW<#P_#R+F^s~W*JQS8*n^@us0)B1Yhv`@j`bIZPbWz&kmYpRHY;xJOeA4A>ss^qr8 z=jaINOPm9LAS4p}c=jlq>s|O2!t^N^e)tCFWG!G*2sp zK%zi&T57m~=rkfa#qo0DL?Y5sZjUNjBwGRpPyi)df@C7Xt8(?V=0pqTc(cg$Giz_f zxgJ+@g-rwSxV0mwcDi}m>#%mD=F#f&*7HaH-s8?WU;6rS0HWue|FrYY&o7V6+t(() z2JPc+N9tI%&v)ASw?AuUpT2$I!PWnjXEPdU25BJVX9aE$p54{_oY#e8uB=OpVwEtc zM{PVD$5I-0IOM1`D)nfUvwKi}twH3EZXR#~bR}}-++Z9@B+Joj?3Rc&cpJy9!;&M` z!4Mq4{GM2I+!_aH)fpp#Jp?B(zsAw){(&$x@mOCAinY5?3wi%=k!Om#aT)31YA5cD zqkv!u5i1@5HO-&Zn;+71LyJ)1T@NqEgcv>mc|XNF@1-cd3l8@ES=72l@l{f>nsscr zNk-FeJ7mFVa3F9ln4YeFix+WnyRENF)arm?rG{F`J_BjtkG>YJF7?A*sJwIZD$W%$ zKUc1(W}mjX^MJJ-Wjjj5<9C1e zcj=qI`J0b*OrJ^1oq{`!OP4Ou-}yU#hn#~N%iPK2j;8%N$EBm=l=Sbk$QaMR>6^ZZ z9z1yPj-CJC{@Z_>KKFA!H=S#KzJ5(|U{gLpnc1gjA9(%h|DD~VjCK&S;e@F=OilSB zo~__qHPu^IDP1h@LCUxz&pU9g!P3IzbJD`>Org+DmI9WwGWtH)-(HPyh`hh1hUeI^ z9^yHGO&v=Q*X(4w^Yvo27XfMwl{oUai})3(;r=qdE1u@M>(l<}`W!n{iCj-1rEJa> zwoE!W09@O@AMQW7Qqy}#c<>Pq-r2q#>B055_CW(RA#mK6*{ix&PITl&g`6yPp}`j5BIY>133W8CM?V?#QgzWok|j+2!6QB5o^t9ggGvV z?+t=vj6I(*5{WsIAE~kmXis04^ssVag5oe~w(1IM(UYc-s zQ*9AW1rMJTyj6$Njv%LjrSfe*`lCN86N`7!a2)^mAOGVC=k87x$LZIEX!880We8^W z$yz0-U>ScnyM{|HV^@@3SED>c5CErJNuNWd<9nQHtY8>ktHu3?< zv2lnkBodiW`YLIg>m`m_AHMNW_#VZvidwv8$Iou7A|FiHnU=GhI@==8SQbDaAJ5H>1 zR#$2Vgug1AyrZHT8<|csh9#ksu8o7zwrD??zu4*OkBPc#&sl~^mKdq~i2{*bEfB-# zszk}pzvSRRDz5wNSkaOrPF0R$DJI0Q+YW`t!k?f_5@BT0b6j@?dB2n=ttaQ|N3?Ae zoh?Enahp;*>4ZtY>&+vZH5Hr__`7^-tIsu>*lVPi3bxG^Hj3d5I(nC{;d3`-RV3%; z0Bz=jeqSS$evkB|9$c_C9DnaKy$I(Xo1%eVA4m!9D68<&!ERVI@(5_SI?p7iu?~@s zCsk6A$Q1ppCTx#hR~1Dc%FGJCCkUir-Te4FlWI7f&^SvmPJN7}*e{nSRP|UKr^+&w z#xv|3oEF_0GgB!<{dK6lO=pH?`ixti4xaXKC-Zmz?%$;s!QOb|4T&Ig;LmXYr)f^6 zJ(0*K6tHP6FyH&V-z(|h7s24<+hC_@4i+{8H+|-;urV#=(ez0WI{(6yax$l>s&kcd z3u}NPS-c?Q+!6IKi%vS0`2+1?ide>@^tnAint}y7JU$P2q=xdG4BJDJ5+9{t=^%~u z`-l7<@XE6r%JV2&4-ygecqy_fpgz zu5qL3>Q*-5>1mVD_rv&REE^9B$E%&LaIB@?qLF6P@K4j)5l%a5Ya@Vv{KtP>oZ5?G z-~avJPfz$>&-+8&vBGj^37ZzN`t#fYPeViBzkgr8??tg+`?X(_-=p1EJI#@{0aP>l z)U9!<*0E4KxlOGO6eX-OLkxqRNnS^ut}2pNiF}Td0vg1w zjn5$Pmk`YQ~EqB6BCX&9`UyO2b_cbX@7PZ3Wl4ANmW=hxoA6BC*{ba zSlG&k>F4HoV6V1H z$kc#{Epkn7_E)kRY_m5tLg|)z7PSCK&fPG|DALgSj;RX>udtCLLqkuI!e}(&q%hAU zg!&NlRES-d8{ZC|$Yr$RAZ}e!(tZ#&@A0;UbYb%z*Nm_qX<_hHBHe&=a4*}9pTnt2 zp&g=wp-ELF<)kW$VmosFQEnoDm7=9a>hXk=Ewg$mxnl))r`2K$xsgk2BO{{R`OfSu z+q5WVTF+!Va)lFn`0ydUX!e6Y_=EJ3k9_1vZ)lzto>qr#uRo802~q1${nSs-8Kblr-*0vshM3p2?BJzOrq&!)P8&cHN`S2V3Ul}6{Rl^2*x5yH>Qj( z(YOFS02y1~t1FC&l&5RE@}nn_E2oA*MLTScFEQ%PHADr6sL|r-fXDvsd@aK1Qe)kd zx+}_tkR`?PslQ3GpWF0!Y(C}LqabX6oIOp25oA(<6i(#*uZi!HtnhWq4WrztdgZR^ zI>`$x>xvjQ+*hijy8lehRkFX)^2Wgk{7Df}?x@%C8Hij#+HahTw>I^wuDjfv3C~_@ zuA9(JUAl~f_hriM5og7b7Cv+EM2~~R`ln1u5krEbpIZm-?g0IjUnJ=P3^IG-XnZ0FegLq)|C!qFw{q@)BJHPWg=|#0~{Kjvb zT6dgAuF!U_$3?F>hzXznqS_Dr&<_d7EU$~_De|_1ou!CBT`RO7u~q_q1=~m?q4J=+ z$Vi~j=(}p*ApGgFr6Z-T3C;*EqK!@Gx>GgkVg9moW1!|*sHkTm?;kf*v~a4x${=p- zA9AP!2a9B+ft&2`1@yGY$n}khG5ojzeF7~!!8oCnS)n~N*NiU_ zP1i(bObs*B@{Ts*Uf+II`iAa&jKZqR&GAg3<_hG`lbYmNln@*|8o%5vQJuheRnI+?+9|gdsDB)G$9C4!zdu zuQ!n^IE0giE6l}!OFhpq3i}E|*V&yb;dG3cUrGCUU@)XGqEn}KtD6){L9>+br)$$l zA*R(?;atA`+rOP&Wc!WZ_zn8iU;Wjo^~Y)H;k->HcfjphE1v)4PyQtR(l7lIy{Lvs z^LKp5cTD9pZl6~?20=ZuPr}%NO5-Uga7=c5t|E0=G*Ze|D|x%?RfEqtwc zAISUT6pxyxg%eu%h^3k!%*=`VH$SYT{Rdx60&PZf?!5zwt8(=yR-6`= zu>8%3VQZ+(y+{gQAg{RM+MI5}dl)XB&|M*RU8Du11(18kEJmc}=Cf+6&3r(oC4i=$ zdQ`EVpS_-ipx3&7LMfV*8v~9NH%Y3sno=v-twwg^8Je!5)KaUTBk8L`)4!okDdVC5 zMairU=Tot1gKOK#wxd@>tv~y-KT9vV{qukR&nG4Y(^8~uXPX0`a>trSt}k-L?)Ec3 z^D_c)YLovzuPtfjXg_r;g7Pd0!$YktIXX`1_*dC@rOwnkA#ke&(R_{01fX{x5W|(C zgUgN~>KdgS;SfNk(1RENN0BY$R4-D(y=qu^W)a%k((8)MBS)kbKGc-#bi+oQ9x4&r`beCU(#OKkZ~pox8ep(nt!>`M%_82D6Kfg z&UDXSE&(G^lGg5XJkFu!j^-P_;Tz~A80wFRuyd!y(SJ=+Hw%VmWgS&;Z!eG$dyM!O$U3pnnkXz zl@5QLS|2gy)-evDPS)+klp^j@><<)-N}d)*sc&ea=?C(4F{!$i*%(>^^lFR<(u#A2 z&af{*D-KGIku#+5HxE&F1>{Hm+!qlUKyJ~BgO<@dcT9Hf!}i&m*>^~$_NJzXVMc;z z4%Pum+N){)R3g`SB*1lbb@RsAJuC=eYDgrc705{>NWQ`osJ0B_U3} z_{v2kkVr!5_@lAw>GVxV3u6iI3MP(4ISQG%REiQlIMf#7L;DfLq1OE<`hdMWL7bzS z@T2p8KATb~o1x!KPRWb%)F9#X_8QxbX-pERvAR=rJwy~RgbJ*fK#QeieJl<3%${S< zt25?K1`nizfBL6?`ouUF*pK|kkI>VnPm_a*aXK+Xo;uA_sJUZBKkE|Gh&HP(u~nS)`eB6jOcFF*1y|p71}R$D)dJE4Yi{9WhhH!DBsL^)qlnPiu5Mrs}l>MthK!&i3$d$dUH9r!xTzlwmjXnMG zIvllvMK6zDVTT$x9XNl%JcuOroAL8NiG^riTX9Z-kA7@7gv4s>Sh}dWKGOZ!?>xAC znI2r=3@RKFvZ_c6gNuQ)tWtAj2eyWNMRIP9Tzc+Cx`Z~^^PijRp^jNQjyu_OxhEK! zXu=wzVLSk0QU|LF0a9~?YrRD`T>I{NgJKpH9~|_7A+#`4xInRK57q~ zg`HW%#Lzq0dpeaB?%gaMOfJ)ui3#hP)>=_rE##(!hy>3E74Q`5Vn)&Q$=EccY&)W9 zJ0m#OljdAt;QmExP8;0Q?q59)8SQoEpZmF=qmyPxjU(D_*N=}&5w{)g%s#OhaRiYA zlfZLMi89y%jk=H#uTlcU%7G?{c@8E#!wo9foa)#}C1jiJtN37h$W9PW8433QMrY3{ z4v-(_jN>39lgL|g#GDIpLF8L#iG6}p4VRZC%lQo42qOCOG@RK{wm%4_i(Ytc0%*G5 zJV!eYN3N*1-exDZxvX+??pW6yyt|=jVfTw3cgD=2wj-w^OxK>v-$&(sLXIT@ ziKO{QGSeC4XVB4^QO{;%q0^13;mXT)pKDO!h_M%3al>eOB<6~(Viir0^(QcZ0NtB^ z@O4Iqn6{4VP|R9!-jW^Hf&$CQBJ#)$DN#g0C)FS<(AGt5r%L_2r?u|j{U_Cs8prR~ zo>a8!>ofb*tj*A*gooOelL-7l>tBKPrVJuPf=X9yr7$yJ^U|4*e_mRXx+{;LN+UZ8 z-6KbWEn00I8U^CS%ZEpg-L<===2~%pWpuc^(vGv6B3M~2p4RS@b4Nc%YpxpXt?CEs zdqf_!u}!cIW@>M@vhJ7$GOQ|c;$U-bh|E$e&h*r{y$I5cTCW(2uX51cdDK4E4uf|Mg#=n(l3bwsM5Ax8D5nFaI)~ zR6}YU6QgO!VRyK&{N9+=T|WuSl4d>zO+Y|e&Qept7(>gH4b`Z1EZMtG{@xDoD&q#H zg8FMI*x=^JN?vwkiaOdRseabd!A{`snMjQ5a|owYsAV7Sm4hsyKTLjMNqFc}N;ot3 zFEHV=?>`Liu<%Lu__1oQ!B+t*gv_fXUmskLE=sdbN|=PDV~%k2`Ilvc!xO%Al0<@< z`fGH3S0N}4F_9K;WM3kZJeyA2Pq!^C49U5>NDFiHx@yh4mpB}Mc%B+T%QZdS+_A!@)#N}(@SpzE zf1;Ca|KeZ#i(}Ki`Sy0y{ypFGJ#^9yty5^tL1w8Pt-lqJ)6AY@J{H-8-y>NQIwb3G z&u+v-u8^Bkb|(H$08IxPy&7NTp`e8a zKL4SC|7$}(6?7Q9cs_2WAoBWZ#~|ey1){!%=m_@%r;BA)mzu3@Gtw%hNHl5crBEs{ z>3j`9=TS)Y+L;||?Ow)wAk9;vxpVnP|L7ml%V4M%BLdH((i{ohcDUFF^~#f2XP#!L znLjTroIBW@TY6^Cw}wiXTJ1RKdeGKET{h%5(gRUS^Irfhr?d_Gq=6JWS)_$QgNvH0Acl>5UV<@1WdJpC zc@h5P?2aCbQtYaJID)%e5$7JMj}m1Z@CyqEqD6>E3oEQBIB8M}D#^+FvwExRp=TN3 zVj@ztrRM?U4Gq{Sy=k2cDSTrRF^pm`4pP9vkethFuCU7*o=ZxYPx`_sins{d{yHuW zU!>UIDYO%3i6A$(ha9`~xTa1gn&%6CDA(VT^mF}$H0$$80F@@7rbJ+Acr}|r34uS? zVc}4v5!z;4`9n;4zQ(~Q50f;LXNOGfBqjHh3jY z>F;#s0y2V^#ks%$ZpzWKaH{TD{kg9rV#oe3i~ZJb{g&_{w`=Nc=L*N_>#!Me`1w{_ z4{Jl)Fj$fNV%?SNeXhRG*t}az@a1L{Z(pXbTu)1i%QN}c2I_0u;is|VMZ*> z#XITp7&I(-e$y6byHR!%an9v~*5u0w_0v2N(pMA5xdN~u{;T1*m1P|~E6{ITVb6Q1d& z&_SuGSEn^A{9d=_+v^~a_!xz|Mv8oY(4<~3z5Y7o6zX|STnu^hQ>N$2w&dgy>DsDP z`aFbmJvYxO1ED?~4nm`?(4R~Tqo)eRb(=XMCF~3$05OgIj<6bRN(FZ?bCV=-tO^ne zFd^`lo6X*1H=E7=V(vbX7A_Kje^4m=4A69}O&cJmIoTXliseZLF-^0){@7OdamVTo z7wO=aX<`BM)|_c{kgyrJ>65ntU97yUi{>AhUco9<-s@Vl2>dySXj*Zs{3ZT&Or^9i zqWGHS?i|D7talxAsu*wipK&*%9B^eEiC;alXom6p(80ooTyZtf6DSZDT^t>et2ovr zdH!sFCm?v$r0^L!2Zko7;$)wDNx!fO_TX4o_%fiq#Uj^DQcB-jO^>TauN%rU3@4ja z{bP>(bzgZ@6{l^ISI(IJZ3SO&!$M^^^-X)->#ah2{2u@Qd$fA*p3D?3@ku@Cmw{Z% zHQBaZ4$`zR%;+M)Ke_}03BHiHsQdmFa0?5G#GDnq=V*X@ePPN9AydThR4`D&=5I%( zA&2#Kon^T)j&HA&JG0V%(V8N0b|xa9+BKSoK-(31V+t|05o9ZuX9gmOG@D|70z0m^ z)g5aa#PqT`7ub*e*pDUE9CxbiNEYbYpa1!vrge^= zfEJtpaHWn@r0s*qxEW<@o4{YJG|u5l!6_bFbjGbOGV=aT7O-@Ad{vbkQ^)D0iYxSS z(py1YD-3(6xdN4MfL2j32`*7cg6Y)wv>Vw2wyukqDW6Z!9=21%iA2J}u9Ox|`Q)IEm5Z(L z-r*)kudjm8ctaq{$*#ASiWXjt_dd{(nS$u)oxd0_o?D4X3|}xsoUnWrjx9u?uHw+% zROOKt7Jeoat`WhC3cUu=2Zgb9V0MFg>!GHG;b5_x;AH9;%~sd=E@h*Tb7`X3XIgeM zBm)0ZW^Q~#>33GOX&YvR{1UZS(x_En>vCh(;z(<>yoN?G$8FY%^L+D&RF>Re~W>;@W{_B%6+$ zgR}&-{63cl;aV3@Q;;rAIEe*{r;zQGnkxzYp(A->Vgj_F?hyxh>|mY#5GH8hYg%qy zBUO02u}1OM%4U$j6|JWr?$2tj^4THd-Vc++{a8+lrDwf6D*v)@Rf-;_S|A z$Pc+Wskw3(3AwrX+WK6P7B+S!u|iYB_}O}%co^#s*LAr$x6vr2EcA*{YS9@Rut^v+ z%chT7BGjT(TCiGcuUc0vB4&L$sm_uC;1gDsf4ii!it8t`7?0R??s)vVVwrazglq)evO+Hn#?Q=q)wD!a&&iBEK{12l?y>q!b6K(Ep-6W zeoqN&Y5`_YrcRU3pO{J66TcDc9Aj$5(dbn+%T4C#V5>p6U_^S|H@Xy9Z`Y^^>#0BGgPa-2wyY zXvpUMg>t0l88%VHf!16Txh5NXZ>s{DItFA?7u-z_7HyE-p+&9$oAOWS40=QTTJ8Qo zdGAoM!lKg+ffn?-LJbX$0Q>B#O4^dAgDYTkver!mtvlO7-VdT8bf?tNbbVbjsA35E zNI|zq4d1zD?KqwrPGYL0EjadA_m)37< z7XWrEX{_@++>D99-zu@_5p!C^COD00wU!IWHP~V{5=^nvOs$ai-H*5l~&DNRmpL=InIF6j;4hlKi0?<|5gMoEF=;n+zSwsk^Q%*7Ec9G z(|dUzC+-&#iA~+-8ik3pFoMo#h~XAlf20g8>@UQoPMhkj(a8IA`a_tp3O6LjA6(O8 zn1hzt2G31c0k{TQtgk#_qNkt+;@5(nUt=W^fz5Ur9HhHKqZ z^1dadYFg&wOsZ;}5aKoK zjiJfehHE46pVeHCw>;vQrh<~E1y4H7;U{bRoV5XZ)(ImXJ$gj%CPVa!$wfOlJ#Kww zN6j<8Mj{c7U|2J1QOB;b!iZIPj4A-8(tu12@C0L{b+E;Bv} zk<-EmT~|(B(3|4%R;c?pPRpS7Ghbn7VPJ+fNzuZ1h;zFmrBEgAC(Yyr>!i_3DJLGH zKhN~hC&bco&*X^VVBxQG3!~2!fTp!Is@K=nYV-qbevn@P*)hq%$Z;anzIw2#Cw2wC zPeXF(>OJBU#_#~wdX@{dXF954aEh!G7*`6Bs{@+cFmoxCS6BeTbyMR_>0mC5E1<~? zHCItxaQ29irHC^|E{kxF5J>1nk=|CRH30crP)z!Ujs!N@Ch2ue$~P_T))`9pSer%! za9o-g;@a<~sMQVBfB+5t;xGOpz1s|`Ihb5bqe7h7Temc2ognZhp+59Z2Z>xcP$-R4 z9WP7qOIj0Kgu)tDq-Pqr0yo@IM=OCzSNmMaqF6W7T_r7S*cewcqe%gl1~qIBmV>MX z6LDFhhI+m+#II*)8&YfRVYVDCJY0zn=^uNE(maVVh50^b}K2>){FHR20o?8>Z_@h89M|4Q3{%jWPpTcy+!xkmCGB zr9XVURjh!x|4m+%VDhXah0i>BLQgK7iOc)?d+*??Ne>e~LT4&6Z7Dea&dxP*<@K<@ z%xDgTS^9(2l6sK$i{e7Xb0etU^Yme)HPPfy<;SiP#*R=b#Pt@E(=Ua2 zUuSfY4A^9#0CCX9eVeXA6`W#BFnP78;>>J{wOMzj^)F(%v$I3*R{PM0K1AH@AdF>SiF$`nT!JLRtNf-d~fMjf- zP$%%`usDL1X>{ZuhDzYiOdf}WI>Gw@`vVEo0m_#5c*AOTOs~=P%_*vU+cmzrJUBu1E_D zN{d7B6;k>`I^Uc((!x)=dT2Wq;)8i(cgg1^2D?Vh6{s;z69fR70M$ka3n%Mn;q==L zO>VB~zY&D+SW_APW6M2NW+-P*50|CfB#sI$+mUD1zgktb$`8wSM+AFHm`s>BOUumc zx#o^Gf9}!B*L=;_(Bk4Ez1!@M{E!ilK)Bx}Qg zdzLS`*|1iu`O;BVAGQ274BWz7_rn!C8{rimuEgwwr6ot2eyz_{3`EQ&g{7yvQKD8* zU9mwCN5qFfiRDTOsJU{1ybrW+LDJ{ivp7_s-Ueps!l{mwPdJ~Yja$k%$}Tc)Ku+~I zlvUGdFo!fx&;$)TsXB|vZRHLx~sP3$n%kIQ^NiR`_ePwetFaYHE~$f?ML*wg31<=>tWH5 zNgRylQ(S_nHJWiG_S!{2rfoRFKjiqG9STszIrr>wKrnZ4NKr69k23nhWOoIOd;6oW z9hsHgP>QCQ6G$8>pQaa@5^L&n&3DRfRSR_+rY7N5ymo8i05y$^zeKLc)*1m$olD0V{4zD}oBPbNbO6TPXRCY4Ipz}4-vM6bpTSxMh%z{SHX#S7Rl24?FV<_{!TD~UuuDvltBWiVbgrjn~H?Izf4f|1X7Z;aFLv_%Q_W) zQ%1R|g~-2-Ghov+%N;CiS|4LRXny_Ie?7e$49*nJH9z-1@hAR-G1k2N_E-MOUy)@# z@oJY0a{ELRw0EsxP>Pu3b6$<>pmp@>X_H{94C15(tS_uO-K?=0TL-erIi&|-gTh$Rfayob}d+R(+-tS9K@g2M3E0*!#Q1#g& z0F_>`W=tbFx#$AE<2LE^R7>--g!mPBdW*rtS1YSsGz1c8(w@~? zpJ&gDNZL_|Z~HyJ=l96tWjCaQ&z)0nf?o@y#=q>#zKmXW`-6Y*56VOWhI0pC>A0x0 z9l_4*s0rqS)4#$c;o>5A0X_Qgq(BXmwiSw6jsTXl&ovjI^HLdX95vXGQL?hyYSjuL zCdOGy3qxz0BiErxgZitEn+d(ScnAW2e!#8jXn!Dmt_y?x5RuK~s8y(Pd0lWid*rP@ zL1>ylB5~e7S-cNDa55uPYZC{%D?UWtd;Rup+O*D>t*qBo)ZjMsty)4g&@bsyuu82~ z)(Ocu4QKUBB-)jC8X`)aY7Dn-72p*HdH>4Rq%scd+MUVeJ?|&Fd^yR@iC8*^>yO8v zKim%9ii2o1dO_M04}_$dANzb!Avpw4lPc3^Ga1OuWg+XZqZh8{P7i=5Fofup2@Qe2 z&AzJiom2i*j+Kl_E{fJ662GwBU@FyAD}g@{!476BsEK5Y89UP_vi6{uKQFAsDIZ_~ zZhDywQ7eE<`MLY!gCG1L|C72*FSFtI_49384qTc!(@$(lV&mhXvPFQvUvMCWMy)7o zRo-J>WffH~f9VTct?i_qelMw^zcsPk;ZIZ=M4(8!7QuEiMANVsO0TP9Vk8x8fTlsO z9}fk{bSN#CaIEw87abw{{RLs}Lqd2*N`~4&aH@6AXS>aKUMDp+{Wr7fFB}*Em(#+i zyB?gq9@gG}JtkUT)LUj+?r?eT3IhC@K zRHhI?2`g;TEXfU}Lg`6zLb_xNYsHy?nWo!uDZlpM>5kQ-n9uvX&!a#4Xa6j{toBu3 z^;OBaAT{Ub?GL>Evf3Aa@fS~-X*UNVR|G@7zVgCj93Ohm>zwcl zqYQX(pbi#U8@0Vef4J;`ro{}?vP^M1Lkv5R_M-7EjB^qRlrcHe3KFExS)m${E6SXk zTk2T7702JOp1327s6SYrD>cOZa>*yt!WyMUYuRzVI!Q6h>o?iIQVNZWA|wN`}O+)$lqMmUk?PvfR6Ahm-ma`hQmDT?W`Hp$L}n+}8$Rntmcl`Z!v zJ+f%SsT3`Y@0fYmBbI|vyk9YYvP zlr+cNaWtH8vO{sah-iHPg8yegeXMgC zPXZ@86z+IoXflk!zNzAP@C8eq?`7tLz%T5e9uDS^6vpG>;9|UTUuk(0gCJNL5V?Nz zwXg|4#*ypooyK2?etBl=?hbuxY{0*{KTQlxlk5^fCVx%ilh$1AgUJiKTPXIjcfW3q zb#15VafPiCi2Lt{a>&~s*`W;WW8Zuv1?RIIv2Jr(_$jstplL@Ng3DdLc)PS{1c)M( zj+8L61L$#`GqrlY_?lqp57)Hu~dAl=EDpG#GA0P0O!adcLe7w}=Y zy-M6v*cibV233jLqSvO!H5otz-h<=oGdp7W;MgXQ$RoD4qe0K>pZPO?hF&)N^MC%& z%lUPH#Iy&_IbX-)Z~TqFK`)!(_e9j1PbTtvpdFpIYq7J)^{5pVxdOu+ud{1LfMlv?3k(FW<|IRKf!D?HNlu%v~-Eezs* z&>sqUztY>vCLQIR-}kEi(KoaQOs0^dEJHN2mgN!ZacRGH1d}@%JpWsN>u=G^U_b^V za?2xDJVbDUAJZb)KlP{n)JxNv^Oye8UrN7kI~Cq`uz5-t)_y*-%nFTIb)p}H&_>3) zqM|%7NLe^bdX`$Ljfh<#oIy^gW8)%H!59-IaCALk>@p6M+lp6`k*}{ zf>?TSXxk1l_-aGlFKJ(~YlevRv`Kv1!R zeeXxF*EiV1-@bmGZlC4dKFU$+7ft4AyJo;r0( zROK-f5g}Z0u#1)&&J1Y+yYS*#dk$vmPmn%q?qMjirLOr_o;StrSZVvm{I3w{;IX0H z67}I&5pQ`~LvE-HHHXfxQX*KJxtSiKTvXeqD9mBk)vOoild$&S>Fb^fZKsB@L|e}L z-uFH_>4tPL2r}|Wb()jSo$d1Svb^u4+ZTS}7t$a9<9|Fk)^?OWEn00)#%7N77|X_= zI(05+B!E(tYPMP{juZHkNzi4E(w%NqjlK4X2sciSmmOE`1T$VHk}{%hZ}PCviX(tw zNf86cWNjbd6ozqHc;4bCtGXIP6A6LD654UtS1e0v_!K>5?+OwL;q5nmU13#t#rW+r z6M9}AGOp&}CUE3~Z4en*E_|*NWzg+$h8V8$qO10M zMMn!)S?X8#BRH*6I=e}&e8LnIK;Q}#v#juRYeyXUfC&4@?a>qHASlp~RScJ-LmL?(Xr`MY27D%L; ztIQm>(#u+IhANH{Ry_lt3DGOqnLI7LMB0i&-s_|`XCmq1WF>MP(7-eS1ucwRz6!a< zUL8fK*WcT%JT>9h#GI-km?mH2m9oqztmTRGA!d!$rst}yI60uHj5QchXcoMFBAXVG z7*KH9j7@@cec-qX0gQkPpbXVKl(=#h{>I*N3h2^ z*tR2$ai;0|9Mf(Ep^6JegUB&zkvY#v$xLZEZ0KGq8Skng%3|zTO|vzDm~0GnG6`|G z(XcJ@T34%a7P)!=+e6qYbhQKZtx(DVZvjXo(29d?oT;2gFHU)&*qe;8PcocRbk)l1 znZ?sF@g`&(fEST5wKg1|g0A9^1DZ%8ACdG0Zr8G=#gte z2pb<_&N`8hQ1;kZ-;mc3v96mpUo#4c>rT-G#MQ^{28mnm-wRhbYQ@QbTNu5r6U6=C zeH42l;3lXV2>CMRA#ktNF$Ph!9M z7dQcA@>E8uwT_$S=Z@53H4VZuwUidFvbmhmf`LS$!i|ZvibLtJFT5#I$J(ha>6LmG zx=uAm3r~BvwNt^<94tuvPh$NM&IOD_$JJNy923TT>F4eHe!&-f!HGy~P)0gH+S? z=1n~YE27GJXdG;cT=SZ1+CSH-i$?WCpn#GOjbLY5zv&0KCVy|coU25yS8>=fGmxnD z{(YgH0$OXuxE+P_Q2$#2;Z-Fs%u(xtrG+6mWCQ1%F?b|aVW{HtwdR_D zOh(*4%CJnLE$C?qN4McnDou4bfxnPX6K<|ftYXLO4AM)+# zgxC?9i6*FyRvenyG|T&3VeV|FMJ&fTSUgaJIf>CLCI!=4Zu020jU09-i)-QgokU=l zx8AhDS~+0td4ML^G#00sO)Z_Ao{Yr~i#-x@5_%J`WIK*m^;UY{EcfR{3P91S`> z2#rVPb(16#7QIT`D*LOGmGN#vD4@bRZ(qNa0@_L4J3hE;kequDMQz1d70B~_sRb$h z;g+X`&nG!olF0S+X_8*oef$_a6RDO&{FV&P)TRj#g!Z8>`#eP$6xq$eGa(E-@~h9pt55X1gDt`9!vB!QdIdIOfNX_<%|F`SnL^7{fd zLkPbG%j7R5k%rbBvho&Et5fJ%t+*A0OC3@rSXLTbP&wJp>f{j}2Rc>K5|e@#0_sJx zf`$@qz9(tA4l+G%&PL)t@EGKIsKyVlS2)-U%kUGFRx-(uDd!mh_1{3$uclgLJT_vV$6WP@|;wzHG6x87S4f8x|80nu@P9mX{7z| z;^0~o@_rl>h>qFY1861mhj$Fjbft+zFZoKA7Je)#@v|y8=fwRBx|9t1!ET_OM1r*L z3OX#1@gI8Lz-q2ANegohUnPwwKy{(%t%{$IV-sns<6xTvr-c>oH5yIM z)ZpmZ1udHSo~B(AfXSfmVdh(>Tbnc@U*=IPY#O0N+v)zzzxg-mBp4 z8i;FJ?<+p0nCpWE^cUr{ScC0gp`qoX6t15kI8=`4>rF~o@$C>6#QZrW3DvV`@ zB@u8*CH<^2c6urpKqse_#j@*-kB#-}Zd6Q+`c(I`D!ihACTNPv@D37*;XzPl;rZkT z2>b{0i!q9iPy$52b)NEnXS~Hz9gL)fh1dSghvAYF_j5M&-s-9%hBj5pR3RxZfW$2*h0d0wBm4D7&9oex(b26sU9rNFG}>fu|Uj* zSg0iQM=>r+)LhlY4zs^xy;WVEJ#{sJl^>jMgv8KfHwny_<4I~Jt)rHn4p!Dpnfvjq zPv?LNWfHZCS{t^V5v4GOCYsq1d!8x|?6|g^<5-)pJSp`@q=UWnrtLV7LrAwD?Fj}_ z<8WFpx}o(39KzGi$A9m3z18hFk@Vvn?z3*cHJV{K{iQt|pdFLfn5*1Z2ckuEd7^(1Jo3LRSQe%eTV~ zxO4fKcGsJZe?<20v*kuqQA^=07|){^V4AL)XMrK{|a^|^w7 zl4m&Jq7=zFuDMPS`123y4z>#i>$TTPDY!;?3d8BTI0c*$`8OzG2QpPnE!DbR1sGt7 zUzME88n%^0LKP_NI=*ZFh5G;pGL32L?S0zsJI>iob3%B20M`ari#;Sv%Y+4gh&u5RCOBr zD7DfE8(kLXcBJ;20+HCX-*gPvgqEDHeTHahl@Sju9p4q`5ExfIftAl1GWBM?)<6POgALw9JUjr9D z{MPLzExf#QJ^8m+z254+PtQ{vtEYIw6qcq*6o3i8l8dBA-6m(aF7;L=k^qT>BBvjP31K!z*=R(TXEb; zrW;iRg~`N*p_eFER`)CHbBjdgK`%X=@i=GsyaCYnZEw#tI@^eWJYATt`yl-?CdJYvFD#qUigPyWMp3&ck*l@hVB*R3)>ZVnLctAw z>#Sy9uNzwU*5;;UXV8i%g6ztg@?kS^G;V1X&|75Pj|EpN046*|B|p@8JZT5ZSQkhcwR3xat1Vu9Qzef zT_bD7kuH^o66B$S<^FwTUqH?E8b_{I;b7mZeXfln&RTQOo)!k6Y28P01u@0g5J|W% zoyyRZLyG;1tgmY^SCCS-ZiSQ<7K$kC3(_L+YmydrEmzD6(C7N#0{W>QzhqI#}E;0<#(VpUzaIoQabqQXeuVW+>z_F=pcVB z9|W<4Bh3fI;~vKipzS)XFMY5^{c&w=jb1c!)tlV8!t$1+_BEUqg~1%$GtD`F?bm)S zy=Vqu0z|FtC>@s9+K+Rl)9wx2M}9Bm4tLu9^StQwrFF2i&i`v$7b{8uIMom!F=*37 z0}eE zYP4#{f9D#}U8IKR%#RsE6Nvl4MkrLj>{!<|Ev!7l;YJ?}(I&cs4e z!u(J`)14d9Jh;fs*~!Tg0V|?c%mhFyg;@d4L-g}-QUEk1Zeg_dJ|+m-qUHDL_;i#; zC3dW!vl8YFX%gla2m67HxL;6Xk}jB&lmUCuI6%~jTIba zZvbkF@p5y-v5-hW?O{SPiCiSzKuyM2l3pd#I3yC430;wk7)?J>>l-g2TzFb^(SANH z+VBC-*L{HW_4c4S?a_{m^MTq8sxdE8YfkQ5V0qNmw%Do}PODe9Yl``2;(Na0E53qW z6vOX;RDGTb&uv=1k2iof@en2}&k|7u)0Gimlf}zPsB!K04B!0&1{Ka^MgFJyE@Sl6O8A#!4 z_+t!BsJ(9D1ul7_?G#kM>#mM-Qxm(<2$ytVk78e; z0Zkz7U&A&&ptY4(YaFRZu2;_7FVN@OSdWpw0Um)8p_ z@*Y>dv7`pUvpMv++6|+rltQP4lYQ5kijjni{vO3kOfGy}?Q~j{@m8EE){$vwM<)JS zo?6c9vUxO@KfdN`zJ^`|gL6S7-A;w#eDbKZ?FjPoZl}oeh&E3z`vc$iqNK**=%-D9 zVEOsv4zulGN76<&KJu7$UroDa$CVfIiOI|6V7(PEwFhG00yQhvC0A?=b7bRL*|g&5 zCsYXlWlT-F-P;*E)4#VN?bj98(w3}ZfR?M$A4;DG^tc_6I%o6|9JxwJg_59vSvk-e z=*^QDn(X66_+{^@_!A-SfBbmzVBVx~-y+x5K@&UP`51+S7Dij?`}H;B7S{ccsnzH; zAjk}@4x41oa7ciB8GP86q;E1H6LQJcmV@YZ!#_b`RA{ojMV6Vq&ffmEM6=|K`}YT9 z`SN>Pgg#hKsViC-`R{Yj9tS=3b286(^7N^6BExX8b~r7(i({N$1W~iTut1Z_ahTO~ zFz1<59l&Z(;J)yHb?BHh)LToCNb|f2Y$262<>;)-CjANZhLyV0q)yPcH69mLNL*fM zrsnS{@r{->sT1G{g2E_N^KA-sL{1A=X<}2ym#^Y_TxzX7=(nS+Y0jbjdAYO6Upp?v z=iBpr-NB&tc=hU4x_kF7y_5FkU;gDnoZwEiecjxFz}x|0Te}UV?S!T|3_tgUg$4QE zAO7JVrgzeQ@9+J+0%XdqJt6Z4jvMFZ_dvT2J+1EC21NO~f1ZC}YXhaFOY6C&4YPf$U- zJ>IfQ$}mM%b3J{UQ@>AWdwfO!O)Fggg-crLZH2An6&W1v!!6vu&n3-q1drgvh=8_I zvrXu^^7p(-hBwl>YyJ<`xcD1s*WBTDJdDj9tVXbKu?^QS>aD31yFoD#_pd0jY7JuP z*9}1RQPNm@YgONZFq})Q56?^3-Ha0FBy!~pIT)JGKrEe}2`YG5)572vhMp_(1y`;@GmWKMREE^Ck?}C&Hmn5dqFu7v-OJePTXIh$VT3Yyj{Ez=3Y5#ak z3c3Ax)1J2@kQ@lrj(YOw<@f!*-}l^zrEP6cP5b#$O&KusqDyvGV2^8N&+1t(7X{V4SK(;2hR{$^en{G9h=-YN+Ho za^r<@5C!E`S z55=p}I(k)K=X&e)+qVha4R{BL`)}QuazQg((sBP1w9M$CtVOO(1gks6?6cs#Uo!#; zNekbim`l!~=86Kb9Ps?r^hF@m(!T1ezKXu&OTOfY^KVBpM05mXbDV>j=CIxJ0sh;*?c3;I|LcEE z@05N1=YKwZ{nvl}gma!|`89w|V?)ZXTb|O+KO_IF|Nh_qJAKdhd=I@-29V^x`*;72 zKKFA!Hyyh>*>+|CHqDWrXw#@QN>Bi&7_Ci^$FLe10z|D*g99&b>G+2KN^zn*mIX3? zI*)95dZ_I@V4I9(|nsTS89j{tz&4?rle-fq<_#aiqk?>d? z>m5N+(MR8VTQ2FQQAWYBD*a*OSP{6oo@>Er;n;l?&UK6M*mL3t`MD7NbdQ${6j62s z$}>n}$i&NZo4>V(FA-PMW5mrVlIeV3OVt@{p7< zxHKt4(Nz<@VTv9$Fo0Zz$-$~{RU9M%?4_3w&veAmPOB4Q{hPn}o9UglpZckvBJ@V* ztVV4C^8DfC_12m~FNu^_>vPnc|X)@EyU)0`KagqRqiX0sYEusvm1Fo`;kttM}PshA? zi=_9tO3jti!by``cnmmr>XFo1bHun65)n<-6638(9-rBhwaGQVVirs!y4*=Q_H=@MGn zctattQq;Y(5kVwzizC+D)DiX!}@H@Vg<4Zcc% zcos7bflzZ?zYh}T9qn;-dZub2ijJS5h3AF`qK0E?f7*L&g>qf0cO8O6!qz$C-|$cX zE12^iJEs!2$i3|MFj^a`onpv+Y>?xi61%wrxk_-vOuoBG~tS@AoFhI&E^% zKBs)*;185zawprq2JLhI&;R*9)8jU{p+pim*!7!~A3x>#=Xr^hD5F0Nsb9yIzGJ4e-nec1hD{270MK*2 zcI{Py_rLlvQyMs+cn>sFFjFFUh#ADG3$pIb5!;AdG2=ih&H@y1mLq7b;9VD&G$p(* zg>25f^Cd_u@dFdPS>NU!fsJO63tolh#-kNleXHE_qe zy}eDp@C&~{FN%H3w|vWyT6{a>@;ofSiM4wA)3muXjT|Y96&gI$?oefi#5$+rUMDug zTq&eGi2|`~c-qNGBm^}q?T?N~?IlO-Bu!GS=NzS?KoalM8A6P(ZCj5d0U!d)e z9Ry{k=(GfB>|J-Z!#QfV-#yfpP_DPG`X<+NwRCV&#aXe^C+wOY=Z2L<^|Z)9zeL9s z4ji(mprw{%j(Fv$Z(c{Tc|#Gy>(_4Sep^~^T_c3jyyu1eKmOxCPH(*N2E9o3 zUElRxQ&XevT;7U9^~g4Nu5AYcC;lQi7ue?JCJi|K)>hW>$kWfyBUCJNXZyV9y`2)q zMCL`ZU;DLRlL$6%=b6?6JI%?SWRoGtBGux^BtHcRz>;V$YgHLVzf`7k`B9$F=P4H>~;pt?9PqwSaUFoLNA{puii*99Z) zhj--+r*I1+H4N|)2Wes4#DU)B3hLd9uUt&uHQt)^iB~^aLa=PH)azR$HdofmS%HZ?N|Ur5J`#dQ3Uz8>#;XeXct|Sbg|*xbxmu_4W7oe)mWs zSIibbfjGDrbLzvhmJf$={L{2m={6uGw1mi&G{?RVsPI6ghu~ljeRuq$Kh$S^`Ca-l zDe3|0Ei1jm&;;v_w2^rfnmVh`w)`U}$s>Ru9%t#^DwM{#S*C5U1`b?=I@D3nb&WIi zyZR-tcuWgSyN}hKEPy00ntk}gAC~%K9>GnkwdT&Y?ReYU^T^d}x){jceDh6ukqoJE zIKB4dqCH8-9qhF8&aYGMTwP!GH-6(c=$C)_m+3__+>cMVE|>RKw~^=V?95AGf(XV+ z?UhppZ;Aj(11E7-#42YSE>+Jpjgy(8m{=y?IktU-LKZj|tI0}gxX>t8K&N4tIVHZg zgr}e{RJKS3qwIGGb|x_LWwu`_plL}vT}gb#f<(v>li6sJb6{wCWbZ-7RI;Xk3xm{X zMUPRqh2I0z@YUu={@@xmL>-@O(?9CR~iyuQwsJLzkgCfXLNCZtZie1>y|)!)-xwZ8uu3d(Q&W!YEH`T6n49 z;#gRaMq(lE2ckp8UT}nn^GM% z7*MI~SWQ)%s!QBt>7FxylL-xbe;B}%=zvwnnlW~s@UZoHvw7d%CV>D#_Tj^a^dj27 z|M&m?h-6zXK;CvV(;mmw8Lqh?JxxkL~k4B@ddn ztfdqRtz0O6g3E}=c%HWNc;YA2$s8ftcF+n6Hlw-M!zw8rNVtXBU)`C~ZUgsbT`}>N zkw_#$rQF44Wz^h`5ceBSF68|?UdUZHuZ=GRB@~)~1g>m$+lc$GF15TnW(g=Hzk+7o zLSH+7fs~Q%EMJ5th$7>&Q>SPdM9lWK-KEyia`1X!u(3lp)WTYEAgR@*l< zn!N-x5_v;@o8L9>IeqZp0e$CpekZ-C2J-Ho{n?*AB3YM5VAG=6-0`#>tM{wI;JjaC z`@Zk{J~~b>c3M<=T!fm}mz|ISlZqEDV$bb|e&~nj_19lNmd&Z1ooP=jPns15X==36 zNd?oz>1iNQTA%<54T)HAJqEnscnnC|67$8p#j1 zg~t}b3T7sk#!+Dw?{7WGSjHB2_XxUaQa&tq0#tFHA~;(-ZO3?4>yCB{UK~D*JaC ze)LCwRMMo=G-2D0w!Lhljoq>0bAIs`f02ImSAUgWWc$#EJ|yXJSWet<9Fn+QpKb%U z`~jzm>-r+w-rgR4$9H_kRKDVA*_n3F^GP#T<&t2WM}3>?heFVo$i`WojmI)i3rlx| zj(y~jD%s~Kk9tQK?Yt!?@v|G2MY6);oV(hBBmIvy{`E+sS?_m+b(Nh7`rHm^I>hTk z9rqV3>J@Jwk?Rr(T6o85t|+>8o`y3ic4ZIKeXOj2r1jQI@UW(Hyh_^Daut7fH7(pI z;%r*=vuQoW5l;Y`WTmOO>TS_DTx-SA7h>80rruW+aflo)#d+rqT4yf~2fJpfIR1`= zWBwS=Mu5PAo~r|zz%9&+hZ&%WG63b7RD@O%W)!bctX>rLgGI$M!MxEJv{+ngox^ip zDukQjgjl-lr)Meariz0;SNWl#D}|E`7oLU`KF+ZsDnL~Dq8n=Yj-H+7U~^~FZr{o4t3LQT8NoYEHTYKTo4)Cr zrnV*Jb>ru~p6}z=0oU`xi9kio;G__X;x~6tbcCV)ahy{4(iBm|NqYG&HTzpiZFa;u`2XI7Y9rjNE-{$m( z*Nv|Myu!C`HECggeWDe|(!nm8t|YfjdbnuVnOcxydm>>jRyH<*BBpMN7sr=uu2H

U9S2)0-?soU=FgAuA6Hg2r~zu*u_DB zD$X3&TY(miuh>MNV_iv-4w=j-#bQ9L$WV3D3C_X zEu{Va0vD?nrCoSWB3F%GxvV|curm$pN06`T>kO#j7PbVj{FvRO$k44u+E8uqakbfU|D&YF^9e(Hl98WxJ4(;#62JfZzn@N$ z{pN4}rbOCpPr>6=0qS564YFD)9Ipd2B`xfj5?l+b&r09Fdrl8H zJQAs_wXw4Cm6{I7E?Ha77$iPiagEADFm$o>DJDz?;1-^rPk<)jXF}u!qM<4an1B`@ zi&Kx=0Llu91pf!%ET@JqoxiAc*DKBEOAyFeR^gC1%g20OQ^RY%!wvOuo(@LWjAwHx zG)|Q=AA01Hx1B0njCOH+Z%@ zx)9NSbS`VGcchmp&MBSMQVRJOg;RJx?LAK_mVRhN5^6Hzk?7RBTzi5_>&lNgYElwK zS6Mc5`a`pc9@j!sCsk=%{U)5yHFR?SLT)rc3zOcs($`uUQ`94Q-B5qTapx1M_Jm@Z)6JbK?t%aI-~QVR z*VFq}4EHNqINGV0oiJH|)W=X)&aQL4U{(`q*6!w>j*- z=bs0(u#-qUdlc$tk3%s!7a^98mvM8GU8o)XK_Wu_B#8@#CL@uUNAHuUCh#NmxhhfY|BBnW5pY`MH-Lco%N+ZK$P+GKmYS|679!+ z?8oSLe&=^&Jx__YN&I2cL>sWpuir^CwB`UkoZrW7CwtuEq?iml3IAcGD}S*NOmIwT z;lw4ZX3tfjDC={@A~{rxR)w-Zi%^7_sU+#ppsei&QLDIBM6Dgw-Bv)8j^7foVqE8O z9%*3_O6P|LSjcBuD-Qb!3B~p)oZ7R`AD@Y|y)CO-T?!LZU5;EYJ$hYOnyvy9^pU%C z_dQpm3(kOPkgV>yX(dm=82S4pgS!#dV=OEO9FBviPPXENMj6Mc5I5kd*X6_YLrElf zqO`Da)Cv*_c`puV`_*`dUgaG2)p+-Pt#9HJLRb#8Fb!e^xA3E`AiYBBbCn&9hWTJu z0ZsX53=R@;zf@TZozte>&;1wTHWAW9OXJ~ z0DWGH9FLRgT--nn*go%R&Lm&DDh|LwCv{Qi3sv3s0pe# zyYowNPxTM5X5JM|#)$)--SjOp+|Tp&!}Q0#qZ_*(!J7Gv(6KtfII9z+jB(Br zT$_Gtnd?JviWvHa8D&H*d9yM~<2E^gzafcFSXQ__piYZe{eh_Uq#KCspYeUzP76*u z|NH?`hX49s|0|tjgKE#O|N5^V$xIwqXLr&NMC|C9J;{dDIPTx$YOi_L26o~cZQXFl zAs+#>aAA61GH13Faf24l6T?+bg`@iErQuXM%~&Z*qmy;V>uKTqPy{oKpl7mEGPP7@ z$DEZI4+Iw=9P{#gF97kX?V3CK`HK{#>jbR+eQi;(X|Dm$1aTVaaph8IVkq>ZiZWkuY?Gygvp(0*W|k0mF;Nq}+U9H* zgvnm$75fD~5cc>$T7m82nn=#w6>2F1W~t=ddCuzpPd&5?Z$1(<*E!SM!;C{+tJYgp z&y|7#nuy5g59LKq3llXoh;=^>y4H%5{b)T~A6Z(W8#4zxriNSCW?n+s1(k=UKrb~0 zaj1?GR+Wf`E)2J-<$;qlok=-)!5R(ZtYxg*rHebi}I>}M18}46BE}r*0Ps`|>1PALR5~4bd=bTY% zQL{#=xq?K3)5h*hHECDsXqNy@NCA&E)0ao7o))H~%3=-hNp)RSScQaJxYwbS4u*-7 z6+PF??HGZCMy~7=<`?5)xfc|cvrNuO59-4+{vJfG=jD62w#(&6fSEXh3LMZq+eONk zT*gFDh>Y-^Z9UF4er#@eq)!sP`oV;BO7bka&(wrg){2wP-DT%&T|Yq`tn9r(!AXlH zRL+>q);?%@u8tN4;{_k~Jv>Ro{YsDVpl`=^{({gRKE{b7N6vN%3{3`Ua+BP8xgYjH ze@L2nm$Wc0K4vzYIzamk9(ZYhUuI6f14VQA)}BSIBkyyql;?6HN(~KaScKB;#()%X zS#)AT43~*a!qOyQajKhnURfCX31)_HsHK1jk_yEMAdxt3;F#uMo#Eym{=UO&h#XJn`&o` zv$05`SeKr25((pO^_Ig*(887X^9!Mb>?AEZoj5iilnkR5q{t}g1pXZpP0`>bh};~P z=&%h0dOfAjBZRR?2csQF_zHTwOkE&zR&7U1zVp;Er`#nyWpixxoIzfA|jxJv;53eI1k4lU!q;X5N}}+~fk5mkCZ( zE!IgS%uudMBoeX#Omn&eT5w832Ww{puPcfZ-LXnGk+<-~j6A}eEWn{%O9@L!ZloO> zcnDf}#1F`VW_qq-Lk^S-B|L{h=n#S}99T)wb)jh+L3Wc%hn^Oe%qMEDNDWKTwUM0L zI>*~Mb9(7=`=Z>H)UZ@Dw_lBk|InBRH-AAd(W_0})xfSJ5SHV_KW zZnr$oLt|v)VDKM)-am#L4&nxcw*K6IHv)d#APCG51XCb_(HIPY*#>MNjQGHC6u4V7 zI~v_{T9%H6y|t&R%6z}|JZr5t-%91yIX$?0Z>g44m04L+W>)TZz0X?Dde&`~XM(=) zm1o{z;1ba*Lc<;w4yMrbP{P7zm~d7R37nK|%ejWNHS}>~mje=-s=Y+VZr!Vz5}V|Z z@XJ8(*$R<$J~UQ+RC%7R6$&8;4ObzCJUlyXi=h$jpyG&zhm{ov)M_zcRC`rcileNi zbb%?AJt$Ftr8ssWJI#p~cR0S56LoTDn&+Il&Ia3GwgDFA`A0aAqi#5Upxl>jVu8>& za?kEWF*$W->c@>G^n*_-JNiY2>)G?}eKMc0K7!XtuvrZo9n>%;RqW?#I9B^q7bccd z)RhH@Iqua~hND{S2m?L(1Q!(^YNU7g3n1XXh!tUB{5Ngk)Bz_LYna5QL7Ou$SXvDR zg{ziSD#c&4h_)sRuA<;|FjjEgiub2W*6Lit$*^v@MW2JkIzosqn{#pV#@e}K$@_o; zwZ4qb1qSqrmV7u~?{Jj&=*11^=Vdfp&ycUoNlh;zdF8sp$JVsYwJ0sW%0;1-3>0W$ zYO7K7Dj=cC^fTJefMc!NR&|XY@StiDEOV|N1+>WEunbMxEFE7wX-^b{`)^;x04pf@_ zL6T_NV$SuV#kg^BphQD4Ljvy+5)zMPjzO8_!EDI%nFNKOQD0ah0ftou*@oX}KH+s|Ye1dpeowmR2f7aK1=*1=Y( zynsAG46`fS9a2Mu=xOU(o1jN&rq5JC)4Lxu+>nkm~2ima@$V0x_dY#c{mL9P@(MB2_pe-LpLV1)4-Iad{t2#L6wn8OaT z>XnGDX~?&tx@3DGq2Uaip~Q0rxQ;?`UqIgL4?}@&SO9#Ny<8MJ_~C6utrCHC@qYJj zj$CoZq6#VbY|0a^MaVQFV&2a+WE-QigegeOr9OGn61f%#lgrd|GtEU?>~A_pb!Vey$;*a#eltB`Riyu*WAz?cUj`>k!)cL3nS-hEs0#L z|ByexVHgkGfoV%4$TR`DPCVe>E|Lwr6j+celkw<^V_KTtw$<3e1=+$wy$tKb4|bYB z%NaHTaZG46X6wh?K1iUTP#x4C`-rewwsh6#) zuVl2>_)i0P>-9dZu5{cWoilAP;c|89f=2AEm*a4?WSd{2-o zL?m#af?Us;cm&v8+n9AgVPmk+41BNP4%1(#$Bb3GUAXD6JP zV({fLB{lUq(>$ltWeLA5r8n z|MqY9mSMs29PF{Tb~jTfn2pj)Q;=h-OWm!a*ec9ws3#zyd=-n_;dOAZT7okOGh7xn zPd7r-R2}NX74xj$w#y%m3e^`TV_1-@27?bwrKycriocDj+P9+afq7T+8So!Z)wP=X zA$UFna$pOi>D=q@Ske`#N&$c%GcnTY(N^(eo4IiREtZ{!7`RJu9on6vAeL635Su${Tf^t}p-0pZPQ4RWWqUL5R@VvagDB zf#EnYk?=_c&cjJ-Oz?#m(Chn2A?9}M5v-vW*c4Xl-zkDWxYaHMtCC>>+5INGr}RXSNYtzOwdrM+<`29!#2EMh4+S5Fhto_XSR z$NYzYwQ0vc36OgrfDVz<%5?5k+-OU8VKo#kesnE+8|z%*>uwpT>86$1I3qZ;I>LE+ zb*5Q*z8{6xwPssc-(z*IZ(q5^XEyG14nT6Qgw@b!4BB>%+c85xSQrg!trRCUOUKLt zGYmf&rVR->D+n@UQnD+t^(ZHEcd}P5;UqLNi-Cy5ftBL~&$S*Vg(m)N6YFlT^1?D( zg1)6S@5PTTj+Ttz*v_s7uFxbiu~h#IrZBre)I}1mu9GIBzQj&l>gQ^Y@}=bTEe9Kp zr8zO9J8o0sNv#U%2u@JY$J z26i}NkDV`J-drV_(Kz){CvN3g8q z@G&}=Qw>P%<^8x@;r=B@u0hj;Nfwv&n%3$?{Kx5)Q&eaw;8UzG48y{Vm}=z;m(*Xl z#Pz$@(KT^~vi7NtTv3V>Gu}~QsZ*}&hUmVOl{O$WCC{5qlqF|VEeFKwwUk5x^ zm8SEX#Wn9AU<|9P%(=GB(l247goRU=pU>KI`w+5=CFi0Qjq-0m? znk123Ag5Yd{CzR|0YaEznvG|g&V|(Ip0g*`w3B0adTL(9BT!7O zv$l{Nr(Sc-%-pWgJJhzOJgX^o9?QQ#cdW47vBJ8ucFg8qHT$3c^MA5y4p^k`z4u;t zl?+9l4h3wP z2m*+&fuyEDar!5_Pm43t)A7+x3lAS`KPcUvb+icFH=z_6B_Z3rE?oMtBtsU2{=c-D0Lyo=L z%T>p}F~-HAb;b#)5GRC$U=fvEByqK1&J|z1U$7)|L2l35mZWRqFNj^mfdIKa&MHsP z+BC53oZwe9ONSpqBo)Y2z~3E!K##IY)Rhp?`?+3o|8!kd3B>_=?v#;Sg{ViD;`oYh z%v|#f#)8-O`qpsEJ^N+>;eLnF)MmV6xna?kYV9LI&i&6 z;-IbB3avsDWe-g>qRM2z_`J1n!bRt;=t@VdvyBmtr5!cf?o*-p`mg``@D*S272#F1 zZ~o?Q4%e<-3$LPm%eQ<>`0nri?(izwg$ozLw|?ul_LkuI4R-8h5LH_^G$2?O+O>;I zHXl)dfbL#e^D3hmN)40TYg^f$dRZgqT3KBywT9&%ovse5IjHrt9O*Dvz_GGi5-;?Y zbHUPl3k(N)aB}~k6%V2xsI=A<2K=?df3S5e>y&%ftbb^1;RoZ^n~`7(v#vOBSWIa? z4(v;g6z9$w$xLcs46~=}4GjF67QHd+R`W8P*xwZ=y|i_#UXmjphWb{-ov-`10<}KK zT=1vgF0PvVA-dwA5NCioS8MysUX+b>R<*}Y^r8Mw$r*5gQ!V4uT@0C>b~k+ z{)^uS_8kheE7X*!11_`A)KK!Vo7(o36dc7GhAPS*`6GWMylMu=`VHUk4dI7>_=i=7 z?G>`KXU~Qo`k@~RU;Wiz9X|TekA_#xe)ea7wwK6s6q)ImqF1KBxR&!i6uD}fxmd;w z3lzzTHdwD1mP^~r08pkbz5^l?N*S}>*cvR9@fO;`SZmtU9drm3xnjI-d*T4aE^@QQ$~kVN~RdB)Xt2*UlR;mM2V6q*3-a{0skHo|%Zdh~#;@UCxO zjkiB-XGs9$29`HMFd+%8b5#l}BfZg5sdn08Z?p7-V9AIo(j@}->LFnu*jti!1xzMY zS-w1dz(?MSls~+pg2-F=0P;W$zlTyBf#UCy&?K<@vpSP_DF2Xfrc4#v1j%Qun|lSJ zDQF|yu)0DK35Em2vF>wRTauG6VFPijg|W#FQ%XEPpb$qg8%i|riEf){rXlZqQw)qP zJjlbiT5_We(=`Yj>&yXH9aPGP5?b+Vw}b>X-LcW#o8wuElh3$4f7ERXp05MFz4g{x z;Z?F9{J|gO@h>bagpYsx+*f(kkW z>^0fKnTj08xQvhqws37>Vbd1ob|%AEJux7%ovKu#f|M?yY0$QuOKjm%oot{g)7WHc zVK#zKbbO@jAwt74z8@f33FIo{KaeZn7Kp9@Ux_Td3~(lqPYU-3*ZtE{oS+fY*CD@a z2=)?gsAj=j@k-}p339!5-F%w>$c>;v5_oDOD6tnmb4zZ@^Q|qOoe2vUnNA{ovT~ma zRiwC?z8g-Kz0!eNP2e~&tUjV~?92XQu!Rrg#+>T~9wgbqubtE9&jeLx%IMQO)sD_e z_5&4~zz*a2lZ5utzEwOSRIq5>>Pg)`RF#jB&VELA1Jj#mHRW4}s?g*NVY^EgMAb!> zQ)9;IMaCS2*L`_|VXJekKn6(lUs&Q&s@X8zCC8d$uF%wFK<3Zo+kg6}e>%J>_OXwB zEWGyGYv~;Pzz_UDICJJqcohsz70%U<9p?cPjaS9~+@Je%FC;5UnZZe)y=^^bU!##j{o+W4rg~hCys-*n z#S8He92(PxSC;SrQ-1z2WDE<)T1G3gcrt zPkrM?Ov1&vfP|peYoV2@~U=_IEuIgrA*~TRTRx}juUZ(AlKU4%X#`Mm_C3zRqHxNOk=2)E$4!P9=^`f zcT*LR@Srf4Uf(L=VX%c$M>Giwqp1s!>ngmftg}riNlfe1XYv-N6e$9T+kRL)7@v>S z7KYve{1Mi-w)hnQgNU|X{YVG+JW$7qRSNfuBiyj3Qq4{9+E??V-E*E^mmI7i*-S_R zD;wsuuV**drroH^2=D)4?TRzKr~7cxi;FOGK+csRVx3W(v935zl|1AkiHdy4$fVtu570{nSr| z<>lq@G8>!=&|7yfy?psHbC55yfxPxj-}FuCnDM(~xw5iC^!~CNuJ5k6N_V2s98 zDZ<+kl9*L!VxHCX5|dZ8Wn{a#0LJhw(_191>4DLf*(_agD{6)`=Q?ZbrH7m=)tb%) zl;S*|gh)jViIsaL&MHnA2u;r{wr;j`sC%>CG*qv=M#+(s* zb_5I84pP&m9$R{8YKmj-^&Z2*?9eHjgtigV}ArDMhM=S$pP*2x8q`zL?$CwYwd^$yFCYoAnTU-aiVSm~lS9zBcN zIK3>rQMI*AHxUWeLy*waenyo84pvP}HJxT1#h7cg{Hp7;GeSu5o=Jh0b9A;6N#wAM zY7WRCdMVDtKoY#@2q`}ePjbB1wYDqHl7KGp?mPR>(mo}fgwrbA&)BFSS9lwyBi;Wb zMWZc(z>!2+fn2ZNHW3M!IaGF?yJekmLWVU{NH{*H&Xmr1I#Yasd0~o5D9pW?=Lm1y zAT&nK)t&kI2eWbNE8*?LzPh}xup1B@GlqAq^;~@8e1UES<+{EXU2)hfU1lBt_@Gv= zdK27dkdaW^tDw}euY@L`RybHW{|kE|GUd9UjA10m$6iBa+QPnnl#j3ED_IGfD~5|zLzn^*8I0`}lsG2VH`DHh!E(grk1_b5H0Q^E z{Kvz~W^gWl;1B$P8OPdnF4*=mmgacrjUQ)z%O@9azWFA@<1d>5wdTKhe(iVv4su6| zZGHTO<6xZFn?u!6zoMpGgK@0s8<%YSt4v=wAVpRsjbW8T9FPdgC?CVb(^jiJ|ENi} zim_NCiKEf1dY%gaEm-aqL{LUqa7THZ_TNg~Rg9hU6E1|lu|&+Fo0 zUw`;c;cZaC7Irez{u$lImUEjDp$!_HrGw4neiM3)O8Sj?`ZU{%7Dwp|;aQzJOt-qx zI%BYg^|6J8u>%iWBFa2I_VY5>!d?#d;9haK^G^A?9Uwml1-=4y9wsG?)1**S#%hh} z>9*s6#MXHlIb&I(hy+6fATv>+Y0j74$z&c2r)e&#`s~TRi_A-|-zB zXkR9S)9fO)+_Cx%lZ%(FGzZ56B2OP`&Cdgtf9#L_vG6h(qA=h7?cY9=W6m9EzTW-2 zaXZd=S5Exd1xM@l=>W>C16bk_XOOjap?-vglTH)bWNY+K#y}?5K>l=5iA)ISs z^x7Bd>dwsjoURYRKlWok7G4(1olEXea6>nx{Dy5fcA&kN!EhYk`@P?rjvdFCuXn@4 z$V*}(^0L^U`cr@Exk+R`xpeEBh#qG`Q<-U@v!APk?X=dl(*Dzxxmr_gsxcNels+s{ z<8*s}t;%%8w8?4GT2+ycnH)#K61D+#cxWn3V$8W}jFI3+$8Hmn*gJ@hShZog$sd|{ zKMAfBLV${&6}qCtbypnL?o-_-Q)oJ8#94-g-@9MjTU562RtRm^wyX>Xwiz@cyXjF` z=;@0`WjW4`5N~)?xCqZ7rM&(%^>ZcLDOdT=#r)M6bLJP^v@N$3Hed5s*v^fh)%YoK zuU3kK5I5xy7w#ADT4x-xxE^`2?`hU2oig;wO*m;)>xlLQZCXHByykv!VBHe5VS3Qt z1<7zE#TyU7j+2%pjL3CBQ3>5(w6=%N zD@UF5D$`0&VPRLXgH&SePuXkgR=^+fhm=6H(4WiA!X_>tVdF6SZF}oEgoP)jS0G*q zeY$C;AHVNxVc4O`AA<9`s-&E4)gKB^S58GJG@+#_C%jH*3P;=JRV~FKIJ~V*QyGyx zZ|Tol6pqj`oSVw%a_3m6i!EBMi1u?cdQIVc@>C341aq{Y9pAhOmmS{*G`5`UbrPC3 zNoZo68p6k3EA-LJEYO8;KPqwFed7%|DHkHT6R-u495mTnt(Hc3iUMGFs3^nP-zDXm z{rlu3FPr1#X-^4n2@9wGf7&pey#m2RbE>!gw8|9bj~h(5f2uXD-VrA#p@|nuXv4xT z++XE2TmjCM4maZJM6R_0p{WTbd!-H4o2tVQKBk1Gu66UP-SDvIBJ+XxM}PE3Py8T@ zWAFhsN2|GG%^&;om|UE6X~1v%#&2Xuw0q3?adsybxFO$#^LEk=+=1Mw_N4*(Lc%$l z__!)G(WmD8nZosgiC$w+Jz*nf2Gvq$HG~THS8eG{Q4>H+LDsc$#!5?ZsB)L(*n$c8 z)DvYDqbvtt2mM^(G)+W8&7}J+{OEnU50Z|&xL0$u$hqzsV0FGL#QRyvDaiH76V+(4 zj&m)c3HFA9y-NX{ApPvSD8-TG?K5u|SFc`e!J;#U?{vy>{6v_?gl{dLlMqf};kG^} zX2r0v{XmEoN0mO*oGUhiMYSora*ao)juo{+>@+W`;avM7o?Jukh2MSFnrv#x1kC!A&fOCIfxzpf108=5d^$MKHZ(2Yi7n6{K_vYxh zn+|lD>Rs)1b?4?=9l6$(YA@AQ`&?3K5(i9%a6TJ6hSpcdcU0c>DD(z_bD)@$YMAN5 zxpa|RHza(N^ZCPn_z#DZY}aMB+!yxl9&h(KN3RzzUJNJIFgZYoyGvN>L#juW-W*rQ zN@FNE8xNb72f{!vjFGo88gtmXfI;%LN*cpnErI+hOL1(xBv-}8TTivQ$OLo+h8TBI z=Q_y8WC;mN(sh)YtH?NRo#!+lx!86VMU_aCzgG!O&lnco;eUt_QK9Lyy+m@Z#Uy{v z1=hI&>}^@gIVLb6AORIY$oGa!w;?EkrDzh^!tPjarb-Y!ZJGB}$Eg6-!oscBEixgA zBI{R|7tN~ON^6_8B%lVomYKk1*=f!U4pq1x+QJtkEbRH#hj#FfiCmwsRS*<5)-53o zxc@A)q2awoDcB@5v03`QGKPDMV0Eaoq7gJK$849*=Z02-Gtna~(i{sbUI?A_bFExN zq9rcH)Pl*00JW0<)SBQIZBXI>r;TmroN&yo>sWIKi@^u$dFU*k*(0QSQuB{+E?sBh zORyWej>m64$+&ds(uwUHgRU=dE?uOSAG@y~6(YZ$3Ib1-;d*t3a6YN(bFzI7whzS~ zJ8O*0#9I3TlB_D)RA{6vX$xbVsw}+b<6EQBuX@vxM6yl{xq1VXK`ty|AjZi|S+`HM zvAxE^!VB&5+TqMm>VfuiWjyRK6e?L`geJFoE$&#I>r+ZJ!MmQJ1Rw?cXY7qYDcH}pA zi)(HFkgnnGcKbPqVT)@esp*n$eE3drA2SE*2p`xL=d20$pN^$ir=kZ_)N%2BK@5h6T^ zDIiSsC+BTQEP3)%B))#%5)HQgEo3q2CZ%NvO}mdS;Yf&npC7oTWjLLC4~lEfPo{` zkOhUsk+?5K+>q*cE`c~OdD@`*?}vg~nR5kiraYud6H9RxH4W%o;XMgquJE6g;vna0 z08Hy#;a#85ubh2kAdX*{jl1VUWGRjjnr{E@-Q)*R=Xx!4?2eLo@!}2Fkht0AT4PW_ zi6W2s=KWk*tJC(P<0lk(IgW&dP5!C1>+KGOH|@u|^EPAH*l~0n*b3B1may;}q(b8* z2o0Zm&9sGa8pNUEl&m8x46Df6EuhY%r*Oq&_Ld~>F0+^hdXopmqAXpwpYn$b3(sHa zsm|4Mt`L*(t02Zq#!IpV9npTK6N0IJg~Soo5}e>0By^&=)?iO*8IGY_hJ}&lZoHRb zIQDjw`b@VZCr2;2v-!^N{LT|M$hvdsb0&Sr^{7xOCKo3yG>&LPo@YMFiS~tvyOWHc z|M{N}C&^HHgHp0Shx($ha9^G4u?`E{q`s-36sJu@N_Vg(7NO13L#m1}`NJZWA$s$4 z!rZCmjv{)xRaOW~kHXNJbHfyy(@MrNhzEv06j!!_h)S*Rw_AG$9QbWZYj~ z2<+><3*TVKRdcS$C0d;;!omX99(&H!*uv+Lj1>O^l|bk&++!(@kN1~Zien!YH$z6! zg#ohOpm1k&L|!|dgQ-HY~@C!XQ;0&r5H*HLXXX z^`mNDv4oR8N#v$q_=R8SjaD2b9^rovu%f3-?YJ9jTp@c{_ZKdZH$wTt7CBBF#iI{7Jd*Y-2Yx+XPm7Ex(|2#^&eI;E^nXI=QiyruXRP} z7dclhZ~C_OEBk)=85~vQE$8TL4Y_V8!+679_ts4#H6iVKezTw!qujE{aJcf}S!WLP zdI2Z>L)LN*wtkju;nRX#PoX|ZaDCj{DL4~hqWW2S|FZU=*YE&lGC1*B&Q)t&jd6zQ z5D874S3P?#J{CIB`%EaT8Yi3)_tt#VMrdQr8EdLgO4GG)`{4q_lM@IoC=;!u#T0CBe-Z4b(d%EWCiQ zu;pTr8Xp;}3{DmK@-cF*!w~X(D=vhAk(e;!0@H0;wQM)e$V#i}BB3dG_{55;T?kA| zaa>!X@>~SkIptHA=J*Qtcdc(A>6RSiIoJHw6_z;e`A6)dYv|_t-#wP2YJHD#t|uY? zn3vw<`+k(%Utf7vpHsr$E$U^DyMe^iB`GtaqLa&T$Qw>X)2AV$+)I5 zwk9CORe`X?9IQ4bsU1e}H7(%KqMO>*2g(pGR42fN`~8K(Y&SR_8)(g{Ttm_*Kxrk? zeby`;fC}lrP%ouA*I<<-3=7xvKj6a#baMrNheTPE*F6s{`ww}o>pT91#Q>32@l({o zmpk^Iu~MAt*W@`vt#4g7Z3jz>Dyu0dKgsp?doF>}a;)}RZIT|c{;qg4RVf?;Tk}|; zR)mGIBjMw6`=laQ7wx|rdJF;*qX$Jf4)LMH!cph?m`$h8us%t1u22@%J_neY>@GPIaIf z!fMfz{VIc)p<7(EBsFQr9Itm}#5kC~XE+(w)ky8DbM2Ew%)@Ia%>jxzt_IW!;ebBE zN*{@`f8oKjwlx#Iqs!7m{jGdfTJc!uL%C^}epz_^T}8 zF_&0l%+cj*F`k2|3SNzzda#8#=F4S?h=@i-c2z`zJ1=`6>BMb`dMcd>c81^$YY*gi z2B^DF&d(eA{gQK4g(me>)Q~U{iA`DD+6>wmNBrH}4k&N(rCH^TY6=@NEn=r9dVg1( zkO>Mqij7I3LQTFDH9(sk;eLA8&)n6|0;wrjKUc}QzD@!E^WnZRx2P@b8WNI-E(Ez^ zb;py_n3n7#c^wj47$=!nXi5$UmQO^!>&s%~Dz_*7l=zLci2SZ(500BRr+)gpYp`$*V9@$~ZVR>Dau) zFyRz;s)Jz|PPCtEC^dRW_%jKGhK0u}du{hYZc*?(fOTKcA=3ldSSU=ZWDLj0h(0P-Ot(7b7iZx3I8*7SU-HUoa?=IXg$l4le zw}L=IlUBN-Kq>CF;Cj_g91_<&jV9brLX)*1LQI~@hb*-b*E#{JU5KNM(1h0w%QhT5 zEG9(?Q9wAt@&lT4ow5{%PgzNh&fKO6q1GnPU!{)1aI~dso#+e@Xw_=ORBbFK!Ty;- z?qh66Ig;)yJ|B#_N=8_MJ$oFx=6Kheu7m8eq9Yd2U4PNU1L4u*78(a)2k9u^Us#{h z@CXKOP1B@pxs{!qq+c7yH8k#ywU7DSMebc^nn!d_l9O$`$ThV3=6se;HYtB-U~C&HM*Vy=OZTMf!-?wIBjPxNQsOwGS1;!~#TQjKkPD$h6sM$i3Fu zJlz3Ks=z7R@o(fel;Q+U>yeNu0Li=J99V@b+oj7Sbr~S5UXFPo4veY9^^h4vBqUC1 z3QZTry1XX{*0U9N?{BG+Ap8}@``<2RP-5^h)b?>f$9hwps!IfSP^&*Ca?KsAxnM)B z8GAUiVPW>RyPoA-gHe~iBNUtf0J(a{0l-!qjUd+xNGVIsm2~0P&V{o;t~;SP?FvmR zLCbB#5iynyO}9O%NH_-uUbPsj#;}ahhognm%M}1AlCT=$ zqG8r0`L`^O!4}q*bL0#2w#LBlS~w+_?33N6#i_y5;<5VH@L>Ou5~9Vaq9fZyakBRw zns2&vDWEm#<&R#rwsUXs5BQqxJIZi2GN$lG@bK^rgGeSK(KFwqh(tFD8`G0*zLiMU zpzw7Q?gwhUC136>=dR)IH^iZ>+Rp5&kc6aIBbw7fTll{Gy8z^RUa8TKEGYhDdYUJN z+QKZw2|Q`5&+l{Cm#{ESG|F(8YQ>Lmpv`uZjXJ$t5f)|vvstZS;$fwAz$qcGC%_b& zWLCy2${cI$1SZISNkNNoyDn(Wtn>r55{9h|0Ure2Xb%-cy}G%PvdI|=!@pZmFR91M=`C=`|-e?E!m9((sZ z`0Md`P3Ho~=VLN+975wjtX_JPUz^zjz3SSvkURhxsI&An=AA;fVY?_Z_- zEXKdeD*{tzwac2@zpR;fYnB-p3oKag`R4^B1EO?V`?b13)RepoyZr}}PCLDQQmtNY{7R2rNrgJ&0&G_HzyWr#XkTGtA+ju$LbM$7;1bhFbL| zj`fz&l{Zm*dsRCOa7P)--s0zKKUaa~9|9TrzA7}~37^cXc7Hf!geIcbdR3hBYVD%Lx>atDY4P)h0rdcE^#~7zjO$EJ1YKcnTWrewtsaiH*_$6-#GbsbSYD0j;j`bt{d(SG6+pZK!ZKf<}> zsMRfZEL|ruolbenolKv@>E*wNmiI{@W^!hvRfK$ty z>z4T^goN)LXelWf!;nDy^-Vs7Ml~B)@z8Lb^^MvAeKytSel(x9vjiu1ur2G@N^{i7 z(v!1O01VFclebf>nmf1{ip!q~1*p!LA+XLhV{4Hu3{unfqaqG*GS28{$w^r|+$nde zHOe2Z?msJ@RYjq4h$}^y?3WA>O!v$ESS$|*hb0(jGU+N&$26Lb zig7j8ZIx^*8L}w(k5`jyYb59^k8v>!WPLgc+{PRJAqax3LiBa0Z`S%;Lq45+QlZNN zbfu;$OWoeE@)ijUd0#9leuiATzw?!!{{Ms%WZfK`hd;Y0&Iex~fG0AW!42dEEV2F5 zpZ;{%+1Yt+AU`Un`J#RC$N6(F>Pw4ORR8%u|K}qo3VoA^_X{0&mq*=TySuyLCx7xM zdvm&d*4>Zp>$=C=J@)SMU;V3p#r3}9eZOPxp7-}VZdm?XVu|R*>#x85TnN2O4(rQd z=Om);v38H8TR!E)x{rM1BS&`k$?ILaWky|ue-fSR*ZluK^8aQLV?!6%lto1FSN`yb zPa)YP0~ZrnP#>1pMH$^ByDHnmpsFibit}wM^va1)bRE=C2au5w+~Jy^967>q^c*zY z(nxHynUq6$ZUS)84CT2=g~#JaJpy^>m|6p)W?_2RFz?zNN+@}uS!@ni_j)i`ly~k& z$lmVDm#+*ZKrE1Jcf8V|y-P7#ZFXdDpwhIx5@J&PlYHwrxjmGe!hkCC(E$ zS4FWdvySa`L9c0gvRVM7E+6g{d#if|`uM@YavnojEU0*dasfSEkq~F=IhpXoc8X!?}m?k>|@V4m)wE&ImV-$d-r^IU+3?|q~gnc?AV|0 z`mXQlb*x7nYu|avpY!W5e{DC++f|Y}N`dM{Wl1lCdA&WXk;q(G)EZ2)vcVav*!?C} zMjWmO=oE%{ot*G$K-4>+Bt={I3sIgaJ}4VQ86%udpew-fRmb58+t7)7jVyPq;a+6~ z2S^Hs(Ike$L4%&%2Pzt5%6cF)?Giq(MCJ{jhUmC8tjqnQr;?OCCBe|g@^xoaxL=TK zNkY^85Z<`}#&FmYpVVp#Bjx&bSVGG=bF4FF=yd~5Q1Y#Ow6C2zRyIo4UAZb@VSv}$P#(VWR=E3_?jF7&sZY!rG>-fT`-ZUaj>=U% zmJs^(;dZgM7m6JqRiM`KsuFJDRPm!75b=snT?&g+UM+>pYU1Iz!@#xvfNVEcSWKU9 zG|F1795!AI_#C@Friv}8|2v@mwB#M|$JZdo8VcdI_3&XpTrtbZmfQ*&7$iR@ z{P+L<-@}*Ne)U&>m1RJA4zka&ydQz4d+dGZ!3`ST_}(wK{jdM^zZki|1S`Lex~T9) zj;(tQ^hF{3`s(ITb98!?W6hoO%jRJ7tdzh2b*SKjMCGp5u~8u$3FXnLqMvJ30j+9- z5+K=Ft0$=JCsfTR+SJtUW|VS_&?LB3d%4z-?w=?brqabohJ-QRr>He7EQ)*Gld$k$ zu|UsmB37?+h2Ft%Ii(NLnlwDw5%jtiQEh^Lu1_C6A-H=4FZ0@24*T~(q!kAX?hhlW z0DT|ToGT;{mk!=y+qtVBk;lKh88@$7)9*0RB($81=xH9>5}cqNae{_`@swv`mFSd^ zYf;QHgZ<6ihH!9XR{-iNZrFR=u~Jv~O_t&mSI)F5O_&+nHP$fdi|)NAzpaFXsVzK_ zMDrs-uR}bo3Qclm;*KP(*W{$_5Vazrz8ZERceSkQ!T_}_#aUd62U8_8EevL_{6jd^ zdd#5gcuMv!3z#RBve%py?lOng(hoe^0N8>r*SfJ#Bk+?Y>s0gC=YyBO&xtcHa*kbx?#tK{ zrtaGg`xpP>Uxede`}_Oh-~GFP_Z+e4s9V?ZbSD@2gv6KKvR^oq|%&b6;byPI##zd!%ZlWJw~u3RM$YbN=i zIoHNs)U`@q64<6hPAwfQ74qbCn6rf@J7gs^;2cuak5*_|V<=_h6~sEM1hvYaDfO9( zF&$nK`T<*bi1AzA4Q=5@+u~5yplRFAWjj}ppR>FcO?p0PJJ-|Uan^tZ93O;)Az}pX zPe5tt`HSK1JwdNQBdfRXydAt*dieM?cs3PCGRMk8$+$}xTFyP(26TNKn1DXi z*RACz4c{&^kd=K76NOQlWUrT+{qaGySeil;-)V_(sC_2WL=Fm}3AUT7 zhH==)k1QWMtt2)+kzA|%sFEk3ctmQuBVchO< zA2q>%b;HT9zR$>!YnN!(rzhM+srfa0(oLgiP0^svwNa{TiN9GSy_)nQ?dQrARz)qR z$_sJuH(OM}D)^)Jy{QqSe^`C?3|(=;+R|#V4d<{B$PzwdLK2U~y_}PMcz}j6 zU<)tM&qT;_-aBm1%iaG=Ucb7a{t4doO=S#I%ONPgXd}zHwnz+1px0I|ICr=MecW#F zH@TDbka7NjBr~~V%}sXf4w%2IBs7J)8TR))`w_}+m}V)TSR zs5xTIA9vBKo7WHK4%i)Q*AaYB=L*Z6aqiIJz}?y6`yM=aaIBn*+u!#7yWkM*JZMIL&bT0YyNrpcfJgc zHKnD3HcMwft>JnkEI^HZ%!+gBsEtrEFu;gi<8rW5x>z!WAtupOnrDTCf3(OSh++-< zXuF6`B=1GW(xKJ`-mf z<0*k=PX`JipTMV}SvrIzOi04XOjx}XP|LCv?qUt)qhE2k37>8wzOY;7UEx@%&UE9s zs3YT$ygWRGYEQ&&vvhsAvz71!~-3uRfV36{+L=-d@;WKvx7g(V%9R+7$;0ZzjMSnf0)% z!a`*78#HgUoXa%)Ndqse##MiNB{60AoyE|mHC&sBgcnfrrn5SgKctX^Bh#{dp8Kws zpsJ2lE`@S(l>1*`If(?;=LlXTD1jwrtbX&y3kwS`yydUYAN#GFSHu4Nvw!x_!h7$% z7mk~K@{^wopZe6No;ydlz33Qm%U{zyuX#@Kw}1P$!+-b>{~;VVLumY0e&tuvZ`9SL z_T%f`{CxQJ02QD7+UQ;Da&u=<=m?0Sry1Fp;WWtG2aV zf)SciHNhNHvxD4o#(C5RaoDdkp72G&F++88Z{wxAePv=rx%{ahE6uuAue zG~iMm6Fw|d5|_0&&m>kI85({{`P^2zADo_Z_7--;K`G8dtzOv*aIlx`*}GI{qU(CI zb)eU^?VE}x-Jk=sXmDuHh~4FmRbNxY84-yY7L-F(d;SL2ZiLi&hcMZ6g=y9>{fdNy zuaMTPg2?w$XN)(3R=JwJc8PY897V3v&=x<(BXXf~5%B`EmUGk=Hu*!MFgtB}5nApD zcTH_G7ZBU)!n*Bli#|(`BB$M-}RJ#PM~t z5s%|=IVnc6WLUUs>}s~4U`cYWivUo9Vkz8j1VFHb;R+y&%c!PAKj<;`c8XIgA)a~) z*Ls@L2~YqeTX_3nK|<4OmUA`RvgMU$(87N!-1&&5H_dM4`*u?oGhy7UHEZEL(6jcf z6p=``kQ}TfHd2T68@NHcS`qk96xDsx;jt>?SJnU!U5>z>XGIHiuW(Fg97{ixykH@JzUYv z2p0oZK>fy3kz!mCMa^)sGpbBxY1=?A7KljjaTW#kpl9v+!ND*pa;_R~DSW2rf`|ye zG|kK7U}LAmCJ)c$w=Qz+iu`v6&%Qx5A6UDCrLXtp&i?M-{k!2f8=MPjPrG5@qtJdA z;pPrGchLBp-~7$rJeG((H~c=`YbBqE<-fP1S)W+E->qB6+9wv#Hz9O;sY1e;Ib{&{ zobZ=bOu;m3ln%x)iZsl5TL0=0Qmf6tfH25S(S`e`9tzIdr@IZO+A!T9jl6K8JGY=%-xmf{@vrwDYF$R*gqd$qBJS4~|Q-gPR-RTfWAXC&S*sR5SnJb(Moe>w!wo- z&h@(Z^;`IQaj=_~d%gORw<79X?|fKJ)@Lry?mP%hZ-mrt4#<`L_Dr$^rv&mZ-=S!LE?23b3(k%5DY+-QGB3Wr|y{m+T z*=lYyjFV=<9*yTFYR4fA+t~opfN*xRm*}N|5S*~x%+OHC=ZuA6~v4ZA_>{p3= zMxm7VU~FUNIpWD@3&Xm^Cg0}fIoSMhPRfDhc|%y2;hTSMUmdKM^}w7Q<%2ZxtpDY| z{FiXt?H~W+e@v}kln@+MM$#SlooVfPWmul`hEx4V|L7lu<8Ht6JHNx*H+;i4JePaz z3)>z=Zt6bnBG4D1Q_t1+q12Pk5YDYM$wTKR!Hwc_359j}f&;~fRdD2DsiDy|(aYLM zOd6l78_M-Z?G{F%iDFPzg%X?w8Wt|CJI=(k1rQR3gDtgMBgd`K7hb3(oi_|xiX+rgiPO2ZSg?L&P zPa)jDu5AshflyfWPBP0X+z(chhu#m6=`J-c4_jDJzA)tvr#2&!y+_Ve&^DE`BL_z%NLF!ZN%(oq-nch6mZKKsZyUfP7u z155ZM*kAt3fB8A**A3lvBOhH6h;BH!58Zb)guBib)>qo|vKT#y5jE4}vK_mixkTjJ zH0?oG9uQ7$Rb6g5V7PdIey;ku=+QqqSZ_NA8<^azp;I_Z;24a{5Rp)Q;Ze-UyP;i| zv0czBOK}huUXaf?Ffk!mYB{Ii6`UQQSC>Cz%Q=V@ZR-ztU!tb(zVlAVL&NY>@K;D@ zQk`in8=oJjwlIvE`Zq(;*vAgAVkU3d8fMACDd$>*A{EH82sWMdY)>rbdh1TUbyL0k zPP>hDuAh>GG2{Ey!fEW#L!Bu&C(m~ z^r}3jGKFGZX6uI2x{lV@^MSJaxX*zeRXUO9&HM)E0+#Sev48Ln{z2N`F4F3TN{`AJ z`g?&|k0V3)D8q68{lEYBx!w(r_f05{a-4nn{qFVAb*x<^`%>jtyM|~7mf{Xt{zpqy zDzwtU@~tJi;!s4Q*0!5n!zN_}gTPd$#wUp>Y#WA>UuA8Ejg^zJO8JbKwi{c?B$}lk zGNtDwl?TDbbpR;n8o&;9sqN-gAlnbbYJNxj2DIs)&JvmeTAQv%L^#QyT4Cf^Pv#(VGoJt(_joU|GG{g zD|VI#&Du^PPo{}TxGkEnGyDEY&h_xn8|?CjEynCS7qa++M*Jt?c|#HOV34(-lZ(Z2 z3G!bFO?+qtuavhtcfL$$b;gi3C?FtFlKYYKK{%#WHd+z6vXsm7Ej|6KwG@XrSwkf>iSkX^ z;WZ?p(_}I`;tp**PRMoSU0nnFaW5p?szo?-v7@CKKeTK2&rpW5|Ey5lx|W_lE&t9! zSJ*i{!}G-j>x%RG8*GBA(bT1_g4)6#)@CyxG~Je@>)J1GrthPW#GO_^DZ64!mC5~P z2%)3NKNA)%%mXVKDtqHi^|BkmV$WGA&ZfQpnl($mV)9Hb+&{I%@#}BA5ne~VQ6ed{fQ&8E%Dfh|{AZ}SH0*7tVv z(vGn5*CF5fpZ?Q-Vh!m@Gc+{7@7Cws`jC8IZnp2%&E58ef^!}~A9vuTF)}QhpmnW! zfQ?1sO6o6l%5M0ChmET&^jil?^$X}=sUikR>z;#rE4$+O`zsskWNbymkhGSuS8SNf zkD#CtOc6d3; z-yvK09fXBV{xDUs*mr!S9hWyhel3Jw-(){m+z2Rd@F|9cDR3BF?hu@$A}5NpY+>J4 zIF&fGPFCN@501snEEWyqdOfRgwe~zAYvQgF;agC`;OiLcmYnN_4{2EV?C?=ht|RgM zxP8;M{D-!%%tW3+fnzB|Qm#W55k|{7%w&LEts@S~aPpY_nEy2NF!u5tH0Yi94{Nij zf$3ptdOosuYoWber-o!_QLELuR+@uA4i+;!t7z4n1?ym&B9*j8E6E|rshJ5Sziiew zXmt@mH{aDovH2jH=Vx;i=b!K9LJ~l&|K{KPn{ZO?um07)`W#6N_CW@Fy#BBKwZ9fl zs{QgW|1!0QU(^%Vw;h!`?aNu`@9DcH`zC@fqs;`oOB<)m8up}alnjjLSi7pvRYb7h zmxMyoVw!X1bB{COo@GFdqzGnMp?dC2l+^3L)<5sktgK+oZweMd4s8n^AlJ9iP^RhgjeHUG;#Kr;V*AWWd(bl(Mfk8WR*COnD5)P0U zK-_0&I1st==6P1}tPA*YpwfgN&KvPsJfBJR>BRn;bRQG5jkT|#n3-^CFT(g>^Q4zPkuy0>}+9znQf~jJ1w;k>U{vw3#z?pkm;JP10){U%}!YSe&p>tpN&2VEmno zizIny&C*!_9zo&0=Zf(hU2zr{!vQ=j0Mz1A*w4C1CARSDsy0h!3Q?P-yTPwePCP@d z7v8&H+<)yttPbQm#3zApd&!XNmGG9n=yv=1TPBi3#_&zmdf?d$nQ0A9@{>GN1EejX zNzZxVx!0JfP4FqN@wrJ^D0U3sms*YM?W@YRx^u_!t+H)vOW%9x{KfeCJG%Zr63cl; ztUxKw;0fV8*up3V#)+aRv%d&kam4mKHoTa90A;d**5bg(IJ1xgQDW-3;3c(64R_P_ zbA<}?>#_KZYrq^UY3J;)1eqpxsqGT&(95V3zlK*Ni2_!f-B8s8`_U2!UUln34DXi* z>ms$TlR>wYm%)&KboA;C=<}Yp`F3B&>rXmrb^8l{;V<-RCHEnDx6c)czH*KghJmLD z(H(4O9Ac}?N?%uC93z)R6`ELb2yo#gh~85tab=;y@JPAtMb2>ar?H?gkt_1#V^wHMrflJvoU7zmlS~)LO@d(uS+VQ1 za#kGlg^R*wZXvPfYOVXK$*^k)?v7j)sa8=%tD9HwFZy%0+_A#C!V!Ir^<{D{FrZMN zQ7|nXx#kV#bEospJMV;l`cMC9cvc*0X}_lsnP9)UlccdS0=?w4H^8p-ZsP1g&*7g6hFyi=dYB z4>-`zUhxu~)w~=BParIetm_$8dY*gD)P+Y6ir1aYBzDP_13#r~;oA~%z5N}w-=8!h z6YLfvwCXrRH>Fo3g(bFabN?CIbIgtAc8l4#v3loFSS;XXAU5^{FY~R}WXImT%I@t@ zXbN}U4tG9-=kE&a-YT{-wykOL2yeto-IoIE_vQaH=coQQfM^A1Q zVi{C@2?CA84y*6O4WO(=UHRM_?B~>;>l4nJGoYE4onon(t zsw$H>PHlJE*OfRnR`rzfhf^psxl{F2TNUCAuf(E)UZ|lq)Og~=!os6bI0RyyC^2EI-6Mqy&zcYiX|1O zy{AKKbw^vcZWV_4S+(X_&PwYnky z_}~89f1?9+XPP5e+|ZQZ*M9BS!pmj|jRU>bfXEbtHGpkPGt>;u0Y_^|kr8x~{ z41zS(@h@aYIP-WpplXD9v$4nj=_J4t1mGW4;n_OP&Xgi+5wBhkb*=}}dL;VUaj$ilG_ zq!`zQ4%fiT#O|q(7a(^yjAP@%@P4XeB~dG!>=1vSV7 zKZ$=>vvknG8%jxQ7$X{W+$iKp5)*>f){3cWrfvQqR5KT!TRkJ4R!KC&!pH~@vwxyB zQGW?VB)%BdWd-MLEG@?p z$w|hCF}AStWoV14(4-}os?ap6e!FY(xPhvE+k+iVXAauWeU$kXwmX%`>FcOkc>}Od z_I2T2arsmBf;&peMJdi^XdP_QI|HFfV#6CZT0tgS(&BHW5Z(FqrU2C|X9E7di{iC! znZ}~4S6ojjP3rfZ(hLUHRC2B=gmICmH5^``#v^AEuVr5-C*(AuJ`xtDh?V>eJ>#qd zcPlP{7?w>TZAnhHr@OH{Ed4L)P=BD(I^m@5_G+9tIWxHZ?sn#ty>=SgX2DuCU0V^g z_H*?M4reDdl?&GQHAlRa*1MKYc6!B1aXzT!h~uc5&YVU1FaPDg4FB;z{>SjL8{`a8 znvEXST> zO@BpV6L2dDo)|+-;VGA6A9zHtcEu(EGXo150^OkA6(y12!wg5WjN!>)La;D%uM7*L z&ULTa&wgMJ48vv#u%}&Hc)J~I*^Ld2V<2W^&13EzUX1Wj@Ky}A0vMWz#AaykVN@oB zhrOA}F=b??;2Ql-2=<(7Ohl$ku)l+5XH32W$`zZ}LcC=T_O@Yag4QeQShw~sMH~P# z$O6Y1=ROxmFOG zN^4L&&$GV2bqB_7t~Ez6SpMz5{kOxbV9?x!R&tJ7@%SW4Jbpg*=l}elpUJVq^6+pU zt9))fma&AD#N?X{1$Z|c>*-q8VWy6s>k#s{k{ksc+RrslrEwfJb-QVt*pHzhVcxmc zfDFtd8=FTqNHgbp7_41-RusZ!=|MZ=WVV`I#9DA|;im%9o;-nD(NY}a3QIZ?e=qmL zyKlS^F5WXjlSEdxE?z>@_1LB|4Ye{Vd#&AgLvQ3AX{I$&nyE02VQbGCvJ`6y3zISI z9@uMk{7soklQV^Ld2r@k#pBbzVkbW%vlelzcE-||y>89YA5P9iRv(>}qksIE%EC{` z7M9PaMx@O|R@)8;Zr*Zk(G#wi-w1L=ebmC_F#T{UBB4JTTh3X_BPujm+oN<%SXg*! zp<*)N9J$6p!;7iPq!7JnFsF8PQf6XP;heaHi@0=L+Y~7*Gq)M*8zl4fE{a7vxtBd8 znj4Pyv!DGe9V?c<`m4VhUKK-W4oGYHB&!?cnA-=i#vN-=<}gEQrWFj(VBK(%ldW1^ z;VNmrwy7`&6dnc+g@F)A_oweHTmXu|W{A6iF^9+OxXlP7`?&_=%q%RhU3x0Sv79TJ zHc)8-p{auI!LF9L%AJPlTp}QcwD# zcv${0=!%1`3ZsQUX)O|(MkWtEYFXe|X|!RlA7scR5g8`V;vClMoONGy<7ig%52^KB zAfc(KEN@Y&jDKv%#0zw?IE~F5#r9fPFv6|N62|(=T6*(-_DjF?OLVR$p$YmI+i=V~ zJ3GB(CfJ2H~z-oI5N7Cli~8^+%hX&I06W@Fg9zazA#${tE8qv6PuG{ zolB4w8%UIH!12(L>p;7l=!s{Cu~4v4dI&Q@5KO8oGXMR#Fo#8=CX%|%`Wh)KH&F17={AUj~*7*Cb#P$?&)sRuLAd@GtTk~ zXDp~`*)J`rjhPM6>p@0nB8Fv`1$}I-csWTjg{Ih|R+sCVT1OlY3*!QMu4j6c%5a!h zZTlNmHtQ>O#%3DWrG=G!_EMH}mhg)#&$)IHN{&*_pFba7Rl9uoa(Gp3Wo2b1EZk+0 z!{&sh_cx06v-3>_IaWJib;`9?sbfy9!u{N6j@4VxSrWEtid1otblGDo+>Zg)Rq=QO zTiCjkc~cdDpX6ql))VAf9!i=|ODzGQsB0j$TrWjbjbNQ5R{>z?o~C;Afnnj(3+qip zfAAgfd(O7vhmS&mUas#3)!{|AHdeF1pv%CpaEPfdIe_D)u3x_q3ZPfqT9$BoPO)l; zE5=NSslO|ZzJ-w2smIn0AX;C$khS3?Yildi58vTy?@P?v zhsJa7c^%Rj(wW%JKu%6!{all-@V<7&fpGsmV(yKgS1ZL?WI2u^*TcqW++2=Rk94i0 zDvDHXl}jQHW`!aK=53YOR4Y@?LK~GO_!%DNXH>!2a)~W$4TnpFgDc&{gsnzgn1Gm< z;yiDCOyRzD45B~&<3Aq0;w!!)ylVE%-~7$t>%ac%!?kPI!mDQZy?^fKer_hR;nqd2 zT|xi3nKf&}HOY!}A8xE@Xvo0lwa}ThLlplA5?vK&vfJDVIQ;4Ga4+OV*|*Z(7$n ze8HW}L3q;lledd~cEov$I}4`pB?$^|tqh8H<$xIL#uuJFPY3&O_^5z_2D-VPL7W_d z%Q!iEJH?I@nkav0eR1}*4u@=E>-Bdqwi8t5?J*9EREk4|rjhn?mATW9#jfq~4nj*K zhhwF5*HlY$to?a(VTd|Mo*Et&Us^>kyvF8Aa}8#4iIy#5ZCtHsUW)Uay`SKE&I|>D z`I(>jneZyvS($K4^%uGN5s6F8>~8)KXtSldpTq1cpS<7Zp6kfk^v9StLUZAUG|8Cjic(uYU0bXgn# zJR#@GaegU4=O8IG?eFUTJqt;p3E&LzPv`Ksh{XBHIX-4G2?|ZfQyv;GD5$ouNizfx zbFclnuEVF^%9*#62USr1mF z`Yw%*r0zIMeyZ)_Nsi9aaJw(pc#zBUK z!4|H`8K#Z^hgcg(nP-hdb+8BvPbV`v1RfT40mLvq)Uh2hi14y(E4oi@`8^9O2NUaG zTe9jBBQ%}j_dY4kGUuv>oGVh2s8+$_B-%ftF#I;7t{^jQ{#e`7m3EyGTj)DPfJ})G z#~BsFtTk)$pAeDAW5mJ4`lB(QLRK&9E$8q8c=L_xn(&2TN3MFT`pR3uGecXpya*); zC^Wryzd%=<2gsYf_mBjEoNTPGP4*mL=~gMb8QaLyIhkV*=UxXfW$ zX}xP=2-`(F4+}qM9?m-oedOytaQ>k`^oPQ$U?BXtbMf==13&NsN(6ib?9cw$Kl>bE zDYu+y-o1|IHfxQgxSFO&$f_~)N#rVHm$FDoEj={B{wjC0S+=o)1fq?l18bH(BhX_Y zhGF4C>syCS_WU?+2pTNsYBjEqK6E{UMUT`hg=KsHZbd>;BvZIviy$;1@`*ZEaCjc= zJT9Q4aCV?w*nnC=Xu5b##&`<}BeI%I{1!@az!<*f`oi>YEp*)oBRpJ|g*7~RQ`D;;m4#BDT+-N0*Zs$<rMqY9!~12@OLBsF6aR zwUT@LffC6ZD-v=jBqy7irB5{{pe(i+Q;n-%Bv2QTD<*|DYGhv(+iDmj6s&J0dC3H= zc~O>}{iQlF52YkC7dwZp?`vf_O9kl5qXD^o=XZW*c-id-fA9yN%QfQsAP4!f8-8Ep zTl;dYZg?(lkbczbUUl<7DULq^snVoBsm?Vf9MJ^Nxhi6 zdR_TN#SKHQ^o@lHNhD1OZ`0cLK`&$85Z#u1k%%@gGzGY$F2)f$On4x+z(tNNhfnASMP9F!@`vpU*|7T zzI)6b%`9O}G0(ZapXJ1qzJb!6?@#{ZPs$~+99~uffeAz=6!GJj^Bb7MU;Wiz9bRVp zsh|3(&I zVKTBtVq#x(Zg8@Tf*jR@+fbX5>zAvEvxcDukHNEP^-pEWT%W;D0Jfw!{(R^gE$gjfJq|n5$ zuzT8=2@dN?QhBGu7KYsj+L`?pLc5#n7~p;H0Hq0D53<*j)Fk%s9nzq2O9zXvFjCGt z#_kgMzO83TL>RAD}`>YH@U5$g-g@~sM7&1qT` ztre3f*_T>PD~h0301^ zV0h67_R_oJ?BfY51u|b?LI`VCii5P`Q~9S{;m7J*WPg zXv!^XmJR~%hHc)ssVWk#AxtM5+ESd5vxReIrVwW0m^0!LG<+`G&D|2GdM)0%-tNTa zCvO)X8U|a~wJ)X*?iCjg-iU~IH>S{(R8iMMqz0s*SA>NrAR#Aet=cI-XnIBjyPLkA zgkeu;<7AKQWaD=zwb3q<-{Z`o;zx8n%Sq4+A~y%5wRLi!LeoH*!&*%(1KA)o3>J4< z26L({ux(7$#2(dFu#Jln8pF1|q~>s#+Y79VR&z(|4mMx^{_p?(@Y-vyg_q5MSkIk1 zMAID$rK0 zj+=mB*(&`o6w4MChEZD>3QZ(4t*QK>*pnwuRQ@p0h0o(FbYB4Q7T+l@1%7C}EFs~$ z|Cb_H7=f$!GU(+?ST-_3dnNZ7H&O|XrcD)uX51xpn|ZTzxAex4m*nVYUdNYQzaHO` z8@FXV<*Qe(QsE+eT6UIOE(2T^_s(C8_s+}5cF{OZfMjWqcjJ#uP>7!SM~>r32zpObjMnde-KNxR*YLvTj2#yDY+LdN1)tG33KyCxS_RkTfodGk6~ z-KX^VP3+7Pc@j(ZMr`KF{qJjC?&JJ{}o3pNiAe?TkDv38Z>s#(?u5J2U1``KnEH|b#4hWk<| zIAaM944_P0%s=zE7) z8h1<KK+*DUg=oH!CtjwFrYRF zO^}zmB*^u3ftjzPj~+{L9u&>f2gO5Z3-c_T38x`fg_BZ~Z5Byrl9R>{tF%~{j`a|w zI68Y-WScqvK@Zfy8p~_}#mPgHK%@eq&5;J~#D^(tk@Bt9*Ok|e=MWMJU=VBcFtk`m zo&EvMii53qVQ7g?%44MVPUf(^MZ`Sk+O_A%>VPT1QKHc56AO115g&%G|D$ZHP2sB#wAFM;PpBqj7 z@Q&RG49$lcP@NI^rPiATQE`OA<~xuPt|N%>s+qj#!%sctvU!@?iT`f{v3$mRoW9xnabul?Ha zt>5~s;iMZJW$r|~>+V#s&2M=8$N%^r4=3I5`+1((9jyPpxkK$<7u`DOd04pL$oIe` zpFO8F-%1c*1C!S8m*z!Vc~_YBC_(Z|>sjm4>RPq(HM-OF6x%dIvaadwk0I9iepN|KHY72+6;o*A^(Qq!@ zM_3px_F*Wt5J}~Gw={*B$sgW^6N8Y1m*RxBQf9_6d3H4uT*}LE$QBMAvx?Xvnux@P z7tI2#-fX{&-)n@XYe5N3aICk}CuuZ$a2O);u4D_pc7glxK;CqIT_vd=4LQS!r-58C z^N<0mzBnhj6nQ8>Zvr!@;^zll200btWR#)FDSr8>U;$)u3(c zo62#}kFc@}CpzjBXDb(#x1Te){AvxhvThA4JWjS+eEw5$lyB+0Z zbBBXm-AT?re&aWOWBB%O|Mus?zqvyl$;F*JRX-PB^EF=+KKjv*hLddg{rouduy7xG z&264*eSa$(mp#<<6dY&bgis36e5!#7roph{W1y8D5bPrUCS1c~=n3a#I1?qLE+mb3jO_=-qM+7&?})R!9QGEmf4gA?5lum@)J2e- z>pIXYio?$k_>QnJnx%s+jGM>MQOC5q6ynOEoJeOgA@)8(cLXae zZd}0M!U_uuOq8?6)le&Z?Ifp&*IJS@oVMwJ#CQ|On)HVCq-mKnt~9tyFTZI&OjVh9 zF@g|K>IK;7bB%_Kqv?6h|N38Gxd?loW6hmv-#YS?2&tY_yMF!pb9q+3xl`?ii}Tmu z{U_Cc*zx=2jOct~(RHxh$rr5abm!Ju;}JM^nX*a-t#_3%O?IyzJt&%g|BiJPXQ z?u|?UHcCam>TE-FaKdra(2DX}bX@gTbHm=f8(G5@;|c>SQLulJdIqdk zJUoT;F`A{{|Lpy6UvjPwG7$-d?}4PIVr4yUn@ZDKEpQ)@Ut;S{Xu{n-!oonS7KeA0 zCYIvlWG28@pjL6X@Uz3L1ZP;a$dzp2TzEQnxVWQW#8hitLvWR*Fk6aaedd^RZHmee zEX#3BDzOanY4wZDov5#O(P}=Rb{$L}9{%3%{oWH zk#@g8)II;8eSFJFO>RY)g|_sU_PCpK&1+rt__H_S4&h-{U6te=? zXL5EH6q=B84caVS>s-;r;54^A#Vo{56u~Q!)tI43SePf(I^z(vngk+#2!`r`S`oL; zRGQRAjO!D*qB{;~;K;c`z`q$1P)?2Q=CtyBi5geRA68vCe>|79Y%nP1RNulw)^ya8rPGHMXYi`|ZW^O%JfOc88A!1rxl&**F##wHql83Ra z=_l931~{+%cN=82u2@X_l$x@jaB7jBrCljsD}U-3&lwg*!*qm&%gmt}zSDfMF0;R5}*mh2k{8SRtCm&>QV|9=v;M>KN4B|mir@B^_<8YQ2QcahJN<3s@ z6!-2$MTTBw%1knAoIBVft*`W^ufDO5(3FP~v3^oYbKqRyT#s^=c};7dphW)K9KD{D z(wtxTgl57%i6pvD9bDhAQ2&HY;0N6aZ`lWif*sxv65g~l z=p7SKx}lymn(SfpXm4yCYA(FQp*{}@r{=FFMr`Fc9u`(wG9mIUh0B{ZtGM0rgpqQ+ zi+@Y~5c)wvuJZia8HR?RngrsuoiK)kVFLf5(X_YBvm2K7_d^PL$?WF9*NdQxsuXc&almu!SK&&C(lohpX{N=*b z)=k0wDb>BUlik4A&cnhluzaBOFmaw+%Lmv#1nal2`?{|?5v4iZkZ7NS?QYMPN1@oC z|M{N}$K5>7+?QMK{=tuHn!Wi6V<*dk5+91wupt(hXrc_kK=%WD2BjE^!d zqTGfhH}(%Y0aFJlXfhXC2Ro5;T;6Vugwxa{J!o2Q!PXDF#&r?Eh$0fmx`Hjth^Bbf zT@#UT?(6n;Fv7)yHqC zPNU2QF5Aoi&1um`4{R-nNL-M->qD7QoNYClXiv|cDli4v0j0_7mk9rNRYd~jIQ)V4 zi!jp{@SsSN{oK9~@`ejzXRMjVFwtvcLK0bY!%J|yx2vyvNVsNa2n&yho2{HN2e(_d zJCLlZlqp=2?jD<2n(^F@ur6abUq34E+C_Pe;Er?GoZtWZe}5{y=_1ghjtF=?rE;=+Kit`R)c z3MQVP!B~|ANujw?lb7HS$PBqM@lu>lC!9m7^)C>$A_A$^9|tDh?{ua>A3*fFZQqeK zc2VdW!V|eYhIgHup@;;w-5;3~1n1}BJB2fvw&C>i@AD%Zwu1QeB8=wbW zZCkar2sT5m{vmN@nG~M*fkDf0cyoCuBgIJjeY;ZVzQcnBkgA>dCZ z*|!brNn*BfQLD-bALI^~Gq(Z5A#558R}mZ;RRi=Z5oG0cS| zK9Ch1wVf`TxGN-)57Lh2fQpVYd-i94_Gc48sV@ZFhgS1Yd49ZIr;FRq{LIgU<7zDRINlf#w@CP&2G6YoIC?18dO_MQ1xYl?->Q;-+T7D&|*BRc4zA@!kXR0hb zW}NE^n;;YAXj|<=j@t`q{V)mkb2(~BOo&_}<;q6s`@6G0Izpc42@V5VLsmqPD?r?N zbjA6Qb!CIDFc?j!bESW}to_Hu5?k29!bt*ABDBU9E}YnuJItB3tyx*?jQpW4O)t^h zY78+`Bi8q`<|kyj{jxJ_Z-xk!Cd9P0!@yme8R&s9-fcP8hnLQ^E=D{oLX#rbX(BQWY7Hw7^3Zapq)}CwjNBs64eOx|fa5SW zd0K>rsji2yy=+S<7p)eAAj(ZV>k4wNOW@C!yD^Hz|5Rst#p@6)L zK(45Bg?|E5_)5pIW+D=aF|4Ukn!D0yE#}e}#a5;1dA2ZL5Q`lD7g?Z~n!-0b#k8Bc zGn=xygB|mJt`LzxRBAzH2y!53JBN-0ufxIq&I9h=IU_Wo6z7Z}LUhHk18hri(uv*0 zREAA+_wz~v2s|@J-*&J+B(aH^R;UbX@?4J88uzNkrJz(tv&pH(Hl*QhG&Mv=Xc_s2 zU^0mQJYQdt&YsQc_&kfXL&xSq5+B&QVZbhO?bf{ZAy|~=9Jj7H?p$(}rJM=ehsNF6 z;Q0^gV6i-o4drtsrta}~ClXzU>Y?B{TKya?bAr?p=9an*R4O4edVlJW`c@lS1=~bM zNhLN-1&mZ063+AkLe60^FFW*jA;l*oS}3{Kksu$2hR0eknIeuPGcCAV4U33O3UXbN zG$3x2K18GRXNtLE)qb~;g+s7zu4lxrup`b;+nmCjF+4aQ;-#%ER0IK15TrU8v~B3zv8Ip)Yqp%GG|-fN17#A+yBgUkC0jX@ zlMA#mF^ST;;6Qa)6`JNw^^0JAVZuIQQ|_$3^E4E_pa(N^csQ3IWGu0Xm22d5Jt891<+?ALI`O zx$aw?>)zsW^hW8=>;_vy7d3cSufq|0Jc;ok0#@%m$`!JQZF@~JiVLfnFiYi(hF*sy)Nake8i<+T5yo6g z?`de*qz`Qyfe}h^tf%V%kZVw$4I8Cb+7)Ld%eexIZJYif{m7Z@z;W4+5GlPM-hBt< zIBjF`yPwh~Gu{zrf6;x}riw|3Z$oz+N3I*eC`w{IzH82ZBS>gXPDO_oo8Vr_MruvC_C z$YbPmw#=~_jeL-WIi{vMQfaa4Y$$kO;{AB4Pzm8=L#uf$bQUN#O?i}a;r`Fn`UcXj zgY6E=UAaKquE=Z;%-k=xAxxX=0r%xt@wjgS(XIJC%F%Ww7FhntKlvxam)j6Q0AkON zJ^#I4L}2o;a5*m&|2(Y;jd|6^y5jgV2ohHoZ8Oa#k~X#Zh=+$~OLqoQ1twA$*paM_ zpA(eg@ZCcanuc(&SO*A_)ErRj2ue*DnM)J@5ma=I80|)Eg6bA=~#m0tU&Koyk3I@BA&C;whntl#v`G#oWVT%`U+`Qr5yKNkc8X)oP zn|J|AapdKoGv9&QMR<$ajZ--cB#`f2lzgke*LOcF5%AFk>ODS?u<)a0cV@(sl^^CN6tJ`D@!p`K#n!$B;oR@cII0hvHd>hp2Uphb4m!#i$v_ zafJ>H@Oi~7V;EuL+Jq$Rl$eB9kuDkvQ$t%Ap^#~)27+Fv;#9?*))*Y3CHqxR82B_Y z#6rSTQ#zZ;Los1qj`Kyae9(1b3kYKvq_G?f+Dn_g7v%QSKmF5uAD;JZe#>8*+lxpu zefhsG%Q<(9K&>DD_{X2iHTI#kJ_nPpBW#z~`*!!Wdt7h5^%l|l@BZ%Za=V{{zW0Uj z!N@{=lb-G}KMo-1F0=V4r0&P$@5laN+dSX;c^Vs~*DS^HPF=DtS*)nihj6epX-;&I zN@p@0Yfja+%%;zBjwZl~iR?_3$|U3KgkvMqae`VW1Aw)mD!!w0Su@h*{-MIw15NXV z2BFDCiuUjC@9T5O3qIS^?}b}<_N-VN#fZ|)^{^eDvQfIY*TLxmtxO-T2UD?E5eX1# z@4>N1s&Y#fmzE?vyl*4_fgsqA2q@f{J#E*;$=$kjy`bdpjZEhurXtta?dh7x!MMxC z`%|4x$Xe<6n{M6|)OthfT(9WUXvA@A6JiiqcvxluNEF}o1Hd*&A3oH)t9VVFeoEf; ztT@I;ay#=lFz>p4C@~5!hO4!LZRe_0IMaf~!?+>zdl(8xV(m++CQJ|HuW_+}ctn^U zmWLC4&8RBMaXFIE#Td^NBbhCYWn0jEYdNe#Inj;|5CATTSWD_WlvC|$Q~G0+Oi#c=uhn&o7Y!G6)yQjp=PN(`{|$5doUA+OH|*}A z4g!wGZ&L|3+F_q&)?&pvYt*tr;`}j+A)4e8Mo) zQ~p7PW>^lJiTq>4u)-G1l16Z@_Bg}^dF|m;g2UB9bBO-jgT)5wOb6iA?CnSLYlchu z8TD>lVR_~=D)_BE*@-)7Q7T_}YGpk_jEKl}EyQ!Od`OL9iIhUq9%NcXh1WuJDIli0 z6(E1e&Nv|Af-@wk%|vQ)KGB^l+NmfuIv**Ts$ue%X7HthKF1pDh0&P9{^lSscq6p6 zKCE*Er3%x79Uf5O@cQl*dHfl3tn8h4k#$DzzGojdQbN-sM2R1RGxS78q@vh9JVl0Q z*xO;Enw{pWRV^5nzd4mbv|s@Q{L7`dD7jZ=k4uCRl+KMKVj&JxKx)vMQVnZi(*4eM zBVB1~t&>P(YNq9MD1+dnE~djOOq&oaFcMm@Upu8eIC^x^su*@CEQTx+%LVaP|K1Od}p0zK(+C_dxos%wt z&CgT*T7O+WvG8-yMYEr)_2t8lB3t#TO8GhHenuZ^pWEkd9ES=AnrZA(7~xq%cEoWC ziCiC1$(waisV@42%5`x-U&cPJ0plT6no5iQk7JSljq+aMab#ateEV%J#{t_4PVWwquAj*qIm8@MTeK+Ch6M}&N{T**Wb>5t z@8a?FbmWOyVL#V`@dqH))m8maG{;3)cy*cb!uvb>h2q}>#^x8M2ik0R$j~dldn`ZD zs5EI|*)FpvajKJu8rR{0IM@;AX(vdS!}j{m5a5}UqPi1=VdrwkaeAfI|@fR{+c`_+%>#5cdYJYjtUbW_5JzhVSAnv zEP9x{?r8H{zRlN*9`aU~%;T0jMh~09JUre-)VX8r9((>dALKXa?vH=IpM$ceF1L?t z)`!%)j&$x+zc{9u)tXKgViL@~YV-7H^$gKrL<<>=$W*J~Tq@p?KQVxgU{0H3Zm9&& zDI2Bhs5h~kE4=!!nlKGFwm(k_HB}>(J(RHUp_5U;79Ir6yEf30-!JwjOU-h*SBPVc zsx16WBEzd;2Q{v!Fp#9-+P?qFg^49}9#J z?>;HR>C<7og8P@iH&82npl8p}=_AJRO0m0)yz5@rtCp2YhLeQ&{P;l2aPZ?G@QXUv zS`h415Uc#%j_eGK@goI;7^mM6z;~42FX!7g6Df{tArYhFOV* zoH>^0P*fr$GJwj7HBH%&Wyk4*b)qO;;D2tPvmJ#N9ckvst?OWO=fVQ{EF796H&|Ef zV*ebMpvonQY= za%Y*>ulBKo`_Q`omVM`8ZlAj~B?NJ;BM!!-LVaoMWQofXE`5O(?%nZGuCN;ZWQ=XaXCh z6KdmyP-mi&l1lc&v3e;E+muRJ_$f+prcYE(_tB&9aQ&;Kmg%lV7%LkP+5)x5eadyXNE=bc=b$_X-~Ng z2RB_KNolR#L9)7Fdm#{-DB!nLK+iw63xgXxAyyX2jtN>5%C4(>X> z{Me6T(&i4Ud+aYl?e7;B?>_czec|2w7`qdSE@I6m1il}0mhcy9GWl}UTDF~VD#}UN zgukM6zY0aDP>!;Sn~+$W5jk*9psSCga&kS44-$Br(a#NXBHj z^cH4ihPC{LYX|LysqQPpP%!i|D7+NN7JepSVZQG1w#pwaoQ`Lpn}9MD=3CFP6z4ud z!{UJMg*U_#A&hEWT|eB8$5(+4-@K~6%=4|cnC8?{REyZgjUwKZlXfHONz5H;o@Sjv zu0_7iWUV?^Ug8@n-p|!LT?erlHrKA{UjkdsY5Shba`bmCu1!Ld*18HXeNYm+YD3$C z5MIVXB%{|C#KD4BeYjJwfax@1<11u`?TIHvtE^rn;5a$jcf6iZ@heNyh#x6oU%F*UCe$)vChZjEwnxyrIhhGS)Q%7`Eop2Ba*Y z!C~_#X<1SQiS-q6)x&;;_&Z#*F!vr$fx&+FluAN_@+L@4Sbfkg=#eS8IYfnm$f1+- zQ#N=}@DUBF#%D|Y#i%-x0EiX7=2l_(bjnP6v;uU^A$<04B)-Jh*dVR8zHD?658a*d!$sVT0 z+SVD*Z*D2FvgjOV3(;6x5GXUpTEdhSkYr>@0Da~K>nyOAFBfufvD|uKUB;r5--I%0 z50^I=1oG=@4E=KKjh-~ugd5Q~*a*mbipLjH=&1-1mz-!{p|9?CC;f9URA0kWsP8CP z!;s^&Bq#&lMh|UBuo7%HR&ws|V`r5Joy-$uAAp3*rHmdor+9kq$Ejw`iq2xoAMqMQ zp%PanvfPi0W@_cGij-_|qD~7vd7ZJh>Sa~lF&KQTeTdWU!$^Z~=ZJFNK5}EZeSZX3 zR!ee9!K9qqczz?bn%?_68~AfOx%CTxT6*7{yE$@bpYBH)UylzGV+v(ofto&_+nHiW z9jAK~532Zr*`a~G5M+E}hX(pF3QkpJ^QTFA(<5}2VuB8eg@@X-@m$rx(Gjx!68E_g z1j8e<6Go9_TQ&0nOKogxc`PN`z67u*HZYLD&3JBdHk}xxxMoA-1gp!%DsW?W#hZ6^ zW1WAeQqt@I=R$l&l$P2hlaz6&J;OaO+d);cn$X*iwGCPyz1Np+cggr8;>u=4l@2d;wr+_>fL{;-Dh zqwV0MU;%|B;$k1dj6ER~l`#&&BVoZAqR^qgKf*cd4)Z=X`|Hw(Q18@&lnAJhE+m5E zTngI|?NdsY=wg>YN+6@8yh=o8SqjZt9dS=&Ir6m5?#2kpv>yYva3hJeZsQo@TU>s8 zzBqR1kT0U2@J{6aBWy+|JVDP+-70^(_rP0^oy}Hv{ZI&7{#6)#{(SrF`gp$Kbepe# z2@ZU`cKiUUf|z(!DGAF{#f)d5;-oIJiZitqE5(e5bnZB_)RD2ogsvo0=~i5}p>i`u zIJb&k8)C0G&=Ie2GhvR`zv!=YyB;tj#Jj;o5T>u88v***DAS*NIB?ji3{N5!9N0f^ zyn}gYdw5OaSSj5;4E9auNs3L5<#X0mN{~+$N8FbJ@p0{jA)m7iW?dY=mHYsUy2WM( zRo^ia>Z9vf>gJhtogrA|;lXkEtAs|&Tw8t2q2@$Rffme!^H|lY5c4b0IBTRA=8!d< z0Pc=omN4%Z>M>+#+Gjwe4)V!@vT3^6;y9Z}>m@0Buy#~~fQLa>Oy?Vk=`eg`2uOt= zg+3`+6z9tr6858yGdeSP7@)6L{UJ z88jGm@?jtt4holUTqe3c`0|b7UZmj_XvN}2_yf$scc!&B*YR2t-(m(=6|aSNqTdB~ zR^g1EZ>8`#zmt~_T;~CqhTP_9`3WyLsq?hq(yDW&-qXu_blY3zyW4T}eYkOf>?gV% zNSR4FMnTHZ5UwIEqwKU47dS_UtocMAF@hiM(;Lh;f|6FcT zllVWa!cId@BSx?`{$N#1+);kqScfq}YwGCe6ubOLHY0`WDx7hx|K4qC#tA>df_&Z! z;i7~Nid?2c0s6A!Q-|r=-$#WI+t(q(BFd2s*A2C={^yTETckx+Elo@*6R$-J%@90X z4)@pCBeQF-uh;UbIjWr%RI2J;eOyM=lbz~wt4IG5`|QzpH}5LYT@RvdcKl!W55>QX z+r6K&Z@NmUYnd&;fhFa&rCUp=k3@YbOi7FUVC?=(985!x+Y*m=h zv65i}I#z1K8w_LiX%2Zopgl>jTOrI@^eZ`dg;6_zj!ssid_ZB^dI>JO<%rKkUAoz` zd@T&Lf%9^%HFEAE=3%j0$dX2~i#heOUC7~KM@_mSB&1XbgkLYzQ8&R>SLGR3W}`i9cNtFMR0Dw2361jfP*sE?ojIC%+x`j^89`8 zx#rZ=f&NC|kkI9Px-~?UV9G%GNhC>D;wW$x1!?Jb2I=AMf$@%{R66UTd7P^05vXS- z8ZfH0SrWdj@@7<%SM_*v*d|Tnb~MO#uxeW9-*e&HaA({~?$|B!Bk`I`<<9nvKcfrm zYxu|79g{VU*N%0Z0_TB2fgfb3Ha8rOB$>4zLqx81-lLB``FlO#B0k!0_g%Y21AMn% zWGIdwJX03;=_L{6EzP9N{z^oL=%cI|;o=D8vc?#AEMBo9@6v8!kLJ-G)Ziq8qL-Sa zR1p0+9E1lrBlG)dtTl!qw1mDCJNI!<)eil1eT?s}4AZT(VdO-z5`Pjo4s>QS1+yWA z=$+4!8MB;%$xRQ45zhE?%VZaFgoZ7`XW2QN}S5nqc2tZuQq4u2-A}f>SLV*k=CPu|_vFxFWleeUr>z;N5e?~D_c+AoO% zVS^#{xpl5Q!w$0qgI(G;xr7`96?!`-N2Lo0pJ7qIgcA8S$03-#DCP{&=j^NuQ&a%` zmGsLgoHOEUMDvI$?wl9heGS>;+bXKQ#Akzt53B~K2 z{3CXl(&+JZ4{qP!{c(DGi>H=*Oj1y&yUDAzeftNB*A>yqwX?TX%IM;wtKAz=)sohS z;HS`>Qd$7ldOLyPJPb3{(#kVG#(8e&46cck+5BDx8!g8EAa$&7gkO?NCgNT^o*LJ3 z2Nc|p)k1p`G=MPXSoN?&S?I*2TtgRTsy%?R%M!JQTfYOZhV|0yS+SA}xi)RzP&x1J z5r2%2Vtvrv)*z3$+1Q&wa(GR_gDa|SuD5u*9{aov z!9ss+j7QSJnHH_^n?^L1NUEQdZ!Tn7uE$}(#!#c3*415SohZasd}7X26lko9Mu#-e zhYCZlW&k2yN#aPw*a&_&i1Yj)G3kyP6~?B9fgt zoX^gXr>-NdyeZ~wb%u)yEoAkSBQvO}oOc($ran8pAU*kzV)?%F&YC|s$f1sZjmMlz zyiW@|X@6jLb1J2r^>%sXyg!al3qL-luOn@Xx5Kp0mB(StIaBsx)XB5twSw1@Zj73JiNxa2N z3DQ&s`pybMoQOWbK}hhR9e6`iN&sw7u6yNrJ?^zH9WfM8I~~O~3m57KeB7BE=9amO zGjoJIe)|dERPN~}+eZbhX3gk0+o+{d{vGGXH7Rh7jq)@$1 zQ3kVhEL7+7v94Z|tvBIvVM^}o{R^QCADC|zz7YPxHMG5J@2FmC;y{c;!uE0G-1UbD z;K_3^CWMS?1hT}lwd8SN9H(OGgMf_tdZtsC(t`U*aFD@64=Ls*u!T%1_kL+; zqapQX`apk8Ad#0p;=bovBkM;u;53obc}T=;EFcrzy5vq4HP&)knI0oY^EES7| zNIEPaS*Bl2<^wHPyJsyuTw``+=*t2QF^f0TfBAcVoJoCaI`KIjE^ki3VF7*T3~xh% zKjy4!xpstpl z@Po4*z*3YM8j<jN<+!Hjs#IaOfDedx?hTAiItbPQ!iR`avD9w=(TCD|Z0)a) zFzxn{y40+vvB}^betbSn3HDxg4Oz*_#1mC|jg|PWL%nH*SDVbT{8g?ymAp6n-I%)f zX~`BU)YRx@hZ??Y@IsIKQs5VF=?gb&Ifgd=x-a;w>f99JC-|}}9SW_v2|ZY+Jd$-i zrbqW|joOv{o_L}3ZfomO#sOGv_`-=ZRiN8Dt$=^B*GXDx8uDgMu`YC=Fn}Cyw$S3N zo~D}jpo0M)*5{!uEpE;NKCr5K!T}{Cxr|70+=!`}yP|4Q7%i%R-h@-rR7?%$CAP3m z8C7-ubq@Ra_(4B;Cas4L;D{w+IO;UYiE_XRHdP=-Y2G7<`gsuws6Wa~y1OoHkHCifGyd>NT$C3ax&u zM?Y?T*}vH_t09(UNtnnNgjr50DXxw-=V2FIvC=@s4yP!!HB4huRmQrCs#;;cfYuXV zUlu?mOq!VO7z`cuEYyk^+@ZB*S9X>hgBrW9-inXZU4U~sui;6&rb~VKj@#VOmqXYW zgW*Y=zpoibjWLM8udN>8A!`o?4|Sx?iETk5po`bydyEt?S5vdWlHD-?r@<@d*9qmm zO1Ye&j|FFgc-2%kTwQTuVtmWYgPp8{uDwr!su-zfJBF8{HO^_snp@%vd0oa(wA-=y z4ubnIDz;qq+}-+-?fvoSY5m`yVYC}c^YN!P(#X+i)3r*k<}f!iU1V-gLQ!|Q&P3(i zEu{j}DXPNBv-tAdQM(O)(%gbFM8RR~G;~o~2?KUve$bi7&=yCbDz`WuPoN3!T)MF! zlp5@jam1l6X!)7{uLu_cp~2Y{HoR%H%)&6hhVkrA|8#C$3h#(iWfhfxhlM86enN2gfWy##iesUH zE$IOt?Zy|e4h#@L*J{cI4I6)14Z$F!rfR?qk?`Aak(8g$CGiOcz!Fa-ZGpw(Vmo<{ z9UJKr#!d+0701t1UZrr4Y}8Z?HB>sC)1jePaIE~xC_{Hqnnul#jc^u9)d8PB_0ko+ z%#514KGG=97B09LHpr+={N4zYcB*TRmXo%X$bw^c2rwie9}bhLD(Z^>hH}%uR!X!S zPNQl?%sQ9P#ZDxJL7Sp50YYl189=1@Kro$Rl0t?m$muEqmM{T&0VDg<&s3A1U4rk= z$4TD2CsZ^CqHuhD?@=~+1j#HFR1hyb16Qir9^q&Y^NJX?SDwS=q#UG`p|pl z&+F6p;Re<|qTSc)y$rMJ1}wYMgP{BM9%zZkDzJ(xs@Gh1S3$74wCF5_&g8fkZMFaS z?!oW6L{d%Z%q1;1tfbwaWhC<*87VU8B(0L8AqK*^9xfc>kd?RZL9|wX4pYjjOHfYv z8tf;`Mf3w2E;WG%w-F+XM_L@ebWG?C*Ro`wd3gmVh?Jk`8?2ZZlC~d2joNJTz4h5q ze|O^YV09yZ;!-e8_EOdh4q@EW3`2KNd#F<08l=iOa?UXt;uv<2Y-PGYq>fLp?*?s6 zk6vMrMRHR2-+t_g0r02=DsJeTIxYo75Gbx?BT6bMS9!(&#vAYMdz5dKWq^@}I#cu3 z5DL?i=^obsFrf8S7Z_h)(osLQS2PvA?!v9+v|?tiPiI>;B{T0?fG8^za&YdbQ09dB-dQ!dH}CScb?ky@rfEqO5m|7*pa_)l^5! z?`kPws;DvIq=jx2b8Gwbwbbu69$hl~)VDUPCQC(NbpzOWb7&|pS15TwNzdG=hu?;( zr^Oy3zZj{|vZW~}9PULBDTg7xr@5hXRhjLuP@FuX{ZO^C-Ozs57X7o+F0^aaSnHq4 z@MA0PWIBG~4l20?SEGYm_{AszF%?wB9BP#y;F24~i zzh6m2Jp~3#*mkmn+ERJktc_Ambr~xI*Sc?E#>HLd6*jB472LoXwA_-@-iW$8t$6v( zAd(WP_s`B#r{}vH?r(|H@*g)Bzd1VyxsuXDix==9IYlf9(C;_X){31RUugT*efwy%m7@O->tSKZA+^k8J)ylEw(^ti@oT8LXKrX zGifUVoT+^a&4D!+n&teswE75AVQqGUU*YusMbTDeqLB(Eu8v{&gBm%$?5|{CvIcPi z%@5bKF0A^UW8b`vlJWo>ArMHtV^3nSZwkFucixz;V>M7I??Ps!g z7E;Cxwiyc|BwKm=K8ry!Hg^AF%!$#Vk_32R&Jzz&bjSMUN zc>6<2^5GbKYn@+R)eTjO=m`bOMx4x!E)fbUI$caA_7lfl~=4 zMbzTqeM-_jlz!G3Yp=M=$Kdz_FJvF?tqp9cT@SF1Mu6~rfu&WlbMidBC%mmCT!SqD zNQz6;E+%OZQBGQUA=uQnOWNtVT^Cn}oRLLKG7*9vhb4apC~By_GFdoKnTeca?I+mfS9V6LC5;a2xs)A zKVMO#U0y!F9?uj;n-3=jO#ls+sSSio%tDxyAM?A{x}BoO4iOB~M^dA#*4UzD_nY>?ncnjkOo!e6rKIa*G5=0; zmHM|5;0TM9K}zr&B8JNt_&Uv7BQg6{5HBiGdeFn6D5_Q`nZonIg6q37Zr`A8s&kVt zMlc{tJq{}22h*Ip11A2|?csr&&}R;{kX>HEI7xd)fxS#7R-0PU7F!hRY#@X5HKI9V zsg#x{l4p_@`TW8k7QtK zXNk#G0q0@Sh2S+gL;(raNlDoYmBUpZzAo6Vqchm|pu8F9=$&NBN^WcD)ha?E^crxY z^-dk(#&2B2iGp1u^frt6`L%{4P~hO`ex@t_9c@G3!!4xY*MEV@cez+UW7uH%ul5;F zZPfo-KzVBrfpiKkN>j$X6hQBg=cjjxn!Bs{ zA3N2JwfnF&y${sx&rI0EZ1Qby)47yv+D|J`A6y~9@gI4^8vqR*qF13o85ryYxHPze zXMTl^b;clRaU{0mSVmLZrn%F`og_`zj>TcCAM8vzm61m&70}T1<+c&C$f$r z(l6~%0Ot{_am?J@>RAH2A5?s->X)>s(9VREZSm=`L|@PaCg;#_Kj2@~-#E>PagN(r zJW(fyfp2`A=3lhe22VFP`qURiM(u7f*!L!800kj$zH%_o0R6Zu8+%G;%P_P<&VWEV z2T==^Hc&DJ(s~_O&r|HYrPw`PcvH;}7ucuPWSa=p=y~D{bs^TWY1-)fmkk3u`j5kR zQ+j4O`2AXTbNWrmWAXJ-=Br@ZGQa(1Y+Z0rE!y7sWqtEr@-MV0-pMnD*JNl7t81am!l(y zK_%5jxTG}PPnwxh7}`nZss=H_M$QB}Ct)4@afNCE|7w!_Eu)X73XUhn;-NdO^gk^Enr%7uMW$P?Z!0W>VE?yBe)oAHdUtQmBslCCgdr-f#0Y< z(Yvmv)rfGMOz54#=()y{u`NE>GD3O`=^d z9n=X4M#S8)RW3G%jCsnl=0zWQ7;KLNd8oPKWRon_A3_MuKuV`M<>F8HQ^Ejo+^wj- zMo&Ji0wb=8)zl8frP6KI4T{TtSU-(%$(e8ddyu)Ax<++5q)B)?5m%e9DrXdo0@Y$~ z!5_*UJSwu7P({PIikU;?Om=8|;d5x1AO4^o*v=rxX;kN-cBBQ*s*yTk#*UC~B~7k` z5!kg?7I1)A8K9YqnQTs8MN9+ZBU=|^alkk6v@)&JhwC-7)^u&`ErsT)5#p#;KA^T! zV8VxE`JiK0*WPs-9VeU=fhl&;Tq9Bdb*kSyb*XhI{gD;qeK;bzscuS4(hMc_-r@r5 zN=b>66k&YkEM=2wgl0dVi+tn(SnU@u;5NmE_lPgMWX@?SN4St=HH}N7Q299W+=LZs zfhYB^3S1v1aE?XYjKKd4bRzUyKqz?+%M)rvSvW-f07^is!(xr>PKa9yJBn0Od$L}tatoSOs~uXZXY?DiX$NrFuff3J|?(;K-Yo` zuUrD1ZimyZ>y3&oT_Te?QO~BK@&h~PSjFsXi+o=J#ZLo8q1D7a_K(`U3To`d?-F>= z0i}SfOxdcwu0x(-n_H!{WE+h@w)mXS&BFdegLSqRIqUwFAG3*GeN8!O_s1*!LRz>M zFpr_^R`6r#F_Wfu-*S4@y6KaY75!X}w8|%EbM8+6`LlEv(6kxC-FKCUmW2jKx%zyi zdS%e|1pg$s-3_{YHg)6sR`t}w7tk>he1HF_D@(p^cvhIDgO`~X89$dxWzODuauq7i z_|YjYBQ6lMN>9DSa5I-8-(13Hje~X~#lFR?u|ViE?JNNq?vnAiIZU0Bi4kfLYa`VG zQ8_UH4lUsOSa`56430g;vwEE%O>qghJrz@jvawZO0ne&09Z#rlr(v8<*OI;TvbZMn z|DuY7CHzk4sxHJYIM9XUD3tvtMdTnv}6T1G1P9rj3S4kzWE3;B|qKyrW|{6IZ5B`PjRz<2$<4a|D4p=kr5 z^+rNmJ?^sneDTidxTy^S(8SX8K**1%=OxR*0|9B|;n(D7?^A>*a}wW}PYuBa@j6Nk zP3RugHpGOv&FrVSEnIPtJLzM(n!<*M&!_Y~(8a!o7T1B_wzau%7-Gl8cNSdX@Iue>1g|xIQBr8&|mde+{74l&%*VF z)I5cEVPHe)HE8Sb1(I-62{eGByiCjvY3oztl z0_+OocuKlXiP_rQ|&AHt+l$uk!A zW0@{HMo3ZbP2s*B2TWq11l70zh+Wi^kY_YvdKtM@LsP?V_cia<98Ue%KO&YT1>Ewm zqb|YTCZI#51Z-8gRA-=n0)(&`G5u+85f*nI&Y+)&FfT}~7!2+&jEVI~Bu*H~f-Vl|{AH&osMCFt+Ep7agcDfuZBW3tJi2g z-b#-(GabJMO4 z>yRk#ZDd*Bl{iMH95M)3?H{(+-2IQ@gt~)gtpWM#8|abiS#Zwy)fNK>GmAiQ5W9l; zMm=PT;#AcKm}npcenjq=*yt6fpJ}MTi@jK(3}6Rex;4Dw#cai?g=k_l^u( z|5amltee2-DZ0OPv>kHY{k6#W3KRMXU zp_N+stkAI91q$<{u-OGtE{DfFc3x2u95ytk*6U$7=0 z2mL>uqlqa)uZ~^V3MGRjQ@L>2bOBg0Jx@wNbEt{5XzvJX;CpqrUuR8|I+blYM`t|N zS%55iVMIpRMd~@75Op}&9CaFL7Sn^I%0;t6LPbI;B+4$A3uj8Q14_^L=<1=~8+`6rHq0p!zPv-WQ-tc{+4yw<=#n6pwJ{=s;eD=+$ix5my- zoWbfJK;JDFV9HghMXPqTGrjr~2^H=288$^fC zk8Dw3quskRlwwYotf$qoi1?{KgpDOm{hWr)^)_06oDhy=_DV3Ky~DG~RLq0S*&d z(icr@M}Mo`8Sd@`?bj9+jR>oRm@&)MNo*m_z`&9>)D95G>gz6>h-QmkaVMEJK)TQO zFVJ_V9Q0iEDj4@LoJfXi+L|t?$9C$NeTeQ095>Ln4doF5Ga1L);9&Zx`oUE#V7mDp z&=L|JST&Bcerg) zZXs82kRMzhDpVtUP&*m&R-#BwtHdRn#+v0SqAV{E140Z$#iSs*iT8}iQhRvu=#Xv1 zP(FCQj&x|5ve-~5~{}uZu&&5on^dkM`WQe6$XUVJ0zov~P0^=;;K+Ao&cF0zrRua-! zPltTeof7%`j0JhbNRsDjh<}WFp7Np@4xAs#r4n|uYUT-eaX0uBeZZCJYYI5tGsb6c+B?EXKd{)>k-S ztu!mlY;nWE(c{h0(3R8*#Hf80)%llrhCfOjFH*2rFVm z8{W!G3`|o5$A;@>4z}${@5kTkCE&)94=#Hr^GM5R(=v^-ITAEHaNYwRsJD`yYT{*C z9Q1u6e2IqHRl*qu$Zu;1RD%(svu^!Hq&4c}(M6nwXIyXhaip#~SYSgP=>Nytal@rXCoLV~vbF zo|Z#~@6?FPqB9Zuhw;hcU8F;CmS0XH5taQT;bSg9)|wNT7qaXBr$QZyX3$1Tg%TN_DR|{N6m_Pd}-o8=~87AKtTip~Xm{>9&S{;3M6~ z)N->filvk11=31`Gq&+Fz0>>o8gFGDuy(&oz2miQRL>-!Q%AqntZ&0YKmcI|DDzLS zatA5l8>qSop`_W;Pe308Fd#2j6uX+_nq}~KN)%eA5pcNxTf7M^5v9cTf~|CDoCeMP zEka-TQ`d%T*L8-G`v!4J>mtX3R(KMo+wLi z2{y^KI}1-BHCd73deSN~QU1qEG#QojG`1jxojH!ZEOuz9^!XU;K z&QV1zhnVx__{s@84P|@tRyYW5iwJrxlfp*B*XOLzKk;+!|Cs96g?68*cJWp)zKT|n zD&subY*$ae&RId}rZKExN>p64nz#|R+hhaHFH@$_n|`2b_ombyTfV($o|$2Sd}&2m zXLmSpsq|U7sDba918u&>Zmu*{GHEMlvtETT1?@3xrq$G9s2Z{~E`bsM1=byiWCIgo z#3}k>+PpM(RzcoP2f6|rDv@0B)$9)9JNNyER5E12seL{bbl}5HVPv8R2tD)XCn=K_>japaZ`#UBH*%;Y)sPS%l?x+77vz#`S02xxGZ8_YaNx|N z(4oMMnURvDI2!&zYtHr84-b1|lA@N{6ofNG-1hAIHoNENStsIh_uC3jCr*2}Myfo- zoPo9f_h9?q^pm1{$ney9=_WzKYgWVO{_*-@U`>g=WYtOh%Jjc`(Y=QS?Sc9pO%EbH zffOz^=c>0mEK`%+sFzRMYu~itVaBPK4$yp7>!vBH{-Lu)tgyzf3bb#{p5O5OpbtxH zezD-tl(ON;uwy?!&XUcH1RYrHS76N$a?D*-uQJKSWOvxSX{%W1Oh@&4@AKSnj|Ch` z%-`c@rvdzu#j!EsB0lDn)3@1>bSJ?7`Eljpu ziMK~rADX>r^(J>^6#Dm=M~O+q!4-Z?q?)NlN@+RgOQ-$EM_aRcJA(I6xICD;v!q&# zS~6!mGnVxAiCz5|Tq`Hajos_52BOl+fIT*#5neC%y4ZyviX(&oRNWvh_0q8(@w(LH z;Nhc_6-Yk`6#fN3>;3q= z+!^4rsm1mx=?CD}-7LAeHv?MjFll|0%k1O~2$xGVy<`jbJ$P-)wA9E5-jEpHl^5KcPoV;Gx zv~W>duOaiIv`SeC?_qd+!iv-7r}j^^u;yK{ZprF)^1>wCwLP<6wXU#&uI)-k@n3)B5krwS3e3j+s1V@)iQvepSw8e1T=iHz*vj?xvisJKkt7-_$Gp zq`hpHXyD>{z7tJX8f<0T0WfMmN2_pD&AeO!XmNo4H+exS9RvyvNC8hMHyG5)bNlSC zYGlmxXP=DiT-+BZ{vs^hE^qwPPQMQ7G2hAtRXC$7SQEqR3F7t>6OmHzA#8fPbNeRL z^9xu7vN!MOy)d21_r+Uz){0wpie$If&XkNkPE}~niPd&^96`|9(U6;FJW@T%wP3hS zQke~IxPBoX=svuiX0ZKy-Z7m)bS%&gza#!Nl#f7PtytC7q5!0`^n;*<9t&g8F)b^O zAklA?p)I7pgRxVhb{~GOo?dPX@G>mnYX8E?fhyFY?v=*?W+}K#yvLKEDH(Ma7DJb;icXJ$XQj=f2iaXh=4NfpzwIF572JHs z1F`1atrFE}n~`0ut`24$y~|H~rtHsC-)FU-#$G->zJ&jUzbB>l@WF!lBlTx+)%9m} zGiHQUyrNs?o!uA=-e6K`dr-o$u!QcU(uEK4p0vry?qZ3t4jy^ktKw42@lLro3yK2z z5Q~nwb&%>=I=wL&ZxBRnR<$JcW}5y4C#cusCLPk^@ps=nOQp3G4H0PESxTOMHQs~{ zBBW`HtKqoQ@!WP%PJMFzI%i0FmjrnW+_v;^Zm{>CcMW#U7L4rzCxho7dkh$XhW1y@ zbI~-;5SLhT^qNYVhwbcmj{kgQRWEoQiT2l1v<1i=j`kFv)d6rtb$9b zfS5`i{L{j_?P$8gaf1@_2!6}{wiXCY!^k{A@S!xh8Lg7H z#)jEh>D6Ov^d;7t{2!eB;7$BkcD~ZL{zJ&g7)&r?4QLrV0|EI|ALW&YNyV$l7!eyRKgQzIH7K_G7g(QN#fPXdDvzLm~E!L_)L3i@gSFhstp z>GYJ&>VaOpUALjn5ze-+#w##P8mOF!x~C4H952nTH{aVT8u4;kqRFZSQomOuBO{-r z+SjmKBH|`BEq#Oj(MwtV4*m~{e?$1`Nii!M`%NlFDG@G4KxEY_9bnVz?OEWQtUj{shwDBpxo!F> z{3QYdOpsL@2v|sST2tqTm!ZDIgSt)i%YkVH%{;*>&nmTe9X!gtc?D2EA8iD83kSzA zO2)GX_Waa^JiBZgHD|Clr~(5QmGbPQ2*1ghrk|CE`@HO(ca^NX|3jY?xsMue>hvkS zJVr&Pt8`++aSf2nbNfbmc|aasNu?`m4vRrc)+G?GwIZZGYd%D>*PtSzJu6K#uf|fW7)Dq4=HYP?AOum z=Zo%7_mBMXvd`tk?)egnxt&b`7Y3YkH)a!49grJ)R0Ku$X)l`!;|d|{O~tR13ke?$XRi+yymJB3D%zl24z0hNFm ztD`w@*Wqt;u>1`kA6R29y$dg?4F>?=KnlEeqjTy389U!O1LcrxYJL^~)HoS}4$Go^ zARP&yhhmVi1`(&Ohe)pH)5Gat7@1Bh_Sn)gFwX8;`i|X@sSIZurWH`HXS#ns#DM8{ zWU&Cm<}KBq-aX$L&eu?aw6a8KF_pWVn9eI^AY$3A2H&UfczBPtz5$58 zx0Xrvff&-xIp;x^sb8;$kV?>6I2wHG*FWfweiPY$`Rumt^Z4!C_vR20(D_1pARAe7 z%1XPSJNZzJ$x%V(3K8jXht)MFB~i-k9>eF*bSk>kyI35M^=@Y2Kx-W#Xit0SmDXvExdz}=}nLS5IhvchNUq-NUfLT~^ag>FVVt5t( ziEZSU`SH3qF3tiq)PW9uTikQN2gHSIAu^gcEXfJ$C!ItU1#_ad?Po8a({U#Dwiv+G zjS-ML9-c0FJ7#?SfL|TOLO&I7)jwD zz!t5K{~UJqzVls4{Fwe9LtA~=b>O5=?0viaet7vVMJr|~W?ob_Ua}@ZnxChF21`+0 zOdTdwMfu9cO|K|itV$Y2`ljNLBUM3_chUD1VHtT#DEbPs2OR}i@V!Zx10SE4YEMfC zXy|40r0sVG>pyD@R_`E2Rvy@XDEo0jDCxf}!BPc`N*Y*I{=4kl!Bowo#wN(UKk0an zi(?gkRJ^5ReJ(Y3oAa%XCz`<-_xuwKgPX2@5j5UtpfygtPdk-cXvM*KFH_7nl_RCY z9_Murq6tuC>oh_}4X|9-Td-xba5;$YW2OXBlJgOsGx+K*N23JToYnH z{QspbU-0AH?CT$LvQjQ_K}DcCLDa3#>Sj;`GCHT&-Q3JW#dt+rp7P<$%#79LerPUc z4KHf#)ReKzX$+jhe&!fJ*S|n@qEzyJ7vF!1SAf^F>aB0{2re-Pv@mTTU3x4#w!`0} zlgB57{ZXm**&kc8Ihpz$Ph-+b?_7^<7@oQ7{t%Sjy&%+|&MUj;ePz~9bn0dQ93H#g4RkOlsnUy_L_c>z5nInQCU7ba$ z*>buCGgLBaEtUM6x--b#NpOcgQ}fEi&#QePf*AfZ_R-<8%#c{F1(SxVl4;d2`OZ=v zp%GiD#i5k-ti>2>z=8fbif{Xs`ZN1<<4gAca{<~E^vhx2XSqLHZ@ns9gW;aub}*Y< z0z)N!Bdlv_CK62B{J2r|Gt2!`*0@v77@rK{f2*9xN|KduZ-VTAoEb>f;CttRN~xDnJg<*yo41Ac){~|T=}u7b$&)L$R@ZFBf}B5uGLittMo1y zzzy#5CD1W3Em(R#L%cL9qXro!r^S{%MlqqBp~vA1U8uCS;O7pTZg1c~J-BCFPe;&) zejg;#VEwc@noELS8tm+uMlQ8w$PD``s(ARK{C-+_>kRL&jQFW==msn>(dqrx=NaMDXXJy~kvx}_s)@pf(4j3+f}W_hBY*pY2*)ODFGrwU)C z=F|JpQL4VQ_^SdrI6mHRC|yPuLghA}uC(X^Y;4zxIoz{wAAVnptNUoPL5QSE22WNw z`18pAGwthSz3{{Pf2eEu=1Le({{sAh`z`i&L8^<33L>`*R-3{Zr|f{u%xM0dhc% zzkDrU%h&R?{5uo?>pyva=b!$*9|3FRr1mtK;kZP}bvguAXyevt{F-CzgXRt@V*H^v zZ7j2j#l;;+cPO#CsV$tC_^-#cx~VRlm>B61;gqMR7G0^papKa`^^Hrho9o6UEEc8- zmGC$7hA*!jJ6d^Vfj7TzTOJ0m0#q}wKK3QpnN%%&{J^cFPo=7VOAfIqO)!;|_$EuR zRV_RS!>K&O5N(6v$?UNKy)MBL-2>@))N{M`BmDEP-S&!qUi@gGIH#uj4%P5o72Tm4 z|Hc1U!tRP$i304c_08ga>NA+@!Yn!0_zW!loU0S4x7S$^)Wp>0;|cZ&>=jrU_qx$} z6us8$!7q_>FfNZcEl-^k86H;gvMnWIw~UKP=XdrZ7K?55<7VN`9<~kGIqEF1Se6{P zJLv@B|9Zav`k%bJ{ZGFF?AP+Od@cXB1z|S;)_=Cze{EEULhs-VtTWnM_1|?<18R@^WyE>RYC@~f)z%r|t=f;MBLR%|*S|ZLBwpNn$TL}+gs)Qi{snm+` znvyG|RxxrQn*5xo|D%rgH;~u`roo#xwESh7w`_oaY!*2s^U-qPu+ovDqt06 zR3&^d+qIN(8&wJigI@KGL0s!;A*g~F$i0QHsap7x(;kYQYauvDG3Oq`ksO_#!pl31 zZv|oh&XM#lagGXcFhl+X8TRx(gf!L#fvy3;Sg!-QW}B(V4qdYc%9?1-8EFhBLe>@;2Ngm@E>#^JcgkM4{&|+s{3~LZud)2 zR(YaZIyZf~-66-ToWG}(ePhq9X@Q6=(in1alkta{$Zv7c6)08Y~>a1oj9U&Q%|anL;#o( zGL<52uwi@k1 zL2_Qoj)EpQ11x8&N~&iHsEb|F9bUl3swTPf-t4UePug0I>X6{-QfoM=b_7zDst&Fh zm#~&wd(sDMAHemt+gsmI)A^cAf3&y4nd!EJVRfGUNggP;?m;aKZ(&8(N2(Tn&I+VJ zdVTar`X3=6x+Ydtvmr@Rf*n9;;H3Y|IBC1PM%Q#Dz}jgY)x+5qOMB~68ezu-{uN|H za#hvvL+5dPppq*M%7;I>Q`3EOY6_;NZ@w$vss#JXPJpWnSel>?fMb*Fel+m=45Yti zK&uk$;f;>*u8>|&&kcNKdDc<=us)w4-W8Io#lLnP3H<@EWN`w>E<2N6r31zmI5uro zP<-gVg~h-ESa%i*tZS22=gGk-B+_lyWio%ttLx2lGn+{qGlML<^&{xyv{5N`CXisK z4z~Z>8^8Rc|H01kA77tr@5$HlwR|mKi5u>7V(*{*hoA2J7ZIOI7A9e0OZap+ z5x;<(e_PYZVOuxb*038lTU7@p#I!n(I*Iu!hyqycSmR+=h;{SXj+)e#V<#q<+YX(P zDL8~7$s$A&9>Vy&vtOtdhObPR_7;ad2@KvFNk6XFi27A(g^6$w+v;4xzmd{|qyFel z58nEh*cib2+az^fBwMQt{ezy>jZy|-IFMSqrnSus6DGO_8B3a_2@MWa79qk+n+mf4MT$cV*}VQ zTE7K|X4NpM5I^bPwdN)4+?1;FbsEIarXIdX`xIcwYq?S7FhCV?SRuhq?3kVHa@2#x2 zlPxpoD8SBU-Imna3a_&%>-rtjQs{TRNctovHNmj6E} z$p5_Vy3aqar!W4S?c(43r=Ji1mi2fi`lXfVyX75jbu~L6*KMOeqKcV9$Kx>R@;X*GxDt zx^DJ*QXQ(|`fSH+t)?12mB@VKsYGF=Gu5(!Dzl;;NkK^Fd)Qvx-ijnIcT{RMHzxg8 zffeC5a{F$TT0tH$J8#Kj_Ja0M|9RwU;pdq^0>xFraNzAyqV#bFoG1gSHGyR}K7i{Y zm-M>F$7PcB&Q&_DYT;+yV{P3tPb+}r>Cck%iUsxD_y?+C-02&AgqU4u2Y{^!()_o` z9r@FuTz)xL8%iM@MS@rv3FurPouEOOUY%zzXRV zc2{R@g6{v^Rm7BFsU`+X)2^{LK{vcz5}dDOZlW#LV}uc^vl)Wxdc-{((rUHECNQRi zi&S(S!*fig?Ty`OE9samxt+QxqGY>mRYT(}?4h)4*U~NhgqrQrheVA!U@j(bPrAPA zjmpdG5Zp}H_YyYhi7lk-?O}J8#4wZ@G66>xj>mz0x`wofux`@(K9tzcx^!#!(sf=3 zkFo8nyVSPWxpmdc1X(9+dmsDsd~H~<`>00>E3C&ztHp03)+f5&Pg>|V+mBu&!ZCjo4MN2!j%K?i>K1 zIh>|&o6H$Zr_s`1)VNl0AUz|=PdGA>M_4a+`th_N{D!vHO(~yL9b6fi;K;OTT*484 zlevV+@TV%_OHwO}ORmU<^TO4_0$@F&uvUVd$s$RSh30VyfIS{bt&;Mdm(Df1Ux>Ep zel^C`Dl9gxwzrNIKDA5%1M+@x=caMY>%ab?vlIkgMlr9<@9NSkJcmJth%|Kc0ZTEj z?{3|an+2_68ZyR5BKTV#J(pTqDio( z7H)q#`g=KBGQQQ+!`);BweT8JtWb(&{?|!Y!FKKd3!4At@HFoV9GSKr6RZEb=fPTb(Y-*Zh|b<1bdn^&&_?RKl$ zTIc?ql5l2QkS1;mP}O}T+DDWD&LtxpE;0=+b5;MAKJhIL^08Kl)g70l684uC;|km5 zOll?@0&ZVDjr(e6C6{oqlyXjUD5?(LQC09V0Cu+9Ls-42ajs@-MOwKts)Mb+57qXY zZLPs2+-*LV&Vd!&2DkQZ^b@Ft;UTONYp8_p{JC}k!1ibDQ;%<*Wq^fm&%eU#>-lu4E@BNdo0a4LlY`FOf)yGE6v8#rw z%{8u*$Rr-=-*X4p2QIa~Ah5!ROW~F7()Vi2D*$$zZLbG1q2$UAdq1JK*!c&2cipiG zg(_nGW3E?K+CzGs9yY#V1=xKB*t5Bh-2mBeb`n<+?+fj)7g>6pB;MhPf~x}VYGSJ4 z;2vIGBqygVy^bWzT%Ik0Z@PIlyib^-djFDgaJ9mz1sJAQ$)B2FAS&ac%II1j3M#+k0mc zm{iGha8C3=JGdKcbKr^h>k=pg`Zl1qYV5482}!ms+Eqcr>rVst;QVM50n*X0?rUw6 zag$K?hV>J26}UTts=iFDuQ~_b zbnU*jzxN5jsE$j0B_Zc^z?4w5O#B#b(d*Ur^LPW*kmmb|Z|`g06`$mdg@H1-X5Gd< zA&~leSL&oGAJ^6E*fA#2wQWhFohZO53hHs75hQ}z@swJp4!qltqKiqUkV^YP`E@ce zsI`e!3(Z42W>b@1F~!w?rjR}f!jy#lJ(>;x)9=GTT!FH31+%pql~QMwH#jFiHzv6P zI>UZVFJV8Y+F9o&rNS#X(r}Un7S>kJc0+aWl59*n3n`5-f&k3=_B5n#)(hu{Hm>eD%Gh;Tz0)8)@D#H zIW!ISW@@JpizRtTiTtey{OKv|9K#R(f!SQ46@HP}ny_!9V7i5*>REEC-4%Uz@pkg| zH{ZxD1yFj7K|Ksxrj<*pb3K+|I+@#0yIoJ_Ta#khc-3ja?7FeY*a_^c zaAwM$!vU;zJV%5M5-igdyW}dN`USA^K}?(4SNABin!OfBiMvJhA!TyzKXLgDLj={r zTNBedmukCOAAxflQ-lO+`t=RBTg@0lrdW1W>cuj^bK<~-dhC)e=f*1)QlkS*lj>Xz z+9#>EA&^T$Nu8Wjof*3>38;OR_Ieqpj^%2ptky-@ijpj^!-;|eQb_n|K$d|@b@aQc zH%I%WZxZ65a8Rb)RmS(mb+4x{N&1UpVq080t|LQg{b-%Y&l zB>K(Z%_Z{GCYcOCFI2ku85{6o8X1$S_8dm{9sne+;x)Qd2dJ9o7&mCKY_`%ozx7z<DS*`| z4zX=_v0E-+XVvANgY3BzN9=3E&)kWL;JP^Ib105@$jvnc)=vP|>nb{JK9moe8`Y8N zn`=@iVEz22NW@W`+^(FuX?-7TcZ{WIMTVu>903OBMOy_OZibF?7# zRaL|i66}R^XSnt`UtX$*Ns9=pJ0#d$&-=PsHh|qzfJF=}!*f(yt+MN?hU~1UW1UZ- zp_t2D!Icth=hTQ)2^+{&3AReM!jK)l^6((uuuTZ|W*sG4=42 zfM@ns#1NU}x^2J+&})*bfo*^)J(TgTbC}A<8E}dikPTJG=0LU;moDAv>u(3a)MaF< zBa=iEV9bHHi*<`tN@`&loYO~r^@Z#PKp0@_(hZMKnw(36ZJ)MPb*9^bLp3;3t2Qui z=hnf#sh_)ce!HGX1Fy+YeLIw>cwlSCcp{P8KDx&6eq}Hugk3e-QKYHq%g}Zyp*kOE zx~e9+AJ*yZ==!Ge9ZKk_kEN-I^D~q7P~_@T?E2OCoCvI0Q0iu&;tEGBZ_f1OLHideZYFS!+94JkK zh1GRx=bEv|Dl%J{&-rw$(vt2PB;hjNO!1`>)n+nfI<1MUKWV0_wU{-KS3S*z_%yb z!y1CaAH*#=e({*hOy(*4R5A65+gl}&)4@?jKr3>U0DCFUHScI*uMziW5{Y_2@f>#w zus=G$29ZQ~3u7HIL?`Ys97%FucZGp@r65O&DtBs%-LG7Nl^wIaexs^kdWfm?`u3A_ zH|OTq^xnbsx-OCJ^_mX&Wof*_Rf^3jVo0qQA-(ElRboA-`=s)gyq zWa?t`7FH{)ORkh-*9(w@Iz-N2bC!f|H3NvO>RJN~buCo!Sf zL2l}*VXBW{mzAjm$Zlr_tlT07hTDOfm**2yIsEhnw$rY!(&#qS#37v;2&&ZSv=@5e ze#$nO%6MW1;okRE6(^Sf*lpK`R97X&E(Z94UB^Ot;rwI_67l__h0y zFROGD)?Tjrifj78-N3#XYUJ@V7-#^7{T}yNkF$+M(u7OgMw%vICAF{A?ICeWBY|wz~X9PIxvAG0t`%( zIi=YyWxI(qas*kj)fL9E5_lC{$-)HsSnvje=x%>^OTN3a^RlP?biT94MCi!Znr*Fz zo)Eoq2&+2y1ZrWh@2S*!<3I{5tvB`edzDxtwVZg~R=HNnom;odYuZ|Www&Nv;LHT= z=c^C?s?tOFM_o}{>wC4eK6Izr9Ezjh`u$TW#4p6RJ`wSha}5tAnL~+_BhrXuGOfqU z2y|m(T_$=bao`?LiCLcN&j-)CaOR$gh?|GG86zu~OBrk@&wv z_ee;uh|Dp^CO_UCo4%p+YU?+3{XOyzok(~6^T+NZ)Wp}W31VIiSdVB|1+m0wCG~IK z!{i=zyX&3;Y{b8Y1iRzEkw!^o$qoy!1F&K;5TQ9x7lW19RKk-%fKK)7b+9enloG7) z>-X5$q$Uo@6;4keqF5uG$JM)A^D5pNkXBHw|7{I)Z5E7URhpG;1=(l^K~~(NilIZC zJEQO0F#*DWNVc`lU^}UUZQpFGeUo7An!UMIb0qPJ!Dyfk(ARH&>o!NIJ=Cv{f> zMJ*1&`B&IKvn|vVsa;hq<{C-^NeTxBU&fQrG;74=R0fqEOdrh2SE7T5B6LVY~& zejQznj$v1{`%92FxW>4>?2BZrjT@Y_^P(+DqVuaws9LTnZ?CuBi@54G_e(lve2AhacMZbqeEgeD{Y-XNEUpH0jGQJPGqE(=lP5TZ8qMCRP`@=gew7Xp_Zbx)NSkG z-CLh)aTTyo&09?M>l0U#qP?#0@C~qqns-a7*RKZ|Rm^z_K+nus1z$MS$EHS>>=U5`PRLt9((3|s8y@P{C7yx^ErodXvI~e5rdk5t-RKc{h>T>_6T-PP?bzfJN z@B{??kr_?V^_?>^$(uJSNg=k?Nh45TZ*^NMXm#lz3)QfD2^**Vk3wy!O0Stb0t@1l zYhEeA#%JRI%K@ajELdI!UEdxKO<(dBw(VFkq#mSQFAZGXp~;w<9yB2Jh#Upi=bgc- zmjtd9*%e%wt>Dee3BVQ7E4{ruI}Tl}Gr;B~>hBC-@e>m4HB}9N0;vQzhchi=l3wk5 zQPr^inSos)6=69jL5+xYm0C$C0Tr=s*qOD&>Xc%;W|Nf~qGKM#HG|F=V8JJb?I4+m z*w?h59>ktxy=|xJS19GO?>UCKZ!yDlgh|-#Eok=G0QA|^q**#XMSZrN0}VkIVrW-E z+a8ny?bJuZ;=^sVfjZD)ebaZwL)8G4H5iC%)!QnS4kV|ZgYiU6DlliKPP!|kuZ|Li zNfr4$wEAr1)WH}rbyvF?*x)-g^(n(f0N$OeeeM3+!4q>ziEZxOGU*NUv(z136+ko` z@GnE3^(G8waekpv-p+>uj_otGsYRLFw3huUGPthauP)KHOA>k9<5m5U`fAW`HSFjL z2|vJYe2;1S;CT6xA z+hr1Iyi5Hgq*}i>wVzJornU}r)mcfBeRk5~PUD)<9!SQssr&VA+xC!DwPJp$TlWAq zAPsNh9-r?Pp1m$%&pb@00w{oWZBnYZikM5ry28mRc?IYHNL>gyb_MIINvx(aHlT%5 zQ)Iiz>EztDDme@XWD!9WaeglQ&ct+v@S8}0zD2%PA-K{z_{jQ{WbrDoDy}+d#QSpV z=w^B6>`ZiMCD=M~goCMg_zfl2u(!fP80+EOqvg>X>7R=;1)f-1R0@7?o)w1PxXrb_ zpzcq^n4Du9l2X`B*Iwl=Uam3Fc7HP6Tor*wd0i{I`q~pGl0aJmWFH&IzIiU)b7_(* zMRQ25x}@C|ME>9$-fL}+xYv+a?aL2945eu*AW4yGWM$o#`0xh@v8y)slsg*EbW(wkVM z@)Nsc87gBHMu+y-PzjT4VrEh-ZViMJGX>Z#?6p)A>%I)a`g=N)tX3viZnq}A2544? zC#ljbkMj<)c-oG(SO97ppEz`Nv@1p3P$lE`dW88@RkDmE&2FIT?Ifvb6;uLvx2_tl zQj$oGyPY<`=G;HdG5fDeOjDQ4wkAnOcud4=hE1*6>XH)12jkpkQ!#dZTFT|pO`_fj z9lfMFe9fk2ufuwFzL`|DW@qt`DBHHElayr3O#5PzG1xaOj9Hbu-yGD2*YY-qj6#!G zrZVgg|6S|Z%GK9(N1wFOA7}KV+0jvu~nU>@L#eSVM$0SOwHc6xOnSqjk*5Y7s&8bDOmN=FY zbx5}ks?*4vrMl9%j&5x<5o3^aAkF_-sEs)`qL^ z##G#SNsKpG>)2%ybhELNM*zpK^%0SrUySO|V_N0oY3UY+y_xQG09UECd-t(`pkFp0 z3hbKO6F^3+rT(nQ$w&6Tbi9o)sKWDgv9t>ht6*yyr=UaQ zAO21z)O80PqT5{A0nXOM;sARO9i;$EI>he`T(SLiP$DwdDR}R0=z3KV*Lc_+_zrgkk}B1~jbvis5^V7} z*tG*_b#U_k=utfHOlsxRFz^IRVt}qmvrUSfx!QF@$YjWls&1RKyCvv$27g{>l~Ah} zvEL`v$J6jlq?6RPdL9Ejr_$+iJPuqs)aq|+uMSP2Fq8ln z)*$8`X<%;y@V2Rnv0(J7A@HwG7}|9w zUN_ezwF~DK$<9ov4;%mjKyyF98DT z@7L(vRNx~2B~3s{fIgatI8d}Y#kN&RyQBeiQsZh%?UjiGsCNF;rPXZ%UxKQE@YdD9 zkWj^rH8(+1_?oj}&sf!oR2!;8d+}~7@b%R%ym*ig?`HTf1MLqc=~)^FD4ZT`!hhwU3i~Tm z!l1FLl!#h(02X(KwpXmc{yKl(-E`-saBPBlL8pe@CzoCi6^WQBkm}*CJ8;k8&q0X@ z_3+-F#lIrCI*BD*T?~(61=uoUD52S417sn^W)-pF1IhkZkXkneuya?_x-{Em33CS6 z-5P{$viGn^b8@l|Yf?eN)y11gzAo;-pQPArj(@GHVLOkKt(X+*UdJwly4rZ^zeCNO zJ&p;Y&~69QlB)z^jl+P$YZ5-|B+lpNHZ{mEU6)v%^44A?lOLHR7E-GNYCm#@;fhI+ zvCd(N_ZSjawJvke?Gw;)lS@h?n`~jku%kw_*KLZWA#k(rX3H zTzB+&s9*bmv}|?OHeP-%t(`s*$o02=D}6$BXGY@35>80kM4tF2UlQS61>4y0Sk z$n_Xk92@w>G0@O#ii4MV@={9n>r~(r^Ysnscxq~gQ2Q2tmVK?;!IR_=$YfK<3Eb!0 z(2>nXY8-1LJgk(4b{{=P>UF!X-u-~v`6|jTR8_o!>NlL00H|{hy-|skB>V`u*~BA3 z8o5#eR4*J@#U)lAvi47B*NGy)#H3>_oS04_xt^ZNDVdm#YPOr}8UVprYF(;Kz;oU{lmj5u)E@6 z>4Q8CoxcdP-Frq}sw_a#3;V#{x#t?}EvfphzA(GYMd&$S7jApNOQweXoluulo5aFW zGhqhkGePSsRm@HcEWO~xesA=(ugodo<=1a&im0mcF`^i5-}F<ck{=pq-!a$@cj_=&!+fm5nwyE_2EN#7*_|a3*YR1*AZr^$gW6$XbT|g#m z!z8w8dndl6(t2ym%tA+xt#PbEYuCm0xF$?kTUUZKwwyUzN0 z*6;7Ew?U8RJF3fieSJ3zd*0qtd}9hkTi7k}{>|*&n0mii`=(n5J@yB`kJvV$W0HL@ z^JzPNqbgth+Zy4%jkp`wQ1LxF**=xG+ZL+|skNB*Z;ojViFHG2LjzVOIp=jf$$1@j z=Crj^2^>TbSfar8%9z$hYsfs;Sl{UV&y0-!0uD@wX9cjr)(UePLT>=74y*^B2Awum zv3%PgjewaIVK*e^*FUO*4~hXR98{Ud+d^+5rQC!n-~iU28Phs-webB4s!^Z?{n1wc z@M9-G{9puuATlyIVie19hBGng^%;Qmsc%0PmrWb6^0&iZb@m-i{VrkUxYUpy(+9gc z8ON8pKc9T8KWn<42R<9nWjHpGz&{-yDd=#|=PJRjR5d(cYvM^x=#Qf6;X4S+`SUyS z`dzcVavwkzE@fbCLR=J7!=WAy$&?bTxMP!0Jxo%6NU#gFzal&bD&mk_A@eDwMtZuC zUN2ldyyMdA(m9A_ zN6gBa2`DZdM@bCC6C0m6&19N5gkgiF4YTvGoseL~9h{~n<>GLL^w5VU9G_ebjPqbS z>fHfq8|T@CZyQppOSwsD7#zgKRm&!@aGR^@1`_Pxys8_dx_RV8Q>Ab_t?*o4AY7tc zf^<(*Zi1SR=VD&q64;cmDdx!Kif7l+VbtcZ*i9^gIHYt^3c90DRns<4SIASPcQ02z zwjadL+PO7sW6%bXe4VLFo7>pm4`XpXAj%XdumyI*keF_Kjd%~k-ssz_EFPK)oHuQA z@kzQL9ACY~M=IB;*9U`A-@I&1#*FK@x6n53bzJ;;PTgZ{TgB>R2aS@YT$`|(qfvO9 zNml=w>bLe`^#qRGGDhBDkAK?2YNT@fn$0v+!cDp@d}kuO249y-wB!JWEtNS|XJ%g& zb6P?(^#ycEb*oaU+E+K(xk>2lOKnzZgb~KHBwk zPcV4jfQpp*2FtgnRVFc8| zJJQ1?=5nr9adoi3DYZ(lT(07|zLsx)bEi;ZO(gvTFX2;ZQfuN7e&mcykMzIW?kP-= z4cf!dz&?>krRs^%Jv5ciW@uNfuUbkq7u&kL^J?3x*Hfe!TGQDTgdOdnv;Hw+U8R~_ zt-w3$pFfv}|M(F-wrY;oU4pSN&nv+7{9Xy$YfGf=Y5*sdKxN;2dP~*tH;8?8Qh%t2 zK_pRJJ&bbgv#N)KTq2yC6l4!asp){NXBYcUix{e5P$H^XHXNFQhuC9b@y850J3B&9 zRUkEbL|xmgJWNM_t+Bl`yX(YwhYe)))rWi2wn8oG50Nc?%aFIPAnT8>4=u0jE_Nonf$Amii2`}2~M)5P1t_OeY^xe?J( zZ8}iOj*b~Gy)SCJ>wSwf<*W>Ry!qZu`gm4Ni7ReD_Gd?+6R81G3GladBH>EllAfE{ zMr$(-_R=%Rz>kRv&NIiSs`?Eem88C{jz?vh)W=dmy2h_gLLHoz;0nei!k(%qV*6(v zUW4|!DivBQk3%((HTuG=8kPW7gy=QO!m^>K@CaCQPSyeQQcxPIrfn8ZOmtx~hb7N) z14(1YNg|ezSRrjtVii{dLs~uea2rWP5y2g-0K0dvuKI-Adr?hOw^$5(yqMN~u%v^pXp*>zkt@F>v+9NjNy=&>WOU zA-%%x8d(W|t~bMT*d3b`STPf+>FD4Owu`WwpXHaG@2t*6svDp}6|qXMAeWfkq~|c( z2B4+w)mWPt|GGGx9J>AWl=fFXsP6N=uC31|`--w>OOsyr^zVEX649PJGhH~yqW?^S z-O*XzGVHEv-M%X+OlMIE|7GK>!y9QKJZ_H-FJk;RgA|LUb$azGo*5|0C8<@K@9-ws zXw4a7Ye)N=;K1sDs=!DmVM1t-|BL%UmT6~pTQbEYaIW6L^_*=5-Dw7638$wxMmQ2p zr*<6zC=bfu>4X*-@aH-RR_Ry#^u8O8_wJ4q;1bu50lT+QA!pEWfNkq`$w?lhI~nbh zOU0$hz6?^1bJrBCT? zGL@aX;@I4m)ONE0RT7=Lt(O`Y2T})G^Py*tOiO(RV~IGV+ZvbZ=bKk{l8*HY1gJ85 zO_Nkj-W*E1mA+8SNy(4qe;fBA4!i46Y6Ymy%iLpF!?p^wu;pl7UjeK_Z(yP1x^NY- zrH@;N>1(so?}SMVT*3Wr4ZGRvLu!>u6w%bd3agRzW_wy7#B_9E@|acy*a*3~46H(_ z711Caz*T|tPQ2m@rXc5M6iEOp%!n$CxjU>Z6y!-vboyhF-+e#$ZYjAw((|4-f+H5s z-x}V*ELo7uME#}l?T^c)gz1BwqYZ|z4y=)@F7XXlbbjg?a>M}^+uW(CO0LNCu8Zeh z_rqXp`hx>&Tr?;VRf4^*ofZIlSJlI>BJLIYPxKXC@j-V3a0Q(QN&T(d(Eltv=TjGn z)eT_NXdTik)Wl1ZQ1?XvcB%lI2>y2!^)DP;N$~INO|mi7@Y2C_N2S>1M&(uaB3>-q zn;2m`3nQAKj0&Koz1b74+mi9U$g)$M(WwG#0BNYhl*x2{YX=hXdT&I2$p&pl1pJ^)_AZ;_KY+YIo2bc`B>6`$Z z3IYk(Sr?@nlcWQ5t(%j|HUkLmzpB4otsRp6*44q?a8j@hkV}0Ll2yCoNs`d}`kU)9 z@hNnJ^19MwBqZy&w|pIF4pMzQzB4s*sDg*rP0z@s)=+cTdyN|?RfQ`R?CR6A`(@xu zmx&_?m}Ogs&us(d8m^S2*fIcjlVFpIc$$FLLua(fvyvoglU6}hxCOa`J1IroRh^sG z@%_3q9V%dnG;!l|BNHDaRTW>|8PXh>NJ(g}OpCq*h*z)R1%Xzf7M{QtOXCZMFNtTl zS%TJZ5qVj4Ny)X8z1bemI}fsmEo`l41>vj*Dz$!g1}3RQ5zdykJt^1rkIE-VtvlEH z8_0MAj>AK3n}^+eqY~>|&((_aD7C`QiY#f6T=h3YZ?H2tGKJJyvE;)03OvFvxSq%W zXu-?`uKwc}ww*#@?0jkx?080PKD>>v|4&8QTpDzeH*k88Um)=J*Yj8`9H%-oVSOaE zGTt@WU9-)#hUFYurW{M6{!-7sXYSSE@T5KZ?JlzAyzcI(aofUjpg6eA&>TJ(WX%x> z!%mHuY_CTuy`JDP<4K1N_SE)O`zr}1&Pb6+l8I?k2h;xQg#RGrMxU;T)y|k-KscLsAvkVHu)h=cg|CHG(JFKz*WiJtFI)$V`WYOy#`uV+3jwPhaS!hLwRXcxAAr6if#Vttv^ zyA6OVsCvguT>{>gY2O~Q*GUO)+f5^+W;>E>Lt2H*iGRD&)Vf?c!Nhdh?4}`^PG?o^ zo9pBGK?o7svTZf?V=&pB_w)5y)`=XVwu{?bawVXu8hCCPvQ!%@otNMtOhO3f3my|i zu&>XJm|x5J)}1*c`;Ecj>rwgj+-`uE%4 zAnZmfLqteXBb=H#xu}?p1Xa9kS1p zxH;6r)wxNRD!n4_Yw_6EY=1pko=ga^SXUrDNdU|2ISFJL|4JvP^BR^zl79f~KBQ%p zVE5thwA=Az4AKcWI<1$Us;)CyL~;}BzYeaj#Uc)NZGC7NbvElJeWLW1XQv*cs^UtK z=-UQyu(2(vhQ%e{ddxQ2SVNu6{gqxZo~nqayd&sRTI2v=z#m{(+a?XPw;mHI%+r%3 zS*f;N-)n;{2WXRQBLt|{BMpG#ylsd|UdB*hlY#_D+cwM&z$&$2>hY>nf6v%Ywm+n` zL|`BzSRYHz5wki?=WLTyRLh_rL>lze#(J2>wi`_%>V24WJ*8cb6B3-W-Hs<6(!|Sc z>vwFOOlvsKb`X{{b=7gYXR1I&ayXRri}iP{*YA5;VYvM()x6NI&+B@O=m^KXWBpu{ zI;A?);XdshOcJY4e4@U%dJy1?PjEuz>wD{DE$(sZARGk#)>^lvDkS1NsM4v?5?UL> z-dY?qO|`pmi8Q3tnRRJ%MzXu8D&qJr9GF6?oolV;l%x`=f@l!$*Yj1(pX(5_PBvCZ zsH;!~$9AZM=eE9c?sirQLjDo3BJ}3sTrOtDyoBM8EKC>|=N8jy3{1&^364v;JlZP; ztgy8@3lrN~Rl@Hnwcb2=-@QM(*~@PfBAkf{iO?qwtly@5txYZbQZ0t668^o~TOqZo zjr9dU6?pRAuaik5#E|EC1@-jG-3&)UPHUUcvB$nTPW*1j0jN zV*Xo0e`x92*7^~;Fr98KykTqqX*~>K!0=nP7G}gyp;{N)u+8-w53JQ=p(6b>!X^Og z>l8*}p()#`g@TkCIsw*)-j3N$rXJSgZSUAdoU@JkxBln#LJvS<_ALRc_Ccxb^S`Nw z#%xWo?_o>Rwp`=B#naih>-j!a4oo+!-=DM85S(;e=b=2&O59Vr7VG!xSU*{x;Mi$v zqy5!(^IF?!FEw<=e9bL9%bx-73(pmKNu$3k46EIbU)SEHiKOQ!HLOQ!7z*AUecJvE z;@$AxZ|@=AEq`aXHl5f;sMI#XU@U^Wk8rK2hvh`uTlm@3LaNA0Y4uIJS$g--{u$cH zWaapVNK+W$F}|Ed>Nk9Y2&aklbsb;Yce!rhx`|Lc{qE-sv00n5(rP`->1r8o=)AOM zfRv9dQ>TMK94r3ji?RdWU@$KMST|~E4PfQ?bRoN*-Nr%?4QRo>1WetdNARAtS%LN7 z1h!QjC-YuW6*w9A zIS@MI+{?P-mSKH(pzRBB*d%1R#MnfgwS?!erJ)PEYrZ%fn;vNg1eyPXUC;IUqB%E3 zzSoy;>=+XIgIEHwufaL|=UVlD^`?8X({=D1Mj^RBq**8S=f)hK1GO-~72d-qC&JvY zim-=je?4_ZCmQBmg566wV9yzrbKY5+I+20*@XDNFmtAbx5)p+Gc*8O_owklEwb22CmYh3~jJ*ZUPWTeLQ}nQteDOI^52{RtyhB zUEjEkmJ@vKmnIF;5y~Gw!wK5+?47`Zg5ox7HmXW_>QW?SoX$LMS?^H4Dj{9FOlgu* zcBo3%tkTu=vg&f1S${&}VhGW8Ac=01)Ku-B5~^rB-&EKl1Mg_x-b7cIKf7d8#!A>A zQ$5p=l9Sjw?HaK|*z>m2p^Dq(GzNJ{oIhYU8ufulQ^!Nn@;=PhrUV$$c|O1R^ND(< z!@dpG>p*$z#Q0m61fzZ1+`jFouDJiulux8evsqFNb^dlN-9idAuUtA)S#_zx@cylB z@CFoqe!%|4Eu^nX-T)@ex zDbBIFeF6??wO=& zoYv5Y_+@ubhd(EXfLhqumqHa>LvFTCZHN?dw6{7@1j@eM$2GOJPSn4X84cwu2?3zNEq9iUG>j~{8n5wT$wQZhTyGLPdsYtVSk10++bDb zBzyO{|DOJ3&tc|zWlB0b|F(zcP>v-vqB}Q<7`W1@>7#>eSC>=`<0V*}PUzSKb;j!R z)>`O`KK5;vqV$&(F)Y+q^#k>?Ql`HmQ-hB16#bx&fd%;1Z}g zH1y`jJitr$PR=&Wu&ajMwQh~UKR~QBCz_-%cA%@jy3t;V!F`)X^18os+pvdLTvnlG zOKRRfw6Jc6wTjb561W1ux4ylGaYTDAfzwu+g4pWaW>ssRY$QADpiUXvmQ&q*`sRY^ z%2lK7&c1NIzX$DDKQ7*n+|Do&IFMdanGecfMwR-yD$33A$m2%0qkGM^(yAV>Rj2)f z>nL>LeRcJ(c`&B|xY&Nb0zs-y1l7 zxpf&t`}rKCh0||45}Y#;$kG6oq!IelID(}NJ%WWSOpsV9uP$9mof|>KGMJWJ6YB_IaUPS-~M534KE*qJ?LvYz{~;aTkeS)u^9n^FQzfIE;@ z9Xt_3i@+Xia}Xw{@iu!WZ|zu&DB1JayMGf>Cmf@;Vji~~`!`)Zs@u4|Fn*&gDhV*7 zPfYQnMt~C>Te=FC)gBk;UQwpWR>+}u+H8HvF4v@^IB%N(GNjV0;2_&EtHkSoz@+sq zY1PUT08A4YZijGOow;gTriPhWdi8Uwnb<>(EUd@}{;fzRI}i_*s(lhb18Mgv+h(+@ z+M^vRN7?|1>!kav=R_Zk&++=F-j89Cmgx}e{9FT52Ffu0loFUvJZiX1I%n*_WI#Lf zW7ZXL>F3L9c$f{Uo{Bjx(G$4U3l%WEei5$<(^GMeU@QY*0j*-@D>yJ2uzGfz3snbK zGnYxK;0xZ{?DYn(=Vn*c0?y!Ww%>my1Cz8^Rxt-AnA?s(#_vEoAd66`)rk4cbeDk^ zi#w~=3arM&1UoC$!pVuLmM|Bp0QMlL4#jM)5B~6Dx2MZN_M1m`{NrE^bZ|Y!Mu6*+ zc!x$M1WUP09Kr2hu(xvC|2GazmjKuK7LR>%60fa98Xp3y-p%93C33yi&>Y6Py1O*W zAFQtXh*kQnXUoBcoH0jL#IK-u2f4(KxoCsfzgOw?jW`o!PECgr(yJEaenrwi&ZL$n z6XX)C8FbD~Jy4fG|{?Dd=oX_7%h3j4sMJSS<$|5jD0?f2uX`C9|KR+;rf z1!2Gck(NRH-q|m;{UU?OMXl07&#&G3D*CDVUPzm{f*RW310wRRMwnk_Rt2_Ov=J`7^01V%T2&`BVoduY0ai>e>&RyEMCY zKwW!VIC-8q$SkPAQt+Dh;4gg!KS(j|BjmE9Ds{FthyB{HJ4f~(YY9~s+3A; z)jfd;sIaqQof2z{WA#UDfQs?a8JLcs^-~kuiK~HwFamV6Pz4LaZf=` z39eFe<z%!3Q9WW}%B^7TRH{LEmRhYJO z!i@YiScezznq5&UxCZNz+g43lT^M~K>sU#%vo2gU9K7cSq?B5LunMeZU){CLHab`_ zbsSR3k@CE$+hp<>DLjy>aa4<13+f6C3vFfb5bO^h7 z_s*U{Vqs!YTkE&~wc1(3h7{nMlx zj`BcN!;y?Ol}GN}^gK3<0QP|bEYi_M{40-v0sEyc4`$uBYV7Em49sfQ1ALhaI_g&2GtAoKAv|7-{PCuc+i|3XlUqxK8o?XKT;@il(`v z6Mt+jCKeMbQt1*ao71u}HvwQVP^jd(Fng^~Vx24$Salnm5J084_I$A$0O{K36ZKQ1 z!&4++7cLEGX`g`3tHWE_syKTN zanH5?DiC{}ko)k=F`3|dj(4rIi2;&`ODsuq4! z!gKhM7{EUAYn^~x0;*wz=eTo|?YVCY?cjTYa4b9j75<4>*YF|DfnVF9pY zcG?Y(;w6dyN&1f&B~#Uz6uV$7teygOv8#tGvlDX1W=U3@fMS!R*9v?NnhV{7*{&ah zU29WGw_|6nLWaZ{YT?d+Roo8C!zM@u;KK_*$)((Z160^-B@L-rB^{tO23$#{OUGg0 znrtVV7!H0tukO9>1jpKND+B#v#*00-* zuTk5H>y&bJpU$igQ=3fsZTCt-44dG{;CQbG!w)A9evO&8f9BUJ)iZch!uILXql})# zK$7)YT_v9giFBIlb)XJ)acU$dln$iS;vke}=Ib(IPuiq*SU8jgM1{@O+qTJoitJcx zewB6(ic6_;YlAr`foR{3GW#o>jvPoyP6Jyj)V}dMa|Q!Y&zB&{mk4ZvM=*JUuV7uO zDqtPp6kfU9M+~c~gOQU}&OXZl(ub)Auk-LljEko^H!F$`hwuvS0$4Zcxg_3Tzh}3z zx&xD^l4JR%se|w8SpVvST+Zm=QY(3cT_sG4Ll@MHs9z-Pt;b@HwY0T9Q*3(ixJ16z z0T5n7#pZ`(zlP3B`N*s${vx=RtF95;ie0U#9ukRVyZT!tT1D9bu|$;T&nJj?4HbAz zq@J9b!~yn!=X`wu=O)ZpUcKb+yF2%~Ncp-|FlCkmC-{fj7&D>%quO9^CmU>J&#CrT z7y(>G{8@j4@G>(wIoQ&s04Y{g#f4OfkYwG-2?c6m0xUkPy^?LNyDG(AAn7_X>Huk1 z2C_Rf2>>{WT~+K)g?878Nwl=Z;x~Xb_==-=GWI!bw|dBC0IXCU!|4f(PnXojaU2R& z$1=3TiZoknsF5?!iUV+}XOp%MfHaQ5fE6m}P4ZM871qg+Ae=Y#dfd6nfVD`nSGN0c zsd?+_yDosc8h?v9dO=ofp*_4#NEIo*Uk;8$jA6$9@Xe? z4Ah<7Gumct#~_~pBK2>mH5+?T*ZRVNBu}6yPfjJ&^?a_4W^!=v6=25K*`{|R*?0#N zs&Lwgs%k$bb!$?u^4QMJ2m@6{dk(0;t*sLEu&=P34XNR975*nTdb;UTQs z4)+eqsS`v5pdQ()RWPWYxMwhZSv>hU!4;r-!m+Dh_?>JlWhirUJ7I*ZZWn^9(;K3Y z+5kUbXTB>&7J(h%Aq+qbK@0_=>t8$^*jXPvm+rZPE8TvCCP@l>NHD`lmZu^)wiRzH z@y|gp(#wr8aV)9w)T^@Mj1L}cm*&Vc(mQwlt(F9|op|b=;2Xw9lKDF&V&)qbcW#Ob zABj6Tp(vO<)DHakH$P1lzr9~xK#JYF-&NYHoe}+4m z!*e=D_qaj7OI2-rSov;v)PYgn?SS9Y9R)$5@?_x`Q}e@uL~ z!+Vx87$i*c5AaIcB)2w;;ib4AXT6*NWe1 zA`*Q)3ll`X*U{vtR#t}U-*6;~cOazTjkrWwpNRrA)WK1=jQTdV51gQi*+$2XQP|ki zM02?=_P6d^0bo5&wQhr&7wO=1y4_p$8h-K$q$asq4C{_cs2$habD2{_K9gVpz`oni%&U{#nLD7!`NhX4LD-4CctN z;AV8e1Ex)V??(S2JlS-Xg#c&Hx>T)kZ9ipkfEQef;i`etx;)q^l}~1WdsbB6YrLCq zW1ksc&ECeAyPMsf&I8DcI4ix)Aa^XF8{4~`ZC!`G#FH4)MIqEb*sgyJ2-gn}A0O34 zQ_I~b#x2C;?CVI_?(9vp-#DrF+}UI1X+P)DV1ikb7!%pa`b{w3OlFnUsWQU^n@nu) zgMr5Cs^`YBeM{=h`bu!CZsyTBpo7ARY zrV``T*-B=p>e6q&)~uLE=M48hH-?^>w>$2wW-y6+BXgGZ{>JOtkfo{wbC5lmxl{(F zdS7U_UT3zocF&?dwr8XJ@aAnwy?Yz5$Ifn|EY2*BS9lHRk`=>gNA*+ozuvStC8w0xvtU(fi z{C~Jus=8c;r<;$bhLcxTKsF2ld!?M7jey?qvhH) z3Hz&LCnsHy#R>LTmteyNYsYjh!3w>J%jSI2>C1dxCD>g{yzVwwgzGH#n>5Q%or%Z8 z#u7;YkhTuGA&-R(k7D>biD%%UBLk(}u1S^dER|zws}$>!!QA6!>3yuL^i-^psP2U$ zRrFa>BZu^qotmo5=@M<&aYL=RsrFVGs9ohMsWq!lN4qZBcB`6l;Ls#Z*D06Pj*^7R zkv*6T7k@Wiuc`mcMjb8Cy^wR7+BvBm2h#gk2Oc+2(seh@6E*iy*alro+O-2y+p{X# zn?8_k{aT@ws8Uo`;b-YQen-6_)kXhg4Z!SbZNgxCzIMLXQ2%BrawM4!9$TokCG}G_ zLB#uVMd(bmqvre14o7j%$-cUY2860N)U{X-X>&~{q!Q1P-oAcpw8>2~CC&>8mnvf> zFkhIoIx`71VpJJwgWq!lSgWtN=dZZK64rN&Majc!B7U`Q;|=XnJ={{psXBPOSAy>K z44%Qd`D~>y>t4a6hjsg^zZV9sTCVRLQ6Paut#d);=H`Zh3st`F1lq!H>Teyc-{@$3 zy)VuVFW)Zjlp4<(G`AtKLX65D!oL->vj(_op-IuRtW`#)HzUxDh?Q_;dLsT<3_SzJ za)52It< zbC@9Ov9I^^uaZlE8WH6?2U%4S2YVB}hl34d;N&D`gT+ismn4)XxrF}FgIEk)$>gLE zrFI88JBh1`A;C@$I#MO##ao|EpeEj1I+GKMs)_ehMSSkgPLZ+>VLLmzk4hYXZS^iT zP!$K-swxhEbUQ57#*vgAo1rr1^IRD6>XbG53LM z=seY3agH?9%G%IrwIkbEM_PgQdFbiemF|H}JF02>F)eKK;zvC+0mYWqv*m`c9y zxK8ee+}2SwmnK2u`Xubx>0KD>|3_;4JVBU^`y3@r6!O!r+J>=OInLE*L$Difk0ocN zVN1351>1cy)W1EmG7A9I!)ZwPpjsnltMM=zT@o@^A~iOZ_SA*9NxxvXnc`cPU|nK6 zT6oQl+E$m9X~{T(cT_TkT%uIE>(VJbfn}fuu0;Ie zS#I3E%Clsp)KtOqDnS1&mDDLl{M|34FpT@bxt@x&%OaRLsC5*r^Gv^M@FiUz3sDb@HVH z{9Wo|TagfrWdy4J7u%jP&b62x`ziI=`rEvRpYk>hfN`U@rHlK1?wwNW#S8=nYLfcv zA3VYkn)BPy2cff@m$8aT55jXY7bW`l)@>%;rSUweBtX4o6p8QUX7XyInixf2r0Wr{ zwe;nOlM-HXhg6rGG8+WcCkH;WqiW^sOwLtJTxX06_r%ken=bEE#a!5o6SK*fZF2jP ze^l+vja-}Cs1jBi%C=Blj0Y5UmlgKm!`z0d3ENcR1T|A611Qc#s$~uVc!kqO(zwm%p!~N}^{cqaptJhu))#S6>Z&`(& z)uWTq^UT+Y>!xQD&vKT}_xl^D`7iZJYl~cQ?%;jQ`@P?3DhSoQKbN_`t0cvbbr3hy z_Zq6*`F8Lwtn6HTJM+F>lc6(Hi$le?1hp@}FSKFTRK5tOS@2JRHPpT!*2lM8O*p>p zv8$_oQFh|n#CMPH-_1<;vs7`OBm@$w+E_bCtcX_yF@#I1L2pQt)t&_qp5xBo5v&sH z!AYqmuS2)BRx{Y1tAX8AMqowsV%S)bn{`vndC7tGChV*jUjtbG7{L0b0W0#e!h{Eb z=#`D%o8(7xAHe#11zdMxB?gF50k? z6~ffnrJ&UkY{L$O1lhp4FB162?~JyW9GbE^IJMivU`Oz3*lpr5mrtK|<;fGqydI0? z&HFwZk~7zEcyak`BXYgcmD0g1Ge{NGT?^+PZ^>EB0q6JN75b&zIHNaTM=j)~KAY0@pP zqmnB;>{NQ)S5+}$AI_a@0$tPq&H8EzX+vS96 zAcXNuns;$HJ_((ie0ICLFjcTSMuoa~fusRAW|DOqq4w4JH)3ZOPEZlE^pI3#I2s{d`Z~M zW`fOFTD+ppdR`f-b0s~-v0kD|vHl$AuEOOz2s1_wg{fkul}0ltVH=EC)28Be;)cqM z=5-l!(%dG|a3)NizN|Zrk7VWWlK^nyTf{dBzY2uhx%!u2tD98@H76zgK6Z*pqC3d6 zMak6E!Mqm3YcM8U2tf71C+u{b9C!l@vwH36Fmw*`{e3^*0hGB|vEnJ?s0L==NwGxd zLV&%d!1@XH)q`sV9>LdjaQygI@9oA73D024D=M(Q1GuKd=PUr$-*_MWEb^@@7#Z!6 zNcl+^iOr+f*5kHnL=si^E0WEjIi|H@ zB9Y3^7Uf9jAC7L&b#9>(N>q^f?2{-BSMZ-eb#U+Zg;Ks+<>(f zbeI~cAEr$|?51OacQ^+W2Sp-mu&{`a!1T@^Uw5w;lkRp9{LkNZQ1n-T)jzn3n-{V9 zyRk%=PNhmb>5f1)u{t$yWHz1C?v#MrLUfRHorM4T-q*aa0N0r+i=BL;s(Hyx3}D@* zU6xEKGu_KPu}(k{aj{ezE4VIq#O$&bH(T7kO7M)q(Ceq#7?LfISvA#iRTr;^s#_m? z=9rlDrbZ@6XSJB0Ti4efcZ-de;#u3VlE7MgBjf&D?Y!Pf3m>|o%);iIZGLs9gNC=^ zD$p1V{@LsHDzD*eH_XR`osb@=Q1foOacIiMRj(q=PAJJ9SmStSewhHNAp02K_rS)P z?kd{}$B4##Gq*##I+gce2i9wbZ9KKX)Z{)vm?iLwc3jo2?4f*>{Z>ZL1J4@te_>h} z-9vc#VubqA`*6u#I_NaZdx{d6I#B6)LsaUt*i!c`sDPU%19Shqa+_&@Dc<|JgREZ* zfyVIgr+hkVs$QH=Q%+4mDH35e1YIC*0h5wyuJFw{S8|zJ_OoaFD#S?CCDdMCaLZ?Si*S$sqN^* zfEd~8tkjc_N;(gH zxLVtJ!7MiJXWSn*uI*ji_}BATRO|5jWPkZHt#wIycl^HD=UA=+EG6uST(9lc zkh}x;!BHK1V9^3O*E*R0obrw6L1Q8fsvbSZ_G<5}cR- zthX4A(P#~CA?$JQR{xC(FmKo2ICt>tLRBz|1M6Myw^x~%AL`(L#rAZ@z@+1S5JfNn zxJX?lV10bqiHYTzSS)Ms2p{|I_^oJL2JqO0-IYJe*v>lETBm9t|hpMK{NqFEY!rRvozWDhB-L7!xJ}s7IT7{8f79&#KWRQ zOzh(GglX##53AUEmZVt9u9Lm)+<}!jVhOM=#gcGBXQeBnQruOLz1S=#lva7Jbgm>8 z5K&NlyyIH{xJ?@9!il&h3J?cbPZ&VvmvuXC;nFP~qi{Uw7uOv4<|8L5<2{wmX7uhX zB~EIQN632o+<`br%YzZlRm+59cc!|eV(x1Oi{g~SS3uO8Q1yTla7$Fbs*85w~CRg~8L^~5y=v43u4?)Cap z2U_ow+Qs1sZg$6}p@{vX_FU?RbYGzco#(#v`p5l0_viD)K3QMU*GUqcZ&H7Z_UF^{ z1j|&p()NaGS36<79)TuGKRQ0@!(;&+2RkV_Nh82KNu;Y(SIJ;!$1mo_^=p)cw!T9^ z<=0D4t?J%T{f2`Qa;-9J&8|tQ0-ucwzs7FabsEE61yv?B*X4PRVMU0Is?g5*GgATY z>=*C@ADnt#n{Zsxa;Pfd)5T%$BbwS*r4d7*=x=KEI2L~BkcRKp`lg3DzLVPusBb>K z?QW~YS~-J*ke|}(&+;wJbtzA41=g1qcB5nYeQG0rlAj>4dMderN?6Qn80)v)iRqC7 z2p9kndh^UM#g1`M#h=?*yByE>W~SJ7CAf|c8kQ7XYi;NTY1KP1 z!!R1{lIyV~{q~b~D7TM1hk>tu_?YCTe^ z^~95|M?ts_)Wq62a1nEM=u7iJ*4g9XzNw4>vM#*_$cob@UQ|^v_V4neDzl5p^1`oE z?WRUX!6X4R%DObmRR`KcOu<1Qc^w;ga?Jo3i3AYtv+(O=n{9X{^Hc*|IA|14B0#C* z+&PZ}MmLbY?3$OrZzDr#(ntUKKy|G3l=aopP^hqHCS6tuJAw5jpdG0XS zhr`6oGXZkY5ZW~yY*#DW4*M#;slL$_@*6}LjktI3d|7DRq1W$Dt(TBH+vypmCl*#i z)vs!`%o#GM3!Q06+)0TNb0ghnSPeXZ&(6H!{ZTGf9YPgo!Mud5HngoW1*a~dncJp* z3}E$jZc`iUH@^NhjtiD59e}?*y509M$GOC6Y2<#EyBFV;SGQZ;!Cw%(!4#N&>-#~> z|6YpGA2b%GVRg93EBa@_S@cm$6!zGW?Kcnp8Z?mGTG z7_9!b1pd76h`@g=Dvy6ZekK!oXeDqBmuQJu1_}u#9#zg^mM~Z!4F^}m!mix*`V)-a z|ADS!#*;&I1XPLAZQcI*OK?{Plas25O@6h1-^|lB&fiZE0DV)p(Wc;1D_*dE`DyYA zMtyg5BBRsP!*(+HKcv}d7t)ofi|e}3;puGJr4SqcNSKISD9KiU1*lFgS{M%svhBF4 zh^k}XPN2odTltF(d_}6(yN7~EGiJj~js9J|>!u2hSk|$` z3OnmBxucxoFjT?!5b@ze5pZ5w={UalSCLBYNB#TWvfhYEtKdR7$^`u^&zboq(;FT~ zK5-O;-FS%TaT5G0J5xxjUXl^^3Xb3}hvRT>fa{-@REH;2XC|A}H4cf|0!M%M5jMOTv47M%dpourYUJ3z(E0NUfZH%0{I_O7-&0Hm#>cp|@K1pKU-ca*W4L|cqMQq3QdRGy0mND(FS*bJB2FTk=H6?#t|w-Y4D{(T>3c%E1cv8D<6U&y$vB znQs%A@j6O?WwJ5X`0J6x%CHx@=Cj!C zx@2nC@ky^cBN0Ml9sUxOK*OF|$}a7t_|EN`{H9$hjeM(A{fd)7&{+viO3t$6j7#Tp zX(aam%(Krz@8HEjPfuWsNe-w4R%qVt9F=Rj9>Z9qm-`qT!4aMaHSm$Eft`du?5j3@ zdcqXXbTe6|6mnSpK}zKduH|K8VfwAvSV15}^IuX0KfKC;Xz`w%y%t!)UH}yb<6u25_Px&B5W58lmNBuL52Q&@Emp8B=T2iltvM{!T1z7Gu*^`iR9_c^uvX z$(R{WyE3ZAV#%6u&ce@U9sMf26PdLGb>TRq&qCbZf-!hb;i!LWJzi~^{Q~EpL-=Mhh8+t+1l`9#)*F^0OI@rJQK{-!Ao5r0mGzD~!ky&gM$&TWii)cu{_ zFXI~h7)nO0N7ttFS~u%w9lCAC*x|mmE!u?pjpL@RZ4$AKI6h(^Yujk&WE%ZP69IK8)-G{M)1_smfrLsMYWf~mJ6oCA z_8kXSfM)%!A)(I1=u+Jyc+bZHneFxGLAKBR=kx}K*Kdc|dd%AK7nH3#W>dxFK4SDw ztHgRDq5kDC#^opaZhpi#=Z;Ia_HOi|5-T)$Od02i&XJGx-MX&;bGriTYf?lQu>Ndb z!GCx~V1;Kew2Aj{0>W;fWBmJG!C(E6ZRqg2}i0;muCMGi)%;3dYa5HB=<7EC8_c~_AA?CpU|0SK~5lD(E5yqL9DA0Lzbh z*@!Giv9=`N>1tkVkeW#aO7a~8U@-_SZNMStF$SRv<3tXiwSi5Soeo@cKOaLCrK81G zC4()8E*>wH4qz2Pqyy~20i0fx7|`Z1(68EW2WuN-SEciH<6mxs8td4Oza<9gl>@vF z;12x8^}6D9)-mAwbz%ZwfLwf1AXc~k;rPXLr30}6fYgbEUju{q;MjRRu5v~@dB8%? z34rPRe4e{CKH7!f+rp0*PI>}tN?opd?^E12eh=<9)k)xwKC|oEL}*nB4P={0N}kTLUQhp7}df3>+8!UMb6xFp-6V4QtM|(uJE$-*i{4GBgDLx8fHVbC5vH2F+t*ec}JR9v7FfWN5{ms zzcEeUo!xIR0q3~+#t9-|V`Yw3IxwZt7a=zatg~QZQcy*X)(2o<`mLUOx-`i(qC)5) z{6kHC{wIq9E1YE?t4cVqlTL?@vV#(7V?YS>|sOkE6EzsK)qF2TO>*@zpk zpW`3QT>iocn$hXO@&DpQYwbNaHbFg1Bl%0)=xPY)`CkEH>8bWJXIbAub@8*2aUo2H zxdmO4g&pA=#%tO6lOUrGR;MuR$MT}rms?-|jjCC&O=pEi5i_)B@lp%K9U0j*b-EOXOy<49ewgU zTh5wi_VJUSG%>$`1tyqacB+KCEVLbQz*FF*q-cW<0W}6JXPH^K^kr-`E!bwR7IB|(KeN>CskN^zlO|!&x5<*-@5=gbmiu7Uj`enlvkh_S*IoEu+|MF_ zE86YXUj<<0{*HS6*{%Wrs}#R7HnPy3=(}M+Y7?$_4%CdyrM)L{e;2J?oZOXo?kiq* zmHOAFh06jE-2tG+Bm!W{cKJ6mo|xhfu0R|1kA6RvoFf2pcXQDLD0eq)l8a;>HW}Wf zHp(i)X)@B*fB$;tK)s2%%E!u`*xH9O5tNn4{aMC|Gj zLTn(eB2fu+!4wj%aZJ0pbG^Um8Exp!naKC)u%v&t*KfG(wO1WWY6Ov^)yX1$!C1@u zpi;-;mt1*C=cS*-Qi|FT4x*qRxwiLS%0m)GJT#(+TAsJnCWP72!aU2f7mxXOEY(Ap zajnO3Uf1i9b4(wc2Hm zW|14#<6&`JwZ)!V5&*Z$9#D=&8aq|r93d&T0_{?5v1;$3c~<{Bo0@m=IrGL^YP-E? zvtR1rDdG&%Lp~HA7N)3?DZ4E zdqvDX9PBv0Zx!@8Xiuc~l4Q24PB3m`_7)8GFBa{JtC5{Ld6m}o__bC)?`Wv$k= zH9O|DJ1Fx8Owa%sLz*RctKWjNB=MIgB)4zR$zXW)g@@3Dm#@{^wkeo^A~hJ55IF#i zmAHc=l9%g5`%F<3)T(E@`_%)OnYoyyOE4G|#@VOvn#K(rDdLU{Bo$Dv>+g?{R@KCX zLxTpE<}V%F-v5mZDP#5TZSn@rL+tieI zD4nH|Gv}oj!519iA>nV6N%f<2D2UEtC7|b{gB8Niwk zOd&!wJ~z$}XQvpp0z^CaVva$1Q3HmoY2v^XW#Qh;0g9VdH$dMEtbTlTZ1H0k;h-W; z#1VL~a2B00uuRhRSHm{gKyP&~;u;P{mq2@bAMiR2(2cg4#M7-t2)1ybU--RL2Qwye zSY>=_*Y&<&x6b@p`P!-Na#is@=53F!liJ5s91F6NxZ$W5k}oG$X%ewXlYrc@bsn>5 z;WsG$?ksfKjX~4PPHs0Qe<|!m++Vl;3a{O$p|@k>cLi6EKSik?ya<``5Sa_V7QZhC z&~Q*PFm@p2Z};#Wg z(*5i25Wo7d$phiIr1n(`5azXHW-(8A!uVCju@>_RUb(#$YT!RgHzAPzY|?7$-VrLi zRM5R=$H4U&O>uL*H0(vV|rvoRrDOzzYx#yH(+t{*~amU zG((Awe6Ghu9@v<{gy)#gbU5RoHQfI&8*)1=)DJJk^!qQPaq-Y!nd$;FFTNa0i^-au z+^$}CcOnov4EQ>mt8uWpe4ohw;kHg-_1~ZH0YLq-?=L!S9w&?|lkJJkFrmVMO$2{T z2!OxOrP^c_nGfcw0z%B%8Y(JP3DGMMAK!U(U^)-=5$&|+%z|;DYN<+zMm3e^mAz&I z0kdXMmE}teJ~&QQ%R3l6HlAZrRme-&gEqR{ggVUZPEZ}gNs9YAQ#pqtM^kAnn{7(} zmU%nvhRgPQf8n;xMZZIPFC4Pa2I)K3!K{kgfnl?QO>JuGJ998u>M^FSHuc}4+D`#c zJG-h@+>7lC9&h^mhV+uPjKr&NynIRrH< z;Vi>=$d&9&!x_fvT1A_Xydmxl_l>$i;O@4|9ojUPY{Sac?B-yz0%a!cy=Xs=pSfCg zYB_;deY=lA9~OTWv@^EzcT^o4zr{@gE5FVvu0xfrtuNww#gj{*4)j;liwRYD+EV>n zN~?d#=N;Qk-A$FZy(@F6z5!;2(DN>q&2h=i8+_+CbR~{kfWkp#D{hYB^AQD#ik#SxJEu%bLCBv;a^~_iQYYMR9Y}iJSzmqNuqF(klL- zT)VF0)JLd;RSisY7o3)~z{U!PPMTQ5EEdEN09Ht>lv?i)SP{SadiisiexnlX#dqaf z*9zX1TwWUc5+v8(x7@5O7_To9kUo?uxjvFuJ|ZSWKJaH)4k`Xh#I+Jyo<23a2+6hM zMhbaf%rjRFoQ)W%8}4q!DGtXf;V6^Xad~HEnh4J+w5fDWH|^Juw4}om(VyFnQ}ocW zwT(_$$09Wq-4hu)IT2_dk7hIk+DC(JkHW|efb|DKnylZMs)4_;{QLeOD_7-9TkO0t zvWa*D@M6%*N&f(_-?47KY>;KEIs|-~y8ey+ft`e2#p1riYWydA$%XV}cOt-kBp)Zt z8bN@45}th9BRUrxIqeu`o`+Q92vt3_$s*}=O$YV49C+g5F0xwSFOnJe?StLh?D-%P zA8@nP(&HEdk2_1)$A2-f?_B75w{d%IWbRp5(E2Vxw)j8?VsQuE$}XdWC-wn^4;)Z8 zJAEF|b^>T&-;DupZlFvr%gvI&0UPFxqjp?@So zFSdV&p43vz1`QBhRvYuuZEN<|>fcEdh2^|W3e5Wx&juhO$+NliwT_K%k2YxgI=!xW zZz7RH*NjCLtC@=hqir(AnlW&A_FHJ14y3)xvh~h zTh!;12lkoYH@ENTJK)Ex>ZHl~*rY~(hF)){w)-8gZ^wZ!+crV8Adwj=Ja9c*6pzRI zv9xx@GvD!cE}f5;p77@xJOe=eJpy3D>90;Cbt`$j4cal;T)H0vzZ2R^;mvzt-@?Ki zkO;J#tQICEuis5?V0z&WigZ-;_gR0HeN2`SIiM2i{?`2`IHBI}&6Wyz)glcJ8K?TW zjuF)>IJkjbs=Wr^4}=Bo`{W)4Y)cz{*Sh?m%MUe^4ace=Szi}MOiU<9I6trt!~j*O zfjM@%fWk!QDxkpBcJH>1qes%iD|nX3_#v%U9(Wy*>A>Wm`XCSNkXqe|30lhMZe!)Y zp8uP8>g4=3@QZN=KW)_DYa{s#Z>Z||4;s_Ome_kh>?#{41X^rRL5t30WP@4j+F0c^6W3Wg2gmlO}n z^uCOVg~QWr+G4p2w28NF**l$b9&T@|2 zv8PhWC_GlSs*i1psgFTQpind#>C@o_v4q7umcX1 zm9-rNp;23{LzZ@(K`UI79rQ}Pn+sRj((~SJqV`L6 zEjY%QkVNY5-BA0|XnHP}3Z7ji&5vzS6ae@1d#(9YS(n>U;nX-i>zD=(VKguoRW%J>6vXfsq zmw=x{FLXUVB#pXZ-*N+Spw=AD^^qkVPYiCFE+FM9g4nQe4lVQw!45 zA)&6?VDHBR%t_W|m~0*8uDgfVe1fmQP3${QUQa@jgW{ zvxspaF$EU>OU@#3Kme_7Lo)Zha|2)6YlFNL_FEk^iVj+x&bW(%<}Op>IapRu6%HI1 zvx^DG8h4iB@PzX&99R8}i~JmYaHAuX9yoF*X|^mnTS>F`LMq546eP~@!8AxT!okER z5;pKUxFs;JmR}6YUm&&^6s?oAbht%aGp>#8m{dUeUoE?<&KtI?*{*57TUmA^oF9{l zG0g1vc>`7-rYIavF9yyws8=T{{s0{8#Q^DIdF3qzd{yvE*NHN|4*SIWc4vG{em-fR zq7`HFfwtcgAv#*Yt30M(g)9X0L z(8NDiq2jOIaS6hPo6hcfRvU)ayb(&RFQt`xg3w6SBtm-_w1%f6!2O+(0qtEl#o>sI z|Cu{4MPe6ji!3)mN}n8Mss~{`3 zU*;q5k2H3nX2E`yWNRV-EK$zx&V} z0Zoea>=y0>r)E=$+D9uiTH8AvwqTYR8R6NO;N(!VY|M0HyOA9oTP-EZvA4l((> z@HXYSxF2^yfrt_lT@w;;(_;^0G569Pu@UG~?bkE}L z-vOATvR)jVTYsSan6xd^xx$HscpG*T{6#Tmp~3div$pu}DsviW;+;!UX=q}izb_)2 zjMTTfIUDKwPWvbb@k1KbZRh4IF)SV`g97y~zcqj;Cc3)hmk4j)o&EYw9gxo#6J-NZ z66!mk5=6Jit?Jyry6s3s(vzbjX?a$q(G{w3^qT$)avSEMhPrHXyE zz!+|{hL5C4t|-p|u9+q`7bhe_dE%%Tr2J!PRR)r3Vqgk<>PF_+QKU@1?4Kg=@BX$2 zUb-Q_I;k_It5R!2f05Drq|FRch|aOuU)#;wlG3VndzU*i#Q#UGcaQFWr2n2EJssnr z^!)HJyN!IPPLZe&^uB`XLe<3NBlejT3nbWcekdL6uy7%VYNLkixTYBNiFaXFh!7p; zCdP%nQR(&VQaj_j+YMwf8$|j#U1ivg&Ju5^r1}9i4gxDO#(Ksbon2m=L29~Y@!T0` zk4%m|ac^U;PZO9!JrqR|_u$+=)KDMmEcn2WugL@OvHO6>k6)K`@ek0&s4(^Pcu^+t zTR~R`!1IcPVl#IPIJ+YiGiUiaE7bw7FuRWpU`>*h24d3SHl&J5^T+{GI@q`JZ{9-y zMlHK}XssaJq?Op-fHI#$>3lceTpVFwwtHp(-oVY&?7JD1diN3?v?`!oQtNz>hlC#> z6QcgG7i0i-@jE6Oqlrp8V|34haxrMt#bBHGmb`s*9o{3J>BXRy!SyB=byAfl22GEF zTk!kk`DQ#kQ`UlX1)yP1M2O?XUrE{yyL7QW|Rg-Nc@DNq3b z6fDbeqRW+VesypS(_)cihRkYU8I>!%gn8TmOb5wos_k=(nd9HTN`IKiBuXOaFAkoj z?(JN^8y>^n;My!})UjD$FWuXd@Pi6q^$ybGEf3#g8odiVh@Y7^7}E;{QFA;704p-+ zVCKV69jJ=k`wZ#^JkXy!;V#_2e_FN&pX~zRBAx}Kld3pgxx>>vPKRHv&1IU`tYK}-|nhxcOxxY?UUpfgug>;zj@=@buPT0>UFif7tyb9ItoWT{uS1Z z_XY1w^PV?HzAm1tp3|M3)1l9t`urHYr}6I6(Wt%C3a48jC!LM(-h(r_v&|qKch8OScNmvYQH~&XK#Fi?u2wm68%#nivgtix61DrY2TKmKgD-WU{z3s zx);ET3+){BFek>7qbGir zZ@>G_)WAz07a^@8vkk|~mquZTMCZCrt>AC19k8#~G@-xa#HXeWC08&Lvq;In3Q&C{ zK_>Kw+f|FH>fVGAzypBl0~t6nNdT)87=<9m6sU?q$1NnLgafW|3fsxumC-R3m@9~N zN%9@XxYpyxD&cx!w6wH%nzXU2cGRp^7DN4kZab-j(@%IscTYSP>G)|gK*wK5uyuwK z9Xrnd8bQUt1$V4ry7F|qmbR0)5wZIoj@8M{!Dy=e*AXYCxQj?3(0_i>bF(4n3tQ|dOtVN9;OZuu2Om<3Jydm*sh0H`tIw0qF4b0tiKCNic9+%>KQEQ~*^R>{*m%+BQfRdu;o8 zcadWRcRgjFZlg5iQi)|4I=?ij<32qW`$CrLaE)E78+K+Y_f~%G-1eH{tEtTSJJg0z z{JH}>9nZIRGk-5v_L>w(N!;$EF8$a+o1*>RztLu@F8BAkaI%SO>jYDvX{i0-+J@Xm zdoH~V`qsCf?+g0@_Zach=P8p@NXnG#cKzNKdxK|(_D0?D47>CUY`YsH{5tVWC0+ND zuDJG$3PXV6Usfsr~!v(IO9id!LzY9_T-NG4>|sCHXZHet;`9lo5)V#{b9u&$Fivu1}NS&Qn_= ze>gmYtF)R4jl2|(eyJH#M;YO|tP&QvR1@s8ce?(&^&iQ9=XTWMWNBQ=x zc`V|1crbq62aA+DU`(4jnZ=1Ns0>SXT{==h5{{(~fP1v>+MvxLH3r2P>wF3SEBWBg zAUMy5L@T3%BST0U_+wxn4WsF7Q|pE8xCZj)65iFx)=bbz6NKE70LE}=sUF$820-jUaa1LOz6<6m% zwM+2S_dJ&3cG810g;4zl=!j&TYEm5vlggJfSa&=!h9sNRR;BOOwNgiwyG^QO%5q|H zsjA5;`rUtWwJ#YTJdS>xUzL#woA>6dv`#AEFR?7$l47b~l-K43OwC+V0ZWRYxVKCW zOP+y@WDrR>!M}^&N(I&zzmn`6WAxF9*;%1^{Go#F^BQV1W?(vwOgDiKPyK*wTOE}E z*$TEIZq|%Q86GtN%S)vU{f@q*79L2hUn=7;ohvSS6?BSRVtER(e;J6cNO$qHl*u4# z!IRw^Y6I?v0;k`C^0Ri3Q<1324Qo zSxe0>mGP;5Kq#|eJDBz^Qr^v+eI;zQ)$90#GH!uG6g&;9H0veXY{Mft0N26yPzQ_C zZ0F6uyEvP0_D)Yn8)QBwujLrVI2h$RVCVIHRr(d9d9)3>1G2nO!KKpdzoa@9CK1dR;k?V7b+OW5i?F?CEHXtPe#lnzqox`C2We;H5* zfN*KDaV{}AX)W3_X~!A6u9#-DmdC^f+x5N;BlDezj5`8b$qY2OX4)I=iuzHO@qEwy zI_INf{aWZRJjX-5$6RrJhG|Ms>prJuWZ$irct`eQQs?gmSA)sOorpN$bI`PHc5OHn zK|4bSBYNoWmloV+cF-z^y6=MDIy21B=_u4dr**}Ebn2QT@qM1=&AvKSISxCZ zJ`#6aO5LHRK&pdl0(5D302Q(42)`0ksU6j>RQxr;?HKNk<;$2?CDXA_ajJ7nari4X z*Y2u~UvfXrl~l2rwG6$f%2=G1%P5|`xCSw>9{);p@tBV|)WQ+ZbR}KlbL!|H{_ckf z^bU0<XK|#6CYllbld~DzI-V!@7<#}G1MY2-K+Sns*I^IS-3sc^B3OP zdEGpU|NM^J`D>x-SUg6SFS&ae8*j0$gYgNrk;p>fK+Bj}7ME%nH+x+*Lq@ZB9p)BQ zAJezNC0kb-d(fM=BZv7YsKTC8^keVzW3L{`9Iy{N3=|AlcOK-bUS>U?Yacb>y)5+( zXZ2T<>90@lP#_r-Xnk2r8a%7Sff7z7D6!qcl2{+lF}`LFv=dW*vu=Q1uD71FPicmZ zDL9Am#9}J*aA1i+9Q9?7-Lo%9NKt>BD~=IfXZ`I!!QbO{B`JO1+bAPosa~qJE&Kfc z%-eOP3|Fr++Dp|au9vhG(Py=*ydBYRB7;7PW6u1%=+oL(I@|4&NB4^*>fbT`?T8KK zwk<%@+D=BJrEgCjx-wAT;#s+OeSU`>V6ld9w@xKqegjA{{!z+lgvCiXAsr4R)j^01 zJpUt923r+WtBGgdSd%{bM7e_U7*IbbpdQ{BjLWyc7?;2lgf=mG=a}+G|Alx}nyhrP zpFkBVV2oGf16Cp7TV4Mpsfh0->cW@jR|!%-nN2lIr)gXzc;>@@Ef;GP6_f^ahQZvY zNIBp`cR{mvrq(w0$fkb&k163V`)A+vGapX8i*)k7F+*2^PNrwB6>qs*u!POR@^q#d36p1Oi!&EKPUJqykC3 z3_172K=~xAkt6m8AWSbtfooz{1KJTJbm(fYAP+}LryfLXt`BYl;0-|b@!!IUKG$Qo zzSMVnr?kOv*_rCr<%OJt_DCnGdY%)&dxq9Dv{|9lO$==7`47>8ss;Dni^M0QP zqhlKoc@x8a80t_N8VlmOJTKbqK;|&YIxH;gtoBQN4zVrz9*HUT_iOv&+VMPgeeu{g#&A($$TTjl0$23 z!XJ{VNds_HqO;}&{Z|-PgYr@^zP;*RAvbo7s(9JmKfhNhe?W>`eIP$dWVZ=gS~x2` z)Ug*{!H=YA7U7sW7{}c!xT=B0-D`sH;AtWqlA%@;%O^=ltLo1#ynn?h`AY-Qu}M=J z@bZX(fC+pX35q5n_t(fIx&)P7+>vDB<5F|KmT-WQOWs$*l4l;7clhb>FamM{ zTZ?q)34e(+h9OS2FD(CS-xrUr|PmCj7`3bT9ny9TfKY*C3P z%r^1u@1#QtJI(@sPL0?Z+hoTe`?fPG3I|#gXMTd_xHut2d}w9%p|g$V{HxTH&l|NPUE3As=`IcuRL2&dRKN*sanRHGjL*cc8~2;rEHQccJP7ls@z2O3 zeA?O)?O=>0e|wt_52Ur<_vdTJb?Rg!-3uonu1-yTHMoCo^XG5{7}zM%vrX-&1weV4 ziBk+L*&RNi8@vkseo~E#aF^KQYTEJpna`i1w0Y6ek$ zdswp$`vHY1qYqhU>ITokXO=@5V(i+=Zw{>QEbjYmICJ%Q}PX;BagR@rlZ&50k zr_z1#;4d*y)C+r~zo1U8pqoN?y3v*Mft?Iz8xox{Pz^uj^n{(LcGqO;7UqNE z^Snbe>~nFwJ|);6JWrsX6Y63I*eb<7aHBj`#rjgI3PkM>llsDiEmnaujQynk689#C z8W=BlNVAY+<&NCe7ygaE@cldK%nkmw3<^}n9)lL%#$iwC@j;QC;(Z5x<99gLzCBkV z-!SQxp2(^~w&*vh6pZ5J6%MimlI_N)J!Fk43bqIyo@lIE=|e73pQ5Mz88ezZmY$(h~Z;)qd})cHq$K z!*NjMQ%!%~Vw^ua@9d#>-e8hb*Tuj~`{R&pNG1RR<7xDawQWzD9exD#hfdKK`x$$^ zmj>z61ZLjX)sE?!kUAMVZPy#T8z@)3H!_kiDT(^?jC;@EIDVh~*NJ=W4&qApeZu)3 z-&M;n13w4kZ%#B0LTNMr73E`XV7D&2~cuVA~P10>hyGO1fGgX!#3RDbQOE4DK(b7~yd zM{b|b*R&XGY0f=|hl7cUg`AvnlEM2==ixXcp*Zp5qOUlqh{@Q4hvh^@ zCA2E}dDJp|W9|NqhQ}rKt#LGbk_d;xHvkV_*9%#3;EXhr!Q)$FPSsxe;l_>RoH&$B z0j4nfK&?v*btgy0$^X&qr}*wMiOwuaSQ*<=eD3B4H-W<};{(_kQ<%3$byZmH^l>Ap}c=O(wf)$Uu@A`TTd1Mh!8Zj3n4n{C?%v3ugVeAuoWK-_){B*o{Vd2#bc71R2_=Fqrq_@ zrP!oEWGKmu)XN7mDU&ESq(%99Hjs|V9E5#j&4AhY)?qQ0s zD_jc_l{2+py8kOAvRVji_`KUyib}$#+e0IP$N#m?W{1Z%afxoABCTLM?%82Ga($Oe z3rDH-N8O%_w4RkhR+_fN!qHCr9ib$N=zw^qj=bMdTwUu}8FNVgVc;27m5i@VN zNN!Zl-Y*n>W0t_9euh~@g^E{PK;4+_G$zj^c2F?Ay>5V4HC$IXCt>_RYLQ7~su4F$ z;RlWnszP1T3G=Evs~Eo$vr;861Obl|Ks*c%;3z4#HYC;~(9qWV6HjuEEsrVzKT7Bw z-{g2!+fi}^34|zuZg>XE5JwvF4#RAsgqgK5FnL1sAVVs@8WD4;{MvB?ZsC91iUv+j zV!G|il;;tk8?1;)#2$NKb*&S`^YE49Co0M|fUU`IQ^!{?GHGQ0j}%a!gViHwv&0;p zZu@NM*{?{o4?XVcZ{EmcFJ@z6Od_HB5Kqd^8Jw#~?*G+K-A^gbiviWIM%QuG@y6B0 zEJJEa~WPS`EyN_@6xEqZj{DVuM@eSd7x}{QR zB<%28wQC_q>fX)1*KgCby{_{GS-wt?gX6cxp<)sZyJ?j8{+&o)oJb$4-d{XIfs=LT z04DiE#Hwl;#Hgl16>yDL70VcgoU8ct+xsP?)xAu@lVer`T;Z_v&!5ZlfB2{o?t6i4 z_4zX=hIoWAn#+Ei0WARc`v6!S->dZM!j!5hYs$FeaZGEVtPG+)D`AAlWiw`tev!-N zPXX?);o~I#$jjQ+u_x4ce?3l`$5j#c9uE4%tARBFce_ztVAjCj(*V}kpLFZ7EaHjR zpR^?F&)>YUb0Yt%&y1c0utpO0N9N!Ze<(kAK=X^+(*HnU{h=D=0i@u>jP?*{QzF9q zk|JcmTZ|c?|J_CSj?WY^W2C(Uzb{@DzWmEO1@7=nI{X{UIKdAGe}64Z_e9ASOQ&2! z0(Zb{BrxW6_ipv{7~GS7f*CLdnb&sRcT6YcDrKmS|K?r6XwcE#qszac^l15LLDNWz zM%3X`B>#Q$;yS6`ZeZZq@%6VKcrAkO&b6Mv`tf7^`}FQ(!GOl4{$a_13|TvZ?opQ~ zI-s8H9Q70AqSPh-=!7N4qk3`Fb9mHio#2>_=d08u24i-GQ%a(}9c*L!NEUs>Z9HZJ zYRRMi+WSuhAcSjn`$jiuo|-xszqjKE257^+_a)BP<8UnMLK14y&~1+Des0(6PH-O9 zH`cxrUQ2k*@Cdc@g|pe1&H*EZI-F>?@!&2A>pSVO~i)-GOO!kd;=R&ax@6~}lQ{2l*+_xVS@7*We zP9g@>>HP!``y2YcLIM@far#l;>5uw8BZ)Zr>VqHqQQ!BQ2!-LZQ(z4$Q-bGvxvAd} zfR&huB`Hte@p#N<0j&HEnS@*qLatQ(Ug^Ggt*56iq|_jIxO4PP&#(KIee3-GkM!O! zZv59eR)9%Kl4Oc;M3+;HDf%}Bs}k0iCbhoAaWDC=>DRIf`1eNq00$)kD;$*+SRX`q zjgNB=^*wy}{s*4-kS{RD45OXJ*sH*bG7wY-iVEG~`;J$eOJ=G%*|592!*9-6!-!DNp5h<1KHwp>? zU-3)19L7VnF~Ii1*q(mT;!#BYO6=F|6RjqI$@nHmJ-9 zvTF{)x_rwI8MESVUcWWYW8UjcTVI#*&S%oMFd&G<(18;f6Y>uV)(BL`Z%Yb~LFave z@XK`!I?iQkfc$}c$^2Uv17YmL@<4yLb_^@3PFCR*N~aUP%j#@qDK+GPEAtseJ@&qwb&0PniJe=(W55nSE) z^9djB5APl2O&p`|%4Ek%1kpi zOK|tTTiZ5-#!xE#<6D^^4izL0I6(JLu>G1#r9T%1)o;oh{g&VOq#1um@y72u7?kk+ zr=epCFva-r%@AambVTkl4V+Y-^tmSVsW2Z5loiK&3k4cF7Sb9CN#A4GZYo{ zXjP)x`Mo7!{xj)J1^u2JQ~>UNPbNX#7WSwcPL|POV3V8&H!NE>1|dg`0rU(*GNO&F z<%6oVZ`_bC+s4|t+2JHYoZ9yMYgE)mjR72O34Yf`{PBfz>NSRH_gMRo&Wm8H4}L!+ z6FAlStCLJ}kYO9FR+g$7_G1P-)}!m7?onSwAK&n6cY5vO9_hwo>v@XvGw^G+b`1No z_9?ID;bie1gtvQA@#D;RCu&K@RkiH@r@gP)vExYAi)#IOuFZi-u|eyC7&Ht?i{`So z2IjoP@#}Q;>!`PWfHR9(HfF^JJR$~dgOD!Kk~jcmP#kMIT@e`(`9)M#ozs+j#|Can z%~O@Xky)AXmywZg{yIE-@E=7J^V%G+h>Dd4KPM_a&|bI0EqGH5o8W&m$UGL;q>sq` z@`{xa6HQWwFTa(w$INdFYQg*XQ)X@-7u&$e=T0emNb(zKIJ_d+B2vpZ z`iCjv_tW2`3f}yF|oRg_4&EpdZx#1{2VKXi+0iZ^f-*58b(^M z=u1iIilr{ns7$X)^O=ujka#bJ>?2x%Q0v)fXFjvd0h zr9)JE7GoS5r$cDmgaL^xp?fWx3?1U?&vJu9y@BUS^~Eyjrad~o7~rkmQ7E@QoTi4s zf3c~Lt99`WJ^kdv;pMw#{KRP|)1U9pzN>^*3fa|nR@ry;zFFUQ`J@tCzJu|}gj9~0 zkcInaZ-;uQ{8;vIZ1MZqI1MeH2IjgSfBLu*VCKM;Fh4dB*r;kEypQ3z9v@3%Gw&OJ{i&?Lo1<;YX9o`UkU=WFpQ8Qfaq^W-wBN`B^1(DES&PTl-@{m4^DBRRVCaFTdlTg?wDQF!!o+ z^J)Xuj_*6-@i2fz>Q)O`H}jds;o)n2({In)7X_WCNW7JK*!D9ms0%rIff717VX=aPECUu?4 z8B}JN-+fcevBTflZ@D?mhqE(z|MY~K6MYhY=r_dbT|TG!Pm{*&Z|V%kZ>k}+7vbkq z-SRqB!m2@z)2OqZDy7zIJvS8bBH24!Xr2w1OppnCsT}P2f?_x)LQCQ5VV?*+|K&Z` zMmyx6V4&ne+k)#tbb=(MhXvokHL>h-edu8H{3Z4zSWEB4Q=_RfZXg`xY1iQq-j`Q9 z9|x(KP!A>V_42@;k5rWK>N%c7Y*ku)rrc7LRktl4PKIpk1QTXM(OawYUpMF*e*9fcMtH@y@vhHc+ zp8Efd~vnPB{&mWN_Im8=jyo-;AWw-W;SWEfnv#pmsQTRC;P z+m;a#U%jWklpjw>>AOz>VX*eUWlEE+fJfe!M+(9Z zVSwuR{Cygq*9@!QJ^|yH#uLAZ_u0J*wahro(m$xqJPNw%()xlFyMgf?DNKQQb~!;|aJ6lobX_|@XPNaBO*phKP?z3sb?j5 zc8lK@++YbLQxj5pM{7)Cl{9r{D1_kh@`$!uRzW$4SJ{jkp#8x`ZFD(R^jbQTUQ04IP6RcG|9U{U zfJ8f1X*T$q9O2o+rQWKb#CALV#~&ZvC-QAO+oaBLNw;(R&dy#QbcO>QSWD>L!jl7B z-i{X#pHSMfwWB^%FA^}$)-N$ubvwcpW$s~#D zSi^m%+L5HCAcXu;J$O%z&_B)!`6OeU5NE*5B&W^>M9VC8Df)H+4J0Y0|%p zhrZA9X&rYA7aPU!yJ{8W88i#^J@%KG6fvrq${%UJzFX<9!_(_Gz%7yAYvQL^Uu_Tj z=+?0+72fe}Q8>owyXHQTU6rP{O+B_WC}&OVItld|5r9XOx_EeAYTwgz*ex8N1vrKT=m_S@F=6w=FU}Y}T?gCLx^EB)o5&2oXk8dHLp3|dt zmbb>=PDpMDs%Z@1gN7WjCd6q+7d&r1&R{{$4;GfPRbufY5VW*UrUBYDIE1(XayAL* zvED?oRL5g$-^wV{VK4=kc1lQ?A-PQq3;Ooz!kxz9v5wbwqUNkOrC3>hE|&hkVSH0R z3{GQyZ(iCOPE4GtOzY$1$*>M*>=fa zJ6>smQ9bz)_E#yXeQD@z9};DEh4#-teJ!dJ+|q7tYi@_{f97>jEqrJN2pDb{A1dj( zdRU)Zx|K6^a3ZKQ-&}@^)?2u^m~`;xqH!257W$?idnCBZu1x|8UPHFk&6cY(jQZ~S zb=w))nuYYDfa+%P^!E7?do$taw<^st*C>{F6|PEL;rcuG+o@7+FpRP=sgi}X26v1% zZAJe358aW4pRqNE7Fdrtw;;WrmiKu)?VEuSh1~KpA(N`Qn&Kwz`!hRZ#{pcHO1w$H zdh>>aBq1|GV`OzFHwZlmU29IpDf(j$2j`7I0})q5X)ZbL6xq5&&AVj5iFpm;l2Xy} z6Y!KJ2lxH@z+*?~L~1Z*@R*bj$okdHkF?d*_PQxJ2AE)Fsp$tK5Jq645ln-3A{qQzKfRiF?giqr+yx3|0sRKUc3kS9@W{xE4*gSwKX-)=Cv`KsM2j=$^`3#*UbmI zKl+kPr7Htcg10seFW)5(Nz=>8O^29ruq`8gM)fY^3O$QTcwaRKrkoGkd%dWHjgx*V zXJ=>4@2?)GA-wu6JAJTiG2157qJg%mx|c(cTCY3ARf*@wkE3qyb%^PZg(;%Gu~MQ< zK@J1LD{*DtMKpShl=@ODQP1XR9=eYE@4E+U7Q>PbopHw!KpDfiBJXe+fEAe$@4VmI z8UhPsgNNEj(hct#E+Er6+zB`l&S&TmMDy1pJ=KdeTeQs>G`rqTFZ6YFu^K$dGpdPg z4+G8W~_YH}*eP}Q*G3OoXI?mG+HnG@5X+5}_V`kwM8IvIA5Y?A7pIQF) zdw8bmETmTQMByWM2vC`mn!mwMCA2*eiqHNBx6y%D`{i}YxYiq*D)D;dV|b@mBR-kZ zUQLAOGaJ{bEo+m1n^7E$t(2kIj($Vz^K8tg@=vrcjSzxOfH7o&@Il);kK6;1hRC za5MAG#z}Y?IVFQ6RgwwH5#~KzQXc&L0#P+B+(z^5DBiJ(_>VW!F74V+O4q`1FbyHq z{Z_ib8*MJCF9T|V(pbyX<256E@3G3M=t@_#m6h_M>a`J7c_y+wSl?$Qm1MPSLCJQu zKO5_9uZKI87?uj`+t@9o<7^^v0JWnsG=nu(QeM<`n-uFJec0PA?%%Nu1}*8^2OXBm z+kn2_K4zE*1ZQVY)mO1j8o%=Bavnc(+ZC*g`Cgt)Jv7bn*(ku=g%O2oW`&znB73H) z9G7m@{TM&WRd|zRYnFa;O`fTg(_pyA6+8BWM}SBeW(_y=^Cu@maEqqu=cg#~X18f} zjL3o+W&rbUNK1|r;T{w02M4#15XUwDUGK`Ro@e;?8~P0Qt*9YVR%stGVu!nRiJBT* zf}IcKePr7=ON8IN-4Gz@>is5RYAg832ZNtQ{3aoN0+k^KRUe900QT#`UY-ybRzcQu zC%y)UN?4p`#xVRWgu$2`*ypQ8Z_UqjPbv$N8%LOt9C!ixK&@GAOTl2R8jdG!z*DVW z;TYNMyL>}Tz&@Mm_*UDNe(G@(w~Uv$q0(Y@BWg!eI8En@^i%s|s@bPN7+=0@oT6Lb z;yx!S6DiE+6weoivu%U=1%~rKx?-DFz^@whcF4w2bC- z-}B?ikMlk@XT;48h0Xzoqk)sr0aWiwbf#%UG?Z*iyG}5djF)I7c$u{fYYh(f(n~AX zK}m8A8^~q~JrtywgBw0k+G{n!t1c-fm2eryyFi3BXO>zi6IG4dp4PotzjcRi+5t{X z^4dJH{aPiwv;A5yd_r|Ghn>b%2T|*BIDpj3)4O>ojz-l zE(fzrwzF(#NM$b1!1Y-O9T$#b;?L*<_Iyt??Z)%yvvKZr_6~`#A}oTvs44{1{GYw~ z=I8@Ms!fC@_tk89QGy6}X7Ly)vc;eX+Ev@A)??((4m|ME`zd_;mnxN82vWNe|0dPM zc3WO(OC)=3lj|2^(Sa4(z^Ko(ydTl9_LLCWB@s@PK326RIvjAz)PB3ZPnhBUX_DgX zI5wZFgtOT_So0VNLI0Z)O}*+2^ReRt*Pa+bq#zsCphWGd>`&H8!toT-$b`!?k`cnY z>N!p7p5|4TaZK}kb{m$yf1bc&t&tfUF_HZc{Pl*j@5zFfV4qZ$v94n?Jd*XF)xB40 z(}BiF7GNKBL+RZ96t3MQ`o-~t@YC|#3q=R~$EI6}L@+aN8|$|1sXxQci`QB9o>$8o5s zfUVxza1-6pp~R5$8NrVEn>spnQ1bLP%?Tt{Bf95M81e{l#p66C&Dx=8w?HQHTOTaA zHQhAP)%Ru&7PB)6*M9$8U5o9eJ=-(gv*l11*z;+DJ!|_caDxvnP~W!|^%8t@d(ZJ4 zW(Utxz&#+?_vQRQ>%Q-Yid^ufpsbq4-+HF^WmBQSHGYy0RM(V`B4{|#-y3L)A02VB zQx2*~T-pQTkFXHdV*ym?j`F#zNi|^Axg^y*g<}-B4`;A>{h(fy`jiMr|38`1-*x(r zOa~JSDf5&}(z;3YhCZpY64@=B@`Q0$CdtPBM7@o9P-(8cciPc!;lvQqeE%QXm~CH> zUfP}deKHZh8zp`g@a=~BbL6J;9KZg}%n}y~rUhFcc1sq8puTx6sKMejo_|*cxt@`q z_CxKG@xLJPyrQdzXTzB?*c`49M`T<<>HO(ZFs+*W?tph#H74VJP@@~0n}Kbmq% z73>TB=NvBLy?|f+V-Ad^S)WL}uP||JTgzvLQE;KJq>2Aba+hBicBgFuZ!li}On@al zv`uQoN5{|ZuCA(|L z`FF?cH}z*no)y90csd>bT-~;59ehlQ>-ikp*8c>y|M2wgq{`XV6Z(w#l??+JLc zxq;sX83e0?%N#d2_*vkX>gK+3*?c!9|D6y84?5ibOZ}_$Ru_g0)5$vuaD6Ck{;YlA zezkC-V=L|RpTfm$ogmTU`2T(rke9c^a7=k${;#Qxsg4^mEk(_9f^PJ*Po#N_c!zf0 z-IVGaWg^BzvS-gQzMQ^^kK^0+9k@*)tZ&KtX;PxK^>XUBl+iKf=bQg>;&ac&ndb_Z zy@58&$G6Oxr{q4rZ@~Yz%xQS$dH(qqwM(M;xjnh#H6n9feD7A*fqosEK9lDYnnKyL;UNBQFgkk*1V*S9B5kGSL)|n2>dtki zRRwp1ynni>fA#&c)IF|EF=REuU8KG;s1Y4K)2;mq`k1!vqQ=aLdS9IA%G)wBl z%(5$67HfUIcrSyT4IV1)^#Jwy_RN)xdUq@ZNw$P?DAt}sK9*L&N^T3sdoCB;E_yn@ ztHG26INl?B9~!;U-yJP@jpBg&Dfm1s!eALlc)Jf@Lh!8Zf@@j37FW+~YAgR?~J7SL)D4WZq}VehO?dr@XCBzuxJ2StRG_OQ%B2O~^>etJ@9 zw%0ZN`7<*Uv%o#vI3{peWIFy8)Op ze=`wdxs7RpnY9QX_oOE~GmS8lZ3XC=Na&+{1AeeEkn%4IeyiDd=629AO1N#M!d8i< zUegHLk(rjn+E9bNF!t2;D)W{{wYcYJ81>&#@P6iV)$A3t4BlJ180^YPeI|1kXzN45 za}qz~lXi(UPH=;z?CZ$Ump`lj@?`8NPHAl0h~mAd8;V48cK+Ty%_8d03dut_C>n!oX&dP>SDOvQ9S}A+#|_tJ-iThke8orG30m;Xr#ca)!xl=8Pc!+ zSh-?RGn*wLBZ&V@1+ACG643~Oc?KBLR|uJyJIF|6VO({GTHIiGU){>MQi<#)xT zWs{;=+C7E5Oguhj&sMN6<(DCt8#il<-zQ{y`mWaL#8RI{>iC_;zpaE-%6@@+UlS4M zG^?8>m#*q8dr*BeKo1d%pLUQAHiYDVlajDJ-D?h($9)oU7Qq*rK-|BaDT%ik$ z_xaD9F!1w4On;;6LaO0K#%t_K2_#V1H`(EgI>0w4_*eRD@4fXeb{&2xDh26O2rJ{9 z`qz#;a2*@E;^?{K zUHN4^&3T<}G&*pu1i6xFHle9WB}l74#HzNl4G5`&ehR2RdUrCqqSnG5S0A9Ztg&r$ zt?s+d4V@^3MX@&*wzzp^mCASbV)K5fr}g(^>tp3m3e7j1P4yc9cOIjv4GOi}c$6}i zU?FA(QpJlKqtxn59-t}*rpd;kO{APR-J5y227EtnYLhWJtU!+?W)PKJht;q{j&vvc zA{&)zv*|pBH*g4?Z?1UoB^(aFQa=}O>XmytRzHIeQQ@G`(8|o2S<+>0+~U}u^6T2h z73O0p7(BnQQI;QK*UOgQ+OZ?_!|aIdxgaHR7%uP6!om1jss3Eo@~0Yy)|Dn*oWVVm z-VC;fk_e{R-WRlIUT&^~w6E$thC>~Mh+!F4$4)~|p9M!<*QvjhVYC}bsMU9>bzdVa z8DuXO>2bea=nO+SWGRd@_Gnj?2{&%|mH^PW-JBCPT_3JKRNiQ8oFG&PAN~Kex zrp7g4g1}}4ni))_84!Vv6fA$o09jzzO3#FqJ@b(ZrG6g)p zNT1fjA;!MYi*+Z&_c2xWcrvL{JKs?s`+cryz{u4AeB%#r9z)^=3Z78{!rF_=a4QU$ z76`39P>1kZQ0ey^Cfotn7AWa7CkHz_E1seB0QHt{fVhB(3C=7gG&V#_y~{~;b3E{c z?^%s3b@{Cm)!mq@e2%Nz#-+>PL)wFBfxl@Be68Gus-czb0X>)y!w#(y|Ey_e?fjgT z(P+9#$cnCjAe-f5Hsas{7)R8l`5f3W$F&hUL%95!&Jv4CoFB5=Hw&7d^ZiEiyhS&0 zmaat4RDR(o6$FIYgE1e;r)%iTPsu%<-n7JhY)7=757$bRg`;&wyKfKqb_2!40vB*1^0o_}BSzEMW?fv9$`CIZHkpl&sA))B-ZEgFtz2!NR>Hc)FwKm6dvtK1 z1Hz${dQT-lRI`N3|3hblh(-?@a%?A1IV)-gO?5Ei@gB+1xE_o~R%Q)sY7+^48DlWj zv7e=_5Vfoqn0r#8uxjOWQoCGl%X2&aqmy6iJ8egMo}m?Tl5#QlzRIrVo$bfq*|lBl z#)hie$s}TVr-k#n6bW&UC~x5TjUprF-rwMPyElz6<9?G}Z{_FnyrL#i%O0{(YYXUR z5|AHSQp!6JpCF}w2}m$iO_UDZU+EPM0*5jUxNm0dVI8;^4(dT;H0TV7aG=(}m3$fN zwTmNaeYMcp*_^-=L7x#|>tyB*&LX@{Z0uXXH#<`!yV^h!_0Cq{NE(vUX>Zazm>JQ- zd`mFcF*hb^%#3Z)-J*nA8RX2~bXI=HLH&jnY#ccJVJH4}E#B6g-wcBx-x8yYuuGUO zfnHAQcv}@$x`2bVuANMf1a)*n>eK-&I)soi5oO$Czd4+1UQ$nVy5}i4&(yt>T6ZRF z4AlGw@SbQo{#cxNLA;h9T<}R+OcRDmRJ8)t?08bL2FcaSJ={+n`n2Z10g0uBp+j6P z{-C2c`v6#~aMr2PuepDerzvTdq+l%^jGva`O5T+Aj|FOMQyULWondv1C7Oey3d8@Y zY}#O6MpnA)gjWww*8me8eIIX0%-%s=T+fqPIVQ+tUQy5p!9%@>pgtuPGf?BL{-bNT z8aS8%L_iAjI3uP`yaOk0zjK0(!E(+BGa^))BQ}8u&h1f3b0d&9eU@oMAc1Q;!G|hJ z+LECWT@UFTq15SVQQfyOn5juW8)Y((AoSYV5UBR?nnTO*W&wuW-_CFB&s;_63eO?IO)Tls9Y6-i<5OG#7>8Q3rs;8@ z`cK=pb&5Fnd7;s=4W#=4m3xv~8T^Az3>%%tUJi4(NcS34eXK2zZ}1n5|BA0!n&!K! zjjsiUGAbcegDVPzmEW7ef=Z>^!fI%dgsWrv?wFO9sJw4_l*#765|a-Y=&qySaM1~zO4wFz{rCUqm(_X$635y zN(gsS&0Rq|71{3u@e7jIba`fCl9An)sqb39jEUZLi7+2)9{H7{617eF<@&814y>xz zx^|OP^dK3fJy5td;I7Wc^ESqD`=T}2z^GNjl*nln>Rbr96We~`Oez$4j`;h za0Zvb#ACZL_^l4>Tk>Zc2;s)kc3S7o=LFdtfd0$4;U5`uu&e#j++p05ffT|w<+z&q zE=N_+xbRjTEvSTPZR0w4wvCc$j#s#SeUlnF@><>eq0ZTz{z}@l8bRjue=a$S<&)n^ zD({xhfPVWQ=5#&Zg`sdFzO@y7n90951sd(4& z8Ll-=qZ=s=gB7Sk5!lWQXgEtoY-?V}`9p(A5U93kMo8X+M8^tIup#QvwzYutEf9LT zM_4mh>ZLDp2z_qCRlv~cAf*zjY1M*QKbP)ghYf0vPi?k$tIr;jdPCb88W$yBtuaRw zI5kq(nuRgNBRv{MbHB(hI`P4CiRFpTEn0o8IW5Ea#&gJXLE+MP%M&==bp2D$~{Wbr4Q*qerTtsE_CCySgsxL@2t~~nh{}gjm1vO z_U=u9Zkga)k>(V6;|=9*4>4n#ZUIYd2N76`B9amlrpai88f>#_})0&3L0 z=-r5{54^sUaup^8hqjcnDOk^7HwPIf)AA355_#yE?u1u~mA`D2jt4*f)6^cYCqM-_ zC~Kem)f)53I;w=q|I~xjQg|enkWGpmDo07SkSd3&jxR<7``nKJ4Z0}8p>F#X#}^kZ zu5rGVNc#D;N$vdX8n|F1vMT-B<;M~?siZEi8@KJKXR3qWWpDVrX1+`kHRn85WGP4r z2stB0_E&0Z>J56gYPicUt)CwmXup>rp&OA(c4E^0HWjs#P=fF`lk}jHx8)HjXrn}L zv$@-flyvDwt}eIcFQlSdZhHh61KwAO$h8Ah8JLm3xgMV|4FgJmqr$b}w2ewQSijVH zSqv6S*jU_b#$D-E8)#chl%;qjcC#%wc{ztr!F1H#f^823b2H^+^@NwYRS4ErS# zPst#*5t3h}PLW7ilGJx0z}~!;6Q?t_Kgw&UGTppBY%Q6FiE)8k7IIO`J(vAd3Jh{@ z{Uc#D273g0B6w-M7{+|YU-8)a*kKS&@;nC#L~yh^=@}Y6BqN%pb(CL_WJ|lCr4%5P z5KOWhDA6Hn2M8YZf)nPry=eW%`kX#-Z(v(9ZYQ?7qEy`AbxmvMuMcDCtAl%KxuN`w zWwgg};6P2>sWgb#J&}8HM*E9lVeHKK&KVUvgf}Us9UnuW3h~58lVJkT(5ozbYS$3*|iB>PTh7v;9r^v7Ee5 zf7?=jIc;1hBfp*YEq?peSJU%XUYDoYbExYpe;!VW1C^`qfri~+fAFi*!_s#vVaklR; z`(6!hTL;+h)<=ELb&Rckggw-y@7@Ra^>3ho@1CVY zUpn-mEWqKgSf3a2FrmqaF!Tf4O?4SzF1?A~xVT!@7MV_Zcd7vkB`iW*K+{6BxU{g^Lbrvdae!oo zhy)rE%6Spdb`Z@Bu?g~nIz389}qrAb{(d{`<;m))+dPhs}HEdAS^N)fUL(- z78#8(BlVKTDH7A6*XP_{jGyHj8{H_RQP7&(JbBwPD$Sr`jp!VFd*SB z^KWDGirO3vW7z92#+NvMBU9EJhXQ@bb0`tK*&4EW=6Im3!*QIK^*-qu=J8Ga1tK^e z5v=or*S|CPG<0!;YkzFzBJn1T8#_p}M01khmfw9)%JcG{pd0^mwgv2nw+~5l1F{VC`9mGFl&O)EZqx?;1 z?Ej6OHW7|IXYjZ5=0mR??IRM`^xa&-i}P+i7q(Gy?!q+o<_ym3Ief$HTNWgk$YhRl z!dB*MG}qP57uJ92uIYvK-^CS#II>|WWZH>(FaXZ$rY+#dg+!BbDc~SV_}`z?*kt@# zI!prev-i9&ED2%<6U{@~J48aA12gAzmN*{-crDKwETuQ#2juJa!`|08DEuoyC9>Mi zDh!FM+$X)Z#n4$mm=7jhuFJ{`r(B|%*`6KIP=7Hu1XsCfuhZf?a4{k(iK(!9#y|k| zU6INN^^J4lF=GNM3}X*5s&oK|nM#ilIBG<8RN^wurH(G~7(?8g(3K#uhHum%3}fjq z6D4W~a9l)V7U1079_=DDKIjwYH9d*w2V8HdehyzeUB_vKT9*D>ErBD+90zoS+ ze?n^74$ZZ53pnsl9KA#w13v55bT7$rjW!_txetNP^&FgOt-(Wq$aNf2E~XdfEJ`T{ z!7I-JPN=8Xb_d3so{1}!#06q@YTTAh$edo2Lu}+Ip^g$4Q_E}VIWN>>`y)WuDKGre zi%$px;Rr-8wngE$B;;bScaR7n^6DX&5|Q4FSax77rNf+bkiQY=0w8I7E` zU>yKM7padc2*0O7MCN4#)nSQ@Qed1ik?-^w83D@UXbcwdx$p!}NBTp8Yea3#Oj7E{ z*r})Y-MkH*SIEqjG!K^M39cz)Qc5R}r@?oOM3f8<4BdI`1k&(SBYdrFgsE$9k=H*V zUg}9=h;zye$253o6*pqOfFl8im4)9{KD^CwEJYkXgOBEfkQTxktyv=OYs8mU+S!+9 zwcx(ErG}O|ao@O-((X6F3w5r*+7PlnmlDmLd+=fTR?&O{6LqEEtm2uem`h2>ngS6I zoM|oC7Fmf1!~5*{5COEds3f9*W79zZGbB*qiD?x7nj|wG8N5B>H>)GS*!mlgOX=l< zZ_}wOj1kl|BPN*{$aRM{+BmOCDb(qAj+65F8|6Odxl|f+XnnykDNF6=KFs3Ei~!-- zl^&dHZS=;z#P=*gmObNF78uA;iF!$}&&J2$jN=(TH;#86PaHQN{}R^{b;gSNW8UEH ztbc0wE`~UUu>RKxLYWiMFpfmCZMu0C6!vK6>16@`Mi`a|?`qkVeEUL=UK|p4udts8 z#YPTo?2vqm1hHGbKfom~tWFyNdFS@RB*OH5f7iILF2|Q9lDE;}2y2#ky_7k^PJc54 zkSYn%Nkmwwp5CIOyx=_leC$g^q+!8h`!xS9CFKinrv+H3-;N`$UVMNx^=SqljJK)g zkkI5hL2{XmLl`%Zo_u^G0>^PE>HDrRY_!xrd{4|)CX|^l8{B0!P7Cc|KI*`>#>ip+ zXUMvh$8v=_OahiFK$x(u5}7$rQR15x7I?&>=+n5cu9Z+?N|zA}DL`7Pl{7?}O4k zLXQ(#YJX`m^xN!@QQ#_biBuMk0(D_1DLyYoJSXkH33e#2i$4HZn#uLhL(-|eP$#AZ zLhJCy1sbdj!y?{0e+EQSwAg;@hqe_M2O=b{*jGT1d7hQIuy>KzN_y$TlE-j{oXP?s?kq$@6uJFAsE5p* zIkGMt!qll`D6{rk+>Ei)Of&Aji_Bs>1a+q~+i7gD-8nKw!dtrS6tMJcb|Fn0LM{{*_cG)PeODb6lFf2g20q>#w(7nf930|14`-(;ZlAI#GB1V;-opJHD1D z5z0JPZ7w42%i5HdC&vAP&{;Ek*Z&%QSfV}DYx;2b55m=SzdCpQ2<&}3vPJ|C zt&2(|sQchPWPkP$_znq&OrCCB2i{rv4szQILoYt}H7&p;L=(y`w6!>nB@(8vAWKKG zUa5x`B+BkWhq|yGnstljU8Q-ya-E1!j4=oZVyRqNuE#RgaLQ6I*6d3{;OFTM3o z3+tcq8tBxw8h<~WeV;ss;`z02*DG^K*oVj8C;q*Hb592hV18b!=a&+vL&ANzr(EtZ z0vO`&4gVn@dEfZco{8J~T>6q&=}5IiUDdC}8-c+3u~2|{3HCg`s|zSExP`ei|0ezU znGq;Oq>_pHtV~aOqNR}L+*-(O88M=WkZ1EEA>F9{I}rJme*EhE+ao>Mb18eIr$gq; zeL`7~p5VFP*2=uZw>`lTkF4*=RWHno|nh)7q0(%!1Jqr%LN$Auk?+7^{_UO z8Hjz0WT}H|lP;(C+FgQUU%wWT_D=paM70jbd|~ga1LM|^=OJ}0g|$U<-}g|@FIYJD zg?DWpt}Uiz7|JSl-;*r+`3{3?4W4~#unYadx17xzgyFz?a(aILhp&IyANKX>|H}H` z_r6q){y$y+D{U>6eP4Kg{q_H^7?uXH_rA0k?z2F!%%SZc62Ao3S{=Uz%zGE>9ypiU z_$6WAL_cH_uFZj5&wC-XJ?*X`hPAqv>eyGNSAJifLtr}u5&V*H-?i5(zc21zef`tn tu_&=#2IOPtR7xMrB002ovPDHLkV1o7s)|mhR literal 0 HcmV?d00001 diff --git a/docs_edit/assets/img/docs/query-plan-mini.png b/docs_edit/assets/img/docs/query-plan-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..e73e0e179210e5c03a75dce8e1a5ac14d3743fc6 GIT binary patch literal 125179 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 z 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

-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 z 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 z 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

7{f$~W0V9-DVYOcd`$#xNGpXbGIvt<$#( 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 M=9Xr)CLZy>1C_c>WB>pF literal 0 HcmV?d00001 diff --git a/docs_edit/assets/img/reliabilitythrough.png b/docs_edit/assets/img/reliabilitythrough.png new file mode 100644 index 0000000000000000000000000000000000000000..91d554809bc2d69c0bfe8891a62c1726cc8c4048 GIT binary patch literal 41362 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

S}6yEtno6~NWl+FxEh$ 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 literal 0 HcmV?d00001 diff --git a/docs_edit/assets/img/swarmbanner.png b/docs_edit/assets/img/swarmbanner.png new file mode 100644 index 0000000000000000000000000000000000000000..f88646db6b47510d726e1d594ae03d5be842a593 GIT binary patch literal 289792 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 hBkX+2+PJaj#CvC}3t&aH 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%0Ax!B&8WFsy*bdCPOO3u^E1dCxq7PB$BnMc7|M0%( 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 WBx{56F6yXY4jXUDcq=k)({##+`cMIr}>YQyhOb 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%0AajoX3^Ik?C|z`6z?)Fkd_Op<#`z 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%0Aliw2Js!cBLk}`ENu?=Vo|o*oH%n zXBf1grsOQm?Kr1ruK}tT1_exPRhMWJnAS-?iUeh;NDKQPS^6CsDo`|Kxw&M)Veph^ z1xG5jQG1d}c(%;54g4OqC)E-#*WRPAO{qHKFQSc;;l8Q&aPb=#(Ix0e#EL3mW%uz^ z549Li%cjafFWUK{zPpt{o^Z<^EloCsEZC4HQf$_@C zL9cH$z#m7PShC6r>_;1AD+`L2pDAN_ym4bpP`Oo1PB!vvXJbM>cDNc~DREy(Kfv3!u`QK(IZT`H-4-qagL~yzRM}e=*1=L-b$IZ$$mrY!)pIYs_9enzM8|+T%gmT+yQQ!#x>95#CVN@A~}HnG==Lp*!Zl64p5uz z_VLr_F>o00iltFZfo2QCd-{!1To9n)+pLwq1aOOnZXT?&V%P5$Ww8OkuTrd$sx_bw zp}?1OUZvuXc6*mGPDi!3?=9OqTh5$xav;VeUHvt4vXpHmt+EK-dl5Y5y6dC;k=-IK zcH&=VB8U8{{KMd=RPz<{TJfK_(a628$J_HEPmZ>?HnYwgYHGB^c7?S~@kUL{K#Be> zP1uOkGcm0qT=1DUe2G)*24;)*D2%=Gc*&n6L-jfgj%+1Sepxj8f6SjQU#@eqtZ^po z8zDxra7H{H5Eoe2Z>tWKvstOl9LRmRz2GC^htpt& zXmjCqNkGUEMpmARr%F1H)d$7Q{`*fp@o}WhB(Q-4v-Xoi%>wnycV?er%(>G8)&+U- zdMy%_32DX|DbQkug=;E_&0PKS=kg2{g4{0keL~cT^aA$3YH$WU)&nNr7aRl`qFVg3 za#N6=3{jn#4mGo?CU12KiB=}{zh_`KHs;oyVC)--O{eqf8`dH}G>ELNS))22cKUd0 zSr%sxg;Yi%XOLr|+k zobsOe4Htdr*^TK7{>B1WM11-TORqhK>jK}31>9CaQ)lL$@MFehwDVx_?(z7D;1aKu~_5tz5^+tND;vO$i8kZT6n~>^ejQDOAMjFnM(> z3Be(&KS9h7WRO!-#u&jy_58)U9OcrC8sj~=gI~D*P1AXkX1Fox5<6N{Q!?#no}M}V zB5!s$snCFA-6{GWde!h5i$$4-anVMBaoj*A3)Pl}R-e1wK2m|??p2L65yy5&S`hsx!Vm0~7qVtDgG;5Gsk z4w6eIW=%UpEheJ;BEmt{_FfIIv(m0#Js}zVi5<9UwTQ|RnB7R!cV#dvhNwEQzjtUH z-~i`cU9h-=B2{m8j92JikYskcr`=OS(8U`;!=JSQ$+m zthTNyDjPcp4a^$w(90<%)O@>73o*^jO5pY3v|40Gc*iVHr^-L#_OovhO8VA>IT!>GppQQKulK%*hd>=5bg5#~QXH`wK8SxFfyM>j?`f)ap!2gzA1MBL z@b++I`g5>rn?SSTFDvoR5bj^IF&fAH@*^yVdj75|^{tAs3<*iLd{?$JuJ>=Z9EZVw zemw%ETMf*Ht8@ZKUx~EJwCk^(I5aOf8ejKAPQA&QE~NO3QIW{Usq*Ui=RE$+j3crC zx+*7t3eirs!iGn&@(D58RoGRG{8k=hN)NK)_$yQQwzW>+N9t`zI-_0P)@F#)oaz=0 zgt%Xn#${b~*moUVdGYsHp%w|;68u$O5*3S~-`IOb>e zQd`N4E{27RrN0R5@17xqnoNZHZ#ACcE%*Ysw8&FO=KMD4t?jU`f~<_>6&tP8Ya>kmks+?&NTraoRC#d%8J&c2yoD>ze@ivNN~zD;)`v zLCG-6GTGJw9Aq!pjK7ReHa!mQ5kT~kw7N33SMsT7sKS44AFcZmeZw|e6_xZg9~&)` z@kng~wLhsOlLpEAIU z7HH2xgeqXx=JHiX;Z!rs4`F_mh2%(Bxp7g?)~0QHc4Et?D?8e+4u!ra(Hx>?%73k| z$P_m%42OWNwB1!=O_@XO+67_do?T1hTXv2Yf{#*O4|V9MVv%}zg1rT}L|VOX+!s-7 zcw!LcdIYH3Jy?g4sx6zRS7X9J@M)x5+q^ zb7eGQNES%jr#V9CXSKqd@M?t>wU(_3o8@#gFMg}@+AooTTQT2&upgDTN3UH|meUv3 zvrGxKsGS%!s<(5q)CTywK1K$IJ`Xo`yWrVn_4bhvTXmbBK8B~YNu*AI$TXZ~kYTx1 z|Lba-u~#h|(fWI%K_L1h&&ms>^_!Tf3ohnfw0m-G&~1ol)l(f_H3h^FSN;q;Q++YH zCSp)A{Ao8ju!xTYd&cBI zu@8jjzI2AQOjTM)xqk}OK${X`h(DKUL6 z@|kp>V~OQ-WiR1w6lhzMwksG=v3O8DiAp_(fJEu~FCJ?Q(yZMP@|%dC_I?v`>wd*7o;N>l3XZ*;Uy{SyJb3g68MmA)_X`Dsj~=tb<1bg=yH8LH^ShHlKDnTl-!8bB{4xSy?vw2ZxkjuDRM+ zC3TntAC;NpWxgdz2!LLXffbY2aBbc^u+##$z-Ged{5Px$d3o48MW4AJxp@4jWl zrKV*IXkTJo51@=Z0ap}42+SQJG=zy{B za@0fU#ny!9fs6mHuV0Yd9s6eP3V1T~ydm*d!$*dcI~U5!8I$2G<6=3$Z%yXk5f*46 zplia|<^E|uhjny6`$VLM9D;7tyLna)m)12o&Cu<6PFW>^lDot+lO#WyCLh=-u)Xo! z)j24IEm0ovcO>o*^>ISU@T(9&gpTw)4*HXmRkhfp{?z@#i>{?7rW!5^RU%WxLJE}@ zS?fXWZ$yxtb}UZmj;kIJaLqAr4Y1TYS|D00!R)I$h3)LIR^Yqc2W@xg z5$?5hkl5)3qd6<_ul}%+st0g(*Pjxbxy73kH8za)FDVX8uAQ%4xEb9fo2~bIKK}RW zX-6+vO@=lrqYnMoc^~=LF}%!j-#!RxRs|z6(k>4fznod|(2uCIbkv59>RAWXvD%Bk zl{sQG|76+6^K0M9#mL+~lxK0Cvv*d0$HzH|!&WJOPK=Hh8_Xp+$Bw!qymU)TMdVWx z-i@Rb?WRpf}-$ooz=;d z76)ZM<+*PSHx_p;NuRQ+2u7%BB5!wf8Kl;M-VOQ)=G08vnjbY=yoUEsxd=OaDJn+| zsUEgK%dmZGTK9-I9b8N5)#|9K`{~fEFoqmh$Bwvq>$*=T%Wef|$FC1?vzlKDJZvXv zK@kb{WoiY9@;||CPYcP1)~=oy1#UEQ=@iY z&N_5{KklI}6P}IE<0aQ!&VF54J39bP94{=8%hlVZyS*21(+6>UQ6U}*(0lfwhT#-$ z;g+9QqSwkywrfCX3T@CnJuh^Z6nJxVt9c$}jhV&s5suJMZ#bL}T8KSF`%#dW{@Sld)>LC!5IFE}!dv&?TsFx?TNI=H))jCR!E3VQ?E7x{VK@d+4L#uM zj`%E2Jwa_mJtKR6S=`yth*Y!~oNt}qtGm0>^9jI)XX#cV0=6SpCIW3rd`%h1l$ELQ z;Ota<38Jqx1rHv>u5N*6*Jkd4y{Rau=V4c+M_YzU+#kd=KDkZI{guS!i9ESs4X_y~6XJNpmY0 zZ<_qTl7-+#y(Jhye7wP1YYh`8>a^BlOb@oQj-bg zx=PRgBf=y4K6kyj0K2wxHWkTVr;0l2yg+^rsOmXBeaENb@QW8XbSQB`ON);e4S2){ zRxbkqI1Yu%wKwx00HM>ET2P>s-K%74hm1*dNz?+KYTo=~ zqh$Gc(>b!Xw66=WC4p!eMf;FpTUs*>%cM{qS=?`%wU$&wbNAk%x`n$grX(a7ECq^% zuPmI@)t=&@W!o8hexJ`BZb?(^!(BJW8w-KyfDsF>cVFIb_;%o@gke4WJr(#X`oIGbzp+(*j!O_J zeDjb>VgFTFLV5OYctBf~7fA)N=?Y@Ry>9zyvt3r@_}LZ_Iw5c9`2MgT7{tVSBX+Xl z=Olp10f$5M?FY(LJBYM3nos8(d3Pufh4q%_Rk@d<^9t$>-0MK1VHjuJtOgs(ZT)Fo zP+)G#nXT!)DFjG_w}L1Ak`=6sh94op$;Cq*mb?23yVh1BNXM~tk2l-<{L!x#*`eg5 za|#)fo73wWe&uL#u3S<-$0>_p534wE+VAtYQuM2K#I#cSo_d(6pm>YOkY`h_Lr!;e z2W39X=~Y07$OtXAO9JCtuRo%g`?~$6hr8F_=cW2H$nv@YuQQG9c=95fB>Nm1AtA!11gh(Y!^VE25J#RUT_a=N{4J zPnSDQc;OSHk{TRP%XqkzWW>6W#ZfF|$Jq-^YB19DPrQ4$PCAl&93{p6W9BmS*>{)) z&*8~=JDFCI+~T)xPISXe;(_8bKm61X%nGY(4bQ&Q1Rg7s&S?l-m2?(kc}Vgsd5>0* z%#rzATdeV$_`y?%Auk~*37*gJC1v_~^MQ}|OzkIqsvEQa--V&m=?ecmdSy$~9gz)D{IVqATt z2G_ux`Q9yP!W&|vZ!`ZxO<0`_S4n;$ulMn6B+s8Ux|5k z`c*n_Ty@)MA`W(6Lb*mXV7b3q1SXrkYecFg1Yl>}^pYaC1ks0*Ygp|0u;cOO8YJjcAt9 zw+C^fr)}ect0|-3Nqn1o|G}Wxt^r;?DY$wG`)Y6<0KtyAE6q7u9ad&nm44fq^-mz{ zh=cTMD=2GlwDy`claslPSyuCj!nR&|ma818@f+J9L=u|_7Zj-VPtQ%6QW-s{WtPVV zD8FCu^Lj^+nf88cgAl>CJzq|MT2j5*q5_`?L31tdi>L$W(qug_F2Y&q_N?uJIukm* zqSbM!r>mnxthFpbIKy7nCTsbtAy(zq zPiqnpM{SWitD&KU1Yo>f9c3h7QkeBXU}HujA1HqduvK?4!?VOq-xosLh`HK(HhkMhp@Vw?G> z+h<=5VP$JByipQL@jCD!pX{|(?P_Wj8CwIiP5S2T32adwp|nq~0>vw`?dNDoZ8t-hbiepwEqob8MDQLz@a#Qt3;KD*smi zYy*@09-t5l@y8a%zSSyx&9gG~s`}_Iv0B{^vMQF(DzNLrda|-?6|2S*V$skWl@pQZ zs+3}t(#yx&xmlFIM0g#OVUf_P39wl1c3B_q>-b91;O_}BR^F^hkW4llrB_5!MOs)n z-!CSS-K$LqdT?`-`o+?4PArFdQc+4uiw9+75Ip~`AjKb9GZ<%zE&)mP;{F_UQZ zI2*_BxLBc9dd0Ea$M&km`g#$^iXdZk^UCevk?MNXE)Zj0Iqy~qu;~6U&cW>hvC(KW z8jVJy(P%UpjYgyKTfvHiLS9sZMJ3jL-NLw+jB;!YT&;HhIqsjLF*1^6R+kwjE5a+P z1CWPw%a8kG(km(;R+~5Wdh#o}42$F!@}mMQx^O+Q7M%J zfiy|=73bGf4s&5pX3admU3MqTq#DZdoX?9-K%OoB12h_qMx)VaG#ZUYqtR$I8ovod zA`JVT=nAXM+4#0}j~EHDxpsZ%6l7zJ3$76TN_$VfWx~tHV>woD`7Otr@y68J;L69* z-B(3?#du)eAe_&$YGRcZ$*^p|28mV29=n;@-PsMLdt*Br((AI1mP)Y|X%=11c>iO|;yrzC8H}fIC$6CFW`#Q$jCE<#sAfqx_XI(T^xh#9 zA+!W(2_z)B=id9??>XoDv7f#7`m@)b&s<}UG1gq4wKY}fs2@-R0025QRV5t&;94^P z0Gz*0`OioJW_t9W+YMJ$Lnr`1bNhc^KtN{py?+LQP#qOTK=l~w-ajwbY!oyU0D!s# znk#b(0QrxvYDx<4eSn9AVRu%wdajrs%Gbyk$O7)x8IHXA9+^`6WBZW`KP$#;i~Fw( z?NvV^eDiFK#ed?}n}j6&$FWI@--ojdSIkZ##BMTrdF=HXulAB#&7p@@0)M@DzK-6( zcrh?6os_75CWfU#HO1J1HB24Tz8&P^GYQsC6LfRl#8RTbGUnS}&@QO9CIeaHRFvhi zC=P2LH7FG%lm_utY^fui?JH_fS^Z}v2P3{YKwQFaIPBv~2qYb; zb3ExB(}d{55l9Fup+>LDsL6iz$A=2NswL7ZlmoN>sx+jd`;Zr_&P*D{UBWFHi7&0; z@8{=JFOBjy9RQzTS7InZbvzf%T2}vG^(9(v9n&REEz(dBw9}Dw7(E{BvEe^mh;ul= zPkrk8fCjaK@Gyv&NsZvD|Ejz2xCZjoSV_J%Bui`-`(ZxOc~^}<#Fi3D5hNB|gCo6j zyBu-yDER-)>3>g-$k1FvpdzL*-5zG5fpmm)*(scqw8K9puD1LoanWQ8ZiB^15$!I< z;pd@u9unkqf*s(xke0O?!?!_oRj_0JiZblgi7zhGA>F@!_V?FzR4}UNN*()Pdz<4m z`n#ohup!~h`XI-}p(QY3Qh!m7NJxW22suXw{vGH(3Hvd`$Sv^UQ5t-H%~T4Zzd}Pw zJdz{4L69_q@p$)F8ITFRBf>?5AM8Cs5J#MzH$M2Efc~Gz5^A)S z7i(0&_p3DA6{u;AVn!d+mc@QxBr7&Nutvel1W2g?s$ToEOC^>XABy`~#(FT~L^(H# zRbk-m?T!q11zAGETv&doOuUm&JC(U8;nGlvi`Srqae#$$tK>mY_DHxZj#-a8tlY1^j3tr5lo&gPiM`3?VKfx3-W z(iy1;xvHx_1f$N6k{C@wY70%_Ih*%D3NvQd7so~8?t;+ts?n0uZg8dR30e_oi%Jz( zc$K$lfL}8HD9en(mt^2&g+!J=3xqHM%OZ|~cXc6fBP@~*aa=Z zK78{sS`LfXI)h{X`R6dzaQoCKH#v)8090zk}Y;rVT9c@U5 zEokC1cWvxIc-*|9bQ-~#SQ0zfE%NNLvc_vovqd4Nefa!y`NV|jxkG9GS{ zL1tO^9QbR`c)rsLEy7R6(zcwp!Vu&!Fy~b9A#EFF?d@qI1qbAR+@~^XzXXTODMC&j zoyIU#5eNq28GcA@QYmG*!>Y=R({l`V=Sc1x@ZCvB2;*_ae{GN5AS3Uut-ux?l)d2dwmPe#H9UK?veJAa{@^sBgm>gLN~qP6WUK zzhDAR@D?<&Z|jTY;qW{e-EM3u|1??m*EGTUj=fREc2Mz9e|WD#Xsv4k8azW2S@;nxEPug8pH*C4N1$EwzCMJojYVvJYLWJ&|gZ> z6WFv~?LFc#M0I(T?>d4``Az z5jE(X=M-<52%?v_@;;1_7s!!<3ue{nAeRohSa8kSh1cA8Jb9`yQ|Aol^oBVh!N77){DI}>T3+4#q!jt6X z+VkZdgy(;BB#*~V&+~6ufK8njFC&C+dEVo4+hAduoiVNTUN)MOqj(|N-9uJBIkQYj z;cnLbOSvndNCJZKXU?o@P9o=OqcMw+1mmktm1xYA@AJOPdN)gHX%vXgE}BSto8vpx zxsmxIM7>kR2+6b~*nD?K2*b}la2aj63oJ^VU3>sJX!lqu_JKqm?|kG_$~lrpw(|v% zq_FzmIY*{7I25zR_S>4(`%{_s>7l9q1{VB6WpJ%yBBXJQ@J2oNE(Ax6k_?)}!u_k4 z9go_w09mDUNBSPahvXeFAC&*{Z%7{pSWna$zkl^$Vqg6{`1?q(743f_!);`I?~0S; zdSsn5u}NlLu*SmlNK8->cYxP{x69g7LMhBn&VAHUL6t8dIppUlpnPcxt}83Cn6(n znoYAG7mHh>hJNdn7Mwxs9rUykh=ZtOO?UPer;dd5KMD@CY$5zn{^pEvUo1`1TlyL! zEMZXk^g%T_3E+nP_p0qh>k z$Tq6%!alF|OMuQGEc7my+|>QSXGlwM>fAhrYE<`tVrS-63s%Gqt@;~~M4udgB@ZoxXX8|j7{n`mbG_k+?+)+V0Dfo1noPf55 zg~N6tA74<a=ZI2Fd$$A;6QzG7U9<* zlG16cDj4$q8r2hD#xq+W<0^Cp@MwzLex5;oWMIO+h2e!A5^U>WXhhC*Zkne+6L0`< zqd^zu$flf%o$~_Rk2CpGCcUh3jphY+TA)?_`CxBna#x8srz9!D(E)U&ALhMN;mHOi zKKi;qR#x8T@S*{chmR-)MJKmWO?4d5(LdZ5PK^Ht)PF_#LHvBIa!8v{9VMb^fpL z>7hupEWg51YME?FoN}e+a-{4jrc$${&aV4Oc zRTOAnwV?XR12bO8p4t9Pf-?J5(rj{c4Exs>2!Q*K7`9->FpkS`*(j4Rnn?X5Vo6OW z@1^bSsS#*7k0wkoLU+VFB%<|8&Y5`MeV^AN;(Rl=^RlG39v8E*?m89*AgTSeo=|O! zJZGag@z*UMms8EtHedxWTJ6n&5iYm*5Z3}TQ!w?Z!LM_J3!T!A-}qyWo4MDj%fu{g zPa=1oU%rRdeV%!DVz_o_`7^+`joe|2L-%=95~&-{yDiM#F{Hts$8ew?^l{qhvNs@k zdsgK3cisK8w)(55g1%L8*+>}sI(-&vu{&G6NiR7HK7${rEr!uhFbLNI-%Z^lBP@NrwFLE!CNb_ablLOelqT&*9f4I?F^2?1shij^Z% z&0MbLoCVK%i6IRCHwjI(h*M8`-LE>A`UW3y{+w|VaqmWcx2UX$?I9CP}9+JDv_V)*Vx#4dBWG-#0 zWV_pdW~3}=y^_r8Usy~4eT1Jm;pB8c=K_3^m&`++Oe_zzW`4vVbDVC5Hc(;=uZ_D` z#CLY57Vf^DF*owb*!}q8cdUR%R~~)r5A#5edvAU={m6p%+1eTK(d-2Y`F$>~r&!*Z@xj zfo<-+e`5-k^P*Nh|yK~?wf!g_B>j%TKBzQ?hN?UtRn(}Ms_+UH} zKB6ANC#4Z44jXg}m*awS0b@Tj=q!_8+YDDs?5QNUZ1 zbw&K-S>N;%J!b@bC+l^PvAbAKI?cfloiL0pKGU278hI6YtcAbEi!C zU90`!O*qyXm22DWC{Hx$x|OCR*6A9e2g~b;-NH(=PY2Cn;WQryL}nHxCtl~+fLjED z*%|rG#hdcRP5$z<^XrVatzZvJDF4LZAy;gdRH4OamtGAsgB7po{|Jb@1!B=ZL;)hdLXy6zq3skWkbe`0N^o;-=A%@ByrU!Q?Q@(XeDopAdyvR>ya7QL7PT1g{d4Y`{^ z+@zqVTY%Z1a{pTj$qNHD--oB6x`-fN1SHa*#F?*CCpo^m zDDU0*pasf_(zuTAM}pR9|AED17-Fx&Y1`*0_$pztXF(CnnBo8o0H!RtR0q?P+XMAC z*m(noV&|QKzxYlGX=E0C{#74T5Le!4bOzboXxQ=XY)|YmcWB$EpM5j8B&6*~GCoFu= zQwnl}82L#W9XI~$OQpfMZ&X zkp?kVjxXYtXiB+IW%XolzI^;J9i*vT@n%UeG=DXzoH6*(tk*k}`_DEFbIYcG?5K~D zjZp0oqMXN{Pyf&fEDKA?lNnY34K;m>d6I0)^iG}mvl1sYe!^lYFm<=&&m{EDix{uA zE7|$;>?v80T<~|vH%VfcoN+BonCKK5iXNA>GhAkP;`x$FhtwmQdyu*}bIy;%$Dhg^ z<=W!r!PQxvkXw1D!2z|STe5|5#a*c0#=yq3ywg;l14H%1z>H*RUrlx9GQ3`cH$6&b z;9<+FmH3f|JMGCZ&@&%)DJP^Qi+{G)y{Y0+7|d`0+qL#ewq?M{Z3#M~9@RL$HM3}Y zw*V&Tclt{$=I&+ZBf>=g&Hj3qh};1;^zSb1A2OSbP937Cwpz;GCWrHJoV$n5;Avya zl|++kD86B^_R#+wjQh^cH!IC)=xFw^ci)kx7!iGVily`XcJ%NiI6!;6g(yRV_%QB* zvYI;0*o1~o*E=L;WK?HLYYaU<={}np^gvd!e<#<1vF4U(AWGgI`10QkN7@Jl2BhW; zw!Epv&ibt-$+4t4K-8dXUIzt;)8f&^O!T~eaUp*8D%UeO*#b9D#CVPe@3sDqF#kUa zon-9Lm4U`b1$rxRL~P0}IUVbqB*u_%pDY(Y^&DU{{|H<()~sf9!$LjE`S{yL%*e^I9PC)wKv* zF3P*R){JX3bk8}f!!N#^D$eT^85(N6nE04-lzaTKt>Pv6?VWY|c$D}0{U-JR*tDPN z>;4b>08^BWEJZgBoQlafY?FpeuFP`)=>sTvuN@3r*$@6ch0`b~5tK2y?C73TGzpYn zpqYn+piBjz3u_QW|6Ic>dSt&~L#1=fU0_8?duWFz&K+E4|v2QhTf) z24L#<$^qKQ>!n%GafLNSI{~lu$w!_H9ll9gj}x|U=pgeSrk1k_afF0A6d&!Mt}l1r zij}|c4j>BRUtk680L@F|IW|s_?k;pe9K?X&?E`cinCfh@0U0C_FQs&QflX- zxKI6JGNK??qBed*e7Wa6bF@=P%#7#P%8Af4#5bo;EYrm2p7#|qQ_f|j=PegknJG2Q zP1w+=&nzI!YT%G@`MsyUYeLqw+Wm9P=%}bAVnNCM;n&Sq5+8*uAj?l`Fnb`o5J`HV zh^IV%if3xv47qFnf*9lAS0_NzHED&_`q`@iKqAZqa9cR!1DKBd2Hl4r)bN` zwbHAUT%GT{ahEp-Otfh%8ys4gaZv{-f(rAskj8fUUSoWxG!p-|zp-S?=RviG_gnY8 z@H3e_?~0BY9%!#k8(QW-YV1bGA%ecik-2>Ph_ah+^C*TqVjP7JJ?Rlz)^k<6AKGu! zP~Wq%b%q@Cq4^Np;^4HwdUT3)tMyhT2bR-?w6XMU=z zO_ES+^qIuAZ(w6)>L(g5IrviJwBw%IqK?zeVftZcN(z4k$DQ0^%w_@AOw9R!z$L7q z{ZK{W=VQFp2_kZgCXx$oc-%4?9EMB(6(|t7+KvkntmxPKS3<$7ORNR%LHztzSDE#b z8h6_lTC-nx`m7lwd`KxA{@tTk!g{c_>08n9J8>z6cgw}IyZ+89OI;tCOQGb8+ag|i z9-!h#L*;QJoTRYE11W=h@bkn;P65d^#^Z+RI7ejFpDPa^tjIgQcHHUtpuv#$z~Mm0%9y${)m9KA{`PREEq$s< zo&iaqg^;wIdZjlR`_*)3i|Z(0J-|z&V=GDW(k$VqAQ(}qkPX)huF7H7k|G>SP+WW* zsb`i3w7CRU2ReFaw|88dT80Gr*vshsis*d8-@3rj8xY;&K7JV z-=1rfrnXr2MYN#5sSah~Slvt2CFA&9HLr=i5Q>phG7si_3i$?EO71=Misg;rCpOYfLReOe%3EDY&8k!7yv~>#n`2P&|fA(i; z?8B_{^+1*fA6Ki;WE{2dasmUXxx#|n{ysy#`8!X^tT)#69%=>CsOWI69|iCYmwpc3 zCT%3}$G7X@dUMKYp5K+nlYCd-uDl$OG%@ykP&)T(KU+MPd4VC-`O)NfN&!WhV(Z;w zJ*DZqioYI$<#!3`adh<{=0U4W#k#mQFbbSuU~2HnnbIC*4l-jBJhMi~^V=x08F>K{ z947@iLWBb!3*I94(FWXNMd)(yJ^98KBAxB~k8k0Ko9iws1Kgk#r@C1dU^a-{qs{MJ zZwHFr2ssIBXMSXIV$}9&Rn?Tz1Ym!BEP#}1!Mv*p`Cy9GrLdjAGCPd2l6_UoST#XO z4OKpW+Th^ydjb9OoFmYi#quZ7TW`GOY%@x9g3G#CZuH)S+}W$jFhxsF_pca3D0fFY)DBK+=q`&L>7 z#+=5wZC=5*B;jYiLfvO}>1kzNhtNMzpR=4bkTLuG*40{Ov3g(*ixab55W~{K7zwY- z!+XEk!#QtBwp)~<=}am#GzCf@;PkSxvCG}XH4wo|bNKavRAa*Pu3ZwrB7}hKzuwzM zW_ly+MBC)f#z)7uLc%2CY1`4K1Gm^!3jIFvXO&vQmTo_Xp1)4`)^#`62@{ZPg9tzS z&PPGNl%J|sY6bqyat_o*-p~EgclT%cCSUd2n$I$^9fH-?!wRjF3+LelWqsohaG z&Q>|L-9#b;5-OY@S9LSA;^kD(M}1|(;!;?n^tCN8=?lxnDW z8oU7-xVar@r2oU(L-ie?E4@zDb*DC2Z$TezzeCH->XD(mVX&w+^v1qv)*5q_AIC~1 zGXvuc5ffFhH~Ryqd}#gVhISABz>IwnCKSs0elg&imsakdw5)(Ds)JtjDzvrq(K)=a znTUxwmHW*FN`fpAou3|Yi&e=uaHb}+$&$_>w&=h!;immmuco{pJg!-Y$E${*@e>qRIFG7VJ~7SmF75U`})a@d~>lI3|meP}16L3(2%8p$2(G%sTkobwtv zeHD|-H|AN^m1^jFau9jh)=0F-oAzo&&m*PUO!Asvn3TQnd)t=M)Yczh>}1c@ktWI{ zL5k^2nA$0sLvF3Ult0==ESZ(G+>o#H)F=mD-;y~5Jn9x%IlVCL6e?ZOJq#m!tWGuo zEF@6S9+35k6Q4J&f=H|@91`T|34-k$FJUB*DQz?H%H!e0&s?X(>bGOavjBg&rVzn~ zYV{(y;T5hEFk^+B_Q&rV29&Os4Vw2&#|J-G5yt1j!W!>fgKqu${aDG)Slqc#q`8Ra z2miHubvga~U37X8A3yuu8w`X866+(JefEmVc)x!5e>=bb6e1UM8iy}gfFBsSi{-;g z+0`T+h#92GSXC1JxS7Z0xXILBXJr=t`dFq(7!&R?0bNL8-kzQdQ>r1iz zjFmZ3@dacBC2OPYAg6M(;?Ea>@WhHYSwHJ*SoDpHU{>G8M_5PzlqY+lgK1l%JF5{IhU)*B0T)upHP*gv3`ei9Z?&PhamHw27llCw`C}G6l z(W1_^YSvBx@0_jgijeW4C@;ChAI)hI*_WSBzt$25QAeZEbxQ1*LOUh|s_0nr5% zm0cc=#j_5$Z(r?aH9{}N;pmhDv{sv-ORHdl6Bvh0_Z9#l*ND27Rqnz$_!pb9Y7Z7Z z_A4IDc_*WOdHHtM^cr8@n^bX1z?pSm*}D)wj4I zOpi0~-w-O1>jDWhz?JB^md54O#vzADXIaKxl8>Q=S#%4+@U z4!VXbKyuN37;6|G7{_9fCx4L03aX8eZ~bZV+DQYsNMgR=xT}BYB$fC}^frHsa<&UR zzhE7`HZW4y3=VMY#g;Hb%)EWs|I1D-_Lz5$Y&`aEOivZ&+uS8iBGT5(UB0zoiNqW- zz?_kj2kuU~aa(W*?hV{6O$}K2?4a;QJVQzy7tKqz-*wTERMp?C%|`+#uD`RH@7&v8 zR{H5RJ+j1k`zuk*(f0^)cP^>iL5n3cx3wJg`Y_qVJ4}TCnT^q16xa0gXH56`0-fE_ z`;ie>mf#td=g7}(pOtIvk)%Gr9I1td%#5BkoO+JTkj!>^DNVw{_46>b&tug|mY!pW z9Qav!0zx_{&PswCRkS_fm3b#}#45p@vQD7t=ynD`6aUhDu(|NSX;Nyopm zB{nz5T-ivqRd?MrOqjg*`1r=(^Yl&F{MGBFO{W$fHq8oWo`Wh2$Moa@Nspt!q9)L^ z)?m+;{bHU{5^AlLjyp^tle&(EM$cytrcRH~lszK~If9F-C$ZwFY<)+;NmJa;2 zZI}k@rzp0m^@()- zB>J1`OmR_5IUIjGZAP#ASTj;FBz6zjZIe=jQT zNCmwtrh(`&0J#N8GzSg&I*=I0LsO1}zQLAR`|Et!>SuigJSURcY9$oesiA~u7X0s; zJV&Ru_j*6rQf)Ks6W-w{^Xq)!Sw!3QC{)QU@@C93t0sG5Jh?7|N-DI-6Zj}m9+A9cw^miWlM zY7=Svx1)*DFw|sYra{2Jo8dv&P01-fq4MFmeWk{jc5oGi3d8e?&K!nJQ;&vk7BY;q z+*XByr3|_&H}kSMI#Fq4V+OYLY%5b|Jqwa=*G=1oH`p1Kv9DOAY9o|wz}+UC)S`aU z{XLH$3qO2bzKiBSN-EyeB2~2A=pln%+mU=Pb!Vma7X^*Vl~`-p-GlmSJ!a%2@Vjch zy}>KWP9Gzn9boO=rXs-VK?qg%2&Y_Br`00t#us8-P$w5|_0`^TZyutwWdX^5iP0Iq zVb(Xm;7j5!lQG`z6dzbt=_J_Ao=E!J%eom@nvTm@ba;~$sxPrJzd;|>YT!BrTJvc4g+VXJTDx1QYmfIB54u#ab7V5=F;ukX9K@c z1Z=b5>OwyXnHPsLHh1lc#t`03T;pBWpU`pG`<64^bJ`qY8lAgnZ8elA%lx9fT;^5x zpR2t6wWlA~TU8uW2FoeSw>*5Gv`J*~#*C>jrJ*{W%!fbt3%5diXi=i}1NUvS>^wSq zB0!?ejQadEa&UG)mS4v;Obzo%)6;m3r}c@>g~oNe*t?Wz*qZ3*rzVvl|FOW@nuv+S zlEG-PHvN>eU28Y9*m&pMd*(lia%L&($|ntY_KemJp3R<;{qBCoSI_h-rh&gWsbff* zf$T4AL4=vb+$OPY<*PESf4}@}!M>Gm)A;DQP&;$XrD9@>)|Xcg0dv!l?>6+#YIm2F z-+7C@s=w1+7(|2CmYS*I4M)v*W*34Vc&%s7c}CGx+xFb-(X@IY5jJQbYQZQD6c4ka z%3+Or2+*PR19ZCH>JV5~VGD*FHp~lpF3Wbwy$3HB?{&>@` z<6PQ!P6hCa_Tx9n%PWlkn=pK~GvQpM$|1Z>MGD^H9_-Sux)ESkb|y8lbd=@3Ad2EM za?oUxF3!dG;!ZI~w6Z4zy^yNByMw=~LtOsZw&|j@bo#3YtH~LSY8=p~4wtw+Q4zQ` z^4vZd{%8}wFtv8?PUJrgFS-K<6C^gd*Ehq&YFMzQ^O$Feigdp)stIE&jmU6mm0D2I z^CU7b5(`s5nAm6##VUHt%6u*y8n3n_ZzBtHNLWg|uU-Z;^(6n;{lM+ApZah&B`nn$mU>Pges$9ntzKESBnUg zP@;5_c>|r1(N5v*6==MVzpB90Tf5Zq&o7S-p6%aJjy+6SU)rI>jLD~qjcK}j#_3ks zBu13KYWU-?VUHG?z)cipp;{RdxU$wOrU?cSy|GBT|i%8l*&alttlJD#cg6PcCE`zX=X};x_ThAMca5 zCBy|@B)64rRtR5(D%3WCbltc;?U`2`1$WwPGrH=&Tw}E*mzO%hHXU{ee6RTqY@eBF zy0}YjIyA}((UFo@0<@$Wy(>qu0k?ePg6R{Pzx!4@b<}nOasHS?UgsFhNQ%nGJDE|a zBV>8U%ew0^MAm-dFHNcZSw9KJw+QVQiFb;?7O{s8RCU$p%Zp8G!#{}ZF5LFyZKycp zXVt%mNl+lmFY>FR&hxsnh;l7rb7s${?r|}f;bAu(R_0s9d$=8`PGLcs)b6Do#g9o; zi8O=FP7`VjA|`S zZ^CYB$6ov82jrkZM}qzMoD~h^i5vpjzZLj@Hqg%aS>!WySEd2~c>pP~+;fs% z_jW^hy|^7_aC1BoJziw_K$@v%(2}CHyT8ZF>1+On@C1Otgt9vuXXVhqkhVflh@spf z723)SKB5m-qt-j_3079%zqit}vlVqip1C_*Vt;WH_T}6M-$h32_tp+S%`xgcX|^1i zDQuU4#rZnmDdt*z#J=*&GwS&4@|W2iES~`?i|&RzGEO}xS;QBRg8({TgC6@f-ew#n)RPIU(S=5(@S*HSTZR7uzLV)spuEjtTgAMCvDW0}VpA{7+Z-W5N7(Wx#X zP+Wj8ZP^Ys8_?PLL`j1>;SO$K!&M{M4Ibd`ZWQUvU%IXnl;rAX)2d_w(0TB*gRRrx zv&HJ!7)(}A_9|k9-E6HSSelB#k^Lw*2=Snz@w9`A+Na8Pb&cKd(pyeWdl1zy$2joN z>96!~)4A+L*WZ(9b~CAFH*?u-^x~5hFat_<8RLI5f1W{w+}wBLqHDDx05mM#5>MF^ z(%|0(Fl(JZmZ`1kfDB&?dSy7JyJn-=ePGA zP%RGx^kvGS!&&NNkp~g%Ev(0^a=VOFVRxudOWHjLB;2ueQ(MM#{*-N|03&Utrd1z$ zY6z^6jgZL)tNxhxyl{y+>Eva2BaH{xqIeb}pxcX|rG3mf2JlyLFSQ-?6$CN0uEK{<1F+_`tRmQm*qNv1h%a!c8pJ+RGz$y4OP5zxurt{m&1-tRP$cnlD z)WQt@&O0P7bd+$ydnP5sDyp`X$>`UwJCE17)bD&L%WXLrTPPHLUZFH2LdWbo4SLy> zP4~AFSU==8F<}&K5lsP}9Je1&XlSerj+Qf^g+)L7&1dNzRl%=F4@Bx3dCR^c^e+T1O{BpG@HR0J7- zaO{#Zt$9(@ac1^|;2T9O1Qq1!Ni_b%8)0B6uT0PMrw(h*K6|j1Gi>?01g1%+Y8({3 z$DP1_M@XXK!7fGTWHZZ}$y(4A@a0!oW5loqFiXo}9O*fRKk~1R7@zDu-8D0sw{kvL z-4Aq9^tXmadUVJhm03Ymw^=WZbq9iiR2U9(PyHRTmT!kJcxmuQ=7bpZi-65)6YKi} zNL6j$V!)*xHkAHWIE!lixjBN4Ua?4LqagcCJ|lvGQOaaE9^Mcw^sKpoGi$zj^n*wH z1!>N6UD|GD`> zI*=wL_G}T{NV`hk1CyDKeWHISRqKTO>qV$Dty!V-dz103PZj1okf9d?N`#Tx!C$yr z6>TxU_5XF$V|gh*Yl1*^c@mu8a^9NRGB>LDYN#}Q+*s)?L!U^DN;Dx+2<1}&q28wa zliB(*PTWu`JFg=;>aAO z8dH};LUO=h2%nI$BX1?It#L-horMn!q*!4Cy_X5^gGR7Fk0<3DzY%L9UvjXkzQ{+NUV0-}((na*<%hZLZY(43Dan`4y<(m;Af-8aM;l0MeYpYCr)unYmt-$a8 zj6Ro5SEu$+cCS;oTp4@Ex}L9Gzb0{v3*#mOEL8)&rhaNs-4(RL(E8-aTDHjrTXkP6 z7;Yi|81|ZE0ri6*4`DOogg)u(KK~q?!8ai-0iUg~X@E%a0qkl=(nr3AQ*0PnoEs=X zFB3mz_>p499Wat^|Bp4@b?(f8NZ9gr=if_i>w3UK%fSqT$Q@(V8IqEaFI0BK`7aa*jXp;C%<0gi+acdz0Yk;`tV@TPq2W<>$Q${MMc_YGk&d z=a=06)#(X^we7?lN*~G_7SN}k7-Jw zGR1#F=4Cx;CqMF^OF>UD0JhtYpZUzD$By1^qqI2f94j8j{#J;Nx)%hABP?6ISC0JF z){IQgWhoWe)<)1(N6?#|hZ+#Us{d-8{eYjXq&T@s5}VGs{V+3SFYRml-6i-{mbI#x z&9}|pO2IrrO>v3ezGvwpmYAQ+DTv$gRn=?X8cjoLF#8DdWj?(8k&ruumU(j!{P?bAqys~E#>Po6%|M!&q8X#1fuRYb?JaEK zyuuk9U!~Y`!s!<0CVyFP*Mx_!)dqf@g|QhX8zkj(FnRg*CJQYiuD7p8cI(e5l0KNjC$6&ZG*l zVmTodvcJ{*d*?OI$@(j{XcYK{Yp>=!tH)=xcxBanu%vCogr}&g5F%P;&E8q{u@wYX zu`khBxRJJaMm)GEsi{ixe&xS3-Z2MHD49zTNdO7G8vtd=7BUGS)0)mgdtNq4l(HPM zBZ(YX(0E1)Vd96nyYVt%cRlC%x*1tbx?F0)Mb%#m4=E&cy8BeV8-yTqnWnjCX(*U9~o#c*_@kGFKZm+YjYG+R$xhZps9gkrjg@WH3T$;MB zhPLrCcsM>)dKs>;)z6d^kw^iaCw7>(w-?X&c* zBKleSDkCogI;_z07ue8;JiWf}Qi^Xze}rG4^~c@Y`l1>XTa@x4R^(y*^5nnuwWAsS z)GF}a-!c1!LRh+P_qwrqlYb8Qv)bW(m#=^kp*k(KINYL;-jB`>dXwk8I(b^8Wh9u^ z(To4w0s{VZ^%V>|)5^P&KP~(sl^yN(IOpIof??;Y*6S=iz2zoRZ8Uw}dOP|r=5{~Z zep08`p{Lz_*(jKwDKK8vj*9J1y~MA3TrRu14yKzv9b3EXmMh`tprr3#k1gqixwDxq z0kx?Tkoz?K+|ak9=~in;Uq{TdYsJyxDxz37)-`xX3)4X9{3yh0|yF`)@KJ2uNL3^hvz|KucfL2(;MpjwO|^{w>PZB3OY zf-bY15T~1CyNRrf88fSQ_-|PXxAN;Oe|Q&vdHPF1u-+yaXwngUo$M^S`MPDTsXU(H zfrcA)&3kVf(*n)W_ZRgVU1^K>-DCq4yULaeKrKoi+h9X&)^lve-y0x&^Vu==hBzpsx+x#6@mKFuutHBK_I~|wcRBLj^X!+ zdp1iKxRxT;Rpn@=Z|13-ri}aaa7*E~T7}^s>E}+D$Z;xsr;eX#&*<}33JqpUszWw* z`sM_TySh3}B*g;8oD6A}z`!8$X`}8nrPK@Wf1I@4KHXTWLHSfxlD7=^A)ipaW@~lp z%jw++@t{$EsiY_QbHS^29@RseDR)LiocPki4C}unE?FqGV4dVgfPAi%Q|IIqbq$a95g6I@=221~;iMz9)EwDZd8Ana`M)GYhx@+zlvOaxx$H(Cr5 z6%;88;FnXEZJWP-dI04>f%Ar0HJ#{HjHo=T6%I04O1bC%>ZacmfO?-}SUC*$@){9T&+7k+x>|Y6>@0VGhJcSA@OTMZ{=|Di{xyGqB@cGzfbK7OE!-*cl#VDTfN-lI;p+( zJ^=qfCNGql+NpVGN9mP}ZjLL)7W=5OB_nxvZrEV{wBmIN48$H)?YU~O{;eNu9y`31 zrHye>_?)tg`|_~NXZyOV+%NM%#Ob*8N7?4_nG@4$A z?=TJLUQ|?qGkl7Sy(X8Jd|-7sWa&QPmZ0>Gys19Kh-$Midh4@Z))PVOX^S9g6y6F# z>ss00)pn4w{drBB#>>{XPA{yKR-S)yOhlXJi6f=$#7c5R+T-ZRInYx%HzD2-BUf_! z*Y&zY>heC0IZh>pYn@-~3k1m;bOIHs+Mk+A36QOg{87<9h5l!;R`spg6~KVm2j!Pd0?#(-~)Ewgh+@ z0%jj$tB75Wdig*+#S?kveCscOmgA2n$L7iDI%n`TpKc~I%8;8OiVI6B?x#%MH>QRq z#<&4DPQdIE-oDZoak56a|5yUD!CB1$b^ur8?L3>CZnb^OS`GtY0dpyd(4yrVakW+c zElqUAz?==gV%9NEx^Hf>d&xjUK%uMi!C^X(GZ(YGBye0e6Dzv{tJ)f1>JU$GGstp( zKtLv(c{_0gev_82*&XLjxo?R0`Wp#^MmN@(fHbp)Ti@+DU25&bvHV^+iu0NfD}D&V zzQcL{ASg(s=PlC`%~_|cdAvleK))@6xt=Kc#6+X^)z43l^;*EeW@RTMB4fZSn?IzcQXJP_- zuAV1v$r$H>$*;;T?OShePLI}3`{%jvpcdFlkw?aR!3YnnYqI;-=3@#3>FLvj4wJWl zQAOpkx($FE*`nu{wxkV(fco&1=$g-^W9{SEw^%H!0QG(k|3}CLrcq-fSs)DyD{N?d z+_4|j`PM#?)75+*w0}!eQbuvSgCUV`^4lM4z=5H*+1w>Xj+yW>m{*!x^oyA$AvLp4 z8LAR<-dw6RZlaj#-$~%g^6=Q!5nLT3NPQvDn^KG?#Y*lHiixII-H$kiYoH0iNa zRtcJ$jk`CLOp04ur+d{(Y8hD^WZ%ctk?IG)sx~Ne^mA1Gr zR0yD;smM*jUbxSQ-`hP|sYKiYrYHcbqOzujIqmQ=Ph>-YN+O`=2a zbaI-)f&S$=YEnB>x5`hUK_I?7X0TsxuWKnSKnJqzpPWE)!-KU7lNJD zKH_`WT3@$&eX`pM_KGoiXKB?#N#5Pr-Yc+WZKux`eEEn&rFX3s&`GwJ8(N24S%SR2 zfxEvr_u^@&d}(^sb{rV*8maMZ82-s+k#RzxIS~g@l}7<5NQ5ZzOe%zxt5Z?fuj1%e z1XT^};bXaC76=J0qoA_I2`)+5*e&Rp7`aH;Vz8*h1$_1DJGkC0M))@f_gX$bQ-6@b zIL;av%dt^6eB1i6%nW~*V^xVF3=<+$pHOdx!gtnvh3YTyuhV^i4GUU#P9b-Ed@yvE zgr49%lzxk=F;h%=e7Fsgy6p)V_gdve-BM`)=-vta(b9bO{0q>7M9j$_4m*VDPuLI* zLpU4$>$16*x7eqK800a%Yzwzsoi&lBUW8@OZ=L;2=c&mVg+SFB>9gAwu+opsF;Q&{ zu8kmcl(M*aVR0|6YdV{-#8PItmpHIHaSQ(;8L2gqqJ3M-I2g>5l!xEZ zyN(CxBXxI{HIhJ2EKQ2ckGq_*7=L?V1f^Q-`b{?yo2Wji;JTBm(OfyOu!J|R2gK`d zkQJOEJ6r~PNz+V0teRy8znwBmO+Rmp;1TE)Qy!h}fwc>M!>$}D)udxYJ#ER*BOt5U zcakL#?B|;LGbt$PpFn}eouQ~keu`?qfKVx&lbFVor|2D(=J;IScenkrWGlKY)_Oz< z_&X^OK8@g^@Bbkm{JqcTe75uBx`s*-RkmbD>WH=?kZWd9vBtx?{*!x-(;|@7cV%DD z%ABvT73c7n{%K>>m5lpC`H+nd7P%w&Bi%l7JG!hTxsba%rWXA%P!`iZIj6V!320&; z_dDz9D?8QcW-$2m)+sZzu;MTp>z(!GshNE}GlRnQ*9kHC^NZ&`#L~{3w8VA@Bd#1! zjkHwKPuITfH1ow1z)l=u=vHKuW@PAOi%Z4SQw14n+Tt?w;JZLt}AoD^W>Ibp0sN#@I6}&3`Z33Q%w_Q zYUG!WDj#Pf`BK|S-Bf$mzyHP7a|#V#FfMZB)S|SPHVCz6x{IsC&ZReVMHbSTPEW{iDN-zWQ<>YLDJurY^EYi`+o;<2EX$<*rq?pw8g z(4-KX>TmYgS<+y&S)1i^sXXN3*j>I6R)?bQoizRMVrHmA30)lJ^7~P z^cUv{Rr)wd7=1%~oxrZf$UM^^H|_d*jt$`!m$b&aYKx(;J)<3RhJNuFU0b1R%Syvv z2U$F`AV|J`E&*6Fpgqi0JGBcQE9^aJE!yws37Tf)V?d3z+9QCk;q@!sT|a-ns}Sl)Mu^-fM;w38$z=%)l!vkUpyO_*`PQw- zqbiw}0$%pfVBdViSpm8#%fwN48i31p%&X64L9QV+%-^jkgYIr!!J$(##>eu+Ib2bn%gSO;mT>gBLtvq8LCI3kjyuSR2|2v{Qr9OR5XN&9zbDd#9E)keKNb5OJlZGlJtBMS^NCRjQBgqG`CuiZx zq?&!wVII$r9t{9gXTeo&1Rx$ak#yzd-fqFQvKyfkTu{f8>Z5yxu=`aqpxU)^@{##m z3nGc3m|XCC+a_0j_p?hz1Zl?+_F(f-PPchC{u57aCi%Maxq>vBr3#_9{DO?lENVdL zf%HCQjq2=2frY)%9QLNii8+qr`wr_5Ry&6!W$C7@pwa^-nNh#aQ8|SL*-*M^<5_;w zK`jZmMi(b2Bb*L~!QtC7KFTl)p-;Q)D(dlsJmT=x15BOV$Txdrv^? zZTwss0naGzxU)mv3cbz_}SA^HCasX5ju$w|9PL?Y=y@ovwBh-GJNaGB z{5R;|xuYsR^t|r{1a~qOF&Y2??-QxwtLvVVB~(GALf>qJ#JKM*7Ia;|;rfHi!(5Tn zF2$wyME(_=5X2wz6rVEc9#>>seP#FuJEU^n190dZ;hPL`u==j;pI<4vDL|^%O_PZ- z?rcRL5H?WH1`}{o24|B(K#udwe>@);H8lKTB0y_J>ZUZ&95>pomPFKM?dtu1+*PN} za6MR4rrksCCCsj<@!GxGg< zBQ3x`wU1i+6kJ-6wbehp{Xun=z4hb&Qs+hWXvNw)v{gf}T?=``2lzKK3%U+#>)x4c z{B5QWzI^Ju0=1ftl(&8mQQd)ca<#rrvO8|;Tc27R_&njkA$nIQ45oI2=RaCd^Dpkq zpgwAj!tM!}{+*}0JgN=?3A}BzdN=w0JvZ0yG&pPjH?}+b_UKW=Y!U|^P<+&NAd}jg z*}Q!auwmn0ngLH$#L87JT|-->l!PbVdmGtuY|7 z#f7gyX6{|B)e}OdS18@M(@aF$5!B2>Fan5|0Jga=kkiEgw5Z}bMs)f)bULd8&<1)% zwB8mZk2B-;PF;(?l6!N})(G?vx-VQ^zN*!hK^c?e6Akuy^RZOSb-HKUCr6W{I&N>V zWS83mUZ!mx)16Lk)9q3D*Y&0g4Plrbzvk4`Xi)I-$Nh0?n;Ii1yNOylO^S(V976-| zv($ca#p$cYdYUM2P@k7c=b>mQYdyp($1UPa?rV-hW0sp6Vh zns_!e_+=?W0w)c)lC5zgve!KL6 z>C^Yi(ery7^LQ3DjhE+sGg*Qm5sELjU*?-XnqS}}umikSm@h*LI~61Fl;T*7+gEgDKC*{Pa~H9E#%ha%@!;#V6BEc`7M;-rhbOkf@tp5P8K4VIA=;Yva)c41 z!r8&1T`y1q2Zj#O5vs~Hvg+K&)MbGtn#qVEQ9&`9Q+C1-6eUg%PHiIPEV%`s0^bG- zk_htecVRqIk!9DnT>!PjDpA;tB%WA>Dx#j#Wc)lqRd9JxV)%9{G_47dO}=Il#13?m z?a&J$r@v%!mRkggNY_`t7KHR1I{l?l!YLZ!M>`m^C@7tVO4npCGTaR5eRbl>&Wp~H zT>Q4${s$JYId`EUNS3QDVhID%f#wBC_qu0sYQd?5fCb`UH2tz5Ss+RR)Xy8Fq5!*x zba)bLm^^&({86;Cei^}SZYXtlABFk-klSN!e*I0gmbhw5g1b%*QD$q(-HF(&{nwQ1 z&Yu*zqCxGSiNy=JtfLa=fx7U$bFHZN#$>MFpX_!g>7RymtquD!x#K|6f)?Vi%uNjim7#5G*55t4G zz&Ps+08Zt{x5bNB+vfKj@;?&r0N!2l&9)t&em0uJW*c0Iy9FiTmBAIq*{L{shrk`)^tbSW9uUzUA=B0d0A1 zHNSmjvBKtE0VlS>q|NjxUuTJy3f8DA;mv)-yHOr(ue^coak5IOP3+V0-(g-dm)FOW zd`}}js4Bxj-jx*^r;_COFnj~HjhLltbGcpDPSfdNv%ER*>?KUQ3Z=U|uIeMupZEMQ znbwybS@+oLnf;S(DVhz^T<8X+*WUFnq}W`zPOo&100Ctie(ft=TGX<$b0yWKL=*-# zZPa@gY=U0F>OdVi?FaiCKSjoqn@K zgbUJyYaCIYDwT+O{$E-%l8X$>_YK!la65_HjJR>V6O#s$Hl5VgY}Iv@UR%<57i9#_ zJM^e*(Pc^JS4pF@H%A!C$$xk2l}>w+@V(QLJ>~Q<6Lvmd^mdH7cv7gjXEwB?yQOs_ zwEK#qTT$)&Vv$+D_CrcHZxXBqp`C^1W_1~RJZZ0>UjMD9!dj_>xeK#0N@&7!u(OsD zb*8cV)4gnRqDs2zhdk=9%$+LL{ddwx?f$dr3E{L&h(rk2A1J$U1uD00BC&-GdqUkv z)^W&-PbyHEcf6uHfYn?g8!FkEX&WJ`er%)f@kO}86>{AP*~@g*U)VqOUhw!j^^`?x zIOu3OCiKYNTfZ{yel`v%9__{^cs0DwQnYs&S)892av!%JIW9MtgzV}VE)gtCKHl;N zHe!rrHkm8v7~0}`fM;y__p>>7N#_F{{Pof#vgFB*8K?QarJtwo&3AwaTd^u6D1 zmJak%1y$Qq>|^F-^6j(P3@98^&NJO_NUpc$E$VYpVCQyQ>={ktmeYKzD|@`6o)^!~ z=L#`nIQU#AR{nU@_A(x{w=Eu2dT&4-{^O*<;`w&v3zD@779(TB9^0t4G$JZR z8foWTE!SUb`@RWeLIsP}Z{+>#l%Amwm|PhSvKn-VYU)M!SV^}XIx3b-E?k8}#&(!Y zuE<e<3bEP zKI@~qb`@-QXkb-uTo9Aa_!LFq&?>hO$0hEL01amR=8YqvW)k_H!pqD}dcw@20X6s~ zaN@(YMwIAm3gxSghj>}G0Grn@t9B-Tx=V6zt)k#7;sQxW)?U*us2ICU(FStuEiGTm zMi8IelGli%n2)SJm3B#Qcq?sqSnZTy?Ab8p;n!9Z_B5gKB2W_yg^jPbDdw`qAxtbh z33KlCJ2BhqC$dZYaPKw0S|FnBtK>{gInYJA?x_X;h%hO`H8sj6p8mQ3Z1GxeRIrAL z{>NpmiIj;<3DDvq_=8%8V){+m18WHi1!*KVg?3puzPBovxT`~38M;w#nljLX7x$fv zqXo*z>|+@#J6GHyM*Su26tRp9-V8jUIqEs~I1d?f{nWsEi$WXhPdMZqaNdn~WZ2NQ z@gQ8T7&94uHE)%aacu=-?@9*!l&3GmpcPMg{Z@WElUx&!%y~S;TED-NvoFxVEh5Xw zcdRM+COpe)9uObaaIEQL&}U?tTJLXb+R<3m+c;E(@|X3#xnBW)+S5Lg5<7YF(f&(flseK7vpkG8He9FG zVB6?$A0G_^nk&4caL?H!yw6)%C+Yg5Ly=R=^+;~V_-*`b6|M5&;caaJ@xH05lDCh$ z!;@y)H|V^ZF3|Jh6^i*X624(aNCw8zBb%^B9`;f?#NitZ?MAw1oOD#|{dm@Hq1}*a zt8$9*psv-<;JqRD-5F+j#=~16W_D}y&`}S>_m7Vs^ZoS6OSgDI$(6w5X$S`>)^f65 zWPGiy_y#j??));#xAX*9pR3XSMGR__6P{q;Zyec-;1+PD@>C#VG-*_`8raF}^~@>k z>KXW;w4htgU%N#NW&x)wgoS;=2QRUsuk z7*Be)AUggU*xlrCXU>*TlLj=rZVt=sD{10T{p3oMgv9>)8Db~Tr!&8s4Qq-1I+B#13(j2huO0HJ8(r-Tj2q7tp%Cx z1kotCf{KT+95ow}uDkXb zRZ(tgJo{k^{c^(K$TTEiHjTuBiJ{UO->60G3`!A^|CX z+iDy^^T!r3f|*)x_k8!u$0A3)^$lwM5%0qjbN=-uKj1N88L_Qt%>GO8zTQw?Zh*sR zMt!x}zI;1thI2(|TZQUD(RlX0B!ziS-TKse(5f=0Y?ggYhO=?hi*RZbXFz6PZoign z7N=N;@Q-U-(@X?g+tI#F*D%O!0P?r9AuUT&Q_oOSCeKdqV*{Q2u6=$CO0;`JV_((o zswfs=w$_fjV505ey1w8u0zF!NNrhm-vbCXNy1dWf$Vc!otd&jCED&pJ%rZ7&eezH& zC<=wx<1t`jy{OPP7IuiJj#;m7*T&ZV*<9;OPOcDkxCwFJL(L`R;jtDti5r(Z2$%4P zt#}C(S@YrNQ}oX8PSy+{$6p23kiE6=qJi}TjEy?Y59tgDH{gP+8mLX>3#N5yr55rv z>DfM^mxgc`-Qw%Mup7F<&ZawL`FEG@U8pDdBdYjm*4a)LUZz~TZn*Ut} zyyK>(!f39_h5hMj9`12ze&4`gCH+qQZ4vTio1U{OJj}%F82w%{E*LJY+kbi{@+aTJ zo=fBCGR512$;H-#^|Xf>;KhjgQjFVL`Hh55N)Wf<7qo-wWTG>ryb%k04Xp_wpp>E< zdV0cVAgZlF>m??%Fo6nFnR)rI6unTOm=lNBx|N%x8ZSIat?LxfAUZhZ{}^K#?7?{4 z5y5RYgNXoqjWBCdw1%mOW+D3w-+X}9-X3iIK$A@5Z=9di$nk|r-$_u-2G#s#SIT*b zp`1AD<+tEOu0XRcmD&U+xG9sH^X+wM2 zP>ojTEsOpK9h*-t!YIqA9Y-0fRcAKV02XNwDhN!<$XMUGE`donyNZ=p2w5=^)tKec z9NKJVa){|eiku{+lb{hrW?aQ9-gms2>(7!0A;9_(k{55!mU|QBN@=&Cy>GsJ0%$r} z{w&=JOH8;Y+(~4N6mP=x#vA{KS8bWvXAPHW>jX#8+kkBUdS=WzE_x#TK)=1nXw)vH z$ek2km27Z*meikY_C&it#ir5NJWB7IC3X+85p^Q0w4`z@28fQ{Ar%lH4D(!f|?d~*L=hOm^(MQWdXKq5%WY+nP=JAmM4GXNN$PU~u8Q~ez#={rd z6BZt)S}C#PgYa0)!+3&li~xFQN%;{Xo%=6PK&%OBa~lcR4A1?vTmef6tlwj@L?Ge0r}#WYF^-+C8Oo~RB_`eiF-{e0+#^V;=_EdOMrH%1-4nfs+kCgI0k7K{P8{*+rYH!q{4Zq4*c zBsS9|Q8R$xS8UoRCp<+q(Hw^q;m;SfuHYff4%W5cUb;z~Rl*JIJQT{b#k<>t6AFF% zedslsU}|hEX{-)W&UsZ<&nw^y{vgSr1;ca@)DIANbT;{ zfc`~G7jA{~vfOBFE%DV7*~J{De(M~Kjv#DYT8mj#NbS79x8Rk$-r$b=k$M|aD5QP+ zKYZG3nI_F2^G%8yzLo)p*4D92et`}=YAwaahZ@|T?Z3{S68O%WHD2XsRTHj%SbYeF zwav`bxnPx+#c%Mn2B5#v>%3S^wW6+K-|0KYNWT7d9iqFU8WAt=Z?Vecp!_LKiti@& ztJxU$CqrB?;w#I-IeE$Orlq`Wyri=TZG;uPrzCr==xS4vIZ8wK^f)%wDPh-n=cr0* zMfY~{_%}hU-FqCETHaxPtXajLQt7UzRDf{ybCSs<8>4gfm>-SpGX~ z8W4skzG4@f@wS}Lt0#p6)HifzJwbs`J_lWdGZBsGCk>L;;xlt_%4oCkW`m%u8k(+L z2D1@d$X1urs1g*msh?n|HR1A!*Lwfb=r4V|>KdwFYTfbBguKa*Vt7Ix|E<)Nh71=~ z_@VFq5&jwCI-s0d|MN{Jz2;&Y$>>?GxkuP*6$m@A zg4Znm3Fd35U%S4HMH<%|bw~JWmoPIA6YVDe?Jlbg(W0I0SpgD!8lY*WDdunZawbT$ zP1)5v45`%CsuPV+cx~f+ZIO5v+pM#55BmEhUwTmawEGZd*7$=GOi8Q)>xWM+UBBqe ziI{8EpGQiwaQ?Pqi4Fof`&v-G=1A$AC%-Oq*I7K(6vUKn>=4yl*s*|Mc(;NFUwGkRB{#zZw<(j>;T!riDEl)?cLl(rFY>s)gJ1mL?9?Sk6E<$Pw^VcL@BcZD#;S+`Po0 z=J)VD_l>!{rs~7gf8XB~f^TS}i}PZPDs#tj)ldXlS!XL6NTU9f0%at>WmIGY- zd?7OGRWz>XM~sE`H^PcB^LpBC_<_7@>grWKN|=8EATKLHUn%Qne7gClg9S5>wqT-i z+_eIpV>#`*|5TnGg!TJ+K9~%7`5zQJF@7qP&e#G}sf7YD}{)A*O$oiQ7`0ymKd}?2IZ;JJ-gy z?)&Zj*&62YY0OZ0wom~cqxOu0+#3~olg?ILaPjCIr!Ne+|E8xxDJwbE2YC7zPH~hI@s|vkv9%~lSs&13qB9$ofPmwx~fMLCEW-HH4 zlKM`-{4d#B*h+KPv|yREJyCTf0ubwoKvI-Mc|l=6B>^=vaz|)o^$wt6JnSg$GMmwytJF|1=z^Ed*zBX9&(qo(1eDs{3Z33-FsCXggW@%|>hy5i z#%fa_eZzuHEFbB9|9p75zMiq1&q+{*X%1hH4f;5&ohb-;b6)`{vf$#|Plx}opFPzy z5p#a_BMFxa3x9z&GUhl^ovHLAbNDLKHR0l)Go1XrjMzt;q}I7p*Ax`qH)p4R zK%B@WTiy@C9Z9o@R{ACh*#lFsC0%zPUl5%5RXY+pwwXGj^OR0qt6RA%ktvZo@Dc1) zJONIy;m#W}Q*7lKy-%<$oRq^*#Gm5ym=B)Krz>nBmMrbFwI*xCN3NC(eyC~iC_WH=_;&KN8Gt?`o4NNoIOZm8T0`^3cOK-qCgLCo>XwJc(=a!Cwa1(QM>Tja>P@@of7w?*=gAp%JuY4)IhZ$ZX}V?)LkFmV-m^sZX@OXU z?T8=-BqJsxf*&sx#8iRq*R}g`$3X%B`jTH&%{$K)fV3UQo{PG&St$B6clDK@B4q3P zi`E|Y!X5L)Uc3ujMy^G1>o`zNO35=kYgyagTcEkqnDQ5G*nLI!fFbh^TsU8pNll^+ zYMbwk2Rg@oM&O9^o42Vqy+aMU-F2IQ$@QlMa{p^Iv_P+<&Flrd6apc~oOwWFB~W4M zeX#%j;&p%jmZE*s_r*?(7NK?t{?nuV8=2Qyd2S#(J)prO_xijqz@y}#1KV@;*#N*A7eC7ZQwOrj=1Q-NZFo1bJq;)|=`ARh{vuv3cA3j}Mven_N=d4$D@`s^#`n?)m8 zEFsJXd@Gtc!S(j;=Pf)zW%pM;!PeT_iyNwb268bo7L~ba{yVPM_5^mej0>b~1k%gJ zpeB*$r|D}8)`&-GjI#2DEv*E3YO>A8L4QCW3B)oQ_!~odlTTU#0J&%+y8c*xJx?wE zp9W>b3(y;g8*)&zr0Jgk8VHrn&D;-W>YW5oro=tc00JoU0WFOX>7p%Y-$&J zQwoy+c}=SWmnw27M$&vPBc^0#mQSYXstsfaJuPG)O#=iXS~!&vaV~QHw}8$fZQA&9#G|9My+zV#&iImXLfRD+r3z9$k!MbtiRw+Y3H zKxotd-kS^ae2R(jv_i&7q2de5P601w(e;U4$Htc2kf_^f70rfsXBW7h3>i~@- zy_G8jovaoT$=DjKcjbA8MK-SfhaA3s_k{(f!vhVhi|?#zr=MG%i7!2w)L_y7xZu{f zB8?TTBCdOu3SUcPPXzv5WbUxVODA+)_f*l z$UEI9C4iQLYF>jKfw^zPNso`j?cqkCVYr>pAYX;yp#1tgKaURqD73}(!Bi}7L&@W_ z@N`|_23&8+XC}@E+#^p&^TB@q-<7FJt14Dh6g=E~)JAY4B@+{9MOV)v{u@ynU<8xj^qpz?Qo$L$Hn%IX4sVaK)Zl>IdkI#F@Tx0h*9QPFR@ zf{UWx<|Y@=|2K1Ute^t_Q2~I?Kx`3Ut+!x&iM5d>)BUmK@B z1%Z!d42!|zl?MKtT)WH9*-(&1*MLi2zdizRDer(sn(9_U&Hmp(y(~O=-b-CQvmFf# ziw-3oDApCuB17>_L!K*c4jv24UfI;vO`U(Ty_4|uiIE>vgOiWFZscd&A;Yk?)d5% zmZuu3W_s^cQg8m&JU6zho%7#RCObS)n?rI})~jyr|M67c5iXl&zUim@UeGv!pY$GWYfamEb2J5&Y4qWDEe+{TXUGLedjWo?M#%%6VjRriYoQV z<$stnSykWK?(WJ01Wjn)P>j!Q*E9jKZ)V_#)qx0Qy>ZO0tH4>oUJ)#z zi6s-KBWymENlSq@uRdi+ze@#PKgEK z&iVScX2FZcD%SIl?N`$O+>{!pxeifmm9O^hekiM1sAXmG>ozt(OwtADbe?={nN}92 z5wuBnRXxqp@XluO7Lr)87DBn3?sG$0iJIWY$ta34RH-fR$scmz<{YLhAR;W%;!@=384(n@;B%XKT)mzBGzOea)mr^u!iS) zIYT^zL3!76bdHv~+H+}^LnGMPqyX*xRElUIOm(G7=vu5S_e$f2|4!%Edu-O9eGi1` z0r+l};1ZTptX)NZ4H!I+cE)F_tDJDVBy6Q0=DVsla|$nhb%^kbUx8t7}ILE%cin?(sblsJ}&G$wlBY7q-ny85dxVgHQh zUIM5WW@R-r*$)R^t4{?C5|$M(i^=$}oHL(??bmrXGNEai76x!uj_t>UH~Axe99rMz zjD4m(ed}>~f+@8>mtT+LZRa~|I5qURn9sNGsLPQj(XspCgFb4n%I@VGNp$Az?I=q$ zycXwBT``9V-J>?rnoPjx#CI7-MV+S{{6iUI%S?ZZG$VEpolu}}TupuJxSPM{y>)e# zUHV+>)geYNi11Y^w4E0XhKgfSi=I#7#q_#IQP34L6xTumm~*qTE;NFGRvu(gzFc~^ zAAUKL?=kQ1n_S0Ljf+SLucqEO>&kk+Ycj zjlli)-P!e+Ya?ZbVo765nkLKH6S{==BM&lQ7HUj!DyzxlYO^=iuG=|nR`1vUq=R_t zHzF5S4Q*BfFMM^bS%n%3)(*OEth<}PoP9q3vA2HL7V1e|_CXw0nWCvD}$x51R($!|Lt@-AXL)7=GHEJ_T zj5Q);W(f1<)pg*kQcx=qqw_dI)HP{f$^kBb@Iz?2K@j5~v<_I43z+mi%H-2@Nf{vP zoZg}WopQdbblZeFlp!q5W_^WAre%rsHvMQ2D>Ji^2C{!f%zoF#S9rBL%=85xPgu>J z%5Q(ip|bIPqe=kAg>9^2wkyQH?~RT9prj-9>NV`)vv{n&vA1j3E9n$dKox#Pwn!NL zHKrWsU_+%>2oDtn#(%Qk+c1I>K)aC=G6gc9aAqMzb3qK92|`}eNP6i!_3cB9HNd4Q zdn4@5rma>5@&FB(s>p(>dfs7g_{pk|DI0!)igSFtXn7h44-uUvgKre|zUhghfNZR?jPoAYmix(3 zbH0-=>FUf2O|QBb+4}k=&q#kP0Yg+@EBF@_8;=sJDzyJ9HN>{{`W z?%7C{e(I1``rmpNlYazLv%^Qz%TuTjmByh`CxnWdQFkRK@^up{s21cXR8F$w2)dxZ zcmxb|SRExI*l7EUyQoCGfT0Z|w`3JXc;nQ@hI^cq z{)$j+b8ZW=9G@)Q4W}MA5$mNK1KneBYolB>&Y*T&>-DXQMLbJ1_uqz|Sk%W?Unf_o zM%8PMm8?-K@hdezyi8cc{RWnoFzRZ=rFQw$>&d1XtTADAvlan;DFNG-)N=<)+NR1>FS5E zZ;(7SbX?2M4SFS=Pu!C(F6ii|aapwK7dtr7i1w(Ns#>YQYUuyDAbsYB7a~(nN8OJG z_Z>p-B8A`%A7o^5@L$NjVcp}251Vfh@YF@>QWNU1eOLHs0bXFrn>%apu~PsZ*ceaV z9L4Oyk;rSo#2uoQz?^gI>tRf?gy_k(5GDbY`~uPrJdeB>sV_071wF`USJ&WbHo=iS zmP*guxEh+9FW38lgO(su7tBO=0b*z0d=g=-JO(p z0APjzDz^(29aNQY`9enUcYN*mNG2>0t0#_L-K%;OWus03dY5};=QmtAXqbN&wqTNZ zNGYNg9*L~pM%dIV*%S%96FnSo&Af%pwN@bS=bT(e)Bbv%8z(LcNmmoWQ2Dil;+9QHzGydU^km zc2owi4v~ZhG#OimM>DAcV+P@zACtaeZ|G5#Q}eTRT{)?K7yK0ATX6Vc?5(Of4TtV- zy1i~bcP?+?XWBb(Y3a&pF8iDWUzvzaZAUp?k=WeSdz_5eIxEq_K}LA6*cd#B zHhru|%C{`eW-lE(a!yFGjlidQos8{NfVzhU^Q{qJO&502p66eZ4JpHgo0mlMW#uTg zfD%)@h5y`=r}K6Am2^m|uxa?xJK2!JeOJWTweX{+Gr2SF57Y&Rvv1DTaZ8|E_jzb) zD>O2^-*W}){$V?BjCq3cqpxDpcWpSX)EWq2U}=br9AyL5*S< zHxO13-J*y=IDnlxw||c$-{{Lskr@Ao}loSt#^?v+_agJ z!V^vg%C zrseNVgWr}66NWSzIS0>A%1p`)0wy&c+HDW@7}o{Q<`z%VSXRQ07sA*z1W^51T&*+o z45o(wAd=!EME3(`=NVpuW3ChfZtHpD6=sdIr6p}7OK^FN#urjrCcEaja7gSi=aR+A zeBY2uo{|G3$iNlhS!V?d{R0j(LFD`gwL4Ml8%m`sj;EGuT&U=>I>070|EITsbu&9M z$h_d@iH`Xj)uRU41~jFG9T?VWc*th2PhZvT5}+j+DF0*cqgQJq_rM(BCSjEm2gjJ} z+^*qhe);7^s(RH-9EJLNq3Cv$1xwreyGo>IV%);8*GC zmxb||CZW|jll~IW@?FCFy_JL6-dQJuzrW%|yf?Qz3mNH`8jaxk{!hdII+g1quwL5# zaIo(}>)K`mR5G4eX3y!H>|HO!hX}AH8Wq$gaXQ!zzg<;d_s7C4nk|D+B0S7c3@hrfbK zMeHaf_y0~kEmxrG^u@J_8_w=u_f$}Io0QRQG+``&vkRm3205l!{4vxj?Y3*-O zu3>(>pw5vOFaPwyN24gwCh*l}3Gaj79z<}rrm*$^?t|?D%?D1eEJN>|S7ute*k>bW z=yLzYdWKe%Lh)s!HO#LZA?uKr$&rI+ugV8xueNGrIAwNPa|~?*{`@|@-xZ#het)VBzLI2eFIyng=<*)-wWl}?xpnP* zV)>v*I1ohPiMGEU(99#13_Jy#x|;5DpZaY0(?fNF>)3efkH;FFSxkpl66cAIAgtF; z<Y(#Twk7LhI)c8eE@I!jy*rU8cv^!1zL9O=p|YHs1mv?Yn<^_D`3oE z=BmG1!Ky#_YsaS?u5^KFB90Qo96PE=JTf)z6_8DKe0`cc#SqXY;fb;o)U~{2x&9oO zPpfKl8H7{0`IYc)9euG?-2FBew9|!VELAegtw{LZRi)rUm)#qsj~UsYISy+ z1jJY)K25j51gy%vt2>xTop`Ei8}glw5xjSnj%}Y5 zfY9<$d1y7+>uX!)o8#w*XJPlUEneF zv7onr@iT}M_F*JlF!Wo`>6hohCsS0`#Ri`&)gP%SC__hB^n_Z{&`lh;X18+dG(v;i ze_Al+nfq1>SP{xb7n<&POGdvZiT-X=Q7$bS@TfK=lQohYxfa#Mj)ya>T=8oERxuHZc>^%k|_WT4*vxaR~ZPbLf1do z3wD$_-rrw)VxvuV0JE3@1S^VycQAC5hMjGPRpKmbs~A<;#Eqfs*FxkDIj5T(Xvu}Q zDytX?UdO8-xw_hm`)s71D3vQ`E-_D{iKh=m?B^7AaQCTjoF>YPe$GDz#2x6h%wZ)bYS9?zd2Q#!|W->EtA?v@Q)XtP+QGB z+=%fkyvTa@Nee9IzDukQ4pTSL@evh*<_c8^i+CbC$A#5aRb&8Z!WZca9r3_1c8Z6> z=&{}aRqp|``UI8IW3rx-p62pUGn^Z8LkdVnk}yvSa2pe9E#s&4q(`JbumNi1!|aHwV0 zhN)tBuTAn#_Xrdy;yxd87@Uq$GG^R{o}rh>J1_Wk+5GIg?a9#XgvS4)>aBv>;J)u~ z+}+)+KyYa(?poXuptuF6xDuCQJ6fuBSN>C@Spel;Y954Ylo($1O8dCmrBl*m;ntCEU@*gBrSkcUsVf_}jI zYV`FEbz%g-+nJv|vux)66n1eopfGWTzKQ>n_!^Fr>o0UIU4&vqy4&C9UNw<=bppd& zuJ6@y%JPGr-P7RVbMobXfg?+Qee^cjI{&d<#m2EA4@%sJO6pVYG`jzt4gBa7Z2R(K zc{gpW4Ym6>S`GC7iTCO~UUlr<#Gq_-jg$S5AYiuMcD`bm{@wcp9k4P(6aV#8g0X4{tIseYhoN*o0niaAFxm!hPd(`!zqehq$HL^eC0- zCZmIzy+F<&vh2=G880+)lAffXTj6MMP(&S!z2>|q3b64{I{-tI-Y3M>MORJJ(gk*^h zbQJurM3U7g20(n%XsQ|lm*G{7aei=rCNjdjz#=~%Nm5JCRFO5QCaACa^Yp}2_@4Vh zn=Pi~XVzyrKy_RB=atV%byOf}j%l(__}$t&8sshwv(Q%fN28Wtaa2zX{%guC}K59#7NDi(B$?-SkQ>J?e6KM$W4E{)h>nWa_44z4EuRAJw}O^0yN z39a)$R$dum|B}Fjn>Bd9d@dJ65P=jxgia8JnC8T^8w8GcbgL6N_^GJaL%ICN?jSFX z5gr890^FL0T(eDw(k8BA6sNa1d}7S;FZeRM;&n&pz)NHe%PHEHUb^`3FdX5^SbXZ0 zL@EPRFPxr~beEO){}gb6Bpv zYwS)B$W?Cqa9}0NVGQg4JOT%7NU-?WU4eH9 zK>&8($Lr?;y6v_xxtQz4?E9f4+OZekw@pf6D3bkjg(^ZACTU|O+9{qutd)78iBW0{Pjl$$T<`T2EADesr1M{rU?boVl6V@N0&2Ub|eMs@DN6k&RP9#E-;pXYgDD9 zVeygERgv9=w-2sK3$H9SCFzGc?Ea3jW&?_J8yFJ`LFC^XS!uu!wm-h}MKXJch4BV4 zOG3^;vNDP9(ZuKo-JGM_WeATa7_czAujuK_>X3*S{w zz+n*O3A*?2Y3Zc|;a=XQPl?U;)4}6xmQKSb!mZ*Vzj^hdmq)1zho0HU)M}V=mY97V zPIsU9c_cu)9ko!-$f)Hi#yF|q$tgHpHr*5AZa8_g*lzskRxy}}t8efwy%UPHu9lMr z6`LshtOs~z2HGtAfYfKy7*VMR*O4~xE%4~=bCmF_#~$uw*gu^#pSYj@TU;~DV9oTR zX_}qZII4{sIBZ<%DKsw6Yv!{F6nhhq*O$e3DCIwS6@_bP0wWXaBmD88mVD1MK?Jwd zB;%e=L^sv{?HEG#Q#n$AJD``rquj$Oufrx`V8#s(T-v_(u6Qyg0Xc}$2D{a^hKr}O zAB8egg)tE}XZ6me&+Jgt&gi51)+CXnogg1Bvr8~?<&IdLLj_~AeBnvuJ`pzf*gimi zZ;^)`2;Y#K*YmY|Od1iY{}jC54-+cvJK&0r%89Cv_MYMG53h(O5S?RW6#=X8ZBG&a z@a@AOjxk>dr(o>i+Rj{nT?jpO7#LHRGUw1ba4FRy-_k`I}UYiZWdD40gM8 zIX%W#*8@qCOi6*^BBh|RNsgsi0&*G-R`W$uEBM7M6Kp;D2*B}4u?i9}vw=2h2s)x4y z8rBr9G$niQ8T*bw*9|3ero#c5wYKYmN52G5UF-*MwI{2OpxhOqFAP@t4&DAZ7X=sZ zCVqvAPnFNt{-NbNMy$qsYkaPQicu9`Cf(tCFxFAcp6C5(- zxT?B-EE7$H0|N37$w;g3^&F*FL$}4grK9X7+j0}=*qzbO%}x{{R|xK<<0dk0)OxMaKo+Oo)-1uTtKfrmx#HmgmEy86fnXy=bdn^_RnDDiE=ao zA06#OvNguyqR&NutFHa*f#&!UwFUoeJo@tPUO|5+owG2rIfT9SPV^tb>5i30Yu!tRw%$-x0=8Fd00l0l>t?3=# z91e1zu+k^7y}Bc7z-{WH8N|cJlK#EJ7NnQ^K}+}(EDZtfuOlZP7b zIz%}4<-`7UlcJ|i5Si5d$ zBJLYXKdKxw?tC`OeJk?PyR3n`!a$N2YO&7WT9;erM3YGfW}Q)2Sq85wp?M^wqi2CI zpBks*XN}ca6+E|9-7_}Yx2>vu@{KaKLebDLlh{t<@xv`}MR%z9EPRtr{E79_`LPG2 zb@b9&J*=p>RyNszCS_wDK2}cgQYm18JWR$(V*)d{yIg9awuS-0Bni?VKMAn8K5_5f z9Cfs_qL}%ZIZrPNYLb=7IfJ$5k=l;}%$yzJc0@jfE;K zD66IwT=8 zTnGHS_(11YP~GiNn7nMpr}fASUj2UkFb!>N`Y*}J5jwIOBDV|ywMJ^N$Bj=d}#k-$Qk|c?f~p5mJ_L+7Gp=SGo_%k#j0R= z8G&3~pT*R8IR-mnt?t=6TB6og|rI zvVJDl%1lM(JNMH1`g-cg-LK;xQg}cSqfVVj+7T;F6|-cTgE2s*iHb&{+#dcrp&V-F z3sqEv%hl^~3B4IZx$tYmf^h@w;>;DZe5uuZuMNAIM3Ez9zd`XV9FSGc&x3P7US!h4 zq(o+fRZgfimeE3e^AT44Czz&BFT+I!OzTlghB$dUlXlItF`%=+_im_$XQ4T7F8Kra zjL6nwW3u zwsN?B_I?Tee)vX%o%(dJ;pU8S#$9?QH3a(3 zy=EH^zU?>Eb$PGKAH1;I*Cyky?sN5O&lACtmr7C2`*-~zYoWynzB9g|qj$Yt`1%#k zG^dU7nRCu&$``Tdg#?}>!Xa$7E64gfUkCR-P5>y?~r4mg~UQ>O{WF zB~iZm%~ZDvExLog|JLoM3SPqO6=Bg7hTmj-{!o?2W-$}Ez*NjV6l&T0DXP_6lBXd_Vk_m&}iN4dHbm+Pz$dLj>2ZguY zx(ElKQ8CaxQ@&iRAo_NvoYXOKacD2h3^pF)lYtCa;WtkCTF4fYS0m9>66Hvxec)F^ zD6um&L`m$uF6n;LPje@tN;V}V{z`DqN%-YEj@hf`y0BJ4hz8EhF9RLUAg<)`w?F2b z@XYAVpu)A9!ZkB>nwi-d3t&!5DOZ=}dZ1rWwNqZ3>lRZc$Ml6JjbQFwul}hYKcf&n z2N1%Z=)&=aM~gs61A;($1H+XCc}&a=w#y5I>u}vgtC{8mecNHv#YJ+Vg>U7Fu5#E5 zZ1(TtjTR;hlxB9Ndy>l&do1j*;J@OH!J$0lQeS}Zl}%&exqoZZf^>#!O#WxfV0q3yN-HD zJfg*zXoTW7%-cC?cf6;o#vkh!ULwLkw_ea!+-lV+15kKJE@Y--JMU5f5hWME4ac#kFH9E*WDnQ2&* zC`>hbU?6*_=8id4rfbi@k)U@3*1HekvURMHz9ogUa$V#se7OH`LbZD{v(>qtfmlPz z`?Lm-&4pR}1hHSnf}T&jpFg}X%|SnQFtdM+_dm?>ehCcxef!bZW(pdq@62yRNJ|dJ zU`!=ben5rzQv$i^vGymBKsY;Pc{fd4F$Z`dY23{(5V9^U0F|_ z1e9_=j@~hWu((cTak(-W^3SHR4$_FT5Ut!hIUr`~!|-!)9M3Jb&rPk|4Qn;aM6h6?e|SgR zAym0pMz^ADSC0+|3Y zTn%AJ(A5jxqv8t%yCNwP1D`H|}m?`BD>>ZN(&#y1lQtw{MS-p$%ZST~4r(7UmF{tg# z48z-ave92dT1mu8F0M62I@eKDq&IOJ>Ji!n|EZ#1^2sk2b&aKBRCqjR2G?!)N{8)! zTnFMAlI&S+KTh2XN73OW0&eJU=v%=oJDhN&%w`%yzq|+8eO&DDaeiqbNn(clu8xWt zCB&Vxi#AcLEff^`amwD(+~SQ156!H2nOjzx37HH#*$14 zMVjd^>K}ERW?G5hV@V6r`ZO2A$z2)g{sA;jE>|Wf=oU~#Qabvjay$bxIL~0^WVTKA z5i0akB(6I7P}k2-c5#|;%^XwYbCQ&NtYhn0uFw}jK1r|uUwx@N*W%~(a>}Vg88Z8y zo+`8-J-i$&19I;FG*BIlD}x_08OS*g&(1hFr#8mtF%w!#Qj#~#EaKxjm|uzyyF(2a z5sOLcJ1VXZ$VK968)*f5MX8^Sk%>T=lfu^``|wRF(h?~36UDK7?ah2b^|Ajb`TIRQ zN;L`Vhzut2H|<+E9BMf^0q377y1*X26Q-o0Mte&}aGdaMSjPzCR&#`f1IWbv?y*@0 zr^eV>mV2Pvimnzp3XZu%Z?aO*(YJ3* z7-=Fjoy(9=pd|>U<-Q_1%DZ>e`RCV1E*PFC*mOzXOfr^eF(h_k=3tK#GoKN;g+{9U zfYQUxhwa}0Wq6Fi>&JE)zJfa^Bn{XlG{{pR_pdLJon$r$A}fwm;o+IXgs}Q(S#Otw zn`E`n4+X)-6%wR$>_uRtVz(`r_nXJ06c1HhHIJwPkl^}vNLxChKhh%1-dI3_tN|8G z3e{REp%8V0NoU}Us!u&DG*@k1p!y3f$&cM~LOEK+M*?LmT7?Q<7mTX71@x!sm)Ix- zJN4Y&LQS;!a%(EC_p?-*3Q!N8Y&vtLFUDVBYyfri7F=XLy!g^eux=0gx&=h&u&IbvZk6=djOC*3Pg{t1TD;y%*|Sm=KJlN5 zl3Jfr+W@;aIov6te4{SqBX?LC66><9;AH!LE=^b~3e1>IyRx9^z~PQ`^b#%B%Qv32 z*ZTt1KnbuvXkv>!Snu@An3}E#2pCoCE!tRGlIFO*^tCFM=KxE_0&NTP5tg6c1doru zt~HpjE>Pc|3EH00JoQis_I6`iVc|^nq)_CxL4?Tf=_Y1zRpu_GzlCu)xp&UX;XxCSN98qCiMnz?yEkk6#GJ8ytj7Vuxm(0>w?#)nJ z^-dgFOk^mSIsRO+acN-m5!(CkhIhH^{UP|tM*$WZG6}ZXC%?#0vT} z)rv>e_l5V?Zb(NJRNh%Uqt7*aOYLU?4LEzK!4*%8CI(`UnZbaCrOr0D{K)`152+F& zMp}dgg5?47QpgLvC!FPV5e~!k;37hWV6)ubfe(QM-GacS4 zrEHH(Xv??BW#;soXQVIxQ@fR_`=&EL;PZM;n!hoG_%!LMegQzLp3~&2S)MPhz&KTH z;x66w(^I}weNpJcwvq53*I@&?q4&moxgGJR2Ebc`LufFvQ8({!6hAFiI-W>`#ye&%$Fgw1vr)2#7G48*3CF`_iS4 z;pdPcD9xZLaSOJ^Co+zmG%)74C06Mw1IPNlpBZe`5*|r&rTJ`R6`f7?lTgkpmX2WD zu6lH)(~{F)koDMsm{fMh{QcOfXloS2_8D|UBB+@OqTGcXpVus`DQ!_W&oq3+f**_r zP!e9Lx81-HyGBL?Pknw1T~CNOIh7u7T(L91?n1GaA)<9je?NZwSNztob0k7ndokvN zs*ODj`2IVF0gM?emuI38SZMt1&)d${r+Ys{ui>Mhj(gZ*{a&@X?YE!RY*s33im0~` zyemh2nzsGPL^`(xUSgtCH1YZWNVb|x;-SkDQ?R@EFn5k5F_Je!*XU!2+Bg{q%RX8K z%_N_;_4YhTPJYvV-b*a?#Txa88^0qU3JkxQRTr32|32h}9pah({otHUGXf2lUXnc?2#ZZzhrt^&Ey1j#dBYk*@R+?d$cx4MX`7uasss4 zWO(RiFtv9XpvIMX5Hyj{;9nxZ(8>MFNH-i#0BYU)*)$Vs?8^u&AbOL9+{jK{ zu$vn3u)Ptw54W*!ZPW@dvA(gN#q~j|I-kwfM2>Xi5XX)TLgY1(C4|eLd3rT%-(g`je5GoY`4sN(+~1FSuAL93V=L>z051geo^vVlvH98E zusS93-70B2cDB1Vd1W>}Yrn81xce15YdXN8u#PM;Sg}9D8p@>#3ZPtXXjO;aCwYxu zOev!Rds=%Tb* z+r)Pj2Z73~I$8obHtuE!NbVUEF=s!0YZKRqV0<_NRdq4{AVCC0iF|yYKfApU&@ICg zq|$bSfG`VgkN;Qes_h@=(^c{c%RfhGM}`9Mlm8LsKXQbESh1X*ViRLsE)wkUb#Bt% z1$Ts#a?R#t9u@Zb&xziH4yUYoXenGK?^s9JVPTs8H$AO8J7LB_k>P#*jdh}rR@?hW z;iU~xI-s^ym^nrphzh6`jV|Attrv?SH<zNPN*7li@}U3gSDqm8{B zl+%mZ;qu$y{*8qVw;Wvc$hbYc#pv&7hw_d_#|Y7XO_>Pn>qyU4R>YF{KiDVMc_jJO znhN0+;iJfa+tw&dg8i6i{ER4RvR<(dI(`cR9i74DgmLp7_uptuE+_bhgya=&AXF7+1mVChhZ zP3QjTR6G4k^+W3zbOtKf969M%ar!zpnM0HU9sSKnHG(>a5ICbK+leDRy5VrPICsK) zR6G=v^!nz}4p|K{hhSP+(0%L_JYv-e0+aA+_SdM1cfMyOhDhKJ-ef2^ zfgKq?T7Yk34ow?wijzLQcf8#X`=sg@D^xReG%KnX*t&&5x9~?MqUKj5)Gu>OE3luN za_j9ip_N&SK?bD1A?JQJmnci{^FHH{$RQHWxu=XZ(W^0PTtx@JsGNn#x#Tl`vP3g% z5xe#`>}zbn1KT=m@Q0%R^SM7ar*4i($sT|M#0-W~15 z#3EljRJP+``-+0p7@q4!c<*I4pS3+`+}!;0DoAHjmJAkRCwxA(t?hfgEt5a>_8a}H z$%l&Ywg)`3U@4xzuyFXfjCpm5NVm&~$0y^WZ85yE<+le}1~S~PSAq7SY;{w+%rZ!0 zGua}7Of25D3%}C1AMe8AZqEWZq9uZIbUvh#N0cP;NA0z3q=116j%^Ze^Z1u$+fh7H zI4=0m+T?Z$hR#B}V^hbN<47M*F}9G)vH`+1Lj;o(T~)_xFP^God-D!7KRh2VsYghc z8B%>rmnq!VcyPTT!b0gPCt6o1aY_U>=2RmON(M#+U%IQM{i;f3KMo2CG2T#y;h@ki zA2R2!FVn(W^7Gx5#cF)^20-N3=zg3BFQJ|Fql>HHP&pwsIQNc9zlZ`CpQK7lxMT#k zbx2}Ur14Vo!Xc&7bNw|WuAeA8(Br#~tfOR1M6e@E>-cNYC0QhnwOVl#JvPXwBEb$m zyO{iQy4fYOwFj9UW{r@fgv^Ojk>N&V0~~1Uo!9gixTzy%h0$~oW60AUcn*OR{s(r1 zBisZC`!aH7*uK`m>kE{p{{V|?^)Bd;V>uYi&2RpG z5{@fk;Qc>kn%lp+@QwBA;SJ12wMmT~wP6Qkl1o)VX4MFu#uE@)BSw^#`rOd(9(nXE zS91g-sycz81At-GZsY>6CkKq^3k#N!e@-^_%yD*hIGBC^SN2Q#001Vu`r|aT=(fB( zd)15$-xft;P1tNHt)V7g$RNM3z6W4-_*zX}_h>*zBdABb7* z;0x{&<{6{xKUCcLi3^J>Z{X2cOJc4A5$ton;&3 zBNO8nD7$P>=&GuUd6FN)j`4)wka|c@#BhV2_Hbm3`vvG}`=Ul&tc5y*UFtxgb$qKa zIy{y^nAxX!k{^fuvW%1VRLY0y*7GID4l-!8?rB~0hhO6Urs4{?u}6cu*Wi!jO`9h2 zJ^c284Lb>!ck1XUfpKtnqg5j+^RmJyAESxtb0YMi9<6JDshQS4ap;AhG>#Kh9Bt;J_CB(ViHHTR%(PG-yPirk0 z_TTe@fKe_g2=?^KyA~A2H%+wot|x+h$KJV~%L;a+LCa3Jx4#))#r9`uzZN_dzB(OW z&1~Hl{;~M_SrRZ%&!XtP++C&VC1W3L_uUD;I*X3u`hh>hka+Qb{u)gtqmV*_nVB2@ zvIZ+&JW7QE2qr^KJ3U3eppVnVBgZWr1?^8f^dvm5K0u`UU+dZ^%QygvSO1c4XbOTu zW)}t`XoKWUgMnT|`;5OIHs2AEX3&v*JzBnaJ-IO;)gOWuRkol%$Rt00P8~Z9Y3CJH zu_1WF(;U(v3k)bo8eaCs_a2Cq;>6-Es0@e7(y36l$;1ZPB3!$O>8Mf7i(_$46oT!@ z{lHd0)5_5|7ZL*yf<3dLKpU9>3&Is#dTgiq$D{JO5j>A}j>3KZ!1yyTyg8m{N@E(v zt^E9yqXt}KD@Rs4uE@}LBZPOI?bC6U%oIQw4u0^2JJ5`Wd10f`^9jo|8i&}{dOy$X zN73oyFHJ@FX@LFN1fkraj;Y{ui8DEKMDk?|I#|i~-BjsdkXAssS%D5cbi|20u8ah= zdL&G%HKUbsHuE@;N}mD;df8vr7_20*PGLMv=CDN(k@`u}j?t*8tR@Hi+_M8q5Kc7= zSpH-=+)`olTJSF2V|mf+w(=#^`fr410|utbN6=wu>0Y?DPnJ#a-2qqJx2Al%*;Fa( zb3v$n_(QBU#Ch7o^^_|zX|6Qwa2&(E&?lNzS@x$t$17g1r>2j@6<16$ZsQHRd>>!m z@`Ww)=g%g@53&>by9sP@02R=5dR3F4Q7)#RiUH_-x}2#=b8AkAU>Vg<{FS4lC#p^m zPf2d>9CRt(U*x0iG~kgX;R#C;rX;^E+VS=P_EK5)QKspHao9ol=o$b0B*nH0X zO5p9cPq-g)^JC*V=@`H0r(0HgURUnf-%DDyzWr@%##@e@!|YpA;vn{BeD8D zn@$P(xlqm;K*k)zeKCu39n^XS@iii<{J*Xk_Tk?b%0E4>dQ(+ziC<7Vw3O5b*ONnS zNLcaVNF@QBL`K?Ybj_aQcK4%34%KE3m6@$1BRR~e>((KK&P5Jd`qh>rYVf^^B!9bP~Q^P0^4xh#095fw^Q68 z&=f%K4>pbPxCFOJRO4iW2Ih!@=?F`Xh^q>MmTJIV`n=ZvN#l3YhRzsOXfnGOEd z6I2}}zq~xeh%`9R!7_$4{sZG*8su?;r_&r6&N(eIc4~MOtS3mwKk!ffOSw$QZ!mva7*ycyi%K?S zwPL&Q&>*m>LFsvlOorb^OeuG>$-#qS68pk}N-@28K*LZ25&C%sv)G<3u7>`wv3{hv zcfK}(*N)a7Y(dS|WovE0?ocDjdCnhwwZ7jVEZ=aU4oO{cQ07(=5*}- z&Py}L;!HnNrE7GnuERAu2mcuBef&VBL-QbsyZolcM#>i(+mo?>l*wtdtNzh5n-y^~ z8AkqfIH;yr6kr}<2fnpW<>B$HQ(R9tlNUeNq59bi|`e}6Ca6P@=|-kkEpLgJ6Z;UNY?m&r~XTs%ezH&Mi@nzzjePO%Wm5H zlAYg@|LNUNcn|QOO3}!x>!zo-0A1-});+^`QiA$zP^xSY(6WGJ%i4fxbF6g)6BoYa zuW27Wmc3N5W}y9J+rjS_Qs8#0z5Reg_OP1xskk^;61tnU8gQX)@|#|CqnR61}!1B7826zH9QyAtQkAr%p(%k$7)eSMw56XhhUd6cUFFD4U3zm(iQCmrZ zpxUt^Xo#T6u-#t~-jl_&FhfEn0+15sMu_dWbst?TJ3@qSTVA%qE}9ID{la^IoEtqn z$)MTXjE0m5FJyqmaB7Ah5jpw8qqw?s3P9{l`s+bz&q;Cg2SNVuJCcT#i3x;mLH=^- z9uzeb6~gKKxeEL+RH!A_X6m^nUT({Q^luZ-_v#GuCS-caLex=*1Y`yk$XNzS@yw3= z0?A?_g_T+z5ows;!S?p(O|c}zSJRaD8ii^j6;X4KuRJBwKb-i?o;ySkV@~yH4vRim zy=9lKA%J+@;={0s?)v-b7#4yiY9ELnrGpZz2P+$0kv%hFzfVG7GA_@jmfJuMMAZbF z8P)70yTs{|Pn8>|*Pgo{8r@Cm9u!u=2b&rK<;PjGIN4hh+j>96S!ErSjo9|)P(NCg zs0(prI+w6m{USz5MaKWu+38Mi<)AZ!qZ0d&HZo=xiuZsU)~;j!&aF01 zo#pR{olyGdE_=et+L73CU2s<#{DUtK(sx?HX3h`>pZf3*U$ejXx|#VWp|5tC=sV5$ zP!}m3NZ$^&6czol;w5&iIj;g&>KGUdZcrpS9WA32f39v4?Q@V*>1M)*psJin3$`sk z4tUYWK_hyQ+hoxuooi}lXJHFAIQ=L{y9Y801q_7<&4CdS6?&t_)w7}XwmuHHPTGMA z13X(CUw>WewX~A$n;s=@O=qd80;#u<@N=tz7>+1;Dn(pJxL4^YNMcfwT&y z*mwhP8k?4?oHP#5loUe5MkAiQU;s}G*$;-}Nf#TKEoWkV(*UOZHaCWw66xT9r6OeD z?Vch+mL&ySxWsPg4Tw;zm4;>9rMmepa)|4>4!d#T&O%TSoZ<`WO{L#_=H1QVy)F-uhwgN7=ay}?L2Z=VOijxF`}x}Y+yJtI3tElF3FXD(_4KgYiVUR zg*z|MmO7u5R4pL0;T#}+$qF>G(@KnF^Lro{=XZGaG;fqUkBb8XojF28P&7XdnmJi% z2w6nb9(;ZjxjG)o-oU0PU+Xpe;HZ<=Gio|{V%f%O>18d!K}jNKT8?3+@`2UomFJn4 z?km{u-0M|!K5H4K2j(wMwA^=I^msZ2fWOW@h|X3s$ql(x3~M_f>D@XzF2>~4X}GaT zZDkYf8e0;(S}>*03F>T|RsW zJQR;M<=9u%X|9)IsSMK9n>6TYlMmD@S#c=vSF<$}t7(nD)n@24^$HW3eNBN@9yiAY zO%&@GH-CG9=*s8h$yx_LHabFM{@9OHB2VwVN6&CxC5+#SNk!wt1FAadrr~es=zoyy z_opJSl(ScpJs588Dbw~~=+)dQjwrnwn%HJ_!orAY7M#x2^jwLmh-rMr0#Pz4*1wPIf^Vj-2x$^c9I z==jKJz?XfXvWspe(EQg)WnR1zKu7F+qSJ{?O2Pzc` z%GfgxvR8Jfo}>_IFzw5i6zN%`N7IF6QWbtBWBlR9*ngVAVkx~AD1WNc0W5mtJxHTY z$v%B2Y&EaSo`y$nImQ&SPY#S^tIVHgJjYeBFwvKE_{Qp;NO2Zpli+MyF1t6k_#wC1 zxyR{nNunu7IIqD+Roh06f6?$ZCUz}==`7Y<+sEpt+P${I`*2C9&c!MI#L&7{$j-?2 z-iQ50`KB+=$MNoZnl(q)QuD2sNxGWnAT3AgL2zEBt}-xDNoh!)OTY9tUz(A}l6$7X zQsX%{%1p+4k+R~jV`Y0T!`!7|EDCM=s`juSjj!C*S!{+Ny5#uZS(+|tly$7r<#dha zHS8=xZRC}uNa=c?RCNgo*G~n;xhpyus~kU zDcTpz%T)+8xB0$>%F@c@94p%q4v%8JUmP}}{=fjpkF5Y^lXtWX$)>Y8n{m`xu{LjJ(uU0vbZQp?-CEseQtKsYkkm_bV9(k{{>ey_*Wx5o*{O zP%PQDsxb0($U*!ufcfAY4ctHD`S(7S=_&syOZsjo_l_EY3e8Hkkkd9!n~>AUk7kCg zd3=}e>&hguCbDDZAJ_2GZG0NfRGorXq|>VX=xS-E*jp`oEp9LOBy(exoeE!W1s2V& znOJ1kFUq?~i}+RDE-VJBDCaF$S|I6XW1+?MwrRZyWn*iDg9y~1GKc}5T*JuKl97gJ z6x69Ia6Am6LrzF(p8nB6+0vsiVI5Z+?e&WTMlBo#hian|F`k5y&@c`f7xuUGZ;yP7 zC9B;B8jucctVuJwDo*7RQm;$U2i+IFi5lr~4owg%}uEF{)gN=ytv0lZxGS+`^vLJXB7HLk-w8L|imPOn_JQo|>!$R`xI@lH+(>K`KhS5n#qb{yI_fxG zQNKG0pJl2je>R|BW)m70WgL&Gk%}1c{UFR?ku=Vu?Mc2wk!@d#@~(`X>$tYjAO+Ma zmSm7-oWvPN1M^r*pA^p!77D7kjgXtGgd7&ONPp{o?aNuLV|GqY%bFxI`r#NK{%7}g zUlklLFJSLw<+m~pz%v$OX&r`)GwIjuXTv*F@~mw~+JgyHP65ALEr6VlqN?_lg1n=p zf3-x1qXrDnxtN@-R9!C0`-sn@L@z2^A(Ae0T>M5Uy1Fj$nLE1!u@0~A#f3f=eFL3% zYq~pL59(s4*qEz~DqOAwSXMxWyC8e*PLWV3{{ZqFguU(CIoapnDg(!8eq}%k4~LJg z;q3wrDn05MFc7C;!^UfwbO3S?ZNhcZi zlUr?0l|@*b(mqzg(n@OHf=Qo)bB?|`+e_JP$&*r6<#T6vJI2VXly`y_kxc7ER5>SM zR)lRt2|^}`WUHnjzPr?C8;~o)_^e4p+K*JvJj)84 z!_s<$uaVBoRo9H9X-MR~4*K>91 zf>yaJ+a8_6e+4sYI{|pVd#tY9RUI;*neCCU;x}+YhFL`=C`(63%wt#7Ju_B2@mi?H zvvib@qM4WQ2|Mlz%#>u8mv`*D6Lm(1z`RxtKS$oIE)ED{pm*s`!_$A-jK_K^TNz^p zVc~v~4^HBdtI3~vv40Qin3ih3n`>&J`v1!|!3%e`g4bbnO|cqpXcMg^O%-WKj#5(x zNZhu>nLi_|_e1jwS)+? zz)Z_BNW+O5*sgpS)Rm&kg|5pQwuP*-VI*p!^x?y?2Y6W0UDK%iElY*KC1fyzj)5a% zjmFPT!46_9bt-U5kJmMge?T|M z-cak?_eOlfvV)1En>NWWYLzUVJZj#wM8V@0@0c_~;lTWvg5>Ht4I>}*IzXxpt{ifE zkPJc#oA(KOo;By;Xb@KPG*ZqVvEWG3|#A9+5 zZLP_~`kzWh{B@DQw{o7gM&LN2`lFVsn)-Ss*F}4prgFH`+JU#w1F;92Ml1bOWU9^A zOo9fF7Abp2U6SF*U>FobOc6@@cumQ~MC#TuQBLG(21-%|=sM(DnV)^fCj{BdC|3H| zFIhrzW|bFD~V{Eiyy>UuOLU!d!M>ZleFHp5Gb#Xfo-#6BKk8g>L zFS3tj;(-W%whgVoyCQk9Gzrz^q^3?+KpRmit=IwRp>2ZF4ky_X*$rvr?g&*)(Cgjgqs2M-epf15oMF{DTJK{B4X;HD8moRZ7a|s!sMl zKJiiZ6*U!7SxiM`X1b~Fx~G)Pd#MFHd^K*>RxQX4cBLxA88q6o|7s3C)d@khN0Qgq zk^^|u4UIatQq_`iQNR{^MlCH@!yakuRo4{k2)OJ;8irV*CK7@*@x*Hu!-;Q z?on`t?xf%rDWM4;CEKpZV` zea*@?w^wzgStz$k0tbN^vG(uoWZ;K?&X97u4dkpC%zt|nD?BpR)2sLwrSZ4dcZeXd;)og9|51GTedytt?_htn@r4}n6P^I*)oQc1` zNi@{|wTAkdo!bdJW7FLJ>~CbPob)ouVt+k7&}vvs>!W#-bP-!@@P^)Z(yRB|W8U=3 zvU<D)sl!L$pv1FHGNNr!k7l+3Q_T1GbwL$x^8@L^4GKzcMZE5hHM($HNe*` z>nD&i2(8B>)@AteXF<4nlfW;#(&^k^mN-%KUCww^Y1}Mgf(A~s?@U~D?0jC|{1uY8 zeCv_)L0P~VmD@;n;4!&OK@Mw$t~Qlzi%E4ahK8r%87jy-{P(S>cCb znm&uytjW*+|=pl#a2q}^9ASUfT(@-yqq$FF&D+%=q-3o)ffnO*W#9#$u!Ul?={ z(`)7C>X9c{<3Fd1%A4rJM8|&I(YvC&?-`pW<3y`2lBMNi%rRdq{Iq*)EI~<{j$erw zCdPZ3Yqa>AsO?eoq4j*FdJN?bwDgmyQ(4eW+q3_Vs<)17`u*O=Em~3-NVn9a5ecO` z2O~DRyQD!>a*VD~g2br7=ur|J zIk7IAMyrH*s^3E67#20M@lN2D$A*>SpN%RW0QO>mtIe$+_Lc^BbABK?qK0D~bg4H1 z4NChWVBN;opjANEbK7f<*qk_4MZDIi`q=Uur*lOuS^BA3rGme2m%bxs=qD6DS~9b+ z>^^U+YvPiafetQ6@gTrM(PCHqG|(SxvG(wgkPt8y8cQ`elXhv?me!E8$AQ||XC(3$e+z)wsMD~y!c7mGg1 z5~o&1(Y&70fT?3<2eECwS0b_+5`D@C^&PDo3y?}JtNk31rU1+rF~+zb^V(3Jk;!gk zWI4meCJuj@z!WmoJD|Ft5Ar-70&ovJ?y*cfeV1%-UB!Yw-!~#l0igou7D_YOb3n<( z0VvkQR1m*nJ_3blH1HT2L@&Wi3GOA)6MAKz?YWP{W!L<1XTqdQ2n(uyOqngsw z?+IHenQ(k#oKaCTHSnn#C29C%9~$b6RQMdPWx6O;zoj{Qkv>rbC+*qQ&Nvkq;BRnE z-;a&|)Y=ll7dfgGoq63;H$)cQdn8j(8eglq1q}KSe}PtG<&YFH_?;ePk*1CK{y;%5 zvHO%{*TirDanebvF-7D5UVXZ6&se?cmn0*3Yf`rOruay!upn_zn8woSPKPK6-HHx- zMD^WBaO>3uG!NgX)U}WvK?Qi^Y+O3GBq?#-Dsug4rlx~ph3WRo_rl8i-yI9yKnXjk zgaMV~_r(W0kXf3XnRR9w5Uva((1^bK{RefC%ce~fB6NA=lhrrU#ExO_+!po$F~a2tM8Dt;eVwjM-_VPD|9<=R{* zPiCW=^$CFykP=LF0rcEm{^ho88%_eI3fMA)DkYtXvdN#2`vnc&HlV72MXoJxU~I=Y zyu5cS9Tuv%0^1d=aH&*x0oU%pKH=*&OYlhitgzFZDHxJU0yT*rWa_v*|IfWHOA@O2 ztbvW&A!)Cw8Ksjf7+dIpFOlBc1(;IQpd0R7@fnk34Pjm8DdcTBN-M2Zmo<=BJOjs$ ztE`KTayXE+0y7#8`*i7(ZvQ9FaRvc%Lt`~eKEDVWo&#Y3o0>&4RG_#yrZ_xrir*ah z7p=Jtt&mz)vO+9m8*gKPJbRu>p>pK?W65xfXTIF)LioaV&k_9!ej*-MEV=He>Y6gYfLOikNETomsyI#ZD9uB&B?gnBLhEo!NjoRAunli*^)mw9l%E(>q4?Am+m(X769 z5V*r_fH;bZACrbEA2bW96G&K|oLiC!(6X~I8slrIuhKxl)wQ_}jk%6NYskh6Q6|sB zeMa80aXhM;)v~Mn?cK6pj6X$`S<94c)PG_1O-<9{-!JLL_C47jiT3KY(Lo zCkeH=a0^caD++6;F1WdAOtQfbGEE5#<~u1ZROp7*i)Lo3kT>v>6cepb++lplGT<^2 z6|x|#ZcnH9W2dUMV6Gif&}lsUQsK*A2OrsPgNsK zc2ueQvczp9UMHK=r#|8qtL2a|LY4@WUKdV~_n={IS20X8_rvr}#{0w#ad5ZbD|l1{ zyWW-1w4*uad74N&%t4g8wPo$Y|0$7B!PNqT_f43O%g2^EEacfiQ714B>RP%8S$CFR zpi-_lORjz>I6z>W^*LC93!XUf4P~gB-u_u}iZ#dqbFkVXuPx2~BlcTcP}-qFGcTOx z*q_6ezr=w{LGy;&LHoV2_m>n?9k2hp$uZb=h^Fye;jsh=Elz1a9jf&7g3x0H6 zhqX!Jorlk?>3k+Vuv^wfVySBWyw4j(v3ZzxxbO!W-n{*oQXF?|bHRSm##0bskOGP5 zKuLGTtWGfe(eS1Gt;oMELX?de)n()dkqiSFN2WIOij2 z=ym;Vkv|f{RxdZW4uTRtKUiXW1wmAb>w`3h(D)U2m28J|fGDgI_Oy-SRh=OFuROjb zHdBA2h#40ui|tZ)T`hN`NIfUI$j#YLmI74TH^qoH%aBLQY=WZL0T~*VgFn=O<<+IB z;&z;-6=L*iz}Hng1vY^z*5 zR2+}$60WF1mFws!U+g+U)N7Fbnsc-XzchYv-Chs>h+&1CAUfuRGWIhr0O>uT6!kJ@Kx%Cw}i#CBN7It-bhYaKQ3hc(u?amUd3|;((Gx_`}0kAHv;YN zGxKc6M6D{AO}wmelkRi#Du1&u=EHlRY$amP3VHXWu}jx6aOuVd*&*AxP*t5;-n6=0 zxPMB!q0n@t;*;_dIO*PlKhq=Yl$JRc zo{aq_^t4ioE|`8?m3&EV>!iu zdb&7qc*fA=TnutE_4>Q$_C}6%1JM24DTCsWU|z+6kIlnCE{3b30ZD~epwK7s&W#1u zv9jA`Wfo!=A7x;}Oq}1P+JZjDdLh+RHD^{bP zUmSJ_(?@CjdW66ia{(7gmY239x;ML;rpIgj=f47)Y|Pf&<2Jk`UmRt94iqc+n^2r3 zyP9Lyb(2Qmc)QY-C(t3Br)A6Us=kVtr`9ZOIf-Vf8(x6tRNBLza?fje8T(!74lc~J z%?n3iwQ55v4T_}JoWyLxE1`)}Dp@@_gqwiyjilXnbl7v4&1SSlWk+($VoTpN+a7Fi zWk=9-6)-5X>gmnZlM35`rKU*IgeQE6VYtcwLmjG4{&wkU^&xnI9~&D)_3{6`>_+f3 zUsfwPc52kr4KKQUE9GrEK*pn&f(0wnp`oI^wvStaO6l2u?x)Zz84Z8%1&#cVl!a5Y zB*BJ8ePV{d=j=*Pgg`D`fu-eF`wQliyn&l!cok9@BmO3A(A8UY^hZMJZo=QY)Jo_K zH;zwQP1xRoR!CBBKkd`0b@Lny>x&iA?alZ5FNcyV&mz@<3e`B+C{lq59X(x-@bWTJ z2QsF@fJ1X4HYDf0cYQEf6L1pNrqQr@*JQ}x6cq{XUTeAVUe9b^necId)FNrsYeRD_ zku#j@3w=FnOF`1Ph7XJ<-UC@T-Pn#gR&s_Gf2YiTy-D;uc-XaWCULFegOlcZ;z)cdNDmS0tFufq|=FcUI z^f+E*!w5Q94w`|ow(0@B)%4slW@VEpf|!(FVukfRgj`&vr$R3R;F#% z!N{w)JTo^qJ?ERdBc2C(Cb8Zj?c9INq;%^xx)TRR3^iaf!<^On?ZXXG;(UiCA;f#I z5P$8^CDU8uT<=rc-SK%!{-yR*vkF3uDcWr1)lq9jBy-g6T;X(^u6P9o zoC4V{e>($uJF_SOaxEL1Rd}q#)|xew)5S*td9H@`Ro0Y}ufPNG8?$Suqvho;j|=89 zJ0BZDWVtbIRP;%i_eJ6^4s&ey$xTsjv($iw3R*}2vo2gcnlTst%jSd_X#|Z}Z7?!T zu{NzlpTcL>HoKbYPbY7Eop+yvSsoq{~$1227U5)RYP z`|5uqWz{t%3TDA2Uo;-S!JZ?-0cl!u39asr`g!+euCg)*7ECm_eEwj+BfL^C^PYyL zm_F;s>a~u3sPLGOwUX1dHHxH>Rl+MJvoi>}5M8d~8YQyhe>G3%g^(`|?Sg zv@Y-7`!2bqeTEC*;>p-&O<$3?dHaLH8wfv+#lrb#lTo78% zP2cL5+jaEhk9FfP%*P7_4 zqUF@*)R60^0d%T<$x`fVPi!gd9;*QlZle6L`X|JB%3&+&6=35RhM+hQVJLCDZV*J~ zHrk{0*BjZ>?XFw3kY63R$j0dTs771r<#ohI%QM_BX##Md%nyUgd=p-bO{`qdg8|Kw z?nX~u3FSIYkpyL1o|Y4x=T8R|ZhW(UP(=Y|AQ35G4aRD zs!2)Ts}QvIy$-C7BuwR}j)Cx|un5u;9N+nc{pIY2KlCB@pkFo_nzo{rHXC?%0Ij#Y zy2>qee-mqKcsy~PJ4;ERV)A4UUMqr zcR4Up6{p>KDFo%d{YZd$3vPy3H^NkR`=`!)N)-6&iI9Tk=gaKIV3*2Fazi{XLh#!Z zNSq#Vd}0KS@iBQ@{g%_1f89A=1_%PhWq!=As1d<1`OA9@K`9gnB5BefOhjgL6M?)r zF%$GW4fRSc7)N!qhVUe7y9jB#Y9}@T$kcVTUU@r0{=8z-OR`fh6e)YN`r$7s=63vW zhoxPvqG-o1$C$<_sK)09 zm*z=}>na+ADDL!QP0%YDE+oKxVcdwQy|2q;EXTcy9+{cQtO08|eD;$jaTa&l(w*`Q}YG_Q!`YhGb`+Ts6Z6|eSnCkm(^_(^sd?@WC)#TozW zvjiqMx-nD}&A9!fAhc~!1}k200Y<;@yI$u1?vd1!K#Q@Nea($Ia9LEz?K`S{}?qHUx>s-Iy3N zV3U$EHdo}=9&Crf3*kg!>68FkFq<|?5}PLr>`x4$evKZ7Zw6@JdGJ_XLbq1`vQg(2;ABUmxSZ_Q z3PoiD<)ye8WA}7Q-8qWHXlqG*Dmi9kD-<%)M>7%Rb}#Yo#9vx&JJ*qJxW}%EM>6wq z5x0sHUcb+z1?+(#U*c?pnYrU6n`evWA?k=eE579hwT0C4FmY0c_g$N zUC%Bhio-_k0rUAJ4Qa}uC!Sd8y62Q@TjC$GLIw5@V+X2BuDSL54mmZ&YE`9iLAfoMiOy272LY@&d4OxcK}RBXmrIbitm$_y;v{CEp3Md%}gvgb6X5 zdN4GXlvXxGkHkw=a}YgLFdY6<9xd+qQYofNe0T>QBQNE*?ts@P76T!fF-jZEF>qm9 zcaW;V@|Bs!g?N6Q;Lp50-g$Es(jj2MiTk6MRNi`aw^!qPW;ZXxf)}5wA(T8KG>8zY zMEyI$_r8~?thv>;8!8|PM{LyIojA)@!R%vL62!EacdgU~K6*!{D?AwDsPJ0kkJ_du zD<40-d)Tbk7bsA8Qp?HQ&&A!Gd=TaYrZPxwH&jp8h^1%m8g{?+$Q?p&zVf~})}i)^ zn=>~nxx7rUQ*9TZq2f{tGpu~O`QkqKDA@)?QXEFqA(nZcXt}|@BlF9H!5AsO-N({4 zTFS;h_#aCDhx14@=#Hlmjx_yf-BBpa&cq=4XRXT{w{!K5NL(3%iVNE)twi6SEQSg{ zOzTUPRR$!YD&!SGUiw2sx;b;lSJ{a(R*aRR85@R~UCiP@^PxNxst_-l zU`gg{{CuASBWFl@UtxXLMwHn6!7!_;iWroaadj`oMin^$0F8`+2SkiV(Cli7Sg}o) zY%Vo0H4a_hphd~MzN+Ic#PMd2k44!2ZQ%Fj+fjj(>V2|ENQO)LQrWpvDtO6&0s9Ug z13cJ4>SY8G{6_1X$=FOv%p$a$UJkfyF>CyR`w6|?eLxZjin6Y~yDz%8rU~He!nqzA z*Bv<>ceOG;&;fP50|GLsDx$g*eKLEL*Ge1s#EOvEjDrXiE75_d&-nKc^2@4^4l$Ox z1oPkG=Ba9yTs7f9#p&FauBtNw;7OYDRyQC1qW`sB#q@dym!sIn;w8!|V}G@2 zgP+Ll!?ax3LN7}9+wx~11X7@}26Ge>{j!vLfVYgtdK#+fSRyK2hTbc_Xe zqw)hOL#WG&1^lK|R-UT=cvvjTG$QqL3b$;Vsa@c~&&v#m`9r22b;TiZUixf^!*e%r zG)(69O;zV{o*-u6mh_(}l1a%jH1PG$-1uIYtxH5H_zcX|hJ>)cOx!Q91GH4lMAM{I zxq~e^aM{C-*eEDm#{RFQ?`$-WQpT(*W7040GDk#T;X`IC0~XV04h-j0Shz%_;i%%< zO&e2%4SnU5DoJ)2TGr!mJWp{EafMr7pW?WXWfR+-^o+%LtF```Rff(y)_8Lg9B#9_ zx^=MYKTmn(;Ct}^V?=}Tt3;htUZrT47(HrnOy$k31Xs`hgQ))}Zs6Ke;pps%rD2X$uOCIKN+5y zzBRafk4SLVtf7%98~RA!LCjy`bjZFR>w`<_wM39 z60l=#GqoEkmPNdaxf`XJ&*`Y?wobstE&ZGvf~zUc^Uu#C=TallrziAlINwy$6|?to zRGhO+Br~g0{vj9i9Mpf1Z*h@av>b=vb+bwArcH(-FkE0tPfdMlrrK8JNfqyKDpTZn zufrH(R9x+am>A^0K8FrDW~4~JROXskf*qX=ZDRR3j{&Qs7p&NQPfonM2m9g%G@(fO zm3o4C%asdl!h-WvM$%<92HKsMq>DHw>?_{}9=!dKpZVdNd}e({nao?yC8y9V^_W3E zHtYg~q;P!vc`_gD_5P>Ahc>QR@^yGNBoa9u&xciGm)8;@PaHkINO=gY$6F8a3TTpa zRqn*JR~IKi?aPU(9Iyy5S8k5Y?rqrlWI$NRo1>S>xYygRc-b$1dwbsX#^)z3WErk2 zs@|tygcyaY{jU5`H#R?9sRdjS-TI35&ugF=kSLpXJ}#~@n1DgYnmkxAZCs==I85KA zBZxznDUfRrJ^*f861hmS$xi-~k459%udU}6o0h00_$kn1o2rLf>FgD^q z%w=USs%$QwwqJi&R8ThG^WP`RsAW^2iNBjZ#-_}h+@h*)2qhqGmQ9251o}Kl7&gIT z{~@%U5Pc#}2ROxJ>dVv5ZFe+J!*>2tkx8za+IMg|4g zFoEfoY65ncUzuw*(`)xi04N_)v7dO>pMy6QE5ao=$V_NyK9v@`Me5L6`C%`tG)XUD{U`(4wf*vu-$m>59)tZm(scGhUJ zRwv_=fh*s>we#G(y{Vzk1J6PGs zVJ{{D)uZF`FPBsnEijrPP{SwlQ{%CpkqE!W&sQMnqP>uhg_q$p$M$S3V)mLnYwzwe zv8lG6eXQxCIsmR@qF@)696A0hkp!;Bms$Ku(#R`F(L}16)zCbZj5|;Bwm_abF}m#c zgDIMN4Ondx<5}Sy$*}?~6$86%a!-8WJU!GZG^b2%y^5h=F5E>^%0th!kb|JZNO){< zn)RHqj!~qLi*m$azuQNk=V2@uIBuve&~tdWX9*cw`-duGJY+R$SPKX4EUA50e4Q(S|oYki@O_qtQ zn;IJqrNDozyAqZ@+_>zZSf{MX+KiY{7&D;mM=uUvK-)uA?l%jS%kOv8YE~NdY{r#*IXusyNDbh2qXfN@aeeUHZwfEh zR+FXaGzAGb^VNO~slp(|{Kvx*EYrQ-C~VthG_&9puME2&5{pv$Y(QVPB^>$%;K5{A zc&r%{(-=7sXsFOP@uu#r$c6lgS-GGK`YxYu;qSrMF774L8h#yN6Myw0qr6 zGIQ&v)GStSA1JG-40;-BSqF7_AdTvK%f1a5AG(YI8lV9xm1-)yX z4)zLdxYWoRFZ2CRZe=`_j0}A~Bq5x}k~;kUS=Yi>&R?Z2XcFt0O zEt<0=x*)fVog?S%p;sX1ar5Jq`9$#t51v_@$P!0XXPZa9+rlaqmLy~|zH6;%y~m(qzbtV;emH~AUmq@B-J9?cc#z}w@d1f;{eqg6Op~VL(@6j7 z!sGpPNh3-lwp!RBNK5lbmR<=Rq2JjfKA~2eo9>2=HpP94JjmznzKy}AzX$HE-Z%WZAyBi zpfCq(FZwnBE3A+=v4^ISSEQ{0?lxbwJ6JqeMM3vB>{$ogF79OrmKE^{%NWRCa=Lc? z2R?oeRMqEiqN2z4Ny#Y9m?pe7#3~0IJScDS@KLpTbhkagjm09`#`TeZ-$&d{))5r# zJrn7M6ZT^z4}c?K-QxM*TG*#vn7qSn~|!HvA%Y+hXFDL+U1L6i%lfW#x$4HB*{ z59T6cizGxamu2otPtu6+8T;~iHW2ot{;9zvBU=9IKNCFW_@4N<4sRgr+=p~O{8n6g zi~=@}BQSUZ3xDs>P}SX;1@LjQ%dOTDEF9de32EbZu_zA?;HG6C-A!6WdJWmo3!c^M zr9fNeLKBl(FNiHPTI78WDMU26_1(}TuU&id%TT{Vpla17lqNr;O#J#9mm9g;Apep8 zlIC`zvlI-LgSM}j#nqn4HhCVW9IRA@`=?a-4g3Iul_Imf1lRBffx#ugQ-5UOiA4UC zxQc%>kVtXAJbJ#+%ep0PAIIKFZ?{*ulw3rL{;_H@5|go*fsD}8Ct0MJLI8S1lnann zRO9cCP7|A8dqKF1)iUdFz0^@)B;~bRm4wm~_w}=b!FMxLd@x)#Q2#P9HLYer+7^zr zb`!3cMYW|y0i*Q1zLv3QJZZumbp>k@$V;eCbq12QZsZ{sdH{UgEpKWYEu0mqn;U?anm! z?blxfE}9iLyPgRDc=?F&19OPD(!Zhlm#}EP*#b}bQ%9X2s*PGf3#oL~6NcXAo&v?i zZ*}f_RhOO8S|&z@K1wg`*}hsw%Nf_euPM5ZYg1%;PHy}QFyg45H7Ip_A8L=s*KPzr z*X8S=&gTM5OseO2K+a)85(y9_k8j-3R+P|MfEZZxw2Ke7C1_aKl)Y1^L|x8Kx>(ge z6dmK#B3^QNcLaQ)QVG|WaCcSJCwy8dCy}6B?Ko2SD$Vit-sbJ!mua}?_nxZy<=@4Z zpgw0M&DphRW@?#cX!(5xs7d}2C}tQiUY3ncGD)l#NPoSG-SnZdAA7RqU%hv9($e3h zx=sktCicS3Giih>m!o| zQkud}{|rO+iykw+T!oefzT1-aWOsFqQNlzGxBbduPI{^`zf>a=C`TT@9IkMA6C*?y zp;|LR+R36mioM&PyF`6>1RMQb%9oVVKvO}S`#!@`{NcqUapk{3J28M3$1+aTg15sH z6i5zfVsjMdnrEVUkN_maHMbDt+TqKw`qm70lFnmTTqU%(=${N(5`P?>a;~|>Ym`Bu zKbAMd|2T6?|FWAxTeg|qxI?aRA*jLhUMOoszFiLelMOlJzkn>G0Ggt;!6FScJ^ChH`R z$o=-_g*>KzN%LXw-T{?))?Qy;21#x9?kBu@`V@@cyDf5N3ZOYJ&Qzm-#j+{m><`yj zD{X&Lfu2i$OTQcrT4}$ci$VP{ExhmI2{32t}>1kT5pmgSL^EV zT&~9PFUgPqClBA?j^X(>?~8>e?JBAM>>NMIt!U(f&QEEJ;~SIaem%}V*nSRF#j{`i zaJ1c?3@MI?C-dFE>-G;dRqGV;R6u|t0pI!)e+d=4?fkB$eRUytYlkcaPn38i8p0pd zuemKOG+71Icfc&Bfbs!GNP7b@&RNBh@Pfw9w>0{M==a7n-Z`6iS5BQc1=IX(7{Ti( zES%w~b8&qUPIYmog_}o4r}DpR)|Rq+41JWX)GE$KA0U=gi{gx{>JcI{XAq++d8iol zB9FXqG1cCqBq&Uaq)|u)D~{sn`TBZxCk+wEMjw1Glbe`f1QOsIH9wb z+`!9yXuL5;gN`3WB9?;?2L#Iq++r<%i%0C5GZ2~zzmOXs^7juqzfVsj;?P;}k^39} zccT3`T2SK>{WLe7U#*W2yV52udapws@_eVX^z(RVtR*gn-jtS^&^rYw5aQGI7Bm!t;n{azLrrv3%HFzpfn&SKCPm@qfE#s56d<$!}HCc z;92H2&btHKUfQFHgG_aaejDFPf6AdV@JKa22O+77vM45pMizhLgYB?lvOiXf?A$Vx zxnG%3yeerWZf9RDB>cy~m53W+!#w@~Kp5bVqIPjFfKHO(mxjgSry;8|g#Khp?gyf_8vK#reA3G{_&= zIhFfX;}~wet`T)z282ZL-IAqqT+rLQUxez(C!cCgVR4Olrw?YaY^bHD3&~L%Jn*0I ziJo}`SS#DT=Rg@krT15AMV&W9EmYW2Wn|`q=pY;)U&_u;4Z~W*a4 z<9I4s7e)EnHyj|H&Sbs0ktJ>hsaxO{!;dy)PZ9$r|LHRcw`zvIseVTF>Ams&w9e`r6!aB`}gxc$&b%inPgDa^0 zV(xHxQk>3$a}tLOSE6`vC6cna2gnK;fkQJP@Uv+K4As#8Rao- z(S|!Pse=0ADtyyZeat9+tJIOBXybx=i}RJ{SnPZBX+k&RK2#U-xbBn<1ag&Z7gj;A`nf9Z+)&ASPH47y<*Gae75Oj59k&!_4KwOf@;^5y!{Q+ z4l(O;uu7bekUYe0zxE1K_v=(%Z2{6zRroSO$*L;p<0I~t#T6dh!1CF4*7+S1ufGpE z71=P6W5j9q3?d$ANhtLi%D@!NEBsLgnIq7&PpRD!9oZTVDDOy>TzZs);t(tVkf zE)~raBPuf>UbeOApK>_rWo-YefHCaD{-u4D4gCS=Ec~kQ8G$$AdE|R46=j??qrg4H zUpn8mAnBdK@Mfh7MwsxXmIf(BTFAb}!zrFQ0ih?gbt?9GO$_(E zNoT9<`5qVin%~}iL1L($Xj-o^eVa;?-FYh&_ZHWwQ+5TYOF*JQL++1soih6pv-YM( zZL|{_GvU=}#D-UizfO7;81~l<8tvfAD6NlP#%5`Z0h*ibHjH$aY~>f?YT?Bl2(vym zLyQ%sidv0WPXHk%$9x6XjXfXd!C+!6arCO~M~_E?K;lgL8h-HClDR-B!+yXZuvJy~ zqu+&aMo3FYSx?E-xF1OjYu zm*BmKUOW4)>3erygN&lSYLqbssSSLrpV6!K@TX@CcH7jN#tEM?&g{q74U z184OmDK4TU)s)1ilGUt;?B&XM>C2;~=_OE+p2En4#(S z52=?rMtwgB1C#Dm!OGR}Fo>%4{LeH8Ze|Ky>t6=y$vF1K3VDKoftnQLqfE35UsbmC zDUUx@!R(mwizib?lR`-J6<`MHK}6il(HcyjA~X8>%T7+^dlOw#uqI(7?=qa#Lj;OB zo^%h*OBUNrJTEy@@Y*!2Y%0aROMfP~0ZOSNj56eS^$%gE#Ix~)T-k_|%7Pj?edm!4 zs8GYgNHJomqmG$P}|LL3oddaPgDANS@-XD?E!&ki^9iVXpWmQd7Y7_Q0x-?>)0 z#bikF>uuJ2i-HO6B-A-J*l*J_FGQ147B2@(aG2!o6RxyWB9dlO=IcX&kdIU)WPcQW z6&x#S8>vDgV^CG1_xqI zzr0nleV=I8WIQqWM|gQp&nN9GqJ%RwV;o2OsBupDsZPU_*EwPpAl6=L^Pc5qB6nM8 zV-+$e68kh!7(^kpsG@L}1j@b$ZA^90-22icR+a1$`x-*W&abb~v`z6G?pvOy#5`y+ zMjpQ5#w1Is3;6>wRI21Sh+?u>4Kg@n)^`0Jc4`&htL8*p8)~UzgsDF*X7kv==^z#5ER8XztrRKZjAmN0dqh57IsL zZxEK9iHi|6R&ESoLe&t9NzroA7Pr-0oK1AL5iXi2 zg)Qj$kj^IZygM;{sphAoV7PV<$jDNuLGt}rQ`48w@9E-i8`DEj9Dm9=@Wle&ydEpGC zll8kU24R{+BzV~T15tRvThKiG(TyaT<7;AenXJmcK7{;aP@G3nwx>iqu|}5AI~gw z*b{<=DTl~lk%lxefJ;tz1$P*R~$0e=U?+ag$KW; zUu6HWE$Q4jqLvOZVb%^`aFANQ-Z4CU-~b}6qda=S%WbNKU@WLZ_wRxmOBNur^BvyC zQ52>cF0pv}J)7qLR82axL5*&}WC)i56t7vc6{YUCZwR{tVCiDTl`9c2v_kA3MAV@1 zE@{!S2AJweo3_grcD?+i`KP#15VdR(B=e3k4`n?HW1Q)V9G^qY;R7TjzUeV{Tz0)a z?G`MqnUkGF9HlQ^m+|vA+T1#@vGFvvE4I$Wrwd9(GzAJlnWzy%iuh&wqZS5L2 zz%SI&b5ZQ7NnL%hccx%HDymh{SYtP6xwYTCf6sIFKF)r?K1&QS;}S!f{+D8Sh+m&g ztfSsx&mhc>zANx|7mE&D0#piKHd`%Ba*Cx0IImAXv#eB z<-`!H;*C$D!)5V90Rp16oJJaGL!vr!gM?bdu$Jl>!a-{TLxoHoC{8H9MHg2dzF!bARC-}Vf zw}ZV29xBm_*p{Xh;PoR+-poX!KPma1jaB&iKt zs$+V{$0=B!HalU%-@`&*-!V`X)Gx%+fS&wc3+x&@5n~gtc~Sha>REITa(LloJb=V)X&E;)*jRB?EkGS z*wTTd>im#-vx_3(z~D8LQ>#c3Ku_}-h!Jc55C z&S3xr3A&YLJn}3XhDCBx-TY>m#GB{*!qfftck|JKmJ4aYJfz6$!$&IUeK>kt$Cids zcktC4Mh#}uF007NgLK@D8|1UddtPkagDgH1u}K>H^0sI48;{aL^mZVouKY|W(t05- z^=mlUv?N%OF$&i)zo&+$^cpYEF15l9mPVw``-kXdy!{}g;#FpNS{m2D49PsgwF!~e zpm&cXPcaz^-mGIMoZJk@x%IpkdA{Jg6QkM1sF5X2n##{f@fJVUi-29Dt=P}YG`3ws z=0USYkGk;*qaVe_tA@bkBXx@NXbOOzg(AQzTG_DI+|7D-a19L!M&{JeR?I2Ra1`(k z53c)NdHHM2c&nE87JF3u5YXjtdp9txr+6guC#9$v)cj$U-aI==GQmNI!o}qazgn&D zPpP3S(6Zbmb^TBSLSV&>>%~X0?KHBvKP9Ma#SGQwACvyY7lB(TU&=8cV;nY*y)l|^3-hdwsAADof*uv+yit{zoGyBFC>Vy%R_}UA5=>~krhIz=rgSS}A;a|CR zpf=!96$F*n#M&mZTcV_#;>4_7h$E@rFKf*9yfw71GK|onEVH@bosuXJh!+@jXE`~- z86j}g3h2fM?4Cih@^qh)5XjTSQ-WW#;<72G+#NR$r>5V}PyRCmGL`rE=AAJfnMVk@KDM42f0&tm)yiPDEd1&(O!?e-8{~1jsqj#2s%Zr%zL{I+ARK zpzgCEiNC%=G-F=n%Q+pN*8G&k0|yAE;dsZ0E)CSYLY+n1P5mA_u`PdaY88y(*{qAF ze+bhh+pG{y)Ry;5XIl{*ni;Rg{%g`6>CEaPR}}&MVoMv)TKr9 zwH!6{Q-|TigZn~+QCikeJvX#FaUqwz{w4E3#IwgMrKn{1JbA(aymY<@Iq&md%~5_b zma?3^)4%avjD?vdF1c4)3%f92kAb+_)18mY7LA(2S= zFoZxLZ16#iO) zzM!@D?ejXugVL>^6^Im(RhVfSus0vLNNh+Uyk9O^)EorVvUQGb08TK0asyS-Lx`ID zaxRL<#hyc>|I@7vQ^egL{UiyZf0t-PO35)(Ki0YIX>}zrnV0LpwvqVB!EadX7g{38 z72$MZwXYHTybbU?4Jw0TW-0ceIr1&rA$(5*+7*zM_mVL+4fxzG$IqUc@iz1L@2W!N zYrKrc->C}AnJzFrH~G5--p4L4_jFWHthGL;1sJI`{OsALCoa(}%{V*y&$1{PA=?(D zkWH4xKyqKS(>b#*J%_r`E9IF<^^~P>F+|yBDacEQ zy+DZ7?g?r8)#^6Nr*_LUT`vx0&aURwR+cNVHZPSb6t~}Zbl!c#`PhucK!KwIb=Ut< z%2C`*s1AUP6h$d>yIS0S&U04sA?Etp!iKeTvUNN*quv|O1FSs8*)&lIeT_3wZ^;O~ zs~PyY7&>UH4y%9MWanj+NqoE~i63InV3Ne1nU96Uflwb?3?NG=`zo&Y&%X7(d{BHZ zuF<>4sso=J>WKxvV_`ptaL8y~3e3AKhM}BA8W9_pM?qRE;Kecq^xip@X)Fb&ej}oB zuH%!MShokZtdF{{ezCyw==9-3$jY8HaC)3wo#s%wHO zjHwu@x5B~-tTLR_BJ9%m9CQ`|B!rZMz~uP;Uk+V@MW25*Vf4S&#MIr&)Y~Sly4RjR z5)*QGD4{A`Sh~+p8(Wk?%yD*te%1fYE4z~MKNybA`=5ytmjvN=;xRjYV{Y_jPX0WW z*Ku4K#dA!R5y;X}9c}BBXHmjJzF2Exgl0;<9%yEx?wrt&G0Vzuh!tRY{Q0P0^8{L? z&7rtA^92ZeHVev2*I2>XzoODd3Yiq1MqFQ=${Fr=e0}6213&MHAKc_sGdhH5!f^h) zp?H!Cm~b@~J~O$HW%uHyFpkv2OPg1)EZxYOGD@w_*i}MF!QvqG8l3uPq(MlZQOnAC zK*&~OvdqlXETi`q6nR@w^HD;!H z2mVys5`;fXhryU?F~-QEkwLl#{l2_;VM!zX7a3RWa|w|E5SE+~iMRfZ1m7=|G`IkM zvSjVmXDsR|=Rr98sZ&0xGh|-!11C_P#+nzaHkB2jNuhOQ4_uzIE?A0H3nPm(6oEz# z2z}hlUHLb45t5GZx#eQJLnp&YKf12hTmqCe^CVe+D3}!5^QmW%(h&xw@ur) z@79mqBC(3t0kNF^C!t)XU8+f~y0H(P#|SU!5sxnHcBj16fs;zVXgN zZNTnW?;JQs?DiIuB1qy2!NnueNEdzcJF=1&P+iaqoVTSU!2D!vPPS4M$-Pitz8(Jzn@LuVNR|i;@6uFg=tgHEXBAZ=pbJ$h z232J;RyZjoueA$jloyTl=<)5`rJU4CL4gdmWTQ8Ant*}CR z^AeOhbaul_o3%Ks*XsMbqOw_0R)m9_1_R=Uc_>_5s@`jlUUKJdtR$N7X72piCY=XI zdY`7tulZG)$oALP>?uY*l>0V?%55bYAmhuT#lL7{sfPbsuMx^P=Uy|3{~l^`W>Jby za^D1zh+!^fJ|1W~&l<3(EXX{3NH!J+a)J83>51&%214{}CK$wh&)v)U5JQzf)R90F zu;gb;J8;R3zjo)9?q!hgD@=s&Q2I|)SY$aTI`JEK(%GZb=iJl>HsAHIzRx$z7V^}eOrB=NK(sn1Xi{+~WaUM2 z`;dW1;d|(Ad3+0tA|D*y4#rS=AMK~A9dLX3kDl&}8JEWRA+ZDj#4P9>+#**vd%TwygTYlpH zlvXN@x~!7VqtQA#n8ubUsiPymqf&Fz`-}|1+_8U?;5V8*8)3>VbtX|jx@g-5jBx5- z+NaiH2z)Ib+s!T~eQ_zvT0zIo%B*T3?Z^WcvZbs%gDA<<6_dX(`n_@5QO*`cO2G$a zRKeTl6mMuPM*!QR{}Xp*afOC2if5`}KpVPxtGqvuIv~PAYb!{T1kIEA$m>ZQ9}Ef4 z@QLHhB83lgoWY7`Kg-4PHSf9<9UTb|@E-AFC(|NvKKtGPrP-H9CndL|P^~y(nvgsoM@*6? z#iR#~n0R-vFMg$Uo7l{5*WFY?Y|U26l0 z6y~vt$!C7m8wADWP0DyK1pmK>|NMlj;vtM$3sTL;uInf7B;T~c$qR0fI3>C?Rz|0_f?r92 zEs5E!YUJhe5MP#z3f?&76njoMtNlLZxQm5h_@|1qBT2Fpk&FVxg+R%aR3IEN9&u#Q zlCkwn;t-XH&L;w)7Q1R&^g{oS^>A>i~OYQZ-d=>cqDX z%(OiRFS(X5EYle0b}T9l=( zq>@v|fr%zg2%OPplv|>8daY;h1DdPD0a+CO5FR=u3YDZA4YE(*{`6 z&D7o%{0^|mnc`+mbHf=g`!z` zvw&+5Hj#7KjOftoS61Iy{D>sJ_-l{nIV5UWllqab-X0Gga+rk=6h&FpsY7+7j z^PiL`wVYP*F!5*N(-MBdm(1ris!INF&CRm@P3)CFLhP-AhtUpb_0Kav#^0-B5(t`> zwZR}p<9v|NQrcjGsXYAml#*2{Ce2@qtdr18zJBSNP%vs0;ZU zI+ZFHh*zreeq~qpRsbgz zp(O)Hd#!4Qh|`FD6WHq+;}r?-cI}_Cdd9N#z_Zq2dIeU0hea)ll&fATOnR_N6_7@d zJ62JOZb1}Gc$M4;Z&R*1ep7 zK6@-HZ^Zi(GcK;U-I~?*%SH} z-=kb{Z~=w$PI@1r6D#4~a`jBg&+;zOfI845_~$#mA$E%0YfcbzX!x1}XY#-RHP z#e5mRx@Q3xj5E}$FA>hKeOCAHx)K9icST1G99UVRLq{Whu~PILT;#$chlE$iz`a>h+Dts-t@+KfD17s%BK@d!OhV+G-ki;Vt52~j8+YR$b-!&5o6OC{H6~4mj*W?> zvMW(F%T+itNTuIHZi8F@?X&snYef%^^xAiq=NQV98auAOWopTG;%p1h4}vg~&d9@= z6#BYSOqa#Gd#Dp8`+Z|rO#7vgH^YF;;OLCU~R(7LvBog?&|idlg|=jGa0$wy>ftjGZ%$hc7CM?dDXjz@6 z42cW0-TlnL)y3SyVXopLVawXUH*Lc;zTjWxP7Ii4G!4BOJiq%a=OBPny>st}K7W6+ z+bm>$ASQh+o>Z3|a>xS93E|$EA2UBz8uyv@a7ucc`4Igo}<7q>}FpHk%Sm8W~6AZ)bQ zNwi5bu?`u4e%l`($?!CH2o8{HXF3na^0%KnQX_Y|PVvi??i~_ z1r7HsA*>-yFF3Ula`w!LvmUqxeJkY4NF~B}V7F`#yr;m3m#A@>ct`6LAKn|?a?bPR z<7xSwaJ3iWqiziOP`c?+zNosR1476;1WjS&p;WBziHg5a`B|(Ll zAnDh@E|4IBHM?X!AACvk#e0^~DT^5s>}7hkFbX3DrvkPtsXrneZxLJfbxg`!Y9d7g zxUC&0b79GnbWJ|m)XOW%#I$!mPngqOtGp_exitDcN%upj{Dd=@00%;j>iFG z}EcQSnEn$hHxIT$Jle=x8Iz$hNY^cySFtbh9x(kGC;;LSwC7`lBx{5_jw+< zNEpYF)S7A{)5CJbKVz!*OvQ=9Bro zD7AwB$yI3w5`0lxA7hTS6eA@dXZSrA0!CvfS0JfHA`s(p=G94XTk;!*>er6JQcR15Wzpfx_&5Hpl#e>anb!%1I^nisKwR z55l4J?)=z_9hZ>hC)pLOzU(et(`AVlrbM?>i;Wi;lB@XS$gDi|Ej|6zm$dtqku;!o zV0<$A;x>IE2VA>K<5lE3A2wG>&VcLco-I=!jd*!6bGcFjP+CtM4l<&t3UftQ- zQCqb2H1+8`Mb6w8!>LXm^-bApiw3{ikOlP-tOOI$KuEQ&y04>Z)_(mMY`rx5Dtu=) zBFZX`%3ZP&w~bA;p&jx%7SOM-pQObcCnly;H7jdz|6HLElW2QxrUCv=<%f#AoW+30 zg6~Q)lP=0xg6gN@@8QGJgyZsKUvj0sZxk*z3*k*D+gz|6p9E6yYJ@YQzD{9u%=g=# zJ%3k`HUwi<643ZNT9ujSlepuj4lL|4;In^hNt@BiPwEicyUm#w=zf6x@FXsnH<1j1 zoky&n*NmJp73x-YPB~@hF4v4HaJCvb5>Qqd{^=o${Oz{o1RqT`5F^$>K=&-tP}y}1 z&7$)QtX=9bhdjZYa^&0}{Ld7d|M+6iN`_LWEI-OSKHW&rU44}0@2V(QEDmb*oS=z% zM{tRXoBF5P1OiTI{`u{PEPXS=wyzG1cbgeCn%45DW?3DIx&fF zn7p?qxyL;qS*h&x0oH5Mq*xTal_!&{Q`&n{)x%Dw^ z=aiEJGA`!&*zwOnm?wUGF=oDe?^RmS+UYlHoV$G5{~y=VqsIVpwrr$pw=x`NOX5GW zqqXN}oOy00&oTTed!~ujsD%%@a+WczofszrmIpr+z8breUnJMFV`19MqsQG`|6cLR zS~AZkj=+toUu!KRsBN1kQMAKlY1&%!BkQ?RckvqU8yKE@y~e3S{)V>uOTs$~^Gv^| zvXnOVZ6u3j=+=HXv;$e|E#;=CWUUa3ZTK-1(MS|mjbx5+axh5IpmAQA(JPA>Yf>W- z1VT8kjfI%>Q(Y(H8*coDIrRSrHyp=iU3FvIaeDaHsSN^Bld~;frh}hgJhi17)4`=& zVP&#WB>l11A~ZPWJrerzFaddAeBPukSne zFGUxrh=wnEjdnbs@JgEf+G&%4OR#eWfIUZ*p9|UKKk4|Y{TLYYc{6U{9FpTJbE&6oR8mo4p!~wwmxZ%z(9zWM z26^(Wl@eEeQkrc#5YV&RYm->_3hBDCF%$7Z<|7d|GoAB`{13S-rcd`bI~iu@^Afci zqOZxvPPe6TN@))@e#>;w>W>5M74d6DXcKc*0cY= z_-lsBXOX4|3i7piu^VN0zTHU-IyGNz`nh@$`qLL@BNG4A6RF&1He}XsVMwX0Hs9Cu zjZnvI(8xQAn7xdwYghi@ZNW$-$|@4MJt-YkqcU28MoJ*afD9Ipz14QNGnKc zQ{VLS@8%Jaa{q`2c}1^?|I6HJ2I>}f-Y80T@cE{aM2fBMAL1IEfOP5I3F0R9AelL~ zf~9aacKuKIx`u#Cj*d0pxO_~8%6v7X^yhF&>*oSWt3286XA10F1@Rbd;h)$MT^+t+ zeRJo0h|sj2sTVsLvgc%jX$Z7)+>+uc|Eles8SzWM`IXOQ+q;qQ?pfsPS{*w8vrX-+ z=j;UVJhknTI%SO`FNgDzAzXu*iM0VA4!Pf?mE*FrHdtgQQb^E^RzvTzGK=JfGDVE) zQ9qL%Yw#FqFdUCBXB~0tC1mIt!FV%tMkgCid3DUz$@)P#SDzr^;2xF3SE`b=?1S!~ zeUvE^7}B%?RXN%_f@Y$SG+~$}`mQ|8Olj~VtDYN6AlVihg4{Q_@6Q6Tu_@Y}0@}Ah zN26Lq@`|1n&O?~${lj%}%umxx4rl2jl3?_4smZ9eN=wO^kCybNCpT+#!vk}rl2h*-!6K4iRi zsh~Ov`E3;8qym8*VujV1q{P3dXn(XcONxidzu>{YZ1DV$c&TtlAzknFH~o7hDScBV zj-cFDm1^P}^r0)3kIr<6ULu|zN#~2Ka>@#PcOV<;ftt>55@smsHv!v1Jnz2P31yHh z1A-{l{8EbL5r3SdebDm%`+Kt8`yu3L{6XY)zxHu|-zaB3XD!VR5}5Yt zL!jezTlD-Ru8z*s(rLRW=S>mNCS&P&!6uuOb44c)H(OlcE3_Od6`E!#XN*SRjvLa! z1&nL{-L~=v;-`9N5wc7vt#JD2r1%HfFX^+67-~i)TfT3zN11W`T5>2Un%FU9gaymt z)b;K0yRk^%pJR7GsfjJ03W+g$9WP})21lA80jtea5D|@dtM*j1h5QWBO+bJT!`n8% zyrdn<*~_NIwZx$`5=DubVJZ&{1*fqIlfn(4$N$)omde!_$0qIXdR%ciE6KFG$gnwe zSIL!MKX=WX~OLGN4^7u#l>HFG&{X4pO5>%kGr9*N<+!qI`Eq|bBbcB zuPV`%T*b;bvvs-j)2Z~x5_`V@K4)-Tsg?ZbcM?;p#n&?QrM-Xo3%!P}-SLX`aiW+= z>VN|cqQ>9R^>wncgYz`!_so+Ksl*$ct zn)2Brk6&$`AkWqDhm~=hiYr&t+D*6ngl=BhYNl|!+Bcmna*gvLseC_9BMX!Fqo*Fz zBRjUIy!%!E>=;dxqKjkK%Ivq2Ege-|P|}W@R4+MM%nwIRF7+*BE6Xpk`jD(OC&V_E zFyX1YNHBMP+oERvJRrSO9=UMnv^l~+;x0^LOuqyM|EgF&enDt;f@l1k4o-js))qsX z_DC-vsyR_g^t`I-e=My`*77`q5qEdP?=K zN)9jfB@J7G#2`*LptqC}KY9LqlE@Z7u8{NnZ}k4t`X8R}`PgS(!o8g^L4>nd8DWe) z)v1$abYSp37iEvU;~k)A9m&V}EPB!0qbH-z?Zfe#?``l$N0?B{c&N)uwPyZw&j2}% zKldYpSaiet&q)V>Ni*C?faaMg+9yVJu=w-NJPdFGj2P%;si4bMy*l}W{I5az04cMy zsFANfk*N-+T0Sn_u*^HXE+cJ>YOAN%^io@D$qyJ*v;8M8nTYX?L~bxrlNbCS#+h+^Qzf?#|}$&p=AawSWmCWSjBo-?(wIsBUxF(UEP zjA+khaAi~rN!2g}2aCk})F^8v6)(#KViiy}`1dz`ior(h@0xkDO~<`pDU5Y0?4)iL zN*YPRl>@m-aXdKf+|`c{+@yZ`@s9;w|0fq!$C>(s^O`DxQKJ)gP)$tw8`Juw+jOJ( z-27>7unyUAq0WTt&4(kN6Nl@d>Q^QS#>LdJisVhx?|G^3bj9eZMqLi!dAhq21_p^M z-@Zy3QND`mzki3IF7kOJ4&6q%a*Y}?|Hk$=;>*y6`qaBmoRp_$2F@|oS|ne%XDPtZ zm8*ddocPJLw-yD=mFOb<73l0E%P(R**oyVchTO6Uy_%)qm3VGd7;iG`p92$E)i`&q z8wwqz#T}K=$IWk5LSokNd^Zz>Gl`KmtM=RbMY({+(Q z3wMz)cx3dzJE6PbrsV@qvptkc{A7Ar{H9<(CnAI2?OtVBK*uh|U*MgXKETMvr7Yoj zlj^CcV~qBQced{CA)SQ80v%fOID>12B7>5AIw~EXoEE%hT&=uiWZouFlhK^9E_bI3RoOlE6>Vj zsO}6kAblO$=VZvV$UKSBlmcFG0!Q`CdzdMUZY&O*^Jsjib&4!vLN$-PR1Q*P8% zXXs3=S!))x(@_{JHoY5~m+3cQ^Cc?wB1#_d^*&V<&mmY^EjinBZJ8)N$vPIw%yz?k z%5NENM0)AlID=Q0wrz83&x6!x%=Hf*6gJ=6)@~inOwv{Ajh9i-J?&|P-0mBz{e$uP z&sz+P{6Z6oz)GDm{7rN>u5;Tzey|pq3B_Y>#vX#sE zpSq6kB>eBMc{?*tI@j+y|B^p#m~Tmh81o^FV4#fV+2{IhcCG?dBzbaM0yv$2&F&Ao zADZ{bgMX3#?u>{d=bl=>3kXU2k@r^2bM<^aU*;l=-zU)hI%?hjG=x=F&LZGbWCyFP z)=mj_V_}oObkE9&cpOm{S?j>pq5<~H&DN|M+iuWj1)QWo(MQKqiD~2l+!Zru1>Xi^ znyQk!rU2Q9|x?AbG>|b=;8e zUX-n~fOCux_-beLZNqTsj0ud}Yi1)Y|9;ER^+nCu)5oN<-m3f7C!Qxs$&n}W8mk{k z<5rK6pVO|^H#YN6?s3MOTXL_tJMLfSxjiJVpNdJy|6jNd-o5hj4a_B>ZThVPnH4=} z9S&A-TJ4biMX)0jbL1@ei*~lui~+}^yUm-)^-#Pi@AVazFM5!D0~xpYDvsD8 z-bmr^!2o3&RKONBA%idX;g`$BaNwxJ; z>UC-E&c9P{mWll`YJ4Q#Jrt|f``ytqm&4b<#blw~gWcEUPvOBov4W*&%9J57Lp@&n zRSc!wooUAA;(tOC(T5HOmD3F<$!HtPw|TG6dy`mYic0PZ6G+!*=0HvXFIDXt|K30HKgje7X+)bFIy za*>hV-NF(QI}ha7tx4BpbuS6GK94k#S=|;AI15 zOI_b~>i<59`z408sJ*DhZ3sH?O=JE82bnYy8+uFXDkQOOlllL2Lz@p#u?xh5 zmd*ymRZ=&)bFT_HajEX{=HkVK1f=qmI2XOGKZVEpbU!M8Ip7B0d=R@L)5zp9hn}o4 zd;bnM0E~P~Q@wo|XTQ;fAH_}k>Yc@iW$@7Y*UXkiPr1R7IDZRFDq!Rq>I;+U0(3$Z zeQf%^-+!9gUsfpQ#VwdctZ$gR4p|tp4f1sR&fHyXp{2> z)GY#eX6kRxLA~N$&)%5nq&H|TDZ}-MjHoDk2Zx>#L-|;A0KWDcp>vj2Ka0X|jO3_%NCTO)h-V??^uF=3+3a#RT zl36Mpa}DqaKaYN3BEBGNfxTVpYN6fxV<<6B14HhoXlJiV0cFkf=utc9#0SE#G@UPC z)HEweSJ%OjyDzlyDq)$f6Qb+$bBNbnqeAug&v#Y?ujq>n%ah+Bb;B`#FP{Oc<`06> zB?m*&CCAr2iDNFfQ1FwLEfyM(n{saYi{4+M{)UnS zjRktL#cWlPNZclYR|}fJ03OY9Yvo~@ay`?7(-A+MxL401c$A;qgI#rU5iR9`?9CM z`4fvJZjU=|HSb=1sjyI1$^c7NvwtyIKB_i zK7|&OQcv*e8h1vXm5U?1RIZ5t1;Ilo>+BZh+&?B>q*&$_K~@IJkS!8{nn^+1RrptQ zeG;+z2E@I-pHt8lrI*C__Rex{mzxqQ_h~a`Ot+(~)injD8E@YMkS-KVmhrVUrP0=A zj&^(dcz66#v0IbsS9?U2c-Yo0ium=Yy+q^p+Pf!#R|FxKIbC}>dH?va|MQ19rRn{? zMx*6o==}~iQ)BY%R=)dIz1tC*Fs83pFK|tkdbT&jxk#zm5t|?`WA;b{#vhXX)m0OG^3nI%BkQZ6g7pD)euZ))fmZUJX_a8R`uo+Ka$&Sfsj37wNrJ? zC^*TxArHIR50z>J{uFP`m@(@9tI{oZ>~){peePq2-HQC`JZV>UC#M*sQ-5Iws${y~ z;C?KO_%4LDwOb`8!OgRN8p-fcB5oOot)=oQ4X(5FNIGXG9chHT{9TvFnBiT@I@0Sc zGGzepVBuNK)&5}w*cJfT0XpuY1u1}Ox{f;KBa$41G^Blhy_QQCP+t|hOfzjHOX_?f z+PQGdwCqO~$N{Q)wO?%G??Vdb zkEXM*EHU49hPW(od6>6bBbPuNBR~r2K3{Qx`)Dva=ka)3RaMNOKWm)0-SiB@Srf{l$59Lbb+`d3>#VhL!* znG~bMf)OxhA`r3S`p_h_&W%^?w{QQR*vMTy?FC#a4V;Wk^~r(P&T8{t7&}1eve~a1*8w(aCO%C`mnuXmzMZ8w3*=~wk1bB5fzY6g4|%t4qgSbaDVlpG zYoiyd^fzBdhD&*KC|2Qu%-1^a(1=ksCS&#wVygoe{4cg<$#g2PnQv9Xlav}QE1%g^ zjx2!ZU7d1!dO!x3@f_LqeB-*LQIrr}ADSvZ!{kl8LGgOt?iwZ6Z{gQ&Plw$>>qKH- zyYDlfQZKKr*geXW%yK^@D8U6ZTz@SnCecieKmHk?y2I#xJm}^MsrA!7E zF=QwU{_aTIr4K&e*J(0jU1d9HU|lX2WjeNu-cj42ffeyvi@>b_a4U|YEKKCWMT_uD zc;si8oQoa_c>;^Ijz>bTgXj+h3XB4Tf2VS!iY@o$>3@)b! zr%r|#Zu+e<#|9a}bF?N@7@?0(3VxRzp`m+TV|`}Th$RNrR$ z)m;1UoOE(j-Q*=?bI!>r#tQFO9ghguH%#LL-?U<|1Ct`$7E7_NBg4){;jF0Bev zR@qfCF#U#!0{=w+cKAk&HVZWYD%EK;&<#rqmu7*Eu@I!KPOWG0?H=XHS&48V<>1~a z1_X_bbAc!1=k=>3qE~KCoW}{s5`-qjYbqU*A9AMgh|`(>{=)~xxo@QzJY&;dxgQSI zN{mD?cl{(&{J%;*ls$cjS`gcF%XzQu+qLOJSLwk|QE3?$#l)+e0SdMebm<#7plKyC z!9d-b7Llu0&VYEa=?SEtxP79o*X|^vm!epXvWlbNDrsV#+51rbMqznnQqnBWs(EZg zZI+B@MjCnNIs|uX4EAoeJ!}Ppk0udr1=oB0<)4_5AmUT+5rSU2CX*jnAwI*0Yp@q2*>7dle%eVYPTkK{3v0H zH$HF%WdfC+IxPUep#u2DS~+6ENpa7Fw*aG^l1Z%4tYg8U^tA(n%_huf8n5PwS|Exk3%|0Ns!IN6qtIBe z%R80tHMvXOHoMTzoUW3QTN{Fihf(%#lxp*+-{cof0)zuE;a5uMBuv&-KffiI%o;_1 z?EOMv%s9;Xi90U_Nfxr!MjiiI@PlW9e~6;-AJSemdQk;BN22{`V4e z-G)kl5#+62Qse1V@=?*h8`WDiIh954ovID_#J#ick2&(tC#tRW2Z#7Sw+P{HrJP155vd7))be^>Xhkfz7|69&LVc`2L2_YTv&Rz{GKWDqDC z`~kVi%ShI=46KY4PsrX`FsU0zirA6&CWr797p<&G;{!#pk7-4_1(zmJP)> zCeQL#DSyl0Wz<5~dHS=aPMU)GrF1Nxy&6NnF|Bq7A^QgS{xGC?{fhfg(>IU?A$|Aw zlpby%?`sp3^y3pis|rE8h2>SkPS+gId9=VmC*EcK!Y4dx!ZCwxyEA(hVBF@UZfPsf!w4=NVv383H5xB*b7Y-e&=F)y?gt82TwFfu zvFbWA1;Rtq__BfznuFtlZ!$wZtsP(gqJ8|eYlNS3usiGY^e6w}jeqxMX7FC-Z=L+x zbdqOT`W2nIQhtL-!GpX4f(0Y$zAy&GSI`HW!wBj0T>BI~RjZ7B1U53yJ=Dv!_Z58@4k>9#% zym;;>&rq(FZU3dO_S><_?}#r1!K!r4T*J@sa-Z4A#!>?+H7eSKF`j|1FrY=s|LD2B(`d8#NNV!W0uLg{IFi z{C^BY(DDGCAnYte#+n_7sGdG=5Yl#u@uNilV?4=G zesw$)-tFbf3hI-$aRyWZ&yper33cIm`{(#2Y#XczchjsFAB=xXxs$VDkZSDS(u|42 zpcya?`m@q4zJM`~GZUGuf<7nLVax5XpfXK9_K!;iGe4}!G$Z3>GRC)kxv~+xe}z+C zs!^GxE!-R+d*;(vC_`8u&#Eg1oIrt}S=#Fe&nniETCG@6C>)VPPUlqPz3x_H5=qG^ zYy}r3)dS5{y?4m{8+mhx?eb(+ISK4QFyvQ~7odF2%`s6$PH!(KS>F6!xczWeqUVJ`UL=|(EuEP?Jok^H`aJ9)llRs@rd5+!Il3YbvfnzLAB*0aXZ$h_#SS~NvmLz#N>*GP}eb; z3zMLuKhH~!tqV9hUG=o8M##hVjfv^<(@`q8GGAjcW2d;mVr;^f$Nr0k;Y6`yOubv;sj5q#;3hBvk)hAlPAtHnLjP z`DY_~fF)JLXBH<`Ezc>b8=1qHXK9z5!QvS>AUWoi>u%>+SDA`PtkT#FJD>PMY9(Yf z;AHtS(+R;)xpb1Z2-rl83|<<~eqs=j^guvoD$O_)u@PSuQ9T>x{d=y`-!949rXu(9 z1~+zAj>iRP$-CmSZqP)Y`09#>Z3yH4C@y5BeTrIdX`4yx9?fqi1YeMJ0t6H89w!5g zufrlEBQ@FtCjYOwp#B9nNrMO@lOycs)E^j|7|plS?@{GNi%qWd?Luboo8@Z`WiM(DB6EQG=T0?z5JeJq{g(cdq?M^;O4_i^3zmu#zNK~ZX z23yXA48#gkfRpQAV_L|fj|qHIXXFXa_P2(%>Mar)zjPt9w&LK6#Yo4S;vIooy|kcy ztMj&x*$ac+3gk4PA9eZ=Z>MXOX!u!9{j=PAfvR20$6$hZNu05c3OQE+rJCZk9(247 zte6?J_lIpCX}Ph%K_-TRRKc^e$V2TVuLUx-iMZP!4Z+NabG)5dN?J^V(zc2DOm&Aoi3 z3ENawI}$!2px!9An6jGh7-(ijWA?eP?6UJ;Bq{chFqwse#;e>iHIvxFskf zmAWu{yF!P_d9p=as@Rnrb_G#D_O&dNpF{g39F51(s8)mH8Ayl#Z-AU(TdBj4IcDw} z#u2|2mt*M%sySw_fIIAdl>riW?zUJ`w6%ecJgUhU4e^{7X=NckzaFE<;Z((BZ>fm6 zg)mv*U7DdQw_E?jcVPN|4=?T){PQcihOfoVMrcc`Iho)+nB1$S?+?iOGe6Cse)HP3 z3o4}Y^n}Iw3b+QDswfQ6zP0f{GM#+gy*PW~eZxYC4ymByVY;}d4(4sx>>3xo1^`~V z5J<8GYx6|GcQ_UA5av?u*K&z7c$AYOdTXR#nO`JKJzZVbxLr@#LCq#I>qT16S5d3! zCNA=RRG*!{BGL||6CC_9X`VJNDV6XEtkDu31Kb!rySgVjYZZ1N$gPDPu|}*Ea}Fv7 zX@kQSZs;OPB?^zWr{1&M{_Z`$VYW5LTz&NZ^wwef>!NkbwC<72C&i>9f;57ng&3$qH3=E$TdjpW zySh5677_H(WmF0trA(eqX9u(T6>;$;M^PY&h%jo&SWI>syV^b7u&50-v(DNXLamJE zQo|_tyQR7Hmq1bD035rTtBbcX+kKjzd}l4h__XuoUBdHyyGjXLVW9>vIXgzXfXT|}5Vr-jd+sUsudki^VXA9y^P$w1$0JGaQdxIi zjj`RFLUkElR&eR648n-{>!NuX^hkyWH(Qk*`A2IQw~rmctytFWsu*%A!eOPlVyiz* z)|j+hX*9-@aDbN3*5GJuBYUEG>M(2*zKNA1d2PX#g?_4kF1>BL%!vLw;Rqpy>iq}CY<|XMxaC?zp%a0j0@%Q0CN@n z!2~NxO<@hl-2RQaSPHrlN^)x=SUS1Ck0*MwfjlHbky^q;D>&0Rx3Yce3z!o{#tpqw`OE8f@Tx!{$(Fe#_(F;_1lptMXiMX57~%bpGjK z$v5|>qFu$1Jw;n&=(3{2^AIz5CcNjO?sc^;|AFMQ%qg0z?O4qiK7c-ihUT)7)#)tP z?x#`Mhb*TJ!KHXGst!12rSb9sN~U0YU924exawL3I>!U>@3thjR|>3ZG^+JnEm)`= zKgu!BXDD6&co%}PUPkYe2Rc+I0;5?Mj3t`0h-0rvxa{5E4jfyBTaJEmr30mXsT};4`SI304huriaVMM@RXq!*hr=n|a61!#?{;)1^Q~V!(14Y; zKz@%?;ScxDh6wVw*i(0+=GL3`g1dit>z3@Xqq)ok3x%GGg)a0raRnQPv=DZ$U6DY< zl3Q*=Us1#`UCxCdJq1J;?}FHF(4J7s4r}1W2wwBu1aL5 z>55ss^s0uhSqBvlExh8GUg?g8YPk|pEFf3u>R$w_FV{dPlQ|v<J)QiVX&2BlC|poVfi=k51+UHSjoNP0v{{A`}XyR%$a_tl3=mqI(={#^Xq zyAiYwPMo%OeZ zwXCCnXR4f|rht|6(IQ8vByv+&Se$>7|poBWKLaMi*x|9$dD)O3J$q8JuTFFA6& zLw7PeNIcNa>xaj}cmIH=8wUd7ceI{Mw3|#=LvF}@fq?@*+&;Je?>X+ZgsDz?g( z@7n!nr$q;2(Y4DySO>BNL?hL>nJ3P-vi?zb&6x(mKucL?b}Iob+yoR3mKhuy`{G0` z=Qu-GSuIh02K`^6KUQD^^3BK-kv_D?qg7JU>dVa-E8^D4t6qJ}dh{+(p6*g}C(xIR z66$W3b#iiQe40BdF(JEZrmU&5geFs=8TYs8p50q4&gOos(FFA}%tN8MnVf@duM;Ay zH|TLeMaP4S{{d_v^0WyoimFOAT;DRkMeIRNeXLTR7>928QNJ~@xDMW$(?nSg1W=B)fC^k`|D*hNx~nW8m-a zu82`ER`k{TAkmct+jkiew4c`c3(^HbzS&>)eh`?mK6JgY{eKr?540)DwOKgElbnZD zJeEp}g|5e-uRv1Do^JL1-%kPlNbt+UegoCMx0iue8i{eshz89%?g*Xft5Qb@B^3Xh zi<~fxPsz_`|19Bw<3=POn7Z(pTeSUxU=_}^a8ea7%djnturdq?2WLn6cQHm*`s4S+ zn`R#P{tS)zmw&B-T|ntHZM4zc=At`38*R~rXnHh{g`LEe1Yu8Te)^fqpG3kp`sJV_ z9bZHef+qOpalvKJCvv z3!H@zLxByX>p3+%?o2H{8yWm)eFqi9HHzY~dTI|r?j=sTV&ql-1$BC4u4U(Z^c4Kj z2*0_EJ7FQAqB`9m=rXmePPY^Cn{2wW@j#Mnayoez5LOAsa^1~(e29o zkQk2X%$1}?;p>o!>4_SvDuUU6AEOlXF7$1o2ia{Q?^isLb5hMPo7h|<)QvTpwO)}W zx*htxqM}CSlHFplGKzTjOe!VWILPR8^YZB{!T%KVZYkYuh=Ypx#gC}bQzE~|rI5Am zUz@nvs*x?Yn10j0T3%>5&6kJ3;kRg%hWsE7lq!aX9BAUG6#SM9_cK$o0Us-S z&aX2S2>tExuA$_$MNU=}_ET!jX)Dns;O;7iC8$TkU^+Q*ER_ zX!n}Yz8wfMbBC_vSIpx6aM|Au>OOM)!7kos?N1~afn+Js%U`=|9|vvT2U7t!IOYsU zL+&r${@(oO`SUto<$qEcFbG~Wm@Rxs54{?UfSnZPDqKFukp(S*2KAU{lZr_ai~v$H zWcsCdA6YoTFUCh8wX;9&c|cELFn{gj9ln!|6pg)R&<}QS(fmK9CH+M?-dX+#v+DV; z;(N};CxDu`5xv1Md5Oxm`h?gZ4WR`a66EaKUKa-}Y*?yl9{F4npnFh!2 zp0{s>+u8TqH|1g#FqT~@<(L0JO%J^9=IVJz!Ab1nuKt<-7aurGgzBAA8XqU1u{7w2 zz4nyM^9f^U2`Y6luP=!d3(-!Sm$ZF3uLBOle#gJo(1sR!k5HXqo9^i)4?95tMr&aK zVrvy=%BN~#1H%_qA47WcbN1_-LW!|NRo6$;K+zV(N5fWzII)^ex6QCLhKK>RN zU!y8dKQq~z*vBNm5A(7u7R2+YR(si`rw}t%#pNim{rl4V8PRJ&1fb*jQP!-bawPAs zSivE37AI)9l9ds02;Fp$J*&*6uS0u7mfp>OYzeqU&#yl35%bvJ5Bs_;`4W4~6ne#U z%!ac0n7_%g{9f_4P*}3o>NanH`!+-MBrD_kVR9M)^f(!6o8~w^3Ko{bZMM&?f^^_V z@*4#*43Wr81tNbbw6h=Qv!q;IP@6-5!v|VQB39WZ7;D z@|)<@G{4^5+$dGR7cw$2)1CoU!Rn+wThF&AHV6a3oB%7-kDr7)Z#;XDs5}mvKCV0o*axr3FinQ>+|JWi>6H}>Se{h4H3L>*OIvX|hcd-b(FEu?;&jXz2` zrluPAyZ#}D-61KYJdgbebsOSAXbXNgM~{L9efxJa(Sq38i0injZo`zWnnSL3UL_|v zuLlB}HXcE(B~LX*;e&=qBSfznaw%fw1OEYV{*MOW2B(KrukE1aNjdA3LGWPN z6TWy4mDUGD%RHd@SbNVko1-x~xO&CN0FB`*)>8w#@*B4OGPL9nZi zJq6{-Q4lH`BI3(D6(*mq5LwK&SI%M?&aY+yElmg5L4^615Y@H*M4$yI6UTvrtGkSG zFpC-AE5YYTO2-JPuIdJgd@6@GG}EI*GiqdWj7|H3f@*Ukl$DN6nmH2o_`TGhV9NXf zEi}9v7lsyXQ2%;0^y1>RYvJPlnC(O8S@J7)E)y(tZ#faFp7$(Fs<~)yJ(pZT+^phc z<^qeV@+FM53s*bgemq?p4N8dD2bb758<80{7gn-huH<;xqpD#qRo-mU55`~M0&|Br7?Aa#hi@X^&w6w4`U4PO(7d!wYSFWK#? zsr&clX)8lx-i01HUeu9!68|YxgcCgHNd~B0tiX`Fz(B=;h=jI%VDC=OHS{qQFf(PdW%G_Y{n+t z?7ZU(KC`0Qeb>%DjzoV6p1+;?L4tcBw{#erVyqXKqq?RSA5L1xrsq`b&XprVw>2TthqRT^Qiu-luTu(<~SMwa^$8??cY_*cO_S` zf8i<;Kvn{GzbYIox%<+Td`Gq<#~LiJ&D1tHsC_i~Wzl%%yw>%udy#(s~xs48ieKdQP%#}HfJr)m>`;4O;e-H?3M)N*PRdOA zbDXX7By+3lCMM)y64!bOv5EpRl^0wgIdk#eZx@`@-^BowY%GAo$}kTKSDf6WUUj{Q z%1CM&raRR*Vn->yy{Yoj%HqbHrXch(NvVKcB)lcO5eq(FziFGF9|)>EJkI)y=w8}4 zXk~O_?+fBcGE6ldWz|7JE!uNju`6G6q#wnX9<7nVN6(X@V^bTFpUWM1;^8(+GmqQ@ zn^5{)O^^B&Oga~|DM3}`i=c-As`AbE=TOODO^D+A5fwO&Vx@1+y8>lRvhpFz?U8VF zStazspSD_Au5B{P?IJ15}$_=%*uh58*Zep=L1OWszbFMxe!y?Mo+tr zD*yV+W*i*z@t3%?Zl|_!dJKk^vF#bs5FsM1i0O%szZdMe5SH$dgt&|-*6HJ?qCLWe z_;@;zD1-b88>lij6!Y0JcgO4p&yGNR78i#P6;teX>j|Nb)99hC0Ja%H*t9YBP_xjq zb=PDvxvsI;s}W<<+n57e(*|Y{d8B;m2HXk2b@z?u|8K~6>dWcb$&V*utq^|GPXJE1 zXtjAJQ*9J~{^?)7|GVgR`)v6|b%eiN3IZWZR%WGD=NP$LtmvG`PxhSu^J??bRpiHP zb=6C&?2D)`m$=T`!_6LuLs3ZM{6(xk+57J(vsBw+1IjkUs=PI7g!S~W(hF{01W}>U zk~AJ%DmMZV%`Q_ZD`GCCLsnHE%V)U~K2c#!f%?q%aHR3^rd-7%ZTWxUzy1Aw@FlSc z^ZMek;KISnM^fm)wCB`!R#Eb4Hh#fzYM#ee=GX~p&Nz;Yxjvkp_YJ-Goql=Mcp`_H zrfVht$qeRkVqCB(O$kn zN<_JW|D=&Rzsr#OQzIzIRgH;u5QqBjzqMX59SnSJRg{#xA)he9J~XIsDa6VuyLI_5 zMv^=qNLJFCAs4 zt;+%oR;Mwk#;2Mtrga)2nH6k*k!Yx{pD3PBBwOaY+v&Eu524mtV+~kT69+#rUmZdy zTW5qKTXxpT!t0HA%|bScu53Qr1VGc=wmVOO=`cu9to4gbQ4ZRoS&0wS#WPN?8MCZf zK-5{W=L$cQdC=G7m*Hh6ky_?ZjKyTrB4a3Ds77UTo}Ae=FIU}I z-t>mY(9+KlwT9>!KbHs(rxnz(wB|fDe-%OsEcr}=-rgT3px%~BhXFzaC)n1)%!mY( z+FW}87ZB`I!@iCD)r}X-uccaIh_gmqL>!H?nHeKKV=P{U#sj6mB}Qv!{z@3K6qA!5 zd`sKlRcn?PQ1VEsSR8bQNTE7kCVvzUV#Esd>&~;tu`5>t5fqr-4k0+=Y=Cxpr2Ry@ zuwbB9sB6#Z9^t$B+t!%&|E;h!7nsnMSMvv2{Btim?ieyZcB?W*!xC&=rt6FMyRS9G z5o|S2y*7PjL|vAEBX-kkW7i$9I~mN;!wD2Pr=Rgx4Is4Y z8S81Uq9PZUGjOfLre!VGVYK;VAOK6~nocv}5qMXP07(2V3(G z;0?zrZac-pf6)5>^M;ndYE-FOgyNkymvz>&^kh3-f?*7C+)i8tvo2zOasG`HH0vUB zJ?lzLQtEtHE-{ zFRs7Qe(WT`qgC`hL3Y-h0KS^(&86k2PnHv+Uv|b)PI-zCl5*1i)@OqJx0&iV%}oR* zlgJm)WUP&HJhTDuyLH*TbD6lmJB|#Kyi$Bqy1mbDHJ?fcek7yidS989 zDpvt8{EYKc#v(au9+$=G5(- zaTfmzZX|D&XL-qa<6QQcx&%T*Z?7;>B~Kz*rxH$|NV>qbh>`S&d%y?V-p>_hh+^P zf^q_dT@g+ut-#c$>-+ zx{BnWJ-V9^B=$HW4wD=$`+TUM<4f)SzK!s|*QEb8?xma8fgu|5j+52%>e>#Ic*W|D z;z(cbDr#7pSkbToo0<&OW}Hg&tKtDhwUJxr$PADKhp~=`Mz*PzY=FwSLm)^Nb@fHP z@^5ai(XP588eKd9rx>EY(K0{3yt2!UN%pHg1A3M3CDk_#zGvCzUJ#5!+m?!hZCj>r zS>r8Z^@L&JSlTYE4>^C6?Y{|@^MNyH&4aBI+d-^VIp_5rRE!(dX}(&)lmQZbLxVGg zW%u0do~Hs`frd=~3l9LOt!@e05u}3^|HnSEBZqi*_ld4rk`tc*9*Q{Y=~Wlw*; z^II*uRLY{%X$M|Z|4kB?`Td`*lfd>HCbUVq=Etsg5M{l4prKC9E}b6E@G8woQsNSi zXaZC(E9A+KLOF2xXN&+({0)%G*=Z9F(IjrF5qoLUB5AOXaaP_?!_m-Wbw9qDx>t~~T~hlJ zsLQ9A)E?&7eYF$JqTVl%&pBwd*L`du zv+4{rgeoL)wcx5&)EwmjHag8;EjnFf(QNf(eH>10n8)K8;nrDOzJIQUZ`U_Ty8{|u zFxHJz5O}*TTTpWD>AOUN$ky*-$$mR=n`m@PZi~3H(~ncW!Ucu~TOF#Jx7>@(tjUX}auclxVw^E!V3c~_IB zV4u!e$b>5&4yx)*{=!T~sdhd)p$EC)QB;@@0IByavaoNx-G9~wTapZm@2-F85pW1R z(;{*IZbgA@jKL$puIWOMq2)~A91Vb1EB5cHW!{eiVb1%NP7lg`Y1Ln+#cP5*3th4D zZC6apyQ|8RgQ6`7HBcqSabU$Ud+F$zA{OFzV9dB1)qvN2BVDlYarA>kv|~a<>DK*q z@kc3TtFXr(>I&KS2@l@;IbUFd&z;PFeEo_+${4otX#SS{zE4U!&J^$+gc12b;osZY z^JMT2DzyqZ6x}SgfX#4ZhS{pVAWuD}>XC%$)*h!i9Fh9ut)nEad*IDZ8Mb7_7B5~0 z?se>-y&^Cve#V0~1#OBLtGN!*G{f?!)H2QkrKKUKZP@9hOoX#{(Mm9G@s`zwm+P2) zuF)@wg1X|Yr#u-gLn0!qm7QifAQ+DXx#C|qZX<`aP@w0+2t_L;u$s>(g7b&6ya|Vi zR$KO`S;{xNcNcXQd|u7JnI5I;8@G33p1-YSc8$gD@!TGFY;7KE>PoMp z7KuIIwf1yDi*wvLxv$qfr$0(QY(>6aJ^t_Pi4C`etF)`6Somb~ryY1nsyTPChLgq% zVozvmnCwTiF2!58c&6{O)*E@#3XZLYt@EFg<2SQtQ=KQr)-bB%6`F6eWB0(k+C-^G zTe-YmwYW2HS04y?s~GaY2~k3_sqTL)4^HB>fBE=t4}ttDXMU5;=6sajqYPxt^BRoL zK}#>KrhZ@!d4Wuf+WMtGu96e{T78BMIO#YoqA>6Jg%&QeqJP8Llp%OIum~Y7+ z5MQW8)`i4-J&{0Q$)_KZB^I#A?KPm-?k^ppfve+*jmaf_07jrU{8G7H!_ zW>W&Cck+kfQ1NR&YUC^WO@Q<&OEsmpHIa4?oOy!vN(fbnp-rO%`iP-!u^MfU!f+U0 zwmtjfFUMkW7Y{Pyj4U1P9u!ogA^dDdkgc;shZYajycAMY3su-y%X*RySY6Xu&$3}9 z?XHV8z|@be_WJI(HCZ*Dt>j3VV2KX>Dnq(ugM9W;|4`1|$Mdr5BQ>M&uAC0l48sK@ z46P!Hs?5$#+xA4SwTJ`(;PR(O3^%`l5o{n#D?ioY<|_9IcU$nc?OCP#adP1&1bC^3 zj}Y;@4)0p#OT?xaydkE4&q4}c$l69^2*_?D-JIeUE50tGKm%Hi3f1EiEtZzQ| zA`W6*-ao>G`trVrcN1=k*P;~^{3br#em>YA_j&oJg&g5Vbi9c>MRBmUsZF@oY8fgz zz1zx@IE})5(*OJpLv?{(OR^TSC6YU3DDFV@d7|0){IS!e&3h$6mK4Zwz!=8N`CUzW3$(4_J-UCtTikIg#EmA0-|>e40xD{U*T0 z86LTr7gZwgd(+uP*q5s6pvpnO&_m5#cjQlG?fn8|@6%(a8DzyxH&Wj3&uWPomPqkt z4*!%e%I?N8ET7tt&IDQ4RzJlK3>{^qhSqgPnRgd|Omf;H3#-U9PFjJT-A3k6JZf`5 zH;fqz&~zyl>f?gZ!w7}a9E#{}u}hQcRiF;vE#C7*! ziW?otTb*1~vBHIG9j#yww9kh$2F|8P_P+Rk)a1AmH9*bU#C<4S0^WFQ^~cMs_!@mP zerTveZXQ2@w%=5Q0K7|c(o*`jq-YklqUw2m6yrgazoZoYFcN%h!Zuwm$d;{c120zo zzGiiof4-GiyAS8bSJh45mg~f=Wu`f-y>f|qma6TwN=U@T?!r@D|99b*A`uF6F@H64 ztOOnu+_>BFGITti%6u7Tqv>hV>$R~;Rlw5F+-dnEx>7{L)Z($%rc8awkv;xXOgMo$ zF80qPY!P@vHn@Mhi>ay1k#MtoQA2D6=I`X!K6o{M9(xYPs5!@oQJPhkAd{num8$161vLm&Ti;j->P&fq%^0l z_kL3ULR^$=*-AIg$ZKiR_o$*2wH0m3UC0wvzuB>n)d7DOsZ!tYl%o=sIoTT*vkE`D zi4>CDSSHcT0qh)99ly$MP3HA#;-WXqmAp-(hrEvd5}cp|n6 zoEE#D&@8ojdzpTJ;YZ~!Tv(mp+DOe8&TZyLuD~2(UiblZancHEN-P)X%Aw0!I>uXt z4KBw_rJ>e0oHO()sYbN4c{kH%k`dUVt-9!D)OF65=;^lO4{Dn%^xF>EhU1wm{x$bw zB$RUGZf8gXW4KmUlY+qB%U#^u94frQ(HA(2%3ncoj`7OiBh-&XJ}kr|;~2J%SRGnw z6=Or!DqrmisT3U;4hTF3F?Q4y{{!--4%JRJ*28!Q z35?5!64=JRS#Gi!iRo$1X-r3$(4SkLugtg9;=jmTP+|8Ro1d69y2n$EUV~!#y;a2f z&(lCzE5g603$VOoNzxI!vEI6-uJ(|`<_>pXU%s~aL=_Hi9#VN`ucnYtQtn?rGMim` z4vD$l??$db!S+TydPT$MzDVp1Ut3;qn#lf%?BBgOxPB`r`4E1S>s#5P^gwhzhXZ-w zz`CJsPP+E|bzU9aL-<=U+wV3osrQ#bz8Bf2{?i%XoOMuI9?h~#aMn>0T;6VSSXK_E zXuSqL@L^{BQm)Dz#eSN@J2UWaZoW2YDgIddHET77wpE;61jsD*2BlA3+q7E2TUUPX z6DlRpTe!rhm!5G5pd8H&3NJyam)q@^Hk@C$;MvR4p-Q1?mvUsdd)fiut>za0~XZ&8BaPq-iYZoWw1ivR3VCjk&9_|>0RfNBqi zC+^q6Suh)nutmcBdRe(7VGv+0PIV#)iT|R{5I%(;3RtGb0vTI!gdV6vs3N^wF5kpt z#bwI0+rQC^+n>U;_gbGJJv_e_iMol?655WWNpvv=kr!KDKxE?YcXA+P{k_&GtDjQ> zhJ8!o(awcJFQ~Rg740v%2L^tu7f7D0UWKGLgvrHIfB-b@*0n9(*cj_N&+ek^muWw2 zm&D#`R`|CYZeQn5noNUdlcp(zV9Wu`l{Xu3&xw{!SmZ4nk;>4A+&OMShH^o{UV&c} zd%dQScc6$u6J|0%%el{~jIoMi-B3$-sbj(&8WHPvViOj@EGK{0gKyubha>-N(Ma;A zp1tun&f_~ElezW9F)kJ3m=?&O7CYmdsyrM1o`upu_uz~`Ik}I_K}1=Vuj=}EQc`n# zBXWG-?mah_U!(HHFZkw2i_}^QeB096bxz8|mas6!qj|rq(L>a&hlE90DvbydDo^GQ z4ibzA{oCgByQf^>SC$VsdR3YB^&Y>V#u$TsWGT|<{;GsB8NLi+m^0P%2GgqSfeORYRW(lQwFYT7SFG=``q{(H z-Z-YYBJFrhWAq%(y9N)_88`7Mm7)9HmiWMf@fdAl!NRkjyJaMxsoVl|)e&}$zGfYu zhaW&Qxv%HXU$2BPk*Fsaza`DWPdW+#sHGK}q1>wCh`NdkcGTEATlXX>@IlirySgfv`l-UPSRy30pis*hv>OnOxew92dr zmaf?4LFU*;2K-o1QQJFA9415*Q9C)Zu%ZmL-0VCC3E5D+n;$?-V<+g|WA2ZpxuY{o zh8e&4bQ@A{`+FM&X^kKSbwR9`z=9OnRM+1D&Q~x&FNgk|f{;w?K3jUK|ut*1eZacg*=KVH(mUVkYPQ!I(E> zdUqawSfkQ?8A*PLV_tk2i~Z;KdLax}_q5v7ne2%XplfcdWeJ5A(Q>GY%ox`)7Yd?B zMm2fJb(hjcbQ-u6dM|Lr?PPhlxwQLe8eP<2FJgb({nIE8|4|TM4QNlkt#YLST86b} zVn|+hZL<*Ju%=FrFzY%9(`TT-p`cNcFRfw`4Kx}J9!fPPWcabkPgUWqh+0hcvh)Z1 zBiLh{wXLaxyKZRt9|x)Qr8_|T!d(=r^?HG7Li_#mIBF|!=)CeI=H@#4`8(qcGb}PZ zuDCY3i=eHaUy~ub#PIN~i6q<)tv=|(M#33xpJc3oAxsRm52i5_@u-sqVIoz0!3G`m zOLn;M8PQ#`0{#nGa4(KA-CPnJFSXUP{AcB$NL@KWI4nrgj0gSlcV+1XPq9Eu$*Lcv z8f}8?lX-{Ffl5>%f5hIX%(f)!+(Jk4iIgn37?!_s8bl}$BF#5dOQALq25e4JrD^|T zK9!hyy|%j4XEC^qkrUK|`~i(nF*Zwi4cYuy-I1!)V*a9Ct+nSqi>L!G$4z&6!J6#M zQZ#FKIBeCcmo~!Blj7XD@1f6cK*Z%hQu3Yv5t57NND+; zqt9{|%@tP4o~6iJTL+hGJP0)+DV!`iW+Gy^`HutX2{=v9HEeWWJe4YFK^c7^#zWrI z;`d4-2Sp!L_)AsF=h=f{r+Z@7S9%K8w`y?;g>JJSmkX0`UQ!J_5Ev;|{T)$;ZE^zq zKaf58loUg-_~P(|F_C$tcaU1N*;6PL0ebeNw}h)&RWfAWX^$U)XD~64xev3B%#L~S zas5s-&EM6+v6(#~r~FO&YrL*vaqa`f&9nm*l7w`b|kGEr(i8>y)lC1$(+kYjz|J<-s8 zUE&uTpRn-g`eKvgI?NUY@qwJJ`VrvQ%O$BJW) z3sHR9+nh6LyFQ*)_7`w1I4Ukfj$o8}V;IGk;Dp{3iPD&+$7j}@oQ_pviNCKz*{GB8 zRq<v}~uVz21AZ425T79U-+9tE5IAYy#_n z&J_r1GYR+RVJ(1q`0jVgl>1S(l*h|eRAzZ%4C^}=4iu=;DAnX14x zdIw?y&|SwVOC(^#d!g6H4Vz1;e)a83&ST!018E6bltPW&yF$(=O6|8uuuofhZE9_A zK#Dl;r}#3p-s^<5h~Z;_u;(Z}2aE(#$0=4}JNuFCsaH(e0=s}z^;6BuMPrvbKpN8> zJ)BjNqGt;&Eyd!J6lGOh%z8u*As!Ih(P%Nt>;aR;{KGNB$recoFF`?Qm^qPuBL1N0 zod?k~Lx)(qqJ~?FvFkYx)$sSFu}6ZuoB}@aE2!!2v=R$c)m}W~X}AEy=3X81U0UFFhr)6xPNd{RWT`sCPwC#F^=t#6@s$Y0rzq;&rZahx; z&K*j=`;)>;funCUC12-a>rOnQ^36ZYNgB8c7j>%Sxn7z-Uue|rrkJ^9P{Zq={V7r; z#VAY@Ky{&FrEz45pm8yvU;OmdGSeBb!i;RC`6=sEWp$2l8UU>`KAl z&>e9ctkxYb-OW>xvWiOZ zLxjA*-CuiEUVqNMb$lK+JBN}@hf4I%L3A!{H!@dWKrNad{Y@&aGJ)OqgtNBn%j~zD z1g^l(_kVqNZ>DBGTNK3JYq@=}^ekUSY+Lu4x~qO|?6$mKu)0yE5Y!NlpksU3;FA@_ zC1)Y1ETP#X>^2u#&en9_~nhOc(P`-rhn8nG!4;+{yFdXs* z0?B@WFxR1YhDV#rkeq?0~eGm;jyqKYe8N|f5KE4q(xSgd?6&ae6 z{O4s{uHjSmg$(_nQ(Ac#el$y70`?8kW;Nvg>w5cOx8t%7>AgeAT-NB&`DexwpR#~T z3L8AUzVkO~nnPKa7nspXb-kLjJ9ag(ma{K$xIg`khRZ$EU6_E;XVczq#{cB!N&6G> z^!at+P`fz5d0fl;c__A7K#!TJ~`M)&1(-T%xU^o7%{xGO3+?- zmem-SFLxI>-F^4ma2Mw#x*5C}l2_cRKJFx*o2?O1wGc#A>H1S=LIa6Jt?g!f4?2I) z|L$gVet0}HIsp`1=zWT&#y{4|NGF)GJId9%TW{CfD_sIx5GwOt#Tydd(_zB^xcG}hG9%vu5=KX$VoTV&mKyNKrkY#FKoSw6uoEDiT?l%;ADYl0x z2m+u=aL4WYT*0@FRG zGUoESVy!S{dAwu*S5a2|Tvlg)4|R%vNT99B-df8Qj&{9^uM{zxt}tJ`!J4wB(xbzu zk8C<>(j5^M<~HFAmW?nEE>OT`y=7AysnkMylDn2q4q{_w@S87_U-zeD^GQ(GgrQiA z&pEBJS^0Rj^2F}_9~p*c71j8EDZkbT_=fXO*wGe+HAGpmRFcZXnaB84CuT;~c&pN$ zzu%B(=DGugG{hAo;|fCZ+U~1)XhU1Y#ShH%R-3Ti2gsvbkrd`U4}JQ2x}@)vNtF!K z?2=;0Jb?@W#e_SvcziF!A|7Z2=DwOI+t85m98>F$-PWx+tbEIA@H+0PNrnR7;Bo`~ zH7tC#t%52_6+$wAa!r({a0_Dh8-Z?VwI>x)kVG>DY~s#@vh@V5CWNZ7`;GBk6j(Wj_;{W^e2 z`cNE}FI8CbW37T3VwjISZUPDJEUuM^$W)6wjfMui( zM+Xh1eQ0nbGO>Utww)wwVQ2P72HjW1-^0Vw&f;pOQC?l5i&;9(3}axYc@9mQR5LMW zW$=%Z)j6iSW~z(rhUVVVrQ(Z1{fcUr=!twJp~{YtzI1R~_d+87yzvRHJIvfFI8~;^ z=UhcXMH^=TWdL9_L-77hKbj%Hx0$#;N;^&- zrINj{g=)l>r{JL42N_%$+D=FxvjFqMm_~IZ~NEgs6`$(?sKxY zXqiv$z$`zU5+eaZBbu~k`39S~=PU=s=C1a*R+{AIb4@8va)Hbgqc)-(0mA`?h62B^ z#jloZm4gI4;MVH+wj|xbogA~s=oi*aq7uF6{tg4Q^m5vrOtvPm?u6yP0H8-axJ+Cu zO&VRKx`?FD*e!nRTr|GPLw}ad5sX62PkR@c);x3vPX97>FPLC3+ zNU_lXYXeTRrs%NSa^2@%q{v*M?Bl8ebYT5I08l}%zLo*C%9ZW(YZ-J{&z@Wfaue`8 z>qbQhiS#azCz%8Rju*>Efy7H;hKUg<6}w7|bQ3wLb$#$PIg3IFx8fDI83L!$a>^~T zWAjHluUwabq36h^A1;taD&otpJ1OCeR7S+?!?KJ{Q=8O+VC$Srou{C|TPy2-Y1nL`njKBp4TS5m?e&nP^gAUUTk=9GA(rF1>~c9S>xL!IN|xFx zad3t77poXZQe&Kt7THu9vnzHGQ{+fR)+0W$D|$IPWU3^Z>W3z%>m&*!{l}#u+C?Mi z9e)kUmE{YC>EHhC-===!3t#vGDkvptASk3b=-hNDl}a)$GjWP(_d30f8{GCV_7zzt zPoAU~UU-4}iSK^*yD~UJ$L*sVvW^SK?T+7_1AiIb=Z@PSd==IeCL8|bPyU4Z38(~d z{bi}y(rKK&GH+xa1gy6pQ&-xxLE@?${*2;P zQVlKL#p@PyL7TDhETnofpcWLerf`SzIBdA;hYiz4i^o=z+wr=m*b2DgqD11Yj0!+T@Nc{4J-gOWy(j3CiFz8d)I;FGn0g5Qyk}_}VbhA{D94rnzZQPB+L3A{ zOVIS1tRDr;(TJsOq8-et96Ev|UI%d8+-43Wu?r<7<)qdPaVuVN*F)e^4|QS|Z^rEu z4V$WX+&;e_Ll?<$O;BweB|7=?kv3QJ@{0<*7Sa$Mtu@2L8BCl#%e2;hqSp{zxJYzq zYL6E4cjh=QX(|(oNs}&{riBN3WYVH(`=`r-wlSxOZG&U4^@+)Lg5v3xc^#)^C(L^)dq@pQ3FWWOgmb20-*gq~cQ35j0cq@!s9NdMXZs1@~NlK!L{1EEN`3ceI z?-XEG@en5>5EBlKl5c#LQY-DJa~`O9A(h>DcB{-7Mo zGU9iBZSM8Rp`CU}iGh5gAPseF2r5Z4Oz3x{fpWVSO5UL%@FPoZMchDw_{Y2g)Lcw% zNqcHP!>PEMNJlJ42Du1ko5f;#pDf8$3L1&G7HBOP$d^5jEozu;g4}{?cTI*h@n2j) z$~xaKrf?6z{e#ETczl~Ajce`#PcFI7yGW`Pt8ZG`vg7nvXGzad{+gHOG~S+o4-c5H zM>A#O}l*9ivQGY!{$# z)`8eyQ#900X)2k@MiD=BXZbKUw5C9X*nTS8*lu_LrdtMtQt zqUN6`b=1x|a+3M1!}rrdjr5`KlRAx=8>APP&X`bO?*V!HdGwr5?KKAS_Pv*(*g{V` zO>yKh$vys)dKHQ-X12yBOd8@kOoOAUu5x$-&lQS(&pzApSaMT*>|-Ch#(OQT zG}PDeej8fE*)NmXVPL8qN-B0>i2K-)S+at(hcYScUO~5;IsP5BjC#v?7W&m@U9pa4 z3-5C^5=#jQ)^MhXNGHb-)Rlr_i$srWyD#{5f~vTD9~i51CkO5ew&PB2%G0x%bmJ-htcyp6){*QW58An~)oT-!f*Z)#{GwFt8mYGn8Y?*Z~T+8NXPKHH+U7 z6-4>oH!$DpsZ*zLPnx3~HwFG}KHiNE3RjxV`sM15{%9>;Tjl|N4kZzfi*Y>79X?^! zTQdGyvpjk79$s_dMWUB2sRdL?&FnkqJ^G(F)u}98s6S211X_#6c^m7-G=5SlT}{xM z4PM5QKh{E+d-7qeCHaUjkwq+kPspTG7&xNK4u0kOq#zjJjAfFu zCxM=FvqG2dqk}}D6}Sl)H^-xsil|ctz!TzG*>w3ycRAGv0@K_y+%eDNfEQI|AC(=k!AiRMU2L`TMk`Di7zMfg52F8761 zQT8HrUD6R@6we(bs@0~O_S*6O*I?LB|E)Ih%?`H8qNDT1|E^Wqh_Um%qH(5M0v@m* zcLZ0SqSza7oAm_s9<$UV>@>v|0*GEJR*;6cUH)M<2+a+^ZxP&C_raagj@sj#qZ~Jd zouF_-u^NyAJ1tFhP*M_c-g#f1q#U<`u5?hCj1;djqRf@FM6&{xVRG)+F^$TIW-eUg z&GbjKGeXMMk3@;-dG^*>o=YU@fecg1|}#;Tft zVvCHY$~sCS);E-)wKiPXBcxWjW?q#gCMt^mbrhMg6mbaEqbfrnJ^n72jA!#{}V&Cic<sfNju;sAmK69<4UaS8YpYn+(tgK0ZjeH% zd9B7Req*D9TUw8ddHjU@16DwGK^dk&B9q1qaNl;k4!&8@Y`%2;>i_$_CIojj<~HZ z*zv}UCMdRQR>@T6_cUTHh1V}$pvzLR>awY3#h6;Vs*s8ZD`1m~IAQ%%7-QT`U#{vZ zm@Ve9Do8(!D;lD$dceC@cYXc*H!ijPt{M$VOB9V(Qznex7L#4hS4+ILoO!(S-BQ*R z9u>aGY8E6lG1TpN&zi{xMxhnikP$`VD2yzr6%w@r$)U#eR4i`3Q^9~RfGP%+0MDO4 zPlJfx{oUV9(gl6x5~j1rt*l`)Unxw3(E8ffzD9$HFMa7t;(G>S&)?@PudL0E+c(Tl zA3wHx;=~CWMBsY-{onunYf=)^X^ErcwH3o3UR&e%n2C2gKkx)eqE5ABSD2(8iq96B zGe_<#GO5`LL|4I)SOu~KR!dCeq0VaAwp0{amLF=`%7-ZMA^wMGp9|=OsJGj1CchxS z6)`Ti?Nv!Vhk?B5){x|Mo1!lFiD*)kzPs#kB<|n^k8>*V^d0!@1K5YpVpfuMNLiH) zRmXC32)9jQT^IbDne|C7C^&YiDe`t=RDHGv#5i8S_kf=4OCJQSG-zs*NR)xWKmxZSi;quBCN5UsJUN*m|S z!8HE3S&VS?1Qc5wxSrTIpS<_v%VznZiPZD|K3;b(53k|LQec+du~({ANm=&7GSpN0 z>eLiXa!kBp-?loD+S_#wZ)|z28pteE&BBWk_wbkf6&uvB#w{g@of^(zOUllRVv9+a z#4KKHm5nMZsgwxC6_ZF z;%t!dJHPWg9mnktS!%4!lv%!?7zP|a2)#j5s`+^G$tUUT*|Qx)Y!<^Y<>qGU9xrR8d_ z+sAgAe_sc)w9OcVG(?A9?Msh6#THRnle!G6*2;sSF2VO08a3o8h_{ZNL>%vAlAPm_ zcTxY47yjr1Y=zHRx7cPMNk=puTbF4XX1@g~7q4l>IHq7)c&%_v zjT_AtPa`FzD#4JHgZHW;$`H7?#QC-~It~_rcvJB|1Yt#_%{b{1X(>|=*to34gj7Md z&60({GJ%~{a2WzXh^#nPh!jI{hYzgLyxErkQBylhkt8W+2$5E2rAYw4!ki-t{=aibgFpBKNzF@>TUjJmdYrDR=twPW=c`}+Dsj&t4Kg@bmXu7u9sl(zCZ_$!(kA(C z0HKBRI>=aCTciK@AOB+qp_TU70^Ha&l8(?FHpI5w5)m4=`j%%`fmFJH3f1aMxh-?4 zh*AaCw0-0hT4c8q39D70ma8Utb0; zJ0A1R$C}62u)JZ~{V}WdlDmN@wkAlbBCc4EEtqT-uBhomv&DCq;w4m7>^UOxlfEN(}&6@bh_oF)VLz0l?no{24!orpijNzENU zPIHHO%;eVWKAyeLBWh0C@%OnGo(EJ#BxfFf06_)OdCxqayh3r)iQ(_084$3nuF`lk zu918)=2o=94b0;!wHj6Mn#ZP0Jn1t0S$s6iQOb1Fs{n72EX1_Q%IIqa}#RXeNf(W-F^A;%1~4)G$y(4Lac6=Bfl{ zky}2|;}1Tu<5WsOV13k{da56yfSbo}{nl??b6jqmMf9bY`|G&#fb)6b!UY<1;Q9pl zm{uG5D#WaciAoJ2H;u~@=JDbp56LByS)mh}!aFOVNC(=GTIL!Ky~-J0lV;Ri5mWzx zPKs_I6;Vv&U20v+kwFq^0_fGB6G=3pKGW4B%4?4#;qW^#6wad+zKA}3~v-%pjmb)*i zfCo1oTO0I^jyuOs-IoJAhU0oq^Qr(=FCs;xa7fUN8`gc{1U z@7l$iF@5j&>tYr$kFTxsw#GCSH-c&lyH%lDrKZZQT2Mz-#Flkv3F@lEVUp8ob!fIg zf~AQil%`jr9B8K^2JM(k2rug?!{MJvzY*nDl&Td*9qO$BX+BXWkp=ZutcTOL$0xMX zN-baU;)Z|pkNy!23qJFi&(OmUKTHP>97xhEebUAeHjcD%$B)-I2Yw13Uc;DuX=#au z0U)5@H}yCF=HE=_xpRt(MCuVR=ayndHRC68XY!DdV+;HZ(*r4ONh?5UGHu+U=$Q z(?zS$vh#}KZP+y4hM~#+E1`8pt~m3D^@3Gz#WoQUimkXN1#hXgp=$7BESpqBD0tVP z*pl7_H%!tM?hM(rYnNW;&)&as5Ci#2rGo2np0*FO)I-$k^?B+(9;E?-?a6t91^SxijO_{N%~o{ZTLVjUL3l?}^S zRj6KS6KZ92`$uhumLwq&!4wBz&7djk6{99k^LuQGdb~TS@P&CCTp`6KY$3EOK%GEQ zP!P`4Z29w%wHWR7|?0eHEh0skDkxkCxHm zb~x0!p-UR(@v;TnZ^H65nSI7Xv8t=G{SC2@2emcMy&h{3|0zwh--D`%Q2z388AVAh zX}W+NXzoRoMSbTT`}H~8iVhMz^y=MT{>GiBzQR}bkGUI2tUUvH-Iiq~ojYzt`-#e% zHDH+G;Zd07;x`JSi?3HaygbY8^L$Qp8J{h9m{AYG-^DC#lTvJujN=`wf^43)34F{C zQICM0><1rwu{Jb?j(T|Wt~TW!aaWRVU+3)A8s zV!XDFn~rL&j*%g^4wDk47S^AiSCjY5q6V^gzJHzftiM5ehDVEg50H3lVcx4eS=y`j z7D>gIE|D&ZgFJ!OLKX=~tx1}c@x-cgC?01*Yu(#z_-uKpDr3fL3xrk~z5bywBbIuI zr3MvSaMm&bmIPKok=JUP>Rl$_Q@-`FBe@XRLB$ZkIYx-9(1dZQj%dx}jaDlbi5B!& zPPrAJMxs$kn2kmzDKQR)GZ)d38EHZ*ORe>v{?mV=VZ*}0f(%gaI1Tr_yq& zEtj$epc3G)sI?s6H--KFdw=imZF<~+cis9Vmm_y@F8-u5<{ zo}TU?>)bTp)O-H<87A0NXwi!b$*v;f11OA6WCTlE$ak@rk0|oq9SRB7CiYvRUd57@ z`@@$?!F3Qo#bpa<6z%J#D#pcTlZt_9gG;=n2LEF=Ra3oTEaPDwZ&Mjfi(Vl~Ni0x9y5F{_a6; z&2tC;hxwZ5d3vYyOPje_@~)8Dib_~1d1yDU=Ty=!FDZyGg3&r^-!ngJ#z;k6dNDZ6 zlM54Nb%+kp=_;v3w{28KTsf~$6>;gRQgJa*L35A30A6c@)RiktYwg*k$dX!OBtJoF z&6UKej0wp^P42U2GHYY3Dgg?|KB^3ltpY-!I@KZDYT1g2QXP>4sWKE>O_yy#&A1sj zl|dmk-Y~N5*h{HtAy$h}+Fry86htbFB^{B+p;2fR%#O+#LjWuRp$UYI5`xGoyxQk@ zh%yn=2HL*YP@3FwYAvL84Vzla;qk{Gr^g<9tRwBxHw#abTY#@%d-c^<>6vGqp<%>l zKl@qwiJ$lhJfL=@82VKn9n$JOHxK7;7;*mmd8v~4-uJ#&u4DH-`)V}3NkznAA-Kdd zKJojDB_%N+@)cX$2F4~85nl1JR{_zyHe)4EKApiO?$FCq(7D zPHM{ZNbvqmYr1@y;Iy?=#682a(mE>!@`?@~)bD+n{@^pOJM~T8tvC77tF|ypcdD}7 z@{~+#hzKr$O(mM;$yr>#C?di0=B>ZNe63b{emm4D0|<~6y)>GhrELO8q+XFcH-TB& zCO{$7%K(z^1@qKp@Nci@fr7;%d|0-N&~`okue|cgQ;kLg!PhbBJ*ICZAj*-0+ZA;9 zJhsLA;G!KT#5Ytf{M&wX(1@NJ!76~}w%RV(b2D#;$MAdO`_Kn@8v{|ip@+p(W~ql@ z!tSZpzy9?-OS80X=)3tjagO@XmRrBH$8P35fqkQSELT>!_}V-rq)jLy5~urD}Tgt!fJ%TV*dk>rbPpTn5pcQo zvf$V)n8y=&dEIR^jZ?dBx~hoW;~?D+P}nlLCF$d09$#<22?kq@nyQrysa35~Qbc5Y zg4_IJp`HB4yLZAII?2lN@9M#sx~T>SsYck1nH zqR?`_TK2WJXYU%#ts)x2E20A+x}dP&;Tagxzx2{e&y0HIMWiEAZ!xo7=W;+5D%*Ly zGt@gQZbwQB|JM2u_=41WxECr-6lu8k-h1Z=WvBXsS;~=Pi{N|U6ENJq@4ovU!SCZ% zJ9nUR;cd)zMXaf1PFJGe-P&oK7G`G%u)}~;|_|&R;%?P>I2Z0 zgH)p)qfjWki*6Eu^VTviEvZHAw8S}hYaO$ZkR|Kp?3<4+&FT~T$kaeSNn*1_ht0A> z-yumwM9K$V-$@5dDhLM{v~OQ(&zF^iBUi7=OBl#cOia*fbwaPfPlaqiQ$~POm829? zHLF6Xj99Lj&6FLf1vHXB_A`oFjEg-}uHgioDHy)$kfBJt)N6sn5|zZI^S?T?d|>biVCp~>BvnmkTa z{k?u>x|RE6&?dDktiM)UwPj~}tIQqdmq)F~7Vs=nqxXi4I1v8xHe>2=8e#WkH z4u9?-9emHk341SIkg8RCY?=sq+6}EGdM#RAU6tN=sepwU>+7P}l7+PmQ#FgMxiAoy zb-hTs%ws=bD%ojNQkShQNX|c z*Z;cXd(9#+)AMn@hFPuUfa@2;-u1rcEG6SGkXwN*{AUuT(GEo__7<8-i2=;xbQs6V z5m`p88k*M57|E*${#jAWC|rGYRwT6&JH59YT)QWo3r$nl1CsM`QBz4Y1I5-I@;Qo1OA2X-P!7-3NiW(} z4)O3m;_&~W0&}xAY4}FeCf{p1&Csg05+#@FTr|SK!^NYH=z^k)gY!8Uw9=3QiW2I9 z2S*CC)MX5!alFGe?pv?YOwh^kG<6y9OlUva4~35p zbRf_+qSq<$)aOdCcxK|?ORqaArf>FpOtSA>IwFWJqvDdeLT<@xQxQ=f>BTtyM0+E% z%va7M6%mRpR7IRPtq?LSV&T4nHViP85zm!vC~(JK1U~vwk;4~wqHsVmH8n+geZ?jt znveyGEehAw`q-ElwjjLOKq?|qREWu~N=4OM^&|+YBPxo;SH&0<^UD$kQw>x?gn6+l zN&r^mwVSR2q8zw+zf9{81Q!gDIaX@HXG;P(F_8~LQ1{^fTlIDZ@ zVibfRxkRreY6(5~o%@>w?OEg&lr0$k@jw2@G%5f|1;42u{J|fT*UmKD8Kyg;!yWt6 zPd_~p#14St_{1kZLBIN|zuMt1<@-+g-#-XVm%cd)Kq@T?2)JsH?pXbbkgiIk!!Y=4 z#et=k;zT>@4CPV5Rf~~efm^6nEIwMHvP3=-uaSPpt(;iQbK6Lw_bS9K5dJC@f(ujJ z!0|jX1Q$N906#-AsoxD!%?guRb#8~vYbsSs)Tr@9SQ1|?cx+M3<5JnQvBJDn$WU6w zK7PHnuBf7Ld(a@a=*lWhmL@dr8dF#KWs47Td>VH)z6bCZhBtHP$v)a=?mhJbdQrxP zhdRx}2VRN4_vs&^|8GU>-;(cASt*v>x$N~%)S=QE)N+Wu0u)^?eGyd`dDc7(XNS#* zp7;6bUK+n{2hlT##_~+yiE)KbWCy zBo%v{62CkMzu8Kq@)&a|AL#M5JWHlhkXm+D zEoM^7RYr_C@_;o9hGt#CidZsTP);6WILO>T9)#QlEKUf zIcSTl_Y9O>;QlGhkr;Y=HMS^)-;IXVfIwZ!neNlE&7u``IAjmYJi`bI#k|U z+NeeykRol5$d$HKWLJogVlC}lXneP@jwn@y+7h2Z<2l&gHb&A)TCXh>;waiQL`efj z#{!v_7@ZC;d!7oI z#&)E1UJv};-Ay^<8s=w~cdxCj-3=8D2+o|;>aBtipM%e%0YTiOlw^>4RteZI%+NLh z)i9}d7zl-={Z2nlJ;cqXBX*`DCWMx$hG=-Lj&kSLM4pg`D9SDF2sew7hltV3qzysubynE)`KyLKqh=UZCA#?z`Kpid01Fu|<=Us74Rtc2m|pT$lHlKKqT11E|=e zkfV!`>qL@kA&%%&uo>R(YSF_?)E z*l|GTQgp;r-klyDB&N(#AJGPp&Qe|iOB!7GrszJA<$DaJi5|=!HF5)Rep4WCHXCsK zPg6=74>SQ3~?2yD6~n5((dtVS*s440q#>g71L=q6jgz!% zdeU(Vdr`W>&tSF4?6kyL|n5BGM_(ZgoZiKFee&faq*dDdUB2J$ob1M_&K zeW0ftK}BPq-diNK_l~_B>+I$rK8ZAD``F%7n;fZ&QNx>l>T zXELc(hk?8Zw5(c-10iU%M5)zmN;+c`fmYF0^CGW0qL|1R+8!}hjujRPDzw5Yo}-YG z(^hgtQtc~*H;tUpK++T`aIudI7fk|CM_f6;a4BflBeyV(w6#$qb{tS8&{rq<#100i zwMLQH0ifFY?svZ{$BXaUKW;bR{EQ-SJwNr-Qym8K*E7_2gz!M8B*x(XNd?wVOGe66 zY?bW6C?+X@0o4{0^kLgO-pfS>sTC$h^Qe-6Q6X$Ax5Q)1sb8%kwir+>ZLq6|7&O}_ ziaR43G1_Wd53y+9i;9TiplI6njR2}Gyj)l4>=56@Rkx8zn&SJ%m9?wzMpTyz%j)uE zihFvMXg^XA_mYN!n0Yj{xM9-~?;^dhU{?FT*3^4=^bL8@E~Aq8ZD}tBF%fl9jx5+z z#mAxI8f1ctf8SmAP`UwTsY~d#ddd3dbQ`nOUCdICz}IlsiLF;&d1bnnX&n4nPtX7$ zR|)kF@XWg1DtDs{Zu9%1p6a#IB?F7=>+6qEkFibnl^cTF@9l19dztP$Jt#`}QmHgg zJp_M`H>Ge+QW5RDO=mU!c=KiMv35=(QW3#v9rb*+R!*H%N8F1AH?b%lTL-PL76J>D zUBA%eZSio4kchb3=<5odnH;M$L96JE=ip_`Dz?VTRZZ4$r3RH&(D@!yRjVw)5|jW9 zS9+_UbPFz7?sRlO=N_%UihqReG{FO#gt>wTEphECukvf<+s>F^1jt|EP#a5cw zgVFk^5}E*f(@^a(%Sb+*dg!aT1{tw!dxF^3aMe<|RSH{#p;c?yb)zK3I<)Ozlq4mF z+#ZIYu=wubsv^47ZHx=t&L!rJN>Z`|mjNye1lsRx(<$LT(5Gc$0T!(@YlLpSW$k*2+vX-f~^v%^W4F5=LJ${&YS^{rVqW| zF8e;(?-%Lt%cTD1pI=%2E{*>bf4krC%c_X;zUoX#bT@#PdRo97Wwz_pj8Lu$j0;iB3a>2M12I( zA^V}+0};}P;t|`f*y87!UaP1cr2zoa5&7JHk9vohn_0O-u?3P#yK0CqjW=Vn@VM=~ zwrPkb7D#)%7M(nDgd`ae9$OQq6)GaaVQU8S5J;RoOXu$(eg4vt+Q+k&P^rpB9@9*1 zO`*3PXie(L)K0F$V{4uFPpTr?R77}ep*Np<_N5Xcqb|Wuof-ufXEY4S)hLN#tLY40 z+M@&oOHM(tRgl+_Do6?rX~{^Wq$;A4s)$7s0!B$4M1+Vo>Cn!zg%Wk5($e1afMYA( zTA%#nCu!92yTALp;y0B}L;TY}{Zsn$KmT(YWxV*}i;|L=CiS3HJKFUn51@yiD3D1;v(VOM^g1*VUDVOnMcB_yP)%_2+`x6`cY+b{z)N zrt;~Mbi{(GMqA|exacdk%)VK_ElX~}V~b20Vny2TjrRIA$1Sai2czCt<{K)XAdyBHStri z3Pj0s%{S|*w!Ad`95=>55?mZ?^t5tQ7={l~m(Xp}2nr8w+n%K^qEIMwjfjHUiMH7{ z#bLYBEqWXbJ)bM3b_~P}9qHASV^i?+T;EhvAOyHw>F4(|Pklh2DiCjb0SW%S?WP`r z?;Rg_?z!g%B_;6{>LG4MtyXXzTiTh%`wA|IwA@quG2yh@%MPcWQ!^R@D*&)i$`}zRJ86lUt~cSOEK07UTGO0lKY*yj`jyVlr$>l|%}m+G-*thMJDj z3#Iy&1YiYcD39V`sEml3Uj#y{fcl0K&PXW8gjX1oF-%sW3Yol$wAt4X@h((b?TCl} zAsSYOMI2BA`LqfpJ)Knz52~F}$NKs@eeQFgqrdSt{ziuf+3)}U@6%4eM?d;e`d9zz zUr8lE2b_~G?iTqi60t<UdZQy(#saoj>ux9?qOybO(be9KfrY@$6b7j>y_sv&Y$ z9>Hy^q#CNx)T&-A$5gP}XBJB`%}Z7LdIK^py(W$DxZEDZXDeDUCZu$)xPLy$3|GMcnyvdgG8j>=eeYBe{>E!tXqjTeC#(`8TgQ_0Rb0 z{oh?0Voqdr1&-i)sFw!5n*k5qr%s)kN2NOI4IaS5X*YV#VI1ErQXQT=c5aen0gY_uY5j!!)2sBC>?wax*}5b*`)Dj+?58NkzmI4(}#)(oTcc zI$iai|4Td##nx-^Vjm<^D!$rYF0?Aht%TGv1}ZQK#)9#Pv?+##;HGMvR{|!rD&7v1 zL2A|I!=&04!Yag0g`zG>6)u|(Q-F_r(U@ylqhpvJ+c-#uf=#i3I)UO=##2b!gvO*F zibod*gt3YPv5_}vKQN3p(k)SI#RD1xZ{`z}R;ak~Z~Vq@&`!Z;KJyt#OLJ8LcM7os z;5b3zIkgtf!{{9u3T!mVAUCIt=Rhq(Q+$we`=CmVtNaT;c)K(S#}WKkJiVvF~Ro$>kB#Sy={Jp z^!@kUbG#nMzm&+XoxfIYAm0t3lHzlNpx){=0Z^$_x)RuQlQeSX-n`9j_pDF9@WKn- zI^J384VJgdpGfz%O!^`X4rVFGwg8pqa#CwcSnhWrg>7hGxB9s~RVJswvE?H57<|k< zRaEr?d`ypWr{I%$N5SSOBuXs{Op7$h<2RVll2>!bNWXaE1jj^2_1ppzUA}7T)Je5) zxS*Ira$XHPVAFxP(+h1VfjRs>17vVv9o*Cb1@v7sH+L zs~h8bth64i*GN?-#?;0J_ueBlC17$Z;Gl=eEmKdcE)})v0U2klX2VFNIBsf`<#Ti~ z<^ap64T5IeqyqC%Eoij@WA%>8h%GVVic~9bWe_elwK(CDA`n zyGCN-tA%-iGmjt8TtsJroetjpfZnBK{mGyF$w>PvW#PAf`?u-WfBn~m==s7IzCb$( z_`ZMgCx4Q-r(nk@)f~R{t#8Tk|Lo8H>@~_oM*?Fy48!C%G_VK)L$7laAETW@YPF7_ z(W00qCDA&Jm0`BRgt`w+u?#J2Rt$|QzxG)jkXv?)o?;q3SyW(Y9R;o1} z6H*bUOe*41W1oD^8N1~(`wk{YaGL)iDKYVgT=6)o6QmwEdf!vu{MM=G%SHO%dBOWI z+y9!q%)}fwk7=m4UV7=JH**i*hp2y;C()(%29}VTr`tfcjpNDg50h@sHyRD+*BcQ!wVwN$pMqLS(^P%gsS5qIhjl(j^T-%PqeDD3e;42U2U_ zyqa~-W=Bj|a6~+|IADPx?*{1^%shCI4!RAzYR6YEiMj7?6h$m7t1H~gJ~f2}E3$aC zI-yNxJclokYE{Oxf`?XM{Z;`LQ83u*hm??4h60N_G!3!&qhiljOU46g9`C9k0zRn)q}3`=vFtQ(140W6 z3sNob;>C-!lYn$g95+10zWUX#(oO@sJA+*rF}CfJ*~vgs4Q(5S z+(V(Cf{rSP7`43x<&`14Lc6@s`4RF`+F0ApY5UI+{RLB{RyrJ9!z|SjP4|Q=2vX(_ z3s(`b(y$c~qpBXmxW2BWS}vI)BP0g$BqY}I+7-3CHLWkLw7I6Gs}~d@{oO+DMWWa; z9WWrZkd6qoG13re(!O_}9iKR%-t^Kv-@EsB?)hK&HuV#H_7>&#XwOtmYTZ8gck@B+ zg?z4Gy^yvfdC$ykkwQqfiEgK}IPaJ3@PX;Z@d9|5ryii+>V{DRKRQ%dfR6|@fz40_o>tkm2dfk#*Vklfosv@F_mW)kJL@M$8l1;5C z6-v6%G9Ft+uQC@nE=iZsl0vB5bW62V%R50~GH?(lVZ_BiQ4YZ5Jl6KryJyB_yab1doRHR6Vg2xsRZm4xs zMJ)4x+k?$QoaFljG+V?skm>PV`m$GH7e04m_ zeduK}m3>#pfs63qdl)qpjX?bZlK3|fqTBiix;KTtBXo{$NA5lc02odxX>hh;f}rNy;qm*{3~Lz zWtc6LaL3pME`+LxcCs2*;hSam%=GAU@4rH2MCY*8h?&f?gi<4Dn0+mpz^Z6pV7ee4 zFv)?N01etL3uD1$Qw^cwl87(Vp=>*}hReoR%bYS(K~YYuQ)+ouT!V_uR3>Q!7Y1hi z=?8w`2WThaEpK@X&Cbr!PQ;J=$dAy&4?j#h5&QS=r?>*f6t~hn!5tS)l)F)bUdyB*%6%YQSL1dW`aV|VA24OR zW0z@9(`@U)MVE@$zMGvnX!XNYQim|cJqt?X%cR94^3+MSg3cOO`12@fQ~^fsj$`uB44LZP>wBw+qr=tS9+-q2KX6uk#ck$z5X7z0+3wjNWgOxx4)N} z(TU{euQ!<3PCrRE*E)oN1F`NBjtZARMw&EF;Q(lYZRDQho5or)q8;F%O14+s-E zKorj!M}7s~Hck5C!1eL_Dic3w&#IJ&DrA5AZ~txDX#lD9#y7rEyq2ofD(xif*|Ue< z`ObIJ5B<;&(d%FTdfI9DTYu|sWtzrsW*k4Dsx8$vi1+3i#g>p+NJI2^c$E-X@YNzy z9kJ~!Xn@Xvmb9S-N#$473wV(DM!~a2nxXK0Safn=HbWnc(GV~4sG&IAi6r7 z+!E!MagR^JGf-PD4H3$%6Gx9~q-Ml&8nMv zTAkpatyCnb!iASo6p`mOjk8SK9|q|(wkl%5PaTvp_a?wIW$r^AdE{4^Qe(+W6{|Qo zxv*FU6&9Lu^|2_q22R%DD@~kVkeio9dO@{x|NZyVPQuUp%+JX2m&;{(=%I&bC*j9` z{Ktjd!tw7kQgh$FeWFxLlU8X@tpO*s(9oN-Xk+wesv;(&yRCVs;-n!!Rm8}qA{sKw z70N(cCaNq^bhV_tj7$fCOY3$7noC9Wt0D%5;G!5RE#ro0$SvD~H%zqM z4JutIwz&O=VhddzYtgut;v!DfJBE&tt3+3>h-%9zfw?n9ij_bqd?$CTkX3HYU_jMg z@U(|hC+pNnHG9`oRgf&1>e@0EM+z4uY1DKaVWZl2xC zw6;+M$gL--hp^sK^VB=c(k-G^t8I(Fmcu>w-1B_5gTUJ*;<~9&yB_$sbAPRyge9|P z7Zw&C8y_Ek1%VWqW;Vw*q0wl3gmT<07HMZ#jDq^DC zlCicin<2GacQpWl3z{vILl@N+;3`SI&iIxbax0@MVvPs!*xD}vhEzqoW3O2bW(%a2 zSE79-Trs`z8}QmPRj}}KEUN12hVa=*`d*}Dy_s{ ztB5$xkXvNaWeV173kcJSs+O`LowB9xl{2Al_zeGC)KlWokMt9tCM{*8+`lo-IcJCg!DzcdXp#@^g9Xrkg zNWPtdfA-J**>#QK(?r&wrXwc5W=m$7*C9!f8njnoK(3!7?M-!Kq$X!3C;0oU>`QCZx(4nW87ca+Pfxvh`1|Tv)vQ9HaLYtZw~gcZIV$S`eP9gayRA^W4wmx@bJvF>u@DS# zVDvbOK8%fxU53h%zvB<|&LsVV6hC#YJq`NyLq)R#mhL|A)1nKVX?hXNIhLrA-4y8LKq@+QwVvm`uZs^nh!}t*w-T_8Cq10@ItDe&nGO4W8%6F^Oyq#rCeHM;h5F18 zPN2-4-#)uZp%yYK2TPOFBn$Xt-mdp)qF43rpRE@tnS0RS*UN|Wzfx}gK()N=AHm;Z z`yryhFvDl&o9n@FzY%jNvbB#YL5bN=e6l4dhSm263?b8)l;8=Wn1v@gs)Z6^jA%Gx z^HuMHSwpWT4x&gfw7xYd9}xnsFb{sIH|RZ)gu`LDYVTzBA%F(q9Z9^S<9wI zRHJ+**!y-awnK4tf)CIzy`;9c9W%| z-$%y504dXvZA#nK6`*ivIU)d^P;T}7lGM&b7EwP%0u+oI{-5`MX#nIa8maity8R#E z7vZ$`TfLbc*OGpJT!QCyyklzlqW6LB&solA=d*efa`KPF=oo!=EAKl%M79}_Qo3EA zb}sldM0p;1hc~b2rM4BB91bm|X(=_Mr-(rm=D9Bw=pCOS9YfL-kv5e;<$(ZEcbS;= zFr%88iXZjjJwA1qLO0`I)epArSWJonjAsbh1n+(#4hwu)R<+)F9cp+cnxS|)O_cVqOb$lU*s{=%u@b;mSevtaHX{_P;i)b{8GVq`p6_0H=_&k*(+#|Hg~rzW)Y#_zVk(MnM3m;Sv=VK?o(eeC)-Y+_SfjwbxYOuTI)|U2m4Jzz ziF`_XPy`nO$_p24eybYf0M3zb{ig?WMrUwj0^6IhzC*=Pju(C(#6=4BJ*)z7qiY$^ zQ&F5R7hYwTuBvM~OuGK`3L6KC?PX z#slM-R_{7Pcbvc=yPn}2G&LIiVDG2O-=O-6#c!KBc-I1P^*pphc*B>62k%5NY;0Bp zNX^wItMxvArqWalxBlu_Wie}pu3NOwutqWzOiCN6>LG7mh7wF6^A;EK^HT-x2Qcn2 zZa%;CXW1WLLekPO6yw?m%{HYmeV?T^3No>0=k|!7A~ylt`gFxB8_ulZ-G1zmlVJzA zOWyIm%XV`lzYq)wTS=g}`i4Y{UfYfLkILcPgogA@(*^}Pm5v99ijsBF{14-T@KlS4vo zq)Un~j&b&Es(I`1M^QpZ9~IAMNq)?Q`(l7dtfi9VY@(gT+#ow7 zJ5jZWJG`&z@VxBM637tly;bX)#KFWVtsLW9{2=1XYAri>m7NB8-`cO*`wjT}gysN; zw5t$|t&dvC#seidrPLI|kzgm+v>i(SQwtt96EmzOM=+})L*L&EpKn;U1uu9XZ zgsGLv@k%Bz*ee8WSL4c8F1+YhS)#_@H?VtBN8wN0IS$pQ;PNVHT4_|y@wYkK&EsDN zp^MHUU%j~bIDJ4VleX*kv?ja+*5l+7EH2d!zfid_JvZDlOZMaGqz+FvI)y}ZDS9P` zc`65~5+04teKIME1G^D=%-CyO+^*;09_*0H=&F>{bk?!aXQ=d~Sl)6o{3X@@IfUxegX=+tmJAISE5*=JX_ z6ty!FBEe8=T;Shso`k^sz{psE z!65tzT?RsYj7`0SzMY{&nPhp92&!DKo&C||;*mc8l!65b^|vJaVp89JPkv4^q>SMl zwD@kTqGS`UJMzpHFp{7oiVPTHnE&*Ye*btsaAO9tIG!GkgGnJFc%QLK>a{E~p!{L& z7^Rl5*nAt$^~b35knOgu*y-(ft47!#*X%X2)-_`sA;O0<#>rp^#vbvA#J)R20}bVj zjzZXL=i(Jjd@<*B9X7&Le>=MIhTshJx^&&B7?sG5_x|Q^nP#M-*B=mVHSG%3%|68a z;C-7$I3yJ-Dx;dSb_F0mk*7>BMnPF6+I4=VDZcT2fo5hQ0hc6!$qHCB9#mf2!Pp>n zwO{WyfuZ;ms2NhK^$Nrd6sA0xMvj2er{_PovGUIfcpJ{YZ*S|KZ_fLe>p!8aNwKv^ zRYLhDnjUB=n!N&=qR$KL|H@Q=u!>mReiJA`dcV-f3(0M;4PVv_N^PE#el8P=ZV}e3 z)ZuH!Rq^OyvG+E#biptuMB@Dms`xiFXm9Swn3N&f7#mY^EZr|*8Ot~OELT5-a3=Y$ zx_c1bc>KAW1Q;doCu}X-|ICwP{wBs+u1xG=Tj*b)q61we)SnrS1Wm^yZ{it=O$HzC zY^^xFd`7u{b3P|>#xyw0HZU9x22*p@Q*D9JiX?6c+TpBYUQxaea_gD~WPS z^ywdhp97Uqvel%IDZyMA!Fb6DingH5jhlHr7@6LX9BGLz61XXArBa2h2rcF*G*w5A zc{KzACrzZtd4e)9pApjVnI>@3_wzP>0jJP}ynCSv8zunbF-Jz});h#{ztc*@P9mTT z=2b~@eh*7RCp_#2&}Z3+n#8blCebfXr;dT0NfgD1xVqM*DH=BI@Pky7`|r?%sj|vG z!kVA1gD&e{j_YPw;ExA-|17;gTs9teZ`>X{cX^^>I8kUfhHk|1f5X<{Ud<_lkCE+_ z(xnLaHE>9=6=_wQvFIb$4cUKYa2tSP#MEd$VPM?}5E)tcVnqV6eHd2!jO4Id<7EL0&Z@61;J>paIJr>-#ubqzYjdE6t zGuO$_w-?(yqzZQ7si3o$SCo8|ymj?ZbaixB{O_)e>Grv>u7Eqf5J{V&BPLGdx<3G%i^EeLe z>e*^vALE5EAkFAX*-3txm;_LBA}MKcZ(hGqS!Hb*G*VGk-r$Z++HvmasIdG)Ie+lS zg{NP9|3D#)|0I4;~of3xxc_k2S~OI|g#F-o(9avIlQ=ooEyttG^??m~Hc~@}ofyEi*NG zk?7StjwlgazF~yQ)p6xIWp+>lD)+m9r+@OYcyvFr5oT8&!q}k%_-m(Mnj-P9oG5@S zrDQh6+k}|{^>T)GEjOGyx>8tZYkn z`fZym;DtnM}HR--@c%g&Ky1s+-v@3v$XfwtThl@c~A{ z(DkwEkj{}2!+L=o)Q$-HlgaXG+Q}r>(`K*u9pf{V^&L-~#pV0hd3e}xWLT7|x$76hllF^<04R!CFo)r{B+?=Lo{V?Se zWKtTbAL-#PzY-?L#p^v7T$*(gC=ien5`VJPNwmMFI%Vu9swgR60n6Ey8fLILYVk&$jQ zV`U95XsnoPi)=59>fIEt_`xD6`n;TC<6t!-T4X z3!u}R*GW)HYXLNGB4rzZiCZJfZ?A*H)&vvV(I8lU_EfH0zMCC%UbD5u{eiO2R*YUm zz5TJY)Y(bi(RXdlYWYW0o&g8(iOiFY6VQMnG=FEyS9HR9w% znQBdNbI$Y|K{y+JCf!Jw4azFG(CfQp)sfXo^;DffDYr5Z>Oh$;h9R37%Z=o!IHiI^ zvJpy2FJm3LmWruUik|F;?A~v1W=1LM$V~%`O`VLHar!MWYaQ$9Y=SEGNM##oExmSY ziw_+sXV~*3**r{fdgYVHdc&U1B|`CuIx=tGUVE)lL^3H-M%Z9b@-vruM#x2XO_i+| zB%w!v@POCSucS^9Hd#m3CF%L8iM|K7_@>I(z`*lPr0_X4bIm!tPJ0Rsp$h`@S^KwL zewIf+zns26T3+o*y;^#Uf;a-;I!%K07NhjG$DI+JI(roV^{rX->uPSb6HW@55i>tp z)EYkfTqo74Di?{B7dPEs?jBYya??=`_}EbrUEg_o)8U%npZ%7&5+(QRdcmdrX6}3x zCpy3lxK8@u#{$$!885}8`)GlLTr-lPsS7)8qp9cKl@6*?$YLW6jj%2v_V+ zhfiHS6 zkP52(mg@;9DGpxyfsD#-bfvDlQPEQUtHqKZ&z6xn#>{3S#qeSo(kR2J2mO%Jo5Pv} zwbh%y;uCG+F5Z$$${ImHQGGXo*^e-5_jto*9o3?K7NA8b;!;BC-Z>tX-%E^IyGOYC zmdT6Loq!0>H@vCRR<4p;oqwg_6wEGlcr)Jg*HWyp!=56Lp1?+|`t~hlJ&D}+&kweR zML(98mtDm~GOHS0;MlmCQs_sdzE%b#YA29O`?YQN%df%Z##E#Ry{q~o>vL5SfXPZa z(qtBLGN`p%AHGsSEI4J_$6>5W20CF#g<@Zy%uUiWtfiQxHje(_R=g>Y0 zF;q{OrM+_See7S=YPt}z%qfG!;hW_w-o%j;8(1aY?R>Q!G4O)?GCYv7Gi%qRGJ|1< zAD4-)zZV+$MT!ujsKSv|A7&Bm0Z~gMTQ@9Uj*(G1PEO0)qtyKeErx|1R?#5i9!YJ~ zU1TsdztQGA-Rd=&e>;HAA|~~#gh=H`VDMX1!EM)pxWJ_FxT?EurNx8S+{7oFlkNUc zfoeG3$fj{O=OB)7U7(EmVexYcJapo{R*xN7OeU+l?RXTt zfn3jL)JwI8o3U!ze-iU(aGsxB-q zp^Yk+?;NN=u5I^y9MDmi42o)sQNYrS@y3iavxOMWm&usTQ4}gSA!SW3nqb%1O!YZsP(dE~$pcHvbs8x9C%ns)}pjUrDUWf#bmal$^luyD?9gO!^i* zSEz11qZ$B4$Gwl?;XjSrP5m0>P-MDP4~yFWLDo!a+uU#wUYk*kN2jwJte=t_)en* z&TQ!!yR0Q1BRCvIvp*eK5sRh6%WJ-jtLT!fS5ICp7mmFQ=5tv0sXc+8S0(Bc2y=_=tIb%qgS*S>+)c3tj#pP3SUR^a+8cSk ztT3WCqbaiN4k_FD1AAu?T@mS+>p>{TaPT|4);uxcaANQ1C_j28EX zx_G7?N{rvQ+2KwffH{v8%L3X0 zSt^9d?{zuv9^I8fRYlAwqHd{{HWAg*d%pE;DMfUf^tyOH71W~7vkg>GBr}%@uFxGC zt=CNzxE_BNWBoB-r|w0iK%)2t;*{c2>33`7J@7Ol_H>L=Vo+5~U(6B4gCnb6GD-pL z%%1;3g2v4gz}q~W#-m7B9;0(Bd&XIB)Kt=e>nBb~eg+xhx}7bcyP=U?Q8UUNZ`oPy21> zuFpWd6V&c+8(!!@vTl{!oPExMxAGw(cFhQEXWJ?V#^@$iVTwIFslPboaBh0HUv}CFXDAit>92DFBRoLRWr0649&Y@A_D4VYcWIznE|$ zXGP1Xw`^@vT6FI3DasPa2x>ZBI@o?@o%iN(^p+b__aT=Wd1&!>AHx!XqFxj74RtxZ zY$nz`KRnTtE?BKKwuV9jScSD7=UJ#^dx9Ci+E4!?UOFL5Zhh?#vc0Ce9Qh#fKR2-~ zP7?IbYnx;jJ0#Z)n%1y>C-HBq>dYWu!a1&by)E&veT2lmuK5C@xbWqOyo_b%*^&{P zjM#oVNN3Qg?)F!26NC6sCYOP)NeQ)CR!$L&cQ*C)+YYL_*qB&=#W+N4KyZ)ld6YRm z)-r+G@_Ckx3~1BPy{Q(E(m~+i_8{uIdv7GQIEw_t@F{q*(>g}nrr#JU#F(XBO!-p&PDe_l!Dc5aV-5)ngEVZg+{lU|rIvq> z63ccG?+}m%=QyU`G7YU>W8G+KMsE?KasxRCqWyGOT$Cm)Re0bb=yZJl#Da}&Qk+cJXq>M;Q$Qo0t=#8urcOwhn3Nsj5`~)+T__);hw@ol9^4nsM zw>$76qw2Dg6ZO;k$oxhJ`iOVYHJmkqQT9g>Jb3g9W@M{J=%RG<5R*dX#fxODwkfGF zY$Oi?O@}6a9=To);l`k&XRSnf9h5b~4;y08LyO?TMF(s<{M-)BtJeIe)1ThO{Z8tA zlQeKLT|rJ^A6{vSSD=vEKx$>sw+lBsX}pK(E+>Zg0x<}XHlTtY&DRL5^h;VQos+u- zEqjl=-Asl_b#C%nCPQ8>0JukH1pJc9fC{zk;#IXPT+t*82MT$cL>`FK->;{4@pl?T zHaX(3uQQ%-P#9Isrm1Q>$IA*SB_YZ{i_pERdB8k&H6Vl%5V0GqOKUnAhliB?CTdcy z$%5|dpCHHWCi89b>>^4VDZN8#J#V%ZBNVdQP?sKKZ;eVK6qTtxV-mE;JatgBEum|v zqEn{a^stbF?!v{GB|*M~6FQDgEKj9U7N9296f<);y02rp0zY(boAx8Th<8rnstD7M zqrIKv`1D2(pS+K;91h7B)p}vMYW(}>&*VVKY11m)fxz3~@W*W@s|OJ8LEO@yYJ!OX z@37JO;vh4DTfi}nG9xWKNCfkZUZZPG(UA-MMYZ@%)paD#HE;IxSaW=NWNLP7ifnW@M>;}?V?m#e27swy$FQ1>yZLUfT60iem~i; ztaVU~am^Q_1(h^Z7EeGAovN~;r7%Rax{V!dY{wpM(C8iQQT)A07BN{mMu|f61JY#x zPeEDzLOth%&(^hqred zFY8m!6j-9~NekY@Xi)bCQkINW-<+Fm2e)9uBADFCU^5Czs$GAT)cG{5y z*)j~!O%|+eeE4p5fjytyXM+-GTX!7 zAO0P)Pp;Eh(^IZ}&RZ3&%%%U|hJyw&i54`)U(DXJ^;w~S}X-tqHtA3nKLSD>uzv8P}?4ZsQrfIfg>v2wE-hF4C{+*tEMH!xrIthv(g*tij zRVv>Xasc3kLL8Sl+|iyWH`A1@$$QRg`~rbbwpBBvn+-Q98nEylg$jg}5EDWuH2e^Q zDNx+bsTo{fD1iSJhbYt7kl4su?fiT%`k-|m>Wx>gPGA-Vb3-V4m7*dp7&vDYuiPj1 zjYvz0#|u>0b~t`Y%LR_Jv=IM_(D>-TDzDQI0ZE76gvXLtaidUWdWNpD(ZeVC!tt!9`SA#%{1Y-W zvi>Y9;{=cu(6|3N-{L;blSZ0{{2R>hed}+;yq>dsurA_OyTbHIm-O* zY(qo1f+G7seC2mGSWasv0<^D%8m~NX{eXr^*8d8j^62mxiQGI3P z0Tj|}tE;OU6n*|Y%uT=%kz7o0!Q-A@;fl26ez~ls6Q`bp8nueE-(n-eSO<{b*;-RL zyaTpPcBt(2u*KoCYR(JZtc3)NC1T4oG-uxAxmR~4eqTcelW4+UHu!JV8kG!}e}J-o zMh-s`=yTbSuI84d(A+a3J-e*9>Sdr2>OMGvIe2(*v-nH}C-XShtv z9$aPy9A#SJ2A|;BaC&|#6JMC!TeRG|{6eb~zL@+B(msmdNkm!L-z#4TesHbTEIvso;@}$u=o;Fy2Sh zmdnUh<~|^`MFWHi_e4?%2N9P@hjH2so@#=|uq)JvVH(?8yO_V>vt{;1+PK6-||@9reMBk2QR@LbK_3O~0?Ze*VL) z^1z|r=_KdN19SMCf>^5ZT)FAOMHet0?6h@XyrxRz#r5VQnt{=|pu~1^;)MR)Dmzur zNm3UUxE!MLG0iK-iO0Ft&sfQw4O`$3A%eUaRp5#fRIfJ4*p}H%F$N8VlLsvWx9ruB zE?6~8h>fWmi;9D$bzIRNzGfjT2iRxidy6fyBcBou7THuXaF!v>dF`T@i?u*1EsFW# zhQz42lVYsW4N`!FI3>whzw3mz9WA4l;hwD0Ij?J2Y$);9*P}S{a80kHQ+4a^d)knSVNK z<90IMvV7=92Uqj8?vfC$s$(nqFgulhp`_JIUUX>b_1$l9VSeo1f6cWX-FB zsCmGciON$>2Z1j+=4Wz1NnG}>k2vFw58zTN$C`u%lc~fdRDSo_OD$x$r z?ngw|vylBDrVWP;SuAn}I&h>T-@*DLo%4hxFsJQMs%M`#MFLpVQ%_$>V_FVR{6|7% zN-g1#s?h%5$@No>$UE3`Z)6H5ZM3OKr3iYf+s}gqta$Y?*T# zbu#+?!OJQnzxuN{`}P#b@qPe!?B7`$i6b$hJ4bfq!sPf&6@YZViZh%3*QzmyLN+flWNavf!iX!;QuW-1Y8pf5 zp)C!YBQSt!LIpQs75aEOJZahR$VEP~m4f&5t+K1-OLycOD6#xZ3;D=(w_pAP+#{u= zG6HJi-~(>rR(DTN&svIp;vNIAwh?i$$fo@O#M9$F>iHmJ9VyG#$pQa!NJno3; zK49oco(2gWMbfl?P2sW^cvaTs#%sq`fjs#qHfN{oGQ7Va$oD*Z-lkt)qyZKk_0c>@ zzow6kkdP1~IpGyz7v4JuQ}}*khEGJ-25cONJo$yA*3>&uuUI`Co;`CT_xs*+i;6$Ci}W`>(O_In8kBk}vf!yL0y{!`ZSdO3(+y@xLWjY~nf zbYI=yhdLA4t`1t2^sM{?9u8&B$mM6P+4U6+A~(MeIVIC+{Yh1M^#{gP; zvFD$^m=$texWKq4?Tx+@;kxKYO=zZ0Jd32h zV0`NG{Ul|xi&Zm_$|gyFFvgzl z2h|-dHO#UJEeg+BUHAr4dLkZp;*;f1%celVpg)<+T4o|X_*H&?V87Kn!WYmSr|0XJ2nCTQ+62kw{3cgw3Z3!lKj~fvLxVXR zl26#Son~%!hBnEYZ<`|nXe6Fv322|q=`-W^f0q5K;p7cWgxD+9fON};=L(ZQwVMPd zcN~@M)EvD+XW`u0&AoUW6HAK|`)noZemsBWQJzpbvpbc0P)M@3!GW_>GTJX}>?0yS5)&^_fdWTBAddnAkKGshC-_eK3V@Lj+M#%s! zFt0J_Ni_AUSei0^hT9U7l!7v}yppu1t66s`on(C8$x@RysgmV+=+k5Wsr87zvc_XF91)@=j{jYpZ!VMihGm($%3zbHT+|QlB)6WzM-{_0(LwJ zJw6GRntv#*SrsL#lWunCpQmRaq$*!Zy3%@Ow6yi(@br|7xL8^U&B#Y|n!fGgr51+y z0~~5iUO7&pm=R)w#MgR697VtQ$qo}pnbVr&IHr}(rjlr5x1GZxHIVOMQ7;0Dh?xJ> zarW|!FYtp2z}4wOiSnJkX&ev<9osf8M`?9fjU1OWQ5|F(ZRYuP z9aqt8f7_gXW&N274Geht?ccUL;`zcadCfoXxc$JMuAFV`B+;J^R)r(AbYcJO;hW{B z#+##2RxhRB&piDA7om`2u`1tGte!xa<@Re-FvE`yJzt}+!pL1Zc8M5-=UwJTD@W51 zlagU{<2mkax8io$pd;VJ={<1AjE`EILofGlyrOn7g+)oN`KNYN(k()@e_6$-1$OFN zo6;dwJ7#|n%OdJp=O`(5joQ8R(LaF1@)27bK-yPOAjrg6pD{o1RsZ|UUUXS7t}RTwdwbN`pD$PpJ1 z`+xIr49&%&XN7S((9nI)(`Pm65!Yq9c&5)6`5WUg_=zmJHp|Hw71d@FV!uY*CV?D- zBjQn%Yh?GqgEljPV+ws8y?@G<)8SiH7w|{ah4Sr2M)0D^&|tur9AZ*TMQjXL-7j5% z9u-%VE*Y-|d}YzkMe$&&+(d(S-2Sezle=hCP;;>DF^Hdm#7$4tX`vKbd~=JZk`uz<0kPjgU&z#+}urO3(R#><>L;F^EKZ9I~>h65R=^)Q@_CIdG`1rUW!?-1t zZtkf{#zE@2CsN5++y1`Af4Gr{SU^^(n!**^*QwQE=F_zTCsluA+xy2hd%T6CXAL?(gYbOz0> zGPbzF<(QO3Of!>;PjQjD%YT++py*qiYX(6$HW4XFR#6QhzTZw==N{^cm*272a2oym z*_>cT6V4}uEm+CZ53X{`rC#fZYIYYirkLxfC$66H5(}=&V)~8#I<}_jkfQ&4byCOR z+NN)EYwO#)7k#sJmVzi>=z(Wt>T|0(k|^p-O}o#X|e(-jeA?B8X;H_s~$WoVXo-cWz9Zc2T}w*1iE5%YPJ3(p7{oDn=st$+8h zJ<`|9gf5t~J+d=M1-pi{Q!K$#wlYq6+kJBr zWTXFXcAQVoBT{&;1S02NJ9tF%Wjg7iN`<=p;h3?-nZ8$1v2k=Rh^aFMCE2|uzz_Hi z(YA^4U8_@fexKqtp}`W>IDC9!<8Nl9<*mx!PNeu(97Rk~3&xuWQedN-j5JS+JunU| zhSO9RFxitrQ{s_l>dFcJXi1^M=#y66dJq)%iuTLLVV$0LQlxVFBgi3em2@#nac@kG zSpo#=W4vT$vAs9oq|NQb?V5Dx$st1-lBZE<@2o`l;7fuuKzD-?^k~?WqG_7%)FSb?zT8O8H*;`6fLV1kCRMKUNC&-Um#&v>evn5t`k ztVy3;A7R-C4_5TmL8oC?XgC-}e;Sll$Drs)^`rs|miFXqtIN8nNyrI*7Mcds7WT@D z3ROD75+W=5N%&f~{Z=Oi_lT8PaVv+2jHE}9METGo%tO4Na=tk3LR=Q=l01Akb9Q<& z+k8Lxk(~Z~8@tm>lG4pjk@Lu;MJz7|aluN~TcI~7-p%`SI$y7EV4B&HaR*xB9j216 z*vzW(3|i|v2T=C6u#a_mV|6N70RUx|>f*VeLy6%B>EWAc`+^z{It}~A-i)(UKR)(k=iW2JU_q1D5I@Un5&HgXm- zN7`Gv1HfvvsgQb`nuXyoRt{7d40!GM16foZ7-%S~rwUS7bP}&)h$pb;&dR0aWQoev zHIwl(M)ip8gky%%Gc#&sCCLjH%?fF_MEWG#OrTwL&k6I#>pPnZj|ylLMGsq zYaIPgp!1G?KQK%_|CB)2_wRKG&Gqi2*_jGgSucGU<=v$vut;)8svWfcsY8;1YBFa#W&&f#1 zSn>WK3OD5_T8S!0XbMYiCkXq)PUtdWN5C2l@*3!Uic^lwA@c~g0u9+uWKl<0>g+HT z2HzI4(TTONsoK{p>6B_}3BC-n;po;4HMWNq3uly6*QsBKn|X)pSc8fy&uW1{^mw?% zk$!tv=Om?X8xc;1p!}vH9ZkG&aN{&=?iCjwWx{`N9wd`0An$vaU7|h9VC^A3#bFxOMx_n!? z6$Zt2PArW1dc~)f0011=Cv1vU8vhQPuR)={N(Jqs&fw@YV8?fBmCz=l*l!jvw@Ngm z6>SVl&DjgGke`P*X=ZtuK{ZVY=}IKd3Rih7Q%-V8$}2m z3Rn%hTn1V?QOkT3shBro+(t*#1I!7utenLd3Jn=LIHSGkvZfECWQ_6KV@%;y_Yr8@ z-#5hd;X&gNl#KS?Yp5ONjwq{no>PUT*5;65juf1cbbZx>9n z65-0Dk{>MA+UQtzIwbZR{#n!c>h`%1p03%F<=^ed<%Z~JUOq|QFVH6}(tt0fHaHyY zJ!RsUCo`Oz2C6h-n}Nh{|E4eq;wp(e1%$e#e zn(?W;V(uCao9!4w0b=6vh2Z(2ECh~CJ9eFlO`;~@&umT?^L*0Ttg#lMjnhx2$O>+l z!LW!Zpbq>iV>B#*;tuIzj_;VmPUao!7#fzNn`#=Y=xPiRmpvDcK+{SDgmEyP{9d9x zU6lBQ-<013owAK7dC>`QM(3=CNU3=18EE!#yK6vlbL} z8ID0xLigh{+!li3u*qGxNgIz^)bw%-PX_=jpO4-2^u&~JNaAm_|K$xt-UNfCOr37u;~FJa!Z*z;dOlf5 z(<$tO6;yp1?UjpmiFtAwCkBOI5OE$sQ#Z`nbFW~6(#O-cN}N8iXC;k%o1SA`D4Wc_ zSwB{>nu%WlV!JCPcJmTFIwfn~wFs-&VR;xBONdbB6P6Om9+f{wrPGBr+X>$sw4#zR zy%~bFTUSa}85W%pt*qAUotnaunp|_tIJd~r!&rJ^@r=uK`9@94&r%>2a*>~W9A!Po zq}+g4v^=UU9G3wRlG7E<(m=oa5PWVCro*F`j=k&B&S5Upy#R0R_u{cmDl0nl>uP@j zLH?KUKjo|HC}Hc=8R^sRb8Kt_@R|gdet6Z0kH>GqLlu`s`!Ur@e-zgNXUcWG}lF z0Xcw^TrAilSq%f<_^7HTVe1jOta@fA9^|8gb~e1m)<3=^s`zGPx8U<;`b9bT+AuO? zKGt??Ga+AY#`USQYh1Z^vm?Mix=x7;ap0e?4PpMKik&yF;L<}{N8~^22zC~8NAnX8 z2*Wr0{drk= zv!pk3TC;~@<>ecGr1EhQ^F++IfL!l4oR`RGW^;bx63TDk#1*MKkty144eN)t4hZHE zoYt6d95)yc?wH?b7{Rq>ZZO^Azw+v=Qop+Qi+Kn#P8H=DrIs?OdHw&nBzPT7s!SoV3WOoByl!&#Dm!#4K}$F&bsIY{DF=a$ zJtoejpM|swZrTUwhXw^J6iW+;U>6r{uBtAisIvm5$OJE!y*Lfg4|t?YS;F8a3zimr#>vP4(miG}! zdRir#@Wkl4T1~GqMwK5>WOB=_{A+Ux85^guQPjXY^(Ay=T47f$cA{*`>(;^FWATq5 zuu37jdL$kB!J7A2V7#Fa=dbI$i+c05&a<7hL5n#N*jaxJJ3ds>8Fzoqf%vnx50pY4 zu+w!%LRxBLIkGL3SwZjEc7DH~!+S>t{Pic~gl3N&h=I21txKW~v=Qbk#PjbjUj^{p zh3OJombT3A70MddqFx`<3d0>?1bZT2HhHT2_aYvR(01V+a~FzUggIul&!8hoV&NTD z7}u^z(2pdl2+9>Ni#p8VSudtQ8{H6*uef_Fhz|pl@_GSf*^3(0eWRh8Yr}o=N0qK zuh4lHUY6U3Oy!uQAE2E!Fvv*8!VQvxz`ik0D1_j(D71!>rw=3DBE3e*hl<*;qOE;8 z$7}{;R*+eaZ;UA9GX5M-(=kG{GfPy`iF+5hK7J*9RYl*iWZmd>P`dxqBD?=_O(W2F zRb$+K1Pr}VJCb}p(wL(`82pENmw#w4cx=aBfOh1Vtlo}E2HfWBR-I;S*u6OdWTVGY zYzuzdkN3=f_X-&HbXTv@8PYU(+FjEu_GqxO|n@nT8nzsC9tsJfP|(YT4BR zur5CIIMM>36J@)wbk-gBPC&%~jzgDiU(nBLuvhustuopQ4LU2b<6E^6NH*mK3BN(V z-3*WAOETtT=Ig|~fx~^BZ&S%#UF43eevVj0$4^xPl~M+Bn#0O(lGomWQ09ypdf`M( z^FDXK=AG+F)K;s&te(rVpJ3t9=@>6`>*N2-TaVYkdFt=tS|t?jr=H)0cC}APEh-|8 zFrU5Emj7OI{}+{lz8($ix}Skbuix{0>Pd4wm!MO0UEWXv6}!;qAa)4zN_V~1lMOO? z4iAFLO;t}Tz7Ky(w~*ZQPmZ9hYd4gm+0j>Q;F{Y=XHTG|0ZvG*HDvhAu9DJz(6QiP zZWWjVZN#GPaV9(OOu2Dp_Da;r7R1;z`ji)cfXwaozBVZQoGE)r7f(8_EmN0a${vd( zs~eykDxt)!xgon=Np^mOJy-onk;V~>R~o_tCIydaOGeVYk}Y5=AQg$p3xX#Ef@*pK zzNz-o+BK%~YRl$+ElqkBk`aR3EBlYn82j-W@OjC3J#*$netY zf+}`eSq|6G5Bl;S^2q#3rrgzg$HKZMr?km}zIpa=OxW`H_Rutyqz_schp#@RBHYTa znaV|HFiMA!Lq~mvJ}k)^GR_&<5j(_FrF4vM4Gxzn&9FeMXe(KaD2Xb7QAXTu>=4{% zx(SEN_g1kXPx~cLkSJSORLUu>tfotYwyv*a#s8Yj0KiXCvO`s#|@Gccep7=6audK+FGT z;?^tF83bE|w|sU*yuWPxZ$aK=OsWFCUK=Whf*dqp8M9J$?e4J3yPxUje<-zFEWk$| zAX7#0cSS?QAuBji-nKIjBR2E#7q2Pck2HAq)Q@HdEt{%!RUgbYn8(i2hWqkY#6NbF zIZ^BMJo%E#6B&Le0+udAK_s*gW(qgf>vFq6BO1s;@ve+w7#l1CaTC2{t*ul`#mvr2 zKV(|H%f&mD6)C3nkCitMBd9P7D}i};f|RfnKo&&BtKUy&^erq#X}V+-T8hJ{H9zm@ z)wFc9&NX`@ZiE;EOG)UN3Ke>BY3WOdNB-6*g~8ix7J#RfJ)U?~oNK_i=YR59@$j-a z*f}$c?4xlC*}0`CN36?~f-XW9{e73zd7VX41{KhlZ5=}R44bD+QN&WJW9xn=U!l+3IChDx=fUpFLk2&0RO2)uHUE+>$aZ_ zf#4a!kKYFNK6XjxagP(bqE6;Sg}HQ;Ez0C{Hcl9@$Qf`GQ7T@H%1CY)n94F7Ma8Eb zu>^RDrHxj6#)9VZ_w|V*-{jMK5}^B~XT2zbu_)5#`$v$dgWX@I5GZT+WK;AUR%q#G z>zYQYIsYZm(7!D=$!c55n z`yV>y&#k3(37nN_r3^&cWRiHMG%YLs0rt9{uqF&DcH}{P^U}cdlgMpgPCt{{Gls== zk~1+B*rCN=tQE)y(#L7|$40+Z0YD~|P_erfRtHkEC$Nsc+L*1nxf*bCPrw@Rn6k$o zc7J(uDpl+duidCD-{1XTa9+JLD}P)Grbc1 z8?4y{!|cT<;>$^Gm}9(7zMS=+gBVSo*8Bt8LIKqaY0;5r9ger)sn#p*mbrwBXGl)9 zP4+GB7TYD~|5X%_J87Kf12t3j@e2>DYQMUz!9)$GkGCZ*$OWHNlIYQtMC^YiVks<7 zk?;gfENj8nX;{x=H|tcyhBN5gd*_}s#IfsKEfx*%Z}fcc;5^p(qdq`ICT@dTM&3bT zO2W!2{!Oi~ccf%n0t{r^Qvn3wvqh{-AkuSt2{VWsNf$>o_fae0mvk04s>|eHYUNbg zH)8VyJZA*Z<2;6=lD;2Fng0T?LVh&7+|C_-9Yz;_G43b*ye5rto+S4}Yn-<}wxyQq z%m6f*>+>H^5mBcB;I|})nU#B>5j;|oGMnwN!$3f+L4bUcTmu^Q`ih3^fZ^%}Fg0^{ zl>}0BUiB#h<3n29&K>kea+QQOx;9x(dO&P;U!pE-aeY>|)MnVvYVt!rcWd))sEWh8 zcGT>d^K*5Msz|%}zG2~rdlwrhVrd#=LiKv-ACTv|= z1r3QUaC)EnJJ}{}(&aN39&I|8$Zop&0d>cgc{EaW5J~^vh{P{KO2JX^)Uf!k0v_os^5w0ap81-#C0S);-I4z0n+UoTR+&5{3*zk>B7c{^`@Sh9qY+JVEA4bX-e1hIaa7v^Y$9@pi+$ z_iY+!%MqO<4qAf7oyW9+Tpt#3Kg%~D9x8(5O) zmYttpZrs1JlI`oLJ)oK%%sd{$XnU1W9@Trtb&|iEMAb44SGWc73!)Z<9)vUxL83d) z5}iaQqk+=t+7FJmM4qIy;(w^l8(b|gkcq0iE?}BZ*fXX!TKN|)bEH|v0gyF>WJSeO zb?#{#!y=r)dnQp>86)%J%`!(<%TT~Ug&we_SjUYqE^8|Lhb;fDYLc#r=XWr^C#sKH z&c@&GF+g6PvdKt8cZD`y&@E%P{TE)waFRWuw2T0_!M@80_4Lrv?H8MH7%~rkms0}q za<=5!q_shF`!DDl-6qPLE=k$tDTv+ZWLk>;zv$}+bZ6J40{Wk{L5h3a7#FM^YBP*b!b9?ULc53;q-^Frjwl${Yp?j!=;)32l zwHMo3t#fRL;nR>7c5u-~!n;UTXRIwHBMhIdHH^fU4y4SBYz9!)?2?ib|HyL92&ZnR zv*4&c4rZvP2$UU%HOG&D&BCo?uHHIPx6N9@`aXUPUM}VkHKqbx1#vHYG2Qpgjyh&l z^NY%X z*J3bheO?bo@K}7DSqjT-zF&Ck`?!wCevxN{sPkYh-Ar*)ut=&ej*O=o?*Xadvd^MP zmYQc2#yOwo(zR^SN{^M8d`)21KET!uPItwSe*GtF0h~#OanfMw5$GCe22ffftDF`8 z&Bc%wtHB#@LsP6aS^qL9K~j-i{O4D+M=jrP+5uDBlK9|z7-YOFqzDYEc@-<>P0%{lh^A{6>*9Z@qB@%V^7E+G6{=|6( zzo5_!J+;4)ph9{Iw`YU*BsTlOk^k3vfgKH*I?+;9g2;zK0HzNqnEOIGj1YKPF8G+b zGquLeb$ed4bn;v);GwUJ!%qI^ZC)bJ!ueE^ra7MX%k!6tSZU7gfjZLc(r2}j_+J7t z$aUYw(MM&!*}t>TVjc_R1}v0N7=Ymwtl*WB^+wMu=;Z3%w+)$4`Zr5cjoKp3jm~b+ zZ!pJHWBf-0HKY>O9sbi^`Vpkw3bM9Xwb47!u1BLs3&`mC?@qk`+1+ybw^G95Ki#);lyd80ahZ3#27y}1PWZ!w;)r}$#Rd*@_0>|pTGN}~Q1J(E^xy0uiC zw(plJ?GIWF>#Q}Kg0MyE>R(X+$m(G&<_7|fHzSv!TmZA%Fqe|{_^91&swYGn7 z#CwbXEpYQxopD$}5Db?Pjqy*ZeAa&#DXohTgB|F8wC6SSB}NZ3iFtIv!1foU7H!v3 zxCQk*u5F)NPyAPj!&WC{;BcY+c!dLg!^Ux}Z23dpkeNCB%2pXUq`X0GAkyIW8Qg&Z zTs#v}{X1!y9;n%QuDTA%c@!gQw0;tTgks8a|J25!)HGCZl+Oz^L601~1 zwO3AdG35k<5T;OuHZ%i8Mv@I}gaYSZbVSq=E~oa#ckBqlOBk0cD>W?Y-z0@qk-EJW zNCZ+GW|g*$>YT@}0#d$45SVv^to|yh*WtwZA9v-)CkxfYd*G-wL@g{Ww9lB7y9i|Ko0dNG0i4(U+Q3FCRfD5tw%;WE~JCJd539AxO$CZcsGKN z<2)A)+Isgas!1aKl&YQ>TKYJ>*+ITo$GrE%R6}hv6Y)32%BBT0m#sY}`W#>>$BkMj zDvg5*zQWf8TQ`ltUcLHU-&F(inFP|tR&sW6yMZgMCir!XT3zxETlbYUPxIFM2K_l? zf9R+jpJw`;fbTjNJbs)JOlP{@rMUrBVCLyyY+T5C?8}2Jy)8O)&-gwav>LX{NrqqK zI^eZJGBJl?G&1|6Jxu%LTTP=&_Ph}sM z!dY)Z$|!(6S6b=VSm1@C#gZS1P^ygAO4}sfv5WdbCWEUGBg_SMRn}Q!I^2_z^D1#> z3q@b~6PU@8xze6`mjfs0QIU2ksY}lrGBY9&a~DWbu)@TR+;oz-%+bV{LEOtA^$VLE z?n_rQdUJ<8pHu){DPo?I--#M0Qs8E)n!T}832vDm2lDMY=OU>)Fuh+2Y{?6qcNsoo z{4*OZxMhK(#UDQpHGNee*}Mm+BHrO<;2vXA$s1C|!L-k8_WMy-B_A`awxVV>%A|(V zAZfo)J#lE;d|Xb6Ymb;vwikM;I?R%)FbtzQZ0iP2+nR5G`zcZCsX2$#S1~US8%nb9 zUr>fh42&=KU5nkM-+G)ak?L=>cVNzRpDSBDn;y@oEXr5cPRn9XJj4a*KW4iQ<@9qt z4)|q4_h@E*_fCbwAZrG1_LN%I+?a&F#7Gj7afFd_w)Bg1o-Y3;u_z%!>A#+X(EIlG z+A1#yIWrM2*sEVk~E%wdms zogQGk*1C4c!x~M_sxi?1x9i!SC+~h)?h}$`i6yCYm35Q}a^3(cgPYl}%&JIY5?y0a z**QEr^`W}v95|iA>W_t;0!8|2t%4HS%vj#16j_rX{@f^&ak}R3BG{6m9ni(cIT1=W zkV1t(f=Vvg0W^qv9CfV%{{7&3C(?LnsC zd9VxxwMqgzDkqFiY@cck%q+>MvCWBQw$aFNIbTt$)0aeQ!5@ExN!Mi==i?>S%mRR0 z@eC%F3(DpPOr@|bgCaI*?w67an~=?Cy)FWAkbL zz1j=dp!=|R>4o_knP!P_`3(Tb+8<%6t)p&qX!;r9efm?%>Hc*aHrZn%LyD+y@X#h5 z4x)qf_WgJG(JmNVJjBI$bnF?k>h<@Jf`2+3zO*<|sBQSv++#({QOf3rUd zce`D}afc0}vNC585hk^O_68H=fYkeW=V<0{l?qVd_oPW#!|X(O0n8oP0kzt*w3oa^ zme2P|OY3#k+mbp@Lh1QsStmt0cU2U5hXHao2`U{hb&PQkX4#`msA9IhvR`FwRrz*l ztG?*S2cOEu)z*Dk;89PjqM2^^&@sO|${3@eGjT>fX8IlIODQ82YJx=4y6wSGkSF>;>@awpoLWvfx1|NUn#?CW5sqa;|O)FK-K#8%|oM#DT z8yE*G1s*7jj?YrGmvbN%>=jrNLSv+vv`y6g%KC*_o=7#umo>tqdJuAupoD^CxsLaP z&A4}-MB!^j$aqS-m)&8lzJ_|w9u?n?wVSC%T!gHE#$wKCuU5%DUlj$Q>IYDxqL=DN zhL?K6o|Uq;+){sXvU-LErHI6=6+z1u1p=hMe(cthNrDh}uNHao2pWADQ9aIt@1+EJ z8M3{IsXz-+B@W^_9>FKmsTIox*K)d|s=vvXm;K5}-4Hc<^CX=vljAS>PXp4GKqBz^ zW}KsM$i~wUkLL2eA>O6S@Kfc)1S2@1>qEJevdt z&jB}*-%z_)F{smNC7YbhnL{-#_a!{U<$vnw!x|1J81-<%$HZLWK*$6&XymLnW5Emh zRiwk2T5p8MKJ(n`kXU%}9m5hSM&+3xEi-mC7coF&uX49f+v>=du?rj?*jvnaSjeJW;nWEMHQ$C zqAE%TrTRKQh^{lBRjjxq=|xbbp^4yO{{>=0?2<8BL?a(Z1aS$VjXc>?!;MRTAun`P zNk$U(rMPRBD|_IbWEf{T(L;>Fl}wN%Chrk41|M8dyqlt}eYmSrA`NhsL=8VNoF{r9 zzJFNgf&B&VbH|V>G)~EGTTkHQX_vDq(B_o*(i46i%&`-**Cs<50;}BpcDmKWt1d_Z$=H$YZd223MOXlIVi8(A@3ug$lElO8V*^7sC#TbzH zqBn?caQGJwO*wBvLlVKja`MBf1AX6dyrNB_HZ1i9u2LuFu|c&^R(!>a88J%UpjPTM znxAh6DBXx*-lB}D0;Hi%BR-qpAc%+Sz_Q;yN;u74AWPzvYaH?g!b?m)2Vt%>&`Q>dj^C7C5 zGn_2fBWZME*a`x&8`XbAw`=41oEFp`{Ka>OFb)otPUPe797KU33|Rn;dgiz<={hcu za^$9=p#lBsdUF499sHd+gXswmynH>H&o2Gw`KRd{nExp>U;X-Pb3=`^XZU3RuqdaB z`JQDz>}g7MX=%{m89Z7WR;q-9Vz z;Ztc!P_R*bv1iars!3mtExNq^C^@|^I=q6 zYun2Hadp_NCq6bO$qY2om@5nBnWo_p)ENOtx_(4LT`xCkV9IG^3I7mUwBllq&o8MC z!|CV8Sy}DeTi4vWM7Vw8SIK=0H1^x*)O%Oh06LbT?f}0fls~+goza8fAj#C3j>C)> zzpiy;iBju>kkrN2qTf0Ux87gBqtbz1gYeLweEs|q;4rStiXkBpL{3N#zC(C7<{UFF zMqFkp=;jsw7d9-5;$zstR9xf-37_`$^_i~jS4W9YxkSXI|hLoMNEYo)qzY*Dv^Hi59IB(~msK zE=?wQ9(7RSh;)=NXD@!FCh%y_zP1M4bpA*Q1ayvSd6*$IY@jFj>F3 zvFH=;>gDnA5v*FA3y{rs?}>l@@B0Uy>0IM)GFagL#p!?xIlc0%3Uh=QmL8;YM3yODdGwC2@aS21!Wmo^=J8@O-u-UJ$xRRsC>L$xoh>9*-DoD6N@?*WkqeduY~)| z|5%AhUhOvQsBss7DW4;N;03(B1jHL~TtQ6Br35@+#a;!ZT_y!&^3w(+d;$zV*+2$O z9Q{MS-}Wy3pyu-s!51knn^kBg0-q`WhD-hA=FBI<)F%V>-Wu%-oYKhB+B?|{j@2%I zF50{i$8{NLY%zm@na@<+;brHh=~qUIgPZ+a`A)9#o$Ou(nr4S@g>E5RqOLq54*GMK z&lHPoV}=Y5k82xFx>F72yK7Qw-791P+ees>O)S&J!wFGBExqqp9hZl#q$b z2_qq0M!<#92l_{^aKRK*BJCaP=YDrd{&QA-l3NF<7JTcycF*Q}dq76l1F(+kL7ZG` zA{qbCZZJPr!ihQ10)nA8tjDwVQWkiujLA}0>snTLovn@VL}M5u^Ls2_b=Bk|W@Sa$ zcB^EJX+?w6Ti)gv03=tuwiR&Gq5mni9yMm&Ub2VF0b=8xIkk#g9kTfgP0(*L!vE)9 zSjgTWd5>*uu$Fr@PpovXCFMR1nr~UF9NAYi!Sl5Yo4NA1cYnP3o@R5O{3}WFr&{Ob z^ZBRav+&!!1K<;Hl9;t#OGSHYF=rD?$Gh9^8Vj*ihBo|0#grcm$X$Io?Re4bcbCvy{^*oU2xnDSp6gT3FnYWa#2^n z`&?Ur^voot8C8+KAJli~b};_bvEwbpx8gaEGp9*;=m^Y*;JbRyw!^yR0OqTxGmEr5 zbg5a9nw@|(phu=$RO#B7<077j|4IR3uIp3*G>*k>&Zk#5LcVmcP$t1H z2J0DDLdv?Pb@Vri2+V~WjEF%~Nws0QKn-{Ms-6QenibH2YtR|eqWD6)Nvo?uyN<3) zgb8uz4lzulJR_B&*->v{Se}{cUC0pe%`S;_Z9@eRrovk;z2-ZS>>|Z}xngZ(M@T>| zzqLdhNlQO1 z8<~xh_yuDOs}FqX9DoRV5{;h<)?tJh88_q4t!yEbTw>mEEhaAcAt|wEr+@hGf}xe) zG5NrjIHj9s%Us@6kR+%ReS`ebsaG;IwiYOGhYFyk!>6vJGPU(RNmukL5h88FAQ2vG z?w_-Cm*bP%ZE%hCUMFdW0LXSRV(Mx+GEABl;+o3eg74P#tdk`(hgG&1q+z3e{l3+V zj|MYL8}dTG^LXVbl~Idr16*f8eMqA&@aB%nM z<7XF!uHom)(s2`9$3by%aaIlR`B!bAge&t8Vui6~^|D1(b&YnOj3~rc!jevHOwj{P zd;5V76N;F};>!8hJ}9qHEP7V7Eie-wA37`s!1$GB1rKbAGQv0HyZf0h-y^ov`+NYGO@Ps^L2LAT{0oWOW}UwYVf&+Q?I9B+7g{bPMuDSyL@@-StO;al)Z zi(x5GL9_F!x1fp8zCX-9o>N=;;>xe&;YhI6r!Cb|cz6{JJ%r#|`aJUBhlJEYs?>dk zH?(jC@T@%?>G2)G^cDEnnMcB(clFzDmZ7ChRm)(J?}1VMkRf&gi)1`)R_04^b=6Am zW7%Z{nR%s`)ffy-TS>8|*J$~u@{<80`{Ii~?`X;}py8zi^8HbajM~IjTi(DZ*c+Z9 zZ;FtN@;&17igdR7z2!4q$o4xgZ=vD)f}!8$31u5lnq6vbkg0Gr$QnHZljlwNo*QL{pH)%B~tqxRtES`z*mE4}lt_si(PKUl-$#%(fuGPj+a;j z-MA{(fQR_67|yzhs0H4foSZxD!8AtAqo(Nn{e1$)9bce4nYnEzkBt_pF~4hT-PguW zn?~S3veq$Z4Z8}pGHpNT&n!a}uxr~qRbg2@D-B1(+N}>3);K40G5?yO| z=Dh}rnfrzK+cix5;T?+|vNGFd`{^*Y!SYz;oRU zEy~0GL#Yb$&-SNP*YNs+l?+%POZk&d$Gg|}?$^f3RiQ}{06sMp6_s!7mj5VgiTiu; za0D|+D)aXwKf_^7uR{-qmB+`N2mOySV$XKsx{du~#gS$2Thxg7zT*!AcgOleE60Q? zDaY{!^kF=|0&12H@n&+l(~+0b^6^6f4$vCbvxZLTuG0-UZ|qe5L&h5h0poqoID*iR zyTTQY!Nory)oTvCZ$%<}3e?{8vX%<^dKN-s|0vX)aL6UPW^Ifu%10Sbr!>e#c$eO> z2hg~@!(Phzf-_HP5RX(d5@7zCvD`--G*nRR6q#e-3txW`7R`TMJ3ML%7k-iYq`S^= zYx95S^IHt;el&cM3$Xq%gU434+~-X32e)9+0)aubS!tHd+&(_t%r>b0u$8bPL=1@O z@~n&rXlk8?i|%kcutu`9Vb-3ppJT9bp{=D>S+SyPkyTrE_f`;R``zl7f3-W1Tw%kU zkDhb;%V-ap2a#$d2K73!VEJZbIoqSamE_uMWa;v%3pwK*R}55iHq6Ml_j~0=Gv4t1 z+<4zV^ic@0irM=|*BVRN&>Q6-kD`)NK%`Ki2tH3Il}M==pLhWWRVS5amef?z@KAor zqyGA_TBIPKI2lAf7WfkSL57@q8PqL;NJ=f_dR?H+Xp-qeI=DyZkTmw^iqoU`^7a+< zHp%a>JnZqlR9YMu9l6@90EQfhd%2Br_kMA(Lu$RRxLp?f;V!^hM~Sz;S4rtAub8l= zf{;L3^JHEd6?x;-7Dek%!VD|i;P3C`4LK ztdm^NTgH&W|06P#-h2y9_yFgRxP2YFza3?;$*zr~Z%2i`?l@w%R$spP%OKH>o$c1| zNT}o5bUesx?G@^|-JL1A;B8j;V`G!V;$MO%Ns!M$%AVzDjXKI6Wk{k9tMS$&d@oC< zz;bERAWJ6|-S|x@+V&etHR$1K!>?=rsNp6r4GufBu1i_{5L@F(qa$TJaYtBQ>jy(D zx-!NQnzb?C-_V9?iD~j2lDmI?qp;+*e+JrqTu6TdT?{6yuidzQcCi>9{2lc0?CMr( z25s|@^v8ONz~h?>d&DmuCC0P8pcx=@50E>9YAAMQleJV_&-@Dj11f45dEWJP;MWkB zN9MHYNn*YTCfRIY#gjU$A43n3XfE%S*OW686 zxHO$#ogjou$wdFfB!bF3t`Do5LOb%Y)&sNjlloD#>eNw=d%*A2qz3cz0xe7xoQC9; zNJWMTlL)So|hwM+x zp_87fBOT8-Uat*W2XPJ%_Q-NDDv5?yLzf`h+B^x+Q+$4iF1Yb^chCPg;B8}5DD%%J z?*buRLV~)ol{tur5rmcYqQ5;SVpC}EZw)mrRXmf$P;mu&XHITAw0q6cIRGvM_V0!J z_K}yQ(|`3(_=~ohnwXgA1Xpi2ZCDt3iQ9s4DME?`j>%Q5ynv)gt<*S}`noXDh_%GY zthW~r_C>^IcI(rAOI~dt8{+utIyGsim8R###q>m-yT9Ts|EOCMewBET%z)?Zj3i4m z&heyO!7on0dCwv--^G};IM+-HI_(Ixkx|4xV zwbGVvST8M&0Zj~mQZ+S7p3XeCN3*M`QOUumF3$N?$#jJMKE0xiL+1B&A)ts%8#7k8E1cWVzJS`+EOF!isp z_&p_keioXYt#EHKlAu;7MT^6A1|4Y-lKJ1Rk~3n!qbg>D&OJgx#LlC&3`tg8LIN7m zb}^P95E&k)TAw6WuSiqpuf&&JAl zd~{VRhI{c{O(E10T!_9M>V{swUCEAodA+x<-o0C(&rM$}Avwd3n~cv3OFE}N~E=P2&6o6Gl!JsJa=?gq7Jkk$p z%ot^6uVbw)eMb~5j5}_N7`tZwq7Qy<+AmpddSvSdpnU|Q+MbvzbMsEMQ(5dtR?HGz=770YkMqt;%O|JsQWeF`%lEJC*IM6nXmCjqi11vqY4nTRrVCF- zknh!8n;B@$Pmuktor#YM(u}=m@OVc$=A-GtiN=?sHx!HLVi_j)ZzwO=i4?7dSyp5A zU>&&?+Wc2OTSj78K~0rx5J1BEMGOuPVARWfY%|9cJnw8H%p{hFyLeCL#dNl5^NzM1 z&eubB-Xsm8nbKoiaS?%I`4dN4G)b#wPj1R6?3UavJ*<$Fq|xP4lS|a*V)8>^N`Mgj z&lB4x&F18W(lsQ1_2NCHUHKscUX<6DNa&!LV>j16W;6U7nBG6LH3O8!5m+ZulsriT z&Exo6gx^(sgS`Ir*iR$3P~P~wilwTt$^^c#_=y=kOy+-JAKEjko911g3JT++IH-z= ziS-eXC+U(RwFp&Rh88U&xep{ZQ2R&#aWo`h9HQSbDE~PGxGV*&tpKk)mw6nSKU9!ILQaQ4s|h?AN3%GoM`s=z}&;Iz?REy`d%mNV!Kf@J^l z-g{E5xSdlpTrMLUDas@QkyxNkd2c+eu5=_&Y(2-l)w+7e$R7pdWYt=P>S*-}HQmy52*zZ3 ztyT)HKlfgF)|>M$>xGIl)(;B7sF)#Wl1rx2MG-+!4cVBlg~n4q9;Ap(B80jceIRQ` zE*B`7d7v0y)jnpnpP@UuF(`;1e|~Yg81*#ITM#4O2Bw)L{S@*_WyEg-740j%d z?3T}B`fTeuAL5iuxtRSGx}OBN4z#}%ynSBRy@k`kWYSg;JEW+)Z;L`9lZvQ{D%K z5T&81Gb4QqI6?V~E${HoCA)xy2lXhh#wuiU|M6{MY=2c4TMxUk1wvhX0PpQ9&)ccM zC}`DwWD#h)ln8x!q;NqulFo>s(fXRB`|&}O@4f*^L7=-g4GA{(nXjN{EWPQpo(#rE z8X(`O0n#U9D-%-pZ9yvCb%9C26Ahs82C zQE+?RloE$1W>=zvIkN}Kw&XrPnm~lob+H1Dx^11NTFx*8=!oW@g6F#{7MdH z2}-1aTEb_`I5gYCP2>9LhXr5&#r_|PQV8fbrZpG$Y2!ab&hE%;o5=8ZP@}A?Lisji zo_y;=SE)qWe0gCc1iUGeF`iRlr60HKi5+q-C~tIK&q zPBeK~0&io+^3Ri3@(#5#X`55)b6_Y^7lxgFyNlGYg+V*bgSeU9AbT=Y7djuwR_hBm z1vv+@`W^dtjx#?VPmMnR?)hZxhD%#)cXJmuUoORiadS9;`k5Cdq|oUqh4Z)g?My1|o>B?iiE|r>{JFKm2IF zB&1pb9NsAs@(j0HX$mS#m#VXTvm|@3I->Et$wpc0u?Qqbv9E>WGX=82D{z}sM_sfMPUjY&3H8018apOzy9UP_ zv98E~d*S-I&Tl|*m3g$>Jg97ln3B6|bLr~IZZ8xx86NKq4Gy1XuF%p4e|Pa|T}w%M zMRIj|cjzpMn@9!{B%Y$MhLJ!c$&M!fN&RmN*Qhow zRD=ErJ_hysrWYl@k=R>--|jvl=+iv?;huJaXTCe+1Z>a!o{heyZ~;BN`_H)d=zFt! z-u(0x6_N|Q>ix`6(qWNPHuVPsw%(4>l@WF%JBNf(igN#VtQb#dchp}|N~hTVigj*= z4#yBD`L5D7UwPitQe#ps@bh>rLkAnE*{*M_X{g4G*4pBBAp5}g?be};IyyQ$%e_zN zd%xOy_fQ_>tovySuX})J9|!3hyA%&&XchUW($p7jut=teae1}bet0-75O;ZEB0n(^niWmctZ#ruqM-^6iAyzE>5i0HK=}Fl^k=m=I1%KyS!CEJ40nI=Y0BKpF+V1 z!ll^AC&9CpXbE*m?7_vW0rHS*E6+0oz<~3Dupn=<@Eas?4M(Nh)3QEW28V3=)BmVI1|Xf^azo;Zq__ovg`5??6K)yBuRAz~UZ1_6e%ro2 z!dv5~Nl3c#5uh-57}+mg5hhcJ-^{o3CJ+<$-78pLdGfna!g%z#QRk-~oYAXGZD%jf zZVJ1YEI3ek9i48y=;@D^zK@i;e&yIf2jY&@Uc2tlsKE@oL{wh<#gH+HXTJvw^BG|I z6G=1CtYMI_=5o+R=}his_1zR!Eyw0T=1P`WhP|ezvKw#;_C$hV5fPo!71<%9*K!mBrb&;OBozTD+$LBjyC#H=?MZ4?TRNwva&fY5q|HbX z4vEp~SToZaye8U93Pms5D4MY0CGq-pivf_B)=d~W7ZqhnSXWzpLuyr?ctmqB5s;>o zRGEnQV>&kxHySp|mCx-E(lwc@8fxT^9)JdZvS3-CvX+F3TQ`cqHIlnEk zvtSkH8cV=ZIXo<-3N+z5fLFHWI=c7%|0?|ynSAH{Z9Z%;BTciD;Vau?40`n0znC6J zGrQhoD-F!+Nn!?ON}&5lqZE_C2cNa4fOIYYWEN*<34V&y-*k0J-~FOH$cJaq99ulI z=butP9^Sp^Kx{jIDKD$#lZGXKoQ9 z=MSQ!#umLD1Lv_`#ww`^OEgj-Bi(Dcg~lU& z8w^azn}bw|+3|cpiMl{_iPZNn`!70-dv@1#XdEb=6;8l);FhOvI4yO{cnY^UGJ!5w zx~bkGW@Apdbct?d#jrkCO3in^`=V$?AiJ^MpqmyW=xnQO&zvHqF>rs=5n*EsZSkmS zqAjLjNp<)vK()rH_}pCM#k|948$>$=7GUSc%)7SI?$ktjC-jZxRy#t3i53-^akJnrUsfdn%kfXONnTL|^mx}|k zjX#o`76kwP5#CKKZhYIL;@8%8v3DT!s5NU>S(`BKmS_ER458w5QjQzVdHnqj%bli-#u z&73|u;n13u9t;66Dmyuo&!(PzR)Go6t5Vl{X@jMP+UXr*M-kwf>Op0hy|;W z6F#YN%|l>aRn5=_18ZYdRoKCe>K7HdnyLfbgwIt^}M|1tHI zQEjeUw{3yqZl%S&XrV}Pcb6auZpGalio0tG?k>UI-Cc`AaYB(|H~W0&jJwwl2LA%@ zGu}LF%{7G?ym9!Ju$Iy{fd3luzB+-dQ|A2K>{FzB7M+T1e9ZQGC)=(hH9mKn{g^e@ zmXa}fLt0aQ{$Bw2mE7l@A;9`_|Ky}^`_k(BgDDNgc0HP{P!&|*{Ltg-@CeQD_0SK& z#D=m87uGTe3I<(-^FQ-f`;z$tzF|j&Bk=CJUyUR-aoU!1{|S*$;S^^Y(Yyhj4RdbL zHaVp}VU$tZN^Tu%+NAR#-AK8&+MUQ->w1cxi(F9PYJ9lagt^LuGlQv&VQ9;;G?@Ll z-cy!5cOAPVXGDh9bTfUK7XiSLQbCZLXl_)H5~sZz#rH+N;LlGikoJ;7nT**3t2Uk6 z3P-)^lEa*5#%JyQpze1vfHFr4RO*zcocDQf+QHwMR(&L`SCWOd$cNZ=m4B^1-1C2R zjP$Z=AJ>&ae9wdpx(E@re;Y85;)KO>g*RMr<-X1&KnVuBnnx)cK*cuX3+}t4@w7j=w72g~3}-#M&i&Ib$AoYj@@iG25gUBn~K{zepq6 z`O9ZNC&hbUQdqiT|95}3bLt7cFZR#^b|R>plZ5oT!>rOaA|5TNVAaIPDm%PVPTq`y zU+?ycot^w5yzU+)yB{T+m?+*fNaJhRS2A+DheSLiCOfxL7#UPdD*5};!`DcRle??e zW9Ur+1(x=$sVTRMH7<@GQ$-osYIOE%Gm>LH!Rtp}`uv%rPvPB)|A4QcoXW$C5Wh4+ zHu8vvF-hlVt}QxOkH7D?=sI8O*6Bn&7&FKWG4iJ=zHOp~*HCa3q(m8oB34ZL6uuHr z^ac6ZKrioo@&scOV_8Fl-RQESIrIKdw7_XeMa}1_nG{we;I)2?AW^B)RCK^Ee&W-o z{D?jvHaBI!_vz|fFnY%3_hrB?TcXjg_P~ik#>RdN&izS%6x^PO<(1L*)zV^hQNLd* z2=RQzih;3KsKS!mEUZWyJXd6srX~(UtD2pbu3Q>m*;1Ba%I1qBj+hl0%{tf5{4XA1 zl_nw``0PpV;<3ZBzUiZyNG*4^wle(A{%7l7sDvVX3jb*{@3ZgO8@=x&2#pBrSh$nW z%&vz_4q}Ys#CPzoL)3cKoLN(V$R9h0k*L(|d>q1pVg~JMAWGW3_v~kr>)0}!{U3Rm zR}hOSn(V*mj_sPVxZ2oUjo$AeMIXMF<&IXYYyUQQUgWCodsRr^qZ|=pYF#(Vk6v{3 z95*q;Bm~5ihK~2!JF3`dXCgCtN^$e4OYqaWp_wkvmg)16^XlmRFdDJ{o0SzTIu%=O+nYTZ(rd3JmxD>HJ{p1z4+FuDGR z_{BS_aM!+87cI7cqrZLRt&BtHukY4Y^5QAr5AO9g05Mo$`vdJ{`{9{Rxb#eD-ej?&%lc?b#0eY>) z(Q6hW?@B!MY9@WrYxQz;th=kjaL41SIMbj`|O ztjynGt0K7mm!piE{+{~$QyzNS#j$)r0p|%7m9n#%><%#5Yi#8rb+2w$dP6>-%da8NulZshv z@1n<-L$WlYfHZnQh%cScnx6M6y{hDlm6r61H}a1H?WC&+P~ME4*@v!FW@U1JNAzdX zWL)PSIS^D8=+YP0H*!6^Lzs;ex;t!n?jt0s*nRDBbzXjWz+l!N({rvo>K3exImPv5 zn%DYZ;gx_#gp8amFAndaW`RPI10!(QyeN{NiI{VrzCPi0rV4KRD9ye;|A(pazM^uo z(Cs0{y!^v2^G-~o6{MQ)Se=Bcze#O=_V4#{^Oi|DGbWe}<30dik*xk+nr;POK7$e!64}%TCb>fF?9k>s-HPG2@%Y10Ig2Rb7)a#SaL9PKhC~cG zT~N0djE>VcwQxpOg7kuVF#y?G0B#sSXIsGE619JGcPRGQbcpq3hn0mIy0g?7HV-UV zm31d9nMGN^nxXZuAApo7uyJ3PRq37!55Y};-;Y)WtO~E_a0RG}oP$=?wbtmMvL4l? zB>72;>ecyke-eSoKwOS#z!DX|UKP#*(1$1YVu?yfw39%eHN$89t)iEl@5*HO@33-w z4||ng5RBk?UOJTOp)5G5P*Mrmf*zj_n~0rL)>q_Xq+4GMB>IcI^qY5bmvJf*2t+&* z^*Ohe+%JnlfG6**@3?I}jjQ$qk8R$BnXxkv9$NV{g-KWcbN+6@F8+Gv!Q=n@9#k*# zH)dJX1XI*JnDxNHEG%05BFH*EQ_?b=dDm6Ua^%Ww)idmfio8u+x)NcTaA1*YVi~A= zcS4Q2p_-H@?ziDC5WL`-DdrkXKbW`zR)louDjqPe0G0gzqfXq8P!?8N#wZ zAL2)i7Xjnc=Cl@#o9JvR*o=*VqI9&}2WOUSBE7F8G)=!vhuYEYuv<901i+z8RS!eY z|76*9oOW-~X_N`DN->r!5C9~cODT6A1KW+2&1698;Tg{0pwJoR;YS@tir?`?Lg+*6 zJ=ys_d#<(pIl_txpwOt^*^lZ>`RSa8uSA;bceu!v8e|%>CjCN}4f!7voS@Dgr6$cZArjwK6f3-bM{!C(5I9kik zw|F}L-2s;i&5^GWaLB#)Cg@ZT)UkU6u_EQ_w?eG;I;Od#cmIIBMVdH7-%93`zNNs}3g(rhC8WNMI2+Iu6(@HrLsBI3i zyv8jiiBsfBe!%NsE@|?or!Nu@jaCoGs^G|z^+(74>U=NXANO@2IntAnP(gFyFXkF< zo*0WZD5DafnRF?LH5{Q8kDEfc&pLq%S`Ot&l9M|^>ngbKym%C>RTvD?Auk8teLO^N zw_k6Mz8ceiVfTR{a0RJEuoaOIkJu)&XNO1@K4YW5Ru91nkF6iMgE5$rlKg- z4rA#`S%Kj>oOX3ezijx^_mw``wZ*_!;=K7fkvF-m%{E!1=m?8yqzx zWtU$PZlH9obaylgY9#|;vuzcAr-)$gz}$KHj+RoRt$2}GAY0YkY7g7;{I`13b5yK@ z(S6O%GbhI}Ed0+W6|#h_w2_@#o%#zFxff#G5&JgdtR22nM1@^ksppFIEPq!m|0s}f zn8hh8kn40*Lfng@c$~v;b*re}J}-A&0|6i!%|jyT z-XOR=U8ML}yEF&z;v;&D60E!aZ`~ioP55Ek{jitmYDj!PDz!EH9KE)ORqeu;B)%8Z z{o87fABW^= zA|=?3O32bx;h`#;Mx{DGvM;+jZY5~B%WwjgNm(#0D|Hrda!ht)U6C&^b9s#_mQhTk zDzqX-a@_y^vvwP)^<23edc7yJ3(GoO!7y$!<%hMS(25B1w#KF=8tE5PxEE5G$yIha z=WFY(e5E@E_2c%Vl+C#Uz*YnT;7LAV*fz!2l_(9CXn)Pm;AnBK>=izQbr^{}hTG`|oqI9|jX?-);_oaS79LbLV?YAW?dVrlDVY5(@G*b7=+Gdo!+k%^Fd#mcIUBY6IkUv^p(c!II<-3(_o8$M&YhNk8~ z!aX|$7N3YVLHYPW-`pWG*{NUG9>D=DbW!Nf>~iDF6Y!aVtH^J)X!RXik?CPf%foFdb$i>_{RXIdIdR3E=XZAg{ z-`g^k$uMC2|H{76+&xw6$)Kk>frwIn-LBN%>Tt1gMJm)^7mk4v$5GZmV()mg$z5<$ zl)k17lV-`3)+??a((;)ELv+Zv^?aLzhklsi38v8p&c#c-qxybwua%mbg8b~XRDXDK z-M)60(AT?{67|=Z&n?b#hDI@G8HJIArjGY0YJU&g+?sV6QMJ5wMmQR)g11c0psvC> z&viI@z1Iwrv{4E3mdE=K6=+G%D_W1>Ka>O* z)^$ZxxY)LGVU)nSN!WGk0r^-2fk0AaAqc7$uuvz&j4lOv^NzL0H%xVuwCzGBKwOn! z#&`u8!$|)1H#&OhX|k)8>-jt8ryQ22q%5CpKZo^BS2MiptzM_eX z43j_5cFkVX2J>st)Q6S09G^#~(XAj<;M>&Z4&8)(<4k{m`ZPkl%ejtI(T~!*Sn_%A z!}y9H^P_q#N32&0=CK!2u$0z`T3ynh7B}w!{rv9~8sa3=@pm#2C0cUl@)H%@a$DXX zg{nrw{?UW|w<2ePhPaKlCI}rN>ccOYDXhI)ziEsko6dwG0|kqJCd~U^7M7kl>z%td z9bymH47W_P1opChn508@^xbn%;-~~+CBS95jMk*(GKE)6 zWJOsUfo-&ptEetcO-=hQUc7}SYjoW5yGk!&FJ<6&@V!>SdPJoy%!F0**t8pF_kJ`4 zZRAa_&eRe6B%Ef1 zZd0W_x)8IRJbhoI@Ses!M|6OG80MZFlVj$O1+@DWP5Z)b(DYlFbRL97}rA`m27*T(I%Et3f zmnp^i;;%_Mewlpu*+a`bY9K2@ck$=Ipr;VuVYQ&w>*2@k(gSOmc7j)4ZS9mO<_Z?T zhmIy$ZF0!;qewAQ7R6_xE!+hS%_LwM+H^7I0@mkAaqK)fc1VS~54N^d4F(ON=x(N^ zevhw~G_!bloV3fQKKa@5Id0_zOn!@gg~slTw96_jaij4>5Hv`dxQG-9Tt42A_ij7# zeMP`_#?Hx4x*~#jw_4Sc4e2TmRZM8twdM;-hq*8hVj=Kpb+>D&EqDMC#?hwpR-RY? zln;1Ro&dZxHnL?5AM>LFW%^bcEl~sGG%3TW~eUFd|$(GmWArk)810OWxCTwd+ z1cyZv9?{5`_01w3CfIV#l%gKgrEQUtC(tmz@mBOxWAV9g`_@?I!socLmSW&^*5 zn+W=_usQIyTK7kCU#`htUC$rf?TVU6K2bKJS{KjEl*_`T-iH)-<}5h8pB^u;1oTkE zXK{Jm&iMrd=F3Gx_oc^a*L`>du@QQ3FqgAkn~TSMvU;xlLvZyz@DN{2f9)}Ub>}Z4 zbsHW`|DdbW1iqJ3@r{x9_VZ(M0$-qJvDcM?b_7QvxQ7QC|CY0OEgzLOZz(^2* znl?V~!De9c402M8!2xV^+rA$EuI=bu^E$4MCwD&`h8&AU8DsB@MV&?{@i;T+EAO|> z`h?&?d>d+G7!ezNW&3tN@)~?l&NEnmHxCs0$8JQvah@`HmeP?1BKqZ2=j31_gs0PKrS_tWHkn;Wq2tqRA=c;HxR2z8TELg_c+--7Nlu}XhD96;X$UCVVZ zV()EhB|~qVAAY7@-tV-p{fd3a=cJ^8aLG6}>QVTSai?6RZ0)Yx`mb+J17ENo+N!Vp z$7fF0Tz}X(!lcM=j`u%7*w6h0(cY}&D2toZd@}l9$1mEuB3c`hI^`%PEtOz^eH~18rGDkJBVl*ggN=V}PNnTdqz~b4T z`n#2le7clrzxRTQ@Aw=_7?X+7F?`#0+PeQ?U*OUx_Fd3pRp{CNw@*rc(rnM`WENf2 z6>5fDcusBBv^s{bsr$2>Ob^7tGg|nf zmUTa4OYJLmp;mbsRYSko|Ne%Im$e@l``!t8L0@H&$&jEysA1{Clm2_iYT7AZ=bU+M zirl@P((J+ZlMjbz;3Y>bX7rCG2n=r%N2^ zU5Z)ycmOrgCr>2kcyZU4XJQ$B$-snWPYIz`d%gS_I@A)sr1AdZeSD_*+KOk5pUJ}4Dk6i zx8&R;%X3sHFKMC{0nL=KKczD9;;MEx;kVvq`Ou$XwVCS2cAp^Pfw|mNei-;arIK~O zZ@H4KK150sRjw5CG=p=xyO|BrgDT0@CU|v{J)rXY1)T)IQsj;c8CZXYm8;v~HuQUm z_t}(2(Mu@BVL$vn=|qmhe290WO0F(z@*d9K<14}((AZHj9bNfn&G>)yjSnwUnpwEB z0ukZBpSy>D!T-O}Fovb+}-t?lLV{eDRS2ft-)oWvkYXTR)P% zewgfs+p8Bcl{?TPQdipNSWyB!ur=^VmvfwlwC`+ z!GvE=CG|UuKkqoE5I7KrToto;hyv)K{@CeEP=z+2p=)LuiX3LKKdPu`s$gP9Y$;(2 zWQ#wb*5Yx)D_6E-O8w?x49Bq48IMecH$|23CXS5U>>UwDwFXLT?1D16dtfUg_|3TS z^?}FISEV=1bto)lI?eQ&Rx04d_MKyoi;;FmM&Ilm<30zrQo_w29{5X$19?yNhX`v! z)qaBdRxiYn^OneD#IqPJf@%Hq$-$oYNwooz?C z3rKMYl}_V_#D|Tk*L^Vx87SEs!9j!*cc~McozGuNT`Y)!n@yiDbX~o)5K9M|NAJpe z%EjF%RZre00-NlX1!DG6*8(iZfR|~*vtD#5*2?tp!2h*Y$jIL#D81jt%JR0Xv}0ZD zywpBv$c4b@0N&89KBsf6oH9J5;x?oePsWekW~!0r(DtdmeF5iA$mL%I_{S7gqfL^e z!wzTJ6l4kPEO)(}X`uE@;sITZfrO5BUXMRF33}G=PRWFUSw<<0+^de5<>$Q?x^pe9(0o-x0nJl^;G2NV8@4a#6s| z&V9fRdeFgquH(!)M$a1`(O%X!!~$BoL@a;0M^s|x^#dBO#=LaCTG~(3^X*_ zvzgiwY4)tMW-U4kU>Oo3BBWy`;1;;}v&frn4~g^)2sGrWxu18pV3qyMXE$R0%mJByFE&(FMJ-j1tT!o6rn02X zywD%iI(8#4TF2z#DM$@2PC!8^*Q(`EvK{Ehh>2u&uQfsrI}7WEI%W~X^PTJVZWvo_ zQbK0)E^qE1`k(`Qs`7ckOKeJU6J0M~wwpaZ8M(9eK|9w@^lx55x@6?l5q50B>!{U! z@v_WM%!D17u=m{MKp<~B*i|ZXFDVIgT%KlCm8K)-VAO+%6Vs{i;-PrYgCfZ1xbzv> ze-?jTNbsFUPf&_7kU#AUAh7(+h(y0lZDts6R8C1U-osUx40FTEAFb6(K}_{1%S(`0 za@w}A?X^d80$yU&TB!aJp@tldbjcW=MU><-hU(Et9g zCO^(Tx>0-)yjRZKrxk*yT97o)W#2jbRR25wg#WCwD0I^&d4zc!n@nig$x9$jqfz== z!PE0e(3h=LLf*F0?I)j>HjD+FO%kZXph<(}3*i<0Qo|={;TAOHRD6K8COAf53MEUid58$!tFDj)>sFt+)eib#d%7kJ@#eiUzwkja7skeQr3N%qCN$RxP{G-TOAe~-ZL zdaz@+9w?ZBiq3CEo21jZ9oTq4MUJ6!?a2=D&$eLa2>nMW!}~##nI|hhZpf;aHrwG+ zU!z1y?>*;aq6bvAGA#;qDZY%tx5;4VYYBv1X7Rc)x&I3@W88>kp=K>bUZv<7KuwLg zcC>*8FS+~xNA?y_O4lctK+t$}e{90*gkVptNc{y&*t$*&m8#}W?~sksEP->Fx269B zOl>}snq!pge=7s%-z@}m-2M#g-?`osJAO`%}g20kNOEv@r13R#DKZ8TYR1r>+v?~f{O8F+(mIdQ*E>$JU84EN* z6qPXrn9lj5iv<#DJOXRvyp&Ya$7r8Y9B&5HD30bot?o2-qSYE>W>vcuHK5w2faRle;&^#^ocoe20va$a>Xj?`_?aIhC5BDJc*O z3#LoYY@!N!ePJ3S)qS3&+*`^>5L zsL+Rq&`5U3&eE-Iwa~U$PMNnEf9^fX*YdEE?W=-W`sxCWMEVkO^K*CDzw)O~OzyjE zwetRgb?7%a3x*nuSxB>r#B-mpox({BX5%S~ci60s>vt9>4x$!8(RQpwEzIXQ#4prJ zSL(hki7|IZ;>4a!tGcBQv0Au0R?&5)Fq&kuOZOeFr@V9XwtIbXw1VFipExFqK0)%u z^8|D3(Y;p#bIL=Tav+6qWYr7=K&lKAuoBcj#42Syq?~~amYWvugMiJ0tJ%{38r14V z3zjo}#Dk(u#!k#RC94WgA8gd5Y!ccgjn~_b(7Y4ZAy(Coe0JBJ?E;h`MQJg`Cu=_y=5^ywdu%ac4@jlVU~KK<%w-`aDqZAl~yF31NVM zoCIu}EmIV)BWL%nP$PCw*;<5Xka)iT{Q`1U;pn5qAjxNn`l3aO_`Dl+f`nR{GA4@V zDDp(*4|rWuOcDs3IO$0BI?Twy)zoTZs!b+sA)l>YG-#tf@H#^>>o2Ii&HG_UFc@V; z6*}~OmX6l%AQ>2`E(g=3hJhcf(&=V5BiA#w$PU13i|cd&wFtOCPA+p3? zip(Z3jel}a1jq2NT8tiBitng4w{PwG{YM5vbarWl&IA*InELTOv958Z#E`y}T7>oR zYE#W@zhWOufi3t?`|K;vDt2G~f3JniiUNB(ncCtY_@a9XEx~pdO)xXv6{K5q)Ywo{ zW2dEXqN|Jp7}a0$WfF8(=k=qv^TN*R`_7R~o+is&>FtjVlz zp+E7E8ohn@V&0e6WQO5iiO*|}6>zqPDBb|`DbP`i8^y46aLX%T4(T7>-r&}@J2Re3 zC-22Uf-wM6f8ZTW4NIqEGU%JsI|>c2B*5Hnp*?#VoFdmaEElDTKXztgaHN@Zlm@6# z*c&YqbTZLsNj)1QjCv7=p!1?^Ms?J2-$WKTvp++mD;tiUE+pJ1aQP!Ef~TmQ2tFrm zDtx}Ry^xcq4_^A@*w=f43P1aFd-xgB%LZ$=Hp#j!3?E^qXIt$PkHEGG)46oVYjDk* z2#Rv_*yT(zgaZUDL$kn9?0&F zO^b*hO*LblfHfVhk3PAjZrB?8kt3!?f4ttOttKSPO5Fv-^Dam*mtQ&yuoJ|Wd`QEgVLo_@xYk_Wm+n<6N z!J83ai`UM4Us{r=P-V4nxL`igBb$mUD%MQ_UBMv|0>{u#-?Db@@6-5b*8|djn%})m zNt*O;XzL@%k**CExg))cAKX#dL)c0j%bwR&8t7N50Opx=-SFnEW-ONF1qK&g;*hgm zT}kM1z+H(Nv+?AiAfPK_czjjmtYD|gvurMyla_9vs3U(^g*khchQ46;bji7Nrga0w z6M}pUAHA?aP^|)j$dSBdhI@WTEAWj6`1fbu%Bi-HhqEiMFJv5;{S*%l$}cd`YiJED z#Ql9THpwm9HA<(Q)qCe-++Q$aFTDQP&3gR-a4X&xKd z?D3KMd*rap8+_ocw~~Ec_s*w*Ik?VMQ zEaBr68KnH?{f5UM7feP<5@z)U-c}E_a>{dhL&Eb!S120Ui`fQ^Bg~KHzqKu|%x@>v z_j{Po0HzZ5<^KJy!&TufzrLmy+5^t7wCVEEAIW_rWceEK=S%*S zKJ{OW2h=RoDnW0iSikj^IJKYkhk_LvhE@)YjEwZK7W<)&aA6VW;wJ_Tzwa=7#y9ET zol=ALv68my$5um;gH=NUACQ`IRz-&@*N)j+I02v?=ij_Ue+4Wh(1<{0RO2Qs)Bs)s zY;9n=n1ncO14{N%kqbFIGgQ@PC}OHSL_lSCpHmt<|DJkY^Y^JYyq0)fKU5+}np~A& z1%nWqKa%v7e?h}r;X*<~fK|!zrFART$O60^*@Or>cw*ZYKuX5za~gm?4DrY6fC^3{ zsy(nBI9~<(mw1${X}me&Zl#cmTajZmO_Nh^BP&S8noZSY!N^`n$^#K+D){jXc*f){ zR!I;ErY7KnE_Q1IA&<8te(`=NT5c_EX6AvZ9+i^W(_nC1?wH zA;eWlpQDzI=Cf0dPIzVWahnRFUTLedLl6Q{J4l>soNYV2C)U~VVdg^#{S{#t+3*ZM zMpdDTG$|4Q6M(V>AaB_*+9)z7;|r&FuT%_7eu~A-W{As}c7R;@U|l6qFiDxW@6kW` ztAXQjoA%xZ1c1qD6pLpZy387?+Q3=^#MR!YojC$EZ!gbZO`j%Vu1;k`K%Z z`dQHvp)WD#<+*n+NCA7oP-xCTt6$Xg{b!HPK52wa#B1_s9Ub>q2J|Eu3d{+aV! zNkP~FpjKPr+`Ps)G4nQa)GGLQPQ^X*h@3vTCThSi1Yv|vjdL$=@>-d5FF`hc+Q3w% zbY>|H0R=TnG7hAuj-#D|2O^_67)gOxIs+OT<`CbN_a^H1K`Be+ExtF>Q`{&hhjA_-)|WXJ zv~uK z4>V6AO&1mleJ&Y06x&QOu!c|7SpWUo3I`$*%BMxL6>l0I9m-iNwwh?`X;b-Em^3wV zKte_PiI0gd?Xbx5i~p}tZ2BpalsMg^Z;Ozzpvy9PoFQs&G_8Ud6t$8;Le2fY>!+Lc zv$Tl3IE$CGZy$VK_^*iFtGjP%UVH%{=!pZp*Ar=wRrep(*1^M$q8id{Dr?LOiL{}i zsV=3+Dn^*|yI)sOENQwz-ZGA;T-}>BPl92Xx$9=)DpsbDxa~vGDw+l?U=e$niR`lu zk+OwL^Mrb0Q^*i1t%|jG>ERr~Dg#x_yzjS!8fIkKg6$liVfLnHI!7{cRojy=4OGX_ zVkry)*L5L`FA7V~!EU7SXc_+VJ7o4i5aFs<41G9}+k>79e*c2qa;IPC2{w^T(^>bY zc@qT`TUBV6s$fxP2eT*WHhlJ9z^@vUy7fvJ^fbQ7xlb|eJYlQFvoBmVk}0wOG|cUc z!flJv4Z$by%%%xajZjM3={PgT_mnm@b`_Iqkq=EHb^94IJjcVkR}Lg0GlV1Accu7Y zsxIKnA?U(kYQ{(=Z1_u(ylGVB{RF|gP%k13O_+&h>S%Z-2g@jng414a$)p^wUW=B7 z_yZtgUwIRs&XQGs5%@WNG(t8NWX&!zlM}9;Y%;BE8l?#iXI4S}5(jc`HL#H9>W@X3 zq6&tw7j|uGpY8N=@ipVCfo;K8VFA9C-?$7-%-6tO4R9FjvoUcj=?--RRoaC$*Z^>;g8kFB#Z~;Dx z`^6Z2sz1|iANQLrT>wi=5-@FT_)3woZIkg7341?j1@4wE-e$C#iNW7Hz}c>qlK!RO zzAGLoMv8G$g)!^~-b)&2erKxuTfDo{_y;?1SH!k57jH+xfnswgxpMU@+U;c=U@ z1a#L!S@K-JTDN#ZHzALny9%0v4ts5=wXh>4D3r&NCgN9lR&f6Hp5c9cA$u^|G_yUv z|H^t1B&&=~&A(|c03-2}#Ou-c0l3!ly_BudN47AB+AHfPh8|%9VKtV(rm+1JuNxD% z*@;eRzg4ibtw6|K zAaR8hI)5NB#Lbkwq^L9gHyMbE-48Gp;@D4dMaiAo!N^uehg+dBP?*2*GTF zEDa>Aq=ulnyK_BocfbAb*W}$Ij(sjbh918RzYMN&N}<1f?^ zVxZK+#Dpsys920%Q{|92I8Ra0UbcJPplqq%LBvQFPA=t3S%@La!q|P%}Z2tJRn`iRQH!RT=7HjpK`?L3IzA)_V#}W zx|J$okWhRx^-kI@U=(v4I*dzp>FqGn*}(a$u--?Sx7T*UioT9y$wJ@6PG6<7D5hEZ z@x*h#j^!?w?mkP&9mIW-v{&>8?=k-P+yrCDpxAz(U|e=1F?<#U`71wuyAGx47=CMY zN=Hts} z@eOHzm+Dx8PB1QRUO)s`BTqa~DlwtN$Ydm)H@A0B7t{Qvon=|SRSh{R0Qnh!grfa^ zd#y3d-(8}$$-ypVsE1bSqD=FPHkFifdJvKymn_{b3`GrCAE(xMAxwuPdYSNz>~miQkW5++&8nobQ=RKFljyGXplWT~jPamVRHW4Dl~haJjsEiPp3Na`{?_ z|KSCL5#_N+yLcAPV6H!Y-#U*BCGe!4ifp$IEbLyJv7-pV9uI3Pv9 zkxKBB8`}Bu4t~&(-`iyD%J&Oe0FbDqAxXjFHkFFaLTK#9F1ijD zL+!0zjxJ^my@?ArBhy*R0X6T_CnuIxaO|gxKi<%YMu~_riNj1y`+>45iRwQR9WU@d zK1=oNaPR<&YDep*!LZo{5XC21!DrKP6b@;2q$jp^#_XLAz!2VkvpN6?)c z;4i&sS%;N`q$vyw1>x7;O>g+!G>SRs8DtiBP>^~3aUuQTq1&k2bhx&kePUQMc<#hU zeJ4f(x$!aIq`$}$Wkh8}qx)YA33EyO8FzVqFV~Evi&vmizkRh_gNww{cQ&!H0%l;K z>Xd!iyh;w%KP4moB=K(VF5Zt4fKArN=NKfb5hYp~R+C!MYv$-IUS30)M^C9_B!0|# z+_J4Ef`J-)ewRKk8uz62Zf{7`HkdF-n-C?yzn4mIvrdnfJ)6L+eq_QdQQPp5Kf_41 ztd3MyO@V32Bd2Lv#zYlHMX)Nan`D%|H!;{`;Z~YtqVyGv))I%O^}db^AHc!~er0{| z(?h-+72OS9FRSpuk#iX-FPzq0H}M=HZ@}^>{SX-}eDGttjti0tnJ&7XM~GjT@xd(( z37hY$!Vq;fAfwYGm66O#YBHs?_AhIi?Z#!k5+1a$llie54?(&V=)q~E{F(ZQbWWG) zZMU+=jM?^x@q>Zm!1bZmlvP6h_BLsr_u!aCWjKf*h|aKg($J!$_ud9(TQJa{vI)&u zcXY(mvETZsU;HmX`fCpiAMxhNcF_JXgI@y|IM#V;%<(w*;-Yi}4}UVqSx;HD?$i@u zp218>%9aYt*|q(BRTEip)ljy-Qp$fgHS%t7NArPf4%BB%7g1?k8I1%>o@TOQPdenGo?=~EQlSou^$Et( zcG%R=lksn#V+e0qy3AOm^?K>I@}Z0${u!ji5v5gJMu3pAXJsmB5`4=rSE^zm^QriZ z_=s6u1g|%H6lQwyQ94e~wk+V!$&Z;Om)8(YGoPG5v^mXh-rgP}TH}3~zjDOv7nrkt{MgP}J}n#ZZzNbOe>sE1VKDXfHs|2e3o}In zahZ6q@P;xz$pUtD@TI%wk1EmHKM2=%?q{R+ph?$}n2sCSZ+vb722#``kA={IMA|nW zut8FCd%3GX5qze~3&pWwIv9DDVL3q-sBEJho)!o{~a79{Iqsq@QB!)vbiOJ%unxd3@OAM23zy?L;d?RU1Lh zeIuE1tN%E&$-zGw7X87-b^-v_Y4>GqwRJUNA094}96_RYwn&4Cga;mBSp&fDTYbPj ziqjAaqEQ)Uvej-m%L;1L{Gy^7x%U0@O+X--@~Y9Ovw>&^)cQ#A&#EptB(B;;$AT@M zN(=izuvX)n8-}d@LBo6m4DBb(#W+9bLyk@LmwIVx*>7T-z8<)r@DTgj7-$rUXu;*t zeZWNxs-e_d2q3nLs4U8ntvL$~px^_kTK)f_^CxpgSy;e2ivFms+V+$7>GIQ`HnXJ~ zejK8!&i9NvCwiwO!z)Hfa2v0`0%J0S-1&Z5BpxNBHmG#RNZ%CjUt~|?dXA2<#?8zxhKDZ>*X^xNFXOfNLU&1_PG?V9x#yf^UTjp#VdeqsmIyob{R}@K7z)qIXGUQZc0TgOT!7|5H*d4_$gwCum#sTf zQL{)*nm2A4p8N{@ZpEz`7lD%t1-M{429fK)_Fca1&w+o*W06?vxA108)a8^)bq7^r zt$O!#^{f!twR}a*ol=+>U?~1~6rvuiYu)604^sNuhzy($b-?2we9d{0EQYX;U9*me z5)&V}BiQMuXVCguzs@Zx{I1G&9zd$P72}vp30_W>8DahnH3-%opIK~^{fe(pZ;GOK z1i3F&92O9`Q$PQBGUG&HEO*ZOhMj~ger zmW8duAw2+>uEs_wx$=M6#jlwGt?XVq*INCul^sc7mt4Cs+>kB=m|*sQUCdC#{lEEOZwrHEr8xTXXW6fNYxL`en$8oTw|Pz$9&!G(f2=NYt_(-wyvU96|Cvu$&`0^{vZ0!- zdVa=ha9|4NFwRm2X_vCiRK|7yO)g0+Y~nj=Zh7}TzX&#sSL@c_8Ef_fxmPo~fXDV` z6N^3|m@lY++UWAXpD#r4;d`vIzjmm;6Su7y?X&k5FNJ4;sHRn z0Q$y|BVp@>yS{)_m^U??hImv(7aSt;R}h8p3-PP*wIxJ&Ydb7xm>m^G@+|dQ4RL_L zI;>A#>Q=-SnTa1GF4FKLK7&)MsqlIHFzj(PaHC~IVv+(aT)-k$29eZ+uxZ6e;dt?TvXzaw%FQ<7DZ(ejhVqiV+-Nz%WY0!DU3|4rBQIzaFca$yfdUta`n$_d6l1XNCnI zDXU0kXAk+BR+$pMpN3Wcmi{&m#8sCh{vs0evvPu&^`GpDPO+ntqq&Yi{ZFc8&)rYd zN=g_TDjr9gKY*w$42+Bk4UQ;QDA$^vd%=@|_$st|=eN)FaUc~$6duq<5kuY{5hHDa zTLms2qCj}kQp~4$ZDm?Kf&}ZVmUr+PAx*O3Rs8jJp-6@ys}zYCMm7%PizB7UPycr( z*N0SN6SKAeW$UaAyoE6W#~3;XF@G$yA{kz%D=X${(J)p}aEa@4#9DlX6dB1BC@zf& zzvFV@5cXY%@P_5(0Twi@B#41p{31zXpIRy}m_5+Uf2!-@gN9UDH6=R6tnw};xboG- z*QbBEt4p*ui+td4Xx<{V}Uo1wsh5=%>&ULf({{HK>$oQS_J7y_DWyX|I;2JlNQrbxZ@@+-pZ#eck6@+dq3P&K;lQINoJ|LT#7UXnUi}gTMUs zU*lhh7(ob{HN4-N`DFIXfDCU|7T8tsq0tEOxi=q03Sk~qb5-a*{AB3VWf)|t=-OYt zpEv+*tKnGf^t}d<4JR8lChOUu7_uXZWdm9rjdGMxkqvRe|Ju?`ZgTn|C~0 zbjA9>rO|VL{Z)Ng^2d;sW=paVwT6{<#2g&;I;^fse z{cxCT9(Gz}_q?vh-VYssdh%FAnxwv6rv82L)WY64MzH>qK5rj~gyN!cIG6s_(3>F; zMe~y$`)JLs2wc&1;uMOWdxa=vrMsfY7i$`c*klFbW<>E9?hQW!K6FzSjE#8>&TeFXwObz(in)W-C#+7JF72hb8 z-*tJ>gs-hzkUw=uNTMZU-@Qb0PvFxrFhJ~YND$v6ppuF`WS6ZPb6_i`+Emz|Bm-uDVi(fI}JJAQ4qW!WPDi7;2-hZ2oohRxX=X`;2aQzST zwil22F5z9K1FcRslmYLd(C9e~h0XstzfRsea~R zOiw#Fu0P*=Np#J*=GOfAt4iwJma#z|L9t_=oxpDQgqVd7j>1hQA)z<@z2hR{VdaBY zEMMIT4P=yeq)@eT=T|z6`uZ`uWipga7pB3%wcAGSz3^E`45U$hS3VWmcVhJQHI4Ei z_b_TAEA#I#Q;W589xe#8N*D}deGQxCvgG3+K1!l6fxKL?dXynd`!&8ggxDJ|VbqV# zesNNq87cdYkY4>0_OnZH)#rkxeHjD=jTL>|_PM)D*Z$eP2*jEe_yb41#+x*5Ihvr? zoOA+n$Q>eqV;91!<>z1-{R4U*>83Gn^bT*6n%`*CZ{-CCay}Bj$PzxIBiE13uv3lT z$&S`Y9P0|FgJwGJ7*czvgafFhV``ZE!A56{h0DCo8U%&(K(^T?++GSDA zVyX~x0aChjb<@VA`-bFNz|BsBZQYp3L!F*n#K zyrcXoX+eOGj|ha;#|3X!HpN@Gs?{LBIlp^*@2q`<{Bpmon#scpBE{58#Xs`<<>ObM zwiqypNj=UO@#@>RYlqgqQ?1i+gx<;96R#HCzuW2N<9{S803r2HPl4BNdU zdBlpYrh3syA|gM;(7GQn44?)!9xLSgt|Y9pYh7N!{9SW>qj!uazNatU?gpeD+DUl! zA1-Ei(`J9Yw7=fZFx{7WLC^o+gHHLvD}J~XnZdUnA2H}!zesr4TC{>mm%6j^CB>L{ z^iU$|<*CFUub<5>g3>22bn0`YY_gsrxxJwGXL@k?--rq71t0IKYJ1H*Ccw@70G-E@rjb>O|Ha3E8NpP6P~B;It%)VNDBR`(oMW4>Y0;jU*C@vV*&eBbp6Laj(ay?D^oA-|j_f!^>&L6o za_9eHIudpZr86ozW9Jj>0LreWK!Z9`69DQXRIjV%>J@L3F;77=xhH8w>s5363941S zT=RaA6#9?PK~y77!Jy1dk-^v1Cb@*X!fA7kdW)NE7uUYvnGDm-aqpi4dawXXuRRQS z2p-T}`e~qGQN^OV=C-1 z;W$87rvadQDmr|zJ!H9EMxpQ-j!^!}NX2@VjgMtey!1_ygQ0X^67;40A|7abEy-Dr z0nSFArI#ydKN)w)+~m?W2MUj7BXuj#{@9N&7PyP49#KeddNGJXFTU+P6pe>CT}Di? z$?tX(hb1ze*!`yj(TDH8$RyQBjk@i)t1#%s7G?mr7DODx9v*?GATffJDx84of=ZvY zMb%?4$#_-$_+vdRZf5)x$;Q_-tWMvL7#k`=%~)~gnmf;{W?tJF&kR5%wOFVV{M-^h zKdW1KIy6V3`#kCjL_%_|3WHjsLI3khQ1XXtryiFMBvvWtOd55%uy8$EnN3dWNWJ;m zjC23^Yw>Ke#vAFpZmK?0YR78?pM%6adgIDT4bS6BvdkFksr{4;()}$Frh`bRMV8aP zw(al0%cl3{e8@+_6LeM>SG8)Gdd`PXE8k7S;ic&~~0 z*uBF0le-D043Q2jUq=|6o>8Vy6mdrMf$)d=y4t~8(9~MXqz{)WpvD$j%A=N27D9}u zKsLM?S(_?nTBovy7Ai<*Jyx`KZfPb)@-mZB=x;X;8=|l8uOm^ebk7V;r4ET+I|%e+ z-|ei2KcYTxGRR9Hksdil+NXtVoo^oiZ3(hk6a!``J6re8o*XA2-PKGo6TfF=qPJ+B zsg@*kUH$$$O3%qb0ZuZF@q_s){n?kKeCkw2;g59fm#V_=hAV#9hwSL|>bL0S`l!Wn z_xJ{2EVz2u4xEi{G(H@3{`$Quc!ddnawn%;RgfP6eY?=3f4GYuViSCH7mu!2?zMRV zvP8`)18y>Q+*B~b-Y56na4ZJR65R}DbDmzn(%nZERi!g?i)L!0&1CNPd(j1-mzltjl)m@7w;rODM>~9#ErU@C~KT z@3`7bT>4dR|NPIwnvArUv6ZKMttG#!8aIoh-Ex1(;N5o#q9wVqC~L0}>xbT87%Mfz z5hK=;J$RadgT$s~_7UwgSK_#hiP3cG&&_vxQGd^ydC;bMW$A8cm!?3syOmIzm{`!X zE>ZNSM{*zjbW5Y0=&-opj;Rj=mw&vr(JP-sVrssWP9s*sqSCr51DmjFR89DN-qeb_ zjyh__9y@L&4St`?_3j4K7qUcH*Q{Gzzay&u9l*00aAon(h+x_L) zMF|!iZbOoPfs~YUH=#dh#o7wPFxs^b&(99yK#DEHrdLiwQg`#Bht^7KZwfl&=wruS z?(0G_A^)5(X3Tv;*K8 zF4s7-#9YnT5o3*kX&_fx@T(`^Eek=^3ZxlmMy@R(Mid>iepQS@lAz<~>h0H!U0Yw9{&mvt_(7wsVFkj(xxFjBs* z#JHM+tGmdft9tWU0`JL}PN?E=_mlneDtcvwu1{nHUitxp>OV1*h(eU^9UiDFXxhD+ zc|syKEt9$5spU8RWpnDFzvUntiW{8^|8;AnY!&#O;LYxWk> zlbK+YdM&J_d#){tdMI&lF=nP72XxlaDBu!t1yxMn~0|&I?31yy{xoMLQMf z{-Q~QDD4a2Zc}itQ}rEw$L+Ad*yHYuFU0r|87J0;3_zoLZ{#N3{crkp!x9c)-SHA! z0y-aAnL4<&9G>(8l*$phwJbUx`LFS5Gu1{3nuO^`_jZ}D*`5WhUdTEKCwbnG7wu{v zRaI@cAs$ms;aR4IZAQuB#FvlZVa-`ilVnEyGsXx7*S(g7+f_#{y8dBRZ_`d3Xr3i2 zGI&HkYvG#w#y70@1-6JieIKBI7C!?}`mXbyEKd2HKnPq;PbRpW@)C>%FS@KzV6=`Z!N(z5Xve!yWQ1&K(Py`T2kQkbx-lV-=pJ9+sY z)Do;xEt!l}c0C6f8P!MpjN!niAp>?ykn&*~3jZ>t>e2O|8jG2@x}zwnT@18-FZnO) zxa_9D4_B!atDP`ginGP^kVT))z>Uf=igZlsw%D&vylRi|qo7oBmR+9oKSxGBV>*Pv ztq)kw3Q^4_^j%<#vPC7J1C0td-Qn}DuDs{+NfH%Ar+s$Hs?|25<1yy=^MPlDIAt&< zjn9Nj1Yc%z!5;BN6_<;5_nBEW|1@aKW>a8}LJvYSm4*3lIeUzK@yeZP0tqE?QBkO@ z5zG=zd(46Ygo|uXE?RKW`fpGH^`DQ*J(6?7>r0~PTppY{=|_0tmSE4p(RR^bOF+y< zEujyl5cI1FbS;yb_J$X%g)e_Br}!voIBs`{K-oPH1Cvxs9@+#^(MzX9A(SQw0))~? zyjRiRv5z4hoEQ%US=-Nxq-+B0kwGmnrYR(Ni;YY8wI0^r7pN`mgcbC8DkqBWUHew;vrxr`VtX$QB%mfZ1e={4m&tkA_yt>~ z5zxm;`t}R2Vr$x6WgdPi*}d~S>iTZw+Q#}3cN!J{s4pxEL4jdN-k}8BBXqIwCm9Ku zC>36>h|2IL7{RF_8_gwL00XN&xM22nHHHZ?Ctz4YNZ0s43<5f%-z~!CPAs;&oR}h3 zG#93m7n}y=#B2Toan&kP;GU{Oo~zt-ieP&FPdMKEH5a>DXA z6OUzMg*ihFJZT5>OY3*44>7l&@t}k~e}a*`;WI)cu~`*!1~b(|YHki1=IaakZy1FA zIAc_C%hq((U-^I*En~BP61%AHwTe}Uy4{|u@Qat1;+c!hV_vsIdv@Lzt>YMQ7@W<} z=IDhUq@Q$HG5*tk|A)Lr7;QG#T{OsIr@-N;k%3?SNc)FC$z{EZvFN1F4HrNxaPB&?cZ_6cA#-_rBZtpIJIc6#<=~-$b(h zNvEr>v8`}5u&))FPEmiyAlPv4MTC{gW7vgM{P)0cQX>m&aUXuBa_nl+bv8X%vInN6 zYO7x$1Ki1|I&`NZ8VWy;%xFE1R{@}d>3+4Ysd%r>#PYnn`xU>?5GLiNgjabT+vk97 z6^R3it5$GYa`VhX$@Wkl=)zK9NX@&ReGyStB?qWRQh(#0rG$4+nxseis%4>mg%kga zbp{bbc)4_AzFd53d&z_xvUSl_tU`Kz-i(v#KvNzg8vuRm z&lPM!MlnUoJjHtHSk6R$9IGcsUW6h8Z!zG-;P8}?G-3hyiE@lOq^u&R9$-X!T|qqh za>*uo@?HKrP@MN(p;3JcnV>&^w-Tb6vfo^92&W(ttgI=E3~vydJn|-l>cRhlk-Nta7Qx- zvhFyAyU~tq^M}f@N#7on?BJgJzB7;cvP>+3Us$$+uEA#Ud*(dWsqD)~g&;$1P7nj% z+K|~b)9&lQ302VFBZKNbQhUam!z$j+Hz~EKG7izbAR8U^R>6J`YWabl16-oJBd_qn zYYy*d<>wV1JS@slX{(i28SqRrg#j-LCl9z9aTO3O+2ylc#B8RC!;<3tWxdND%58lv z5EGvWc>*L+0qoTIEHjMV=ZYzvPsLGUrE;nH$?%%uX4~O>b-%%q(K7aJ$jVv9WoaX2 zE8G}fx$NTlM=(?Bk&}^@Z93by`GI;fTpa{qji0}^#+dN@|4fuDIzg(C)qyBzho?sb z&}e_=19g9>)J8PS;rW^(ZtRL45(NxyHJA76VnOSxbZq3!&DUOdX*(FB27rCCdBhiy z3Hwn`4iNCLM0044goxfw>8FH}skQiMh zJPysp8&6b+(k%<`i^FGWRFh;c_2>IF+Wjlv`x~0nk)Mk9+JRpA`zKZ07%JLzAe}D> zJVA~f4V$T$W-_F0Bm zrt__sVPh^u{`nx=oI`lUR~%1CA42_^N--B^6SnqN%{lrqfCbSVG5wqN50`>c+txoQ z-TRGSTf#gWVXhdiGpe3`sS5)UR^(pwSG2MO99 z7P8dhYX4+C2yAq1UCWvzE7lf>!|eLG zIMftuB8I;8s5_KTEgsjq8kX27Q5Y?Xqm&u;pfwb8V6)o|6awM`QC%|X2XLZ3k6rjI zVoHh!OiicN1DB54eq$pK@<4a$#B9x^*sCuPa>eraJ=`pe!z-7Ey9j$wJeiiB!kqzw z6?-pV(B&*EZW?#s;wM8O6@M(gwq0Q#dn#0)hR$!8`b%XkZ|pTVIR7~PO8Ly`lPdS) zv$U3`Ce6_Mj7x9|68FhxKmV)Mi2GH|L}Oh4<)TzP-!I-&^1&0|M}kU)JmP`q%0r#d zEWkt*DJ-I|VBIOWtz6qCEzO*c^B^+hg;#{?5&n*3wA9}q4KluE^h-je%-4m2E z#F=ZcNH@s7ox)_zT{4uaE4u06k@I-^n|SjNzx|qtcnpv#THs||4>UZ$H>@0U;PLVX zADu~FZ{_;#e*Dut^7|j;&2OmDl=9D7FTLZfDcAE*M~*sMwna75FQjJdirq9A|0sBA z-YWorD$btJoeSUEnbrUY;_-ZIQ#H~?>%iOj6AmtGuCrMaWat{*3dW)7F@XZg3^7aSA*I@%wVLl!@1^WyEbKmFRjdhTd`q!PO4J!Jv&xU z%p!T^>kprMWP30)pV8Kj-atKL?ER&E9>dQ>_eGvQa+!DK!WZ=%{oi9i4w|376BaKl zU{%NZzA$9|MHEJ75sO)w>{Z9y7sod{^-9J>yCPzgt&|p*7YZEEhD_$W4tH$HBn%0q z_53>{1&6f38iUQI4Fk|)xRpZTjWRcjYuNjcvHRe&lIa9JMGHa#Ad!E;{Q5}Jtf@TH zYqM}_^Yw0e9>Evvdh)@x1lqkiy>^03y6-QwM%v6Nz7=CSN&HYRLPTesaWPE_L*@8@ zmRwR12a9VCeNuPBUsmnf<6qKxOMluDRH03wotW4)`|*jCH{7+%d<2W$Vih^0v9CyvAitMA16mZlE?iwm(eoH)WOPA;+*p%?F;+aXf!h|o4^TXjsXf~Z@&M_n+( zpf9suK6#ac8y^A(R4>2&OpMd7S#qpM!L@ z+`DbY;-^=pEHHYtw>PBTf3JTbWyyM$ogl{ay8t+wst_eyiUeKeP_*k?V2b~~F;go} zN6dDo6n|-**@HpU|4iz80&=p#6r}z3&~d5{nutJdej{Fx3zM?REMVfEHzruz*C1C+ zQ4jK>%HjGv-D}{PaT^Z>DFc=-vp8p%$K#YBGlCN`ID=R2P;?ep({RACxbL&6horupoB!ktc3Ej{Kj>t30AwIGBkDjX zHL*#xWJAIeBZ@-Y1S$gNj&(a>?cPF4Si+_|n**{y$sL2A9HlLOyJn&9Gr$y&u_VYAgVd2GXyiKj zr}-Z*ht2}#^#V>k$n~PV(^Z(x(wW12v-8|agKC3*C^}>!km9Ik7vHww?-7Ke9@xT=3#=Yan={wCP!77vN!h?>}OtIv*vYAD$!Fzb~*e* z?335a$fhZ)>coYZdFv^L#*cpTggLJXDU6g|`v#X|p$Vs#V$Z2a|sSawAM_+rhnE|9EE z_nXh`27A4JL$dXC!Ps2_Rxi<88T8NJzmqZqt1rVJ=7oGF(36*E>k@YSL*#HShSe)n z#>Pe>Dq^uv;7Q-_$52SQBFB67oBqR}@dZc7*&d01eDG9<6z&E$W=?h2DRQ~VVG^{d4mB0<`NV$_NXEf1$q+>r+?0kQ@%4QNPTsS6aGHR6%csv5~0ZZS{sN9;gfw zyXEpxqA9yZGxv3{)&f3V90qd6(0QP-EJc)BrDnS~e=fQ%3AUDW;~=*@L19?Q@R;Ua z>P_w#j1Nh=gu?UE5@D&~M@?>W1aVXekz2PlKnJGR0gpFRu=@wa^&q7&PxDvvmUlc< z@aI#}#aa&2NpB(vJx7WSwH&ldoL{_Cg|WoCOkjV=UvZV`S4e+Ylnm72t`3gizV6v< zxMO%&F0J%W>nRZW>iSmtX4Utu0URxyx_Ysg>Ylu*D(_-Pk$5coX;b99c?XnCS93Jky310Am-Cmf7JyzhU5wP;vec^yidLVlLQ425%WOxyuK~wp`-^EmUZ#5d z$EsPxz&5<-uqWfu`n#Q*ZSC z*W;kiLbX1(u2o{NL;Bu5RQ8Ou$P4;2pV_?y-^^GljQ-8=2^PqHQ#8}8hUMQqfAHG~ z-SzBD7s!|MjeR@6T5VJ()kk75lM}(LJrFW;uxJz3BV*m_uF1t}=AQX{R{p>oI|AWJ z-yFG8eeV+6%k{3s%7J1lE4Ys@UOGWCg`xxZPt6Btiqt?C3)E|t+BwW-Rp3e9O8$reRW1Y-h5FDvNu-jWgBVb<>06%Bs#EJia96nC8#vQ)HW6?gO(rgYX=%cs z9?2rkZ;IqsPNYq)e~=q)f7t%=i2NR3oK6;fgkSNnl=7?I*C9CT6t}QTcK9Co1!ZO( z<)OF-RCfs$ll7`$y{FGOG9rL#^v-+FtyLF(Pf577UH z8H7OcPW5s;nMs2xU40MAZNgaf^q)a3C`c`P+pJRFx||~I%#>Parog6+%wo^`By2Q( zZ##tHgHrhi2n{|-8orcJ+?*jI+?MpTzL(^iO1w77!fDcO%W_RvaFahPo~OlYqT1)S zWury3clkExr&@BCNv?$Pc8!2H8=ZgwssDB%Nyw&((x|Yo1T(Mt58bbKiwzNBL&vs( zQraWtlnmO+XmZwyHL&KP1yQYYD~Z-EPFB@qXW^rqeU+bxP^ z&(AlMis}a|srQq9NUeRQpniK9;5xH@vL4`m+nhy45-+IirhDk}iCoKuZLoO}OJk(G z{)6s65Y+#Tx>;;d?LM)5>n80(hkJ2y?p<^Ni-h5pox>ar>%T6ZR>nsZl575-KoxSNg5cyaM^avIDwNthPlm0oU1b%FotK9>&e4Ej#R~|Hva`}$@ zO79;h=FwUA;R8XV0}+t(a(Q{7E|Y)hG5k^5VIR@mOkv{Zlm zN!2dA&)_DZtN(en++XcmCU$k2U{gp6H%I+YDD?4n8+(c0iUummEkwODg1FyK!tIY7 zI50tL`TDV$aToE2=2|j=8)1U8t6r;Xb?xX>7}-Z1fG;tGduj9PDH`?ddb$XxZ9l%o z)N@}ldqXB>yosg@)w9tXyn4ZZ??DmYZ!qbzk9l-2n~sBbeEVjuC`rg6I@#yb)^9gC zYM9sCx=*sdHUlc6o|?B+;iqG3*K$zp{o9Y);2o%IZv2Ob=pH44?C8gv>kdsFVb$0m zW0nz&#~$WWV8O=QzKRFg+VR=fW&yMv`a{ExeG`?%c^CcP>Fj>{{_$8I4%J-J^%>w9 z&r>Spk1@Upf*edw}y%YCCW=9%FdtA;-lT+!blYoy&&&BAczauaD!vKn|;7GkbuqYrDDR zLz=Uw4A0>}4lUC?*w{Re3j`CK{UUzKN8zw38VYB-mW<U%Lf!878#W43yMO{K`NoBp|Wv z@(UZjoa-sc(h%&-7 zmq#k;lRN9>CTjU<8Bn>6@=s1ZN=_b&G6j3~oeoUbz}JRSzAV6+QojG$V+W>0h_R?k z`Pk0D>L&|3rcPoxtl1cQfS!Dv-Q#59?ojA>*iKhLD`hw36u9O5X%Kl;dZHjiv#C{D zy4ztJZ~RK!;nQ>=csE-Kec}F=7|RwA++&LG^l1L)QA#RT%cCe5BV?B*;ONt!`$7Pn zDq^8NP_>=0$?+Eu#%yR|@C6wts0QVEM%xD$>vsDejy6Q{dQ-yByJ1rcZ$PcIB_O=F z9&%=Yw%<3P#|!ivmnK#+t77SiK)e!5g0%OdDQ`)Z1EgyhA}Ed=n*Z*4yuuc(JXiK7 zi=+BxFj9xkc&|bV(oKPlPJ0K3Xu^0T8`JTS^Y<9&)Y@9O<6!Ek0fv{H2vXq*Gn96- zk_%Qy_-a%d(?>PV%|WZ#i(yf_9$F+AV)%B`6x|7FU*VmDlLHbwII)1(*!bPpYD zZToOc#WEn)#;dl5hYKnt3H{vQE^e;yVCVk0dvo}w2)1+-tBav~bX;QzBJYSaMgAPM zs{ApiD==gN5|x>u1~z5OQ$d$ixV8XYYvJqH7Sjmq>dvifRj->Vwfj%dmWH7qDj>1T zGcx1Ex0;XZI~O~4x;^?H;+^)zMg&NGt54W@HyUGCL)>4f*K2|cpufZglFX!lZkb{P zEGtI5gU#Jr%c5{~U}eykiW)2{a@&HZpt9vobFX{YsB_;jM>^B*_rkLXf&gz6LuHLkN&X7 zmS8qOEWO98wNrOi`P?Py&A`RNe9lS?xjtVix=ZnOo+AwCt!GibbDkXMZjqEEcAvZK zXnKyxKv^|Aw%w20j!V_YbgSw-+@0oI@ff@Clr)GdOHofotwLhn?#UHyI%E#I<-f#G zQ~%{9=1KBk=|T}N>O@6E#;j)34%;1|NTS&RjqLGsyP*w*K#^6Y}ZwSG$Sm*DICU;fIn_DrS(-;XjC<%L6355|G)^^Y*pMJ{F`$V_bC;Q(Hr9Mb((eA?-) za}Rl6Kv)My3`c|2Hq1G?r1r3TBeERN-zLm zYV6SfLeSrwyo38v$3*mlac@cNbI|V^%f@9)Z6P(PT&se? zv-q}v*@>B?DV-uz@iVud6vw9+;!x*wafq$$5JjSAwjkF>}0T zFK!;toJx2ZaVF5D;2&pHppJ{^@59`Fo&rA8FKORP6=$3B3`KZfBr$mYTzpL(FWjGCNCAwQ0%Q-(h|L9KNo=J-tUJ|vx zGV!+l{!7)|Qr+&d24TAG%JenDW^>SyHyxbU@lKayoZP6Z5cItK6UU~2U>cDGn1|(% zKOQ?Uq8~2Pz&<#)Bk-MVE;u`fqoIn&L!p*2pEMu70mq%=!a2o|t9#L!z8Q!j4|zSA zIwL?1t0Cu!nM_tg9o~7NQq3h@iRJcHN?b|6P*=3(3eEAX$cl z3MN7^e*4{GEYU0l)y&HtqK)sJuR|T%T_gtPB4p9;?vqF``%qsm`gfFyd%mjoL9a44 zb)iu~gQ+32^A zZT6?BKwAPaNK;}Kz@qi>a0i~Cl zM^#fCHtLbjUi?hMg8E;<`R_W!aQS+sg+tV9)Ze3RZ_Oo+zBDtg7w~Lkzof@Ojk~?* z{iOq1c*VGv>UM1SId{u zm*kz;#-{k-eAx6(&$>VTOp37nw~x${7=eF9rkmw>^UyC`U$ec)ih-O0e|yBtTBlvS zU56>jq0W*Cj>61SnLi7mC-D=sE!&yrY*$W8EmY~RG;)+i9Y&o#R=$sYj<2b`U{~E~?r;oi&THO$Pg z{wYBn0ykpFWDC&QMGfShHkH9F0VAt`{zUjN55OzPr+%qBrpt13)O6I4Z~qeJ8W&jz z?hpWc<(|0V|JUeeoUS)S1UF0ga|>V zibeu(-X!E5HGbt{;5O_>i@y!L1=}dBhPEB;~r_m*1 zm61MPsze>vf!D6s`P{^s6&@ts>mjs0DOnNye1gZ{3GgQ4EY}JYWjibZy=G{AM&TO6 z2k^DQq}Tl!^Ehi)(7w?)wWAHIOWybB&nDF*ue|QSqiSoX-039QHI5Z?-1mDbJD?Po zyYe%O2@cJCEkqUzTfC!qn^b+77h(^`r%Y0bW~AJVz39&7*H5H_crvElEObS#QQcIt z_I8@jmV38v?KMT@Ud7*Z`vG$EdE(TLIf+>9PUhk^EOK)t!Wu>m7~4NAiRRuH>%rwU zCVW5jFzVi5((mIZ4xvFU@uvG?LTs^u6BgY3Zw!0vwTjR=37})q-W5a&o8Z?kHx9N4 zlRj2`ATXFKG#S3-7ZJfJbmO$;zN|0CR2O^?_F6XCE1`vuN}qomMGT66V5eAS$#ldd z-v&>fO>pQd=i<=w2iCwGxwueoDkx)Q=&6#xoz;&9s9KvvX~tj1K@{3UmF>ut0fQ)T zc^(RE8@Qq0{2~#7*@S|_qYx#_)Meduln#$aW~ld|rNNCJdDToNHQK$b6>FyBPqU=n1F?0o%zBW^2+Zy~_nt@>8+(I> zL{H|YRs8SA7WG|h35y7A_&g~aCK^VNy*_O(!@^c6DelrSmA!yN>lMghn6p9EQX1xC;kIXG=3{TG2D`s`hc3=VbWrBgb#puw_Hc zEWy8-&C3;`T^GpiQMxmwg__p~+sTpn>LvwtvGFGgsxJ&h6cJ3rSrhWe(ci7EiarXX z#-cN(wA7-WG4GeT@vqo%UOmTsEF_^=|La6}hOd`9k3!Gh-D+X?N9&1V)kxx_fFEL+ z4#zpT;g-1)E5s>BE*0MNQi{py`}NBG$pTGXkI5N&e<#%F`?QoIU0GVoztEqQ_XX0x z&hi%q1dE!I&@amSU^MVPAQIar{o|&VG2VT4eE#can?e@Jt%Pi2X@&SAa;@_dREBxI z)5R0`tW?T?024>pPMMxuUGIw~FdguH-W5~XX;tI^6ng^MLrFtKz?|aSHp8~U(GWa4 zaq=Y1I1oEt3HOFmM7_-9N6(c!7n2Vnn1hu{7d%~VX+w8xj*DZW2G{#R9iQRsgYT00W*EoedXM965faYVqO_ZzmvFECi7 zLYG9d&*`~j`1?Ic2U}t$*S#cVxhSQYm2 za74;qRa10COnh?$-$Mn3s(#eJH4<({fKD+at$x!7|1yzb-7T-DB9B5T3pQjO1le-$ zHo1uW(D2l(cL&G^m~kNp8Mx&^DD8}b46AI_X^87l`XF&FTNh;?j4;tCIo?>&8e2y# zHg&l%$dzD-F5N6LaEZ7u<%a1PW!vYQhMMr>eWpMuV~XRRY;7Vq3CQ#11$C)zs*Fq- zRfy%rfq-AOm}SF#+iDk1hql|d(!MJ0hj=qq2(m;w)BCGVdWOX6X{k{+O_rw*`RFUz zR;JtvP-t1ai`sJ+aQYp^4~qe62oKLv*i_S$iKSXc$bV-WWns;ZmywyHjAwdbzL5!W z;&FGoE^|!Q79y6F|E(BshwQJ(E;)b%+t?o;0jhmo%vObclCQz0jf~SBRi0F2+N-2*qe9}F}0Y-?=K265m zz)7}}8T#@gu%rCf{-3ACu&6y-p<1}Y{bIM>4h~9poTFc}4)XdX2UC+~G(d^pIGZdFI|EtDl^zuBb@1!A%UY^ zBXgZy;zE=deLY9+#q-Te_7`^@G~U#UUcM{3rBuFkbADJ2X^YK7W_B-?`~qZ7kOy~< zyg4lbGsmxxSD|GQnfcEdk&b0%Fm0B@*^&a`r?MSCGF-Vt`p6#nXZ(4fg8bKV&dRGN z;;A3SNziyScC|Na8S1md1JR1m2xtSHVk^dC>=GWRAo%8!=!&yGW-9thN=LQ_9kY|E zIfc$VY?@y3%q(3Q2_7rx>~#zh**@Cxk~sII=|)}fL*$y^%E-;P6t5~QZ8h8G#>%DE<|bG04YaHhyt-wzz?9~M!zRT&Dg zpJ)NJG3wd_0i4(!Wk7q*aSB{OSr;^*SPSdOMHNiK8UDgff2!&(LLF$yX?pgPn0c`7 zo!RHeB+1XXWD}hsmgBVDAbCugrW={@V_bTSM*-#4J?%S+_uZz>FNmoZrW7B%!}q8Y z<2F?*M8-NmQ&7j-^SuqDN>ijtb8t&%kP0hKJtjzDy?f@>`Lo)}RIBCKv&O<1iQ`a}6#C@QE!$vh{ovvi-wR_tYfUbR`4(P+w~kJDD8m zq^_oOgvT>l?$5=SG%sX94b3l)Sove150e1JENC=>1BkbmM$&I8rCKfV{1P%BI`fe9?~VWjLT zvR&1@ZlRkd_Fd-F$Ap>67Na6e^UTF_;C-jx1N-VIv&}n30lt_LUW0r+B3wubZ4NgX zRLG%klMRTRISd;eI6Uy~Lsr;3T>DlrnjrU|zVQY!cp4{xLw8+Q^0U8+-i!d*8n#h@ zAGMC)HcD*NfMd)HC07yvsUzFJ1qXX$2AHJb`;Fgi*NW^oARKxj`NagSa;lE4@6ag* zq}83}%x0J3d<=$`T@q_5S7_oN67K?k(xU*cU+uLy4FGm*P^b{ggXKI@6gSoOI8)PU zOlTj&(`xsaEluyX9*al@-B5UnVk^Z0X&#COdzw<(LBv^3+g_WDl@E(*RH~*PW25k3 zV>-VSNb=lph8&W=lHp+-_7l#z4fo-iM}#g4GJv$drmuQ2)qGhj2c}P3IS&7MS(e68 zmqw!AG)K~16a0*qDJ5yO9G?woLBL4@95x`>#F#j#%(R2@xjo$rI?4lu1xjm@KDine zk3N)zjcn3P6{p$UGjO=3fn*QKI07pOZHpB-Hy<(g?}q`op{<{lD7tjn>(=cN6s5I~(6O-?A?fwB?KFnQ*B4C51KmpPXEC(P zo*^pU4G7Y_ObZ9t{P`?=$meK(6_$YL77Zszoep^UVI#OFrj7;uJTGFFE*i-J?jrJd~$h$ZN7 zE1cR!^$(U$#8_;2lrAeXbZtzi#wD8z1+L*Ip;gS^7CC;Yp-X|o_S`*yL#p4 zehutX$@NxzS`LFU^5)Rf=@?&`8Olu$;>AY8sE$(Hy9G<~A+Qr%#O`hem|895G z&-MYF@ulGi$LKV*Tc@mr*OWP>-&*}ZRv-KC1EUkNg5wRXR%>kQe(0DLVq0md*t6@) zu4!@JU#fr&BL?F3Y6>oWQK9&7FUhNfhL}6rNtP<2>DHAI>|Z9<=WE=9cG{!xfAOt3}>LdrkGNTkw@RTVbq4!#?<0RJqr^ zjJM#Z{bCnmspS&!Pe{Q<8D%SvYSu6Pyz%6JwaAwFy6DQSCZJIj-trHXq%Sm{`_}E~ zsamYo|2dg3E>BCRqi-2x9vDREo`$TfuEV9Aq+v|DP$>%DEGFv}OOI+xxTb@+o(E2~ zrVBJ4ze)DxnE!k6_WZ=|fGWY55+kURS@8I6L^&uAZap$@vPOvJ`ac`h6*%ES=v@y; zDH!n~MHQ_^IsNjXgNUBk0BHvyD&MY+4midjH%7Jmp#A%Qc)} zGeHuZa=Kq>mF%CF9-&fYr0rF0j8+o48m+1-Z}Bt*OF14MQAenYJq< z?gTHrEe3tK3FwrU+s{l!`{2kGe^LM-=F~)cQKL5i(#wfxWlxf7vVu1?r}pGvs$eJH zS)k4hGaMV;RqAR~SQV%31~O&)nFMr;4a3BX<#6iUXZ{j)>+_%GBrD^5bq=-54vwF> z&D#F$7bAGaF!~iIn9|QgME|D7nLjD*3NDvJe%LoBGL>HC{Y*CJv{ z`x}~IMt4gUFsH!C)0*)EF|LLdwZ4rm0mr(SZ5uV~K+MV^ncm55!Sog}{NL;tI~990 zX%#!-{tQwWR>%g&=0@M@psSN|P}lt?Z=;$fQpeAG3g@f}BL63qr7PVlD4m_o4x25j zU?fA{>2CF2HmO#@F$9wgY)yo*UQHI1Z6+mE%Rey%tCX8Pq>Wg3IHEZ~HPPI4*FWt1 z_{Hb9*L=XHRCC$qT2mW9*NnMBI>SKM(M(}M+bHEAr~*x@i%^L&cx9dtcl1~1?9%9x zI%|PQkQd$f)-_-YDJ!XAE=UR_NpuPQM&+FHdBFp;SW0Pp?&G%oH#g{!<%ZPw8 z?ydfho0fP=gHDS-)$vxp21(Jjxv=)bdR1LAz(3L#qze|d+IO6I8@wa1Y6HSsdI4do z9v{>yy^}|wk*k3ii3}s4-v=Qpq7KouS7HHS&J{^7W^DU4U>XFFY6zDVU&|<05py5L zx%!}^%$d1^O-dA6!(F25%4fj`kE*E|-uY_d>is7^=OysEmBSEXye3g;g#OBrU6)vS zv_?sb)F}o{GKkrgV}am^kHgp1p7BG!m5w1#`>u>ch5@mksanW|zlo-kHAzubl@5#) zvzpl`kAgJgjjbzzPi{mr9AsO)i~d>2Ero$(67Mg)2{p0V(nT4fg*;f>BA~E%gkt3L zd)jXHCI+EH+Mk?k?KSC~#1pE%aeIMT+N{Fz+NIchO|fWvAOgBs8-DpMSq7OcM?FYR zb+L#zPDaF)4N;YbdRtJkqXcpKcEMFm!_WSrMIsLKbj2x}#_FQL(2bl$;b8Ub$DOUJ zFqK=mDeHNucz;@t8J*j7cH(S zX&H3dk#o!$@QpUaZ81K3G|h-KVk)$rF*$BI_o(hPy@e_#<_n9N&OJA&oDwejE z@ejtYNy@i*ud^bOd`CALE#;MgIxnx`=&v&`2HLB0JyV6-fh-z^hAo=PPX>;fk2-ao z(2~ql_ImP^ny(z~q)O1*Boi$(Ih?q&In2a6APIgcV#JcRU}{+hDtNsT_LE>(+LwSgXSx)^5`@syU47^%s4|RII8!)t#h)si*yPiB+n<-<2@(j9mL?U< zrzBgoFd)P4Tl^Dx@GsXVer9fKheMGJ`y{cOdWPJ9mPc;37k8P%GM{#b6xS_BnS4j`G zO5HI!$*gGHTbzJKA!aso#LlFNe2Cs7K8|GODz;_Ie|HyRQ&x7kX{Wl|~#-Rq!nPm54ZY=ZQ7{!3+YhN{FtF_-DS@YXi_| z0kbUVSabhTgaDRdZSxwscjA0iVL$Tk`^{?o{0CY^Rc^&R1DUNqZG7C#*cOJDEi%f` zKj*%GF0zYtHTI+G6W+{Q^Wo@ycd1Rx$<$VDQI#KbFF_oRdeAn_hA9yVNglHQVJbm* zX(NlA9zTjQA;EIg~RlrV%J_Gyi3Xa5Ovi|J?+2Mqa#m4WVsz$$r@i zB+PjOEwC%|eOlc8AKv(LA`O2yd=tlye?Goxxu(m{P3Z))p;R0R$)=Uz2jax=-In0z z5l@ZnR}0Xf>qpnug%Mq#1%k767OW-z>lW%?C|aKGLXJ2%Bg=%6z}fRnu+;TT=PMkSkt zG=Q|)Umto%`Xj^iDtGjTYeLJmJQ^CS0K2+ufx1JwMA1u9ekt#r5d;D@T4`0$-XjCr zOuCw`x^IUtixCMGiNx|`l@DW89N7= z5xuU{C9ELfzgW17YA!a8>U+Kd+Oi}{(okzFJ#jKIE}W`dY`6^Jh$F5_F|)cFW}+y4 zyHzUN=RLl*%n)8UvtV5tmZIxo9dm}V=a54wO3r-wP9(4TN0)Y!@vK}nwy{)f-RF_8 zS<14wwYP<-9MiE-8+iX`aqibiCs3`uzK)P&%J(h$U-~j8pUv;qC<`n z@y60do+)pDSCg53M@-m(9d&B?N}z<)Uj2IkHeA<*tmezwbGo;u3qvh?ZY%q)5!$~x zw(oxGq4Lt-te3;XRF!Jg!gm^IKsU{S#<00}PBfCcLhM&Js2{%*5a9Ev9!I`);FP}D zevkh->q&Wtk(4-on&Ne(eA#S@Y}u`8d9M}XJ28GD9rAW!;ex0{**20>bamdijc@Iz z!x@|K1?=T)l_;_G=H5TgJLc60i}y!F_`YHx4)7?bMMYxwu%y=~`Kha_Z}>Y1$CG_b zy}@~DyG;|)h@s+vGs$*yJTMPVagvHAXQw8X)*Sc>H9e6XgXO<_l{WuPt>tqLCtEES zZRokqG+}M=y&k|0{mkPTLjKjwfXU+=Nl^ajRsTAh+7U`pIDg3sA=@P%8(kY4$>n)S zKRN)(C$iJ=1V#ySMz^)f)xYCem-6}ieSEf=AC}PJbONi^{VRcprF_PBN2^zYHOpjk ziZ}f+6O-k7t_ifFv=GyJD^P}Lh;pV%6C%h`kpeCBrXCcCy;juR*16WY{YWF68b%XL zQfT(sCqsEsjYZ7sIT;?fqdYDCJeGL&m@l8d%k_^(YixRPKrWg^E2H*epha-W=x6%e zggs?f2=(~GjbP=$3;JMan>T`^y2O9Zm->}#KVcRoZ0!p-_KHEDV1;*4jAK|z9T?zU z;gJ)em{5KmwMLwXXo&1jHlEwrz}pY@U*e=z%n>l2;=0 z%H4wlT1XT}f5;^2%E2P0m~U=U$^&weIKi3Qr1Mob09i0+x7b*b3EJ$VQ!yuFfz*!S zK^tefb+6kp&|i#Pakt|)uX(%OB^GYQlQCv`iCa1Kvi1X#H_K5IHNQfS{)3Y@1I>em z=qr*Xl;NmE=fyXv2>I;!^p8fY-)}6t0(K3Wr&K4(hjRzWxn=XaPf;yWqO$*9d|hw+ z&0pKuzN7Bn{pa2xI}uu7>|uQK@R%A#royX33Mh$hV{G-B9NFG>AUezg(LBpI(}^gf>#QB@oa?AbRxRiT}X4m2kinJvlFZ6I&un-Q}!c*cU zLep9Ro4KOtW$?qqRvB2=##nF}YZ)i-n%`)ymv*RostQ!6bkK0+w#zd!uj_v#YviWo z;r8F<;&ZKyWW|6Mltxc*cjXdM0VffBANAdIJ}4C{F0Q=(TESqyM~$#>fsK&{3%I)< zW2TecW&z>adK7Md{4C!a4vH&>IcBAyG24z8_eklL6#dydwhJpg+h9q6_uyDfm*jtLiSzhzejE2N_O2 zcJ-7iN{WpS%pzCMON2BR(V1v}M|hM0dtC)6wy?Ir7|o7^glHRlfzSc5Acd-?h*F+r z9owI)7y7^LL_So9y$GQH_dx%@lN}h0gIeSIJ8YqMlV5NETE|6JC*w2gmkO);c8Pri_<4t2_qpu+x#})uF}F^ zrwMOu+#E%zQvqOHiwQY{y!kzT(sWxlN3Zbf5>W`CF$Kj)?BsLWV^N<`=38DnL4rHE znFR{%?G7b$mm9SVcyrrcCZW%zApMnyfRR>R<0kvfG}1`vhMHr~0fjOBq_GrV>%nJ?KIh6nPEivsCa(7{ zy@HD$dUV&N)6hwhIXXf3bA#qxOr=~;bB}B9=NI2wNN2;B=@Dcc$E{xnqBtj>jn4uc&e&@SQq4zt`d$)Ly^K% z(qdVrnCLAqX2W{vE^*^!5^&_;YrJ%{$bY?g9K|C?Zj{XwYVH4-^jX%W9 zneLP{+%)k3)J^%X!aG4`72q`px{#1|jYYp>lqtH#qs_2$=B@aFH-NWi;kCHT*9}#j zS*AC42wdHO{mbu^Hs5U>8xUZ~HrQ<~alPAp2$vEQy)I=l&>+>H`yHeB$ z+YYfbnI4u`hONf=P+r}{ z-E|m)_DA5Haq&Py&!72i*BzpOTqAx7lh}{>3;;W4xTQ5=ftO`*=|D$ODRP#U()!g< z0|~zBZz*%L8}((?%t&;L*CVA3FL6B&?YZGx#N&p>Wesz8mlT0~^#k{>Pz%sP9M^c7 z(`@H#{6uhYtlvyikZTII+C|qk&Dl62O;ZeP8X7=qOVRY@41G55ffe#ZH%Xrx1o>JA z?Wy@I1igKZ{`iW#7L-Q&DhV-h>BLMK4ADuTQ!j_ZS}v9Mme~*CQj|qBi*1(;&c>J%WL7ghfC|S z{9yal)`11l4G)&If(BiQwl~?A9n;F?R%VQp+6Y3=4% z7XnG7kt`Et2!Y6*)&C1CkL1s?Dh1a6_!p~Mv}pW%#{cpsr-*IT+_ZGuIB1zBm%<#k zbg~R72RHQc`=OO5#Cr%)b=(E8<&Fb=2vCaMTQQd+Nsv0xUNrwk0SIyzXsn3FwfWuQ z(So`|6xcwgaUa(W+Ypc_quZZ=&pL)eURku`l)3sC1N~l!k^2Xs<)ROvrh35J(=Jfxcsk&eYY;EZG1v)Crw z!M1*L%mz>c%$0DN->`;{BXLvhZ7`GfQ@#myZx_&4v26y8qw&I!+9OcZ%sF$lX5YAT z^ZZJ;h9IcC#_2^|z0qi=Ut0$`HBj;F$pofIRyr1U(zGn&?T;*gPr-%>bNIAmt5^i|Nbluau?6FLV|s6_QE+!G|XDQL~b2!f)$e~aihfuZ1>BTLw7ek1820mZURXbm6 zM@8C@s`Bm6>YAGW4}t&hNq(-gXk~t+J2cOf6EsVIgsvMGiWnVC*Hh*-~jYz z7h@$RJn0L%L7uQr%mSXPR>V2TU68`V*`j(BFM)*~AqIedG zaWGNRXfdM#6nat}>lMldv@xu0_pbaKvj(hly{;>$`&wIKv>nFk4{_^78u_uI_l5Ij zi9+4>mz<-eM@Y4~Lp(7u19rvkF{c7lsbvC`T+sPL^==n@NkW?X3jkil{eaX6uBlP@ zP&ISx@dR2=7tK+MBKhT~hiDa|TG0+E!t+XQY5*u@ou-=^jtX=-g~&I>#x=~j{wzU{ zA35+h(Jt@k{c0EYDmVESb~LuYGw^2opaWASkzS?cJb|l%XQt-UI=L9`!ZlE2pZ3-Y ziXEj@YYspAl)uMX@!Pukx!%}}%&=ve11*Bq^OQC%4CHK+qqut1S}2Tyr0T!^ldN>)qP~IP@d-J?0xTCIMFGJGKNMI{=MKaq~wYe7WP89`~IVz zFoNu*1u(9G$qcxAp?Q&GAIw>FPJ~5R`vm~|{0+93@^Bc&Y8eQM1J#&tbGo6UfOBvy zkY<;b=sUcm;C)aWCnwFG??zecaEsFGVJ;F@7_gPyb3zozCGR%q zAGPMk7Clvc9ImK;zR0BMwga4SZ?g6f4gf(64f^DL(#8{!cZf_ z^%yFJrWzlqT5SLS2DZA@w@;i;`PdrNVehzi-5%XJI|EWiiWx6UWJ92) zTCwsCOAn=$@32QH+ing}N}1|Y`^$MhMIkh}1&1GCJcCbl{e&{PC#k3iDbg!@e6-d2Z zD+6pYHpb)%NbLZ05Jglm8cBo%pqW7HQwTN6YnIhBPNwB`mxjfnOnR3bfMhmbY#%y1 zf&!xm{g&;Uu0j&hmlI?EH)HHau?eXmp{z{?UPzJ-cDk`PE6GdzWWPAwc|LFiCoTpd-fEmt$1Uk>8Y?gojpI7ZlI$ zL-&JjxzeXgz!}o86nbVt^&_zq) z&pWB*-Bqvu8F8*H8p+n`qHRQGk@rz_92I7mPJ4{JJ8`ZIyLd%!pmk`{SgJZAZ1J@5Y-aU^d{UHiqy>Iyyg=lH0ZpXL&QQBy-K4 zmn8P1WT*W6<_-NNaLkzAtUt(#CzeI`_y_*4+<7d&^~~m=^^-du znL;bq-ZDjWHU4e7eGg9~TDmmY2)t~%8C8+Zt7^-3p2FfyY*O3*w5P)I2{WJ8?;|u-~8bY^7#1H+x~-=JNKC1 ztNG$IvRQ9Sa5|e~o@JnjsRCIU(&q{h@9Co}4G(Vl8h?AP_huoSrKh`qn=7x5bxJ^E zQWvf`XZud0WWMS*frDavcn?g0;><02A!cD-QJ^)ij}k}A#$zoK(*#A3z`9tzG8juz zlq=F%F7P&$L(nFhzpX;>m1~hjUKf z+luHd$x>4w&KHY4?cQ&;l<DDa(-5wXFP{}aGgJ>2c2@E^)GZ}_)}0K3q?n0Mc9 zDB=C_-xyZHKXFe6K9z}?X8*k`Lu%Rkm_M*faMv3Gc6*n*YDJm4_Z*qC84}8s`xGG# z0XRr2#%5enCS3Yb&ES_~J51OcN`d?&)a~$OE&xq(rmE7lqjusbQ{aq|$fG4&beIr# zLFtdF(HH;SeS3R^7dq^dU&F#=wG=3fa!WMfChx!@a3Dn*iqRWrc6}-<+S!|P;pJ0? zcxUGr=$ms6^nJ6A4}j?inK-LUrW~&`%()N#-F4+2#G?jEgE)gWeP%Z$80k;Gkw}38 zCSaj8q-V;(!7UQ^I{!sXybSV_&a6k-$Cl;K3ch2le1{S~{hD>S@o@_Tt-d$yNXAnH zbQf>Uft#WbDB_>O?+_Lm7Id$Zs}eb6aJR$f9Xjk9QAqYa@00^ie<985&4-D@zr^}a z!MUYP?kZ79n12C#Km(&YOhEP?j!X1b45k^577;hs27g+Ji?i{E4w88}BCS7lLo47& z)uMJflkcSNAHOkb({m~)=T;_(-3$$^9rCr>NvI0A&@)>sNnBkV#Q$^)VnDw9e!;W) zHXNsZpl>Nl@nbq)TYYaEH4s4p6Kthr#3vX(N`1T%2q6%cr3#eFoMnGu1OX>Tc_dmvJ~Z?BxpI35R1q8H>nN9N zsU6VmL5W?QP8pfq&hR{7I-IDcW>NuRK`K~qK^VK@fZ4F^FIw+!SQ>*9gL!3MxZa|6 z3$B>X;wID`wR^}sO@O=-^+)L{*v(BWl2Ik+4=O_9`Wb5txt&cJ{=ZAhD@!GH^M~ne zyd`-D&KLRK#3{X}#yO{YDn!CHij_z$+Sx+_b}sS5V*6Ho)%mkjT7dGba7}SW`<~zOLJK7J6D&M+y`o`!BSgnKkK=mua z1SO7IA{?i#91fr**x^M|n8K?(5a&0K-V-h#9CEPcc3Q;^S5bf|>O)wqUiJG!hvKNVq)uvq{Fe=}0+eeYsi-z-rc zVs^n$cI-v-UJ>{;M!|-nn`dw4qFxINY@&7z_km!$D?E??~Rp>H0z?e-F603=x5xPP59<+B|19xlg};*@7{Z( zx0rPKN@E23WouM4pgf=CQQ3;_;DZPfgb{j3E$8xki%lylY!r{eUu`G}R3#6+yjaBx zR1CELOS<@f@3v*=kC5npb3n=~HOr%& zI+jPnpm(FFi~ys_m7-uxRaeKvP3SLorSKkLk+rn*kp?Q6+^WyBbS8ubU=xbR^O#1< zaux@D*EMd+*8k3i(*7xy@fbP8XgQ_jKeEQl{xjvur6x+D9cWYr@-hbCr?eMuo1S=Tb2K-^EKEc zvB2)1@>;}iE37N_5Mxk!I+A{@$af7CG#D;`5;uvun1@S%+vbXQpa}2Z%Ay`Yp=pu= zkYvR=Po-8sIFNN+!E_JT3{R(t<21ZLOj=Hiw4myM+i#H+fxo1Q9B@tPTwd^fwmz(D zg+AoN=tIsIEBJy;FVf`0q?N3Um9ya@Jr3emAm5re ziZO5&;9TZ6hlm$W!r-ja1?#QV6-nCg=tiO`uDyRdsXa7Y0U0_xTYlT|=_~JFmqd^j zhFS?<9#~Qf2@4WZ2vCn^o!#^|lyCtUM|>@PDJ$TRRh24>II!A{FvS)jo35$v^614A zFf>GK)bvm4_b1s)4h=$?pTV~7u(-hXz~h`!N9ttED{ST+|6Zd8&5@{7>XH+4I*eE@ zloK{em|Yct?8tIbtsvLPAM)Wf_@cp>t4am4rorw|y)TH*t@Hawsu3-_(PIO9sTZJ$pU7wf_e{ zt+1M@HcFbOC$qESYB=!;&eBp#0r}h8qjuEw$-V#V8~@m_88(ewP!Rr1L&PCkz4vE1 z0A%Ws;xIFKHu-MNx%%Nh^@*pWlU_#ZV4P#3Gu-%?sGW_Uh3Gsura#bTx3UH|%_ZIz z<{jjoTWyClVHWJtEt>Z_7;Ch!N)y~;g+q!88rMQ75~o+*9VcjZP)ihDtwqO470a4$j^E&0w5{A1*huN`&vFg8y^LyA{Bq&mbbMKQ~O4=aN; zcFZvgqh1+_*V~%JCZqGN@cw6}@#zpNCpSRA(|dwgflLdD26ustR_%jCTMt{3`7w0X zW=|jk`WC~X!+0PWX>Kf^@>YLGRnUp`j0grMlEOH3VZ+?or=O*{Ob7m@zhAqSf3II- z9QuZWF27yKKPv)BW%f`homcbYhsF!6;Mjn?)7DQ*PZ7xK>eiyK&;U)_XZ1%T3C2UE z*ZCD_$6wj;+!|YQ8ZO;khlrYqZ@6oxIIm;-Hxl^N0TEA zZ=>d{mGH8w-h@!JahTf$nH^XAxd~o-YOfF#!mRhpqedaC-%U)`3|a~s+FWqQI~sa0 z-Nbo9Y#GPZ(G$MFU)Ra@x(ZpHJBYxir?cDhXar#QbV4XyXn3Fyi-HsiNUVaTwY|EI zzN!Hjc%j+HdEj7foCz)yA;uJpFiB5;pO3=+`9v7gpo33S@uOUpAlvyT4;H{S9296(Dy#vsox zJc#oA?afF)g|%WG`NBYFm7lA%|Fc*qZ1=2VVBA3-#f3lH5^U}8zlaFX(?tzvF8Lha zKPC8y#$IQTbB3^TW!*E9q@L?iLa5@Z*k3N~^u!6g~JH23> zIXGo|wH9(UiRTkTyHJo+)z`0`R0%N4%V^H6|6!!B@_@WYHno$nl106i(?bWd9%<+^S4o_1)|*4gFR9{!v=-AtoeD4=S^jr z1umD5w@7b)*?;QKY<^U#oWX<-`8PH;+ewuJiMeu{fGP!ttx6Oropv`}3s@TDbo9Csp^Jj*ZzeTmfcNY%4(0{Gjl;4}(U;1~fZ z+&?PgP_4$Rz%rOP*)U1BixlP~X$L?E;xUZj&CO}0f@4Wx`N~wdcBID8dY10A6s{b_`JZcEz$OoWx} zmDK-m*;dpObm)%{`|W|VEv`&0gcn_kvlPhrpJrq-wJ z%e47hPWW%{{jTq%7hln7lg}7t?Hs9+Djbp>9Su=ak7TlkxMMl`Kys%X7>FA3T z71EfX^{yc%|DhDWtPR=#0Gb5e0HpT(A3%aS_$8F>*4}I{z``Auc zs#2K{Y?sh>G{ z+ur6<dtH_lPsPj228@eNz5MvXKoDC$y8IT9hB^mNH#M0Bmlkrrqn=3s~bFa{?Z*&QtN6 zQdNmhZE*;DT%`m&rJI~lbh@g8YSzAM=kGN6FO~JFW$4;yVu_spN;`sx7n+Lra>fw& zn=$_pT*O3>?diJTHT(VPs#$hV#VJ_-_%F?Ct`WOrJO~h7@=e>Mrg_^QF|QYJ@~la& zD3LFe7rXUby5FDJ9%qWwU-SO_o7*JP&Zu{SBZ!T4_{h1d5@X6)>)8>W_TPh@1A+j{2m zW`(2?{lZ{WKLOD~lFghWfr-hl{+jC=Z-=3 z+VdHhZbg4|K8>Qp)id_9TIe6rzHaU_xxs8CLb^zy(S*QpXcGUlA9wOk{eka&OUKy? z#AqR(l|dcEe}~U!V2Gc*t08yRzlU6LBeneLaSyNC?=ds)(_Ux3q!TXrg8!54+J%qf zQOc!6H>11w4p}5B!$r{J$xFGUMur(itSY@qgB4!{IrCvpYxi%D%gSe{rc-ze zqO@qOuWFz;=xru_RLQ-4saT^&c`O|pqZ8EJdqYe9;gaZ9UsT151a|0XVsG{FUykT71f>wE5iycg zzdE5ku8Vq7&t5Wdx&1ipych2YRw}ZTzUd;Q_=lPlJHU{^QyH~@$t4>1BaGb0;5Kbk z*8qa%#nW zt(>qDMqGy(8Ja2`ja2wrk+6@{zzwuW(P(-zrH50TeX}6CpjGN0f4FNI2Krh13hMJL z-{gjaBF6PY=Wwa>rdT*>D#-ya^Ai26@ok~xNbJS_(^DFS4;)=8HE5#q|l za)W;u2t6)Bf_Hmh{h{ol$#y&5He4<5yWxSs!(o3sMo+RI)5=Jmc!NZ@^eFF5j{4@o zx#`xwfX2R`6qVJRHv%ZCWYaiKpf>9F%mNW*z-Ac19|AGZ?2$|4V~C}lYC5It`}U3^ z4mruL2bCO3@*#Cg7h~)SZ!9vonK{1gVY(t3W(?TgW|!0lxD@D}&96DWhI<;^*)VZC zBLbSMrsoM;%5u9Q1bx&{4&_$AJh8Pt!dm{0DjA)Z&>3nOB-|}JZsuridL-|A1YJ0I zf2apxmDsDvhWy7g4h;UwT>n-7lw|du*+FM|Ka8WO%`5F>|92E2m%HMzo~OspcUEq2 zCXKvjHF3$<^or=e%!B8rf>yK{GEddVv1Okql7$X4GsjMVaSK`;tUh06z#owlPaw#Om;yz;EjLZ7t3|@)> za8^#-sp)gBy>H+hJcVvxPixXO;n&Y=^Tb)Rla2}PR}qDZ^C0u-F~NbjT-4g zNP70f3Xng{)7L2uVZ)_6jaSV!@ZU`j$ruEwdXVXb7#gP|R{B7$qOF3>sGk}GLg|xs zxgt!4BDPDb+uO+2cIZ&_aJBrN+uNyP-W7%Fo0*8Ty|h^x`LElcRpl1$4tMCZ00mk$ z!dSO1n%J-m*5W_Coq}uI$YDE}M^{ARIwbQp@B9(eqs7h1iLLv?K~Lwg^g=$Q7f|5Z ziDbf{8G1vqHv{yvF&_)tXenN*29IR&j9(|NQ%P56?&halhV4iRzwG zzJaZzbpJbMs-W@IKJ6jy#09Z|k)Z#Z@JbHPV8o*AcIkg*0AnE0yaN8*FT^ zEI9qYTkq8{?d19vHKjEUG1?b-jW_8kjfLCv`O4e%`d8{B_A&H^>nshMkS z>zsuPmaFOtk+COELAo88Y4GW)pxM#YJh#1VpJH!&YA>L^!y+X17kANKdWex#h&}@= zH!X?WZaJ>o#p%(SH#=99V_Byl|0>AA00NqqYh&V4i^Tc8;UMw>=QKKV_BO5`?M}`l zhJz>+_EpYNwG7@(Y3(&ZT0*3k!Hwkv?aPZf<`PC}2WyeS7lD0hzaEg%uukJHyjGBF zMJ=vTP>5HI8$#I7tbZG@uK!e}UnPI*IG$yb$IHQkUKM}sSi59V8YThFiv#kg^Lt-? z4fJ@#VZTXj@OzUh>tFo~m(LI!zRk(_P?7=S`gYoAzilig^>xwvqN~j3vq5SP2hFP5UoTy@WOm(pXEIemeR2+pG$YeAebKZ-*BnBFnHHz zRms_E{K~j_wGPQPcw#iuU^kcNEjpQ8U5=>b(Qi=ypBk`%F`+*r*ALMBM`OOVE?0Cn zRajHDKpRjyFLbn>gcQozDi&@qwvf$6%#o-gjKf@X5#?L43}{AOpr}kwXSK%)S2YC7 ztHR+4Fw>|{zCS`p7b;EB+8)?v@Z|;aXu>jLK}bz8nJ*hKk8iyQgtm*3@}T+FPsADB z7(j?WK=Vj=k|FHE_EBkh;ta{?!V^+NyY&YYc2RKbTcXzucFyfRKreOQZKpfA)^`QK;~m$or=rE6izE2; z!%OenWZ%M;{RA;F{@VBaN{tXvo5D?>2&|VHq_|_NR8D5KTDe}|r_;+O#p9)})PU`8 zrS*7|Q}(v9-x2UZyqO;0tQ_ihM%M}dzV}k)yUFd)XJ+y+Yb?gJw;?h|JmS7{zx@Z`}9M;5=Z>E`qHHUAr1)gPC$~}iV7vnch_Wl{U{39U}#Bmll^s!4~=WWiD zXM4ilt{D7Jqh;(i%e;9$*c#&^n`1sN{oAtds9=-RVJ0LHrAK0a)p2#W-slLWC-{D? zv!9>#s2kOpGpcKQtCb03{*_@VEI zz^XuV_a*!?Z)?V0fM}7xC)7=!yqOu9`t>fH`%>-Su@f{W0PQ?%k4_2{tke6Cct-ZG z)WxgQNZ0k4T3}`y6H!qpxPHC`wStK!U4BMh$GAS|LUwkQIPi>I^(ga|IvD4yAVd0$ zcO4ma9f+CX@5e%cC6XFuJURaGvMHxy_`h(3t7>m&E9OW}8Rp`=c?QRlsx4FQ4(|Muh^J%6L} z=my1vU3RsRFq4(O;HdV!^gZRF75eDx%>DW9LE_P)ffcaoVRpqaly~ZFIVE1K<0q6m zx%c~`V|?-QX4HU;4u*sg1{N88>Sg`|Ppq%uBe1p+a+7QXPYreeoSc`SIC8m2&TvOJ zdPI-hpo^^NM#84wd&W>!ODbsE$arAKW0lLtI)^L}w!``CjwRm*gQM#*Zv<=?6 zn7yB$an={cwyH{a&ftu@6>RmN+f@@B?ZW6Hd(0b}<8AAJ88{mEs!E2uS^6eSc(+B~ z4ovggD`mDk2=EGSu5C3iMx-}gU?p&)#QdeuZC> ztDXDRl100~1|%7HzN7v(b!+3XYENay=3i=0T99VbomNH&{Q*0ovZbQb1`Kk*V6rJ=#h?c8)9G2`s6KQ;N%nPoX(1+yoR#ZZ|{nOM_!fGlFdJdI3l)28agG&Q9_zh{tZBw5~E# z+RcTsh;QjQCuKD+ldhi^;f=);8q>Y+J>l`WhnCIvcKRkp)JXYAma?UUl;@(CEY}9y zeH|v~;hN?Zq;pj;Ia}q@n>8HySmV34p-vUE1XCAk28=id?cG~%gOBcWyp0qY--sN2 z7Uc}}y!b;3F@}Ae9lvZP$S=!2RgsM}7FVezEi&Xc!p%sZpeDN|Cj`C@zbcdDMrxO!8#i*|@j+mg8yHa*4qWd_Mh-TA|qp|CiIAr+rGC*MvpK_P=4=khq&R z3{n2NHJtuy`MQ^gE)=`v>3QEm*T{;UoeQID6<@<2Oi~%_(cz|D27QuY=-u0i|vYgFuQw!JtG7?Ev$9_$WKN|>CN0A)Jim3zg( z=YyNbf8=F-1Pxop;#U}=M)M~9DPPx?8&B_| z<|)s$x!O9m%fAiE(PUXJAE7_V5P`MvL8m3C+e`ezHe2%3#z0W=!=_R8MRq*=Qh%MG zcOvW18uTF{gebU5HL-v>A3C>I1pMSSC-fOR6%QtSd7!}U3^gpN)G?}tP2S9`)uSw| z(7(;t|Fq zyz(1BM;_?gJtGmM#(3&;so3E&8W#WJyB;dx0$;IrSz+KMTT`nolg%FOeM_}V(gJ|d zbCm~a@atuISp(VsS)`ha|9!oKP%3!JVn;39^mQ4L608p~%R#2|N+16isAGE0jt3>k z?0*$(GgNDM{V;~xEFTz|;d*jlQTGBLM{XX_BiVSuh}=8I=zJDnkxEzBI{%}#vKo}r zyW!6?QAw+8WE5B@_`AlENxKkZ6i=FYrK@zded!dJEl4;+p=CKxc0oRO!ih2gUYN|d z&fuofQ4+n#d}4I7wTuLX4(+|Rp28BMB>W2%tGpsyjm>1c3rJ^jXV523bW&S;!pE)> zy%`W9_>(x;z*?pFxY+=c*YZsDBb4>C^r}c&c$$$vT32urq_NL6xh{3n>!)w_`LcB- zh&(^O%sw?!_!%I%+%>X6{@zJjBjJW{eLEZ{@kD2>b4_6q<+mio`i{?%!ls$#SI5&c zD7*N%mqWmF``0zFlT-DZhPkT0Vfcedh1t80J}Y*ML?Q!&?zzsj{T*BBb0P|-?J>mq zYFC@%F#AI&8QJ)$AyfHLme^Tck?w-Q*nSfheboHY{x0!f$oJubR-7>*beO?vNl%+Q zM^zN_`$FSG@AWuCbKR1~nXxr}<1{=@PQW|#HGBq&_v^VK_9t?rc=^Pq3Tt0xX0xZ$ z+Nm&S21j>QU!zao4!_|*a+sJ7E#s|QK+#&EaGSzF(7m91A-)=;@Q)3JG?({6(q8}g zJcIhppwVAN&N1^J^(tZ?3R-E#mb4&r6hjLu=9+LSe{i-qc`Dx7dH=;Ynp9J}&nP3^ zSaW#tqx63`RB^m44_r++8s(2>`Q$`>4lO4&N`k7G0QjS-20{T6wiQY*+C%Y%xV&Adt!rzb?PG=SVZG4PXwH@aS2M_WZ z_}!=HMl%JL@ld|hAh3sX9a98)q_M%IMSBV`zzYe;+er4e*R$UDOS_|&T`CSWe3X0R zp9J~o);WMs{nxWhuI1Ujg;hG`_8L!c6KAeigu?InjWL%R4FFY1&pM#4DACe)YJz4C zuIohkSO-;6^~!`SdM;|7Ezn4}-hkd6Lj18pmdia|V`B29EYJ=Eu(bxFrlAtbfyPh~ z?52bKL*;UU!e?lw(0AUOv?1;VKYvTxm=uLBp-Nx3se-Z7mQG)>dTf0mS~mpi8bs#( z!wY?+2H$72NnF1s%pp)AskCk$Knd@E-BW_nF>n-KUdZ_F`_If_uL7ny8Y8SIypL;G z>y2(^mV(KrF0(iUeyGqyBzfIwuI7G7iO!o}Kd}}SzF2Mccn(iQX?&IyfCw97ab3$A z3*h8XB5#d8)c!K%Biw!6$^APAF9(kBRa?Xz4#^}6>2ozV+i0AREgMmjs((^)9sBBz zC(VfQ|0zHC>M%-N!vS)WTh0CU4uWLRavFo`YG9Z+W-ZT8Yy!=9 zZf$YicS*4lX?ccE(-oJ8znY_detagD4A$ZSz)Uq_pHD(_`CD#wj^}k>{;GMv7a{yj z@s%-_K(edo{OPx5&Yck(BrICHx5xC7MYkobjR~jmr%<#u=|9X0jZ&CxHy7b)HBCKl z^&jSlHb_3Eq2WU|3r;Q+&KSatP;KJ=LT~htTDn+TuJ@ixFvrnc6Xf-u!N>>Jlq-gr zk?})NrcuJ^r^3!+?8;i84t_k1Kt6N$tjPSk0K}1$WL0SumT{3Jsf?87f1G0j0agsx zRss2|QBne#5Z|4ghcZ^8Ab>{r`wQCK84jYTmnr9?=-~igOPTZtV?cFapT^h@;XVV} zckGX3;OA_YBQ*mK%p9Co^7+>%fm~N@qoMJD0Y5P zwutTVn}noZ!dVu$j|^9Nglh52(0F8941KqJea;$srVmjV2@phXCaY2WsCiQm9=yPt zsKdT`RN08K2m6Q?U%^vZ+idBQj7Quv_Mm~QUL~f8xN_xqpowewrhV2O5PRUC)Yw?n z5|ZZo1GcmFS%5)TMY5I?Q}8F9k~cxWoMeGfNBzNv;;*lWRhH!6IQCsREbvr&joO29KxD z)#tYJiz|YBXi%J(gPSe+LR-i)UyxCEcVG`Kp46Jeh%YpEa>Le5I+Fb7&C<}xq@WSZ zRrWD&E^pwCVKmwf$K$t@-}c*Ix5fdVs5eLwNyXn4nFQR9h>v(b2s0YDqR2ACmeZ2f z78if>XEJlWBd*H-AOC8RLb4Lq1CIBVn=XUD*`oL|IRw}g*{ERVLJi#JPr(8k4jX%7 zjep^_4Gry3GYjNK${5fqN+neA7-VD)Z@oDXJej4LxeHL%~@_!%)w{DtV7vRF&>KCbjH zxLIPFB^#tpb>@Z2E4RA6Jl7Kgncu@pZn{;nGCj!aD0dHhk5N8%tt5 zjY+r2Zn~myJ))jlaNGM}ICkO7hwn=iB-+_YX^H6YwI(ER44JMmU+2@kr; z->@l?GCovZM7Nw@TXZwCiE(7=HN9&SIg&j?1HGH^86$J+h=&w_)uMxJX0}B)`W9?B*UBN5$t0 zk&J1vGMRm<5gEn7nROgv?A+c8c1Hca9VRz^CO6S^Vd&+`h`u4Vof;kP^f){<%mC0l zH1oJ?JAL_n9e0@W4lcGoIbL0K8k0T9>;}I~<5o0O2`HRJk-j?R&A%B$i)@aXd_CPa z{ir%|_dMBIkpfj*vF3&Ud6ZjO_e+`Xn3x!n(+9g8r?$j)7Z*n9%T#_iy);3^x*grD zeabS4C}SQWX++fS8!rY0!H{?H{-L6V(=IE58TQ&T8?JrD}I&HkYkl@xAcN zpdHB?0ix|%a%gBLO$Vt};@8evrUrdmAxN*TWD6FE+9T)HYL!iq#GTy5ra=5BoUBRS z)U#>wCJ6+_HJ|Jin-g{cYFyzajHP6lj~l1LM@7mFWKM-eHFb5&At?EONJbXj46gX2 ziWl9&IUg981Re2nbTMq{@4OQlp}>F|AZ+sUgHeVS$$aKB1i69tJG8^MxWvGfptQY;%YBymyao;9kHzvyt4J5El#E*ta~<<;kj zPW=5GE?v*sk1wANe!2kqnaXNvv5&GQ1*!ePEv5L--m7hzy%@(hi#ItoZfuaF=w0pV z9^;4$cM0HWe+bzEp-=w?ll@j)BWIzLK82;qI!+m|fvh4t9ZJkVV`6MDNQpA=+KeQ^ zCpzr{YtuxqH_szI%jBK`T%G%ZvIIMCt%UsSHVp2`PeSI4Cdh9xcQk zL(sJv-WD=B($aj;V9-J_8}G0B5@H;4lFOv3iK|rl+JYOmWBv5(nL>j|%>gci9Q|_E z@tNo80Meq^2h1PF_T*A^fv+2KV3WXH0FF~>mrd7a%e)P4Pi2bO&g;8^vnhN{BrHDT z$9`v2pfQ%$8hYtXQJp9bMnqAAiyBj}wMhr-)ET%#qMkZSjKAeik*$UQl*lwf7`T8+ z1XLh|)V_2uPxCDxt%U>J7K$iDXy=9{flTG2&J=Re0M?^|RM=bu**-D}rF-~|Lq$fB zN47g%YyksNsT4gNExhkVK<(vj?37JpU}MN+63|)B!%N=O`CSvK7dEJcPY-Z16qdBm zQbgPnMZxmH&A>yXbuKRSS0+~O^*7Mf;X#R8#5I_jszZT@UlTWxPC8grQ5Y4Fo5S^L z*&ay#y2s=wgtDUk;;4lQ(uNQPj^=r(hFv#WK#0Q+Yq*S|jfLNx*WJA>ze6V}X?^(h z#(8O^g8TJd-tfqI5O50fmVEai`ygL4xUDhTPM%Uu?u4Y2tkdS$1`Qws#{^CTY z&TCYSKBW&mFnt3+>%@g?lVgPK4{higfwe>nH7_gLkK)kD*~Oaap0DSPe{wyeNp5jO zG36Zi3owkZizO|c`Hr}T0d$YQ!M$8V^+#20v||Fu1bEvZ$u)gY+~z=ijBEvR4dw)= z9n$5!HFBFgdoB}bXX;M$`?L?g>*FiI##7Tx<6ut3^%mNlet;>WY8^bY=ue9Fsf0WB zG`J;Zq{-}4D(2wyKT)asymST5T$9T)QvdsUkfE8q@nce6V@QGbEBOwto&|=*c`=4S zK~eQV+KZHY9SHW`Sg)E%^11=oM%I&~`n=4km1SeaFzkQ!{_tP0Rz z7uyy7wS}>(&SGhp5?yv~x)QGPIZ@ zH>syj$q&c#te-LsA6M`Es~&v3kEr^_04;R9-Ahv-qgDq7#O`Eqb?QV(X z)yYECRS8`of+ZK&W~4|T4|HQkpC@b|&0Lqo{!aHb^1c62be;(W$c`tB!0D_LTSK2J zM-r2WMFw;@3%(jLA@!Rbs2^|#fkO3d-kpMNne{(3m8kjxMW}w;mW@QEm1)Jqatxbt{oF>;=J#+`&_2F?J*|S$LSH-Lz z_@hhq<(C#uYe>lYpmgk%zLpLrTj;AtU<${2Rix89Kg;&HV{7t0en>DuKvtr7r!g9O zaf3dSo=t@uJEwx%#p81sR~PxThX3m5L9;`(_4M@Gr5CDUbvP)wf8S_LBz$^ol;z zL9FYh{SL=W{gk?;0mC zwpZLU-4n}|9cZN`EO(ypA*SPO==LGGnR&e#C4Ebq{w!(n$6ZXCaQgEs|HTEv=FBBJ zqtfr~#^;&^t{W9<1hAuJ+Uyd@S$UdPy?L$n*S@;Q^x{p_ck7^z3kf%>v09vr+~9ea z6{^3UYtB|>Lg{}yX$)z(vxK=aa#<-UrAdylhGvI)ZvFg1HAS$v4ufVrBo^HMJaoCL z2TAUugmM_+EgWu|mB5gzh>S!!J~LP08GT^vh7dMOeYc-3-ELv=mfXoA-u|1qmzraA zXy-Iw>&pUb-lP02!~+w&54*%NLi^CA_Xa13kT(JN`k3_hP>|51r{q_!#R<&YUB{06 zu##k)1(2D}sRM64YJ*YzBd*Q1s7%C7v7H@oA?*o9c!NKSGrxlvh%f3#q6KwvxBzfp z7Gnw(M2;H!)3@;gi6JXLZa4m}Em2#Bi(A+k_ig%dh_p!y^^%%kx4ALLH>#`+_b=$2erU zLJiQ;sTV+*UYut+mR>#~8>7ieu}o*VkBOTfrnkjhdNux7XM91@-SBsvhfOYYti2V3 za{T8>{E2q+ol(7&7$gii5- z7DqB6r#fQO-YW7zhND#%`z`Fs2sg{{wpj?1Z1U`&P)J~U=6Ftd?`u1w$*wc9vN;FV&89Mf@EO79^^hu3a)pOVGEqyH$-L; z5i;1$iP#cf?A!oE(YSRJSx!h}ueLJxt>B!fjvJv`CC&tT@g^_x!&6i>bzGv%rtCf4MhF@=C_-j zalHiPC)z#7AI9PtbI%BU7XKQR?yHflx0*Fd$vbc3B#xI%jiphXQ3H1t(QA-m+J5qd=`RK4?T%F5GKR!?rH@S_PDiBzg0vK>0AG>aky$4 zyTWUuVo72HW5YrIeE8kHD!m7Hc=|tGYo80hH6L(O>spiCoFS9I5!G zDIshBN{8}EKwqe6XjwxtsI&mhk&QPM{|MumiaP5@)=rpBof)3B?|#k)Yj{Ug{%aTX zlBxOcLH+3#?6N4`;}T)qi-PoGCsJUfB8aa_h0hnJiI(&cIUop>Is4G-(YCR zBE{i5YbVi0GmA_(#IV2U?mg=;pbdG3P^2`@9xKV?cM@qI3Hi}LfW*h1aX1;$W8I0H zx%UMV4OkW=%zMO)&HnuyD|6p041k2nYt~(3lPDU&jD#vM&bYr2rX|AyXKe8%rn}O$e9e_TB2EUGw;5QV||<>MMX{(zTCau zC65fgZ49v{C-eMajr8&N#gykGsvEYAnhBhAuG3Vigz@3-B9Th)GT87z04-t1H=xto z*%nud`0tA9Ge?DNm+-3r?V9=N2wqUkf)Q(Q;Fl6pP=$^3nSi|y$&eoXvOQ|35NhT= zfF_jlIAdMFSd&b8q-xqa@ZWRlgQU2Aqi`N4P`h%HGStuMROULXhWBgg=q=kE_*R0L zrSzXLPZhslgRt`@;VkZ8f!~ErE@O5d=DrtdLl-wUB@WkUeK8%j^pB=Hb4+Tke_Cff zFPeaRYQK_o%1wi@E1YT3H)f0}(b9*`*UbSQEcR!WpG+}{AbI6yAv4~a+XfE@Nx?cb zwijg;Iq{m04ieojvdXmE-RJd>#TAtyh1j=pe$R5YwM)wND}jL7eLkslO{rinwreG@adOQ+?Ev&*9Ts zfAtJy(Rl1)S+TKm?WKcVzjnG-VqkMV577%sD)ddla6Y40QL|rvXen`kUB$I!TBLD; z4S#hr!IC!m_Njc74Svp(|4gB_-llBVp z2Yl+F%C_sof~tIP$#J$(zG-*NJWRL2ekEIB(st~x#8|#5nB>gW*}+xZmFh%nTnshg z*m}QR%`wvV_a>{IWEK5Z9Dgn-#sk$#HU{PFpcxbW-HBh(s6yRnftOzkC2<&L zexXSG)M~HRcCd$CFTa~?bzH6}Q-eltpiND~VgNeYjqm8vWzYc>Zt<{d|Mb49FohNq zML+N_A;^yY527Z=rO>x#QtxN9S|M^|sCFxA6*LBUOPwOhrxt7z?;p8lu^Ts7lESD^ zYpPgbMvyZnc_ow&UpO<7Uz&UAZiyN7DfRR`8=JHksGUCpLtS2*MWM&+xVJ3J3nG7b zm8fN#y5ol&8sA$X-tmOOS$Xlf!D|}e@78)?yIT5EwDTF~i>+C#zf!%iflrukP5nJ$ zb$rD!p&vYj`{zd=yL8CKKkCd}sKYVkKC5B+`PxQE@!N~)o<5ZPeREf1)7f==pw0IB zmOmJBvcyQ=XOT~6>md2#uXvSaf&y>3K|#2I)*=`P>uTX^q!ikQ^Zsh0YXhk!gqcT9&a9Rqu4&KwftE5q)l zh5hAEKY%5Wo>Ym8i;m+9<<4cRjzjOPmBpNCESZIpEr8)=be&i;mf9u&o}~(c0yIG( z>-_S#%AaL~UT%(M*utvR3-RQ`Sv(6??L$d59df9+X3PoDqtFp0=HKhcX5Xg4g>aDF z8#e7Xdv-Q88EL#+d;{5Z-2l>2af0%VdV>*EywPD~^q5+mM_dIY-r zHTaAJr^=QHm#5n|rXU6FxilGe|b zkhlj8bOMhb+5WRu63*__vb@i&{0-VYg^tTT2J9umTEQnAla+6~s9mB@y_Ktb{>Mw1 z^go6KE4_--8}G$o{DLO`Q3OXPwb@R)L@}*j`Y8FW4k3MN$SGmCDSEp}R~;j`u&9-T z;ZNk%Nv@sAi~AWt-5;#(z+=*V^M^1Lvo=FlKT+mI57C>cyGVFa+jyuO9Z~(UoHDJ^ zAIOmf9+#(NtNtafHCp3V$*1)@`B|xwwaPF1`!Ju5x7>%N;2_9M)K4je-|}!~Hemnvb^Vr}6kj89~bH zRK|ksZa=bw!SavUL!Ps7S;DK7jPrFAT*HNDC>H_OVUW?sV4G#n?)+I~oZ_yw#InrW z^sAoVo784j ze|vCuVg?M0cb*Y5ejL#f`t(6`Gq;KxvSU*Q8%v2N$!Y6yZyjwQh!e>Gw;uS45?3}| zSb*2iO7~ZCxPP=fe5`hGn;*QHyaiST%vSDpDrE!!LvOQMaMU45;{`1kSS>;X-p~P| zvn~EaG>{DE(Vha(x2Ewiml!s~LA815pE|gI9zQP}L#ZNxrDXJte4vjoA5v4#Eznaj z?iB=?VaraqLNR{x6D8Zlwx;16sq7k8y0ohY#Vyd5og0cDYa3BQ5^ft?1ZlTGTIds& z;o@zKth~{bsZ?}{+tAoNct#pKW05{k9EuK7omE#}syB1|hGoGgQOyb*@P8jw>m}1A zk>b<$trP8YZDKyOAP_KGReJMy=MiN3#*#z1Fwl(sZHn>7UvCz(Ay%v^905}#bS)>* z`v2XvdgdVcqIh=_k}0zFk%%7iDlCVBi*Wsnd=iauSlQM$P%Z$6yxDxG9s^0+0ovnzIzKCYsDQ01<8*P~PMFYqasI5;eg#h}rE&2C2`T z#-YNG{Zi4KuhPH7rp~B_ACLhm>}OwPXF<}Qv+jq1McKHNGU`9pw$}hX1^B&uJSx;4 zDz{RuFNDqITCY7GT2gEapV<7>b-gL>=l_VPvCSrowN-B>KIk_LI!d&hSpr9}Lnjsp zCG=d!07~-^!m2cwZO`|_Z`932$#)br67?Yc-((zyV^al-+0K_1jyFj-k?~;N$cyhE z$`q@T3XXf|@v4%`{*F)IE!~%a&Q?m+UQk-x&&R45Lv_$=G-Zs`QGTv|(8rNETkwSM zNf88b%5&u$b@FQ0`T$#z*`~%D3%?ehfJU5j)70`!PS z1Lluh&+Ark*sDbNd3io00?>85ZGX0D^@lg->V=cfncEwk&EwOvPGE-nf_D0`CFuEIQc=hG(d3B zX|<$b|DlTA*rIR6=aLf1=&8D_h4WK<8>f2J9PzXj?BM`G%lHHt#~Q;U;JGzzHc-Wa zluWoqt(QvakfhtB5ou7&k&qhad{!|geoBhi!M#q1Qe$)nE)XmKL}*q_?2|%CUom`M zXd_Flk>=ac>c&QcS5Tr$IgS1AB!q#jWri zVsEKemubQG;(Vds{Og>^DMzNolUTfEWG&$d?ud->2^SYn)x@bY+r7bWi&$IC%mVZg zOidNfhML`RQcF7nV>3JDSeV8ND?zLXOfHkRk!(TClGni}gJx>uuu7(*LLl=dv$qV0 z1iq>lIi5V-eay@&LtmH;ROLm=yh(=Hzg#Nk${J!NuH=;=%%z8crdHZq{I9lw3-e;9 z*j`_TLQJWL@YpY}e3D!GB7_`QlJDcSQR}+??M;hpdX%G^SetrDR{Ve6?*FM!Gqu@# ztb63rx}%ER+jsC*OlJCqrP#Fc!8>uBpKN5m9cV+X)xQzm`*jap%#hmrP8aQNT(Uv; zb3toVtbszO|6l(}yV+Y`7sMw+L+(v=}iF@lnGhaHMViA0)h8|siUHx($JhX-&J z{YeZH<&pQemxvoogw9k|s-V=#8!I-n8fCy=n+tOYx2AbJCR7RgI*kD!5k@&fyn5hn z-7S^t){k8H$C*Z$)kCXt9C1!+vDmqYapgpCbjN>K`^I z!jXAJ2I&jcTqutL*FFB(YV*I`PlAQO)`c*p)iqk~vrrS#9dg4~kYHSkwEWZRjETw; z)eXOr9cxdhur{w9zp-B|E;aEMd&4f&NpWak$a`&)Xj)@QaeGN+HJAp1`Ol8h0hJ;3 z8Ho5=abfQ;f@N@0KAC;B8^jo~g8cw$V`_fIyb&`I2I$?vZwyR}A`{w?8o-96=03d4 zUQX-jXM!gy(B6Tuz%%1ywGUVTl2FbjHPqZL^*a-ke6JfF7k#1#o~q~?m4|*aNR3$S zAlz5m2-z%Q?F65xQVq3L*T5wqt}(5&1TI}zqIprj;{zr2!$O)5Pp#4ZgiGyE6nmi# z%Y)&C%ci*(9j^f6c@Hr|GlWX;8fKE@+u`x2-D|7}qv?OfS8E#{ies$KvU-(xZ+tU| zS#*i8qjUkfo1nVaJ^v$#HyiF;l>d+v5(Dqko=PcbnkFp}Zr+Ts2QrJ8l?$cP(c3e_ zb7LbYQ#nZX zRrmI`zNBP%|E1ll_LS1WqYEeg6vj|bT^c&oOC{eNC_tKJWK+~+lXh^}QZ)G&tF@a1 z%RinI%k}%S2jWPK9vw2Ig|8^+b9~>U-K9>K)LqN54oefwo2e-u_@lQoNAIOkQ=-Qp zRz3OxG)K~ad3!b$(C^e6b1oST=hqV(@6U4Jjj1NKMANkmO8H?)``GfdE*KTO?0T&S zZstB+8wz*{x2ED)3G-Dtl+{iuL?N~jDg|o}fEob*mG-H;ybzU3x&vkp35HT79rS>? znmm&k0JY$VsKro|GPgA5O>FGsnz@Y@C+T-mG!qve-Z9>5JigPRb zW!Lh{fNEd5Yi)Rlo_A$645Sq`2eA zU&^{B@PFrK__?Wf*^sn43Id>91g+Akq{D` z>P3#2MYiiH0159Z)s|blVZf`OD1vuQ5rNbxHSDvZ2M{%IXI8`9h_;1)DYfXkoO$JP zh;BfqGEk6_4R(I(itgRvE;$4@tCUn%q2A=L>XqbugONo^x9oQ)Md6BItJqm_0Td7K zjnI@C2}}Y$zD29)X#lkoaB{Apq4Z#$cFnZ)-{3FlW771C`pSjNupL#@YV3DiI~^Sx zDD|r(IH0du@WL{0KPiE7V?Ii*EgLt&RJt* z^dmx%+!0{SIYJQ!^!}GPk!K|Gjq-#1BfMuea3tuH*1!H~l|Z&w&ZQxo3!xKJ2D3gM zidtQUr7qQKvKhi=H;HPlzLQ>s-Dva=L(sUui5{%buwOycP1 z)4s;fj{e4qzgoN;OfDvb4yh4k7J6oIvck(42HqS3_6z+VCbLyXl{qQ#qj^dMp z_U!~|gs@az?TmmBE1z zFK;uG7}-9a10Ez_R3aabUpBDkivlmbl*J`F1UVC5|u1syJlZq2iKSk)EfKJ*r$D_ z9SV^dhhzM3;#QqTl5z|4=ix}DxC5o4dx-u>toaHskx8T^*q1+Ajr!w6=>@7lzsWZ> zsg@6Eu=9F-n&hwc*wx&`7XEL^!kY~^@2BxuzIoa>Dj0Qo*ws?sw!sRa8%72i5B&z z6=JR1gDe|12jIf{$aS~%WH;Jshk;&&DN4f5l=&F=zEmIHZDtK4{iD>Xz6pJJ!Da-@ zzplp5bVwNnLQP~-bpbl3yR%UDfUJy+mT8m)3mGhKM1TCujBfx2sZIBbk9VkZ5CL`N zE1`yiONsQKmAIe6%Di3}i>J*PaeQ<+WiaKy=EhVC(|1>i`Q)ivtLuM9eh;AnOf+h)#Obyravy}tq~;ueDXNZ zz2iUoLQ(2$?pJuvF|*cJg``b?M|y#X4+d%YY2WlgTe%;ru|d2o@t276BM8_!Ii%E8 zEwCcoF!^2j#y7jV8WQfGx0)6#QcOp)JwY+=s4W0%_|rma{|wFC;{KA58QrGIYf%YW zZ&hWYna+{A^5ox3ydh=Dcnnc5@;BmbVZ2ChuCB_Q*$)2;WiDzVQ)KXP(|#U?)HF9i zMe5rG+$sOlNHlctdS_wqYbxt;NAQ2(cS_3NT}Q&L?|-k293M=xeesQ5<$)Hf{o$f8 z844ySNuZn?aGEvXv6+evdmz0|h#Z_R3e&0Q4(e7X@*%dIQN7GcD5{A~OkxbO!`Kx; zz2*PofvfeF(g7^uIXF<@XyY{8mE3VUr1qg{U1xG~#p#$|+3)0*;(*}cY~{;I^7+CMvFm6Q%;LQRn1PFa53H}8&lR*r>W z6#@g1vkf-G!eE#0;@2?vUysZ_(HT#V&_?ga9BsQ>NQebF2l1z2ul>Yw-=InXHXW-C zW6RHCr!m+ERdQJ4$m{FIdU)=PE_84D-Q_|}0sW@*mtA&im{^opx}J59AamaF5&ev= zqz3`Of1ODt*LhyEvZv!66|-XWMFl&lLfZ?wP#Cd655fK9mu)af9z?^&ie9$`yh0myg5z z3FGvkmEEK$aw{(wp(N6_chhas0TG%VY=dZ$l@Q<(NB}0kyLd&@)!6r%%arS2`Nti>NoI`QNGX0&bSswweSr^XqlmTw-jLtuk-R$Epzm9UL(wPBv}Qh&e;|}e=q(?XARjO~n~iBcUQd?(<-jmu?90%@47y6R#|b!Q zw8m=*5d) zCmQ>z6qD4oKcEq7{%UCORO71@{W~DbPKw8q$_jh+$X-c7H!p?DH7~`#`ic5=^Qa{o z0Z%s3TEqU<$E9ZO&)znYL^3WwAK^CL5K&=iC>$OtH#GYvUJXTVov4sopVVm`ph`RH z04BDdnR>Zwn{_w5U-J6Rp{S~c{I;gj^$EjnF}#98fb?w(5vJ=Ptd(cfvsSp8tZOGg zMt<{{qqXEac-MyQs5Y(x3oGH3CimxPEK5sg4w*{(p%KE}#yjt>`cVztuCwXMMf?iR zxGGFQ!bjXLfFZgj-%C;7xk&GcYpLJH`xLDCxt&8zT_3rnfFy6W#D$@gl($9tym}gC z*v>=sm!q3NOCeg+bDwJ>Vomth5ZQmNPb>gAtm&f@ti?sp?q3C9+Z&Xu_+eD5TI%M! zmlL}-d3i0Ba!XuS;{1dWqhm>in!Qgzoo3EvFP858czv(`31W5qZRaMspgr0IH0k#0 zeiT%G|1AeBfW`4mboweMKyfx{&miE`%}SaNsTub+dA?T7hmI|92mm_;T63m)zol1| zm_XStICR$t<8ti&cVq2eccYS~yd-VHsydn*i9u0;PFvkP{QH8u7-4BgoJ9QOXNWd; z_jQB*cxeA7m21#yeD?t0#HikTv@8U;r`EP0?^!%paaQsBMd7SGEdgg5>lq2fLEf^C z8;z~+JqNM2y{%)X84JPYZr>CTh=0eCSq9M5P(rIavCV|wn!@-dvXOyc-81|}NZ!^H zT{bjSAI-DV(bPOhIk+^;4HJm~gop#reP{5_Q+t7nfjDrDmj1RetB{1UaN!RS2o&m& zy{D{+;|0 K&9%I5PEZ>EW)$y(2Ha(G4d6z?Gsb8?SuxMt$y5rC$$;&S8a=E$w73k5>*p+Bmwx30ow+@dJe$weWvmACYoA7 zM2p;)?$|a>{sNGCsK2R}tJ|Sx@&zKMhx_x6sirbUnSG3GtuG)AXo7hz*Rg@8J=|Zr ziP0wklPj7vs$Y&aHTrxl`Ct#iXcNZV9FHkN=+^i7=HT9cvkUyly@0W}M3D{f>g$D1 z1(m|^R?+(QCO>!;B3jccO&Am-qV>yDXf=)I%&RXUFE`l0CMmo#rA19^HorJuIP}NT=%FC@voS#3T=*y3Pg)!eImiBnfvxq0I#3c4FHD>uj#L5H<+SSZf7>T z5?`)BSG#(BEAjTm;=-)tEx{AIy4o4|P^Q^mndDJCpB!E~BC{V$!f!7{WL9xqwOYy& z2N*L8s%cplpS$yrJxsedKl4zCC!>Kl5Fih$Qb(J4xq9{~Y{{X@#sEAgr*i><6nTFo^ zlj(#8Vp5Z*F-5~}7O>hHFmIyXxa?j%|3RUO)fga`R@7xKvI8j8tgBdvYY0+6#j!ic zCYzk7!zd}~$H;r!p_(NuT$m1B5|-835X(@mtogyZEr;DD^5-i=_NzbFety^2>{N3~ z`zDanz8x2S4<$D-P>%BJu4f>&luIi2V0ic`J+T{##tAR4^eg2&x5c~~- z*5$Tz;TbKN_BER!nu4gx5W1ori|2{luGQK5XCE7l0R; z#R+`|oD5p|oU86ztw@;f-+OWqq`kdfuPM^5cZa#tU}Yhxrsh$J80t4B80y^4%Tpd>A{sM98jO{bRWGdDS#$cf|K^1@WEk ztp?iZ$a|#p_tV9VHbKRPTw&aplS~>zVY+DWd`HW);1fL6mc!?$ZQ^gR))WH3Y%h?1+6{2AYHX7dJy?QfizhtWDLZ2@GQwyDxWg zP>X#x*IzJa78|RWlm6bNpHOhUMWwr_I#|MVo`?Z!qCbj1O|jhp23Qrb7(w4N=(?Ym zrx{C$W2#(@n?ni;4kQE6a5O9e_0Yly@2`J?!>Xv_%N0HK_{LE&4D(@G6JXNV%Kn`a z+wUG4JaNTon#?VN9;i83RW50rTUI%*eCgY3gd-c%p%}B^a(&K%n5r490tl>**Ei3~ z5GG~(2`+(U7Ciw}bRz>}1D!_$gts{+#Cx$*YRAs*N&@3!3hQt%wag&Bl-5n?G<{E3XTorJ|GS@Ac#uvmK5pl3>FtS-9@x0WZT*YSnz(JRl8HOb}be2xI~Cq$Z4a-*k&sm@tQ#&vGwJdC7E-6@>jRk`a{H zqGIirxJA0j{UtypxUv3+Cy$IJ>#(NeXy{JQ4>b%=7)poxb*&`r86}igP?R}e%ik~{ zI5RuSMI2av$|R9F z?OIp@cboKy$pPu2X?!3P>3_a>{)lq#qidJi?@IATSGD?Bdy0rz>&@g|YkJ%%EpwDs z9nAv941PI0*sP2IU3Oq?K+TWzYv8Shto8+Q=h?dL(v&vtI*;0mlnM{$Up!Dv{;z1YCF@ALV+ z=bMxTKe+=He!_gDf_maEk&LWr3f&Ce!Ag_N{VrZMkfDO&@foz-!q#^A-uEkV=4RI? z>qZv`w7}hf;wk|inQpY{-l%Syg~4%XXPJ3~(ny3+B8P578D-aH0gA&!VDN`Xuehm zuw~2t;JIvG%t*u4o!_*_9hS8MXT87^N$5Pbsq^A~=WWutO-%mcUV=|-oyv$zY`}vO zC^$33KbRR>Oo1MRhm86#j8IGzq{2CzPx>La66Hcyw#bi;4&;hppHqZ|-$EntxbyU0 zT4vJE)-9w&5x-)F=KfH*y7M&ut1kc2>TC8p6&AmDQ0fg@Euj9t=3QTR$bM&EXA!

nZ4jHSp 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 literal 0 HcmV?d00001 diff --git a/docs_edit/community/ecosystem.md b/docs_edit/community/ecosystem.md new file mode 100644 index 00000000..18750f3b --- /dev/null +++ b/docs_edit/community/ecosystem.md @@ -0,0 +1,70 @@ + +# Swarm Ecosystem + +Welcome to the Swarm Ecosystem, a comprehensive suite of tools and frameworks designed to empower developers to orhestrate swarms of autonomous agents for a variety of applications. Dive into our ecosystem below: + +| Project | Description | Link | +| ------- | ----------- | ---- | +| **Swarms Framework** | A Python-based framework that enables the creation, deployment, and scaling of reliable swarms of autonomous agents aimed at automating complex workflows. | [Swarms Framework](https://github.com/kyegomez/swarms) | +| **Swarms Cloud** | A cloud-based service offering Swarms-as-a-Service with guaranteed 100% uptime, cutting-edge performance, and enterprise-grade reliability for seamless scaling and management of swarms. | [Swarms Cloud](https://github.com/kyegomez/swarms-core) | +| **Swarms Core** | Provides backend utilities focusing on concurrency, multi-threading, and advanced execution strategies, developed in Rust for maximum efficiency and performance. | [Swarms Core](https://github.com/kyegomez/swarms-core) | +| **Swarm Foundation Models** | A dedicated repository for the creation, optimization, and training of groundbreaking swarming models. Features innovative models like PSO with transformers, ant colony optimizations, and more, aiming to surpass traditional architectures like Transformers and SSMs. Open for community contributions and ideas. | [Swarm Foundation Models](https://github.com/kyegomez/swarms-pytorch) | +| **Swarm Platform** | The Swarms dashboard Platform | [Swarm Platform](https://swarms.world/) | +| **Swarms JS** | Swarms Framework in JS. Orchestrate any agents and enable multi-agent collaboration between various agents! | [Swarm JS](https://github.com/kyegomez/swarms-js) | + + + +---- + +## 🫶 Contributions: + +The easiest way to contribute is to pick any issue with the `good first issue` tag 💪. Read the Contributing guidelines [here](/CONTRIBUTING.md). Bug Report? [File here](https://github.com/swarms/gateway/issues) | Feature Request? [File here](https://github.com/swarms/gateway/issues) + +Swarms is an open-source project, and contributions are VERY welcome. If you want to contribute, you can create new features, fix bugs, or improve the infrastructure. Please refer to the [CONTRIBUTING.md](https://github.com/kyegomez/swarms/blob/master/CONTRIBUTING.md) and our [contributing board](https://github.com/users/kyegomez/projects/1) to participate in Roadmap discussions! + + + + + + + + + + + + + + + + + + + + +---- + +## Community + +Join our growing community around the world, for real-time support, ideas, and discussions on Swarms 😊 + +- View our official [Blog](https://swarms.apac.ai) +- Chat live with us on [Discord](https://discord.gg/kS3rwKs3ZC) +- Follow us on [Twitter](https://twitter.com/kyegomez) +- Connect with us on [LinkedIn](https://www.linkedin.com/company/the-swarm-corporation) +- Visit us on [YouTube](https://www.youtube.com/channel/UC9yXyitkbU_WSy7bd_41SqQ) +- [Join the Swarms community on Discord!](https://discord.gg/AJazBmhKnr) +- Join our Swarms Community Gathering every Thursday at 1pm NYC Time to unlock the potential of autonomous agents in automating your daily tasks [Sign up here](https://lu.ma/5p2jnc2v) + +--- + +## Discovery Call +Book a discovery call to learn how Swarms can lower your operating costs by 40% with swarms of autonomous agents in lightspeed. [Click here to book a time that works for you!](https://calendly.com/swarm-corp/30min?month=2023-11) + + + +## Accelerate Backlog +Help us accelerate our backlog by supporting us financially! Note, we're an open source corporation and so all the revenue we generate is through donations at the moment ;) + + + +--- \ No newline at end of file diff --git a/docs_edit/contributing.md b/docs_edit/contributing.md new file mode 100644 index 00000000..6ef73017 --- /dev/null +++ b/docs_edit/contributing.md @@ -0,0 +1,123 @@ +# Contributing + +Thank you for your interest in contributing to Swarms! We welcome contributions from the community to help improve usability and readability. By contributing, you can be a part of creating a dynamic and interactive AI system. + +To get started, please follow the guidelines below. + + +## Optimization Priorities + +To continuously improve Swarms, we prioritize the following design objectives: + +1. **Usability**: Increase the ease of use and user-friendliness of the swarm system to facilitate adoption and interaction with basic input. + +2. **Reliability**: Improve the swarm's ability to obtain the desired output even with basic and un-detailed input. + +3. **Speed**: Reduce the time it takes for the swarm to accomplish tasks by improving the communication layer, critiquing, and self-alignment with meta prompting. + +4. **Scalability**: Ensure that the system is asynchronous, concurrent, and self-healing to support scalability. + +Our goal is to continuously improve Swarms by following this roadmap while also being adaptable to new needs and opportunities as they arise. + +## Join the Swarms Community + +Join the Swarms community on Discord to connect with other contributors, coordinate work, and receive support. + +- [Join the Swarms Discord Server](https://discord.gg/qUtxnK2NMf) + + +## Report and Issue +The easiest way to contribute to our docs is through our public [issue tracker](https://github.com/kyegomez/swarms-docs/issues). Feel free to submit bugs, request features or changes, or contribute to the project directly. + +## Pull Requests + +Swarms docs are built using [MkDocs](https://squidfunk.github.io/mkdocs-material/getting-started/). + +To directly contribute to Swarms documentation, first fork the [swarms-docs](https://github.com/kyegomez/swarms-docs) repository to your GitHub account. Then clone your repository to your local machine. + +From inside the directory run: + +```pip install -r requirements.txt``` + +To run `swarms-docs` locally run: + +```mkdocs serve``` + +You should see something similar to the following: + +``` +INFO - Building documentation... +INFO - Cleaning site directory +INFO - Documentation built in 0.19 seconds +INFO - [09:28:33] Watching paths for changes: 'docs', 'mkdocs.yml' +INFO - [09:28:33] Serving on http://127.0.0.1:8000/ +INFO - [09:28:37] Browser connected: http://127.0.0.1:8000/ +``` + +Follow the typical PR process to contribute changes. + +* Create a feature branch. +* Commit changes. +* Submit a PR. + + +------- +--- + +## Taking on Tasks + +We have a growing list of tasks and issues that you can contribute to. To get started, follow these steps: + +1. Visit the [Swarms GitHub repository](https://github.com/kyegomez/swarms) and browse through the existing issues. + +2. Find an issue that interests you and make a comment stating that you would like to work on it. Include a brief description of how you plan to solve the problem and any questions you may have. + +3. Once a project coordinator assigns the issue to you, you can start working on it. + +If you come across an issue that is unclear but still interests you, please post in the Discord server mentioned above. Someone from the community will be able to help clarify the issue in more detail. + +We also welcome contributions to documentation, such as updating markdown files, adding docstrings, creating system architecture diagrams, and other related tasks. + +## Submitting Your Work + +To contribute your changes to Swarms, please follow these steps: + +1. Fork the Swarms repository to your GitHub account. You can do this by clicking on the "Fork" button on the repository page. + +2. Clone the forked repository to your local machine using the `git clone` command. + +3. Before making any changes, make sure to sync your forked repository with the original repository to keep it up to date. You can do this by following the instructions [here](https://docs.github.com/en/github/collaborating-with-pull-requests/syncing-a-fork). + +4. Create a new branch for your changes. This branch should have a descriptive name that reflects the task or issue you are working on. + +5. Make your changes in the branch, focusing on a small, focused change that only affects a few files. + +6. Run any necessary formatting or linting tools to ensure that your changes adhere to the project's coding standards. + +7. Once your changes are ready, commit them to your branch with descriptive commit messages. + +8. Push the branch to your forked repository. + +9. Create a pull request (PR) from your branch to the main Swarms repository. Provide a clear and concise description of your changes in the PR. + +10. Request a review from the project maintainers. They will review your changes, provide feedback, and suggest any necessary improvements. + +11. Make any required updates or address any feedback provided during the review process. + +12. Once your changes have been reviewed and approved, they will be merged into the main branch of the Swarms repository. + +13. Congratulations! You have successfully contributed to Swarms. + +Please note that during the review process, you may be asked to make changes or address certain issues. It is important to engage in open and constructive communication with the project maintainers to ensure the quality of your contributions. + +## Developer Setup + +If you are interested in setting up the Swarms development environment, please follow the instructions provided in the [developer setup guide](docs/developer-setup.md). This guide provides an overview of the different tools and technologies used in the project. + +## Join the Agora Community + +Swarms is brought to you by Agora, the open-source AI research organization. Join the Agora community to connect with other researchers and developers working on AI projects. + +- [Join the Agora Discord Server](https://discord.gg/qUtxnK2NMf) + +Thank you for your contributions and for being a part of the Swarms and Agora community! Together, we can advance Humanity through the power of AI. \ No newline at end of file diff --git a/docs_edit/corporate/architecture.md b/docs_edit/corporate/architecture.md new file mode 100644 index 00000000..3738b8aa --- /dev/null +++ b/docs_edit/corporate/architecture.md @@ -0,0 +1,358 @@ +# Architecture + +## **1. Introduction** + +In today's rapidly evolving digital world, harnessing the collaborative power of multiple computational agents is more crucial than ever. 'Swarms' represents a bold stride in this direction—a scalable and dynamic framework designed to enable swarms of agents to function in harmony and tackle complex tasks. This document serves as a comprehensive guide, elucidating the underlying architecture and strategies pivotal to realizing the Swarms vision. + +--- + +## **2. The Vision** + +At its heart, the Swarms framework seeks to emulate the collaborative efficiency witnessed in natural systems, like ant colonies or bird flocks. These entities, though individually simple, achieve remarkable outcomes through collaboration. Similarly, Swarms will unleash the collective potential of numerous agents, operating cohesively. + +--- + +## **3. Architecture Overview** + +### **3.1 Agent Level** +The base level that serves as the building block for all further complexity. + +#### Mechanics: +* **Model**: At its core, each agent harnesses a powerful model like OpenAI's GPT. +* **Vectorstore**: A memory structure allowing agents to store and retrieve information. +* **Tools**: Utilities and functionalities that aid in the agent's task execution. + +#### Interaction: +Agents interact with the external world through their model and tools. The Vectorstore aids in retaining knowledge and facilitating inter-agent communication. + +### **3.2 Worker Infrastructure Level** +Building on the agent foundation, enhancing capability and readiness for swarm integration. + +#### Mechanics: +* **Human Input Integration**: Enables agents to accept and understand human-provided instructions. +* **Unique Identifiers**: Assigns each agent a unique ID to facilitate tracking and communication. +* **Asynchronous Tools**: Bolsters agents' capability to multitask and interact in real-time. + +#### Interaction: +Each worker is an enhanced agent, capable of operating independently or in sync with its peers, allowing for dynamic, scalable operations. + +### **3.3 Swarm Level** +Multiple Worker Nodes orchestrated into a synchronized, collaborative entity. + +#### Mechanics: +* **Orchestrator**: The maestro, responsible for directing the swarm, task allocation, and communication. +* **Scalable Communication Layer**: Facilitates interactions among nodes and between nodes and the orchestrator. +* **Task Assignment & Completion Protocols**: Structured procedures ensuring tasks are efficiently distributed and concluded. + +#### Interaction: +Nodes collaborate under the orchestrator's guidance, ensuring tasks are partitioned appropriately, executed, and results consolidated. + +### **3.4 Hivemind Level** +Envisioned as a 'Swarm of Swarms'. An upper echelon of collaboration. + +#### Mechanics: +* **Hivemind Orchestrator**: Oversees multiple swarm orchestrators, ensuring harmony on a grand scale. +* **Inter-Swarm Communication Protocols**: Dictates how swarms interact, exchange information, and co-execute tasks. + +#### Interaction: +Multiple swarms, each a formidable force, combine their prowess under the Hivemind. This level tackles monumental tasks by dividing them among swarms. + +--- + +## **4. Building the Framework: A Task Checklist** + +### **4.1 Foundations: Agent Level** +* Define and standardize agent properties. +* Integrate desired model (e.g., OpenAI's GPT) with agent. +* Implement Vectorstore mechanisms: storage, retrieval, and communication protocols. +* Incorporate essential tools and utilities. +* Conduct preliminary testing: Ensure agents can execute basic tasks and utilize the Vectorstore. + +### **4.2 Enhancements: Worker Infrastructure Level** +* Interface agents with human input mechanisms. +* Assign and manage unique identifiers for each worker. +* Integrate asynchronous capabilities: Ensure real-time response and multitasking. +* Test worker nodes for both solitary and collaborative tasks. + +### **4.3 Cohesion: Swarm Level** +* Design and develop the orchestrator: Ensure it can manage multiple worker nodes. +* Establish a scalable and efficient communication layer. +* Implement task distribution and retrieval protocols. +* Test swarms for efficiency, scalability, and robustness. + +### **4.4 Apex Collaboration: Hivemind Level** +* Build the Hivemind Orchestrator: Ensure it can oversee multiple swarms. +* Define inter-swarm communication, prioritization, and task-sharing protocols. +* Develop mechanisms to balance loads and optimize resource utilization across swarms. +* Thoroughly test the Hivemind level for macro-task execution. + +--- + +## **5. Integration and Communication Mechanisms** + +### **5.1 Vectorstore as the Universal Communication Layer** +Serving as the memory and communication backbone, the Vectorstore must: +* Facilitate rapid storage and retrieval of high-dimensional vectors. +* Enable similarity-based lookups: Crucial for recognizing patterns or finding similar outputs. +* Scale seamlessly as agent count grows. + +### **5.2 Orchestrator-Driven Communication** +* Orchestrators, both at the swarm and hivemind level, should employ adaptive algorithms to optimally distribute tasks. +* Ensure real-time monitoring of task execution and worker node health. +* Integrate feedback loops: Allow for dynamic task reassignment in case of node failures or inefficiencies. + +--- + +## **6. Conclusion & Forward Path** + +The Swarms framework, once realized, will usher in a new era of computational efficiency and collaboration. While the roadmap ahead is intricate, with diligent planning, development, and testing, Swarms will redefine the boundaries of collaborative computing. + +-------- + + +# Overview + +### 1. Model + +**Overview:** +The foundational level where a trained model (e.g., OpenAI GPT model) is initialized. It's the base on which further abstraction levels build upon. It provides the core capabilities to perform tasks, answer queries, etc. + +**Diagram:** +``` +[ Model (openai) ] +``` + +### 2. Agent Level + +**Overview:** +At the agent level, the raw model is coupled with tools and a vector store, allowing it to be more than just a model. The agent can now remember, use tools, and become a more versatile entity ready for integration into larger systems. + +**Diagram:** +``` ++-----------+ +| Agent | +| +-------+ | +| | Model | | +| +-------+ | +| +-----------+ | +| | VectorStore | | +| +-----------+ | +| +-------+ | +| | Tools | | +| +-------+ | ++-----------+ +``` + +### 3. Worker Infrastructure Level + +**Overview:** +The worker infrastructure is a step above individual agents. Here, an agent is paired with additional utilities like human input and other tools, making it a more advanced, responsive unit capable of complex tasks. + +**Diagram:** +``` ++----------------+ +| WorkerNode | +| +-----------+ | +| | Agent | | +| | +-------+ | | +| | | Model | | | +| | +-------+ | | +| | +-------+ | | +| | | Tools | | | +| | +-------+ | | +| +-----------+ | +| | +| +-----------+ | +| |Human Input| | +| +-----------+ | +| | +| +-------+ | +| | Tools | | +| +-------+ | ++----------------+ +``` + +### 4. Swarm Level + +**Overview:** +At the swarm level, the orchestrator is central. It's responsible for assigning tasks to worker nodes, monitoring their completion, and handling the communication layer (for example, through a vector store or another universal communication mechanism) between worker nodes. + +**Diagram:** +``` + +------------+ + |Orchestrator| + +------------+ + | + +---------------------------+ + | | + | Swarm-level Communication| + | Layer (e.g. | + | Vector Store) | + +---------------------------+ + / | \ + +---------------+ +---------------+ +---------------+ + |WorkerNode 1 | |WorkerNode 2 | |WorkerNode n | + | | | | | | + +---------------+ +---------------+ +---------------+ + | Task Assigned | Task Completed | Communication | +``` + +### 5. Hivemind Level + +**Overview:** +At the Hivemind level, it's a multi-swarm setup, with an upper-layer orchestrator managing multiple swarm-level orchestrators. The Hivemind orchestrator is responsible for broader tasks like assigning macro-tasks to swarms, handling inter-swarm communications, and ensuring the overall system is functioning smoothly. + +**Diagram:** +``` + +--------+ + |Hivemind| + +--------+ + | + +--------------+ + |Hivemind | + |Orchestrator | + +--------------+ + / | \ + +------------+ +------------+ +------------+ + |Orchestrator| |Orchestrator| |Orchestrator| + +------------+ +------------+ +------------+ + | | | ++--------------+ +--------------+ +--------------+ +| Swarm-level| | Swarm-level| | Swarm-level| +|Communication| |Communication| |Communication| +| Layer | | Layer | | Layer | ++--------------+ +--------------+ +--------------+ + / \ / \ / \ ++-------+ +-------+ +-------+ +-------+ +-------+ +|Worker | |Worker | |Worker | |Worker | |Worker | +| Node | | Node | | Node | | Node | | Node | ++-------+ +-------+ +-------+ +-------+ +-------+ +``` + +This setup allows the Hivemind level to operate at a grander scale, with the capability to manage hundreds or even thousands of worker nodes across multiple swarms efficiently. + + + +------- +# **Swarms Framework Development Strategy Checklist** + +## **Introduction** + +The development of the Swarms framework requires a systematic and granular approach to ensure that each component is robust and that the overall framework is efficient and scalable. This checklist will serve as a guide to building Swarms from the ground up, breaking down tasks into small, manageable pieces. + +--- + +## **1. Agent Level Development** + +### **1.1 Model Integration** +- [ ] Research the most suitable models (e.g., OpenAI's GPT). +- [ ] Design an API for the agent to call the model. +- [ ] Implement error handling when model calls fail. +- [ ] Test the model with sample data for accuracy and speed. + +### **1.2 Vectorstore Implementation** +- [ ] Design the schema for the vector storage system. +- [ ] Implement storage methods to add, delete, and update vectors. +- [ ] Develop retrieval methods with optimization for speed. +- [ ] Create protocols for vector-based communication between agents. +- [ ] Conduct stress tests to ascertain storage and retrieval speed. + +### **1.3 Tools & Utilities Integration** +- [ ] List out essential tools required for agent functionality. +- [ ] Develop or integrate APIs for each tool. +- [ ] Implement error handling and logging for tool interactions. +- [ ] Validate tools integration with unit tests. + +--- + +## **2. Worker Infrastructure Level Development** + +### **2.1 Human Input Integration** +- [ ] Design a UI/UX for human interaction with worker nodes. +- [ ] Create APIs for input collection. +- [ ] Implement input validation and error handling. +- [ ] Test human input methods for clarity and ease of use. + +### **2.2 Unique Identifier System** +- [ ] Research optimal formats for unique ID generation. +- [ ] Develop methods for generating and assigning IDs to agents. +- [ ] Implement a tracking system to manage and monitor agents via IDs. +- [ ] Validate the uniqueness and reliability of the ID system. + +### **2.3 Asynchronous Operation Tools** +- [ ] Incorporate libraries/frameworks to enable asynchrony. +- [ ] Ensure tasks within an agent can run in parallel without conflict. +- [ ] Test asynchronous operations for efficiency improvements. + +--- + +## **3. Swarm Level Development** + +### **3.1 Orchestrator Design & Development** +- [ ] Draft a blueprint of orchestrator functionalities. +- [ ] Implement methods for task distribution among worker nodes. +- [ ] Develop communication protocols for the orchestrator to monitor workers. +- [ ] Create feedback systems to detect and address worker node failures. +- [ ] Test orchestrator with a mock swarm to ensure efficient task allocation. + +### **3.2 Communication Layer Development** +- [ ] Select a suitable communication protocol/framework (e.g., gRPC, WebSockets). +- [ ] Design the architecture for scalable, low-latency communication. +- [ ] Implement methods for sending, receiving, and broadcasting messages. +- [ ] Test communication layer for reliability, speed, and error handling. + +### **3.3 Task Management Protocols** +- [ ] Develop a system to queue, prioritize, and allocate tasks. +- [ ] Implement methods for real-time task status tracking. +- [ ] Create a feedback loop for completed tasks. +- [ ] Test task distribution, execution, and feedback systems for efficiency. + +--- + +## **4. Hivemind Level Development** + +### **4.1 Hivemind Orchestrator Development** +- [ ] Extend swarm orchestrator functionalities to manage multiple swarms. +- [ ] Create inter-swarm communication protocols. +- [ ] Implement load balancing mechanisms to distribute tasks across swarms. +- [ ] Validate hivemind orchestrator functionalities with multi-swarm setups. + +### **4.2 Inter-Swarm Communication Protocols** +- [ ] Design methods for swarms to exchange data. +- [ ] Implement data reconciliation methods for swarms working on shared tasks. +- [ ] Test inter-swarm communication for efficiency and data integrity. + +--- + +## **5. Scalability & Performance Testing** + +- [ ] Simulate heavy loads to test the limits of the framework. +- [ ] Identify and address bottlenecks in both communication and computation. +- [ ] Conduct speed tests under different conditions. +- [ ] Test the system's responsiveness under various levels of stress. + +--- + +## **6. Documentation & User Guide** + +- [ ] Develop detailed documentation covering architecture, setup, and usage. +- [ ] Create user guides with step-by-step instructions. +- [ ] Incorporate visual aids, diagrams, and flowcharts for clarity. +- [ ] Update documentation regularly with new features and improvements. + +--- + +## **7. Continuous Integration & Deployment** + +- [ ] Setup CI/CD pipelines for automated testing and deployment. +- [ ] Ensure automatic rollback in case of deployment failures. +- [ ] Integrate code quality and security checks in the pipeline. +- [ ] Document deployment strategies and best practices. + +--- + +## **Conclusion** + +The Swarms framework represents a monumental leap in agent-based computation. This checklist provides a thorough roadmap for the framework's development, ensuring that every facet is addressed in depth. Through diligent adherence to this guide, the Swarms vision can be realized as a powerful, scalable, and robust system ready to tackle the challenges of tomorrow. + +(Note: This document, given the word limit, provides a high-level overview. A full 5000-word document would delve into even more intricate details, nuances, potential pitfalls, and include considerations for security, user experience, compatibility, etc.) \ No newline at end of file diff --git a/docs_edit/corporate/bounties.md b/docs_edit/corporate/bounties.md new file mode 100644 index 00000000..7d8d6694 --- /dev/null +++ b/docs_edit/corporate/bounties.md @@ -0,0 +1,86 @@ +# Bounty Program + +Our bounty program is an exciting opportunity for contributors to help us build the future of Swarms. By participating, you can earn rewards while contributing to a project that aims to revolutionize digital activity. + +Here's how it works: + +1. **Check out our Roadmap**: We've shared our roadmap detailing our short and long-term goals. These are the areas where we're seeking contributions. + +2. **Pick a Task**: Choose a task from the roadmap that aligns with your skills and interests. If you're unsure, you can reach out to our team for guidance. + +3. **Get to Work**: Once you've chosen a task, start working on it. Remember, quality is key. We're looking for contributions that truly make a difference. + +4. **Submit your Contribution**: Once your work is complete, submit it for review. We'll evaluate your contribution based on its quality, relevance, and the value it brings to Swarms. + +5. **Earn Rewards**: If your contribution is approved, you'll earn a bounty. The amount of the bounty depends on the complexity of the task, the quality of your work, and the value it brings to Swarms. + +## The Three Phases of Our Bounty Program + +### Phase 1: Building the Foundation +In the first phase, our focus is on building the basic infrastructure of Swarms. This includes developing key components like the Swarms class, integrating essential tools, and establishing task completion and evaluation logic. We'll also start developing our testing and evaluation framework during this phase. If you're interested in foundational work and have a knack for building robust, scalable systems, this phase is for you. + +### Phase 2: Enhancing the System +In the second phase, we'll focus on enhancing Swarms by integrating more advanced features, improving the system's efficiency, and refining our testing and evaluation framework. This phase involves more complex tasks, so if you enjoy tackling challenging problems and contributing to the development of innovative features, this is the phase for you. + +### Phase 3: Towards Super-Intelligence +The third phase of our bounty program is the most exciting - this is where we aim to achieve super-intelligence. In this phase, we'll be working on improving the swarm's capabilities, expanding its skills, and fine-tuning the system based on real-world testing and feedback. If you're excited about the future of AI and want to contribute to a project that could potentially transform the digital world, this is the phase for you. + +Remember, our roadmap is a guide, and we encourage you to bring your own ideas and creativity to the table. We believe that every contribution, no matter how small, can make a difference. So join us on this exciting journey and help us create the future of Swarms. + +**To participate in our bounty program, visit the [Swarms Bounty Program Page](https://swarms.ai/bounty).** Let's build the future together! + + + + + +## Bounties for Roadmap Items + +To accelerate the development of Swarms and to encourage more contributors to join our journey towards automating every digital activity in existence, we are announcing a Bounty Program for specific roadmap items. Each bounty will be rewarded based on the complexity and importance of the task. Below are the items available for bounty: + +1. **Multi-Agent Debate Integration**: $2000 +2. **Meta Prompting Integration**: $1500 +3. **Swarms Class**: $1500 +4. **Integration of Additional Tools**: $1000 +5. **Task Completion and Evaluation Logic**: $2000 +6. **Ocean Integration**: $2500 +7. **Improved Communication**: $2000 +8. **Testing and Evaluation**: $1500 +9. **Worker Swarm Class**: $2000 +10. **Documentation**: $500 + +For each bounty task, there will be a strict evaluation process to ensure the quality of the contribution. This process includes a thorough review of the code and extensive testing to ensure it meets our standards. + +# 3-Phase Testing Framework + +To ensure the quality and efficiency of the Swarm, we will introduce a 3-phase testing framework which will also serve as our evaluation criteria for each of the bounty tasks. + +## Phase 1: Unit Testing +In this phase, individual modules will be tested to ensure that they work correctly in isolation. Unit tests will be designed for all functions and methods, with an emphasis on edge cases. + +## Phase 2: Integration Testing +After passing unit tests, we will test the integration of different modules to ensure they work correctly together. This phase will also test the interoperability of the Swarm with external systems and libraries. + +## Phase 3: Benchmarking & Stress Testing +In the final phase, we will perform benchmarking and stress tests. We'll push the limits of the Swarm under extreme conditions to ensure it performs well in real-world scenarios. This phase will measure the performance, speed, and scalability of the Swarm under high load conditions. + +By following this 3-phase testing framework, we aim to develop a reliable, high-performing, and scalable Swarm that can automate all digital activities. + +# Reverse Engineering to Reach Phase 3 + +To reach the Phase 3 level, we need to reverse engineer the tasks we need to complete. Here's an example of what this might look like: + +1. **Set Clear Expectations**: Define what success looks like for each task. Be clear about the outputs and outcomes we expect. This will guide our testing and development efforts. + +2. **Develop Testing Scenarios**: Create a comprehensive list of testing scenarios that cover both common and edge cases. This will help us ensure that our Swarm can handle a wide range of situations. + +3. **Write Test Cases**: For each scenario, write detailed test cases that outline the exact steps to be followed, the inputs to be used, and the expected outputs. + +4. **Execute the Tests**: Run the test cases on our Swarm, making note of any issues or bugs that arise. + +5. **Iterate and Improve**: Based on the results of our tests, iterate and improve our Swarm. This may involve fixing bugs, optimizing code, or redesigning parts of our system. + +6. **Repeat**: Repeat this process until our Swarm meets our expectations and passes all test cases. + +By following these steps, we will systematically build, test, and improve our Swarm until it reaches the Phase 3 level. This methodical approach will help us ensure that we create a reliable, high-performing, and scalable Swarm that can truly automate all digital activities. + +Let's shape the future of digital automation together! diff --git a/docs_edit/corporate/checklist.md b/docs_edit/corporate/checklist.md new file mode 100644 index 00000000..1dc92fc7 --- /dev/null +++ b/docs_edit/corporate/checklist.md @@ -0,0 +1,122 @@ +# **Swarms Framework Development Strategy Checklist** + +## **Introduction** + +The development of the Swarms framework requires a systematic and granular approach to ensure that each component is robust and that the overall framework is efficient and scalable. This checklist will serve as a guide to building Swarms from the ground up, breaking down tasks into small, manageable pieces. + +--- + +## **1. Agent Level Development** + +### **1.1 Model Integration** +- [ ] Research the most suitable models (e.g., OpenAI's GPT). +- [ ] Design an API for the agent to call the model. +- [ ] Implement error handling when model calls fail. +- [ ] Test the model with sample data for accuracy and speed. + +### **1.2 Vectorstore Implementation** +- [ ] Design the schema for the vector storage system. +- [ ] Implement storage methods to add, delete, and update vectors. +- [ ] Develop retrieval methods with optimization for speed. +- [ ] Create protocols for vector-based communication between agents. +- [ ] Conduct stress tests to ascertain storage and retrieval speed. + +### **1.3 Tools & Utilities Integration** +- [ ] List out essential tools required for agent functionality. +- [ ] Develop or integrate APIs for each tool. +- [ ] Implement error handling and logging for tool interactions. +- [ ] Validate tools integration with unit tests. + +--- + +## **2. Worker Infrastructure Level Development** + +### **2.1 Human Input Integration** +- [ ] Design a UI/UX for human interaction with worker nodes. +- [ ] Create APIs for input collection. +- [ ] Implement input validation and error handling. +- [ ] Test human input methods for clarity and ease of use. + +### **2.2 Unique Identifier System** +- [ ] Research optimal formats for unique ID generation. +- [ ] Develop methods for generating and assigning IDs to agents. +- [ ] Implement a tracking system to manage and monitor agents via IDs. +- [ ] Validate the uniqueness and reliability of the ID system. + +### **2.3 Asynchronous Operation Tools** +- [ ] Incorporate libraries/frameworks to enable asynchrony. +- [ ] Ensure tasks within an agent can run in parallel without conflict. +- [ ] Test asynchronous operations for efficiency improvements. + +--- + +## **3. Swarm Level Development** + +### **3.1 Orchestrator Design & Development** +- [ ] Draft a blueprint of orchestrator functionalities. +- [ ] Implement methods for task distribution among worker nodes. +- [ ] Develop communication protocols for the orchestrator to monitor workers. +- [ ] Create feedback systems to detect and address worker node failures. +- [ ] Test orchestrator with a mock swarm to ensure efficient task allocation. + +### **3.2 Communication Layer Development** +- [ ] Select a suitable communication protocol/framework (e.g., gRPC, WebSockets). +- [ ] Design the architecture for scalable, low-latency communication. +- [ ] Implement methods for sending, receiving, and broadcasting messages. +- [ ] Test communication layer for reliability, speed, and error handling. + +### **3.3 Task Management Protocols** +- [ ] Develop a system to queue, prioritize, and allocate tasks. +- [ ] Implement methods for real-time task status tracking. +- [ ] Create a feedback loop for completed tasks. +- [ ] Test task distribution, execution, and feedback systems for efficiency. + +--- + +## **4. Hivemind Level Development** + +### **4.1 Hivemind Orchestrator Development** +- [ ] Extend swarm orchestrator functionalities to manage multiple swarms. +- [ ] Create inter-swarm communication protocols. +- [ ] Implement load balancing mechanisms to distribute tasks across swarms. +- [ ] Validate hivemind orchestrator functionalities with multi-swarm setups. + +### **4.2 Inter-Swarm Communication Protocols** +- [ ] Design methods for swarms to exchange data. +- [ ] Implement data reconciliation methods for swarms working on shared tasks. +- [ ] Test inter-swarm communication for efficiency and data integrity. + +--- + +## **5. Scalability & Performance Testing** + +- [ ] Simulate heavy loads to test the limits of the framework. +- [ ] Identify and address bottlenecks in both communication and computation. +- [ ] Conduct speed tests under different conditions. +- [ ] Test the system's responsiveness under various levels of stress. + +--- + +## **6. Documentation & User Guide** + +- [ ] Develop detailed documentation covering architecture, setup, and usage. +- [ ] Create user guides with step-by-step instructions. +- [ ] Incorporate visual aids, diagrams, and flowcharts for clarity. +- [ ] Update documentation regularly with new features and improvements. + +--- + +## **7. Continuous Integration & Deployment** + +- [ ] Setup CI/CD pipelines for automated testing and deployment. +- [ ] Ensure automatic rollback in case of deployment failures. +- [ ] Integrate code quality and security checks in the pipeline. +- [ ] Document deployment strategies and best practices. + +--- + +## **Conclusion** + +The Swarms framework represents a monumental leap in agent-based computation. This checklist provides a thorough roadmap for the framework's development, ensuring that every facet is addressed in depth. Through diligent adherence to this guide, the Swarms vision can be realized as a powerful, scalable, and robust system ready to tackle the challenges of tomorrow. + +(Note: This document, given the word limit, provides a high-level overview. A full 5000-word document would delve into even more intricate details, nuances, potential pitfalls, and include considerations for security, user experience, compatibility, etc.) \ No newline at end of file diff --git a/docs_edit/corporate/cost_analysis.md b/docs_edit/corporate/cost_analysis.md new file mode 100644 index 00000000..03ebcfaa --- /dev/null +++ b/docs_edit/corporate/cost_analysis.md @@ -0,0 +1,100 @@ +# Costs Structure of Deploying Autonomous Agents + +## Table of Contents + +1. Introduction +2. Our Time: Generating System Prompts and Custom Tools +3. Consultancy Fees +4. Model Inference Infrastructure +5. Deployment and Continual Maintenance +6. Output Metrics: Blogs Generation Rates + +--- + +## 1. Introduction + +Autonomous agents are revolutionizing various industries, from self-driving cars to chatbots and customer service solutions. The prospect of automation and improved efficiency makes these agents attractive investments. However, like any other technological solution, deploying autonomous agents involves several cost elements that organizations need to consider carefully. This comprehensive guide aims to provide an exhaustive outline of the costs associated with deploying autonomous agents. + +--- + +## 2. Our Time: Generating System Prompts and Custom Tools + +### Description + +The deployment of autonomous agents often requires a substantial investment of time to develop system prompts and custom tools tailored to specific operational needs. + +### Costs + +| Task | Time Required (Hours) | Cost per Hour ($) | Total Cost ($) | +| ------------------------ | --------------------- | ----------------- | -------------- | +| System Prompts Design | 50 | 100 | 5,000 | +| Custom Tools Development | 100 | 100 | 10,000 | +| **Total** | **150** | | **15,000** | + +--- + +## 3. Consultancy Fees + +### Description + +Consultation is often necessary for navigating the complexities of autonomous agents. This includes system assessment, customization, and other essential services. + +### Costs + +| Service | Fees ($) | +| -------------------- | --------- | +| Initial Assessment | 5,000 | +| System Customization | 7,000 | +| Training | 3,000 | +| **Total** | **15,000**| + +--- + +## 4. Model Inference Infrastructure + +### Description + +The hardware and software needed for the agent's functionality, known as the model inference infrastructure, form a significant part of the costs. + +### Costs + +| Component | Cost ($) | +| -------------------- | --------- | +| Hardware | 10,000 | +| Software Licenses | 2,000 | +| Cloud Services | 3,000 | +| **Total** | **15,000**| + +--- + +## 5. Deployment and Continual Maintenance + +### Description + +Once everything is in place, deploying the autonomous agents and their ongoing maintenance are the next major cost factors. + +### Costs + +| Task | Monthly Cost ($) | Annual Cost ($) | +| ------------------- | ---------------- | --------------- | +| Deployment | 5,000 | 60,000 | +| Ongoing Maintenance | 1,000 | 12,000 | +| **Total** | **6,000** | **72,000** | + +--- + +## 6. Output Metrics: Blogs Generation Rates + +### Description + +To provide a sense of what an investment in autonomous agents can yield, we offer the following data regarding blogs that can be generated as an example of output. + +### Blogs Generation Rates + +| Timeframe | Number of Blogs | +|-----------|-----------------| +| Per Day | 20 | +| Per Week | 140 | +| Per Month | 600 | + + diff --git a/docs_edit/corporate/data_room.md b/docs_edit/corporate/data_room.md new file mode 100644 index 00000000..31ee9b7f --- /dev/null +++ b/docs_edit/corporate/data_room.md @@ -0,0 +1,112 @@ +# Swarms Data Room + +## Table of Contents + +**Introduction** + +- Overview of the Company + +- Vision and Mission Statement + +- Executive Summary + +**Corporate Documents** + +- Articles of Incorporation + +- Bylaws + +- Shareholder Agreements + +- Board Meeting Minutes + +- Company Structure and Org Chart + +**Financial Information** + +- Historical Financial Statements + + - Income Statements + + - Balance Sheets + + - Cash Flow Statements + +- Financial Projections and Forecasts + +- Cap Table + +- Funding History and Use of Funds + +**Products and Services** + +- Detailed Descriptions of Products/Services + +- Product Development Roadmap + +- User Manuals and Technical Specifications + +- Case Studies and Use Cases + + +## **Introdution** +Swarms provides automation-as-a-service through swarms of autonomous agents that work together as a team. We enable our customers to build, deploy, and scale production-grade multi-agent applications to automate real-world tasks. + +### **Vision** +Our vision for 2024 is to provide the most reliable infrastructure for deploying autonomous agents into the real world through the Swarm Cloud, our premier cloud platform for the scalable deployment of Multi-Modal Autonomous Agents. The platform focuses on delivering maximum value to users by only taking a small fee when utilizing the agents for the hosted compute power needed to host the agents. + +### **Executive Summary** +The Swarm Corporation aims to enable AI models to automate complex workflows and operations, not just singular low-value tasks. We believe collaboration between multiple agents can overcome limitations of individual agents for reasoning, planning, etc. This will allow automation of processes in mission-critical industries like security, logistics, and manufacturing where AI adoption is currently low. + +We provide an open source framework to deploy production-grade multi-modal agents in just a few lines of code. This builds our user base, recruits talent, gets customer feedback to improve products, gains awareness and trust. + +Our business model focuses on customer satisfaction, openness, integration with other tools/platforms, and production-grade reliability. + +Go-to-market strategy is to get the framework to product-market fit with over 50K weekly recurring users, then secure high-value contracts in target industries. Long-term monetization via microtransactions, usage-based pricing, subscriptions. + +The team has thousands of hours building and optimizing autonomous agents. Leadership includes AI engineers, product experts, open source contributors and community builders. + +Key milestones: get 80K framework users in January 2024, start contracts in target verticals, introduce commercial products in 2025 with various pricing models. + +### **Resources** +- [Swarm Pre-Seed Deck](https://drive.google.com/file/d/1n8o2mjORbG96uDfx4TabjnyieludYaZz/view?usp=sharing) +- [Swarm Memo](https://docs.google.com/document/d/1hS_nv_lFjCqLfnJBoF6ULY9roTbSgSuCkvXvSUSc7Lo/edit?usp=sharing) + + + + +## **Financial Documents** +This section is dedicated entirely for corporate documents. + +- [Cap Table](https://docs.google.com/spreadsheets/d/1wuTWbfhYaY5Xp6nSQ9R0wDtSpwSS9coHxsjKd0UbIDc/edit?usp=sharing) + +- [Cashflow Prediction Sheet](https://docs.google.com/spreadsheets/d/1HQEHCIXXMHajXMl5sj8MEfcQtWfOnD7GjHtNiocpD60/edit?usp=sharing) + + +------ + +## **Product** +Swarms is an open source framework for developers in python to enable seamless, reliable, and scalable multi-agent orchestration through modularity, customization, and precision. + +- [Swarms Github Page:](https://github.com/kyegomez/swarms) +- [Swarms Memo](https://docs.google.com/document/d/1hS_nv_lFjCqLfnJBoF6ULY9roTbSgSuCkvXvSUSc7Lo/edit) +- [Swarms Project Board](https://github.com/users/kyegomez/projects/1) +- [Swarms Website](https://www.swarms.world/g) +- [Swarm Ecosystem](https://github.com/kyegomez/swarm-ecosystem) +- [Swarm Core](https://github.com/kyegomez/swarms-core) + +### Product Growth Metrics +| Name | Description | Link | +|----------------------------------|---------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| +| Total Downloads of all time | Total number of downloads for the product over its entire lifespan. | [![Downloads](https://static.pepy.tech/badge/swarms)](https://pepy.tech/project/swarms) | +| Downloads this month | Number of downloads for the product in the current month. | [![Downloads](https://static.pepy.tech/badge/swarms/month)](https://pepy.tech/project/swarms) | +| Total Downloads this week | Total number of downloads for the product in the current week. | [![Downloads](https://static.pepy.tech/badge/swarms/week)](https://pepy.tech/project/swarms) | +| Github Forks | Number of times the product's codebase has been copied for optimization, contribution, or usage. | [![GitHub forks](https://img.shields.io/github/forks/kyegomez/swarms)](https://github.com/kyegomez/swarms/network) | +| Github Stars | Number of users who have 'liked' the project. | [![GitHub stars](https://img.shields.io/github/stars/kyegomez/swarms)](https://github.com/kyegomez/swarms/stargazers) | +| Pip Module Metrics | Various project statistics such as watchers, number of contributors, date repository was created, and more. | [CLICK HERE](https://libraries.io/github/kyegomez/swarms) | +| Contribution Based Statistics | Statistics like number of contributors, lines of code changed, etc. | [HERE](https://github.com/kyegomez/swarms/graphs/contributors) | +| Github Community insights | Insights into the Github community around the product. | [Github Community insights](https://github.com/kyegomez/swarms/graphs/community) | +| Github Traffic Metrics | Metrics related to traffic, such as views and clones on Github. | [Github Traffic Metrics](https://github.com/kyegomez/swarms/graphs/traffic) | +| Issues with the framework | Current open issues for the product on Github. | [![GitHub issues](https://img.shields.io/github/issues/kyegomez/swarms)](https://github.com/kyegomez/swarms/issues) | + + diff --git a/docs_edit/corporate/demos.md b/docs_edit/corporate/demos.md new file mode 100644 index 00000000..51c820d4 --- /dev/null +++ b/docs_edit/corporate/demos.md @@ -0,0 +1,9 @@ +# Demo Ideas + +* We could also try to create an AI influencer run by a swarm, let it create a whole identity and generate images, memes, and other content for Twitter, Reddit, etc. + +* had a thought that we should have either a more general one of these or a swarm or both -- need something connecting all the calendars, events, and initiatives of all the AI communities, langchain, laion, eluther, lesswrong, gato, rob miles, chatgpt hackers, etc etc + +* Swarm of AI influencers to spread marketing + +* Delegation System to better organize teams: Start with a team of passionate humans and let them self-report their skills/strengths so the agent has a concept of who to delegate to, then feed the agent a huge task list (like the bullet list a few messages above) that it breaks down into actionable steps and "prompts" specific team members to complete tasks. Could even suggest breakout teams of a few people with complementary skills to tackle more complex tasks. There can also be a live board that updates each time a team member completes something, to encourage momentum and keep track of progress diff --git a/docs_edit/corporate/design.md b/docs_edit/corporate/design.md new file mode 100644 index 00000000..9a0e8590 --- /dev/null +++ b/docs_edit/corporate/design.md @@ -0,0 +1,152 @@ +# Design Philosophy Document for Swarms + +## Usable + +### Objective + +Our goal is to ensure that Swarms is intuitive and easy to use for all users, regardless of their level of technical expertise. This includes the developers who implement Swarms in their applications, as well as end users who interact with the implemented systems. + +### Tactics + +- Clear and Comprehensive Documentation: We will provide well-written and easily accessible documentation that guides users through using and understanding Swarms. +- User-Friendly APIs: We'll design clean and self-explanatory APIs that help developers to understand their purpose quickly. +- Prompt and Effective Support: We will ensure that support is readily available to assist users when they encounter problems or need help with Swarms. + +## Reliable + +### Objective + +Swarms should be dependable and trustworthy. Users should be able to count on Swarms to perform consistently and without error or failure. + +### Tactics + +- Robust Error Handling: We will focus on error prevention, detection, and recovery to minimize failures in Swarms. +- Comprehensive Testing: We will apply various testing methodologies such as unit testing, integration testing, and stress testing to validate the reliability of our software. +- Continuous Integration/Continuous Delivery (CI/CD): We will use CI/CD pipelines to ensure that all changes are tested and validated before they're merged into the main branch. + +## Fast + +### Objective + +Swarms should offer high performance and rapid response times. The system should be able to handle requests and tasks swiftly. + +### Tactics + +- Efficient Algorithms: We will focus on optimizing our algorithms and data structures to ensure they run as quickly as possible. +- Caching: Where appropriate, we will use caching techniques to speed up response times. +- Profiling and Performance Monitoring: We will regularly analyze the performance of Swarms to identify bottlenecks and opportunities for improvement. + +## Scalable + +### Objective + +Swarms should be able to grow in capacity and complexity without compromising performance or reliability. It should be able to handle increased workloads gracefully. + +### Tactics + +- Modular Architecture: We will design Swarms using a modular architecture that allows for easy scaling and modification. +- Load Balancing: We will distribute tasks evenly across available resources to prevent overload and maximize throughput. +- Horizontal and Vertical Scaling: We will design Swarms to be capable of both horizontal (adding more machines) and vertical (adding more power to an existing machine) scaling. + +### Philosophy + +Swarms is designed with a philosophy of simplicity and reliability. We believe that software should be a tool that empowers users, not a hurdle that they need to overcome. Therefore, our focus is on usability, reliability, speed, and scalability. We want our users to find Swarms intuitive and dependable, fast and adaptable to their needs. This philosophy guides all of our design and development decisions. + +# Swarm Architecture Design Document + +## Overview + +The goal of the Swarm Architecture is to provide a flexible and scalable system to build swarm intelligence models that can solve complex problems. This document details the proposed design to create a plug-and-play system, which makes it easy to create custom swarms, and provides pre-configured swarms with multi-modal agents. + +## Design Principles + +- **Modularity**: The system will be built in a modular fashion, allowing various components to be easily swapped or upgraded. +- **Interoperability**: Different swarm classes and components should be able to work together seamlessly. +- **Scalability**: The design should support the growth of the system by adding more components or swarms. +- **Ease of Use**: Users should be able to easily create their own swarms or use pre-configured ones with minimal configuration. + +## Design Components + +### BaseSwarm + +The BaseSwarm is an abstract base class which defines the basic structure of a swarm and the methods that need to be implemented. Any new swarm should inherit from this class and implement the required methods. + +### Swarm Classes + +Various Swarm classes can be implemented inheriting from the BaseSwarm class. Each swarm class should implement the required methods for initializing the components, worker nodes, and boss node, and running the swarm. + +Pre-configured swarm classes with multi-modal agents can be provided for ease of use. These classes come with a default configuration of tools and agents, which can be used out of the box. + +### Tools and Agents + +Tools and agents are the components that provide the actual functionality to the swarms. They can be language models, AI assistants, vector stores, or any other components that can help in problem solving. + +To make the system plug-and-play, a standard interface should be defined for these components. Any new tool or agent should implement this interface, so that it can be easily plugged into the system. + +## Usage + +Users can either use pre-configured swarms or create their own custom swarms. + +To use a pre-configured swarm, they can simply instantiate the corresponding swarm class and call the run method with the required objective. + +To create a custom swarm, they need to: + +1. Define a new swarm class inheriting from BaseSwarm. +2. Implement the required methods for the new swarm class. +3. Instantiate the swarm class and call the run method. + +### Example + +```python +# Using pre-configured swarm +swarm = PreConfiguredSwarm(openai_api_key) +swarm.run_swarms(objective) + +# Creating custom swarm +class CustomSwarm(BaseSwarm): + # Implement required methods + +swarm = CustomSwarm(openai_api_key) +swarm.run_swarms(objective) +``` + +## Conclusion + +This Swarm Architecture design provides a scalable and flexible system for building swarm intelligence models. The plug-and-play design allows users to easily use pre-configured swarms or create their own custom swarms. + + +# Swarming Architectures +Sure, below are five different swarm architectures with their base requirements and an abstract class that processes these components: + +1. **Hierarchical Swarm**: This architecture is characterized by a boss/worker relationship. The boss node takes high-level decisions and delegates tasks to the worker nodes. The worker nodes perform tasks and report back to the boss node. + - Requirements: Boss node (can be a large language model), worker nodes (can be smaller language models), and a task queue for task management. + +2. **Homogeneous Swarm**: In this architecture, all nodes in the swarm are identical and contribute equally to problem-solving. Each node has the same capabilities. + - Requirements: Homogeneous nodes (can be language models of the same size), communication protocol for nodes to share information. + +3. **Heterogeneous Swarm**: This architecture contains different types of nodes, each with its specific capabilities. This diversity can lead to more robust problem-solving. + - Requirements: Different types of nodes (can be different types and sizes of language models), a communication protocol, and a mechanism to delegate tasks based on node capabilities. + +4. **Competitive Swarm**: In this architecture, nodes compete with each other to find the best solution. The system may use a selection process to choose the best solutions. + - Requirements: Nodes (can be language models), a scoring mechanism to evaluate node performance, a selection mechanism. + +5. **Cooperative Swarm**: In this architecture, nodes work together and share information to find solutions. The focus is on cooperation rather than competition. + - Requirements: Nodes (can be language models), a communication protocol, a consensus mechanism to agree on solutions. + + +6. **Grid-based Swarm**: This architecture positions agents on a grid, where they can only interact with their neighbors. This is useful for simulations, especially in fields like ecology or epidemiology. + - Requirements: Agents (can be language models), a grid structure, and a neighborhood definition (i.e., how to identify neighboring agents). + +7. **Particle Swarm Optimization (PSO) Swarm**: In this architecture, each agent represents a potential solution to an optimization problem. Agents move in the solution space based on their own and their neighbors' past performance. PSO is especially useful for continuous numerical optimization problems. + - Requirements: Agents (each representing a solution), a definition of the solution space, an evaluation function to rate the solutions, a mechanism to adjust agent positions based on performance. + +8. **Ant Colony Optimization (ACO) Swarm**: Inspired by ant behavior, this architecture has agents leave a pheromone trail that other agents follow, reinforcing the best paths. It's useful for problems like the traveling salesperson problem. + - Requirements: Agents (can be language models), a representation of the problem space, a pheromone updating mechanism. + +9. **Genetic Algorithm (GA) Swarm**: In this architecture, agents represent potential solutions to a problem. They can 'breed' to create new solutions and can undergo 'mutations'. GA swarms are good for search and optimization problems. + - Requirements: Agents (each representing a potential solution), a fitness function to evaluate solutions, a crossover mechanism to breed solutions, and a mutation mechanism. + +10. **Stigmergy-based Swarm**: In this architecture, agents communicate indirectly by modifying the environment, and other agents react to such modifications. It's a decentralized method of coordinating tasks. + - Requirements: Agents (can be language models), an environment that agents can modify, a mechanism for agents to perceive environment changes. + +These architectures all have unique features and requirements, but they share the need for agents (often implemented as language models) and a mechanism for agents to communicate or interact, whether it's directly through messages, indirectly through the environment, or implicitly through a shared solution space. Some also require specific data structures, like a grid or problem space, and specific algorithms, like for evaluating solutions or updating agent positions. diff --git a/docs_edit/corporate/distribution.md b/docs_edit/corporate/distribution.md new file mode 100644 index 00000000..6c4df6ef --- /dev/null +++ b/docs_edit/corporate/distribution.md @@ -0,0 +1,469 @@ + + +# Swarms Monetization Strategy + +This strategy includes a variety of business models, potential revenue streams, cashflow structures, and customer identification methods. Let's explore these further. + +## Business Models + +1. **Platform as a Service (PaaS):** Provide the Swarms AI platform on a subscription basis, charged monthly or annually. This could be tiered based on usage and access to premium features. + +2. **API Usage-based Pricing:** Charge customers based on their usage of the Swarms API. The more requests made, the higher the fee. + +3. **Managed Services:** Offer complete end-to-end solutions where you manage the entire AI infrastructure for the clients. This could be on a contract basis with a recurring fee. + +4. **Training and Certification:** Provide Swarms AI training and certification programs for interested developers and businesses. These could be monetized as separate courses or subscription-based access. + +5. **Partnerships:** Collaborate with large enterprises and offer them dedicated Swarm AI services. These could be performance-based contracts, ensuring a mutually beneficial relationship. + +6. **Data as a Service (DaaS):** Leverage the data generated by Swarms for insights and analytics, providing valuable business intelligence to clients. + +## Potential Revenue Streams + +1. **Subscription Fees:** This would be the main revenue stream from providing the Swarms platform as a service. + +2. **Usage Fees:** Additional revenue can come from usage fees for businesses that have high demand for Swarms API. + +3. **Contract Fees:** From offering managed services and bespoke solutions to businesses. + +4. **Training Fees:** Revenue from providing training and certification programs to developers and businesses. + +5. **Partnership Contracts:** Large-scale projects with enterprises, involving dedicated Swarm AI services, could provide substantial income. + +6. **Data Insights:** Revenue from selling valuable business intelligence derived from Swarm's aggregated and anonymized data. + +## Potential Customers + +1. **Businesses Across Sectors:** Any business seeking to leverage AI for automation, efficiency, and data insights could be a potential customer. This includes sectors like finance, eCommerce, logistics, healthcare, and more. + +2. **Developers:** Both freelance and those working in organizations could use Swarms to enhance their projects and services. + +3. **Enterprises:** Large enterprises looking to automate and optimize their operations could greatly benefit from Swarms. + +4. **Educational Institutions:** Universities and research institutions could leverage Swarms for research and teaching purposes. + +## Roadmap + +1. **Landing Page Creation:** Develop a dedicated product page on apac.ai for Swarms. + +2. **Hosted Swarms API:** Launch a cloud-based Swarms API service. It should be highly reliable, with robust documentation to attract daily users. + +3. **Consumer and Enterprise Subscription Service:** Launch a comprehensive subscription service on The Domain. This would provide users with access to a wide array of APIs and data streams. + +4. **Dedicated Capacity Deals:** Partner with large enterprises to offer them dedicated Swarm AI solutions for automating their operations. + +5. **Enterprise Partnerships:** Develop partnerships with large enterprises for extensive contract-based projects. + +6. **Integration with Collaboration Platforms:** Develop Swarms bots for platforms like Discord and Slack, charging users a subscription fee for access. + +7. **Personal Data Instances:** Offer users dedicated instances of all their data that the Swarm can query as needed. + +8. **Browser Extension:** Develop a browser extension that integrates with the Swarms platform, offering users a more seamless experience. + +Remember, customer satisfaction and a value-centric approach are at the core of any successful monetization strategy. It's essential to continuously iterate and improve the product based on customer feedback and evolving market needs. + +---- + +# Other ideas + +1. **Platform as a Service (PaaS):** Create a cloud-based platform that allows users to build, run, and manage applications without the complexity of maintaining the infrastructure. You could charge users a subscription fee for access to the platform and provide different pricing tiers based on usage levels. This could be an attractive solution for businesses that do not have the capacity to build or maintain their own swarm intelligence solutions. + +2. **Professional Services:** Offer consultancy and implementation services to businesses looking to utilize the Swarm technology. This could include assisting with integration into existing systems, offering custom development services, or helping customers to build specific solutions using the framework. + +3. **Education and Training:** Create a certification program for developers or companies looking to become proficient with the Swarms framework. This could be sold as standalone courses, or bundled with other services. + +4. **Managed Services:** Some companies may prefer to outsource the management of their Swarm-based systems. A managed services solution could take care of all the technical aspects, from hosting the solution to ensuring it runs smoothly, allowing the customer to focus on their core business. + +5. **Data Analysis and Insights:** Swarm intelligence can generate valuable data and insights. By anonymizing and aggregating this data, you could provide industry reports, trend analysis, and other valuable insights to businesses. + +As for the type of platform, Swarms can be offered as a cloud-based solution given its scalability and flexibility. This would also allow you to apply a SaaS/PaaS type monetization model, which provides recurring revenue. + +Potential customers could range from small to large enterprises in various sectors such as logistics, eCommerce, finance, and technology, who are interested in leveraging artificial intelligence and machine learning for complex problem solving, optimization, and decision-making. + +**Product Brief Monetization Strategy:** + +Product Name: Swarms.AI Platform + +Product Description: A cloud-based AI and ML platform harnessing the power of swarm intelligence. + +1. **Platform as a Service (PaaS):** Offer tiered subscription plans (Basic, Premium, Enterprise) to accommodate different usage levels and business sizes. + +2. **Professional Services:** Offer consultancy and custom development services to tailor the Swarms solution to the specific needs of the business. + +3. **Education and Training:** Launch an online Swarms.AI Academy with courses and certifications for developers and businesses. + +4. **Managed Services:** Provide a premium, fully-managed service offering that includes hosting, maintenance, and 24/7 support. + +5. **Data Analysis and Insights:** Offer industry reports and customized insights generated from aggregated and anonymized Swarm data. + +Potential Customers: Enterprises in sectors such as logistics, eCommerce, finance, and technology. This can be sold globally, provided there's an internet connection. + +Marketing Channels: Online marketing (SEO, Content Marketing, Social Media), Partnerships with tech companies, Direct Sales to Enterprises. + +This strategy is designed to provide multiple revenue streams, while ensuring the Swarms.AI platform is accessible and useful to a range of potential customers. + +1. **AI Solution as a Service:** By offering the Swarms framework as a service, businesses can access and utilize the power of multiple LLM agents without the need to maintain the infrastructure themselves. Subscription can be tiered based on usage and additional features. + +2. **Integration and Custom Development:** Offer integration services to businesses wanting to incorporate the Swarms framework into their existing systems. Also, you could provide custom development for businesses with specific needs not met by the standard framework. + +3. **Training and Certification:** Develop an educational platform offering courses, webinars, and certifications on using the Swarms framework. This can serve both developers seeking to broaden their skills and businesses aiming to train their in-house teams. + +4. **Managed Swarms Solutions:** For businesses that prefer to outsource their AI needs, provide a complete solution which includes the development, maintenance, and continuous improvement of swarms-based applications. + +5. **Data Analytics Services:** Leveraging the aggregated insights from the AI swarms, you could offer data analytics services. Businesses can use these insights to make informed decisions and predictions. + +**Type of Platform:** + +Cloud-based platform or Software as a Service (SaaS) will be a suitable model. It offers accessibility, scalability, and ease of updates. + +**Target Customers:** + +The technology can be beneficial for businesses across sectors like eCommerce, technology, logistics, finance, healthcare, and education, among others. + +**Product Brief Monetization Strategy:** + +Product Name: Swarms.AI + +1. **AI Solution as a Service:** Offer different tiered subscriptions (Standard, Premium, and Enterprise) each with varying levels of usage and features. + +2. **Integration and Custom Development:** Offer custom development and integration services, priced based on the scope and complexity of the project. + +3. **Training and Certification:** Launch the Swarms.AI Academy with courses and certifications, available for a fee. + +4. **Managed Swarms Solutions:** Offer fully managed solutions tailored to business needs, priced based on scope and service level agreements. + +5. **Data Analytics Services:** Provide insightful reports and data analyses, which can be purchased on a one-off basis or through a subscription. + +By offering a variety of services and payment models, Swarms.AI will be able to cater to a diverse range of business needs, from small start-ups to large enterprises. Marketing channels would include digital marketing, partnerships with technology companies, presence in tech events, and direct sales to targeted industries. + + + +# Roadmap + +* Create a landing page for swarms apac.ai/product/swarms + +* Create Hosted Swarms API for anybody to just use without need for mega gpu infra, charge usage based pricing. Prerequisites for success => Swarms has to be extremely reliable + we need world class documentation and many daily users => how do we get many daily users? We provide a seamless and fluid experience, how do we create a seamless and fluid experience? We write good code that is modular, provides feedback to the user in times of distress, and ultimately accomplishes the user's tasks. + +* Hosted consumer and enterprise subscription as a service on The Domain, where users can interact with 1000s of APIs and ingest 1000s of different data streams. + +* Hosted dedicated capacity deals with mega enterprises on automating many operations with Swarms for monthly subscription 300,000+$ + +* Partnerships with enterprises, massive contracts with performance based fee + +* Have discord bot and or slack bot with users personal data, charge subscription + browser extension + +* each user gets a dedicated ocean instance of all their data so the swarm can query it as needed. + + + + +--- +--- + + +# Swarms Monetization Strategy: A Revolutionary AI-powered Future + +Swarms is a powerful AI platform leveraging the transformative potential of Swarm Intelligence. Our ambition is to monetize this groundbreaking technology in ways that generate significant cashflow while providing extraordinary value to our customers. + +Here we outline our strategic monetization pathways and provide a roadmap that plots our course to future success. + +--- + +## I. Business Models + +1. **Platform as a Service (PaaS):** We provide the Swarms platform as a service, billed on a monthly or annual basis. Subscriptions can range from $50 for basic access, to $500+ for premium features and extensive usage. + +2. **API Usage-based Pricing:** Customers are billed according to their use of the Swarms API. Starting at $0.01 per request, this creates a cashflow model that rewards extensive platform usage. + +3. **Managed Services:** We offer end-to-end solutions, managing clients' entire AI infrastructure. Contract fees start from $100,000 per month, offering both a sustainable cashflow and considerable savings for our clients. + +4. **Training and Certification:** A Swarms AI training and certification program is available for developers and businesses. Course costs can range from $200 to $2,000, depending on course complexity and duration. + +5. **Partnerships:** We forge collaborations with large enterprises, offering dedicated Swarm AI services. These performance-based contracts start from $1,000,000, creating a potentially lucrative cashflow stream. + +6. **Data as a Service (DaaS):** Swarms generated data are mined for insights and analytics, with business intelligence reports offered from $500 each. + +--- + +## II. Potential Revenue Streams + +1. **Subscription Fees:** From $50 to $500+ per month for platform access. + +2. **Usage Fees:** From $0.01 per API request, generating income from high platform usage. + +3. **Contract Fees:** Starting from $100,000 per month for managed services. + +4. **Training Fees:** From $200 to $2,000 for individual courses or subscription access. + +5. **Partnership Contracts:** Contracts starting from $100,000, offering major income potential. + +6. **Data Insights:** Business intelligence reports starting from $500. + +--- + +## III. Potential Customers + +1. **Businesses Across Sectors:** Our offerings cater to businesses across finance, eCommerce, logistics, healthcare, and more. + +2. **Developers:** Both freelancers and organization-based developers can leverage Swarms for their projects. + +3. **Enterprises:** Swarms offers large enterprises solutions for optimizing operations. + +4. **Educational Institutions:** Universities and research institutions can use Swarms for research and teaching. + +--- + +## IV. Roadmap + +1. **Landing Page Creation:** Develop a dedicated Swarms product page on apac.ai. + +2. **Hosted Swarms API:** Launch a reliable, well-documented cloud-based Swarms API service. + +3. **Consumer and Enterprise Subscription Service:** Launch an extensive subscription service on The Domain, providing wide-ranging access to APIs and data streams. + +4. **Dedicated Capacity Deals:** Offer large enterprises dedicated Swarm AI solutions, starting from $300,000 monthly subscription. + +5. **Enterprise Partnerships:** Develop performance-based contracts with large enterprises. + +6. **Integration with Collaboration Platforms:** Develop Swarms bots for platforms like Discord and Slack, charging a subscription fee for access. + +7. **Personal Data Instances:** Offer users dedicated data instances that the Swarm can query as needed. + +8. **Browser Extension:** Develop a browser extension that integrates with the Swarms platform for seamless user experience. + +--- + +Our North Star remains customer satisfaction and value provision. +As we embark on this journey, we continuously refine our product based on customer feedback and evolving market needs, ensuring we lead in the age of AI-driven solutions. + +## **Platform Distribution Strategy for Swarms** + +*Note: This strategy aims to diversify the presence of 'Swarms' across various platforms and mediums while focusing on monetization and value creation for its users. + +--- + +### **1. Framework:** + +#### **Objective:** +To offer Swarms as an integrated solution within popular frameworks to ensure that developers and businesses can seamlessly incorporate its functionalities. + +#### **Strategy:** + +* **Language/Framework Integration:** + * Target popular frameworks like Django, Flask for Python, Express.js for Node, etc. + * Create SDKs or plugins for easy integration. + +* **Monetization:** + * Freemium Model: Offer basic integration for free, and charge for additional features or advanced integrations. + * Licensing: Allow businesses to purchase licenses for enterprise-level integrations. + +* **Promotion:** + * Engage in partnerships with popular online coding platforms like Udemy, Coursera, etc., offering courses and tutorials on integrating Swarms. + * Host webinars and write technical blogs to promote the integration benefits. + +--- + +### **2. Paid API:** + +#### **Objective:** +To provide a scalable solution for developers and businesses that want direct access to Swarms' functionalities without integrating the entire framework. + +#### **Strategy:** + +* **API Endpoints:** + * Offer various endpoints catering to different functionalities. + * Maintain robust documentation to ensure ease of use. + +* **Monetization:** + * Usage-based Pricing: Charge based on the number of API calls. + * Subscription Tiers: Provide tiered packages based on usage limits and advanced features. + +* **Promotion:** + * List on API marketplaces like RapidAPI. + * Engage in SEO to make the API documentation discoverable. + +--- + +### **3. Domain Hosted:** + +#### **Objective:** +To provide a centralized web platform where users can directly access and engage with Swarms' offerings. + +#### **Strategy:** + +* **User-Friendly Interface:** + * Ensure a seamless user experience with intuitive design. + * Incorporate features like real-time chat support, tutorials, and an FAQ section. + +* **Monetization:** + * Subscription Model: Offer monthly/annual subscriptions for premium features. + * Affiliate Marketing: Partner with related tech products/services and earn through referrals. + +* **Promotion:** + * Invest in PPC advertising on platforms like Google Ads. + * Engage in content marketing, targeting keywords related to Swarms' offerings. + +--- + +### **4. Build Your Own (No-Code Platform):** + +#### **Objective:** +To cater to the non-developer audience, allowing them to leverage Swarms' features without any coding expertise. + +#### **Strategy:** + +* **Drag-and-Drop Interface:** + * Offer customizable templates. + * Ensure integration with popular platforms and apps. + +* **Monetization:** + * Freemium Model: Offer basic features for free, and charge for advanced functionalities. + * Marketplace for Plugins: Allow third-party developers to sell their plugins/extensions on the platform. + +* **Promotion:** + * Partner with no-code communities and influencers. + * Offer promotions and discounts to early adopters. + +--- + +### **5. Marketplace for the No-Code Platform:** + +#### **Objective:** +To create an ecosystem where third-party developers can contribute, and users can enhance their Swarms experience. + +#### **Strategy:** + +* **Open API for Development:** + * Offer robust documentation and developer support. + * Ensure a strict quality check for marketplace additions. + +* **Monetization:** + * Revenue Sharing: Take a percentage cut from third-party sales. + * Featured Listings: Charge developers for premium listings. + +* **Promotion:** + * Host hackathons and competitions to boost developer engagement. + * Promote top plugins/extensions through email marketing and on the main platform. + +--- + +### **Future Outlook & Expansion:** + +* **Hosted Dedicated Capacity:** Hosted dedicated capacity deals for enterprises starting at 399,999$ +* **Decentralized Free Peer to peer endpoint hosted on The Grid:** Hosted endpoint by the people for the people. +* **Browser Extenision:** Athena browser extension for deep browser automation, subscription, usage, + + +* **Mobile Application:** Develop a mobile app version for Swarms to tap into the vast mobile user base. +* **Global Expansion:** Localize the platform for non-English speaking regions to tap into global markets. +* **Continuous Learning:** Regularly collect user feedback and iterate on the product features. + +--- + + + +### **50 Creative Distribution Platforms for Swarms** + +1. **E-commerce Integrations:** Platforms like Shopify, WooCommerce, where Swarms can add value to sellers. + +2. **Web Browser Extensions:** Chrome, Firefox, and Edge extensions that bring Swarms features directly to users. + +3. **Podcasting Platforms:** Swarms-themed content on platforms like Spotify, Apple Podcasts to reach aural learners. + +4. **Virtual Reality (VR) Platforms:** Integration with VR experiences on Oculus or Viveport. + +5. **Gaming Platforms:** Tools or plugins for game developers on Steam, Epic Games. + +6. **Decentralized Platforms:** Using blockchain, create decentralized apps (DApps) versions of Swarms. + +7. **Chat Applications:** Integrate with popular messaging platforms like WhatsApp, Telegram, Slack. + +8. **AI Assistants:** Integration with Siri, Alexa, Google Assistant to provide Swarms functionalities via voice commands. + +9. **Freelancing Websites:** Offer tools or services for freelancers on platforms like Upwork, Fiverr. + +10. **Online Forums:** Platforms like Reddit, Quora, where users can discuss or access Swarms. + +11. **Educational Platforms:** Sites like Khan Academy, Udacity where Swarms can enhance learning experiences. + +12. **Digital Art Platforms:** Integrate with platforms like DeviantArt, Behance. + +13. **Open-source Repositories:** Hosting Swarms on GitHub, GitLab, Bitbucket with open-source plugins. + +14. **Augmented Reality (AR) Apps:** Create AR experiences powered by Swarms. + +15. **Smart Home Devices:** Integrate Swarms' functionalities into smart home devices. + +16. **Newsletters:** Platforms like Substack, where Swarms insights can be shared. + +17. **Interactive Kiosks:** In malls, airports, and other public places. + +18. **IoT Devices:** Incorporate Swarms in devices like smart fridges, smartwatches. + +19. **Collaboration Tools:** Platforms like Trello, Notion, offering Swarms-enhanced productivity. + +20. **Dating Apps:** An AI-enhanced matching algorithm powered by Swarms. + +21. **Music Platforms:** Integrate with Spotify, SoundCloud for music-related AI functionalities. + +22. **Recipe Websites:** Platforms like AllRecipes, Tasty with AI-recommended recipes. + +23. **Travel & Hospitality:** Integrate with platforms like Airbnb, Tripadvisor for AI-based recommendations. + +24. **Language Learning Apps:** Duolingo, Rosetta Stone integrations. + +25. **Virtual Events Platforms:** Websites like Hopin, Zoom where Swarms can enhance the virtual event experience. + +26. **Social Media Management:** Tools like Buffer, Hootsuite with AI insights by Swarms. + +27. **Fitness Apps:** Platforms like MyFitnessPal, Strava with AI fitness insights. + +28. **Mental Health Apps:** Integration into apps like Calm, Headspace for AI-driven wellness. + +29. **E-books Platforms:** Amazon Kindle, Audible with AI-enhanced reading experiences. + +30. **Sports Analysis Tools:** Websites like ESPN, Sky Sports where Swarms can provide insights. + +31. **Financial Tools:** Integration into platforms like Mint, Robinhood for AI-driven financial advice. + +32. **Public Libraries:** Digital platforms of public libraries for enhanced reading experiences. + +33. **3D Printing Platforms:** Websites like Thingiverse, Shapeways with AI customization. + +34. **Meme Platforms:** Websites like Memedroid, 9GAG where Swarms can suggest memes. + +35. **Astronomy Apps:** Platforms like Star Walk, NASA's Eyes with AI-driven space insights. + +36. **Weather Apps:** Integration into Weather.com, AccuWeather for predictive analysis. + +37. **Sustainability Platforms:** Websites like Ecosia, GoodGuide with AI-driven eco-tips. + +38. **Fashion Apps:** Platforms like ASOS, Zara with AI-based style recommendations. + +39. **Pet Care Apps:** Integration into PetSmart, Chewy for AI-driven pet care tips. + +40. **Real Estate Platforms:** Websites like Zillow, Realtor with AI-enhanced property insights. + +41. **DIY Platforms:** Websites like Instructables, DIY.org with AI project suggestions. + +42. **Genealogy Platforms:** Ancestry, MyHeritage with AI-driven family tree insights. + +43. **Car Rental & Sale Platforms:** Integration into AutoTrader, Turo for AI-driven vehicle suggestions. + +44. **Wedding Planning Websites:** Platforms like Zola, The Knot with AI-driven planning. + +45. **Craft Platforms:** Websites like Etsy, Craftsy with AI-driven craft suggestions. + +46. **Gift Recommendation Platforms:** AI-driven gift suggestions for websites like Gifts.com. + +47. **Study & Revision Platforms:** Websites like Chegg, Quizlet with AI-driven study guides. + +48. **Local Business Directories:** Yelp, Yellow Pages with AI-enhanced reviews. + +49. **Networking Platforms:** LinkedIn, Meetup with AI-driven connection suggestions. + +50. **Lifestyle Magazines' Digital Platforms:** Websites like Vogue, GQ with AI-curated fashion and lifestyle insights. + +--- + +*Endnote: Leveraging these diverse platforms ensures that Swarms becomes an integral part of multiple ecosystems, enhancing its visibility and user engagement.* \ No newline at end of file diff --git a/docs_edit/corporate/failures.md b/docs_edit/corporate/failures.md new file mode 100644 index 00000000..512a6cb8 --- /dev/null +++ b/docs_edit/corporate/failures.md @@ -0,0 +1,104 @@ +# Failure Root Cause Analysis for Langchain + +## 1. Introduction + +Langchain is an open-source software that has gained massive popularity in the artificial intelligence ecosystem, serving as a tool for connecting different language models, especially GPT based models. However, despite its popularity and substantial investment, Langchain has shown several weaknesses that hinder its use in various projects, especially in complex and large-scale implementations. This document provides an analysis of the identified issues and proposes potential mitigation strategies. + +## 2. Analysis of Weaknesses + +### 2.1 Tool Lock-in + +Langchain tends to enforce tool lock-in, which could prove detrimental for developers. Its design heavily relies on specific workflows and architectures, which greatly limits flexibility. Developers may find themselves restricted to certain methodologies, impeding their freedom to implement custom solutions or integrate alternative tools. + +#### Mitigation + +An ideal AI framework should not be restrictive but should instead offer flexibility for users to integrate any agent on any architecture. Adopting an open architecture that allows for seamless interaction between various agents and workflows can address this issue. + +### 2.2 Outdated Workflows + +Langchain's current workflows and prompt engineering, mainly based on InstructGPT, are out of date, especially compared to newer models like ChatGPT/GPT-4. + +#### Mitigation + +Keeping up with the latest AI models and workflows is crucial. The framework should have a mechanism for regular updates and seamless integration of up-to-date models and workflows. + +### 2.3 Debugging Difficulties + +Debugging in Langchain is reportedly very challenging, even with verbose output enabled, making it hard to determine what is happening under the hood. + +#### Mitigation + +The introduction of a robust debugging and logging system would help users understand the internals of the models, thus enabling them to pinpoint and rectify issues more effectively. + +### 2.4 Limited Customization + +Langchain makes it extremely hard to deviate from documented workflows. This becomes a challenge when developers need custom workflows for their specific use-cases. + +#### Mitigation + +An ideal framework should support custom workflows and allow developers to hack and adjust the framework according to their needs. + +### 2.5 Documentation + +Langchain's documentation is reportedly missing relevant details, making it difficult for users to understand the differences between various agent types, among other things. + +#### Mitigation + +Providing detailed and comprehensive documentation, including examples, FAQs, and best practices, is crucial. This will help users understand the intricacies of the framework, making it easier for them to implement it in their projects. + +### 2.6 Negative Influence on AI Ecosystem + +The extreme popularity of Langchain seems to be warping the AI ecosystem to the point of causing harm, with other AI entities shifting their operations to align with Langchain's 'magic AI' approach. + +#### Mitigation + +It's essential for any widely adopted framework to promote healthy practices in the broader ecosystem. One approach could be promoting open dialogue, inviting criticism, and being open to change based on feedback. + +## 3. Conclusion + +While Langchain has made significant contributions to the AI landscape, these challenges hinder its potential. Addressing these issues will not only improve Langchain but also foster a healthier AI ecosystem. It's important to note that criticism, when approached constructively, can be a powerful tool for growth and innovation. + + +# List of weaknesses in gLangchain and Potential Mitigations + +1. **Tool Lock-in**: Langchain encourages the use of specific tools, creating a lock-in problem with minimal benefits for developers. + + *Mitigation Strategy*: Langchain should consider designing the architecture to be more versatile and allow for the inclusion of a variety of tools. An open architecture will provide developers with more freedom and customization options. + +2. **Outdated Workflow**: The current workflow and prompt engineering of Langchain rely on outdated models like InstructGPT, which fall short compared to newer alternatives such as ChatGPT/GPT-4. + + *Mitigation Strategy*: Regular updates and adaptation of more recent models should be integrated into the Langchain framework. + +3. **Debugging Difficulty**: Debugging a Langchain error is a complicated task, even with verbose=True, leading to a discouraging developer experience. + + *Mitigation Strategy*: Develop a comprehensive debugging tool or improve current debugging processes for clearer and more accessible error detection and resolution. + +4. **Lack of Customizability**: Customizing workflows that are not documented in Langchain is quite challenging. + + *Mitigation Strategy*: Improve documentation and provide guides on how to customize workflows to enhance developer flexibility. + +5. **Poor Documentation**: Langchain's documentation misses key details that developers have to manually search for in the codebase. + + *Mitigation Strategy*: Enhance and improve the documentation of Langchain to provide clarity for developers and make navigation easier. + +6. **Harmful Ecosystem Influence**: Langchain's extreme popularity is influencing the AI ecosystem towards the workflows, potentially harming development and code clarity. + + *Mitigation Strategy*: Encourage diverse and balanced adoption of AI tools in the ecosystem. + +7. **Suboptimal Performances**: Langchain's performance is sometimes underwhelming, and there are no clear benefits in terms of performance or abstraction. + + *Mitigation Strategy*: Enhance the performance optimization of Langchain. Benchmarking against other tools can also provide performance improvement insights. + +8. **Rigid General Interface**: Langchain tries to do too many things, resulting in a rigid interface not suitable for practical use, especially in production. + + *Mitigation Strategy*: Focus on core features and allow greater flexibility in the interface. Adopting a modular approach where developers can pick and choose the features they want could also be helpful. + +9. **Leaky Abstraction Problem**: Langchain’s full-on framework approach has created a leaky abstraction problem leading to a disappointing developer experience. + + *Mitigation Strategy*: Adopt a more balanced approach between a library and a framework. Provide a solid core feature set with the possibility to extend it according to the developers' needs. + +10. **Excessive Focus on Third-party Services**: Langchain overly focuses on supporting every single third-party service at the expense of customizability and fine-tuning for actual applications. + + *Mitigation Strategy*: Prioritize fine-tuning and customizability for developers, limiting the focus on third-party services unless they provide substantial value. + +Remember, any mitigation strategy will need to be tailored to Langchain's particular circumstances and developer feedback. It's also important to consider potential trade-offs and unintended consequences when implementing these strategies. \ No newline at end of file diff --git a/docs_edit/corporate/faq.md b/docs_edit/corporate/faq.md new file mode 100644 index 00000000..b2bad0d4 --- /dev/null +++ b/docs_edit/corporate/faq.md @@ -0,0 +1,110 @@ +### FAQ on Swarm Intelligence and Multi-Agent Systems + +#### What is an agent in the context of AI and swarm intelligence? + +In artificial intelligence (AI), an agent refers to an LLM with some objective to accomplish. + +In swarm intelligence, each agent interacts with other agents and possibly the environment to achieve complex collective behaviors or solve problems more efficiently than individual agents could on their own. + + +#### What do you need Swarms at all? +Individual agents are limited by a vast array of issues such as context window loss, single task execution, hallucination, and no collaboration. + + +#### How does a swarm work? + +A swarm works through the principles of decentralized control, local interactions, and simple rules followed by each agent. Unlike centralized systems, where a single entity dictates the behavior of all components, in a swarm, each agent makes its own decisions based on local information and interactions with nearby agents. These local interactions lead to the emergence of complex, organized behaviors or solutions at the collective level, enabling the swarm to tackle tasks efficiently. + +#### Why do you need more agents in a swarm? + +More agents in a swarm can enhance its problem-solving capabilities, resilience, and efficiency. With more agents: + +- **Diversity and Specialization**: The swarm can leverage a wider range of skills, knowledge, and perspectives, allowing for more creative and effective solutions to complex problems. +- **Scalability**: Adding more agents can increase the swarm's capacity to handle larger tasks or multiple tasks simultaneously. +- **Robustness**: A larger number of agents enhances the system's redundancy and fault tolerance, as the failure of a few agents has a minimal impact on the overall performance of the swarm. + +#### Isn't it more expensive to use more agents? + +While deploying more agents can initially increase costs, especially in terms of computational resources, hosting, and potentially API usage, there are several factors and strategies that can mitigate these expenses: + +- **Efficiency at Scale**: Larger swarms can often solve problems more quickly or effectively, reducing the overall computational time and resources required. +- **Optimization and Caching**: Implementing optimizations and caching strategies can reduce redundant computations, lowering the workload on individual agents and the overall system. +- **Dynamic Scaling**: Utilizing cloud services that offer dynamic scaling can ensure you only pay for the resources you need when you need them, optimizing cost-efficiency. + +#### Can swarms make decisions better than individual agents? + +Yes, swarms can make better decisions than individual agents for several reasons: + +- **Collective Intelligence**: Swarms combine the knowledge and insights of multiple agents, leading to more informed and well-rounded decision-making processes. +- **Error Correction**: The collaborative nature of swarms allows for error checking and correction among agents, reducing the likelihood of mistakes. +- **Adaptability**: Swarms are highly adaptable to changing environments or requirements, as the collective can quickly reorganize or shift strategies based on new information. + +#### How do agents in a swarm communicate? + +Communication in a swarm can vary based on the design and purpose of the system but generally involves either direct or indirect interactions: + +- **Direct Communication**: Agents exchange information directly through messaging, signals, or other communication protocols designed for the system. +- **Indirect Communication**: Agents influence each other through the environment, a method known as stigmergy. Actions by one agent alter the environment, which in turn influences the behavior of other agents. + +#### Are swarms only useful in computational tasks? + +While swarms are often associated with computational tasks, their applications extend far beyond. Swarms can be utilized in: + +- **Robotics**: Coordinating multiple robots for tasks like search and rescue, exploration, or surveillance. +- **Environmental Monitoring**: Using sensor networks to monitor pollution, wildlife, or climate conditions. +- **Social Sciences**: Modeling social behaviors or economic systems to understand complex societal dynamics. +- **Healthcare**: Coordinating care strategies in hospital settings or managing pandemic responses through distributed data analysis. + +#### How do you ensure the security of a swarm system? + +Security in swarm systems involves: + +- **Encryption**: Ensuring all communications between agents are encrypted to prevent unauthorized access or manipulation. +- **Authentication**: Implementing strict authentication mechanisms to verify the identity of each agent in the swarm. +- **Resilience to Attacks**: Designing the swarm to continue functioning effectively even if some agents are compromised or attacked, utilizing redundancy and fault tolerance strategies. + +#### How do individual agents within a swarm share insights without direct learning mechanisms like reinforcement learning? + +In the context of pre-trained Large Language Models (LLMs) that operate within a swarm, sharing insights typically involves explicit communication and data exchange protocols rather than direct learning mechanisms like reinforcement learning. Here's how it can work: + +- **Shared Databases and Knowledge Bases**: Agents can write to and read from a shared database or knowledge base where insights, generated content, and relevant data are stored. This allows agents to benefit from the collective experience of the swarm by accessing information that other agents have contributed. + +- **APIs for Information Exchange**: Custom APIs can facilitate the exchange of information between agents. Through these APIs, agents can request specific information or insights from others within the swarm, effectively sharing knowledge without direct learning. + +#### How do you balance the autonomy of individual LLMs with the need for coherent collective behavior in a swarm? + +Balancing autonomy with collective coherence in a swarm of LLMs involves: + +- **Central Coordination Mechanism**: Implementing a lightweight central coordination mechanism that can assign tasks, distribute information, and collect outputs from individual LLMs. This ensures that while each LLM operates autonomously, their actions are aligned with the swarm's overall objectives. + +- **Standardized Communication Protocols**: Developing standardized protocols for how LLMs communicate and share information ensures that even though each agent works autonomously, the information exchange remains coherent and aligned with the collective goals. + +#### How do LLM swarms adapt to changing environments or tasks without machine learning techniques? + +Adaptation in LLM swarms, without relying on machine learning techniques for dynamic learning, can be achieved through: + +- **Dynamic Task Allocation**: A central system or distributed algorithm can dynamically allocate tasks to different LLMs based on the changing environment or requirements. This ensures that the most suitable LLMs are addressing tasks for which they are best suited as conditions change. + +- **Pre-trained Versatility**: Utilizing a diverse set of pre-trained LLMs with different specialties or training data allows the swarm to select the most appropriate agent for a task as the requirements evolve. + +- **In Context Learning**: In context learning is another mechanism that can be employed within LLM swarms to adapt to changing environments or tasks. This approach involves leveraging the collective knowledge and experiences of the swarm to facilitate learning and improve performance. Here's how it can work: + + +#### Can LLM swarms operate in physical environments, or are they limited to digital spaces? + +LLM swarms primarily operate in digital spaces, given their nature as software entities. However, they can interact with physical environments indirectly through interfaces with sensors, actuaries, or other devices connected to the Internet of Things (IoT). For example, LLMs can process data from physical sensors and control devices based on their outputs, enabling applications like smart home management or autonomous vehicle navigation. + +#### Without direct learning from each other, how do agents in a swarm improve over time? + +Improvement over time in a swarm of pre-trained LLMs, without direct learning from each other, can be achieved through: + +- **Human Feedback**: Incorporating feedback from human operators or users can guide adjustments to the usage patterns or selection criteria of LLMs within the swarm, optimizing performance based on observed outcomes. + +- **Periodic Re-training and Updating**: The individual LLMs can be periodically re-trained or updated by their developers based on collective insights and feedback from their deployment within swarms. While this does not involve direct learning from each encounter, it allows the LLMs to improve over time based on aggregated experiences. + +These adjustments to the FAQ reflect the specific context of pre-trained LLMs operating within a swarm, focusing on communication, coordination, and adaptation mechanisms that align with their capabilities and constraints. + + +#### Conclusion + +Swarms represent a powerful paradigm in AI, offering innovative solutions to complex, dynamic problems through collective intelligence and decentralized control. While challenges exist, particularly regarding cost and security, strategic design and management can leverage the strengths of swarm intelligence to achieve remarkable efficiency, adaptability, and robustness in a wide range of applications. \ No newline at end of file diff --git a/docs_edit/corporate/flywheel.md b/docs_edit/corporate/flywheel.md new file mode 100644 index 00000000..ac8851be --- /dev/null +++ b/docs_edit/corporate/flywheel.md @@ -0,0 +1,101 @@ +# The Swarms Flywheel + +1. **Building a Supportive Community:** Initiate by establishing an engaging and inclusive open-source community for both developers and sales freelancers around Swarms. Regular online meetups, webinars, tutorials, and sales training can make them feel welcome and encourage contributions and sales efforts. + +2. **Increased Contributions and Sales Efforts:** The more engaged the community, the more developers will contribute to Swarms and the more effort sales freelancers will put into selling Swarms. + +3. **Improvement in Quality and Market Reach:** More developer contributions mean better quality, reliability, and feature offerings from Swarms. Simultaneously, increased sales efforts from freelancers boost Swarms' market penetration and visibility. + +4. **Rise in User Base:** As Swarms becomes more robust and more well-known, the user base grows, driving more revenue. + +5. **Greater Financial Incentives:** Increased revenue can be redirected to offer more significant financial incentives to both developers and salespeople. Developers can be incentivized based on their contribution to Swarms, and salespeople can be rewarded with higher commissions. + +6. **Attract More Developers and Salespeople:** These financial incentives, coupled with the recognition and experience from participating in a successful project, attract more developers and salespeople to the community. + +7. **Wider Adoption of Swarms:** An ever-improving product, a growing user base, and an increasing number of passionate salespeople accelerate the adoption of Swarms. + +8. **Return to Step 1:** As the community, user base, and sales network continue to grow, the cycle repeats, each time speeding up the flywheel. + + +```markdown + +---------------------+ + | Building a | + | Supportive | <--+ + | Community | | + +--------+-----------+ | + | | + v | + +--------+-----------+ | + | Increased | | + | Contributions & | | + | Sales Efforts | | + +--------+-----------+ | + | | + v | + +--------+-----------+ | + | Improvement in | | + | Quality & Market | | + | Reach | | + +--------+-----------+ | + | | + v | + +--------+-----------+ | + | Rise in User | | + | Base | | + +--------+-----------+ | + | | + v | + +--------+-----------+ | + | Greater Financial | | + | Incentives | | + +--------+-----------+ | + | | + v | + +--------+-----------+ | + | Attract More | | + | Developers & | | + | Salespeople | | + +--------+-----------+ | + | | + v | + +--------+-----------+ | + | Wider Adoption of | | + | Swarms |----+ + +---------------------+ +``` + + +# Potential Risks and Mitigations: + +1. **Insufficient Contributions or Quality of Work**: Open-source efforts rely on individuals being willing and able to spend time contributing. If not enough people participate, or the work they produce is of poor quality, the product development could stall. + * **Mitigation**: Create a robust community with clear guidelines, support, and resources. Provide incentives for quality contributions, such as a reputation system, swag, or financial rewards. Conduct thorough code reviews to ensure the quality of contributions. + +2. **Lack of Sales Results**: Commission-based salespeople will only continue to sell the product if they're successful. If they aren't making enough sales, they may lose motivation and cease their efforts. + * **Mitigation**: Provide adequate sales training and resources. Ensure the product-market fit is strong, and adjust messaging or sales tactics as necessary. Consider implementing a minimum commission or base pay to reduce risk for salespeople. + +3. **Poor User Experience or User Adoption**: If users don't find the product useful or easy to use, they won't adopt it, and the user base won't grow. This could also discourage salespeople and contributors. + * **Mitigation**: Prioritize user experience in the product development process. Regularly gather and incorporate user feedback. Ensure robust user support is in place. + +4. **Inadequate Financial Incentives**: If the financial rewards don't justify the time and effort contributors and salespeople are putting in, they will likely disengage. + * **Mitigation**: Regularly review and adjust financial incentives as needed. Ensure that the method for calculating and distributing rewards is transparent and fair. + +5. **Security and Compliance Risks**: As the user base grows and the software becomes more complex, the risk of security issues increases. Moreover, as contributors from various regions join, compliance with various international laws could become an issue. + * **Mitigation**: Establish strong security practices from the start. Regularly conduct security audits. Seek legal counsel to understand and adhere to international laws and regulations. + +## Activation Plan for the Flywheel: + +1. **Community Building**: Begin by fostering a supportive community around Swarms. Encourage early adopters to contribute and provide feedback. Create comprehensive documentation, community guidelines, and a forum for discussion and support. + +2. **Sales and Development Training**: Provide resources and training for salespeople and developers. Make sure they understand the product, its value, and how to effectively contribute or sell. + +3. **Increase Contributions and Sales Efforts**: Encourage increased participation by highlighting successful contributions and sales, rewarding top contributors and salespeople, and regularly communicating about the project's progress and impact. + +4. **Iterate and Improve**: Continually gather and implement feedback to improve Swarms and its market reach. The better the product and its alignment with the market, the more the user base will grow. + +5. **Expand User Base**: As the product improves and sales efforts continue, the user base should grow. Ensure you have the infrastructure to support this growth and maintain a positive user experience. + +6. **Increase Financial Incentives**: As the user base and product grow, so too should the financial incentives. Make sure rewards continue to be competitive and attractive. + +7. **Attract More Contributors and Salespeople**: As the financial incentives and success of the product increase, this should attract more contributors and salespeople, further feeding the flywheel. + +Throughout this process, it's important to regularly reassess and adjust your strategy as necessary. Stay flexible and responsive to changes in the market, user feedback, and the evolving needs of the community. \ No newline at end of file diff --git a/docs_edit/corporate/front_end_contributors.md b/docs_edit/corporate/front_end_contributors.md new file mode 100644 index 00000000..b37197da --- /dev/null +++ b/docs_edit/corporate/front_end_contributors.md @@ -0,0 +1,40 @@ +# Frontend Contributor Guide + +## Mission +At the heart of Swarms is the mission to democratize multi-agent technology, making it accessible to businesses of all sizes around the globe. This technology, which allows for the orchestration of multiple autonomous agents to achieve complex goals, has the potential to revolutionize industries by enhancing efficiency, scalability, and innovation. Swarms is committed to leading this charge by developing a platform that empowers businesses and individuals to harness the power of multi-agent systems without the need for specialized knowledge or resources. + + +## Understanding Your Impact as a Frontend Engineer +Crafting User Experiences: As a frontend engineer at Swarms, you play a crucial role in making multi-agent technology understandable and usable for businesses worldwide. Your work involves translating complex systems into intuitive interfaces, ensuring users can easily navigate, manage, and benefit from multi-agent solutions. By focusing on user-centric design and seamless integration, you help bridge the gap between advanced technology and practical business applications. + +Skills and Attributes for Success: Successful frontend engineers at Swarms combine technical expertise with a passion for innovation and a deep understanding of user needs. Proficiency in modern frontend technologies, such as React, NextJS, and Tailwind, is just the beginning. You also need a strong grasp of usability principles, accessibility standards, and the ability to work collaboratively with cross-functional teams. Creativity, problem-solving skills, and a commitment to continuous learning are essential for developing solutions that meet diverse business needs. + + +## Joining the Team +As you contribute to Swarms, you become part of a collaborative effort to change the world. We value each contribution and provide constructive feedback to help you grow. Outstanding contributors who share our vision and demonstrate exceptional skill and dedication are invited to join our team, where they can have an even greater impact on our mission. + + +### Becoming a Full-Time Swarms Engineer: +Swarms is radically devoted to open source and transparency. To join the full time team, you must first contribute to the open source repository so we can assess your technical capability and general way of working. After a series of quality contributions, we'll offer you a full time position! + +Joining Swarms full-time means more than just a job. It's an opportunity to be at the forefront of technological innovation, working alongside passionate professionals dedicated to making a difference. We look for individuals who are not only skilled but also driven by the desire to make multi-agent technology accessible and beneficial to businesses worldwide. + + +## Resources +- **Project Management Details** + - **Linear**: Our projects and tasks at a glance. Get a sense of our workflow and priorities. + - [View on Linear](https://linear.app/swarms/join/e7f4c6c560ffa0e1395820682f4e110a?s=1) + +- **Design System and UI/UX Guidelines** + - **Figma**: Dive into our design system to grasp the aesthetics and user experience objectives of Swarms. + - [View on Figma](https://www.figma.com/file/KL4VIXfZKwwLgAes2WbGNa/Swarms-Cloud-Platform?type=design&node-id=0%3A1&mode=design&t=MkrM0mBQa6qsTDtJ-1) + +- **Swarms Platform Repository** + - **GitHub**: The hub of our development activities. Familiarize yourself with our codebase and current projects. + - [Visit GitHub Repository](https://github.com/kyegomez/swarms-platform) + +- **[Swarms Community](https://discord.gg/pSTSxqDk)** + + +### Design Style & User Experience +- [How to build great products with game design, not gamification](https://blog.superhuman.com/game-design-not-gamification/) \ No newline at end of file diff --git a/docs_edit/corporate/hiring.md b/docs_edit/corporate/hiring.md new file mode 100644 index 00000000..27df63a1 --- /dev/null +++ b/docs_edit/corporate/hiring.md @@ -0,0 +1,61 @@ +## **Join the Swarm Revolution: Advancing Humanity & Prosperity Together!** + +### **The Next Chapter of Humanity's Story Begins Here...** + +At Swarms, our mission transcends mere technological advancement. We envision a world where every individual can leverage the power of AI to uplift their lives, communities, and our shared future. If you are driven by the passion to revolutionize industries, to scale the heights of innovation, and believe in earning your fair share for every ounce of your dedication – you might be the one we're looking for. + +--- + +### **Why Swarms?** + +#### **For the Ambitious Spirit**: +- **Opportunity Beyond Boundaries**: Just as Fuller believed in the infinite opportunities of America, we believe in the limitless potential of raw Humantiy. + +#### **For the Maverick**: +- **Unprecedented Independence**: Like the Fuller salesmen, our team members have the autonomy to sculpt their roles, timelines, and outcomes. Here, you’re the captain of your ship. + +#### **For the Avid Learner**: +- **Continuous Learning & Growth**: Dive deep into the realms of AI, distributed systems, and customer success methodologies. We offer training, mentorship, and a platform to sharpen your skills. + +#### **For the High Achiever**: +- **Rewarding Compensation**: While the sky is the limit for your innovations, so is your earning potential. Prosper with performance-based rewards that reflect your dedication. + +#### **For the Community Builder**: +- **Culture of Unity & Innovation**: At Swarms, you’re not just an employee; you’re a pivotal part of our mission. Experience camaraderie, collaboration, and a shared purpose that binds us together. + +#### **For the Visionary**: +- **Work on the Cutting-Edge**: Be at the forefront of AI and technology. Shape solutions that will define the next era of human history. + +--- + +### **Benefits of Joining Swarms**: + +1. **Advance Humanity**: Play an instrumental role in democratizing technology for all. +2. **Financial Prosperity**: Harness a compensation structure that grows with your achievements. +3. **Flexible Work Environment**: Customize your workspace, schedule, and workstyle. +4. **Global Network**: Collaborate with some of the brightest minds spanning continents. +5. **Personal Development**: Regular workshops, courses, and seminars to fuel your growth. +6. **Health & Wellness**: Comprehensive health benefits and well-being programs. +7. **Ownership & Equity**: As we grow, so does your stake and impact in our organization. +8. **Retreats & Team Building**: Forge bonds beyond work in exotic locations globally. +9. **Customer Success Impact**: Directly experience the joy of solving real-world challenges for our users. + +--- + +### **Positions Open**: + +- **Customer Success Professionals**: Be the bridge between our revolutionary tech and its real-world impact. +- **AI & Swarm Engineers**: Architect, design, and optimize the swarm systems powering global innovations. + +--- + +### **Your Invitation to the Future**: +If you resonate with our vision of blending technological marvels with human brilliance, of creating a prosperous world where every dream has the wings of AI – we invite you to join us on this extraordinary journey. + +**Are you ready to create history with Swarms?** + +--- + +**Apply Now and Let’s Push Our People Further!** + +--- \ No newline at end of file diff --git a/docs_edit/corporate/metric.md b/docs_edit/corporate/metric.md new file mode 100644 index 00000000..8340d634 --- /dev/null +++ b/docs_edit/corporate/metric.md @@ -0,0 +1,225 @@ +# The Golden Metric: 95% User-Task-Completion-Satisfaction Rate + +In the world of Swarms, there’s one metric that stands above the rest: the User-Task-Completion-Satisfaction (UTCS) rate. This metric is the heart of our system, the pulse that keeps us moving forward. It’s not just a number; it’s a reflection of our commitment to our users and a measure of our success. + +## What is the UTCS Rate? +The UTCS rate is a measure of how reliably and quickly Swarms can satisfy a user demand. It’s calculated by dividing the number of tasks completed to the user’s satisfaction by the total number of tasks. Multiply that by 100, and you’ve got your UTCS rate. + +But what does it mean to complete a task to the user’s satisfaction? It means that the task is not only completed, but completed in a way that meets or exceeds the user’s expectations. It’s about quality, speed, and reliability. + +## Why is the UTCS Rate Important? +The UTCS rate is a direct reflection of the user experience. A high UTCS rate means that users are getting what they need from Swarms, and they’re getting it quickly and reliably. It means that Swarms is doing its job, and doing it well. + +But the UTCS rate is not just about user satisfaction. It’s also a measure of Swarms’ efficiency and effectiveness. A high UTCS rate means that Swarms is able to complete tasks quickly and accurately, with minimal errors or delays. It’s a sign of a well-oiled machine. + +## How Do We Achieve a 95% UTCS Rate? +Achieving a 95% UTCS rate is no small feat. It requires a deep understanding of our users and their needs, a robust and reliable system, and a commitment to continuous improvement. + +### Here are some strategies we’re implementing to reach our goal: + +* Understanding User Needs: We must have agents that gain an understanding of the user's objective and break it up into it's most fundamental building blocks + +* Improving System Reliability: We’re working to make Swarms more reliable, reducing errors and improving the accuracy of task completion. This includes improving our algorithms, refining our processes, and investing in quality assurance. + +* Optimizing for Speed: We’re optimizing Swarms to complete tasks as quickly as possible, without sacrificing quality. This includes improving our infrastructure, streamlining our workflows, and implementing performance optimizations. + +*Iterating and Improving: We’re committed to continuous improvement. We’re constantly monitoring our UTCS rate and other key metrics, and we’re always looking for ways to improve. We’re not afraid to experiment, iterate, and learn from our mistakes. + +Achieving a 95% UTCS rate is a challenging goal, but it’s a goal worth striving for. It’s a goal that will drive us to improve, innovate, and deliver the best possible experience for our users. And in the end, that’s what Swarms is all about. + + + +# Your Feedback Matters: Help Us Optimize the UTCS Rate + +As we initiate the journey of Swarms, we seek your feedback to better guide our growth and development. Your opinions and suggestions are crucial for us, helping to mold our product, pricing, branding, and a host of other facets that influence your experience. + +## Your Insights on the UTCS Rate +Our goal is to maintain a UTCS (User-Task-Completion-Satisfaction) rate of 95%. This metric is integral to the success of Swarms, indicating the efficiency and effectiveness with which we satisfy user requests. However, it's a metric that we can't optimize alone - we need your help. + +Here's what we want to understand from you: + +1. **Satisfaction:** What does a "satisfactorily completed task" mean to you? Are there specific elements that contribute to a task being carried out to your satisfaction? +2. **Timeliness:** How important is speed in the completion of a task? What would you consider a reasonable timeframe for a task to be completed? +3. **Usability:** How intuitive and user-friendly do you find the Swarms platform? Are there any aspects of the platform that you believe could be enhanced? +4. **Reliability:** How much does consistency in performance matter to you? Can you share any experiences where Swarms either met or fell short of your expectations? +5. **Value for Money:** How do you perceive our pricing? Does the value Swarms provides align with the costs? + +We invite you to share your experiences, thoughts, and ideas. Whether it's a simple suggestion or an in-depth critique, we appreciate and value your input. + +## Your Feedback: The Backbone of our Growth +Your feedback is the backbone of Swarms' evolution. It drives us to refine our strategies, fuels our innovative spirit, and, most importantly, enables us to serve you better. + +As we launch, we open the conversation around these key aspects of Swarms, and we look forward to understanding your expectations, your needs, and how we can deliver the best experience for you. + +So, let's start this conversation - how can we make Swarms work best for you? + + +Guide Our Growth: Help Optimize Swarms +As we launch Swarms, your feedback is critical for enhancing our product, pricing, and branding. A key aim for us is a User-Task-Completion-Satisfaction (UTCS) rate of 95% - indicating our efficiency and effectiveness in meeting user needs. However, we need your insights to optimize this. + +Here's what we're keen to understand: + +Satisfaction: Your interpretation of a "satisfactorily completed task". +Timeliness: The importance of speed in task completion for you. +Usability: Your experiences with our platform’s intuitiveness and user-friendliness. +Reliability: The significance of consistent performance to you. +Value for Money: Your thoughts on our pricing and value proposition. +We welcome your thoughts, experiences, and suggestions. Your feedback fuels our evolution, driving us to refine strategies, boost innovation, and enhance your experience. + +Let's start the conversation - how can we make Swarms work best for you? + + +-------- + +**The Golden Metric Analysis: The Ultimate UTCS Paradigm for Swarms** + +### Introduction + +In our ongoing journey to perfect Swarms, understanding how our product fares in the eyes of the end-users is paramount. Enter the User-Task-Completion-Satisfaction (UTCS) rate - our primary metric that gauges how reliably and swiftly Swarms can meet user demands. As we steer Swarms towards achieving a UTCS rate of 95%, understanding this metric's core and how to refine it becomes vital. + +### Decoding UTCS: An Analytical Overview + +The UTCS rate is not merely about task completion; it's about the comprehensive experience. Therefore, its foundations lie in: + +1. **Quality**: Ensuring tasks are executed flawlessly. +2. **Speed**: Delivering results in the shortest possible time. +3. **Reliability**: Consistency in quality and speed across all tasks. + +We can represent the UTCS rate with the following equation: + +```latex +\[ UTCS Rate = \frac{(Completed Tasks \times User Satisfaction)}{(Total Tasks)} \times 100 \] +``` + +Where: +- Completed Tasks refer to the number of tasks Swarms executes without errors. +- User Satisfaction is the subjective component, gauged through feedback mechanisms. This could be on a scale of 1-10 (or a percentage). +- Total Tasks refer to all tasks processed by Swarms, regardless of the outcome. + +### The Golden Metric: Swarm Efficiency Index (SEI) + +However, this basic representation doesn't factor in a critical component: system performance. Thus, we introduce the Swarm Efficiency Index (SEI). The SEI encapsulates not just the UTCS rate but also system metrics like memory consumption, number of tasks, and time taken. By blending these elements, we aim to present a comprehensive view of Swarm's prowess. + +Here’s the formula: + +```latex +\[ SEI = \frac{UTCS Rate}{(Memory Consumption + Time Window + Task Complexity)} \] +``` + +Where: +- Memory Consumption signifies the system resources used to accomplish tasks. +- Time Window is the timeframe in which the tasks were executed. +- Task Complexity could be a normalized scale that defines how intricate a task is (e.g., 1-5, with 5 being the most complex). + +Rationale: +- **Incorporating Memory Consumption**: A system that uses less memory but delivers results is more efficient. By inverting memory consumption in the formula, we emphasize that as memory usage goes down, SEI goes up. + +- **Considering Time**: Time is of the essence. The faster the results without compromising quality, the better. By adding the Time Window, we emphasize that reduced task execution time increases the SEI. + +- **Factoring in Task Complexity**: Not all tasks are equal. A system that effortlessly completes intricate tasks is more valuable. By integrating task complexity, we can normalize the SEI according to the task's nature. + +### Implementing SEI & Improving UTCS + +Using feedback from elder-plinius, we can better understand and improve SEI and UTCS: + +1. **Feedback Across Skill Levels**: By gathering feedback from users with different skill levels, we can refine our metrics, ensuring Swarms caters to all. + +2. **Simplifying Setup**: Detailed guides can help newcomers swiftly get on board, thus enhancing user satisfaction. + +3. **Enhancing Workspace and Agent Management**: A clearer view of the Swarm's internal structure, combined with on-the-go adjustments, can improve both the speed and quality of results. + +4. **Introducing System Suggestions**: A proactive Swarms that provides real-time insights and recommendations can drastically enhance user satisfaction, thus pushing up the UTCS rate. + +### Conclusion + +The UTCS rate is undeniably a pivotal metric for Swarms. However, with the introduction of the Swarm Efficiency Index (SEI), we have an opportunity to encapsulate a broader spectrum of performance indicators, leading to a more holistic understanding of Swarms' efficiency. By consistently optimizing for SEI, we can ensure that Swarms not only meets user expectations but also operates at peak system efficiency. + + +---------------- +**Research Analysis: Tracking and Ensuring Reliability of Swarm Metrics at Scale** + +### 1. Introduction + +In our pursuit to optimize the User-Task-Completion-Satisfaction (UTCS) rate and Swarm Efficiency Index (SEI), reliable tracking of these metrics at scale becomes paramount. This research analysis delves into methodologies, technologies, and practices that can be employed to monitor these metrics accurately and efficiently across vast data sets. + +### 2. Why Tracking at Scale is Challenging + +The primary challenges include: + +- **Volume of Data**: As Swarms grows, the data generated multiplies exponentially. +- **Variability of Data**: Diverse user inputs lead to myriad output scenarios. +- **System Heterogeneity**: Different configurations and deployments can yield variable results. + +### 3. Strategies for Scalable Tracking + +#### 3.1. Distributed Monitoring Systems + +**Recommendation**: Implement distributed systems like Prometheus or InfluxDB. + +**Rationale**: +- Ability to collect metrics from various Swarm instances concurrently. +- Scalable and can handle vast data influxes. + +#### 3.2. Real-time Data Processing + +**Recommendation**: Use stream processing systems like Apache Kafka or Apache Flink. + +**Rationale**: +- Enables real-time metric calculation. +- Can handle high throughput and low-latency requirements. + +#### 3.3. Data Sampling + +**Recommendation**: Random or stratified sampling of user sessions. + +**Rationale**: +- Reduces the data volume to be processed. +- Maintains representativeness of overall user experience. + +### 4. Ensuring Reliability in Data Collection + +#### 4.1. Redundancy + +**Recommendation**: Integrate redundancy into data collection nodes. + +**Rationale**: +- Ensures no single point of failure. +- Data loss prevention in case of system malfunctions. + +#### 4.2. Anomaly Detection + +**Recommendation**: Implement AI-driven anomaly detection systems. + +**Rationale**: +- Identifies outliers or aberrations in metric calculations. +- Ensures consistent and reliable data interpretation. + +#### 4.3. Data Validation + +**Recommendation**: Establish automated validation checks. + +**Rationale**: +- Ensures only accurate and relevant data is considered. +- Eliminates inconsistencies arising from corrupted or irrelevant data. + +### 5. Feedback Loops and Continuous Refinement + +#### 5.1. User Feedback Integration + +**Recommendation**: Develop an in-built user feedback mechanism. + +**Rationale**: +- Helps validate the perceived vs. actual performance. +- Allows for continuous refining of tracking metrics and methodologies. + +#### 5.2. A/B Testing + +**Recommendation**: Regularly conduct A/B tests for new tracking methods or adjustments. + +**Rationale**: +- Determines the most effective methods for data collection. +- Validates new tracking techniques against established ones. + +### 6. Conclusion + +To successfully and reliably track the UTCS rate and SEI at scale, it's essential to combine robust monitoring tools, data processing methodologies, and validation techniques. By doing so, Swarms can ensure that the metrics collected offer a genuine reflection of system performance and user satisfaction. Regular feedback and iterative refinement, rooted in a culture of continuous improvement, will further enhance the accuracy and reliability of these essential metrics. \ No newline at end of file diff --git a/docs_edit/corporate/monthly_formula.py b/docs_edit/corporate/monthly_formula.py new file mode 100644 index 00000000..15eafbb5 --- /dev/null +++ b/docs_edit/corporate/monthly_formula.py @@ -0,0 +1,66 @@ +def calculate_monthly_charge( + development_time_hours: float, + hourly_rate: float, + amortization_months: int, + api_calls_per_month: int, + cost_per_api_call: float, + monthly_maintenance: float, + additional_monthly_costs: float, + profit_margin_percentage: float, +) -> float: + """ + Calculate the monthly charge for a service based on various cost factors. + + Parameters: + - development_time_hours (float): The total number of hours spent on development and setup. + - hourly_rate (float): The rate per hour for development and setup. + - amortization_months (int): The number of months over which to amortize the development and setup costs. + - api_calls_per_month (int): The number of API calls made per month. + - cost_per_api_call (float): The cost per API call. + - monthly_maintenance (float): The monthly maintenance cost. + - additional_monthly_costs (float): Any additional monthly costs. + - profit_margin_percentage (float): The desired profit margin as a percentage. + + Returns: + - monthly_charge (float): The calculated monthly charge for the service. + """ + + # Calculate Development and Setup Costs (amortized monthly) + development_and_setup_costs_monthly = ( + development_time_hours * hourly_rate + ) / amortization_months + + # Calculate Operational Costs per Month + operational_costs_monthly = ( + (api_calls_per_month * cost_per_api_call) + + monthly_maintenance + + additional_monthly_costs + ) + + # Calculate Total Monthly Costs + total_monthly_costs = ( + development_and_setup_costs_monthly + + operational_costs_monthly + ) + + # Calculate Pricing with Profit Margin + monthly_charge = total_monthly_costs * ( + 1 + profit_margin_percentage / 100 + ) + + return monthly_charge + + +# Example usage: +monthly_charge = calculate_monthly_charge( + development_time_hours=100, + hourly_rate=500, + amortization_months=12, + api_calls_per_month=500000, + cost_per_api_call=0.002, + monthly_maintenance=1000, + additional_monthly_costs=300, + profit_margin_percentage=10000, +) + +print(f"Monthly Charge: ${monthly_charge:.2f}") diff --git a/docs_edit/corporate/purpose.md b/docs_edit/corporate/purpose.md new file mode 100644 index 00000000..14381b50 --- /dev/null +++ b/docs_edit/corporate/purpose.md @@ -0,0 +1,14 @@ + +## Purpose +Artificial Intelligence has grown at an exponential rate over the past decade. Yet, we are far from fully harnessing its potential. Today's AI operates in isolation, each working separately in their corner. But life doesn't work like that. The world doesn't work like that. Success isn't built in silos; it's built in teams. + +Imagine a world where AI models work in unison. Where they can collaborate, interact, and pool their collective intelligence to achieve more than any single model could. This is the future we envision. But today, we lack a framework for AI to collaborate effectively, to form a true swarm of intelligent agents. + + +This is a difficult problem, one that has eluded solution. It requires sophisticated systems that can allow individual models to not just communicate but also understand each other, pool knowledge and resources, and create collective intelligence. This is the next frontier of AI. + +But here at Swarms, we have a secret sauce. It's not just a technology or a breakthrough invention. It's a way of thinking - the philosophy of rapid iteration. With each cycle, we make massive progress. We experiment, we learn, and we grow. We have developed a pioneering framework that can enable AI models to work together as a swarm, combining their strengths to create richer, more powerful outputs. + +We are uniquely positioned to take on this challenge with 1,500+ devoted researchers in Agora. We have assembled a team of world-class experts, experienced and driven, united by a shared vision. Our commitment to breaking barriers, pushing boundaries, and our belief in the power of collective intelligence makes us the best team to usher in this future to fundamentally advance our species, Humanity. + +--- \ No newline at end of file diff --git a/docs_edit/corporate/research.md b/docs_edit/corporate/research.md new file mode 100644 index 00000000..bdfac22c --- /dev/null +++ b/docs_edit/corporate/research.md @@ -0,0 +1,82 @@ +# Research Lists +A compilation of projects, papers, blogs in autonomous agents. + +## Table of Contents + +- [Introduction](#introduction) +- [Projects](#projects) +- [Articles](#articles) +- [Talks](#talks) + + +## Projects + +### Developer tools +- [2023/8/10] [ModelScope-Agent](https://github.com/modelscope/modelscope-agent) - An Agent Framework Connecting Models in ModelScope with the World +- [2023/05/25] [Gorilla](https://github.com/ShishirPatil/gorilla) - An API store for LLMs +- [2023/03/31] [BMTools](https://github.com/OpenBMB/BMTools) - Tool Learning for Big Models, Open-Source Solutions of ChatGPT-Plugins +- [2023/03/09] [LMQL](https://github.com/eth-sri/lmql) - A query language for programming (large) language models. +- [2022/10/25] [Langchain](https://github.com/hwchase17/langchain) - ⚡ Building applications with LLMs through composability ⚡ + +### Applications +- [2023/07/08] [ShortGPT](https://github.com/RayVentura/ShortGPT) - 🚀🎬 ShortGPT - An experimental AI framework for automated short/video content creation. Enables creators to rapidly produce, manage, and deliver content using AI and automation. +- [2023/07/05] [gpt-researcher](https://github.com/assafelovic/gpt-researcher) - GPT based autonomous agent that does online comprehensive research on any given topic +- [2023/07/04] [DemoGPT](https://github.com/melih-unsal/DemoGPT) - 🧩DemoGPT enables you to create quick demos by just using prompts. [[demo]](demogpt.io) +- [2023/06/30] [MetaGPT](https://github.com/geekan/MetaGPT) - 🌟 The Multi-Agent Framework: Given one line Requirement, return PRD, Design, Tasks, Repo +- [2023/06/11] [gpt-engineer](https://github.com/AntonOsika/gpt-engineer) - Specify what you want it to build, the AI asks for clarification, and then builds it. +- [2023/05/16] [SuperAGI](https://github.com/TransformerOptimus/SuperAGI) - <⚡️> SuperAGI - A dev-first open source autonomous AI agent framework. Enabling developers to build, manage & run useful autonomous agents quickly and reliably. +- [2023/05/13] [Developer](https://github.com/smol-ai/developer) - Human-centric & Coherent Whole Program Synthesis aka your own personal junior developer +- [2023/04/07] [AgentGPT](https://github.com/reworkd/AgentGPT) - 🤖 Assemble, configure, and deploy autonomous AI Agents in your browser. [[demo]](agentgpt.reworkd.ai) +- [2023/04/03] [BabyAGI](https://github.com/yoheinakajima/babyagi) - an example of an AI-powered task management system +- [2023/03/30] [AutoGPT](https://github.com/Significant-Gravitas/Auto-GPT) - An experimental open-source attempt to make GPT-4 fully autonomous. + +### Benchmarks +- [2023/08/07] [AgentBench](https://github.com/THUDM/AgentBench) - A Comprehensive Benchmark to Evaluate LLMs as Agents. [paper](https://arxiv.org/abs/2308.03688) +- [2023/06/18] [Auto-GPT-Benchmarks](https://github.com/Significant-Gravitas/Auto-GPT-Benchmarks) - A repo built for the purpose of benchmarking the performance of agents, regardless of how they are set up and how they work. +- [2023/05/28] [ToolBench](https://github.com/OpenBMB/ToolBench) - An open platform for training, serving, and evaluating large language model for tool learning. + +## Articles +### Research Papers +- [2023/08/11] [BOLAA: Benchmarking and Orchestrating LLM-Augmented Autonomous Agents](https://arxiv.org/pdf/2308.05960v1.pdf), Zhiwei Liu, et al. +- [2023/07/31] [ToolLLM: Facilitating Large Language Models to Master 16000+ Real-world APIs](https://arxiv.org/abs/2307.16789), Yujia Qin, et al. +- [2023/07/16] [Communicative Agents for Software Development](https://arxiv.org/abs/2307.07924), Chen Qian, et al. +- [2023/06/09] [Mind2Web: Towards a Generalist Agent for the Web](https://arxiv.org/pdf/2306.06070.pdf), Xiang Deng, et al. [[code]](https://github.com/OSU-NLP-Group/Mind2Web) [[demo]](https://osu-nlp-group.github.io/Mind2Web/) +- [2023/06/05] [Orca: Progressive Learning from Complex Explanation Traces of GPT-4](https://arxiv.org/pdf/2306.02707.pdf), Subhabrata Mukherjee et al. +- [2023/05/25] [Voyager: An Open-Ended Embodied Agent with Large Language Models](https://arxiv.org/pdf/2305.16291.pdf), Guanzhi Wang, et al. [[code]](https://github.com/MineDojo/Voyager) [[website]](https://voyager.minedojo.org/) +- [2023/05/23] [ReWOO: Decoupling Reasoning from Observations for Efficient Augmented Language Models](https://arxiv.org/pdf/2305.18323.pdf), Binfeng Xu, et al. [[code]](https://github.com/billxbf/ReWOO) +- [2023/05/17] [Tree of Thoughts: Deliberate Problem Solving with Large Language Models](https://arxiv.org/abs/2305.10601), Shunyu Yao, et al.[[code]](https://github.com/kyegomez/tree-of-thoughts) [[code-orig]](https://github.com/ysymyth/tree-of-thought-llm) +- [2023/05/12] [MEGABYTE: Predicting Million-byte Sequences with Multiscale Transformers](https://arxiv.org/abs/2305.07185), Lili Yu, et al. +- [2023/05/19] [FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance](https://arxiv.org/abs/2305.05176), Lingjiao Chen, et al. +- [2023/05/06] [Plan-and-Solve Prompting: Improving Zero-Shot Chain-of-Thought Reasoning by Large Language Models](https://arxiv.org/abs/2305.04091), Lei Wang, et al. +- [2023/05/01] [Learning to Reason and Memorize with Self-Notes](https://arxiv.org/abs/2305.00833), Jack Lanchantin, et al. +- [2023/04/24] [WizardLM: Empowering Large Language Models to Follow Complex Instructions](https://arxiv.org/abs/2304.12244), Can Xu, et al. +- [2023/04/22] [LLM+P: Empowering Large Language Models with Optimal Planning Proficiency](https://arxiv.org/abs/2304.11477), Bo Liu, et al. +- [2023/04/07] [Generative Agents: Interactive Simulacra of Human Behavior](https://arxiv.org/abs/2304.03442), Joon Sung Park, et al. [[code]](https://github.com/mkturkcan/generative-agents) +- [2023/03/30] [Self-Refine: Iterative Refinement with Self-Feedback](https://arxiv.org/abs/2303.17651), Aman Madaan, et al.[[code]](https://github.com/madaan/self-refine) +- [2023/03/30] [HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace](https://arxiv.org/pdf/2303.17580.pdf), Yongliang Shen, et al. [[code]](https://github.com/microsoft/JARVIS) [[demo]](https://huggingface.co/spaces/microsoft/HuggingGPT) +- [2023/03/20] [Reflexion: Language Agents with Verbal Reinforcement Learning](https://arxiv.org/pdf/2303.11366.pdf), Noah Shinn, et al. [[code]](https://github.com/noahshinn024/reflexion) +- [2023/03/04] [Towards A Unified Agent with Foundation Models](https://openreview.net/pdf?id=JK_B1tB6p-), Norman Di Palo et al. +- [2023/02/23] [Not what you've signed up for: Compromising Real-World LLM-Integrated Applications with Indirect Prompt Injection](https://arxiv.org/abs/2302.12173), Sahar Abdelnab, et al. +- [2023/02/09] [Toolformer: Language Models Can Teach Themselves to Use Tools](https://arxiv.org/pdf/2302.04761.pdf), Timo Schick, et al. [[code]](https://github.com/lucidrains/toolformer-pytorch) +- [2022/12/12] [LMQL: Prompting Is Programming: A Query Language for Large Language Models](https://arxiv.org/abs/2212.06094), Luca Beurer-Kellner, et al. +- [2022/10/06] [ReAct: Synergizing Reasoning and Acting in Language Models](https://arxiv.org/pdf/2210.03629.pdf), Shunyu Yao, et al. [[code]](https://github.com/ysymyth/ReAct) +- [2022/07/20] [Inner Monologue: Embodied Reasoning through Planning with Language Models](https://arxiv.org/pdf/2207.05608.pdf), Wenlong Huang, et al. [[demo]](https://innermonologue.github.io/) +- [2022/04/04] [Do As I Can, Not As I Say: Grounding Language in Robotic Affordances](), Michael Ahn, e al. [[demo]](https://say-can.github.io/) +- [2021/12/17] [WebGPT: Browser-assisted question-answering with human feedback](https://arxiv.org/pdf/2112.09332.pdf), Reiichiro Nakano, et al. +- [2021/06/17] [LoRA: Low-Rank Adaptation of Large Language Models](https://arxiv.org/abs/2106.09685), Edward J. Hu, et al. + + +### Blog Articles + +- [2023/08/14] [A Roadmap of AI Agents(Chinese)](https://zhuanlan.zhihu.com/p/649916692) By Haojie Pan +- [2023/06/23] [LLM Powered Autonomous Agents](https://lilianweng.github.io/posts/2023-06-23-agent/) By Lilian Weng +- [2023/06/11] [A CRITICAL LOOK AT AI-GENERATED SOFTWARE](https://spectrum.ieee.org/ai-software) By JAIDEEP VAIDYAHAFIZ ASIF +- [2023/04/29] [AUTO-GPT: UNLEASHING THE POWER OF AUTONOMOUS AI AGENTS](https://www.leewayhertz.com/autogpt/) By Akash Takyar +- [2023/04/20] [Conscious Machines: Experiments, Theory, and Implementations(Chinese)](https://pattern.swarma.org/article/230) By Jiang Zhang +- [2023/04/18] [Autonomous Agents & Agent Simulations](https://blog.langchain.dev/agents-round/) By Langchain +- [2023/04/16] [4 Autonomous AI Agents you need to know](https://towardsdatascience.com/4-autonomous-ai-agents-you-need-to-know-d612a643fa92) By Sophia Yang +- [2023/03/31] [ChatGPT that learns to use tools(Chinese)](https://zhuanlan.zhihu.com/p/618448188) By Haojie Pan + +### Talks +- [2023/06/05] [Two Paths to Intelligence](https://www.youtube.com/watch?v=rGgGOccMEiY&t=1497s) by Geoffrey Hinton +- [2023/05/24] [State of GPT](https://www.youtube.com/watch?v=bZQun8Y4L2A) by Andrej Karpathy | OpenAI diff --git a/docs_edit/corporate/roadmap.md b/docs_edit/corporate/roadmap.md new file mode 100644 index 00000000..46872c45 --- /dev/null +++ b/docs_edit/corporate/roadmap.md @@ -0,0 +1,13 @@ +## The Plan + +### Phase 1: Building the Foundation +In the first phase, our focus is on building the basic infrastructure of Swarms. This includes developing key components like the Swarms class, integrating essential tools, and establishing task completion and evaluation logic. We'll also start developing our testing and evaluation framework during this phase. If you're interested in foundational work and have a knack for building robust, scalable systems, this phase is for you. + +### Phase 2: Optimizing the System +In the second phase, we'll focus on optimizng Swarms by integrating more advanced features, improving the system's efficiency, and refining our testing and evaluation framework. This phase involves more complex tasks, so if you enjoy tackling challenging problems and contributing to the development of innovative features, this is the phase for you. + +### Phase 3: Towards Super-Intelligence +The third phase of our bounty program is the most exciting - this is where we aim to achieve super-intelligence. In this phase, we'll be working on improving the swarm's capabilities, expanding its skills, and fine-tuning the system based on real-world testing and feedback. If you're excited about the future of AI and want to contribute to a project that could potentially transform the digital world, this is the phase for you. + +Remember, our roadmap is a guide, and we encourage you to bring your own ideas and creativity to the table. We believe that every contribution, no matter how small, can make a difference. So join us on this exciting journey and help us create the future of Swarms. + diff --git a/docs_edit/corporate/swarm_cloud.md b/docs_edit/corporate/swarm_cloud.md new file mode 100644 index 00000000..9308fe82 --- /dev/null +++ b/docs_edit/corporate/swarm_cloud.md @@ -0,0 +1,195 @@ +# The Swarm Cloud + +### Business Model Plan for Autonomous Agent Swarm Service + +#### Service Description +- **Overview:** A platform allowing users to deploy swarms of autonomous agents in production-grade environments. +- **Target Users:** Industries requiring automation, monitoring, data collection, and more, such as manufacturing, logistics, agriculture, and surveillance. + +#### Operational Strategy +- **Infrastructure:** Robust cloud infrastructure to support agent deployment and data processing. +- **Support and Maintenance:** Continuous support for software updates, troubleshooting, and user assistance. +- **Technology Development:** Ongoing R&D for enhancing agent capabilities and efficiency. + +#### Financial Projections +- **Revenue Streams:** Mainly from per agent usage fees and hosting services. +- **Cost Structure:** Includes development, maintenance, infrastructure, marketing, and administrative costs. +- **Break-even Analysis:** Estimation based on projected user adoption rates and cost per agent. + +# Revnue Streams +```markdown +| Pricing Structure | Description | Details | +| ------------------------- | ----------- | ------- | +| Usage-Based Per Agent | Fees are charged based on the number of agents deployed and their usage duration. | - Ideal for clients needing a few agents for specific tasks.
- More agents or longer usage results in higher fees. | +| Swarm Coverage Pricing | Pricing based on the coverage area or scope of the swarm deployment. | - Suitable for tasks requiring large area coverage.
- Price scales with the size or complexity of the area covered. | +| Performance-Based Pricing | Fees are tied to the performance or outcomes achieved by the agents. | - Clients pay for the effectiveness or results achieved by the agents.
- Higher fees for more complex or high-value tasks. | +``` + +1. **Pay-Per-Mission Pricing:** Clients are charged for each specific task or mission completed by the agents. + +- **Per Agent Usage Fee:** Charged based on the number of agents and the duration of their deployment. +- **Hosting Fees:** Based on the data usage and processing requirements of the agents. +- **Volume Discounts:** Available for large-scale deployments. + + +2. **Time-Based Subscription:** A subscription model where clients pay a recurring fee for continuous access to a set number of agents. + +3. **Dynamic Pricing:** Prices fluctuate based on demand, time of day, or specific conditions. + +4. **Tiered Usage Levels:** Different pricing tiers based on the number of agents used or the complexity of tasks. + +5. **Freemium Model:** Basic services are free, but premium features or additional agents are paid. + +6. **Outcome-Based Pricing:** Charges are based on the success or quality of the outcomes achieved by the agents. + +7. **Feature-Based Pricing:** Different prices for different feature sets or capabilities of the agents. + +8. **Volume Discounts:** Reduced per-agent price for bulk deployments or long-term contracts. + +9. **Peak Time Premiums:** Higher charges during peak usage times or for emergency deployment. + +10. **Bundled Services:** Combining agent services with other products or services for a comprehensive package deal. + +11. **Custom Solution Pricing:** Tailor-made pricing for unique or specialized requirements. + +12. **Data Analysis Fee:** Charging for the data processing and analytics provided by the agents. + +13. **Performance Tiers:** Different pricing for varying levels of agent efficiency or performance. + +14. **License Model:** Clients purchase a license to deploy and use a certain number of agents. + +15. **Cost-Plus Pricing:** Pricing based on the cost of deployment plus a markup. + +16. **Service Level Agreement (SLA) Pricing:** Higher prices for higher levels of service guarantees. + +17. **Pay-Per-Save Model:** Charging based on the cost savings or value created by the agents for the client. + +18. **Revenue Sharing:** Sharing a percentage of the revenue generated through the use of agents. + +19. **Geographic Pricing:** Different pricing for different regions or markets. + +20. **User-Based Pricing:** Charging based on the number of users accessing and controlling the agents. + +21. **Energy Usage Pricing:** Prices based on the amount of energy consumed by the agents during operation. + +22. **Event-Driven Pricing:** Charging for specific events or triggers during the agent's operation. + +23. **Seasonal Pricing:** Adjusting prices based on seasonal demand or usage patterns. + +24. **Partnership Models:** Collaborating with other businesses and sharing revenue from combined services. + +25. **Customizable Packages:** Allowing clients to build their own package of services and capabilities, priced accordingly. + +These diverse pricing strategies can be combined or tailored to fit different business models, client needs, and market dynamics. They also provide various methods of value extraction, ensuring flexibility and scalability in revenue generation. + + +# ICP Analysis +### Ideal Customer Profile (ICP) Map + +#### 1. Manufacturing and Industrial Automation + - **Characteristics:** Large-scale manufacturers, high automation needs, emphasis on efficiency and precision. + - **Needs:** Process automation, quality control, predictive maintenance. + +#### 2. Agriculture and Farming + - **Characteristics:** Large agricultural enterprises, focus on modern farming techniques. + - **Needs:** Crop monitoring, automated harvesting, pest control. + +#### 3. Logistics and Supply Chain + - **Characteristics:** Companies with extensive logistics operations, warehousing, and supply chain management. + - **Needs:** Inventory tracking, automated warehousing, delivery optimization. + +#### 4. Energy and Utilities + - **Characteristics:** Energy providers, utility companies, renewable energy farms. + - **Needs:** Infrastructure monitoring, predictive maintenance, efficiency optimization. + +#### 5. Environmental Monitoring and Conservation + - **Characteristics:** Organizations focused on environmental protection, research institutions. + - **Needs:** Wildlife tracking, pollution monitoring, ecological research. + +#### 6. Smart Cities and Urban Planning + - **Characteristics:** Municipal governments, urban development agencies. + - **Needs:** Traffic management, infrastructure monitoring, public safety. + +#### 7. Defense and Security + - **Characteristics:** Defense contractors, security firms, government agencies. + - **Needs:** Surveillance, reconnaissance, threat assessment. + +#### 8. Healthcare and Medical Facilities + - **Characteristics:** Large hospitals, medical research centers. + - **Needs:** Facility management, patient monitoring, medical logistics. + +#### 9. Entertainment and Event Management + - **Characteristics:** Large-scale event organizers, theme parks. + - **Needs:** Crowd management, entertainment automation, safety monitoring. + +#### 10. Construction and Infrastructure + - **Characteristics:** Major construction firms, infrastructure developers. + - **Needs:** Site monitoring, material tracking, safety compliance. + +### Potential Market Size Table (in Markdown) + +```markdown +| Customer Segment | Estimated Market Size (USD) | Notes | +| ---------------------------- | --------------------------- | ----- | +| Manufacturing and Industrial | $100 Billion | High automation and efficiency needs drive demand. | +| Agriculture and Farming | $75 Billion | Growing adoption of smart farming technologies. | +| Logistics and Supply Chain | $90 Billion | Increasing need for automation in warehousing and delivery. | +| Energy and Utilities | $60 Billion | Focus on infrastructure monitoring and maintenance. | +| Environmental Monitoring | $30 Billion | Rising interest in climate and ecological data collection. | +| Smart Cities and Urban Planning | $50 Billion | Growing investment in smart city technologies. | +| Defense and Security | $120 Billion | High demand for surveillance and reconnaissance tech. | +| Healthcare and Medical | $85 Billion | Need for efficient hospital management and patient care. | +| Entertainment and Event Management | $40 Billion | Innovative uses in crowd control and event safety. | +| Construction and Infrastructure | $70 Billion | Use in monitoring and managing large construction projects. | +``` + +#### Risk Analysis +- **Market Risks:** Adaptation rate and competition. +- **Operational Risks:** Reliability and scalability of infrastructure. +- **Regulatory Risks:** Compliance with data security and privacy laws. + +# Business Model +--- + +### The Swarm Cloud: Business Model + +#### Unlocking the Potential of Autonomous Agent Technology + +**1. Our Vision:** + - Revolutionize industries through scalable, intelligent swarms of autonomous agents. + - Enable real-time data collection, analysis, and automated task execution. + +**2. Service Offering:** + - **The Swarm Cloud Platform:** Deploy and manage swarms of autonomous agents in production-grade environments. + - **Applications:** Versatile across industries – from smart agriculture to urban planning, logistics, and beyond. + +**3. Key Features:** + - **High Scalability:** Tailored solutions from small-scale deployments to large industrial operations. + - **Real-Time Analytics:** Instant data processing and actionable insights. + - **User-Friendly Interface:** Simplified control and monitoring of agent swarms. + - **Robust Security:** Ensuring data integrity and operational safety. + +**4. Revenue Streams:** + - **Usage-Based Pricing:** Charges based on the number of agents and operation duration. + - **Subscription Models:** Recurring revenue through scalable packages. + - **Custom Solutions:** Tailored pricing for bespoke deployments. + +**5. Market Opportunity:** + - **Expansive Market:** Addressing needs in a \$500 billion global market spanning multiple sectors. + - **Competitive Edge:** Advanced technology offering superior efficiency and adaptability. + +**6. Growth Strategy:** + - **R&D Investment:** Continuous enhancement of agent capabilities and platform features. + - **Strategic Partnerships:** Collaborations with industry leaders for market penetration. + - **Marketing and Sales:** Focused approach on high-potential sectors with tailored marketing strategies. + +**7. Why Invest in The Swarm Cloud?** + - **Pioneering Technology:** At the forefront of autonomous agent systems. + - **Scalable Business Model:** Designed for rapid expansion and adaptation to diverse market needs. + - **Strong Market Demand:** Positioned to capitalize on the growing trend of automation and AI. + +"Empowering industries with intelligent, autonomous solutions – The Swarm Cloud is set to redefine efficiency and innovation." + +#### Conclusion +The business model aims to provide a scalable, efficient, and cost-effective solution for industries looking to leverage the power of autonomous agent technology. With a structured pricing plan and a focus on continuous development and support, the service is positioned to meet diverse industry needs. + diff --git a/docs_edit/corporate/swarm_memo.md b/docs_edit/corporate/swarm_memo.md new file mode 100644 index 00000000..5ff21386 --- /dev/null +++ b/docs_edit/corporate/swarm_memo.md @@ -0,0 +1,21 @@ +# [Go To Market Strategy][GTM] + +Our vision is to become the world leader in real-world production grade autonomous agent deployment through open-source product development, Deep Verticalization, and unmatched value delivery to the end user. + +We will focus on first accelerating the open source framework to PMF where it will serve as the backend for upstream products and services such as the Swarm Cloud which will enable enterprises to deploy autonomous agents with long term memory and tools in the cloud and a no-code platform for users to build their own swarm by dragging and dropping blocks. + +Our target user segment for the framework is AI engineers looking to deploy agents into high risk environments where reliability is crucial. + +Once PMF has been achieved and the framework has been extensively benchmarked we aim to establish high value contracts with customers in Security, Logistics, Manufacturing, Health and various other untapped industries. + +Our growth strategy for the OS framework can be summarized by: + +- Educating developers on value of autonomous agent usage. +- Tutorial Walkthrough on various applications like deploying multi-modal agents through cameras or building custom swarms for a specific business operation. +- Demonstrate unmatched reliability by delighting users. +- Staying up to date with trends and integrating the latest models, frameworks, and methodologies. +- Building a loyal and devoted community for long term user retention. [Join here](https://codex.apac.ai) + +As we continuously deliver value with the open framework we will strategically position ourselves to acquire leads for high value contracts by demonstrating the power, reliability, and performance of our framework openly. + +Acquire Full Access to the memo here: [TSC Memo](https://docs.google.com/document/d/1hS_nv_lFjCqLfnJBoF6ULY9roTbSgSuCkvXvSUSc7Lo/edit?usp=sharing) \ No newline at end of file diff --git a/docs_edit/corporate/swarms_bounty_system.md b/docs_edit/corporate/swarms_bounty_system.md new file mode 100644 index 00000000..fff99138 --- /dev/null +++ b/docs_edit/corporate/swarms_bounty_system.md @@ -0,0 +1,92 @@ +# **The Swarms Bounty System: Get Paid to Contribute to Open Source** + +In today's fast-paced world of software development, open source has become a driving force for innovation. Every single business and organization on the planet is dependent on open source software. + +The power of collaboration and community has proven to be a potent catalyst for creating robust, cutting-edge solutions. At Swarms, we recognize the immense value that open source contributors bring to the table, and we're thrilled to introduce our Bounty System – a program designed to reward developers for their invaluable contributions to the Swarms ecosystem. + +The Swarms Bounty System is a groundbreaking initiative that encourages developers from all walks of life to actively participate in the development and improvement of our suite of products, including the Swarms Python framework, Swarm Cloud, and Swarm Core. By leveraging the collective intelligence and expertise of the global developer community, we aim to foster a culture of continuous innovation and excellence. + +[**All bounties with rewards can be found here:**](https://github.com/users/kyegomez/projects/1) + +## **The Power of Collaboration** + +At the heart of the Swarms Bounty System lies the belief that collaboration is the key to unlocking the true potential of software development. By opening up our codebase to the vast talent pool of developers around the world, we're not only tapping into a wealth of knowledge and skills, but also fostering a sense of ownership and investment in the Swarms ecosystem. + +Whether you're a seasoned developer with years of experience or a passionate newcomer eager to learn and grow, the Swarms Bounty System offers a unique opportunity to contribute to cutting-edge projects and leave your mark on the technological landscape. + +## **How the Bounty System Works** + +The Swarms Bounty System is designed to be simple, transparent, and rewarding. Here's how it works: + +1. **Explore the Bounties**: We maintain a comprehensive list of bounties, ranging from bug fixes and feature enhancements to entirely new projects. These bounties are categorized based on their complexity and potential impact, ensuring that there's something for everyone, regardless of their skill level or area of expertise. [Bounties will be listed here](https://github.com/users/kyegomez/projects/1) + +2. **Submit Your Contributions**: Once you've identified a bounty that piques your interest, you can start working on it. When you're ready, submit your contribution in the form of a pull request, following our established guidelines and best practices. + +3. **Review and Approval**: Our dedicated team of reviewers will carefully evaluate your submission, ensuring that it meets our rigorous quality standards and aligns with the project's vision. They'll provide feedback and guidance, fostering a collaborative environment where you can learn and grow. + +4. **Get Rewarded**: Upon successful acceptance of your contribution, you'll be rewarded with a combination of cash and or stock incentives. The rewards are based on a tiered system, reflecting the complexity and impact of your contribution. + +## **The Rewards System** + +At Swarms, we believe in recognizing and rewarding exceptional contributions. Our tiered rewards system is designed to incentivize developers to push the boundaries of innovation and drive the Swarms ecosystem forward. Here's how the rewards are structured: + +### Tier 1: Bug Fixes and Minor Enhancements + +| Reward | Description | +|------------------------|--------------------------------------------------------------| +| Cash Reward | $50 - $150 | +| Stock Reward | N/A | + +This tier covers minor bug fixes, documentation improvements, and small enhancements to existing features. While these contributions may seem insignificant, they play a crucial role in maintaining the stability and usability of our products. + +### Tier 2: Moderate Enhancements and New Features + +| Reward | Description | +|------------------------|--------------------------------------------------------------| +| Cash Reward | $151 - $300 | +| Stock Reward | 10+ | + +This tier encompasses moderate enhancements to existing features, as well as the implementation of new, non-critical features. Contributions in this tier demonstrate a deeper understanding of the project's architecture and a commitment to improving the overall user experience. + +### Tier 3: Major Features and Groundbreaking Innovations + +| Reward | Description | +|------------------------|--------------------------------------------------------------| +| Cash Reward | $301 - $++ | +| Stock Reward | 25+ | + +This tier is reserved for truly exceptional contributions that have the potential to revolutionize the Swarms ecosystem. Major feature additions, innovative architectural improvements, and groundbreaking new projects fall under this category. Developers who contribute at this level will be recognized as thought leaders and pioneers in their respective fields. + +It's important to note that the cash and stock rewards are subject to change based on the project's requirements, complexity, and overall impact. Additionally, we may introduce special bounties with higher reward tiers for particularly challenging or critical projects. + +## **The Benefits of Contributing** + +Participating in the Swarms Bounty System offers numerous benefits beyond the financial incentives. By contributing to our open source projects, you'll have the opportunity to: + +1. **Expand Your Skills**: Working on real-world projects with diverse challenges will help you hone your existing skills and acquire new ones, making you a more versatile and valuable developer. + +2. **Build Your Portfolio**: Your contributions will become part of your professional portfolio, showcasing your expertise and dedication to the open source community. + +3. **Network with Industry Experts**: Collaborate with our team of seasoned developers and gain invaluable insights and mentorship from industry leaders. + +4. **Shape the Future**: Your contributions will directly impact the direction and evolution of the Swarms ecosystem, shaping the future of our products and services. + +5. **Gain Recognition**: Stand out in the crowded field of software development by having your contributions acknowledged and celebrated by the Swarms community. + +## **Join the Movement** + +The Swarms Bounty System is more than just a program; it's a movement that embraces the spirit of open source and fosters a culture of collaboration, innovation, and excellence. By joining our ranks, you'll become part of a vibrant community of developers who share a passion for pushing the boundaries of what's possible. + +Whether you're a seasoned veteran or a newcomer eager to make your mark, the Swarms Bounty System offers a unique opportunity to contribute to cutting-edge projects, earn rewards, and shape the future of software development. + +So, what are you waiting for? Explore our bounties, find your niche, and start contributing today. Together, we can build a brighter, more innovative future for the Swarms ecosystem and the entire software development community. + +[Join the swarm community now:](https://discord.gg/F4GGT5DERD) + + +## Resources +- [Bounty Board](https://github.com/users/kyegomez/projects/1/views/1) +- [Swarm Community](https://discord.gg/F4GGT5DERD) +- [Swarms Framework](https://github.com/kyegomez/swarms) +- [Swarm Cloud](https://github.com/kyegomez/swarms-cloud) +- [Swarm Ecosystem](https://github.com/kyegomez/swarm-ecosystem) \ No newline at end of file diff --git a/docs_edit/features/20swarms.md b/docs_edit/features/20swarms.md new file mode 100644 index 00000000..5385b2f5 --- /dev/null +++ b/docs_edit/features/20swarms.md @@ -0,0 +1,187 @@ +```markdown +# Swarm Alpha: Data Cruncher +**Overview**: Processes large datasets. +**Strengths**: Efficient data handling. +**Weaknesses**: Requires structured data. + +**Pseudo Code**: +```sql +FOR each data_entry IN dataset: + result = PROCESS(data_entry) + STORE(result) +END FOR +RETURN aggregated_results +``` + +# Swarm Beta: Artistic Ally +**Overview**: Generates art pieces. +**Strengths**: Creativity. +**Weaknesses**: Somewhat unpredictable. + +**Pseudo Code**: +```scss +INITIATE canvas_parameters +SELECT art_style +DRAW(canvas_parameters, art_style) +RETURN finished_artwork +``` + +# Swarm Gamma: Sound Sculptor +**Overview**: Crafts audio sequences. +**Strengths**: Diverse audio outputs. +**Weaknesses**: Complexity in refining outputs. + +**Pseudo Code**: +```sql +DEFINE sound_parameters +SELECT audio_style +GENERATE_AUDIO(sound_parameters, audio_style) +RETURN audio_sequence +``` + +# Swarm Delta: Web Weaver +**Overview**: Constructs web designs. +**Strengths**: Modern design sensibility. +**Weaknesses**: Limited to web interfaces. + +**Pseudo Code**: +```scss +SELECT template +APPLY user_preferences(template) +DESIGN_web(template, user_preferences) +RETURN web_design +``` + +# Swarm Epsilon: Code Compiler +**Overview**: Writes and compiles code snippets. +**Strengths**: Quick code generation. +**Weaknesses**: Limited to certain programming languages. + +**Pseudo Code**: +```scss +DEFINE coding_task +WRITE_CODE(coding_task) +COMPILE(code) +RETURN executable +``` + +# Swarm Zeta: Security Shield +**Overview**: Detects system vulnerabilities. +**Strengths**: High threat detection rate. +**Weaknesses**: Potential false positives. + +**Pseudo Code**: +```sql +MONITOR system_activity +IF suspicious_activity_detected: + ANALYZE threat_level + INITIATE mitigation_protocol +END IF +RETURN system_status +``` + +# Swarm Eta: Researcher Relay +**Overview**: Gathers and synthesizes research data. +**Strengths**: Access to vast databases. +**Weaknesses**: Depth of research can vary. + +**Pseudo Code**: +```sql +DEFINE research_topic +SEARCH research_sources(research_topic) +SYNTHESIZE findings +RETURN research_summary +``` + +--- + +# Swarm Theta: Sentiment Scanner +**Overview**: Analyzes text for sentiment and emotional tone. +**Strengths**: Accurate sentiment detection. +**Weaknesses**: Contextual nuances might be missed. + +**Pseudo Code**: +```arduino +INPUT text_data +ANALYZE text_data FOR emotional_tone +DETERMINE sentiment_value +RETURN sentiment_value +``` + +# Swarm Iota: Image Interpreter +**Overview**: Processes and categorizes images. +**Strengths**: High image recognition accuracy. +**Weaknesses**: Can struggle with abstract visuals. + +**Pseudo Code**: +```objective-c +LOAD image_data +PROCESS image_data FOR features +CATEGORIZE image_based_on_features +RETURN image_category +``` + +# Swarm Kappa: Language Learner +**Overview**: Translates and interprets multiple languages. +**Strengths**: Supports multiple languages. +**Weaknesses**: Nuances in dialects might pose challenges. + +**Pseudo Code**: +```vbnet +RECEIVE input_text, target_language +TRANSLATE input_text TO target_language +RETURN translated_text +``` + +# Swarm Lambda: Trend Tracker +**Overview**: Monitors and predicts trends based on data. +**Strengths**: Proactive trend identification. +**Weaknesses**: Requires continuous data stream. + +**Pseudo Code**: +```sql +COLLECT data_over_time +ANALYZE data_trends +PREDICT upcoming_trends +RETURN trend_forecast +``` + +# Swarm Mu: Financial Forecaster +**Overview**: Analyzes financial data to predict market movements. +**Strengths**: In-depth financial analytics. +**Weaknesses**: Market volatility can affect predictions. + +**Pseudo Code**: +```sql +GATHER financial_data +COMPUTE statistical_analysis +FORECAST market_movements +RETURN financial_projections +``` + +# Swarm Nu: Network Navigator +**Overview**: Optimizes and manages network traffic. +**Strengths**: Efficient traffic management. +**Weaknesses**: Depends on network infrastructure. + +**Pseudo Code**: +```sql +MONITOR network_traffic +IDENTIFY congestion_points +OPTIMIZE traffic_flow +RETURN network_status +``` + +# Swarm Xi: Content Curator +**Overview**: Gathers and presents content based on user preferences. +**Strengths**: Personalized content delivery. +**Weaknesses**: Limited by available content sources. + +**Pseudo Code**: +```sql +DEFINE user_preferences +SEARCH content_sources +FILTER content_matching_preferences +DISPLAY curated_content +``` + diff --git a/docs_edit/features/SMAPS.md b/docs_edit/features/SMAPS.md new file mode 100644 index 00000000..c1e60de3 --- /dev/null +++ b/docs_edit/features/SMAPS.md @@ -0,0 +1,50 @@ +# Swarms Multi-Agent Permissions System (SMAPS) + +## Description +SMAPS is a robust permissions management system designed to integrate seamlessly with Swarm's multi-agent AI framework. Drawing inspiration from Amazon's IAM, SMAPS ensures secure, granular control over agent actions while allowing for collaborative human-in-the-loop interventions. + +## Technical Specification + +### 1. Components + +- **User Management**: Handle user registrations, roles, and profiles. +- **Agent Management**: Register, monitor, and manage AI agents. +- **Permissions Engine**: Define and enforce permissions based on roles. +- **Multiplayer Interface**: Allows multiple human users to intervene, guide, or collaborate on tasks being executed by AI agents. + +### 2. Features + +- **Role-Based Access Control (RBAC)**: + - Users can be assigned predefined roles (e.g., Admin, Agent Supervisor, Collaborator). + - Each role has specific permissions associated with it, defining what actions can be performed on AI agents or tasks. + +- **Dynamic Permissions**: + - Create custom roles with specific permissions. + - Permissions granularity: From broad (e.g., view all tasks) to specific (e.g., modify parameters of a particular agent). + +- **Multiplayer Collaboration**: + - Multiple users can join a task in real-time. + - Collaborators can provide real-time feedback or guidance to AI agents. + - A voting system for decision-making when human intervention is required. + +- **Agent Supervision**: + - Monitor agent actions in real-time. + - Intervene, if necessary, to guide agent actions based on permissions. + +- **Audit Trail**: + - All actions, whether performed by humans or AI agents, are logged. + - Review historical actions, decisions, and interventions for accountability and improvement. + +### 3. Security + +- **Authentication**: Secure login mechanisms with multi-factor authentication options. +- **Authorization**: Ensure users and agents can only perform actions they are permitted to. +- **Data Encryption**: All data, whether at rest or in transit, is encrypted using industry-standard protocols. + +### 4. Integration + +- **APIs**: Expose APIs for integrating SMAPS with other systems or for extending its capabilities. +- **SDK**: Provide software development kits for popular programming languages to facilitate integration and extension. + +## Documentation Description +Swarms Multi-Agent Permissions System (SMAPS) offers a sophisticated permissions management mechanism tailored for multi-agent AI frameworks. It combines the robustness of Amazon IAM-like permissions with a unique "multiplayer" feature, allowing multiple humans to collaboratively guide AI agents in real-time. This ensures not only that tasks are executed efficiently but also that they uphold the highest standards of accuracy and ethics. With SMAPS, businesses can harness the power of swarms with confidence, knowing that they have full control and transparency over their AI operations. diff --git a/docs_edit/features/agent_archive.md b/docs_edit/features/agent_archive.md new file mode 100644 index 00000000..d69e18ce --- /dev/null +++ b/docs_edit/features/agent_archive.md @@ -0,0 +1,73 @@ +# AgentArchive Documentation +## Swarms Multi-Agent Framework + +**AgentArchive is an advanced feature crafted to archive, bookmark, and harness the transcripts of agent runs. It promotes the storing and leveraging of successful agent interactions, offering a powerful means for users to derive "recipes" for future agents. Furthermore, with its public archive feature, users can contribute to and benefit from the collective wisdom of the community.** + +--- + +## Overview: + +AgentArchive empowers users to: +1. Preserve complete transcripts of agent instances. +2. Bookmark and annotate significant runs. +3. Categorize runs using various tags. +4. Transform successful runs into actionable "recipes". +5. Publish and access a shared knowledge base via a public archive. + +--- + +## Features: + +### 1. Archiving: + +- **Save Transcripts**: Retain the full narrative of an agent's interaction and choices. +- **Searchable Database**: Dive into archives using specific keywords, timestamps, or tags. + +### 2. Bookmarking: + +- **Highlight Essential Runs**: Designate specific agent runs for future reference. +- **Annotations**: Embed notes or remarks to bookmarked runs for clearer understanding. + +### 3. Tagging: + +Organize and classify agent runs via: +- **Prompt**: The originating instruction that triggered the agent run. +- **Tasks**: Distinct tasks or operations executed by the agent. +- **Model**: The specific AI model or iteration used during the interaction. +- **Temperature (Temp)**: The set randomness or innovation level for the agent. + +### 4. Recipe Generation: + +- **Standardization**: Convert successful run transcripts into replicable "recipes". +- **Guidance**: Offer subsequent agents a structured approach, rooted in prior successes. +- **Evolution**: Periodically refine recipes based on newer, enhanced runs. + +### 5. Public Archive & Sharing: + +- **Publish Successful Runs**: Users can choose to share their successful agent runs. +- **Collaborative Knowledge Base**: Access a shared repository of successful agent interactions from the community. +- **Ratings & Reviews**: Users can rate and review shared runs, highlighting particularly effective "recipes." +- **Privacy & Redaction**: Ensure that any sensitive information is automatically redacted before publishing. + +--- + +## Benefits: + +1. **Efficiency**: Revisit past agent activities to inform and guide future decisions. +2. **Consistency**: Guarantee a uniform approach to recurring challenges, leading to predictable and trustworthy outcomes. +3. **Collaborative Learning**: Tap into a reservoir of shared experiences, fostering community-driven learning and growth. +4. **Transparency**: By sharing successful runs, users can build trust and contribute to the broader community's success. + +--- + +## Usage: + +1. **Access AgentArchive**: Navigate to the dedicated section within the Swarms Multi-Agent Framework dashboard. +2. **Search, Filter & Organize**: Utilize the search bar and tagging system for precise retrieval. +3. **Bookmark, Annotate & Share**: Pin important runs, add notes, and consider sharing with the broader community. +4. **Engage with Public Archive**: Explore, rate, and apply shared knowledge to enhance agent performance. + +--- + +With AgentArchive, users not only benefit from their past interactions but can also leverage the collective expertise of the Swarms community, ensuring continuous improvement and shared success. + diff --git a/docs_edit/features/fail_protocol.md b/docs_edit/features/fail_protocol.md new file mode 100644 index 00000000..cc0a6b99 --- /dev/null +++ b/docs_edit/features/fail_protocol.md @@ -0,0 +1,67 @@ +# Swarms Multi-Agent Framework Documentation + +## Table of Contents +- Agent Failure Protocol +- Swarm Failure Protocol + +--- + +## Agent Failure Protocol + +### 1. Overview +Agent failures may arise from bugs, unexpected inputs, or external system changes. This protocol aims to diagnose, address, and prevent such failures. + +### 2. Root Cause Analysis +- **Data Collection**: Record the task, inputs, and environmental variables present during the failure. +- **Diagnostic Tests**: Run the agent in a controlled environment replicating the failure scenario. +- **Error Logging**: Analyze error logs to identify patterns or anomalies. + +### 3. Solution Brainstorming +- **Code Review**: Examine the code sections linked to the failure for bugs or inefficiencies. +- **External Dependencies**: Check if external systems or data sources have changed. +- **Algorithmic Analysis**: Evaluate if the agent's algorithms were overwhelmed or faced an unhandled scenario. + +### 4. Risk Analysis & Solution Ranking +- Assess the potential risks associated with each solution. +- Rank solutions based on: + - Implementation complexity + - Potential negative side effects + - Resource requirements +- Assign a success probability score (0.0 to 1.0) based on the above factors. + +### 5. Solution Implementation +- Implement the top 3 solutions sequentially, starting with the highest success probability. +- If all three solutions fail, trigger the "Human-in-the-Loop" protocol. + +--- + +## Swarm Failure Protocol + +### 1. Overview +Swarm failures are more complex, often resulting from inter-agent conflicts, systemic bugs, or large-scale environmental changes. This protocol delves deep into such failures to ensure the swarm operates optimally. + +### 2. Root Cause Analysis +- **Inter-Agent Analysis**: Examine if agents were in conflict or if there was a breakdown in collaboration. +- **System Health Checks**: Ensure all system components supporting the swarm are operational. +- **Environment Analysis**: Investigate if external factors or systems impacted the swarm's operation. + +### 3. Solution Brainstorming +- **Collaboration Protocols**: Review and refine how agents collaborate. +- **Resource Allocation**: Check if the swarm had adequate computational and memory resources. +- **Feedback Loops**: Ensure agents are effectively learning from each other. + +### 4. Risk Analysis & Solution Ranking +- Assess the potential systemic risks posed by each solution. +- Rank solutions considering: + - Scalability implications + - Impact on individual agents + - Overall swarm performance potential +- Assign a success probability score (0.0 to 1.0) based on the above considerations. + +### 5. Solution Implementation +- Implement the top 3 solutions sequentially, prioritizing the one with the highest success probability. +- If all three solutions are unsuccessful, invoke the "Human-in-the-Loop" protocol for expert intervention. + +--- + +By following these protocols, the Swarms Multi-Agent Framework can systematically address and prevent failures, ensuring a high degree of reliability and efficiency. diff --git a/docs_edit/features/human_in_loop.md b/docs_edit/features/human_in_loop.md new file mode 100644 index 00000000..0630c312 --- /dev/null +++ b/docs_edit/features/human_in_loop.md @@ -0,0 +1,49 @@ +# Human-in-the-Loop Task Handling Protocol + +## Overview + +The Swarms Multi-Agent Framework recognizes the invaluable contributions humans can make, especially in complex scenarios where nuanced judgment is required. The "Human-in-the-Loop Task Handling Protocol" ensures that when agents encounter challenges they cannot handle autonomously, the most capable human collaborator is engaged to provide guidance, based on their skills and expertise. + +## Protocol Steps + +### 1. Task Initiation & Analysis + +- When a task is initiated, agents first analyze the task's requirements. +- The system maintains an understanding of each task's complexity, requirements, and potential challenges. + +### 2. Automated Resolution Attempt + +- Agents first attempt to resolve the task autonomously using their algorithms and data. +- If the task can be completed without issues, it progresses normally. + +### 3. Challenge Detection + +- If agents encounter challenges or uncertainties they cannot resolve, the "Human-in-the-Loop" protocol is triggered. + +### 4. Human Collaborator Identification + +- The system maintains a dynamic profile of each human collaborator, cataloging their skills, expertise, and past performance on related tasks. +- Using this profile data, the system identifies the most capable human collaborator to assist with the current challenge. + +### 5. Real-time Collaboration + +- The identified human collaborator is notified and provided with all the relevant information about the task and the challenge. +- Collaborators can provide guidance, make decisions, or even take over specific portions of the task. + +### 6. Task Completion & Feedback Loop + +- Once the challenge is resolved, agents continue with the task until completion. +- Feedback from human collaborators is used to update agent algorithms, ensuring continuous learning and improvement. + +## Best Practices + +1. **Maintain Up-to-date Human Profiles**: Ensure that the skillsets, expertise, and performance metrics of human collaborators are updated regularly. +2. **Limit Interruptions**: Implement mechanisms to limit the frequency of human interventions, ensuring collaborators are not overwhelmed with requests. +3. **Provide Context**: When seeking human intervention, provide collaborators with comprehensive context to ensure they can make informed decisions. +4. **Continuous Training**: Regularly update and train agents based on feedback from human collaborators. +5. **Measure & Optimize**: Monitor the efficiency of the "Human-in-the-Loop" protocol, aiming to reduce the frequency of interventions while maximizing the value of each intervention. +6. **Skill Enhancement**: Encourage human collaborators to continuously enhance their skills, ensuring that the collective expertise of the group grows over time. + +## Conclusion + +The integration of human expertise with AI capabilities is a cornerstone of the Swarms Multi-Agent Framework. This "Human-in-the-Loop Task Handling Protocol" ensures that tasks are executed efficiently, leveraging the best of both human judgment and AI automation. Through collaborative synergy, we can tackle challenges more effectively and drive innovation. diff --git a/docs_edit/features/info_sec.md b/docs_edit/features/info_sec.md new file mode 100644 index 00000000..855995f5 --- /dev/null +++ b/docs_edit/features/info_sec.md @@ -0,0 +1,48 @@ +# Secure Communication Protocols + +## Overview + +The Swarms Multi-Agent Framework prioritizes the security and integrity of data, especially personal and sensitive information. Our Secure Communication Protocols ensure that all communications between agents are encrypted, authenticated, and resistant to tampering or unauthorized access. + +## Features + +### 1. End-to-End Encryption + +- All inter-agent communications are encrypted using state-of-the-art cryptographic algorithms. +- This ensures that data remains confidential and can only be read by the intended recipient agent. + +### 2. Authentication + +- Before initiating communication, agents authenticate each other using digital certificates. +- This prevents impersonation attacks and ensures that agents are communicating with legitimate counterparts. + +### 3. Forward Secrecy + +- Key exchange mechanisms employ forward secrecy, meaning that even if a malicious actor gains access to an encryption key, they cannot decrypt past communications. + +### 4. Data Integrity + +- Cryptographic hashes ensure that the data has not been altered in transit. +- Any discrepancies in data integrity result in the communication being rejected. + +### 5. Zero-Knowledge Protocols + +- When handling especially sensitive data, agents use zero-knowledge proofs to validate information without revealing the actual data. + +### 6. Periodic Key Rotation + +- To mitigate the risk of long-term key exposure, encryption keys are periodically rotated. +- Old keys are securely discarded, ensuring that even if they are compromised, they cannot be used to decrypt communications. + +## Best Practices for Handling Personal and Sensitive Information + +1. **Data Minimization**: Agents should only request and process the minimum amount of personal data necessary for the task. +2. **Anonymization**: Whenever possible, agents should anonymize personal data, stripping away identifying details. +3. **Data Retention Policies**: Personal data should be retained only for the period necessary to complete the task, after which it should be securely deleted. +4. **Access Controls**: Ensure that only authorized agents have access to personal and sensitive information. Implement strict access control mechanisms. +5. **Regular Audits**: Conduct regular security audits to ensure compliance with privacy regulations and to detect any potential vulnerabilities. +6. **Training**: All agents should be regularly updated and trained on the latest security protocols and best practices for handling sensitive data. + +## Conclusion + +Secure communication is paramount in the Swarms Multi-Agent Framework, especially when dealing with personal and sensitive information. Adhering to these protocols and best practices ensures the safety, privacy, and trust of all stakeholders involved. diff --git a/docs_edit/features/promptimizer.md b/docs_edit/features/promptimizer.md new file mode 100644 index 00000000..2fdc81bb --- /dev/null +++ b/docs_edit/features/promptimizer.md @@ -0,0 +1,68 @@ +# Promptimizer Documentation +## Swarms Multi-Agent Framework + +**The Promptimizer Tool stands as a cornerstone innovation within the Swarms Multi-Agent Framework, meticulously engineered to refine and supercharge prompts across diverse categories. Capitalizing on extensive libraries of best-practice prompting techniques, this tool ensures your prompts are razor-sharp, tailored, and primed for optimal outcomes.** + +--- + +## Overview: + +The Promptimizer Tool is crafted to: +1. Rigorously analyze and elevate the quality of provided prompts. +2. Furnish best-in-class recommendations rooted in proven prompting strategies. +3. Serve a spectrum of categories, from technical operations to expansive creative ventures. + +--- + +## Core Features: + +### 1. Deep Prompt Analysis: + +- **Clarity Matrix**: A proprietary algorithm assessing prompt clarity, removing ambiguities and sharpening focus. +- **Efficiency Gauge**: Evaluates the prompt's structure to ensure swift and precise desired results. + +### 2. Adaptive Recommendations: + +- **Technique Engine**: Suggests techniques aligned with the gold standard for the chosen category. +- **Exemplar Database**: Offers an extensive array of high-quality prompt examples for comparison and inspiration. + +### 3. Versatile Category Framework: + +- **Tech Suite**: Optimizes prompts for technical tasks, ensuring actionable clarity. +- **Narrative Craft**: Hones prompts to elicit vivid and coherent stories. +- **Visual Visionary**: Shapes prompts for precise and dynamic visual generation. +- **Sonic Sculptor**: Orchestrates prompts for audio creation, tuning into desired tones and moods. + +### 4. Machine Learning Integration: + +- **Feedback Dynamo**: Harnesses user feedback, continually refining the tool's recommendation capabilities. +- **Live Library Updates**: Periodic syncing with the latest in prompting techniques, ensuring the tool remains at the cutting edge. + +### 5. Collaboration & Sharing: + +- **TeamSync**: Allows teams to collaborate on prompt optimization in real-time. +- **ShareSpace**: Share and access a community-driven repository of optimized prompts, fostering collective growth. + +--- + +## Benefits: + +1. **Precision Engineering**: Harness the power of refined prompts, ensuring desired outcomes are achieved with surgical precision. +2. **Learning Hub**: Immerse in a tool that not only refines but educates, enhancing the user's prompting acumen. +3. **Versatile Mastery**: Navigate seamlessly across categories, ensuring top-tier prompt quality regardless of the domain. +4. **Community-driven Excellence**: Dive into a world of shared knowledge, elevating the collective expertise of the Swarms community. + +--- + +## Usage Workflow: + +1. **Launch the Prompt Optimizer**: Access the tool directly from the Swarms Multi-Agent Framework dashboard. +2. **Prompt Entry**: Input the initial prompt for refinement. +3. **Category Selection**: Pinpoint the desired category for specialized optimization. +4. **Receive & Review**: Engage with the tool's recommendations, comparing original and optimized prompts. +5. **Collaborate, Implement & Share**: Work in tandem with team members, deploy the refined prompt, and consider contributing to the community repository. + +--- + +By integrating the Promptimizer Tool into their workflow, Swarms users stand poised to redefine the boundaries of what's possible, turning each prompt into a beacon of excellence and efficiency. + diff --git a/docs_edit/features/shorthand.md b/docs_edit/features/shorthand.md new file mode 100644 index 00000000..e2732b19 --- /dev/null +++ b/docs_edit/features/shorthand.md @@ -0,0 +1,68 @@ +# Shorthand Communication System +## Swarms Multi-Agent Framework + +**The Enhanced Shorthand Communication System is designed to streamline agent-agent communication within the Swarms Multi-Agent Framework. This system employs concise alphanumeric notations to relay task-specific details to agents efficiently.** + +--- + +## Format: + +The shorthand format is structured as `[AgentType]-[TaskLayer].[TaskNumber]-[Priority]-[Status]`. + +--- + +## Components: + +### 1. Agent Type: +- Denotes the specific agent role, such as: + * `C`: Code agent + * `D`: Data processing agent + * `M`: Monitoring agent + * `N`: Network agent + * `R`: Resource management agent + * `I`: Interface agent + * `S`: Security agent + +### 2. Task Layer & Number: +- Represents the task's category. + * Example: `1.8` signifies Task layer 1, task number 8. + +### 3. Priority: +- Indicates task urgency. + * `H`: High + * `M`: Medium + * `L`: Low + +### 4. Status: +- Gives a snapshot of the task's progress. + * `I`: Initialized + * `P`: In-progress + * `C`: Completed + * `F`: Failed + * `W`: Waiting + +--- + +## Extended Features: + +### 1. Error Codes (for failures): +- `E01`: Resource issues +- `E02`: Data inconsistency +- `E03`: Dependency malfunction +... and more as needed. + +### 2. Collaboration Flag: +- `+`: Denotes required collaboration. + +--- + +## Example Codes: + +- `C-1.8-H-I`: A high-priority coding task that's initializing. +- `D-2.3-M-P`: A medium-priority data task currently in-progress. +- `M-3.5-L-P+`: A low-priority monitoring task in progress needing collaboration. + +--- + +By leveraging the Enhanced Shorthand Communication System, the Swarms Multi-Agent Framework can ensure swift interactions, concise communications, and effective task management. + diff --git a/docs_edit/index.md b/docs_edit/index.md new file mode 100644 index 00000000..9a841fc2 --- /dev/null +++ b/docs_edit/index.md @@ -0,0 +1,16 @@ + +# Swarms + +Orchestrate enterprise-grade agents for multi-agent collaboration and orchestration to automate real-world problems. + +| Core Concepts | How-To Guides | Examples | Community | +|--------------------------------------------------|----------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| +| [Agents](swarms/structs/agent) | [Installing Swarms](swarms/install/install) | [Swarm of Business Analysts for Business Reports](applications/business-analyst-agent) | [Join the Swarms Community!](https://discord.gg/3Zck7nX6) | +| [Memory](swarms/memory/diy_memory) | [Docker Setup](swarms/install/docker_setup) | [Compliance Swarm for Customer Privacy](https://medium.com/@kyeg/building-compliance-agents-with-chroma-db-llama3-sop-prompting-0ed3e73559d2) | [Swarms Ecosystem](https://github.com/kyegomez/swarm-ecosystem) | +| [Tools](swarms/tools/main) | [Create Custom Tools](https://medium.com/@kyeg/the-swarms-tool-system-functions-pydantic-basemodels-as-tools-and-radical-customization-c2a2e227b8ca) | [Self-Replicating Hierarchical Swarms](https://medium.com/@kyeg/announcing-neosapiens-self-replicating-swarms-0a47410aafa7) | [Support Team](https://cal.com/swarms/swarms-onboarding-session) | +| [Tasks](swarms/structs/task) | [Multi-Agent Flows](swarms/structs/agent_rearrange) | | [Book a 1 on 1 Call With Founder: Kye](https://cal.com/swarms/swarms-onboarding-session) | +| [Multi-Agent Orchestration](swarms/structs/agent_rearrange) | [Sequential Workflows](swarms/structs/sequential_workflow) | | | +| | [Connecting LLMs](https://docs.swarms.world/en/latest/swarms/models/custom_model/) | | | +| | [Customizing Agents](./how-to/Customizing-Agents) | | | +| | [Human Input on Execution](./how-to/Human-Input-on-Execution) | | | +| | [Agent Monitoring with AgentOps](./how-to/AgentOps-Observability) | | | \ No newline at end of file diff --git a/docs_edit/mkdocs.yml b/docs_edit/mkdocs.yml new file mode 100644 index 00000000..ac628e89 --- /dev/null +++ b/docs_edit/mkdocs.yml @@ -0,0 +1,167 @@ +docs_dir: '.' # replace with the correct path if your documentation files are not in the same directory as mkdocs.yml +site_name: Swarms Documentation +site_url: https://swarms.apac.ai +site_author: Swarms +site_description: Orchestrate Swarms of Agents From Any Framework Like OpenAI, Langchain, and Etc for Real World Workflow Automation. +repo_name: kyegomez/swarms +repo_url: https://github.com/kyegomez/swarms +edit_uri: https://github.com/kyegomez/swarms/tree/main/docs +copyright: TGSC Corp 2024. All rights reserved. + + +plugins: + # - glightbox + - search + - git-authors + - mkdocs-jupyter: + kernel_name: python3 + execute: false + include_source: True + include_requirejs: true + - mkdocstrings: + default_handler: python + handlers: + python: + options: + parameter_headings: true + paths: [supervision] + load_external_modules: true + allow_inspection: true + show_bases: true + group_by_category: true + docstring_style: google + show_symbol_type_heading: true + show_symbol_type_toc: true + show_category_heading: true + domains: [std, py] + - git-committers: + repository: kyegomez/swarms + branch: master + # token: !ENV ["GITHUB_TOKEN"] + - git-revision-date-localized: + enable_creation_date: true +extra_css: + - assets/css/extra.css +extra: + social: + - icon: fontawesome/brands/twitter + link: https://x.com/KyeGomezB + - icon: fontawesome/brands/github + link: https://github.com/kyegomez/swarms +theme: + name: material + custom_dir: overrides + logo: assets/img/SwarmsLogoIcon.png + palette: + # Palette toggle for light mode + - scheme: default + primary: black + toggle: + icon: material/brightness-7 + name: Switch to dark mode + # Palette toggle for dark mode + - scheme: slate + primary: black + toggle: + icon: material/brightness-4 + name: Switch to light mode + features: + - content.code.copy + - content.code.annotate + - navigation.tabs + - navigation.sections + - navigation.expand + - navigation.top + - announce.dismiss +markdown_extensions: + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - admonition + - pymdownx.inlinehilite + - pymdownx.snippets + - pymdownx.superfences + - pymdownx.details + - pymdownx.tabbed + - tables + - def_list + - footnotes +nav: + - Home: + - Overview: "index.md" + - Installation Guide: "swarms/install/install.md" + - Framework: "swarms/index.md" + - Documentation: + - Overview: "swarms/framework_structure.md" + - Agents: + - Agents Overview: "swarms/structs/index.md" + - Agents with Tools: "swarms/tools/main.md" + - Build Agents: "swarms/structs/diy_your_own_agent.md" + - Custom Vector Memory Databases: "swarms/memory/diy_memory.md" + - Short Term Memory: "swarms/memory/short_term_memory.md" + - Models: + - How to Create A Custom Language Model: "swarms/models/custom_model.md" + - Models Available: "swarms/models/index.md" + - MultiModal Models Available: "swarms/models/multimodal_models.md" + - Deploying Azure OpenAI in Production A Comprehensive Guide: "swarms/models/azure_openai.md" + - Language Models: + - BaseLLM: "swarms/models/base_llm.md" + - HuggingFaceLLM: "swarms/models/huggingface.md" + - Anthropic: "swarms/models/anthropic.md" + - OpenAIChat: "swarms/models/openai.md" + - MultiModal Models: + - BaseMultiModalModel: "swarms/models/base_multimodal_model.md" + - Fuyu: "swarms/models/fuyu.md" + - Vilt: "swarms/models/vilt.md" + - Idefics: "swarms/models/idefics.md" + - Kosmos: "swarms/models/kosmos.md" + - Nougat: "swarms/models/nougat.md" + - Dalle3: "swarms/models/dalle3.md" + - GPT4VisionAPI: "swarms/models/gpt4v.md" + - GPT4o: "swarms/models/gpt4o.md" + - Multi-Agent Collaboration: + - Overview: "swarms/structs/multi_agent_orchestration.md" + - Workflow: "swarms/structs/workflow.md" + - Multi-Agent Orchestration: "swarms/structs/multi_agent_orchestration.md" + - Structs: + - Foundational Structures: + - Agent: "swarms/structs/agent.md" + - BaseStructure: "swarms/structs/basestructure.md" + - Task: "swarms/structs/task.md" + - YamlModel: "swarms/structs/yaml_model.md" + - BaseWorkflow: "swarms/structs/baseworkflow.md" + - Workflows: + - ConcurrentWorkflow: "swarms/structs/concurrentworkflow.md" + - SequentialWorkflow: "swarms/structs/sequential_workflow.md" + - Multi Agent Architectures: + - Conversation: "swarms/structs/conversation.md" + - SwarmNetwork: "swarms/structs/swarmnetwork.md" + - MajorityVoting: "swarms/structs/majorityvoting.md" + - AgentRearrange: "swarms/structs/agent_rearrange.md" + - RoundRobin: "swarms/structs/round_robin_swarm.md" + - Mixture of Agents: "swarms/structs/moa.md" + - Guides: + - Models: + - How to Create A Custom Language Model: "swarms/models/custom_model.md" + - Deploying Azure OpenAI in Production, A Comprehensive Guide: "swarms/models/azure_openai.md" + - Agents: + - Agent: "examples/flow.md" + - DIY Build Your Own Agent: "diy_your_own_agent.md" + - Equipping Autonomous Agents with Tools: "examples/tools_agent.md" + - Swarms: + - SequentialWorkflow: "examples/reliable_autonomous_agents.md" + - Swarms Cloud API: + - Overview: "swarms_cloud/main.md" + - Available Models: "swarms_cloud/available_models.md" + - Migrate from OpenAI to Swarms in 3 lines of code: "swarms_cloud/migrate_openai.md" + - Getting Started with SOTA Vision Language Models VLM: "swarms_cloud/getting_started.md" + - Enterprise Guide to High-Performance Multi-Agent LLM Deployments: "swarms_cloud/production_deployment.md" + - Under The Hood The Swarm Cloud Serving Infrastructure: "swarms_cloud/architecture.md" + - Contribute: + - Contributing: "contributing.md" + - Docker Setup: "swarms/install/docker_setup.md" + - Multi-Agent Repository Template: "swarms/install/multi_agent_template.md" + - Glossary + Further Reading: + - Agent Glossary: "swarms/glossary.md" + - List of The Best Multi-Agent Papers: "swarms/papers.md" \ No newline at end of file diff --git a/docs_edit/overrides/main.html b/docs_edit/overrides/main.html new file mode 100644 index 00000000..43a3a50a --- /dev/null +++ b/docs_edit/overrides/main.html @@ -0,0 +1,9 @@ +{% extends "base.html" %} + + + +{% block announce %} +

+ Star and contribute to Swarms on GitHub! +
+{% endblock %} \ No newline at end of file diff --git a/docs_edit/purpose/limits_of_individual_agents.md b/docs_edit/purpose/limits_of_individual_agents.md new file mode 100644 index 00000000..6a05daa8 --- /dev/null +++ b/docs_edit/purpose/limits_of_individual_agents.md @@ -0,0 +1,55 @@ +# The Limits of Individual Agents + +![Reliable Agents](docs/assets/img/reliabilitythrough.png) + + +Individual agents have pushed the boundaries of what machines can learn and accomplish. However, despite their impressive capabilities, these agents face inherent limitations that can hinder their effectiveness in complex, real-world applications. This blog explores the critical constraints of individual agents, such as context window limits, hallucination, single-task threading, and lack of collaboration, and illustrates how multi-agent collaboration can address these limitations. In short, + +- Context Window Limits +- Single Task Execution +- Hallucination +- No collaboration + + + +#### Context Window Limits + +One of the most significant constraints of individual agents, particularly in the domain of language models, is the context window limit. This limitation refers to the maximum amount of information an agent can consider at any given time. For instance, many language models can only process a fixed number of tokens (words or characters) in a single inference, restricting their ability to understand and generate responses based on longer texts. This limitation can lead to a lack of coherence in longer compositions and an inability to maintain context in extended conversations or documents. + +#### Hallucination + +Hallucination in AI refers to the phenomenon where an agent generates information that is not grounded in the input data or real-world facts. This can manifest as making up facts, entities, or events that do not exist or are incorrect. Hallucinations pose a significant challenge in ensuring the reliability and trustworthiness of AI-generated content, particularly in critical applications such as news generation, academic research, and legal advice. + +#### Single Task Threading + +Individual agents are often designed to excel at specific tasks, leveraging their architecture and training data to optimize performance in a narrowly defined domain. However, this specialization can also be a drawback, as it limits the agent's ability to multitask or adapt to tasks that fall outside its primary domain. Single-task threading means an agent may excel in language translation but struggle with image recognition or vice versa, necessitating the deployment of multiple specialized agents for comprehensive AI solutions. + +#### Lack of Collaboration + +Traditional AI agents operate in isolation, processing inputs and generating outputs independently. This isolation limits their ability to leverage diverse perspectives, share knowledge, or build upon the insights of other agents. In complex problem-solving scenarios, where multiple facets of a problem need to be addressed simultaneously, this lack of collaboration can lead to suboptimal solutions or an inability to tackle multifaceted challenges effectively. + +# The Elegant yet Simple Solution + +- ## Multi-Agent Collaboration + +Recognizing the limitations of individual agents, researchers and practitioners have explored the potential of multi-agent collaboration as a means to transcend these constraints. Multi-agent systems comprise several agents that can interact, communicate, and collaborate to achieve common goals or solve complex problems. This collaborative approach offers several advantages: + +#### Overcoming Context Window Limits + +By dividing a large task among multiple agents, each focusing on different segments of the problem, multi-agent systems can effectively overcome the context window limits of individual agents. For instance, in processing a long document, different agents could be responsible for understanding and analyzing different sections, pooling their insights to generate a coherent understanding of the entire text. + +#### Mitigating Hallucination + +Through collaboration, agents can cross-verify facts and information, reducing the likelihood of hallucinations. If one agent generates a piece of information, other agents can provide checks and balances, verifying the accuracy against known data or through consensus mechanisms. + +#### Enhancing Multitasking Capabilities + +Multi-agent systems can tackle tasks that require a diverse set of skills by leveraging the specialization of individual agents. For example, in a complex project that involves both natural language processing and image analysis, one agent specialized in text can collaborate with another specialized in visual data, enabling a comprehensive approach to the task. + +#### Facilitating Collaboration and Knowledge Sharing + +Multi-agent collaboration inherently encourages the sharing of knowledge and insights, allowing agents to learn from each other and improve their collective performance. This can be particularly powerful in scenarios where iterative learning and adaptation are crucial, such as dynamic environments or tasks that evolve over time. + +### Conclusion + +While individual AI agents have made remarkable strides in various domains, their inherent limitations necessitate innovative approaches to unlock the full potential of artificial intelligence. Multi-agent collaboration emerges as a compelling solution, offering a pathway to transcend individual constraints through collective intelligence. By harnessing the power of collaborative AI, we can address more complex, multifaceted problems, paving the way for more versatile, efficient, and effective AI systems in the future. \ No newline at end of file diff --git a/docs_edit/purpose/why.md b/docs_edit/purpose/why.md new file mode 100644 index 00000000..5293de23 --- /dev/null +++ b/docs_edit/purpose/why.md @@ -0,0 +1,134 @@ +# The Swarms Framework: Orchestrating Agents for Enterprise Automation + +In the rapidly evolving landscape of artificial intelligence (AI) and automation, a new paradigm is emerging: the orchestration of multiple agents working in collaboration to tackle complex tasks. This approach, embodied by the Swarms Framework, aims to address the fundamental limitations of individual agents and unlocks the true potential of AI-driven automation in enterprise operations. + +Individual agents are plagued by the same issues: short term memory constraints, hallucinations, single task limitations, lack of collaboration, and cost inefficiences. + +[Learn more here from a list of compiled agent papers](https://github.com/kyegomez/awesome-multi-agent-papers) + +## The Purpose of Swarms: Overcoming Agent Limitations + +Individual agents, while remarkable in their own right, face several inherent challenges that hinder their ability to effectively automate enterprise operations at scale. These limitations include: + +1. Short-Term Memory Constraints +2. Hallucination and Factual Inconsistencies +3. Single-Task Limitations +4. Lack of Collaborative Capabilities +5. Cost Inefficiencies + +By orchestrating multiple agents to work in concert, the Swarms Framework directly tackles these limitations, paving the way for more efficient, reliable, and cost-effective enterprise automation. + +### Limitation 1: Short-Term Memory Constraints + +Many AI agents, particularly those based on large language models, suffer from short-term memory constraints. These agents can effectively process and respond to prompts, but their ability to retain and reason over information across multiple interactions or tasks is limited. This limitation can be problematic in enterprise environments, where complex workflows often involve retaining and referencing contextual information over extended periods. + +The Swarms Framework addresses this limitation by leveraging the collective memory of multiple agents working in tandem. While individual agents may have limited short-term memory, their combined memory pool becomes significantly larger, enabling the retention and retrieval of contextual information over extended periods. This collective memory is facilitated by agents specializing in information storage and retrieval, such as those based on systems like Llama Index or Pinecone. + +### Limitation 2: Hallucination and Factual Inconsistencies + +Another challenge faced by many AI agents is the tendency to generate responses that may contain factual inconsistencies or hallucinations -- information that is not grounded in reality or the provided context. This issue can undermine the reliability and trustworthiness of automated systems, particularly in domains where accuracy and consistency are paramount. + +The Swarms Framework mitigates this limitation by employing multiple agents with diverse knowledge bases and capabilities. By leveraging the collective intelligence of these agents, the framework can cross-reference and validate information, reducing the likelihood of hallucinations and factual inconsistencies. Additionally, specialized agents can be tasked with fact-checking and verification, further enhancing the overall reliability of the system. + +### Limitation 3: Single-Task Limitations + +Most individual AI agents are designed and optimized for specific tasks or domains, limiting their ability to handle complex, multi-faceted workflows that often characterize enterprise operations. While an agent may excel at a particular task, such as natural language processing or data analysis, it may struggle with other aspects of a larger workflow, such as task coordination or decision-making. + +The Swarms Framework overcomes this limitation by orchestrating a diverse ensemble of agents, each specializing in different tasks or capabilities. By intelligently combining and coordinating these agents, the framework can tackle complex, multi-threaded workflows that span various domains and task types. This modular approach allows for the seamless integration of new agents as they become available, enabling the continuous expansion and enhancement of the system's capabilities. + +### Limitation 4: Lack of Collaborative Capabilities + +Most AI agents are designed to operate independently, lacking the ability to effectively collaborate with other agents or coordinate their actions towards a common goal. This limitation can hinder the scalability and efficiency of automated systems, particularly in enterprise environments where tasks often require the coordination of multiple agents or systems. + +The Swarms Framework addresses this limitation by introducing a layer of coordination and collaboration among agents. Through specialized coordination agents and communication protocols, the framework enables agents to share information, divide tasks, and synchronize their actions. This collaborative approach not only increases efficiency but also enables the emergence of collective intelligence, where the combined capabilities of multiple agents surpass the sum of their individual abilities. + +### Limitation 5: Cost Inefficiencies + +Running large AI models or orchestrating multiple agents can be computationally expensive, particularly in enterprise environments where scalability and cost-effectiveness are critical considerations. Inefficient resource utilization or redundant computations can quickly escalate costs, making widespread adoption of AI-driven automation financially prohibitive. + +The Swarms Framework tackles this limitation by optimizing resource allocation and workload distribution among agents. By intelligently assigning tasks to the most appropriate agents and leveraging agent specialization, the framework minimizes redundant computations and improves overall resource utilization. Additionally, the framework can dynamically scale agent instances based on demand, ensuring that computational resources are allocated efficiently and costs are minimized. + +## The Swarms Framework: A Holistic Approach to Enterprise Automation + +The Swarms Framework is a comprehensive solution that addresses the limitations of individual agents by orchestrating their collective capabilities. By integrating agents from various frameworks, including LangChain, AutoGPT, Llama Index, and others, the framework leverages the strengths of each agent while mitigating their individual weaknesses. + +At its core, the Swarms Framework operates on the principle of multi-agent collaboration. By introducing specialized coordination agents and communication protocols, the framework enables agents to share information, divide tasks, and synchronize their actions towards a common goal. This collaborative approach not only increases efficiency but also enables the emergence of collective intelligence, where the combined capabilities of multiple agents surpass the sum of their individual abilities. + +The framework's architecture is modular and extensible, allowing for the seamless integration of new agents as they become available. This flexibility ensures that the system's capabilities can continuously expand and adapt to evolving enterprise needs and technological advancements. + + +## Benefits of the Swarms Framework + +The adoption of the Swarms Framework in enterprise environments offers numerous benefits: + +1. Increased Efficiency and Scalability +2. Improved Reliability and Accuracy +3. Adaptability and Continuous Improvement +4. Cost Optimization +5. Enhanced Security and Compliance + +## Increased Efficiency and Scalability + +By orchestrating the collective capabilities of multiple agents, the Swarms Framework enables the efficient execution of complex, multi-threaded workflows. Tasks can be parallelized and distributed across specialized agents, reducing bottlenecks and increasing overall throughput. Additionally, the framework's modular design and ability to dynamically scale agent instances based on demand ensure that the system can adapt to changing workloads and scale seamlessly as enterprise needs evolve. + +## Improved Reliability and Accuracy + +The collaborative nature of the Swarms Framework reduces the risk of hallucinations and factual inconsistencies that can arise from individual agents. By leveraging the collective knowledge and diverse perspectives of multiple agents, the framework can cross-reference and validate information, enhancing the overall reliability and accuracy of its outputs. + +Additionally, the framework's ability to incorporate specialized fact-checking and verification agents further strengthens the trustworthiness of the system's outcomes, ensuring that critical decisions and actions are based on accurate and reliable information. + +## Adaptability and Continuous Improvement + +The modular architecture of the Swarms Framework allows for the seamless integration of new agents as they become available, enabling the continuous expansion and enhancement of the system's capabilities. As new AI models, algorithms, or data sources emerge, the framework can readily incorporate them, ensuring that enterprise operations remain at the forefront of technological advancements. + +Furthermore, the framework's monitoring and analytics capabilities provide valuable insights into system performance, enabling the identification of areas for improvement and the optimization of agent selection, task assignments, and resource allocation strategies over time. + +## Cost Optimization + +By intelligently orchestrating the collaboration of multiple agents, the Swarms Framework optimizes resource utilization and minimizes redundant computations. This efficient use of computational resources translates into cost savings, making the widespread adoption of AI-driven automation more financially viable for enterprises. + +The framework's ability to dynamically scale agent instances based on demand further contributes to cost optimization, ensuring that resources are allocated only when needed and minimizing idle or underutilized instances. + +## Enhanced Security and Compliance + +In enterprise environments, ensuring the security and compliance of automated systems is paramount. The Swarms Framework addresses these concerns by incorporating robust security measures and compliance controls. + +The framework's centralized Memory Manager component enables the implementation of access control mechanisms and data encryption, protecting sensitive information from unauthorized access or breaches. Additionally, the framework's modular design allows for the integration of specialized agents focused on compliance monitoring and auditing, ensuring that enterprise operations adhere to relevant regulations and industry standards. + +## Real-World Applications and Use Cases + +The Swarms Framework finds applications across a wide range of enterprise domains, enabling organizations to automate complex operations and streamline their workflows. Here are some examples of real-world use cases: + +1. Intelligent Process Automation (IPA) +2. Customer Service and Support +3. Fraud Detection and Risk Management +4. Supply Chain Optimization +5. Research and Development + +## Intelligent Process Automation (IPA) + +In the realm of business process automation, the Swarms Framework can orchestrate agents to automate and optimize complex workflows spanning multiple domains and task types. By combining agents specialized in areas such as natural language processing, data extraction, decision-making, and task coordination, the framework can streamline and automate processes that traditionally required manual intervention or coordination across multiple systems. + +## Customer Service and Support + +The framework's ability to integrate agents with diverse capabilities, such as natural language processing, knowledge retrieval, and decision-making, makes it well-suited for automating customer service and support operations. Agents can collaborate to understand customer inquiries, retrieve relevant information from knowledge bases, and provide accurate and personalized responses, improving customer satisfaction and reducing operational costs. + +## Fraud Detection and Risk Management + +In the financial and cybersecurity domains, the Swarms Framework can orchestrate agents specialized in data analysis, pattern recognition, and risk assessment to detect and mitigate fraudulent activities or security threats. By combining the collective intelligence of these agents, the framework can identify complex patterns and anomalies that may be difficult for individual agents to detect, enhancing the overall effectiveness of fraud detection and risk management strategies. + +## Supply Chain Optimization + +The complexity of modern supply chains often requires the coordination of multiple systems and stakeholders. The Swarms Framework can integrate agents specialized in areas such as demand forecasting, inventory management, logistics optimization, and supplier coordination to streamline and optimize supply chain operations. By orchestrating the collective capabilities of these agents, the framework can identify bottlenecks, optimize resource allocation, and facilitate seamless collaboration among supply chain partners. + +## Research and Development + +In research and development environments, the Swarms Framework can accelerate innovation by enabling the collaboration of agents specialized in areas such as literature review, data analysis, hypothesis generation, and experiment design. By orchestrating these agents, the framework can facilitate the exploration of new ideas, identify promising research directions, and streamline the iterative process of scientific inquiry. + +# Conclusion + +The Swarms Framework represents a paradigm shift in the field of enterprise automation, addressing the limitations of individual agents by orchestrating their collective capabilities. By integrating agents from various frameworks and enabling multi-agent collaboration, the Swarms Framework overcomes challenges such as short-term memory constraints, hallucinations, single-task limitations, lack of collaboration, and cost inefficiencies. + +Through its modular architecture, centralized coordination, and advanced monitoring and analytics capabilities, the Swarms Framework empowers enterprises to automate complex operations with increased efficiency, reliability, and adaptability. It unlocks the true potential of AI-driven automation, enabling organizations to stay ahead of the curve and thrive in an ever-evolving technological landscape. + +As the field of artificial intelligence continues to advance, the Swarms Framework stands as a robust and flexible solution, ready to embrace new developments and seamlessly integrate emerging agents and capabilities. By harnessing the power of collective intelligence, the framework paves the way for a future where enterprises can leverage the full potential of AI to drive innovation, optimize operations, and gain a competitive edge in their respective industries. \ No newline at end of file diff --git a/docs_edit/purpose/why_swarms.md b/docs_edit/purpose/why_swarms.md new file mode 100644 index 00000000..9e75026e --- /dev/null +++ b/docs_edit/purpose/why_swarms.md @@ -0,0 +1,53 @@ +# Why Swarms? + +The need for multiple agents to work together in artificial intelligence (AI) and particularly in the context of Large Language Models (LLMs) stems from several inherent limitations and challenges in handling complex, dynamic, and multifaceted tasks with single-agent systems. Collaborating with multiple agents offers a pathway to enhance reliability, computational efficiency, cognitive diversity, and problem-solving capabilities. This section delves into the rationale behind employing multi-agent systems and strategizes on overcoming the associated expenses, such as API bills and hosting costs. + +### Why Multiple Agents Are Necessary + +#### 1. **Cognitive Diversity** + +Different agents can bring varied perspectives, knowledge bases, and problem-solving approaches to a task. This diversity is crucial in complex problem-solving scenarios where a single approach might not be sufficient. Cognitive diversity enhances creativity, leading to innovative solutions and the ability to tackle a broader range of problems. + +#### 2. **Specialization and Expertise** + +In many cases, tasks are too complex for a single agent to handle efficiently. By dividing the task among multiple specialized agents, each can focus on a segment where it excels, thereby increasing the overall efficiency and effectiveness of the solution. This approach leverages the expertise of individual agents to achieve superior performance in tasks that require multifaceted knowledge and skills. + +#### 3. **Scalability and Flexibility** + +Multi-agent systems can more easily scale to handle large-scale or evolving tasks. Adding more agents to the system can increase its capacity or capabilities, allowing it to adapt to larger workloads or new types of tasks. This scalability is essential in dynamic environments where the demand and nature of tasks can change rapidly. + +#### 4. **Robustness and Redundancy** + +Collaboration among multiple agents enhances the system's robustness by introducing redundancy. If one agent fails or encounters an error, others can compensate, ensuring the system remains operational. This redundancy is critical in mission-critical applications where failure is not an option. + +### Overcoming Expenses with API Bills and Hosting + +Deploying multiple agents, especially when relying on cloud-based services or APIs, can incur significant costs. Here are strategies to manage and reduce these expenses: + +#### 1. **Optimize Agent Efficiency** + +Before scaling up the number of agents, ensure each agent operates as efficiently as possible. This can involve refining algorithms, reducing unnecessary API calls, and optimizing data processing to minimize computational requirements and, consequently, the associated costs. + +#### 2. **Use Open Source and Self-Hosted Solutions** + +Where possible, leverage open-source models and technologies that can be self-hosted. While there is an initial investment in setting up the infrastructure, over time, self-hosting can significantly reduce costs related to API calls and reliance on third-party services. + +#### 3. **Implement Intelligent Caching** + +Caching results for frequently asked questions or common tasks can drastically reduce the need for repeated computations or API calls. Intelligent caching systems can determine what information to store and for how long, optimizing the balance between fresh data and computational savings. + +#### 4. **Dynamic Scaling and Load Balancing** + +Use cloud services that offer dynamic scaling and load balancing to adjust the resources allocated based on the current demand. This ensures you're not paying for idle resources during low-usage periods while still being able to handle high demand when necessary. + +#### 5. **Collaborative Cost-Sharing Models** + +In scenarios where multiple stakeholders benefit from the multi-agent system, consider implementing a cost-sharing model. This approach distributes the financial burden among the users or beneficiaries, making it more sustainable. + +#### 6. **Monitor and Analyze Costs** + +Regularly monitor and analyze your usage and associated costs to identify potential savings. Many cloud providers offer tools to track and forecast expenses, helping you to adjust your usage patterns and configurations to minimize costs without sacrificing performance. + +### Conclusion + +The collaboration of multiple agents in AI systems presents a robust solution to the complexity, specialization, scalability, and robustness challenges inherent in single-agent approaches. While the associated costs can be significant, strategic optimization, leveraging open-source technologies, intelligent caching, dynamic resource management, collaborative cost-sharing, and diligent monitoring can mitigate these expenses. By adopting these strategies, organizations can harness the power of multi-agent systems to tackle complex problems more effectively and efficiently, ensuring the sustainable deployment of these advanced technologies. \ No newline at end of file diff --git a/docs_edit/requirements.txt b/docs_edit/requirements.txt new file mode 100644 index 00000000..fda8b460 --- /dev/null +++ b/docs_edit/requirements.txt @@ -0,0 +1,22 @@ +mkdocs +mkdocs-material +mkdocs-glightbox +mkdocs-git-authors-plugin +mkdocs-git-revision-date-plugin +mkdocs-git-committers-plugin +mkdocstrings +mike +mkdocs-jupyter +mkdocs-git-committers-plugin-2 +mkdocs-git-revision-date-localized-plugin +mkdocs-redirects +mkdocs-material-extensions +mkdocs-simple-hooks +mkdocs-awesome-pages-plugin +mkdocs-versioning +mkdocs-mermaid2-plugin +mkdocs-include-markdown-plugin +mkdocs-enumerate-headings-plugin +mkdocs-autolinks-plugin +mkdocs-minify-html-plugin +mkdocs-autolinks-plugin diff --git a/docs_edit/swarms/agents/abstractagent.md b/docs_edit/swarms/agents/abstractagent.md new file mode 100644 index 00000000..8833c164 --- /dev/null +++ b/docs_edit/swarms/agents/abstractagent.md @@ -0,0 +1,123 @@ +# swarms.agents + +## 1. Introduction + +`AbstractAgent` is an abstract class that serves as a foundation for implementing AI agents. An agent is an entity that can communicate with other agents and perform actions. The `AbstractAgent` class allows for customization in the implementation of the `receive` method, enabling different agents to define unique actions for receiving and processing messages. + +`AbstractAgent` provides capabilities for managing tools and accessing memory, and has methods for running, chatting, and stepping through communication with other agents. + +## 2. Class Definition + +```python +class AbstractAgent: + """An abstract class for AI agent. + + An agent can communicate with other agents and perform actions. + Different agents can differ in what actions they perform in the `receive` method. + + Agents are full and completed: + + Agents = llm + tools + memory + """ + + def __init__(self, name: str): + """ + Args: + name (str): name of the agent. + """ + self._name = name + + @property + def name(self): + """Get the name of the agent.""" + return self._name + + def tools(self, tools): + """init tools""" + + def memory(self, memory_store): + """init memory""" + + def reset(self): + """(Abstract method) Reset the agent.""" + + def run(self, task: str): + """Run the agent once""" + + def _arun(self, taks: str): + """Run Async run""" + + def chat(self, messages: List[Dict]): + """Chat with the agent""" + + def _achat(self, messages: List[Dict]): + """Asynchronous Chat""" + + def step(self, message: str): + """Step through the agent""" + + def _astep(self, message: str): + """Asynchronous step""" +``` + +## 3. Functionality and Usage + +The `AbstractAgent` class represents a generic AI agent and provides a set of methods to interact with it. + +To create an instance of an agent, the `name` of the agent should be specified. + +### Core Methods + +#### 1. `reset` + +The `reset` method allows the agent to be reset to its initial state. + +```python +agent.reset() +``` + +#### 2. `run` + +The `run` method allows the agent to perform a specific task. + +```python +agent.run("some_task") +``` + +#### 3. `chat` + +The `chat` method enables communication with the agent through a series of messages. + +```python +messages = [{"id": 1, "text": "Hello, agent!"}, {"id": 2, "text": "How are you?"}] +agent.chat(messages) +``` + +#### 4. `step` + +The `step` method allows the agent to process a single message. + +```python +agent.step("Hello, agent!") +``` + +### Asynchronous Methods + +The class also provides asynchronous variants of the core methods. + +### Additional Functionality + +Additional functionalities for agent initialization and management of tools and memory are also provided. + +```python +agent.tools(some_tools) +agent.memory(some_memory_store) +``` + +## 4. Additional Information and Tips + +When implementing a new agent using the `AbstractAgent` class, ensure that the `receive` method is overridden to define the specific behavior of the agent upon receiving messages. + +## 5. References and Resources + +For further exploration and understanding of AI agents and agent communication, refer to the relevant literature and research on this topic. diff --git a/docs_edit/swarms/agents/idea_to_image.md b/docs_edit/swarms/agents/idea_to_image.md new file mode 100644 index 00000000..41d5b216 --- /dev/null +++ b/docs_edit/swarms/agents/idea_to_image.md @@ -0,0 +1,124 @@ +# `Idea2Image` Documentation + +## Table of Contents + +1. [Introduction](#introduction) +2. [Idea2Image Class](#idea2image-class) + - [Initialization Parameters](#initialization-parameters) +3. [Methods and Usage](#methods-and-usage) + - [llm_prompt Method](#llm-prompt-method) + - [generate_image Method](#generate-image-method) +4. [Examples](#examples) + - [Example 1: Generating an Image](#example-1-generating-an-image) +5. [Additional Information](#additional-information) +6. [References and Resources](#references-and-resources) + +--- + +## 1. Introduction + +Welcome to the documentation for the Swarms library, with a focus on the `Idea2Image` class. This comprehensive guide provides in-depth information about the Swarms library and its core components. Before we dive into the details, it's crucial to understand the purpose and significance of this library. + +### 1.1 Purpose + +The Swarms library aims to simplify interactions with AI models for generating images from text prompts. The `Idea2Image` class is designed to generate images from textual descriptions using the DALLE-3 model and the OpenAI GPT-4 language model. + +### 1.2 Key Features + +- **Image Generation:** Swarms allows you to generate images based on natural language prompts, providing a bridge between textual descriptions and visual content. + +- **Integration with DALLE-3:** The `Idea2Image` class leverages the power of DALLE-3 to create images that match the given textual descriptions. + +- **Language Model Integration:** The class integrates with OpenAI's GPT-3 for prompt refinement, enhancing the specificity of image generation. + +--- + +## 2. Idea2Image Class + +The `Idea2Image` class is a fundamental module in the Swarms library, enabling the generation of images from text prompts. + +### 2.1 Initialization Parameters + +Here are the initialization parameters for the `Idea2Image` class: + +- `image` (str): Text prompt for the image to generate. + +- `openai_api_key` (str): OpenAI API key. This key is used for prompt refinement with GPT-3. If not provided, the class will attempt to use the `OPENAI_API_KEY` environment variable. + +- `cookie` (str): Cookie value for DALLE-3. This cookie is used to interact with the DALLE-3 API. If not provided, the class will attempt to use the `BING_COOKIE` environment variable. + +- `output_folder` (str): Folder to save the generated images. The default folder is "images/". + +### 2.2 Methods + +The `Idea2Image` class provides the following methods: + +- `llm_prompt()`: Returns a prompt for refining the image generation. This method helps improve the specificity of the image generation prompt. + +- `generate_image()`: Generates and downloads the image based on the prompt. It refines the prompt, opens the website with the query, retrieves image URLs, and downloads the images to the specified folder. + +--- + +## 3. Methods and Usage + +Let's explore the methods provided by the `Idea2Image` class and how to use them effectively. + +### 3.1 `llm_prompt` Method + +The `llm_prompt` method returns a refined prompt for generating the image. It's a critical step in improving the specificity and accuracy of the image generation process. The method provides a guide for refining the prompt, helping users describe the desired image more precisely. + +### 3.2 `generate_image` Method + +The `generate_image` method combines the previous methods to execute the whole process of generating and downloading images based on the provided prompt. It's a convenient way to automate the image generation process. + +--- + +## 4. Examples + +Let's dive into practical examples to demonstrate the usage of the `Idea2Image` class. + +### 4.1 Example 1: Generating an Image + +In this example, we create an instance of the `Idea2Image` class and use it to generate an image based on a text prompt: + +```python +from swarms.agents import Idea2Image + +# Create an instance of the Idea2Image class with your prompt and API keys +idea2image = Idea2Image( + image="Fish hivemind swarm in light blue avatar anime in zen garden pond concept art anime art, happy fish, anime scenery", + openai_api_key="your_openai_api_key_here", + cookie="your_cookie_value_here", +) + +# Generate and download the image +idea2image.generate_image() +``` + +--- + +## 5. Additional Information + +Here are some additional tips and information for using the Swarms library and the `Idea2Image` class effectively: + +- Refining the prompt is a crucial step to influence the style, composition, and mood of the generated image. Follow the provided guide in the `llm_prompt` method to create precise prompts. + +- Experiment with different prompts, variations, and editing techniques to create unique and interesting images. + +- You can combine separate DALLE-3 outputs into panoramas and murals by careful positioning and editing. + +- Consider sharing your creations and exploring resources in communities like Reddit r/dalle2 for inspiration and tools. + +- The `output_folder` parameter allows you to specify the folder where generated images will be saved. Ensure that you have the necessary permissions to write to that folder. + +--- + +## 6. References and Resources + +For further information and resources related to the Swarms library and DALLE-3: + +- [DALLE-3 Unofficial API Documentation](https://www.bing.com/images/create): The official documentation for the DALLE-3 Unofficial API, where you can explore additional features and capabilities. + +- [OpenAI GPT-3 Documentation](https://beta.openai.com/docs/): The documentation for OpenAI's GPT-3, which is used for prompt refinement. + +This concludes the documentation for the Swarms library and the `Idea2Image` class. You now have a comprehensive guide on how to generate images from text prompts using DALLE-3 and GPT-3 with Swarms. \ No newline at end of file diff --git a/docs_edit/swarms/agents/message.md b/docs_edit/swarms/agents/message.md new file mode 100644 index 00000000..413ac016 --- /dev/null +++ b/docs_edit/swarms/agents/message.md @@ -0,0 +1,112 @@ +# The Module/Class Name: Message + +In the swarms.agents framework, the class `Message` is used to represent a message with timestamp and optional metadata. + +## Overview and Introduction + +The `Message` class is a fundamental component that enables the representation of messages within an agent system. Messages contain essential information such as the sender, content, timestamp, and optional metadata. + +## Class Definition + +### Constructor: `__init__` + +The constructor of the `Message` class takes three parameters: + +1. `sender` (str): The sender of the message. +2. `content` (str): The content of the message. +3. `metadata` (dict or None): Optional metadata associated with the message. + +### Methods + +1. `__repr__(self)`: Returns a string representation of the `Message` object, including the timestamp, sender, and content. + +```python +class Message: + """ + Represents a message with timestamp and optional metadata. + + Usage + -------------- + mes = Message( + sender = "Kye", + content = "message" + ) + + print(mes) + """ + + def __init__(self, sender, content, metadata=None): + self.timestamp = datetime.datetime.now() + self.sender = sender + self.content = content + self.metadata = metadata or {} + + def __repr__(self): + """ + __repr__ represents the string representation of the Message object. + + Returns: + (str) A string containing the timestamp, sender, and content of the message. + """ + return f"{self.timestamp} - {self.sender}: {self.content}" +``` + +## Functionality and Usage + +The `Message` class represents a message in the agent system. Upon initialization, the `timestamp` is set to the current date and time, and the `metadata` is set to an empty dictionary if no metadata is provided. + +### Usage Example 1 + +Creating a `Message` object and displaying its string representation. + +```python +mes = Message(sender="Kye", content="Hello! How are you?") + +print(mes) +``` + +Output: +``` +2023-09-20 13:45:00 - Kye: Hello! How are you? +``` + +### Usage Example 2 + +Creating a `Message` object with metadata. + +```python +metadata = {"priority": "high", "category": "urgent"} +mes_with_metadata = Message( + sender="Alice", content="Important update", metadata=metadata +) + +print(mes_with_metadata) +``` + +Output: +``` +2023-09-20 13:46:00 - Alice: Important update +``` + +### Usage Example 3 + +Creating a `Message` object without providing metadata. + +```python +mes_no_metadata = Message(sender="Bob", content="Reminder: Meeting at 2PM") + +print(mes_no_metadata) +``` + +Output: +``` +2023-09-20 13:47:00 - Bob: Reminder: Meeting at 2PM +``` + +## Additional Information and Tips + +When creating a new `Message` object, ensure that the required parameters `sender` and `content` are provided. The `timestamp` will automatically be assigned the current date and time. Optional `metadata` can be included to provide additional context or information associated with the message. + +## References and Resources + +For further information on the `Message` class and its usage, refer to the official swarms.agents documentation and relevant tutorials related to message handling and communication within the agent system. diff --git a/docs_edit/swarms/agents/omni_agent.md b/docs_edit/swarms/agents/omni_agent.md new file mode 100644 index 00000000..888e824f --- /dev/null +++ b/docs_edit/swarms/agents/omni_agent.md @@ -0,0 +1,94 @@ +# `OmniModalAgent` Documentation + +## Overview & Architectural Analysis +The `OmniModalAgent` class is at the core of an architecture designed to facilitate dynamic interactions using various tools, through a seamless integration of planning, task execution, and response generation mechanisms. It encompasses multiple modalities including natural language processing, image processing, and more, aiming to provide comprehensive and intelligent responses. + +### Architectural Components: +1. **LLM (Language Model)**: It acts as the foundation, underpinning the understanding and generation of language-based interactions. +2. **Chat Planner**: This component drafts a blueprint for the steps necessary based on the user's input. +3. **Task Executor**: As the name suggests, it's responsible for executing the formulated tasks. +4. **Tools**: A collection of tools and utilities used to process different types of tasks. They span across areas like image captioning, translation, and more. + + +## Structure & Organization + +### Table of Contents: +1. Class Introduction and Architecture +2. Constructor (`__init__`) +3. Core Methods + - `run` + - `chat` + - `_stream_response` +4. Example Usage +5. Error Messages & Exception Handling +6. Summary & Further Reading + +### Constructor (`__init__`): +The agent is initialized with a language model (`llm`). During initialization, the agent loads a myriad of tools to facilitate a broad spectrum of tasks, from document querying to image transformations. + +### Core Methods: +#### 1. `run(self, input: str) -> str`: +Executes the OmniAgent. The agent plans its actions based on the user's input, executes those actions, and then uses a response generator to construct its reply. + +#### 2. `chat(self, msg: str, streaming: bool) -> str`: +Facilitates an interactive chat with the agent. It processes user messages, handles exceptions, and returns a response, either in streaming format or as a whole string. + +#### 3. `_stream_response(self, response: str)`: +For streaming mode, this function yields the response token by token, ensuring a smooth output agent. + +## Examples & Use Cases +Initialize the `OmniModalAgent` and communicate with it: +```python +import os + +from dotenv import load_dotenv + +from swarms.agents.omni_modal_agent import OmniModalAgent, OpenAIChat +from swarms.models import OpenAIChat + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") + +# Initialize the language model +llm = OpenAIChat( + temperature=0.5, + model_name="gpt-4", + openai_api_key=api_key, +) + + +agent = OmniModalAgent(llm) +response = agent.run("Translate 'Hello' to French.") +print(response) +``` + +For a chat-based interaction: +```python +agent = OmniModalAgent(llm_instance) +print(agent.chat("How are you doing today?")) +``` + +## Error Messages & Exception Handling +The `chat` method in `OmniModalAgent` incorporates exception handling. When an error arises during message processing, it returns a formatted error message detailing the exception. This approach ensures that users receive informative feedback in case of unexpected situations. + +For example, if there's an internal processing error, the chat function would return: +``` +Error processing message: [Specific error details] +``` + +## Summary +`OmniModalAgent` epitomizes the fusion of various AI tools, planners, and executors into one cohesive unit, providing a comprehensive interface for diverse tasks and modalities. The versatility and robustness of this agent make it indispensable for applications desiring to bridge multiple AI functionalities in a unified manner. + +For more extensive documentation, API references, and advanced use-cases, users are advised to refer to the primary documentation repository associated with the parent project. Regular updates, community feedback, and patches can also be found there. + + + + + + + + + diff --git a/docs_edit/swarms/agents/omnimodalagent.md b/docs_edit/swarms/agents/omnimodalagent.md new file mode 100644 index 00000000..841a39f0 --- /dev/null +++ b/docs_edit/swarms/agents/omnimodalagent.md @@ -0,0 +1,79 @@ +# Module/Class Name: OmniModalAgent + +The `OmniModalAgent` class is a module that operates based on the Language Model (LLM) aka Language Understanding Model, Plans, Tasks, and Tools. It is designed to be a multi-modal chatbot which uses various AI-based capabilities for fulfilling user requests. + +It has the following architecture: +1. Language Model (LLM). +2. Chat Planner - Plans +3. Task Executor - Tasks +4. Tools - Tools + +![OmniModalAgent](https://source.unsplash.com/random) + +--- + +### Usage + from swarms import OmniModalAgent, OpenAIChat + + llm = OpenAIChat() + agent = OmniModalAgent(llm) + response = agent.run("Hello, how are you? Create an image of how your are doing!") + +--- + +--- + +### Initialization + +The constructor of `OmniModalAgent` class takes two main parameters: +- `llm`: A `BaseLanguageModel` that represents the language model +- `tools`: A List of `BaseTool` instances that are used by the agent for fulfilling different requests. + +```python +def __init__( + self, + llm: BaseLanguageModel, + # tools: List[BaseTool] +): +``` + +--- + +### Methods + +The class has two main methods: +1. `run`: This method takes an input string and executes various plans and tasks using the provided tools. Ultimately, it generates a response based on the user's input and returns it. + - Parameters: + - `input`: A string representing the user's input text. + - Returns: + - A string representing the response. + + Usage: + ```python + response = agent.run("Hello, how are you? Create an image of how your are doing!") + ``` + +2. `chat`: This method is used to simulate a chat dialog with the agent. It can take user's messages and return the response (or stream the response word-by-word if required). + - Parameters: + - `msg` (optional): A string representing the message to send to the agent. + - `streaming` (optional): A boolean specifying whether to stream the response. + - Returns: + - A string representing the response from the agent. + + Usage: + ```python + response = agent.chat("Hello") + ``` + +--- + +### Streaming Response + +The class provides a method `_stream_response` that can be used to get the response token by token (i.e. word by word). It yields individual tokens from the response. + +Usage: +```python +for token in _stream_response(response): + print(token) +``` + diff --git a/docs_edit/swarms/agents/toolagent.md b/docs_edit/swarms/agents/toolagent.md new file mode 100644 index 00000000..c358c8c9 --- /dev/null +++ b/docs_edit/swarms/agents/toolagent.md @@ -0,0 +1,111 @@ +# ToolAgent Documentation + + +### Overview and Introduction + +The `ToolAgent` class represents an intelligent agent capable of performing a specific task using a pre-trained model and tokenizer. It leverages the Transformer models of the Hugging Face `transformers` library to generate outputs that adhere to a specific JSON schema. This provides developers with a flexible tool for creating bots, text generators, and conversational AI agents. The `ToolAgent` operates based on a JSON schema provided by you, the user. Using the schema, the agent applies the provided model and tokenizer to generate structured text data that matches the specified format. + +The primary objective of the `ToolAgent` class is to amplify the efficiency of developers and AI practitioners by simplifying the process of generating meaningful outputs that navigate the complexities of the model and tokenizer. + +### Class Definition + +The `ToolAgent` class has the following definition: + +```python +class ToolAgent(BaseLLM): + def __init__( + self, + name: str, + description: str, + model: Any, + tokenizer: Any, + json_schema: Any, + *args, + **kwargs, + ) + def run(self, task: str, *args, **kwargs) + def __call__(self, task: str, *args, **kwargs) +``` + +### Arguments + +The `ToolAgent` class takes the following arguments: + +| Argument | Type | Description | +| --- | --- | --- | +| name | str | The name of the tool agent. +| description | str | A description of the tool agent. +| model | Any | The model used by the tool agent (e.g., `transformers.AutoModelForCausalLM`). +| tokenizer | Any | The tokenizer used by the tool agent (e.g., `transformers.AutoTokenizer`). +| json_schema | Any | The JSON schema used by the tool agent. +| *args | - | Variable-length arguments. +| **kwargs | - | Keyword arguments. + +### Methods + +`ToolAgent` exposes the following methods: + +#### `run(self, task: str, *args, **kwargs) -> Any` + +- Description: Runs the tool agent for a specific task. +- Parameters: + - `task` (str): The task to be performed by the tool agent. + - `*args`: Variable-length argument list. + - `**kwargs`: Arbitrary keyword arguments. +- Returns: The output of the tool agent. +- Raises: Exception if an error occurs during the execution of the tool agent. + + +#### `__call__(self, task: str, *args, **kwargs) -> Any` + +- Description: Calls the tool agent to perform a specific task. +- Parameters: + - `task` (str): The task to be performed by the tool agent. + - `*args`: Variable-length argument list. + - `**kwargs`: Arbitrary keyword arguments. +- Returns: The output of the tool agent. + +### Usage Example + +```python +from transformers import AutoModelForCausalLM, AutoTokenizer + +from swarms import ToolAgent + +# Creating a model and tokenizer +model = AutoModelForCausalLM.from_pretrained("databricks/dolly-v2-12b") +tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-12b") + +# Defining a JSON schema +json_schema = { + "type": "object", + "properties": { + "name": {"type": "string"}, + "age": {"type": "number"}, + "is_student": {"type": "boolean"}, + "courses": {"type": "array", "items": {"type": "string"}}, + }, +} + +# Defining a task +task = "Generate a person's information based on the following schema:" + +# Creating the ToolAgent instance +agent = ToolAgent(model=model, tokenizer=tokenizer, json_schema=json_schema) + +# Running the tool agent +generated_data = agent.run(task) + +# Accessing and printing the generated data +print(generated_data) +``` + +### Additional Information and Tips + +When using the `ToolAgent`, it is important to ensure compatibility between the provided model, tokenizer, and the JSON schema. Additionally, any errors encountered during the execution of the tool agent are propagated as exceptions. Handling such exceptions appropriately can improve the robustness of the tool agent usage. + +### References and Resources + +For further exploration and understanding of the underlying Transformer-based models and tokenizers, refer to the Hugging Face `transformers` library documentation and examples. Additionally, for JSON schema modeling, you can refer to the official JSON Schema specification and examples. + +This documentation provides a comprehensive guide on using the `ToolAgent` class from `swarms` library, and it is recommended to refer back to this document when utilizing the `ToolAgent` for developing your custom conversational agents or text generation tools. diff --git a/docs_edit/swarms/agents/workeragent.md b/docs_edit/swarms/agents/workeragent.md new file mode 100644 index 00000000..aaa71653 --- /dev/null +++ b/docs_edit/swarms/agents/workeragent.md @@ -0,0 +1,78 @@ +# WorkerClass Documentation + +## Overview + +The Worker class represents an autonomous agent that can perform tasks through function calls or by running a chat. It can be used to create applications that demand effective user interactions like search engines, human-like conversational bots, or digital assistants. + +The `Worker` class is part of the `swarms.agents` codebase. This module is largely used in Natural Language Processing (NLP) projects where the agent undertakes conversations and other language-specific operations. + +## Class Definition + +The class `Worker` has the following arguments: + +| Argument | Type | Default Value | Description | +|-----------------------|---------------|----------------------------------|----------------------------------------------------| +| name | str | "Worker" | Name of the agent. | +| role | str | "Worker in a swarm" | Role of the agent. | +| external_tools | list | None | List of external tools available to the agent. | +| human_in_the_loop | bool | False | Determines whether human interaction is required. | +| temperature | float | 0.5 | Temperature for the autonomous agent. | +| llm | None | None | Language model. | +| openai_api_key | str | None | OpenAI API key. | +| tools | List[Any] | None | List of tools available to the agent. | +| embedding_size | int | 1536 | Size of the word embeddings. | +| search_kwargs | dict | {"k": 8} | Search parameters. | +| args | Multiple | | Additional arguments that can be passed. | +| kwargs | Multiple | | Additional keyword arguments that can be passed. | +## Usage + +#### Example 1: Creating and Running an Agent + +```python +from swarms import Worker + +worker = Worker( + name="My Worker", + role="Worker", + external_tools=[MyTool1(), MyTool2()], + human_in_the_loop=False, + temperature=0.5, + llm=some_language_model, + openai_api_key="my_key", +) +worker.run("What's the weather in Miami?") +``` + +#### Example 2: Receiving and Sending Messages + +```python +worker.receieve("User", "Hello there!") +worker.receieve("User", "Can you tell me something about history?") +worker.send() +``` + +#### Example 3: Setting up Tools + +```python +external_tools = [MyTool1(), MyTool2()] +worker = Worker( + name="My Worker", + role="Worker", + external_tools=external_tools, + human_in_the_loop=False, + temperature=0.5, +) +``` + +## Additional Information and Tips + +- The class allows the setting up of tools for the worker to operate effectively. It provides setup facilities for essential computing infrastructure, such as the agent's memory and language model. +- By setting the `human_in_the_loop` parameter to True, interactions with the worker can be made more user-centric. +- The `openai_api_key` argument can be provided for leveraging the OpenAI infrastructure and services. +- A qualified language model can be passed as an instance of the `llm` object, which can be useful when integrating with state-of-the-art text generation engines. + +## References and Resources + +- [OpenAI APIs](https://openai.com) +- [Models and Languages at HuggingFace](https://huggingface.co/models) +- [Deep Learning and Language Modeling at the Allen Institute for AI](https://allenai.org) diff --git a/docs_edit/swarms/framework_structure.md b/docs_edit/swarms/framework_structure.md new file mode 100644 index 00000000..0b298bf3 --- /dev/null +++ b/docs_edit/swarms/framework_structure.md @@ -0,0 +1,127 @@ +## Swarms Framework Conceptual Breakdown + +The `swarms` framework is a sophisticated structure designed to orchestrate the collaborative work of multiple agents in a hierarchical manner. This breakdown provides a conceptual and visual representation of the framework, highlighting the interactions between models, tools, memory, agents, and swarms. + +### Hierarchical Structure + +The framework can be visualized as a multi-layered hierarchy: + +1. **Models, Tools, Memory**: These form the foundational components that agents utilize to perform tasks. +2. **Agents**: Individual entities that encapsulate specific functionalities, utilizing models, tools, and memory. +3. **Swarm**: A collection of multiple agents working together in a coordinated manner. +4. **Structs**: High-level structures that organize and manage swarms, enabling complex workflows and interactions. + +### Visual Representation + +Below are visual graphs illustrating the hierarchical and tree structure of the `swarms` framework. + +#### 1. Foundational Components: Models, Tools, Memory + +```mermaid +graph TD; + Models --> Agents + Tools --> Agents + Memory --> Agents + subgraph Foundational_Components + Models + Tools + Memory + end +``` + +#### 2. Agents and Their Interactions + +```mermaid +graph TD; + Agents --> Swarm + subgraph Agents_Collection + Agent1 + Agent2 + Agent3 + end + subgraph Individual_Agents + Agent1 --> Models + Agent1 --> Tools + Agent1 --> Memory + Agent2 --> Models + Agent2 --> Tools + Agent2 --> Memory + Agent3 --> Models + Agent3 --> Tools + Agent3 --> Memory + end +``` + +#### 3. Multiple Agents Form a Swarm + +```mermaid +graph TD; + Swarm1 --> Struct + Swarm2 --> Struct + Swarm3 --> Struct + subgraph Swarms_Collection + Swarm1 + Swarm2 + Swarm3 + end + subgraph Individual_Swarms + Swarm1 --> Agent1 + Swarm1 --> Agent2 + Swarm1 --> Agent3 + Swarm2 --> Agent4 + Swarm2 --> Agent5 + Swarm2 --> Agent6 + Swarm3 --> Agent7 + Swarm3 --> Agent8 + Swarm3 --> Agent9 + end +``` + +#### 4. Structs Organizing Multiple Swarms + +```mermaid +graph TD; + Struct --> Swarms_Collection + subgraph High_Level_Structs + Struct1 + Struct2 + Struct3 + end + subgraph Struct1 + Swarm1 + Swarm2 + end + subgraph Struct2 + Swarm3 + end + subgraph Struct3 + Swarm4 + Swarm5 + end +``` + +### Directory Breakdown + +The directory structure of the `swarms` framework is organized to support its hierarchical architecture: + +```sh +swarms/ +├── agents/ +├── artifacts/ +├── marketplace/ +├── memory/ +├── models/ +├── prompts/ +├── schemas/ +├── structs/ +├── telemetry/ +├── tools/ +├── utils/ +└── __init__.py +``` + +### Summary + +The `swarms` framework is designed to facilitate complex multi-agent interactions through a structured and layered approach. By leveraging foundational components like models, tools, and memory, individual agents are empowered to perform specialized tasks. These agents are then coordinated within swarms to achieve collective goals, and swarms are managed within high-level structs to orchestrate sophisticated workflows. + +This hierarchical design ensures scalability, flexibility, and robustness, making the `swarms` framework a powerful tool for various applications in AI, data analysis, optimization, and beyond. \ No newline at end of file diff --git a/docs_edit/swarms/glossary.md b/docs_edit/swarms/glossary.md new file mode 100644 index 00000000..cc59af4a --- /dev/null +++ b/docs_edit/swarms/glossary.md @@ -0,0 +1,48 @@ +# Glossary of Terms + +**Agent**: +An LLM (Large Language Model) equipped with tools and memory, operating with a specific objective in a loop. An agent can perform tasks, interact with other agents, and utilize external tools and memory systems to achieve its goals. + +**Swarms**: +A group of more than two agents working together and communicating to accomplish a shared objective. Swarms enable complex, collaborative tasks that leverage the strengths of multiple agents. + +**Tool**: +A Python function that is converted into a function call, allowing agents to perform specific actions or access external resources. Tools enhance the capabilities of agents by providing specialized functionalities. + +**Memory System**: +A system for managing information retrieval and storage, often implemented as a Retrieval-Augmented Generation (RAG) system or a memory vector database. Memory systems enable agents to recall previous interactions, store new information, and improve decision-making based on historical data. + +**LLM (Large Language Model)**: +A type of AI model designed to understand and generate human-like text. LLMs, such as GPT-3 or GPT-4, are used as the core computational engine for agents. + +**System Prompt**: +A predefined prompt that sets the context and instructions for an agent's task. The system prompt guides the agent's behavior and response generation. + +**Max Loops**: +The maximum number of iterations an agent will perform to complete its task. This parameter helps control the extent of an agent's processing and ensures tasks are completed efficiently. + +**Dashboard**: +A user interface that provides real-time monitoring and control over the agents and their activities. Dashboards can display agent status, logs, and performance metrics. + +**Streaming On**: +A setting that enables agents to stream their output incrementally, providing real-time feedback as they process tasks. This feature is useful for monitoring progress and making adjustments on the fly. + +**Verbose**: +A setting that controls the level of detail in an agent's output and logging. When verbose mode is enabled, the agent provides more detailed information about its operations and decisions. + +**Multi-modal**: +The capability of an agent to process and integrate multiple types of data, such as text, images, and audio. Multi-modal agents can handle more complex tasks that require diverse inputs. + +**Autosave**: +A feature that automatically saves the agent's state and progress at regular intervals. Autosave helps prevent data loss and allows for recovery in case of interruptions. + +**Flow**: +The predefined sequence in which agents in a swarm interact and process tasks. The flow ensures that each agent's output is appropriately passed to the next agent, facilitating coordinated efforts. + +**Long Term Memory**: +A component of the memory system that retains information over extended periods, enabling agents to recall and utilize past interactions and experiences. + +**Output Schema**: +A structured format for the output generated by agents, often defined using data models like Pydantic's BaseModel. Output schemas ensure consistency and clarity in the information produced by agents. + +By understanding these terms, you can effectively build and orchestrate agents and swarms, leveraging their capabilities to perform complex, collaborative tasks. \ No newline at end of file diff --git a/docs_edit/swarms/index.md b/docs_edit/swarms/index.md new file mode 100644 index 00000000..0230c104 --- /dev/null +++ b/docs_edit/swarms/index.md @@ -0,0 +1,1151 @@ +# Effortlessly coordinate swarms of agents for production-grade applications. + +Individual agents currently face 5 significant challenges that hinder their deployment in production: +- Short memory +- Single-task threading +- Hallucinations +- High cost +- Lack of multi-agent collaboration. + +The Swarms framework is a solution to all these issues. Swarms provides simple, reliable, and versatile tools to create your own swarm of agents tailored to your exact needs. + +Currently used in production by... +- The Royal Bank of Canada +- John Deere +- Many AI startups + +---- + +## Installation +`$ pip3 install -U swarms` + +--- + +## Usage + + +Run example in Collab: +Open In Colab + + +### `Agent` +A fully plug-and-play autonomous agent powered by an LLM extended by a long-term memory database, and equipped with function calling for tool usage! By passing in an LLM, you can create a fully autonomous agent with extreme customization and reliability, ready for real-world task automation! + +Features: + +✅ Any LLM / Any framework + +✅ Extremely customize-able with max loops, autosaving, import docs (PDFS, TXT, CSVs, etc), tool usage, etc etc + +✅ Long term memory database with RAG (ChromaDB, Pinecone, Qdrant) + +```python +import os + +from dotenv import load_dotenv + +# Import the OpenAIChat model and the Agent struct +from swarms import Agent, OpenAIChat + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") + +# Initialize the language model +llm = OpenAIChat( + temperature=0.5, model_name="gpt-4", openai_api_key=api_key, max_tokens=4000 +) + + +## Initialize the workflow +agent = Agent(llm=llm, max_loops=1, autosave=True, dashboard=True) + +# Run the workflow on a task +agent.run("Generate a 10,000 word blog on health and wellness.") +``` + + +# `Agent` with Long Term Memory +`Agent` equipped with quasi-infinite long term memory. Great for long document understanding, analysis, and retrieval. + +```python +from swarms import Agent, OpenAIChat +from playground.memory.chromadb_example import ChromaDB # Copy and paste the code and put it in your own local directory. + +# Making an instance of the ChromaDB class +memory = ChromaDB( + metric="cosine", + n_results=3, + output_dir="results", + docs_folder="docs", +) + +# Initializing the agent with the Gemini instance and other parameters +agent = Agent( + agent_name="Covid-19-Chat", + agent_description=( + "This agent provides information about COVID-19 symptoms." + ), + llm=OpenAIChat(), + max_loops="auto", + autosave=True, + verbose=True, + long_term_memory=memory, + stopping_condition="finish", +) + +# Defining the task and image path +task = ("What are the symptoms of COVID-19?",) + +# Running the agent with the specified task and image +out = agent.run(task) +print(out) + +``` + + +# `Agent` with Long Term Memory ++ Tools! +An LLM equipped with long term memory and tools, a full stack agent capable of automating all and any digital tasks given a good prompt. + +```python +from swarms import Agent, ChromaDB, OpenAIChat + +# Making an instance of the ChromaDB class +memory = ChromaDB( + metric="cosine", + n_results=3, + output_dir="results", + docs_folder="docs", +) + +# Initialize a tool +def search_api(query: str): + # Add your logic here + return query + +# Initializing the agent with the Gemini instance and other parameters +agent = Agent( + agent_name="Covid-19-Chat", + agent_description=( + "This agent provides information about COVID-19 symptoms." + ), + llm=OpenAIChat(), + max_loops="auto", + autosave=True, + verbose=True, + long_term_memory=memory, + stopping_condition="finish", + tools=[search_api], +) + +# Defining the task and image path +task = ("What are the symptoms of COVID-19?",) + +# Running the agent with the specified task and image +out = agent.run(task) +print(out) + +``` + +### Simple Conversational Agent +A Plug in and play conversational agent with `GPT4`, `Mixytral`, or any of our models + +- Reliable conversational structure to hold messages together with dynamic handling for long context conversations and interactions with auto chunking +- Reliable, this simple system will always provide responses you want. + +```python +from swarms import Agent, Anthropic + + +## Initialize the workflow +agent = Agent( + agent_name="Transcript Generator", + agent_description=( + "Generate a transcript for a youtube video on what swarms" + " are!" + ), + llm=Anthropic(), + max_loops=3, + autosave=True, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + interactive=True, # Set to True +) + +# Run the workflow on a task +agent("Generate a transcript for a youtube video on what swarms are!") +``` + +## Devin +Implementation of Devin in less than 90 lines of code with several tools: +terminal, browser, and edit files! + +```python +from swarms import Agent, Anthropic +import subprocess + +# Model +llm = Anthropic( + temperature=0.1, +) + +# Tools +def terminal( + code: str, +): + """ + Run code in the terminal. + + Args: + code (str): The code to run in the terminal. + + Returns: + str: The output of the code. + """ + out = subprocess.run( + code, shell=True, capture_output=True, text=True + ).stdout + return str(out) + +def browser(query: str): + """ + Search the query in the browser with the `browser` tool. + + Args: + query (str): The query to search in the browser. + + Returns: + str: The search results. + """ + import webbrowser + + url = f"https://www.google.com/search?q={query}" + webbrowser.open(url) + return f"Searching for {query} in the browser." + +def create_file(file_path: str, content: str): + """ + Create a file using the file editor tool. + + Args: + file_path (str): The path to the file. + content (str): The content to write to the file. + + Returns: + str: The result of the file creation operation. + """ + with open(file_path, "w") as file: + file.write(content) + return f"File {file_path} created successfully." + +def file_editor(file_path: str, mode: str, content: str): + """ + Edit a file using the file editor tool. + + Args: + file_path (str): The path to the file. + mode (str): The mode to open the file in. + content (str): The content to write to the file. + + Returns: + str: The result of the file editing operation. + """ + with open(file_path, mode) as file: + file.write(content) + return f"File {file_path} edited successfully." + + +# Agent +agent = Agent( + agent_name="Devin", + system_prompt=( + "Autonomous agent that can interact with humans and other" + " agents. Be Helpful and Kind. Use the tools provided to" + " assist the user. Return all code in markdown format." + ), + llm=llm, + max_loops="auto", + autosave=True, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + interactive=True, + tools=[terminal, browser, file_editor, create_file], + code_interpreter=True, + # streaming=True, +) + +# Run the agent +out = agent("Create a new file for a plan to take over the world.") +print(out) +``` + + +## `Agent`with Pydantic BaseModel as Output Type +The following is an example of an agent that intakes a pydantic basemodel and outputs it at the same time: + +```python +from pydantic import BaseModel, Field +from swarms import Anthropic, Agent + + +# Initialize the schema for the person's information +class Schema(BaseModel): + name: str = Field(..., title="Name of the person") + agent: int = Field(..., title="Age of the person") + is_student: bool = Field(..., title="Whether the person is a student") + courses: list[str] = Field( + ..., title="List of courses the person is taking" + ) + + +# Convert the schema to a JSON string +tool_schema = Schema( + name="Tool Name", + agent=1, + is_student=True, + courses=["Course1", "Course2"], +) + +# Define the task to generate a person's information +task = "Generate a person's information based on the following schema:" + +# Initialize the agent +agent = Agent( + agent_name="Person Information Generator", + system_prompt=( + "Generate a person's information based on the following schema:" + ), + # Set the tool schema to the JSON string -- this is the key difference + tool_schema=tool_schema, + llm=Anthropic(), + max_loops=3, + autosave=True, + dashboard=False, + streaming_on=True, + verbose=True, + interactive=True, + # Set the output type to the tool schema which is a BaseModel + output_type=tool_schema, # or dict, or str + metadata_output_type="json", + # List of schemas that the agent can handle + list_tool_schemas=[tool_schema], + function_calling_format_type="OpenAI", + function_calling_type="json", # or soon yaml +) + +# Run the agent to generate the person's information +generated_data = agent.run(task) + +# Print the generated data +print(f"Generated data: {generated_data}") + + +``` + + +### `ToolAgent` +ToolAgent is an agent that can use tools through JSON function calling. It intakes any open source model from huggingface and is extremely modular and plug in and play. We need help adding general support to all models soon. + + +```python +from pydantic import BaseModel, Field +from transformers import AutoModelForCausalLM, AutoTokenizer + +from swarms import ToolAgent +from swarms.utils.json_utils import base_model_to_json + +# Load the pre-trained model and tokenizer +model = AutoModelForCausalLM.from_pretrained( + "databricks/dolly-v2-12b", + load_in_4bit=True, + device_map="auto", +) +tokenizer = AutoTokenizer.from_pretrained("databricks/dolly-v2-12b") + + +# Initialize the schema for the person's information +class Schema(BaseModel): + name: str = Field(..., title="Name of the person") + agent: int = Field(..., title="Age of the person") + is_student: bool = Field( + ..., title="Whether the person is a student" + ) + courses: list[str] = Field( + ..., title="List of courses the person is taking" + ) + + +# Convert the schema to a JSON string +tool_schema = base_model_to_json(Schema) + +# Define the task to generate a person's information +task = ( + "Generate a person's information based on the following schema:" +) + +# Create an instance of the ToolAgent class +agent = ToolAgent( + name="dolly-function-agent", + description="Ana gent to create a child data", + model=model, + tokenizer=tokenizer, + json_schema=tool_schema, +) + +# Run the agent to generate the person's information +generated_data = agent.run(task) + +# Print the generated data +print(f"Generated data: {generated_data}") + +``` + + + + + + + +---- + +### `SequentialWorkflow` +Sequential Workflow enables you to sequentially execute tasks with `Agent` and then pass the output into the next agent and onwards until you have specified your max loops. `SequentialWorkflow` is wonderful for real-world business tasks like sending emails, summarizing documents, and analyzing data. + + +✅ Save and Restore Workflow states! + +✅ Multi-Modal Support for Visual Chaining + +✅ Utilizes Agent class + +```python +from swarms import Agent, SequentialWorkflow, Anthropic + + +# Initialize the language model agent (e.g., GPT-3) +llm = Anthropic() + +# Initialize agents for individual tasks +agent1 = Agent( + agent_name="Blog generator", + system_prompt="Generate a blog post like stephen king", + llm=llm, + max_loops=1, + dashboard=False, + tools=[], +) +agent2 = Agent( + agent_name="summarizer", + system_prompt="Sumamrize the blog post", + llm=llm, + max_loops=1, + dashboard=False, + tools=[], +) + +# Create the Sequential workflow +workflow = SequentialWorkflow( + agents=[agent1, agent2], max_loops=1, verbose=False +) + +# Run the workflow +workflow.run( + "Generate a blog post on how swarms of agents can help businesses grow." +) + +``` + + + +### `ConcurrentWorkflow` +`ConcurrentWorkflow` runs all the tasks all at the same time with the inputs you give it! + + +```python +import os + +from dotenv import load_dotenv + +from swarms import Agent, ConcurrentWorkflow, OpenAIChat, Task + +# Load environment variables from .env file +load_dotenv() + +# Load environment variables +llm = OpenAIChat(openai_api_key=os.getenv("OPENAI_API_KEY")) +agent = Agent(llm=llm, max_loops=1) + +# Create a workflow +workflow = ConcurrentWorkflow(max_workers=5) + +# Create tasks +task1 = Task(agent, "What's the weather in miami") +task2 = Task(agent, "What's the weather in new york") +task3 = Task(agent, "What's the weather in london") + +# Add tasks to the workflow +workflow.add(tasks=[task1, task2, task3]) + +# Run the workflow +workflow.run() +``` + +### `RecursiveWorkflow` +`RecursiveWorkflow` will keep executing the tasks until a specific token like is located inside the text! + +```python +import os + +from dotenv import load_dotenv + +from swarms import Agent, OpenAIChat, RecursiveWorkflow, Task + +# Load environment variables from .env file +load_dotenv() + +# Load environment variables +llm = OpenAIChat(openai_api_key=os.getenv("OPENAI_API_KEY")) +agent = Agent(llm=llm, max_loops=1) + +# Create a workflow +workflow = RecursiveWorkflow(stop_token="") + +# Create tasks +task1 = Task(agent, "What's the weather in miami") +task2 = Task(agent, "What's the weather in new york") +task3 = Task(agent, "What's the weather in london") + +# Add tasks to the workflow +workflow.add(task1) +workflow.add(task2) +workflow.add(task3) + +# Run the workflow +workflow.run() +``` + + + +### `SwarmNetwork` +`SwarmNetwork` provides the infrasturcture for building extremely dense and complex multi-agent applications that span across various types of agents. + +✅ Efficient Task Management: SwarmNetwork's intelligent agent pool and task queue management system ensures tasks are distributed evenly across agents. This leads to efficient use of resources and faster task completion. + +✅ Scalability: SwarmNetwork can dynamically scale the number of agents based on the number of pending tasks. This means it can handle an increase in workload by adding more agents, and conserve resources when the workload is low by reducing the number of agents. + +✅ Versatile Deployment Options: With SwarmNetwork, each agent can be run on its own thread, process, container, machine, or even cluster. This provides a high degree of flexibility and allows for deployment that best suits the user's needs and infrastructure. + +```python +import os + +from dotenv import load_dotenv + +# Import the OpenAIChat model and the Agent struct +from swarms import Agent, OpenAIChat, SwarmNetwork + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") + +# Initialize the language model +llm = OpenAIChat( + temperature=0.5, + openai_api_key=api_key, +) + +## Initialize the workflow +agent = Agent(llm=llm, max_loops=1, agent_name="Social Media Manager") +agent2 = Agent(llm=llm, max_loops=1, agent_name=" Product Manager") +agent3 = Agent(llm=llm, max_loops=1, agent_name="SEO Manager") + + +# Load the swarmnet with the agents +swarmnet = SwarmNetwork( + agents=[agent, agent2, agent3], +) + +# List the agents in the swarm network +out = swarmnet.list_agents() +print(out) + +# Run the workflow on a task +out = swarmnet.run_single_agent( + agent2.id, "Generate a 10,000 word blog on health and wellness." +) +print(out) + + +# Run all the agents in the swarm network on a task +out = swarmnet.run_many_agents("Generate a 10,000 word blog on health and wellness.") +print(out) +``` + + +### `Task` +`Task` is a simple structure for task execution with the `Agent`. Imagine zapier for LLM-based workflow automation + +✅ Task is a structure for task execution with the Agent. + +✅ Tasks can have descriptions, scheduling, triggers, actions, conditions, dependencies, priority, and a history. + +✅ The Task structure allows for efficient workflow automation with LLM-based agents. + +```python +import os + +from dotenv import load_dotenv + +from swarms.structs import Agent, OpenAIChat, Task + +# Load the environment variables +load_dotenv() + + +# Define a function to be used as the action +def my_action(): + print("Action executed") + + +# Define a function to be used as the condition +def my_condition(): + print("Condition checked") + return True + + +# Create an agent +agent = Agent( + llm=OpenAIChat(openai_api_key=os.environ["OPENAI_API_KEY"]), + max_loops=1, + dashboard=False, +) + +# Create a task +task = Task( + description=( + "Generate a report on the top 3 biggest expenses for small" + " businesses and how businesses can save 20%" + ), + agent=agent, +) + +# Set the action and condition +task.set_action(my_action) +task.set_condition(my_condition) + +# Execute the task +print("Executing task...") +task.run() + +# Check if the task is completed +if task.is_completed(): + print("Task completed") +else: + print("Task not completed") + +# Output the result of the task +print(f"Task result: {task.result}") +``` + +--- + + + + +## Majority Voting +Multiple-agents will evaluate an idea based off of an parsing or evaluation function. From papers like "[More agents is all you need](https://arxiv.org/pdf/2402.05120.pdf) + +```python +from swarms import Agent, MajorityVoting, ChromaDB, Anthropic + +# Initialize the llm +llm = Anthropic() + +# Agents +agent1 = Agent( + llm = llm, + system_prompt="You are the leader of the Progressive Party. What is your stance on healthcare?", + agent_name="Progressive Leader", + agent_description="Leader of the Progressive Party", + long_term_memory=ChromaDB(), + max_steps=1, +) + +agent2 = Agent( + llm=llm, + agent_name="Conservative Leader", + agent_description="Leader of the Conservative Party", + long_term_memory=ChromaDB(), + max_steps=1, +) + +agent3 = Agent( + llm=llm, + agent_name="Libertarian Leader", + agent_description="Leader of the Libertarian Party", + long_term_memory=ChromaDB(), + max_steps=1, +) + +# Initialize the majority voting +mv = MajorityVoting( + agents=[agent1, agent2, agent3], + output_parser=llm.majority_voting, + autosave=False, + verbose=True, +) + + +# Start the majority voting +mv.run("What is your stance on healthcare?") +``` + +## Real-World Deployment + +### Multi-Agent Swarm for Logistics +Here's a production grade swarm ready for real-world deployment in a factory and logistics settings like warehouses. This swarm can automate 3 costly and inefficient workflows, safety checks, productivity checks, and warehouse security. + + +```python +import os + +from dotenv import load_dotenv + +from swarms.models import GPT4VisionAPI +from swarms.prompts.logistics import ( + Efficiency_Agent_Prompt, + Health_Security_Agent_Prompt, + Productivity_Agent_Prompt, + Quality_Control_Agent_Prompt, + Safety_Agent_Prompt, + Security_Agent_Prompt, + Sustainability_Agent_Prompt, +) +from swarms.structs import Agent + +# Load ENV +load_dotenv() +api_key = os.getenv("OPENAI_API_KEY") + +# GPT4VisionAPI +llm = GPT4VisionAPI(openai_api_key=api_key) + +# Image for analysis +factory_image = "factory_image1.jpg" + +# Initialize agents with respective prompts +health_security_agent = Agent( + llm=llm, + sop=Health_Security_Agent_Prompt, + max_loops=1, + multi_modal=True, +) + +# Quality control agent +quality_control_agent = Agent( + llm=llm, + sop=Quality_Control_Agent_Prompt, + max_loops=1, + multi_modal=True, +) + + +# Productivity Agent +productivity_agent = Agent( + llm=llm, + sop=Productivity_Agent_Prompt, + max_loops=1, + multi_modal=True, +) + +# Initiailize safety agent +safety_agent = Agent(llm=llm, sop=Safety_Agent_Prompt, max_loops=1, multi_modal=True) + +# Init the security agent +security_agent = Agent( + llm=llm, sop=Security_Agent_Prompt, max_loops=1, multi_modal=True +) + + +# Initialize sustainability agent +sustainability_agent = Agent( + llm=llm, + sop=Sustainability_Agent_Prompt, + max_loops=1, + multi_modal=True, +) + + +# Initialize efficincy agent +efficiency_agent = Agent( + llm=llm, + sop=Efficiency_Agent_Prompt, + max_loops=1, + multi_modal=True, +) + +# Run agents with respective tasks on the same image +health_analysis = health_security_agent.run( + "Analyze the safety of this factory", factory_image +) +quality_analysis = quality_control_agent.run( + "Examine product quality in the factory", factory_image +) +productivity_analysis = productivity_agent.run( + "Evaluate factory productivity", factory_image +) +safety_analysis = safety_agent.run( + "Inspect the factory's adherence to safety standards", + factory_image, +) +security_analysis = security_agent.run( + "Assess the factory's security measures and systems", + factory_image, +) +sustainability_analysis = sustainability_agent.run( + "Examine the factory's sustainability practices", factory_image +) +efficiency_analysis = efficiency_agent.run( + "Analyze the efficiency of the factory's manufacturing process", + factory_image, +) +``` +--- + + +## `Multi Modal Autonomous Agents` +Run the agent with multiple modalities useful for various real-world tasks in manufacturing, logistics, and health. + +```python +# Description: This is an example of how to use the Agent class to run a multi-modal workflow +import os + +from dotenv import load_dotenv + +from swarms.models.gpt4_vision_api import GPT4VisionAPI +from swarms.structs import Agent + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") + +# Initialize the language model +llm = GPT4VisionAPI( + openai_api_key=api_key, + max_tokens=500, +) + +# Initialize the task +task = ( + "Analyze this image of an assembly line and identify any issues such as" + " misaligned parts, defects, or deviations from the standard assembly" + " process. IF there is anything unsafe in the image, explain why it is" + " unsafe and how it could be improved." +) +img = "assembly_line.jpg" + +## Initialize the workflow +agent = Agent( + llm=llm, max_loops="auto", autosave=True, dashboard=True, multi_modal=True +) + +# Run the workflow on a task +agent.run(task=task, img=img) +``` +---- + + +## Build your own LLMs, Agents, and Swarms! + +### Swarms Compliant Model Interface +```python +from swarms import BaseLLM + +class vLLMLM(BaseLLM): + def __init__(self, model_name='default_model', tensor_parallel_size=1, *args, **kwargs): + super().__init__(*args, **kwargs) + self.model_name = model_name + self.tensor_parallel_size = tensor_parallel_size + # Add any additional initialization here + + def run(self, task: str): + pass + +# Example +model = vLLMLM("mistral") + +# Run the model +out = model("Analyze these financial documents and summarize of them") +print(out) + +``` + + +### Swarms Compliant Agent Interface + +```python +from swarms import Agent + + +class MyCustomAgent(Agent): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom initialization logic + +    def custom_method(self, *args, **kwargs): + +        # Implement custom logic here + +        pass + +    def run(self, task, *args, **kwargs): + +        # Customize the run method + +        response = super().run(task, *args, **kwargs) + +        # Additional custom logic + +        return response` + +# Model +agent = MyCustomAgent() + +# Run the agent +out = agent("Analyze and summarize these financial documents: ") +print(out) + +``` + + +### Compliant Interface for Multi-Agent Collaboration + +```python +from swarms import AutoSwarm, AutoSwarmRouter, BaseSwarm + + +# Build your own Swarm +class MySwarm(BaseSwarm): + def __init__(self, name="kyegomez/myswarm", *args, **kwargs): + super().__init__(*args, **kwargs) + self.name = name + + def run(self, task: str, *args, **kwargs): + # Add your multi-agent logic here + # agent 1 + # agent 2 + # agent 3 + return "output of the swarm" + + +# Add your custom swarm to the AutoSwarmRouter +router = AutoSwarmRouter( + swarms=[MySwarm] +) + + +# Create an AutoSwarm instance +autoswarm = AutoSwarm( + name="kyegomez/myswarm", + description="A simple API to build and run swarms", + verbose=True, + router=router, +) + + +# Run the AutoSwarm +autoswarm.run("Analyze these financial data and give me a summary") + + +``` + +## `AgentRearrange` +Inspired by Einops and einsum, this orchestration techniques enables you to map out the relationships between various agents. For example you specify linear and sequential relationships like `a -> a1 -> a2 -> a3` or concurrent relationships where the first agent will send a message to 3 agents all at once: `a -> a1, a2, a3`. You can customize your workflow to mix sequential and concurrent relationships. [Docs Available:](https://swarms.apac.ai/en/latest/swarms/structs/agent_rearrange/) + +```python +from swarms import Agent, AgentRearrange, rearrange, Anthropic + + +# Initialize the director agent + +director = Agent( + agent_name="Director", + system_prompt="Directs the tasks for the workers", + llm=Anthropic(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="director.json", +) + + +# Initialize worker 1 + +worker1 = Agent( + agent_name="Worker1", + system_prompt="Generates a transcript for a youtube video on what swarms are", + llm=Anthropic(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="worker1.json", +) + + +# Initialize worker 2 +worker2 = Agent( + agent_name="Worker2", + system_prompt="Summarizes the transcript generated by Worker1", + llm=Anthropic(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="worker2.json", +) + + +# Create a list of agents +agents = [director, worker1, worker2] + +# Define the flow pattern +flow = "Director -> Worker1 -> Worker2" + +# Using AgentRearrange class +agent_system = AgentRearrange(agents=agents, flow=flow) +output = agent_system.run( + "Create a format to express and communicate swarms of llms in a structured manner for youtube" +) +print(output) + + +# Using rearrange function +output = rearrange( + agents, + flow, + "Create a format to express and communicate swarms of llms in a structured manner for youtube", +) + +print(output) + +``` + +## `HierarhicalSwarm` +Coming soon... + + +## `AgentLoadBalancer` +Coming soon... + + +## `GraphSwarm` +Coming soon... + + +--- + +## Documentation +Documentation is located here at: [swarms.apac.ai](https://swarms.apac.ai) + +---- + +## Folder Structure +The swarms package has been meticlously crafted for extreme use-ability and understanding, the swarms package is split up into various modules such as `swarms.agents` that holds pre-built agents, `swarms.structs` that holds a vast array of structures like `Agent` and multi agent structures. The 3 most important are `structs`, `models`, and `agents`. + +```sh +├── __init__.py +├── agents +├── artifacts +├── memory +├── schemas +├── models +├── prompts +├── structs +├── telemetry +├── tools +├── utils +└── workers +``` + +---- + +## 🫶 Contributions: + +The easiest way to contribute is to pick any issue with the `good first issue` tag 💪. Read the Contributing guidelines [here](/CONTRIBUTING.md). Bug Report? [File here](https://github.com/swarms/gateway/issues) | Feature Request? [File here](https://github.com/swarms/gateway/issues) + +Swarms is an open-source project, and contributions are VERY welcome. If you want to contribute, you can create new features, fix bugs, or improve the infrastructure. Please refer to the [CONTRIBUTING.md](https://github.com/kyegomez/swarms/blob/master/CONTRIBUTING.md) and our [contributing board](https://github.com/users/kyegomez/projects/1) to participate in Roadmap discussions! + + + + + +---- + +## Community + +Join our growing community around the world, for real-time support, ideas, and discussions on Swarms 😊 + +- View our official [Blog](https://swarms.apac.ai) +- Chat live with us on [Discord](https://discord.gg/kS3rwKs3ZC) +- Follow us on [Twitter](https://twitter.com/kyegomez) +- Connect with us on [LinkedIn](https://www.linkedin.com/company/the-swarm-corporation) +- Visit us on [YouTube](https://www.youtube.com/channel/UC9yXyitkbU_WSy7bd_41SqQ) +- [Join the Swarms community on Discord!](https://discord.gg/AJazBmhKnr) +- Join our Swarms Community Gathering every Thursday at 1pm NYC Time to unlock the potential of autonomous agents in automating your daily tasks [Sign up here](https://lu.ma/5p2jnc2v) + +--- + +## Discovery Call +Book a discovery call to learn how Swarms can lower your operating costs by 40% with swarms of autonomous agents in lightspeed. [Click here to book a time that works for you!](https://calendly.com/swarm-corp/30min?month=2023-11) + + +## Accelerate Backlog +Accelerate Bugs, Features, and Demos to implement by supporting us here: + + + + +## Docker Instructions +- [Learn More Here About Deployments In Docker](https://swarms.apac.ai/en/latest/docker_setup/) + + +## Swarm Newsletter 🤖 🤖 🤖 📧 +Sign up to the Swarm newsletter to receive updates on the latest Autonomous agent research papers, step by step guides on creating multi-agent app, and much more Swarmie goodiness 😊 + +[CLICK HERE TO SIGNUP](https://docs.google.com/forms/d/e/1FAIpQLSfqxI2ktPR9jkcIwzvHL0VY6tEIuVPd-P2fOWKnd6skT9j1EQ/viewform?usp=sf_link) + +# License +Apache License + +# Citation +Please cite Swarms in your paper or your project if you found it beneficial in any way! Appreciate you. + +```bibtex +@misc{swarms, + author = {Gomez, Kye}, + title = {{Swarms: The Multi-Agent Collaboration Framework}}, + howpublished = {\url{https://github.com/kyegomez/swarms}}, + year = {2023}, + note = {Accessed: Date} +} +``` diff --git a/docs_edit/swarms/index_overview.md b/docs_edit/swarms/index_overview.md new file mode 100644 index 00000000..e69de29b diff --git a/docs_edit/swarms/install/docker_setup.md b/docs_edit/swarms/install/docker_setup.md new file mode 100644 index 00000000..ccbbf35c --- /dev/null +++ b/docs_edit/swarms/install/docker_setup.md @@ -0,0 +1,186 @@ +# Docker Setup Guide for Contributors to Swarms + + +Welcome to the `swarms` project Docker setup guide. This document will help you establish a Docker-based environment for contributing to `swarms`. Docker provides a consistent and isolated environment, ensuring that all contributors can work in the same settings, reducing the "it works on my machine" syndrome. + +### Purpose + +The purpose of this guide is to: + +- Ensure contributors can quickly set up their development environment. +- Provide a consistent testing and deployment workflow. +- Introduce Docker basics and best practices. + +### Scope + +This guide covers: + +- Installing Docker +- Cloning the `swarms` repository +- Building a Docker image +- Running the `swarms` application in a Docker container +- Running tests using Docker +- Pushing changes and working with Docker Hub + + +## Docker Installation + +### Windows + +1. Download Docker Desktop for Windows from the official website. +2. Install Docker Desktop, ensuring that the "Use Windows containers instead of Linux containers" option is unchecked. +3. Start Docker Desktop and wait for the Docker engine to start. + +### macOS + +1. Download Docker Desktop for macOS from the official website. +2. Follow the installation instructions, drag-and-drop Docker into the Applications folder. +3. Start Docker Desktop from the Applications folder. + +### Linux (Ubuntu) + +1. Update your package index: `sudo apt-get update`. +2. Install packages to allow apt to use a repository over HTTPS. +3. Add Docker’s official GPG key. +4. Set up the stable repository. +5. Install the latest version of Docker Engine and containerd. + +```bash +sudo apt-get install docker-ce docker-ce-cli containerd.io +``` + +6. Verify that Docker Engine is installed correctly by running the hello-world image. + +```bash +sudo docker run hello-world +``` + +### Post-installation Steps for Linux + +- Manage Docker as a non-root user. +- Configure Docker to start on boot. + +## Cloning the Repository + +```bash +git clone https://github.com/your-username/swarms.git +cd swarms +``` + +## Docker Basics + +### Dockerfile Overview + +- Explain the structure and commands of a Dockerfile used in the `swarms` project. + +### Building the Image + +```bash +docker build -t swarms-dev . +``` + +### Running a Container + +```bash +docker run -it --rm swarms-dev +``` + +## Development Workflow with Docker + +### Running the Application + +- Commands to run the `swarms` application within Docker. + +### Making Changes + +- How to make changes to the code and reflect those changes within the Docker container. + +### Running Tests + +- Instructions on running tests using `pytest` within the Docker environment. + +## Docker Compose for Local Development + +- Introduce Docker Compose and its role in simplifying multi-container setups. +- Create a `docker-compose.yml` file for the `swarms` project. + + +## Dockerfile + +Creating a Dockerfile for deploying the `swarms` framework to the cloud involves setting up the necessary environment to run your Python application, ensuring all dependencies are installed, and configuring the container to execute the desired tasks. Here's an example Dockerfile that sets up such an environment: + +```Dockerfile +# Use an official Python runtime as a parent image +FROM python:3.11-slim + +# Set environment variables +ENV PYTHONDONTWRITEBYTECODE 1 +ENV PYTHONUNBUFFERED 1 + +# Set the working directory in the container +WORKDIR /usr/src/swarm_cloud + +# Install system dependencies +RUN apt-get update \ + && apt-get -y install netcat gcc \ + && apt-get clean + +# Install Python dependencies +# COPY requirements.txt and pyproject.toml if you're using poetry for dependency management +COPY requirements.txt . +RUN pip install --upgrade pip +RUN pip install --no-cache-dir -r requirements.txt + +# Install the 'swarms' package, assuming it's available on PyPI +ENV SWARM_API_KEY=your_swarm_api_key_here +ENV OPENAI_API_KEY=your_openai_key +RUN pip install swarms + +# Copy the rest of the application +COPY . . + +# Add entrypoint script if needed +# COPY ./entrypoint.sh . +# RUN chmod +x /usr/src/swarm_cloud/entrypoint.sh + +# Expose port if your application has a web interface +# EXPOSE 5000 + +# Define environment variable for the swarm to work +# Add Docker CMD or ENTRYPOINT script to run the application +# CMD python your_swarm_startup_script.py +# Or use the entrypoint script if you have one +# ENTRYPOINT ["/usr/src/swarm_cloud/entrypoint.sh"] + +# If you're using `CMD` to execute a Python script, make sure it's executable +# RUN chmod +x your_swarm_startup_script.py +``` + +To build and run this Docker image: + +1. Replace `requirements.txt` with your actual requirements file or `pyproject.toml` and `poetry.lock` if you're using Poetry. +2. Replace `your_swarm_startup_script.py` with the script that starts your application. +3. If your application requires an API key or other sensitive data, make sure to set these securely, perhaps using environment variables or secrets management solutions provided by your cloud provider. +4. If you have an entrypoint script, uncomment the `COPY` and `RUN` lines for `entrypoint.sh`. +5. If your application has a web interface, uncomment the `EXPOSE` line and set it to the correct port. + +Now, build your Docker image: + +```sh +docker build -t swarm-cloud . +``` + +And run it: + +```sh +docker run -d --name my-swarm-app swarm-cloud +``` + +For deploying to the cloud, you'll need to push your Docker image to a container registry (like Docker Hub or a private registry), then pull it from your cloud environment to run it. Cloud providers often have services specifically for this purpose (like AWS ECS, GCP GKE, or Azure AKS). The deployment process will involve: + +- Pushing the image to a registry. +- Configuring cloud services to run your image. +- Setting up networking, storage, and other cloud resources. +- Monitoring, logging, and potentially scaling your containers. + +Remember to secure sensitive data, use tagged releases for your images, and follow best practices for operating in the cloud. \ No newline at end of file diff --git a/docs_edit/swarms/install/install.md b/docs_edit/swarms/install/install.md new file mode 100644 index 00000000..978466a4 --- /dev/null +++ b/docs_edit/swarms/install/install.md @@ -0,0 +1,89 @@ +
+

+ + + +

+
+ +# Installation Guide + +You can install `swarms` with pip in a +[**Python>=3.10**](https://www.python.org/) environment. + +!!! example "pip install (recommended)" + + === "headless" + The headless installation of `swarms` is designed for environments where graphical user interfaces (GUI) are not needed, making it more lightweight and suitable for server-side applications. + + ```bash + pip install swarms + ``` + + + +!!! example "git clone (for development)" + + === "virtualenv" + + ```bash + # clone repository and navigate to root directory + git clone https://github.com/kyegomez/swarms.git + cd swarms + + # setup python environment and activate it + python3 -m venv venv + source venv/bin/activate + pip install --upgrade pip + + # headless install + pip install -e "." + + # desktop install + pip install -e ".[desktop]" + ``` + + === "poetry" + + ```bash + # clone repository and navigate to root directory + git clone https://github.com/kyegomez/swarms.git + cd swarms + + # setup python environment and activate it + poetry env use python3.10 + poetry shell + + # headless install + poetry install + + # desktop install + poetry install --extras "desktop" + ``` + + +# Javascript + +!!! example "NPM install |WIP|" + + === "headless" + Get started with the NPM implementation of Swarms with this command: + + ```bash + npm install swarms-js + ``` + + +## Documentation + +[Learn more about swarms →](swarms/) + + +## Examples + +Check out Swarms examples for building agents, data retrieval, and more. + +[Checkout Swarms examples →](examples/) diff --git a/docs_edit/swarms/install/multi_agent_template.md b/docs_edit/swarms/install/multi_agent_template.md new file mode 100644 index 00000000..4063ef9e --- /dev/null +++ b/docs_edit/swarms/install/multi_agent_template.md @@ -0,0 +1,6 @@ +# Getting Started with Multi-Agent Collaboration Using the Multi-Agent Github Template + + +The Multi-Agent Github Template, a radically simple, reliable, and high-performance framework, is designed to empower developers and prompt engineers to harness the full potential of multi-agent collaboration. [LINK](https://medium.com/@kyeg/getting-started-with-multi-agent-collaboration-using-the-multi-agent-github-template-0f0a6cba0dc0) + +[GITHUB](https://github.com/kyegomez/Multi-Agent-Template-App) \ No newline at end of file diff --git a/docs_edit/swarms/memory/azure_openai.md b/docs_edit/swarms/memory/azure_openai.md new file mode 100644 index 00000000..01b169b7 --- /dev/null +++ b/docs_edit/swarms/memory/azure_openai.md @@ -0,0 +1,131 @@ +# Deploying Azure OpenAI in Production: A Comprehensive Guide + +In today's fast-paced digital landscape, leveraging cutting-edge technologies has become essential for businesses to stay competitive and provide exceptional services to their customers. One such technology that has gained significant traction is Azure OpenAI, a powerful platform that allows developers to integrate advanced natural language processing (NLP) capabilities into their applications. Whether you're building a chatbot, a content generation system, or any other AI-powered solution, Azure OpenAI offers a robust and scalable solution for production-grade deployment. + +In this comprehensive guide, we'll walk through the process of setting up and deploying Azure OpenAI in a production environment. We'll dive deep into the code, provide clear explanations, and share best practices to ensure a smooth and successful implementation. + +## Prerequisites: +Before we begin, it's essential to have the following prerequisites in place: + +1. **Python**: You'll need to have Python installed on your system. This guide assumes you're using Python 3.6 or later. +2. **Azure Subscription**: You'll need an active Azure subscription to access Azure OpenAI services. +3. **Azure OpenAI Resource**: Create an Azure OpenAI resource in your Azure subscription. +4. **Python Packages**: Install the required Python packages, including `python-dotenv` and `swarms`. + +## Setting up the Environment: +To kick things off, we'll set up our development environment and install the necessary dependencies. + +1. **Create a Virtual Environment**: It's a best practice to create a virtual environment to isolate your project dependencies from the rest of your system. You can create a virtual environment using `venv` or any other virtual environment management tool of your choice. + +``` +python -m venv myenv +``` + +2. **Activate the Virtual Environment**: Activate the virtual environment to ensure that any packages you install are isolated within the environment. + +``` +source myenv/bin/activate # On Windows, use `myenv\Scripts\activate` +``` + +3. **Install Required Packages**: Install the `python-dotenv` and `swarms` packages using pip. + +``` +pip install python-dotenv swarms +``` + +4. **Create a `.env` File**: In the root directory of your project, create a new file called `.env`. This file will store your Azure OpenAI credentials and configuration settings. + +``` +AZURE_OPENAI_ENDPOINT= +AZURE_OPENAI_DEPLOYMENT= +OPENAI_API_VERSION= +AZURE_OPENAI_API_KEY= +AZURE_OPENAI_AD_TOKEN= +``` + +Replace the placeholders with your actual Azure OpenAI credentials and configuration settings. + +## Connecting to Azure OpenAI: +Now that we've set up our environment, let's dive into the code that connects to Azure OpenAI and interacts with the language model. + +```python +import os +from dotenv import load_dotenv +from swarms import AzureOpenAI + +# Load the environment variables +load_dotenv() + +# Create an instance of the AzureOpenAI class +model = AzureOpenAI( + azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"), + deployment_name=os.getenv("AZURE_OPENAI_DEPLOYMENT"), + openai_api_version=os.getenv("OPENAI_API_VERSION"), + openai_api_key=os.getenv("AZURE_OPENAI_API_KEY"), + azure_ad_token=os.getenv("AZURE_OPENAI_AD_TOKEN") +) +``` + +## Let's break down this code: + +1. **Import Statements**: We import the necessary modules, including `os` for interacting with the operating system, `load_dotenv` from `python-dotenv` to load environment variables, and `AzureOpenAI` from `swarms` to interact with the Azure OpenAI service. + +2. **Load Environment Variables**: We use `load_dotenv()` to load the environment variables stored in the `.env` file we created earlier. + +3. **Create AzureOpenAI Instance**: We create an instance of the `AzureOpenAI` class by passing in the required configuration parameters: + - `azure_endpoint`: The endpoint URL for your Azure OpenAI resource. + - `deployment_name`: The name of the deployment you want to use. + - `openai_api_version`: The version of the OpenAI API you want to use. + - `openai_api_key`: Your Azure OpenAI API key, which authenticates your requests. + - `azure_ad_token`: An optional Azure Active Directory (AAD) token for additional security. + +Querying the Language Model: +With our connection to Azure OpenAI established, we can now query the language model and receive responses. + +```python +# Define the prompt +prompt = "Analyze this load document and assess it for any risks and create a table in markdwon format." + +# Generate a response +response = model(prompt) +print(response) +``` + +## Here's what's happening: + +1. **Define the Prompt**: We define a prompt, which is the input text or question we want to feed into the language model. + +2. **Generate a Response**: We call the `model` instance with the `prompt` as an argument. This triggers the Azure OpenAI service to process the prompt and generate a response. + +3. **Print the Response**: Finally, we print the response received from the language model. + +Running the Code: +To run the code, save it in a Python file (e.g., `main.py`) and execute it from the command line: + +``` +python main.py +``` + +## Best Practices for Production Deployment: +While the provided code serves as a basic example, there are several best practices to consider when deploying Azure OpenAI in a production environment: + +1. **Secure Credentials Management**: Instead of storing sensitive credentials like API keys in your codebase, consider using secure storage solutions like Azure Key Vault or environment variables managed by your cloud provider. + +2. **Error Handling and Retries**: Implement robust error handling and retry mechanisms to handle potential failures or rate-limiting scenarios. + +3. **Logging and Monitoring**: Implement comprehensive logging and monitoring strategies to track application performance, identify issues, and gather insights for optimization. + +4. **Scalability and Load Testing**: Conduct load testing to ensure your application can handle anticipated traffic volumes and scale appropriately based on demand. + +5. **Caching and Optimization**: Explore caching strategies and performance optimizations to improve response times and reduce the load on the Azure OpenAI service. + +6. **Integration with Other Services**: Depending on your use case, you may need to integrate Azure OpenAI with other Azure services or third-party tools for tasks like data processing, storage, or analysis. + +7. **Compliance and Security**: Ensure your application adheres to relevant compliance standards and security best practices, especially when handling sensitive data. + +## Conclusion: +Azure OpenAI is a powerful platform that enables developers to integrate advanced natural language processing capabilities into their applications. By following the steps outlined in this guide, you can set up a production-ready environment for deploying Azure OpenAI and start leveraging its capabilities in your projects. + +Remember, this guide serves as a starting point, and there are numerous additional features and capabilities within Azure OpenAI that you can explore to enhance your applications further. As with any production deployment, it's crucial to follow best practices, conduct thorough testing, and implement robust monitoring and security measures. + +With the right approach and careful planning, you can successfully deploy Azure OpenAI in a production environment and unlock the power of cutting-edge language models to drive innovation and provide exceptional experiences for your users. \ No newline at end of file diff --git a/docs_edit/swarms/memory/diy_memory.md b/docs_edit/swarms/memory/diy_memory.md new file mode 100644 index 00000000..cf9c9925 --- /dev/null +++ b/docs_edit/swarms/memory/diy_memory.md @@ -0,0 +1,603 @@ +# Building Custom Vector Memory Databases with the BaseVectorDatabase Class + +Vector databases are powerful tools that store and retrieve data in high-dimensional vector spaces, and are the best way to handle the vast amounts of data generated and consumed by AI systems. The `BaseVectorDatabase` class is a powerful abstraction layer that simplifies the process of creating and integrating custom vector memory databases from high-dimensional data into your AI applications. Here we cover the functionality of the `BaseVectorDatabase` class, including core functionality and creating custom vector memory databases using popular solutions like PostgreSQL, Pinecone, Chroma, FAISS, and more. + +## Understanding the BaseVectorDatabase Class + +The `BaseVectorDatabase` class defines the interface for interacting with a vector database. It ensures a consistent and standardized approach to database operations across different systems. + +The class provides a set of abstract methods that define the essential functionality required for working with vector databases, such as connecting to the database, executing queries, and performing CRUD (Create, Read, Update, Delete) operations. + +Here's a breakdown of the abstract methods defined in the `BaseVectorDatabase` class: + +1\. `connect()`: This method establishes a connection to the vector database. + +2\. `close()`: This method closes the connection to the vector database. + +3\. `query(query: str)`: This method executes a given query on the vector database. + +4\. `fetch_all()`: This method retrieves all rows from the result set of a query. + +5\. `fetch_one()`: This method retrieves a single row from the result set of a query. + +6\. `add(doc: str)`: This method adds a new record to the vector database. + +7\. `get(query: str)`: This method retrieves a record from the vector database based on a given query. + +8\. `update(doc)`: This method updates a record in the vector database. + +9\. `delete(message)`: This method deletes a record from the vector database. + +By inheriting from the `BaseVectorDatabase` class and implementing these abstract methods, developers can create concrete vector database implementations tailored to their specific needs and requirements. + +## Creating a Custom Vector Memory Database + +### Step 1: Inherit from the BaseVectorDatabase Class + +The first step in creating a custom vector memory database is to inherit from the `BaseVectorDatabase` class. This will provide your custom implementation with the foundational structure and interface defined by the abstract class. + +```python + +from swarms import BaseVectorDatabase + +class MyCustomVectorDatabase(BaseVectorDatabase): + +    def __init__(self, *args, **kwargs): + +        # Custom initialization logic + +        pass + +``` + +In the example above, we define a new class `MyCustomVectorDatabase` that inherits from the `BaseVectorDatabase` class. Within the `__init__` method, you can add any custom initialization logic specific to your vector database implementation. + +### Step 2: Implement the Abstract Methods + +The next step is to implement the abstract methods defined in the `BaseVectorDatabase` class. These methods provide the core functionality for interacting with your vector database, such as connecting, querying, and performing CRUD operations. + +```python +from swarms import BaseVectorDatabase + + +class MyCustomVectorDatabase(BaseVectorDatabase): + +    def __init__(self, *args, **kwargs): + +        # Custom initialization logic + +        pass + +    def connect(self): + +        # Implementation for connecting to the vector database + +        pass + +    def close(self): + +        # Implementation for closing the vector database connection + +        pass + +    def query(self, query: str): + +        # Implementation for executing a query on the vector database + +        pass + +    def fetch_all(self): + +        # Implementation for fetching all rows from the result set + +        pass + +    def fetch_one(self): + +        # Implementation for fetching a single row from the result set + +        pass + +    def add(self, doc: str): + +        # Implementation for adding a new record to the vector database + +        pass + +    def get(self, query: str): + +        # Implementation for retrieving a record from the vector database + +        pass + +    def update(self, doc): + +        # Implementation for updating a record in the vector database + +        pass + +    def delete(self, message): + +        # Implementation for deleting a record from the vector database + +        pass + +``` + +In this example, we define placeholders for each of the abstract methods within the `MyCustomVectorDatabase` class. These placeholders will be replaced with the actual implementation logic specific to your chosen vector database solution. + +### Step 3: Choose and Integrate Your Vector Database Solution + +With the foundational structure in place, it's time to choose a specific vector database solution and integrate it into your custom implementation. In this guide, we'll explore several popular vector database solutions, including PostgreSQL, Pinecone, Chroma, FAISS, and more, providing examples and guidance on how to integrate them seamlessly. + +### PostgreSQL Integration + +PostgreSQL is a powerful open-source relational database management system that supports vector data types and operations, making it a viable choice for building custom vector memory databases. + +```python + +import psycopg2 +from swarms import BaseVectorDatabase + +class PostgreSQLVectorDatabase(MyCustomVectorDatabase): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # PostgreSQL connection details + +        self.conn = psycopg2.connect( + +            host="localhost", + +            database="vector_db", + +            user="postgres", + +            password="your_password" + +        ) + +        self.cur = self.conn.cursor() + +    def connect(self): + +        # PostgreSQL connection logic + +        pass + +    def close(self): + +        # Close PostgreSQL connection + +        self.cur.close() + +        self.conn.close() + +    def query(self, query: str): + +        # Execute PostgreSQL query + +        self.cur.execute(query) + +    def fetch_all(self): + +        # Fetch all rows from PostgreSQL result set + +        return self.cur.fetchall() + +    # Implement other abstract methods + +``` + +In this example, we define a `PostgreSQLVectorDatabase` class that inherits from `MyCustomVectorDatabase`. Within the `__init__` method, we establish a connection to a PostgreSQL database using the `psycopg2` library. We then implement the `connect()`, `close()`, `query()`, and `fetch_all()` methods specific to PostgreSQL. + +### Pinecone Integration + +Pinecone is a managed vector database service that provides efficient storage, retrieval, and manipulation of high-dimensional vector data. + +```python + +import pinecone +from swarms import BaseVectorDatabase + + +class PineconeVectorDatabase(MyCustomVectorDatabase): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Pinecone initialization + +        pinecone.init(api_key="your_api_key", environment="your_environment") + +        self.index = pinecone.Index("your_index_name") + +    def connect(self): + +        # Pinecone connection logic + +        pass + +    def close(self): + +        # Close Pinecone connection + +        pass + +    def query(self, query: str): + +        # Execute Pinecone query + +        results = self.index.query(query) + +        return results + +    def add(self, doc: str): + +        # Add document to Pinecone index + +        self.index.upsert([("id", doc)]) + +    # Implement other abstract methods + +``` + +In this example, we define a `PineconeVectorDatabase` class that inherits from `MyCustomVectorDatabase`. Within the `__init__` method, we initialize the Pinecone client and create an index. We then implement the `query()` and `add()` methods specific to the Pinecone API. + +### Chroma Integration + +Chroma is an open-source vector database library that provides efficient storage, retrieval, and manipulation of vector data using various backends, including DuckDB, Chromadb, and more. + +```python +import logging +import os +import uuid +from typing import Optional + +import chromadb +from dotenv import load_dotenv + +from swarms.utils.data_to_text import data_to_text +from swarms.utils.markdown_message import display_markdown_message +from swarms.memory.base_vectordb import BaseVectorDatabase + +# Load environment variables +load_dotenv() + + +# Results storage using local ChromaDB +class ChromaDB(BaseVectorDatabase): + """ + + ChromaDB database + + Args: + metric (str): The similarity metric to use. + output (str): The name of the collection to store the results in. + limit_tokens (int, optional): The maximum number of tokens to use for the query. Defaults to 1000. + n_results (int, optional): The number of results to retrieve. Defaults to 2. + + Methods: + add: _description_ + query: _description_ + + Examples: + >>> chromadb = ChromaDB( + >>> metric="cosine", + >>> output="results", + >>> llm="gpt3", + >>> openai_api_key=OPENAI_API_KEY, + >>> ) + >>> chromadb.add(task, result, result_id) + """ + + def __init__( + self, + metric: str = "cosine", + output_dir: str = "swarms", + limit_tokens: Optional[int] = 1000, + n_results: int = 3, + docs_folder: str = None, + verbose: bool = False, + *args, + **kwargs, + ): + self.metric = metric + self.output_dir = output_dir + self.limit_tokens = limit_tokens + self.n_results = n_results + self.docs_folder = docs_folder + self.verbose = verbose + + # Disable ChromaDB logging + if verbose: + logging.getLogger("chromadb").setLevel(logging.INFO) + + # Create Chroma collection + chroma_persist_dir = "chroma" + chroma_client = chromadb.PersistentClient( + settings=chromadb.config.Settings( + persist_directory=chroma_persist_dir, + ), + *args, + **kwargs, + ) + + # Create ChromaDB client + self.client = chromadb.Client() + + # Create Chroma collection + self.collection = chroma_client.get_or_create_collection( + name=output_dir, + metadata={"hnsw:space": metric}, + *args, + **kwargs, + ) + display_markdown_message( + "ChromaDB collection created:" + f" {self.collection.name} with metric: {self.metric} and" + f" output directory: {self.output_dir}" + ) + + # If docs + if docs_folder: + display_markdown_message( + f"Traversing directory: {docs_folder}" + ) + self.traverse_directory() + + def add( + self, + document: str, + *args, + **kwargs, + ): + """ + Add a document to the ChromaDB collection. + + Args: + document (str): The document to be added. + condition (bool, optional): The condition to check before adding the document. Defaults to True. + + Returns: + str: The ID of the added document. + """ + try: + doc_id = str(uuid.uuid4()) + self.collection.add( + ids=[doc_id], + documents=[document], + *args, + **kwargs, + ) + print("-----------------") + print("Document added successfully") + print("-----------------") + return doc_id + except Exception as e: + raise Exception(f"Failed to add document: {str(e)}") + + def query( + self, + query_text: str, + *args, + **kwargs, + ): + """ + Query documents from the ChromaDB collection. + + Args: + query (str): The query string. + n_docs (int, optional): The number of documents to retrieve. Defaults to 1. + + Returns: + dict: The retrieved documents. + """ + try: + docs = self.collection.query( + query_texts=[query_text], + n_results=self.n_results, + *args, + **kwargs, + )["documents"] + return docs[0] + except Exception as e: + raise Exception(f"Failed to query documents: {str(e)}") + + def traverse_directory(self): + """ + Traverse through every file in the given directory and its subdirectories, + and return the paths of all files. + Parameters: + - directory_name (str): The name of the directory to traverse. + Returns: + - list: A list of paths to each file in the directory and its subdirectories. + """ + added_to_db = False + + for root, dirs, files in os.walk(self.docs_folder): + for file in files: + file = os.path.join(self.docs_folder, file) + _, ext = os.path.splitext(file) + data = data_to_text(file) + added_to_db = self.add(str(data)) + print(f"{file} added to Database") + + return added_to_db + +``` + +In this example, we define a `ChromaVectorDatabase` class that inherits from `MyCustomVectorDatabase`. Within the `__init__` method, we create a Chroma client and get or create a collection. We then implement the `query()` and `add()` methods specific to the Chroma API. + +### FAISS Integration + +FAISS (Facebook AI Similarity Search) is a library for efficient similarity search and clustering of dense vectors, developed by Meta AI. + +```python + +import faiss + +class FAISSVectorDatabase(MyCustomVectorDatabase): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # FAISS initialization + +        self.index = faiss.IndexFlatL2(64)  # Assuming 64-dimensional vectors + +        self.index_path = "faiss_index.index" + +    def connect(self): + +        # FAISS connection logic + +        self.index = faiss.read_index(self.index_path) + +    def close(self): + +        # Close FAISS connection + +        faiss.write_index(self.index, self.index_path) + +    def query(self, query: str): + +        # Execute FAISS query + +        query_vector = # Convert query to vector + +        distances, indices = self.index.search(query_vector, k=10) + +        return [(self.index.reconstruct(i), d) for i, d in zip(indices, distances)] + +    def add(self, doc: str): + +        # Add document to FAISS index + +        doc_vector = # Convert doc to vector + +        self.index.add(doc_vector) + +    # Implement other abstract methods + +``` + +Now, how do you integrate a vector datbase with an agent? This is how: + +## Integrate Memory with `Agent` + +### Creating an Agent with Memory + +```python +import os + +from dotenv import load_dotenv + +# Import the OpenAIChat model and the Agent struct +from swarms import Agent, OpenAIChat + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") + + +# Initilaize the chromadb client +faiss = FAISSVectorDatabase() + +# Initialize the language model +llm = OpenAIChat( + temperature=0.5, + model_name="gpt-4", + openai_api_key=api_key, + max_tokens=1000, +) + +## Initialize the workflow +agent = Agent( + llm=llm, + max_loops=4, + autosave=True, + dashboard=True, + long_term_memory=faiss, +) + +# Run the workflow on a task +out = agent.run("Generate a 10,000 word blog on health and wellness.") +print(out) +``` + +In this example, we define a `FAISSVectorDatabase` class that inherits from `MyCustomVectorDatabase`. Within the `__init__` method, we create a FAISS index and set the index path. We then implement the `connect()`, `close()`, `query()`, and `add()` methods specific to the FAISS library, assuming 64-dimensional vectors for simplicity. + +These examples provide a starting point for integrating various vector database solutions into your custom implementation. Each solution has its own strengths, weaknesses, and trade-offs, so it's essential to carefully evaluate your requirements and choose the solution that best fits your needs. + +### Step 4: Add Custom Functionality and Optimizations + +Once you've integrated your chosen vector database solution, you can further extend and optimize your custom implementation by adding custom functionality and performance optimizations. + +#### Custom Functionality: + +- **Indexing Strategies**: Implement custom indexing strategies to optimize search performance and memory usage. + +- **Data Preprocessing**: Add data preprocessing logic to handle different data formats, perform embedding, and prepare data for storage in the vector database. + +- **Query Optimization**: Introduce query optimization techniques, such as query caching, result filtering, or query rewriting, to improve query performance. + +- **Data Partitioning**: Implement data partitioning strategies to distribute data across multiple nodes or shards for better scalability and performance. + +- **Metadata Management**: Introduce metadata management capabilities to store and retrieve additional information associated with the vector data. + +Performance Optimizations: + +- **Caching**: Implement caching mechanisms to reduce redundant computations and improve response times. + +- **Asynchronous Operations**: Utilize asynchronous programming techniques to improve concurrency and responsiveness. + +- **Multithreading and Parallelization**: Leverage multithreading and parallelization to distribute computationally intensive tasks across multiple cores or processors. + +- **Load Balancing**: Implement load balancing strategies to distribute workloads evenly across multiple nodes or instances. + +- **Monitoring and Profiling**: Introduce monitoring and profiling tools to identify performance bottlenecks and optimize critical sections of your code. + +By adding custom functionality and performance optimizations, you can tailor your custom vector memory database to meet the specific requirements of your AI applications, ensuring efficient and scalable data management. + +### Best Practices and Considerations + +Building custom vector memory databases is a powerful but complex endeavor. To ensure the success and longevity of your implementation, it's essential to follow best practices and consider potential challenges and considerations. + +1\. **Scalability and Performance Testing**: Vector databases can quickly grow in size and complexity as your AI applications handle increasing amounts of data. Thoroughly test your implementation for scalability and performance under various load conditions, and optimize accordingly. + +2\. **Data Quality and Integrity**: Ensure that the data stored in your vector database is accurate, consistent, and free from duplicates or errors. Implement data validation and cleansing mechanisms to maintain data quality and integrity. + +3\. **Security and Access Control**: Vector databases may store sensitive or proprietary data. Implement robust security measures, such as encryption, access controls, and auditing mechanisms, to protect your data from unauthorized access or breaches. + +4\. **Distributed Architectures**: As your data and workloads grow, consider implementing distributed architectures to distribute the storage and computational load across multiple nodes or clusters. This can improve scalability, fault tolerance, and overall performance. + +5\. **Data Versioning and Backup**: Implement data versioning and backup strategies to ensure data integrity and enable recovery in case of errors or system failures. + +6\. **Documentation and Maintainability**: Well-documented code and comprehensive documentation are essential for ensuring the long-term maintainability and extensibility of your custom vector memory database implementation. + +7\. **Continuous Integration and Deployment**: Adopt continuous integration and deployment practices to streamline the development, testing, and deployment processes, ensuring that changes are thoroughly tested and deployed efficiently. + +8\. **Compliance and Regulatory Requirements**: Depending on your industry and use case, ensure that your custom vector memory database implementation complies with relevant regulations and standards, such as data privacy laws or industry-specific guidelines. + +9\. **Community Engagement and Collaboration**: Stay engaged with the vector database community, participate in discussions, and collaborate with other developers to share knowledge, best practices, and insights. + +By following these best practices and considering potential challenges, you can build robust, scalable, and efficient custom vector memory databases that meet the demanding requirements of modern AI applications. + +# Conclusion + +In this comprehensive guide, we've explored the `BaseVectorDatabase` class and its role in simplifying the process of creating custom vector memory databases. We've covered the core functionality of the class, walked through the step-by-step process of inheriting and extending its functionality, and provided examples of integrating popular vector database solutions like PostgreSQL, Pinecone, Chroma, and FAISS. + +Building custom vector memory databases empowers developers to create tailored and efficient data management solutions that seamlessly integrate with their AI applications. By leveraging the power of vector databases, you can unlock new possibilities in data storage, retrieval, and manipulation, enabling your AI systems to handle vast amounts of high-dimensional data with ease. + +Remember, the journey of building custom vector memory databases is an iterative and collaborative process that requires continuous learning, adaptation, and refinement. Embrace the challenges, stay up-to-date with the latest developments in vector databases and AI, and continuously strive to optimize and enhance your implementations. + +As you embark on this journey, keep in mind the importance of scalability, performance, data quality, security, and compliance. Foster an environment of collaboration, knowledge sharing, and community engagement to ensure that your custom vector memory databases are robust, reliable, and capable of meeting the ever-evolving demands of the AI landscape. + +So, dive in, leverage the power of the `BaseVectorDatabase` class, and create the custom vector memory databases that will drive the future of AI-powered applications. diff --git a/docs_edit/swarms/memory/pg.md b/docs_edit/swarms/memory/pg.md new file mode 100644 index 00000000..3695e11c --- /dev/null +++ b/docs_edit/swarms/memory/pg.md @@ -0,0 +1,350 @@ +# `PgVectorVectorStore` Documentation + +## Table of Contents + +1. [Introduction](#introduction) +2. [Overview](#overview) +3. [Class Definition](#class-definition) +4. [Functionality and Usage](#functionality-and-usage) + - [Setting Up the Database](#setting-up-the-database) + - [Upserting Vectors](#upserting-vectors) + - [Loading Vector Entries](#loading-vector-entries) + - [Querying Vectors](#querying-vectors) +5. [Additional Information](#additional-information) +6. [References and Resources](#references-and-resources) + +--- + +## 1. Introduction + +Welcome to the documentation for the Swarms `PgVectorVectorStore` class! Swarms is a library that provides various memory and storage options for high-dimensional vectors. In this documentation, we will focus on the `PgVectorVectorStore` class, which is a vector storage driver that uses PostgreSQL with the PGVector extension as the underlying storage engine. + +### 1.1 Purpose + +The `PgVectorVectorStore` class allows you to interact with a PostgreSQL database and store high-dimensional vectors efficiently. By using Swarms with PostgreSQL and PGVector, you can manage and work with vector data in your applications with ease. + +### 1.2 Key Features + +- Integration with PostgreSQL and PGVector for vector storage. +- Simple and convenient API for upserting vectors, querying, and loading entries. +- Support for creating and managing vector collections in PostgreSQL. + +--- + +## 2. Overview + +Before diving into the details of the `PgVectorVectorStore` class, let's provide an overview of its purpose and functionality. + +The `PgVectorVectorStore` class is designed to: + +- Store high-dimensional vectors in a PostgreSQL database with the PGVector extension. +- Offer a seamless and efficient way to upsert vectors into the database. +- Provide methods for loading individual vector entries or all vector entries in a collection. +- Support vector queries, allowing you to find vectors similar to a given query vector. + +In the following sections, we will explore the class definition, its parameters, and how to use it effectively. + +--- + +## 3. Class Definition + +Let's start by examining the class definition of `PgVectorVectorStore`, including its attributes and parameters. + +```python +class PgVectorVectorStore(BaseVectorStore): + """ + A vector store driver to Postgres using the PGVector extension. + + Attributes: + connection_string: An optional string describing the target Postgres database instance. + create_engine_params: Additional configuration params passed when creating the database connection. + engine: An optional sqlalchemy Postgres engine to use. + table_name: Optionally specify the name of the table to used to store vectors. + ... + """ +``` + +Attributes: + +- `connection_string` (Optional[str]): An optional string describing the target Postgres database instance. +- `create_engine_params` (dict): Additional configuration parameters passed when creating the database connection. +- `engine` (Optional[Engine]): An optional SQLAlchemy Postgres engine to use. +- `table_name` (str): Optionally specify the name of the table to be used to store vectors. + +### 3.1 Attribute Validators + +The class includes validators for the `connection_string` and `engine` attributes to ensure their proper usage. These validators help maintain consistency in attribute values. + +### 3.2 Initialization + +During initialization, the class checks if an engine is provided. If an engine is not provided, it creates a new database connection using the `connection_string` and `create_engine_params`. + +--- + +## 4. Functionality and Usage + +In this section, we will explore the functionality of the `PgVectorVectorStore` class and provide detailed instructions on how to use it effectively. + +### 4.1 Setting Up the Database + +Before using the `PgVectorVectorStore` to store and query vectors, you need to set up the database. This includes creating the necessary extensions and database schema. You can do this using the `setup` method. + +```python +def setup( + self, + create_schema: bool = True, + install_uuid_extension: bool = True, + install_vector_extension: bool = True, +) -> None: + """ + Provides a mechanism to initialize the database schema and extensions. + + Parameters: + - create_schema (bool): If True, creates the necessary database schema for vector storage. Default: True. + - install_uuid_extension (bool): If True, installs the UUID extension in the database. Default: True. + - install_vector_extension (bool): If True, installs the PGVector extension in the database. Default: True. + """ +``` + +#### Example 1: Setting Up the Database + +```python +# Initialize the PgVectorVectorStore instance +vector_store = PgVectorVectorStore( + connection_string="your-db-connection-string", table_name="your-table-name" +) + +# Set up the database with default settings +vector_store.setup() +``` + +#### Example 2: Customized Database Setup + +```python +# Initialize the PgVectorVectorStore instance +vector_store = PgVectorVectorStore( + connection_string="your-db-connection-string", table_name="your-table-name" +) + +# Set up the database with customized settings +vector_store.setup( + create_schema=False, install_uuid_extension=True, install_vector_extension=True +) +``` + +### 4.2 Upserting Vectors + +The `upsert_vector` method allows you to insert or update a vector in the collection. You can specify the vector, an optional vector ID, namespace, and metadata. + +```python +def upsert_vector( + self, + vector: list[float], + vector_id: Optional[str] = None, + namespace: Optional[str] = None, + meta: Optional[dict] = None, + **kwargs, +) -> str: + """ + Inserts or updates a vector in the collection. + + Parameters: + - vector (list[float]): The vector to upsert. + - vector_id (Optional[str]): An optional ID for the vector. If not provided, a unique ID will be generated. + - namespace (Optional[str]): An optional namespace for the vector. + - meta (Optional[dict]): An optional metadata dictionary associated with the vector. + - **kwargs: Additional keyword arguments. + + Returns: + - str: The ID of the upserted vector. + """ +``` + +#### Example: Upserting a Vector + +```python +# Initialize the PgVectorVectorStore instance +vector_store = PgVectorVectorStore( + connection_string="your-db-connection-string", table_name="your-table-name" +) + +# Define a vector and upsert it +vector = [0.1, 0.2, 0.3, 0.4] +vector_id = "unique-vector-id" +namespace = "your-namespace" +meta = {"key1": "value1", "key2": "value2"} + +vector_store.upsert_vector( + vector=vector, vector_id=vector_id, namespace=namespace, meta=meta +) +``` + +### 4.3 Loading Vector Entries + +You can load vector entries from the collection using the `load_entry` and `load_entries` methods. + +#### 4 + +.3.1 Loading a Single Entry + +The `load_entry` method allows you to load a specific vector entry based on its identifier and optional namespace. + +```python +def load_entry( + self, vector_id: str, namespace: Optional[str] = None +) -> BaseVectorStore.Entry: + """ + Retrieves a specific vector entry from the collection based on its identifier and optional namespace. + + Parameters: + - vector_id (str): The ID of the vector to retrieve. + - namespace (Optional[str]): An optional namespace for filtering. Default: None. + + Returns: + - BaseVectorStore.Entry: The loaded vector entry. + """ +``` + +#### Example: Loading a Single Entry + +```python +# Initialize the PgVectorVectorStore instance +vector_store = PgVectorVectorStore(connection_string="your-db-connection-string", table_name="your-table-name") + +# Load a specific vector entry +loaded_entry = vector_store.load_entry(vector_id="unique-vector-id", namespace="your-namespace") + +if loaded_entry is not None: + loaded_vector = loaded_entry.vector + loaded_meta = loaded_entry.meta + # Use the loaded vector and metadata as needed +else: + # Vector not found +``` + +#### 4.3.2 Loading Multiple Entries + +The `load_entries` method allows you to load all vector entries from the collection, optionally filtering by namespace. + +```python +def load_entries(self, namespace: Optional[str] = None) -> list[BaseVectorStore.Entry]: + """ + Retrieves all vector entries from the collection, optionally filtering to only those that match the provided namespace. + + Parameters: + - namespace (Optional[str]): An optional namespace for filtering. Default: None. + + Returns: + - list[BaseVectorStore.Entry]: A list of loaded vector entries. + """ +``` + +#### Example: Loading Multiple Entries + +```python +# Initialize the PgVectorVectorStore instance +vector_store = PgVectorVectorStore( + connection_string="your-db-connection-string", table_name="your-table-name" +) + +# Load all vector entries in the specified namespace +entries = vector_store.load_entries(namespace="your-namespace") + +# Process the loaded entries +for entry in entries: + vector_id = entry.id + vector = entry.vector + meta = entry.meta + + # Handle the loaded entries as needed +``` + +### 4.4 Querying Vectors + +You can perform vector queries to find vectors similar to a given query vector using the `query` method. You can specify the query string, the maximum number of results to return, and other options. + +```python +def query( + self, + query: str, + count: Optional[int] = BaseVectorStore.DEFAULT_QUERY_COUNT, + namespace: Optional[str] = None, + include_vectors: bool = False, + distance_metric: str = "cosine_distance", + **kwargs, +) -> list[BaseVectorStore.QueryResult]: + """ + Performs a search on the collection to find vectors similar to the provided input vector, + optionally filtering to only those that match the provided namespace. + + Parameters: + - query (str): The query string to find similar vectors. + - count (Optional[int]): Maximum number of results to return. Default: BaseVectorStore.DEFAULT_QUERY_COUNT. + - namespace (Optional[str]): An optional namespace for filtering. Default: None. + - include_vectors (bool): If True, includes vectors in the query results. Default: False. + - distance_metric (str): The distance metric to use for similarity measurement. + Options: "cosine_distance", "l2_distance", "inner_product". Default: "cosine_distance". + - **kwargs: Additional keyword arguments. + + Returns: + - list[BaseVectorStore.QueryResult]: A list of query results, each containing vector ID, vector (if included), score, and metadata. + """ +``` + +#### Example: Querying Vectors + +```python +# Initialize the PgVectorVectorStore instance +vector_store = PgVectorVectorStore( + connection_string="your-db-connection-string", table_name="your-table-name" +) + +# Perform a vector query +query_string = "your-query-string" +count = 10 # Maximum number of results to return +namespace = "your-namespace" +include_vectors = False # Set to True to include vectors in results +distance_metric = "cosine_distance" + +results = vector_store.query( + query=query_string, + count=count, + namespace=namespace, + include_vectors=include_vectors, + distance_metric=distance_metric, +) + +# Process the query results +for result in results: + vector_id = result.id + vector = result.vector + score = result.score + meta = result.meta + + # Handle the results as needed +``` + +--- + +## 5. Additional Information + +Here are some additional tips and information for using the `PgVectorVectorStore` class effectively: + +- When upserting vectors, you can generate a unique vector ID using a hash of the vector's content to ensure uniqueness. +- Consider using namespaces to organize and categorize vectors within your PostgreSQL database. +- You can choose from different distance metrics (cosine distance, L2 distance, inner product) for vector querying based on your application's requirements. +- Keep your database connection string secure and follow best practices for database access control. + +--- + +## 6. References and Resources + +Here are some references and resources for further information on Swarms and PostgreSQL with PGVector: + +- [Swarms GitHub Repository](https://github.com/swarms): Swarms library on GitHub for updates and contributions. +- [PostgreSQL Official Website](https://www.postgresql.org/): Official PostgreSQL website for documentation and resources. +- [PGVector GitHub Repository](https://github.com/ankane/pgvector): PGVector extension on GitHub for detailed information. + +--- + +This concludes the documentation for the Swarms `PgVectorVectorStore` class. You now have a comprehensive understanding of how to use Swarms with PostgreSQL and PGVector for vector storage. If you have any further questions or need assistance, please refer to the provided references and resources. Happy coding! \ No newline at end of file diff --git a/docs_edit/swarms/memory/pinecone.md b/docs_edit/swarms/memory/pinecone.md new file mode 100644 index 00000000..f8ca0f2e --- /dev/null +++ b/docs_edit/swarms/memory/pinecone.md @@ -0,0 +1,293 @@ +# `PineconeDB` Documentation + +## Table of Contents + +1. [Introduction](#introduction) +2. [PineconeVector Class](#pineconevector-class) +3. [Installation](#installation) +4. [Usage](#usage) + - [Creating a PineconeVector Instance](#creating-a-pineconevector-instance) + - [Creating an Index](#creating-an-index) + - [Upserting Vectors](#upserting-vectors) + - [Querying the Index](#querying-the-index) + - [Loading an Entry](#loading-an-entry) + - [Loading Entries](#loading-entries) +5. [Additional Information](#additional-information) +6. [References and Resources](#references-and-resources) + +--- + +## 1. Introduction + +Welcome to the Swarms documentation! Swarms is a library that provides various memory and storage options for high-dimensional vectors. In this documentation, we will focus on the `PineconeVector` class, which is a vector storage driver that uses Pinecone as the underlying storage engine. + +### 1.1 Purpose + +The `PineconeVector` class allows you to interact with Pinecone, a vector database that enables the storage, search, and retrieval of high-dimensional vectors with speed and low latency. By using Swarms with Pinecone, you can easily manage and work with vector data in your applications without the need to manage infrastructure. + +### 1.2 Key Features + +- Seamless integration with Pinecone for vector storage. +- Simple and convenient API for upserting vectors, querying, and loading entries. +- Support for creating and managing indexes. + +--- + +## 2. PineconeVector Class + +The `PineconeVector` class is the core component of Swarms that interacts with Pinecone for vector storage. Below, we will provide an in-depth overview of this class, including its purpose, parameters, and methods. + +### 2.1 Class Definition + +```python +class PineconeVector(BaseVector): +``` + +### 2.2 Parameters + +The `PineconeVector` class accepts the following parameters during initialization: + +- `api_key` (str): The API key for your Pinecone account. +- `index_name` (str): The name of the index to use. +- `environment` (str): The environment to use. Either "us-west1-gcp" or "us-east1-gcp". +- `project_name` (str, optional): The name of the project to use. Defaults to `None`. +- `index` (pinecone.Index, optional): The Pinecone index to use. Defaults to `None`. + +### 2.3 Methods + +The `PineconeVector` class provides several methods for interacting with Pinecone: + +#### 2.3.1 `upsert_vector` + +```python +def upsert_vector( + self, + vector: list[float], + vector_id: Optional[str] = None, + namespace: Optional[str] = None, + meta: Optional[dict] = None, + **kwargs +) -> str: +``` + +Upserts a vector into the index. + +- `vector` (list[float]): The vector to upsert. +- `vector_id` (Optional[str]): An optional ID for the vector. If not provided, a unique ID will be generated. +- `namespace` (Optional[str]): An optional namespace for the vector. +- `meta` (Optional[dict]): An optional metadata dictionary associated with the vector. +- `**kwargs`: Additional keyword arguments. + +#### 2.3.2 `load_entry` + +```python +def load_entry( + self, vector_id: str, namespace: Optional[str] = None +) -> Optional[BaseVector.Entry]: +``` + +Loads a single vector from the index. + +- `vector_id` (str): The ID of the vector to load. +- `namespace` (Optional[str]): An optional namespace for the vector. + +#### 2.3.3 `load_entries` + +```python +def load_entries(self, namespace: Optional[str] = None) -> list[BaseVector.Entry]: +``` + +Loads all vectors from the index. + +- `namespace` (Optional[str]): An optional namespace for the vectors. + +#### 2.3.4 `query` + +```python +def query( + self, + query: str, + count: Optional[int] = None, + namespace: Optional[str] = None, + include_vectors: bool = False, + include_metadata=True, + **kwargs +) -> list[BaseVector.QueryResult]: +``` + +Queries the index for vectors similar to the given query string. + +- `query` (str): The query string. +- `count` (Optional[int]): The maximum number of results to return. If not provided, a default value is used. +- `namespace` (Optional[str]): An optional namespace for the query. +- `include_vectors` (bool): Whether to include vectors in the query results. +- `include_metadata` (bool): Whether to include metadata in the query results. +- `**kwargs`: Additional keyword arguments. + +#### 2.3.5 `create_index` + +```python +def create_index(self, name: str, **kwargs) -> None: +``` + +Creates a new index. + +- `name` (str): The name of the index to create. +- `**kwargs`: Additional keyword arguments. + +--- + +## 3. Installation + +To use the Swarms library and the `PineconeVector` class, you will need to install the library and its dependencies. Follow these steps to get started: + +1. Install Swarms: + +```bash +pip install swarms +``` + +2. Install Pinecone: + +You will also need a Pinecone account and API key. Follow the instructions on the Pinecone website to create an account and obtain an API key. + +3. Import the necessary modules in your Python code: + +```python +from swarms.memory.vector_stores.pinecone import PineconeVector +``` + +Now you're ready to use the `PineconeVector` class to work with Pinecone for vector storage. + +--- + +## 4. Usage + +In this section, we will provide detailed examples of how to use the `PineconeVector` class for vector storage with Pinecone. + +### 4.1 Creating a PineconeVector Instance + +To get started, you need to create an instance of the `PineconeVector` class. You will need your Pinecone API key, the name of the index you want to use, and the environment. You can also specify an optional project name if you have one. + +```python +pv = PineconeVector( + api_key="your-api-key", + index_name="your-index-name", + environment="us-west1-gcp", + project_name="your-project-name", +) +``` + +### 4.2 Creating an Index + +Before you can upsert vectors, you need to create an index in Pinecone. You can use the `create_index` method for this purpose. + +```python +pv.create_index("your-index-name") +``` + +### 4.3 Upserting Vectors + +You can upsert vectors into the Pine + +cone index using the `upsert_vector` method. This method allows you to specify the vector, an optional vector ID, namespace, and metadata. + +```python +vector = [0.1, 0.2, 0.3, 0.4] +vector_id = "unique-vector-id" +namespace = "your-namespace" +meta = {"key1": "value1", "key2": "value2"} + +pv.upsert_vector(vector=vector, vector_id=vector_id, namespace=namespace, meta=meta) +``` + +### 4.4 Querying the Index + +You can query the Pinecone index to find vectors similar to a given query string using the `query` method. You can specify the query string, the maximum number of results to return, and other options. + +```python +query_string = "your-query-string" +count = 10 # Maximum number of results to return +namespace = "your-namespace" +include_vectors = False # Set to True to include vectors in results +include_metadata = True + +results = pv.query( + query=query_string, + count=count, + namespace=namespace, + include_vectors=include_vectors, + include_metadata=include_metadata, +) + +# Process the query results +for result in results: + vector_id = result.id + vector = result.vector + score = result.score + meta = result.meta + + # Handle the results as needed +``` + +### 4.5 Loading an Entry + +You can load a single vector entry from the Pinecone index using the `load_entry` method. Provide the vector ID and an optional namespace. + +```python +vector_id = "your-vector-id" +namespace = "your-namespace" + +entry = pv.load_entry(vector_id=vector_id, namespace=namespace) + +if entry is not None: + loaded_vector = entry.vector + loaded_meta = entry.meta + + # Use the loaded vector and metadata +else: + # Vector not found +``` + +### 4.6 Loading Entries + +To load all vectors from the Pinecone index, you can use the `load_entries` method. You can also specify an optional namespace. + +```python +namespace = "your-namespace" + +entries = pv.load_entries(namespace=namespace) + +# Process the loaded entries +for entry in entries: + vector_id = entry.id + vector = entry.vector + meta = entry.meta + + # Handle the loaded entries as needed +``` + +--- + +## 5. Additional Information + +In this section, we provide additional information and tips for using the `PineconeVector` class effectively. + +- When upserting vectors, you can generate a unique vector ID using a hash of the vector's content to ensure uniqueness. +- Consider using namespaces to organize and categorize vectors within your Pinecone index. +- Pinecone provides powerful querying capabilities, so be sure to explore and leverage its features to retrieve relevant vectors efficiently. +- Keep your Pinecone API key secure and follow Pinecone's best practices for API key management. + +--- + +## 6. References and Resources + +Here are some references and resources for further information on Pinecone and Swarms: + +- [Pinecone Website](https://www.pinecone.io/): Official Pinecone website for documentation and resources. +- [Pinecone Documentation](https://docs.pinecone.io/): Detailed documentation for Pinecone. +- [Swarms GitHub Repository](https://github.com/swarms): Swarms library on GitHub for updates and contributions. + +--- + +This concludes the documentation for the Swarms library and the `PineconeVector` class. You now have a deep understanding of how to use Swarms with Pinecone for vector storage. If you have any further questions or need assistance, please refer to the provided references and resources. Happy coding! \ No newline at end of file diff --git a/docs_edit/swarms/memory/qdrant.md b/docs_edit/swarms/memory/qdrant.md new file mode 100644 index 00000000..cfc65670 --- /dev/null +++ b/docs_edit/swarms/memory/qdrant.md @@ -0,0 +1,86 @@ +# Qdrant Client Library + +## Overview + +The Qdrant Client Library is designed for interacting with the Qdrant vector database, allowing efficient storage and retrieval of high-dimensional vector data. It integrates with machine learning models for embedding and is particularly suited for search and recommendation systems. + +## Installation + +```python +pip install qdrant-client sentence-transformers httpx +``` + +## Class Definition: Qdrant + +```python +class Qdrant: + def __init__( + self, + api_key: str, + host: str, + port: int = 6333, + collection_name: str = "qdrant", + model_name: str = "BAAI/bge-small-en-v1.5", + https: bool = True, + ): + ... +``` + +### Constructor Parameters + +| Parameter | Type | Description | Default Value | +|-----------------|---------|--------------------------------------------------|-----------------------| +| api_key | str | API key for authentication. | - | +| host | str | Host address of the Qdrant server. | - | +| port | int | Port number for the Qdrant server. | 6333 | +| collection_name | str | Name of the collection to be used or created. | "qdrant" | +| model_name | str | Name of the sentence transformer model. | "BAAI/bge-small-en-v1.5" | +| https | bool | Flag to use HTTPS for connection. | True | + +### Methods + +#### `_load_embedding_model(model_name: str)` + +Loads the sentence embedding model. + +#### `_setup_collection()` + +Checks if the specified collection exists in Qdrant; if not, creates it. + +#### `add_vectors(docs: List[dict]) -> OperationResponse` + +Adds vectors to the Qdrant collection. + +#### `search_vectors(query: str, limit: int = 3) -> SearchResult` + +Searches the Qdrant collection for vectors similar to the query vector. + +## Usage Examples + +### Example 1: Setting Up the Qdrant Client + +```python +from qdrant_client import Qdrant + +qdrant_client = Qdrant(api_key="your_api_key", host="localhost", port=6333) +``` + +### Example 2: Adding Vectors to a Collection + +```python +documents = [{"page_content": "Sample text 1"}, {"page_content": "Sample text 2"}] + +operation_info = qdrant_client.add_vectors(documents) +print(operation_info) +``` + +### Example 3: Searching for Vectors + +```python +search_result = qdrant_client.search_vectors("Sample search query") +print(search_result) +``` + +## Further Information + +Refer to the [Qdrant Documentation](https://qdrant.tech/docs) for more details on the Qdrant vector database. diff --git a/docs_edit/swarms/memory/short_term_memory.md b/docs_edit/swarms/memory/short_term_memory.md new file mode 100644 index 00000000..9ee3a738 --- /dev/null +++ b/docs_edit/swarms/memory/short_term_memory.md @@ -0,0 +1,250 @@ +# Short-Term Memory Module Documentation + +## Introduction +The Short-Term Memory module is a component of the SWARMS framework designed for managing short-term and medium-term memory in a multi-agent system. This documentation provides a detailed explanation of the Short-Term Memory module, its purpose, functions, and usage. + +### Purpose +The Short-Term Memory module serves the following purposes: +1. To store and manage messages in short-term memory. +2. To provide functions for retrieving, updating, and clearing memory. +3. To facilitate searching for specific terms within the memory. +4. To enable saving and loading memory data to/from a file. + +### Class Definition +```python +class ShortTermMemory(BaseStructure): + def __init__( + self, + return_str: bool = True, + autosave: bool = True, + *args, + **kwargs, + ): + ... +``` + +#### Parameters +| Parameter | Type | Default Value | Description | +|---------------------|----------|---------------|------------------------------------------------------------------------------------------------------------------| +| `return_str` | bool | True | If True, returns memory as a string. | +| `autosave` | bool | True | If True, enables automatic saving of memory data to a file. | +| `*args`, `**kwargs` | | | Additional arguments and keyword arguments (not used in the constructor but allowed for flexibility). | + +### Functions + +#### 1. `add` +```python +def add(self, role: str = None, message: str = None, *args, **kwargs): +``` + +- Adds a message to the short-term memory. +- Parameters: + - `role` (str, optional): Role associated with the message. + - `message` (str, optional): The message to be added. +- Returns: The added memory. + +##### Example 1: Adding a Message to Short-Term Memory +```python +memory.add(role="Agent 1", message="Received task assignment.") +``` + +##### Example 2: Adding Multiple Messages to Short-Term Memory +```python +messages = [("Agent 1", "Received task assignment."), ("Agent 2", "Task completed.")] +for role, message in messages: + memory.add(role=role, message=message) +``` + +#### 2. `get_short_term` +```python +def get_short_term(self): +``` + +- Retrieves the short-term memory. +- Returns: The contents of the short-term memory. + +##### Example: Retrieving Short-Term Memory +```python +short_term_memory = memory.get_short_term() +for entry in short_term_memory: + print(entry["role"], ":", entry["message"]) +``` + +#### 3. `get_medium_term` +```python +def get_medium_term(self): +``` + +- Retrieves the medium-term memory. +- Returns: The contents of the medium-term memory. + +##### Example: Retrieving Medium-Term Memory +```python +medium_term_memory = memory.get_medium_term() +for entry in medium_term_memory: + print(entry["role"], ":", entry["message"]) +``` + +#### 4. `clear_medium_term` +```python +def clear_medium_term(self): +``` + +- Clears the medium-term memory. + +##### Example: Clearing Medium-Term Memory +```python +memory.clear_medium_term() +``` + +#### 5. `get_short_term_memory_str` +```python +def get_short_term_memory_str(self, *args, **kwargs): +``` + +- Retrieves the short-term memory as a string. +- Returns: A string representation of the short-term memory. + +##### Example: Getting Short-Term Memory as a String +```python +short_term_memory_str = memory.get_short_term_memory_str() +print(short_term_memory_str) +``` + +#### 6. `update_short_term` +```python +def update_short_term(self, index, role: str, message: str, *args, **kwargs): +``` + +- Updates a message in the short-term memory. +- Parameters: + - `index` (int): The index of the message to update. + - `role` (str): New role for the message. + - `message` (str): New message content. +- Returns: None. + +##### Example: Updating a Message in Short-Term Memory +```python +memory.update_short_term( + index=0, role="Updated Role", message="Updated message content." +) +``` + +#### 7. `clear` +```python +def clear(self): +``` + +- Clears the short-term memory. + +##### Example: Clearing Short-Term Memory +```python +memory.clear() +``` + +#### 8. `search_memory` +```python +def search_memory(self, term): +``` + +- Searches the memory for a specific term. +- Parameters: + - `term` (str): The term to search for. +- Returns: A dictionary containing search results for short-term and medium-term memory. + +##### Example: Searching Memory for a Term +```python +search_results = memory.search_memory("task") +print("Short-Term Memory Results:", search_results["short_term"]) +print("Medium-Term Memory Results:", search_results["medium_term"]) +``` + +#### 9. `return_shortmemory_as_str` +```python +def return_shortmemory_as_str(self): +``` + +- Returns the memory as a string. + +##### Example: Returning Short-Term Memory as a String +```python +short_term_memory_str = memory.return_shortmemory_as_str() +print(short_term_memory_str) +``` + +#### 10. `move_to_medium_term` +```python +def move_to_medium_term(self, index): +``` + +- Moves a message from the short-term memory to the medium-term memory. +- Parameters: + - `index` (int): The index of the message to move. + +##### Example: Moving a Message to Medium-Term Memory +```python +memory.move_to_medium_term(index=0) +``` + +#### 11. `return_medium_memory_as_str` +```python +def return_medium_memory_as_str(self): +``` + +- Returns the medium-term memory as a string. + +##### Example: Returning Medium-Term Memory as a String +```python +medium_term_memory_str = memory.return_medium_memory_as_str() +print(medium_term_memory_str) +``` + +#### 12. `save_to_file` +```python +def save_to_file(self, filename: str): +``` + +- Saves the memory data to a file. +- Parameters: + - `filename` (str): The name of the file to save the data to. + +##### Example: Saving Memory Data to a File +```python +memory.save_to_file("memory_data.json") +``` + +#### 13. `load_from_file` +```python +def load_from_file(self, filename: str, *args, **kwargs): +``` + +- Loads memory data from a file. +- Parameters: + - `filename` (str): The name of the file to load data from. + +##### Example: Loading Memory Data from a File +```python +memory.load_from_file("memory_data.json") +``` + +### Additional Information and Tips + +- To use the Short-Term Memory module effectively, consider the following tips: + - Use the `add` function to store messages in short-term memory. + - + + Retrieve memory contents using `get_short_term` and `get_medium_term` functions. + - Clear memory as needed using `clear` and `clear_medium_term` functions. + - Search for specific terms within the memory using the `search_memory` function. + - Save and load memory data to/from files using `save_to_file` and `load_from_file` functions. + +- Ensure proper exception handling when using memory functions to handle potential errors gracefully. + +- When using the `search_memory` function, iterate through the results dictionary to access search results for short-term and medium-term memory. + +### References and Resources + +- For more information on multi-agent systems and memory management, refer to the SWARMS framework documentation: [SWARMS Documentation](https://swarms.apac.ai/). + +- For advanced memory management and customization, explore the SWARMS framework source code. + diff --git a/docs_edit/swarms/memory/weaviate.md b/docs_edit/swarms/memory/weaviate.md new file mode 100644 index 00000000..dc264653 --- /dev/null +++ b/docs_edit/swarms/memory/weaviate.md @@ -0,0 +1,204 @@ +# Weaviate API Client Documentation + +## Overview + +The Weaviate API Client is an interface to Weaviate, a vector database with a GraphQL API. This client allows you to interact with Weaviate programmatically, making it easier to create collections, add objects, query data, update objects, and delete objects within your Weaviate instance. + +This documentation provides a comprehensive guide on how to use the Weaviate API Client, including its initialization, methods, and usage examples. + +## Table of Contents + +- [Installation](#installation) +- [Initialization](#initialization) +- [Methods](#methods) + - [create_collection](#create-collection) + - [add](#add) + - [query](#query) + - [update](#update) + - [delete](#delete) +- [Examples](#examples) + +## Installation + +Before using the Weaviate API Client, make sure to install the `swarms` library. You can install it using pip: + +```bash +pip install swarms +``` + +## Initialization + +To use the Weaviate API Client, you need to initialize an instance of the `WeaviateDB` class. Here are the parameters you can pass to the constructor: + +| Parameter | Type | Description | +|----------------------|----------------|----------------------------------------------------------------------------------------------------------------------------------| +| `http_host` | str | The HTTP host of the Weaviate server. | +| `http_port` | str | The HTTP port of the Weaviate server. | +| `http_secure` | bool | Whether to use HTTPS. | +| `grpc_host` | Optional[str] | The gRPC host of the Weaviate server. (Optional) | +| `grpc_port` | Optional[str] | The gRPC port of the Weaviate server. (Optional) | +| `grpc_secure` | Optional[bool] | Whether to use gRPC over TLS. (Optional) | +| `auth_client_secret` | Optional[Any] | The authentication client secret. (Optional) | +| `additional_headers` | Optional[Dict[str, str]] | Additional headers to send with requests. (Optional) | +| `additional_config` | Optional[weaviate.AdditionalConfig] | Additional configuration for the client. (Optional) | +| `connection_params` | Dict[str, Any] | Dictionary containing connection parameters. This parameter is used internally and can be ignored in most cases. | + +Here's an example of how to initialize a WeaviateDB: + +```python +from swarms.memory import WeaviateDB + +weaviate_client = WeaviateDB( + http_host="YOUR_HTTP_HOST", + http_port="YOUR_HTTP_PORT", + http_secure=True, + grpc_host="YOUR_gRPC_HOST", + grpc_port="YOUR_gRPC_PORT", + grpc_secure=True, + auth_client_secret="YOUR_APIKEY", + additional_headers={"X-OpenAI-Api-Key": "YOUR_OPENAI_APIKEY"}, + additional_config=None, # You can pass additional configuration here +) +``` + +## Methods + +### `create_collection` + +The `create_collection` method allows you to create a new collection in Weaviate. A collection is a container for storing objects with specific properties. + +#### Parameters + +- `name` (str): The name of the collection. +- `properties` (List[Dict[str, Any]]): A list of dictionaries specifying the properties of objects to be stored in the collection. +- `vectorizer_config` (Any, optional): Additional vectorizer configuration for the collection. (Optional) + +#### Usage + +```python +weaviate_client.create_collection( + name="my_collection", + properties=[ + {"name": "property1", "dataType": ["string"]}, + {"name": "property2", "dataType": ["int"]}, + ], + vectorizer_config=None, # Optional vectorizer configuration +) +``` + +### `add` + +The `add` method allows you to add an object to a specified collection in Weaviate. + +#### Parameters + +- `collection_name` (str): The name of the collection where the object will be added. +- `properties` (Dict[str, Any]): A dictionary specifying the properties of the object to be added. + +#### Usage + +```python +weaviate_client.add( + collection_name="my_collection", properties={"property1": "value1", "property2": 42} +) +``` + +### `query` + +The `query` method allows you to query objects from a specified collection in Weaviate. + +#### Parameters + +- `collection_name` (str): The name of the collection to query. +- `query` (str): The query string specifying the search criteria. +- `limit` (int, optional): The maximum number of results to return. (Default: 10) + +#### Usage + +```python +results = weaviate_client.query( + collection_name="my_collection", + query="property1:value1", + limit=20 # Optional, specify the limit + + if needed +) +``` + +### `update` + +The `update` method allows you to update an object in a specified collection in Weaviate. + +#### Parameters + +- `collection_name` (str): The name of the collection where the object exists. +- `object_id` (str): The ID of the object to be updated. +- `properties` (Dict[str, Any]): A dictionary specifying the properties to update. + +#### Usage + +```python +weaviate_client.update( + collection_name="my_collection", + object_id="object123", + properties={"property1": "new_value", "property2": 99}, +) +``` + +### `delete` + +The `delete` method allows you to delete an object from a specified collection in Weaviate. + +#### Parameters + +- `collection_name` (str): The name of the collection from which to delete the object. +- `object_id` (str): The ID of the object to delete. + +#### Usage + +```python +weaviate_client.delete(collection_name="my_collection", object_id="object123") +``` + +## Examples + +Here are three examples demonstrating how to use the Weaviate API Client for common tasks: + +### Example 1: Creating a Collection + +```python +weaviate_client.create_collection( + name="people", + properties=[ + {"name": "name", "dataType": ["string"]}, + {"name": "age", "dataType": ["int"]}, + ], +) +``` + +### Example 2: Adding an Object + +```python +weaviate_client.add(collection_name="people", properties={"name": "John", "age": 30}) +``` + +### Example 3: Querying Objects + +```python +results = weaviate_client.query(collection_name="people", query="name:John", limit=5) +``` + +These examples cover the basic operations of creating collections, adding objects, and querying objects using the Weaviate API Client. + +## Additional Information and Tips + +- If you encounter any errors during the operations, the client will raise exceptions with informative error messages. +- You can explore more advanced features and configurations in the Weaviate documentation. +- Make sure to handle authentication and security appropriately when using the client in production environments. + +## References and Resources + +- [Weaviate Documentation](https://weaviate.readthedocs.io/en/latest/): Official documentation for Weaviate. +- [Weaviate GitHub Repository](https://github.com/semi-technologies/weaviate): The source code and issue tracker for Weaviate. + +This documentation provides a comprehensive guide on using the Weaviate API Client to interact with Weaviate, making it easier to manage and query your data. \ No newline at end of file diff --git a/docs_edit/swarms/models/anthropic.md b/docs_edit/swarms/models/anthropic.md new file mode 100644 index 00000000..438adfbe --- /dev/null +++ b/docs_edit/swarms/models/anthropic.md @@ -0,0 +1,109 @@ +# **Documentation for the `Anthropic` Class** + +## **Overview and Introduction** + +The `Anthropic` class provides an interface to interact with the Anthropic large language models. This class encapsulates the necessary functionality to request completions from the Anthropic API based on a provided prompt and other configurable parameters. + +### **Key Concepts and Terminology** + +- **Anthropic**: A large language model, akin to GPT-3 and its successors. +- **Prompt**: A piece of text that serves as the starting point for model completions. +- **Stop Sequences**: Specific tokens or sequences to indicate when the model should stop generating. +- **Tokens**: Discrete pieces of information in a text. For example, in English, a token can be as short as one character or as long as one word. + +## **Class Definition** + +### `Anthropic` +```python +class Anthropic: + """Anthropic large language models.""" +``` + +### Parameters: + +- `model (str)`: The name of the model to use for completions. Default is "claude-2". + +- `max_tokens_to_sample (int)`: Maximum number of tokens to generate in the output. Default is 256. + +- `temperature (float, optional)`: Sampling temperature. A higher value will make the output more random, while a lower value will make it more deterministic. + +- `top_k (int, optional)`: Sample from the top-k most probable next tokens. Setting this parameter can reduce randomness in the output. + +- `top_p (float, optional)`: Sample from the smallest set of tokens such that their cumulative probability exceeds the specified value. Used in nucleus sampling to provide a balance between randomness and determinism. + +- `streaming (bool)`: Whether to stream the output or not. Default is False. + +- `default_request_timeout (int, optional)`: Default timeout in seconds for API requests. Default is 600. + +### **Methods and their Functionality** + +#### `_default_params(self) -> dict` + +- Provides the default parameters for calling the Anthropic API. + +- **Returns**: A dictionary containing the default parameters. + +#### `generate(self, prompt: str, stop: list[str] = None) -> str` + +- Calls out to Anthropic's completion endpoint to generate text based on the given prompt. + +- **Parameters**: + - `prompt (str)`: The input text to provide context for the generated text. + + - `stop (list[str], optional)`: Sequences to indicate when the model should stop generating. + +- **Returns**: A string containing the model's generated completion based on the prompt. + +#### `__call__(self, prompt: str, stop: list[str] = None) -> str` + +- An alternative to the `generate` method that allows calling the class instance directly. + +- **Parameters**: + - `prompt (str)`: The input text to provide context for the generated text. + + - `stop (list[str], optional)`: Sequences to indicate when the model should stop generating. + +- **Returns**: A string containing the model's generated completion based on the prompt. + +## **Usage Examples** + +```python +# Import necessary modules and classes +from swarms.models import Anthropic + +# Initialize an instance of the Anthropic class +model = Anthropic(anthropic_api_key="") + +# Using the run method +completion_1 = model.run("What is the capital of France?") +print(completion_1) + +# Using the __call__ method +completion_2 = model("How far is the moon from the earth?", stop=["miles", "km"]) +print(completion_2) +``` + +## **Mathematical Formula** + +The underlying operations of the `Anthropic` class involve probabilistic sampling based on token logits from the Anthropic model. Mathematically, the process of generating a token \( t \) from the given logits \( l \) can be described by the softmax function: + +\[ P(t) = \frac{e^{l_t}}{\sum_{i} e^{l_i}} \] + +Where: +- \( P(t) \) is the probability of token \( t \). +- \( l_t \) is the logit corresponding to token \( t \). +- The summation runs over all possible tokens. + +The temperature, top-k, and top-p parameters are further used to modulate the probabilities. + +## **Additional Information and Tips** + +- Ensure you have a valid `ANTHROPIC_API_KEY` set as an environment variable or passed during class instantiation. + +- Always handle exceptions that may arise from API timeouts or invalid prompts. + +## **References and Resources** + +- [Anthropic's official documentation](https://www.anthropic.com/docs) + +- [Token-based sampling in Language Models](https://arxiv.org/abs/1904.09751) for a deeper understanding of token sampling. \ No newline at end of file diff --git a/docs_edit/swarms/models/base_llm.md b/docs_edit/swarms/models/base_llm.md new file mode 100644 index 00000000..0c678165 --- /dev/null +++ b/docs_edit/swarms/models/base_llm.md @@ -0,0 +1,227 @@ +# Language Model Interface Documentation + +## Table of Contents + +1. [Introduction](#introduction) +2. [Abstract Language Model](#abstract-language-model) + - [Initialization](#initialization) + - [Attributes](#attributes) + - [Methods](#methods) +3. [Implementation](#implementation) +4. [Usage Examples](#usage-examples) +5. [Additional Features](#additional-features) +6. [Performance Metrics](#performance-metrics) +7. [Logging and Checkpoints](#logging-and-checkpoints) +8. [Resource Utilization Tracking](#resource-utilization-tracking) +9. [Conclusion](#conclusion) + +--- + +## 1. Introduction + +The Language Model Interface (`BaseLLM`) is a flexible and extensible framework for working with various language models. This documentation provides a comprehensive guide to the interface, its attributes, methods, and usage examples. Whether you're using a pre-trained language model or building your own, this interface can help streamline the process of text generation, chatbots, summarization, and more. + +## 2. Abstract Language Model + +### Initialization + +The `BaseLLM` class provides a common interface for language models. It can be initialized with various parameters to customize model behavior. Here are the initialization parameters: + +| Parameter | Description | Default Value | +|------------------------|-------------------------------------------------------------------------------------------------|---------------| +| `model_name` | The name of the language model to use. | None | +| `max_tokens` | The maximum number of tokens in the generated text. | None | +| `temperature` | The temperature parameter for controlling randomness in text generation. | None | +| `top_k` | The top-k parameter for filtering words in text generation. | None | +| `top_p` | The top-p parameter for filtering words in text generation. | None | +| `system_prompt` | A system-level prompt to set context for generation. | None | +| `beam_width` | The beam width for beam search. | None | +| `num_return_sequences` | The number of sequences to return in the output. | None | +| `seed` | The random seed for reproducibility. | None | +| `frequency_penalty` | The frequency penalty parameter for promoting word diversity. | None | +| `presence_penalty` | The presence penalty parameter for discouraging repetitions. | None | +| `stop_token` | A stop token to indicate the end of generated text. | None | +| `length_penalty` | The length penalty parameter for controlling the output length. | None | +| `role` | The role of the language model (e.g., assistant, user, etc.). | None | +| `max_length` | The maximum length of generated sequences. | None | +| `do_sample` | Whether to use sampling during text generation. | None | +| `early_stopping` | Whether to use early stopping during text generation. | None | +| `num_beams` | The number of beams to use in beam search. | None | +| `repition_penalty` | The repetition penalty parameter for discouraging repeated tokens. | None | +| `pad_token_id` | The token ID for padding. | None | +| `eos_token_id` | The token ID for the end of a sequence. | None | +| `bos_token_id` | The token ID for the beginning of a sequence. | None | +| `device` | The device to run the model on (e.g., 'cpu' or 'cuda'). | None | + +### Attributes + +- `model_name`: The name of the language model being used. +- `max_tokens`: The maximum number of tokens in generated text. +- `temperature`: The temperature parameter controlling randomness. +- `top_k`: The top-k parameter for word filtering. +- `top_p`: The top-p parameter for word filtering. +- `system_prompt`: A system-level prompt for context. +- `beam_width`: The beam width for beam search. +- `num_return_sequences`: The number of output sequences. +- `seed`: The random seed for reproducibility. +- `frequency_penalty`: The frequency penalty parameter. +- `presence_penalty`: The presence penalty parameter. +- `stop_token`: The stop token to indicate text end. +- `length_penalty`: The length penalty parameter. +- `role`: The role of the language model. +- `max_length`: The maximum length of generated sequences. +- `do_sample`: Whether to use sampling during generation. +- `early_stopping`: Whether to use early stopping. +- `num_beams`: The number of beams in beam search. +- `repition_penalty`: The repetition penalty parameter. +- `pad_token_id`: The token ID for padding. +- `eos_token_id`: The token ID for the end of a sequence. +- `bos_token_id`: The token ID for the beginning of a sequence. +- `device`: The device used for model execution. +- `history`: A list of conversation history. + +### Methods + +The `BaseLLM` class defines several methods for working with language models: + +- `run(task: Optional[str] = None, *args, **kwargs) -> str`: Generate text using the language model. This method is abstract and must be implemented by subclasses. + +- `arun(task: Optional[str] = None, *args, **kwargs)`: An asynchronous version of `run` for concurrent text generation. + +- `batch_run(tasks: List[str], *args, **kwargs)`: Generate text for a batch of tasks. + +- `abatch_run(tasks: List[str], *args, **kwargs)`: An asynchronous version of `batch_run` for concurrent batch generation. + +- `chat(task: str, history: str = "") -> str`: Conduct a chat with the model, providing a conversation history. + +- `__call__(task: str) -> str`: Call the model to generate text. + +- `_tokens_per_second() -> float`: Calculate tokens generated per second. + +- `_num_tokens(text: str) -> int`: Calculate the number of tokens in a text. + +- `_time_for_generation(task: str) -> float`: Measure the time taken for text generation. + +- `generate_summary(text: str) -> str`: Generate a summary of the provided text. + +- `set_temperature(value: float)`: Set the temperature parameter. + +- `set_max_tokens(value: int)`: Set the maximum number of tokens. + +- `clear_history()`: Clear the conversation history. + +- `enable_logging(log_file: str = "model.log")`: Initialize logging for the model. + +- `log_event(message: str)`: Log an event. + +- `save_checkpoint(checkpoint_dir: str = "checkpoints")`: Save the model state as a checkpoint. + +- `load_checkpoint(checkpoint_path: str)`: Load the model state from a checkpoint. + +- `toggle_creative_mode(enable: bool)`: Toggle creative mode for the model. + +- `track_resource_utilization()`: Track and report resource utilization. + +- ` + +get_generation_time() -> float`: Get the time taken for text generation. + +- `set_max_length(max_length: int)`: Set the maximum length of generated sequences. + +- `set_model_name(model_name: str)`: Set the model name. + +- `set_frequency_penalty(frequency_penalty: float)`: Set the frequency penalty parameter. + +- `set_presence_penalty(presence_penalty: float)`: Set the presence penalty parameter. + +- `set_stop_token(stop_token: str)`: Set the stop token. + +- `set_length_penalty(length_penalty: float)`: Set the length penalty parameter. + +- `set_role(role: str)`: Set the role of the model. + +- `set_top_k(top_k: int)`: Set the top-k parameter. + +- `set_top_p(top_p: float)`: Set the top-p parameter. + +- `set_num_beams(num_beams: int)`: Set the number of beams. + +- `set_do_sample(do_sample: bool)`: Set whether to use sampling. + +- `set_early_stopping(early_stopping: bool)`: Set whether to use early stopping. + +- `set_seed(seed: int)`: Set the random seed. + +- `set_device(device: str)`: Set the device for model execution. + +## 3. Implementation + +The `BaseLLM` class serves as the base for implementing specific language models. Subclasses of `BaseLLM` should implement the `run` method to define how text is generated for a given task. This design allows flexibility in integrating different language models while maintaining a common interface. + +## 4. Usage Examples + +To demonstrate how to use the `BaseLLM` interface, let's create an example using a hypothetical language model. We'll initialize an instance of the model and generate text for a simple task. + +```python +# Import the BaseLLM class +from swarms.models import BaseLLM + +# Create an instance of the language model +language_model = BaseLLM( + model_name="my_language_model", + max_tokens=50, + temperature=0.7, + top_k=50, + top_p=0.9, + device="cuda", +) + +# Generate text for a task +task = "Translate the following English text to French: 'Hello, world.'" +generated_text = language_model.run(task) + +# Print the generated text +print(generated_text) +``` + +In this example, we've created an instance of our hypothetical language model, configured its parameters, and used the `run` method to generate text for a translation task. + +## 5. Additional Features + +The `BaseLLM` interface provides additional features for customization and control: + +- `batch_run`: Generate text for a batch of tasks efficiently. +- `arun` and `abatch_run`: Asynchronous versions of `run` and `batch_run` for concurrent text generation. +- `chat`: Conduct a conversation with the model by providing a history of the conversation. +- `__call__`: Allow the model to be called directly to generate text. + +These features enhance the flexibility and utility of the interface in various applications, including chatbots, language translation, and content generation. + +## 6. Performance Metrics + +The `BaseLLM` class offers methods for tracking performance metrics: + +- `_tokens_per_second`: Calculate tokens generated per second. +- `_num_tokens`: Calculate the number of tokens in a text. +- `_time_for_generation`: Measure the time taken for text generation. + +These metrics help assess the efficiency and speed of text generation, enabling optimizations as needed. + +## 7. Logging and Checkpoints + +Logging and checkpointing are crucial for tracking model behavior and ensuring reproducibility: + +- `enable_logging`: Initialize logging for the model. +- `log_event`: Log events and activities. +- `save_checkpoint`: Save the model state as a checkpoint. +- `load_checkpoint`: Load the model state from a checkpoint. + +These capabilities aid in debugging, monitoring, and resuming model experiments. + +## 8. Resource Utilization Tracking + +The `track_resource_utilization` method is a placeholder for tracking and reporting resource utilization, such as CPU and memory usage. It can be customized to suit specific monitoring needs. + +## 9. Conclusion + +The Language Model Interface (`BaseLLM`) is a versatile framework for working with language models. Whether you're using pre-trained models or developing your own, this interface provides a consistent and extensible foundation. By following the provided guidelines and examples, you can integrate and customize language models for various natural language processing tasks. \ No newline at end of file diff --git a/docs_edit/swarms/models/base_multimodal_model.md b/docs_edit/swarms/models/base_multimodal_model.md new file mode 100644 index 00000000..c1a8373d --- /dev/null +++ b/docs_edit/swarms/models/base_multimodal_model.md @@ -0,0 +1,299 @@ +# `BaseMultiModalModel` Documentation + +Swarms is a Python library that provides a framework for running multimodal AI models. It allows you to combine text and image inputs and generate coherent and context-aware responses. This library is designed to be extensible, allowing you to integrate various multimodal models. + +## Table of Contents + +1. [Introduction](#introduction) +2. [Installation](#installation) +3. [Getting Started](#getting-started) +4. [BaseMultiModalModel Class](#basemultimodalmodel-class) + - [Initialization](#initialization) + - [Methods](#methods) +5. [Usage Examples](#usage-examples) +6. [Additional Tips](#additional-tips) +7. [References and Resources](#references-and-resources) + +## 1. Introduction + +Swarms is designed to simplify the process of working with multimodal AI models. These models are capable of understanding and generating content based on both textual and image inputs. With this library, you can run such models and receive context-aware responses. + +## 2. Installation + +To install swarms, you can use pip: + +```bash +pip install swarms +``` + +## 3. Getting Started + +To get started with Swarms, you'll need to import the library and create an instance of the `BaseMultiModalModel` class. This class serves as the foundation for running multimodal models. + +```python +from swarms.models import BaseMultiModalModel + +model = BaseMultiModalModel( + model_name="your_model_name", + temperature=0.5, + max_tokens=500, + max_workers=10, + top_p=1, + top_k=50, + beautify=False, + device="cuda", + max_new_tokens=500, + retries=3, +) +``` + +You can customize the initialization parameters based on your model's requirements. + +## 4. BaseMultiModalModel Class + +### Initialization + +The `BaseMultiModalModel` class is initialized with several parameters that control its behavior. Here's a breakdown of the initialization parameters: + +| Parameter | Description | Default Value | +|------------------|-------------------------------------------------------------------------------------------------------|---------------| +| `model_name` | The name of the multimodal model to use. | None | +| `temperature` | The temperature parameter for controlling randomness in text generation. | 0.5 | +| `max_tokens` | The maximum number of tokens in the generated text. | 500 | +| `max_workers` | The maximum number of concurrent workers for running tasks. | 10 | +| `top_p` | The top-p parameter for filtering words in text generation. | 1 | +| `top_k` | The top-k parameter for filtering words in text generation. | 50 | +| `beautify` | Whether to beautify the output text. | False | +| `device` | The device to run the model on (e.g., 'cuda' or 'cpu'). | 'cuda' | +| `max_new_tokens` | The maximum number of new tokens allowed in generated responses. | 500 | +| `retries` | The number of retries in case of an error during text generation. | 3 | +| `system_prompt` | A system-level prompt to set context for generation. | None | +| `meta_prompt` | A meta prompt to provide guidance for including image labels in responses. | None | + +### Methods + +The `BaseMultiModalModel` class defines various methods for running multimodal models and managing interactions: + +- `run(task: str, img: str) -> str`: Run the multimodal model with a text task and an image URL to generate a response. + +- `arun(task: str, img: str) -> str`: Run the multimodal model asynchronously with a text task and an image URL to generate a response. + +- `get_img_from_web(img: str) -> Image`: Fetch an image from a URL and return it as a PIL Image. + +- `encode_img(img: str) -> str`: Encode an image to base64 format. + +- `get_img(img: str) -> Image`: Load an image from the local file system and return it as a PIL Image. + +- `clear_chat_history()`: Clear the chat history maintained by the model. + +- `run_many(tasks: List[str], imgs: List[str]) -> List[str]`: Run the model on multiple text tasks and image URLs concurrently and return a list of responses. + +- `run_batch(tasks_images: List[Tuple[str, str]]) -> List[str]`: Process a batch of text tasks and image URLs and return a list of responses. + +- `run_batch_async(tasks_images: List[Tuple[str, str]]) -> List[str]`: Process a batch of text tasks and image URLs asynchronously and return a list of responses. + +- `run_batch_async_with_retries(tasks_images: List[Tuple[str, str]]) -> List[str]`: Process a batch of text tasks and image URLs asynchronously with retries in case of errors and return a list of responses. + +- `unique_chat_history() -> List[str]`: Get the unique chat history stored by the model. + +- `run_with_retries(task: str, img: str) -> str`: Run the model with retries in case of an error. + +- `run_batch_with_retries(tasks_images: List[Tuple[str, str]]) -> List[str]`: Run a batch of tasks with retries in case of errors and return a list of responses. + +- `_tokens_per_second() -> float`: Calculate the tokens generated per second during text generation. + +- `_time_for_generation(task: str) -> float`: Measure the time taken for text generation for a specific task. + +- `generate_summary(text: str) -> str`: Generate a summary of the provided text. + +- `set_temperature(value: float)`: Set the temperature parameter for controlling randomness in text generation. + +- `set_max_tokens(value: int)`: Set the maximum number of tokens allowed in generated responses. + +- `get_generation_time() -> float`: Get the time taken for text generation for the last task. + +- `get_chat_history() -> List[str]`: Get the chat history, including all interactions. + +- `get_unique_chat_history() -> List[str]`: Get the unique chat history, removing duplicate interactions. + +- `get_chat_history_length() -> int`: Get the length of the chat history. + +- `get_unique_chat_history_length() -> int`: Get the length of the unique chat history. + +- `get_chat_history_tokens() -> int`: Get the total number of tokens in the chat history. + +- `print_beautiful(content: str, color: str = 'cyan')`: Print content beautifully using colored text. + +- `stream(content: str)`: Stream the content, printing it character by character. + +- `meta_prompt() -> str`: Get the meta prompt that provides guidance for including image labels in responses. + +## 5. Usage Examples + +Let's explore some usage examples of the MultiModalAI library: + +### Example 1: Running + + the Model + +```python +# Import the library +from swarms.models import BaseMultiModalModel + +# Create an instance of the model +model = BaseMultiModalModel( + model_name="your_model_name", + temperature=0.5, + max_tokens=500, + device="cuda", +) + +# Run the model with a text task and an image URL +response = model.run( + "Generate a summary of this text", "https://www.example.com/image.jpg" +) +print(response) +``` + +### Example 2: Running Multiple Tasks Concurrently + +```python +# Import the library +from swarms.models import BaseMultiModalModel + +# Create an instance of the model +model = BaseMultiModalModel( + model_name="your_model_name", + temperature=0.5, + max_tokens=500, + max_workers=4, + device="cuda", +) + +# Define a list of tasks and image URLs +tasks = ["Task 1", "Task 2", "Task 3"] +images = ["https://image1.jpg", "https://image2.jpg", "https://image3.jpg"] + +# Run the model on multiple tasks concurrently +responses = model.run_many(tasks, images) +for response in responses: + print(response) +``` + +### Example 3: Running the Model Asynchronously + +```python +# Import the library +from swarms.models import BaseMultiModalModel + +# Create an instance of the model +model = BaseMultiModalModel( + model_name="your_model_name", + temperature=0.5, + max_tokens=500, + device="cuda", +) + +# Define a list of tasks and image URLs +tasks_images = [ + ("Task 1", "https://image1.jpg"), + ("Task 2", "https://image2.jpg"), + ("Task 3", "https://image3.jpg"), +] + +# Run the model on multiple tasks asynchronously +responses = model.run_batch_async(tasks_images) +for response in responses: + print(response) +``` + +### Example 4: Inheriting `BaseMultiModalModel` for it's prebuilt classes +```python +from swarms.models import BaseMultiModalModel + + +class CustomMultiModalModel(BaseMultiModalModel): + def __init__(self, model_name, custom_parameter, *args, **kwargs): + # Call the parent class constructor + super().__init__(model_name=model_name, *args, **kwargs) + # Initialize custom parameters specific to your model + self.custom_parameter = custom_parameter + + def __call__(self, text, img): + # Implement the multimodal model logic here + # You can use self.custom_parameter and other inherited attributes + pass + + def generate_summary(self, text): + # Implement the summary generation logic using your model + # You can use self.custom_parameter and other inherited attributes + pass + + +# Create an instance of your custom multimodal model +custom_model = CustomMultiModalModel( + model_name="your_custom_model_name", + custom_parameter="your_custom_value", + temperature=0.5, + max_tokens=500, + device="cuda", +) + +# Run your custom model +response = custom_model.run( + "Generate a summary of this text", "https://www.example.com/image.jpg" +) +print(response) + +# Generate a summary using your custom model +summary = custom_model.generate_summary("This is a sample text to summarize.") +print(summary) +``` + +In the code above: + +1. We define a `CustomMultiModalModel` class that inherits from `BaseMultiModalModel`. + +2. In the constructor of our custom class, we call the parent class constructor using `super()` and initialize any custom parameters specific to our model. In this example, we introduced a `custom_parameter`. + +3. We override the `__call__` method, which is responsible for running the multimodal model logic. Here, you can implement the specific behavior of your model, considering both text and image inputs. + +4. We override the `generate_summary` method, which is used to generate a summary of text input. You can implement your custom summarization logic here. + +5. We create an instance of our custom model, passing the required parameters, including the custom parameter. + +6. We demonstrate how to run the custom model and generate a summary using it. + +By inheriting from `BaseMultiModalModel`, you can leverage the prebuilt features and methods provided by the library while customizing the behavior of your multimodal model. This allows you to create powerful and specialized models for various multimodal tasks. + +These examples demonstrate how to use MultiModalAI to run multimodal models with text and image inputs. You can adjust the parameters and methods to suit your specific use cases. + +## 6. Additional Tips + +Here are some additional tips and considerations for using MultiModalAI effectively: + +- **Custom Models**: You can create your own multimodal models and inherit from the `BaseMultiModalModel` class to integrate them with this library. + +- **Retries**: In cases where text generation might fail due to various reasons (e.g., server issues), using methods with retries can be helpful. + +- **Monitoring**: You can monitor the performance of your model using methods like `_tokens_per_second()` and `_time_for_generation()`. + +- **Chat History**: The library maintains a chat history, allowing you to keep track of interactions. + +- **Streaming**: The `stream()` method can be useful for displaying output character by character, which can be helpful for certain applications. + +## 7. References and Resources + +Here are some references and resources that you may find useful for working with multimodal models: + +- [Hugging Face Transformers Library](https://huggingface.co/transformers/): A library for working with various transformer-based models. + +- [PIL (Python Imaging Library)](https://pillow.readthedocs.io/en/stable/): Documentation for working with images in Python using the Pillow library. + +- [Concurrent Programming in Python](https://docs.python.org/3/library/concurrent.futures.html): Official Python documentation for concurrent programming. + +- [Requests Library Documentation](https://docs.python-requests.org/en/latest/): Documentation for the Requests library, which is used for making HTTP requests. + +- [Base64 Encoding in Python](https://docs.python.org/3/library/base64.html): Official Python documentation for base64 encoding and decoding. + +This concludes the documentation for the MultiModalAI library. You can now explore the library further and integrate it with your multimodal AI projects. \ No newline at end of file diff --git a/docs_edit/swarms/models/custom_model.md b/docs_edit/swarms/models/custom_model.md new file mode 100644 index 00000000..624b5372 --- /dev/null +++ b/docs_edit/swarms/models/custom_model.md @@ -0,0 +1,107 @@ +# How to Create A Custom Language Model + +When working with advanced language models, there might come a time when you need a custom solution tailored to your specific needs. Inheriting from an `BaseLLM` in a Python framework allows developers to create custom language model classes with ease. This developer guide will take you through the process step by step. + +### Prerequisites + +Before you begin, ensure that you have: + +- A working knowledge of Python programming. +- Basic understanding of object-oriented programming (OOP) in Python. +- Familiarity with language models and natural language processing (NLP). +- The appropriate Python framework installed, with access to `BaseLLM`. + +### Step-by-Step Guide + +#### Step 1: Understand `BaseLLM` + +The `BaseLLM` is an abstract base class that defines a set of methods and properties which your custom language model (LLM) should implement. Abstract classes in Python are not designed to be instantiated directly but are meant to be subclasses. + +#### Step 2: Create a New Class + +Start by defining a new class that inherits from `BaseLLM`. This class will implement the required methods defined in the abstract base class. + +```python +from swarms import BaseLLM + +class vLLMLM(BaseLLM): + pass +``` + +#### Step 3: Initialize Your Class + +Implement the `__init__` method to initialize your custom LLM. You'll want to initialize the base class as well and define any additional parameters for your model. + +```python +class vLLMLM(BaseLLM): + def __init__(self, model_name='default_model', tensor_parallel_size=1, *args, **kwargs): + super().__init__(*args, **kwargs) + self.model_name = model_name + self.tensor_parallel_size = tensor_parallel_size + # Add any additional initialization here +``` + +#### Step 4: Implement Required Methods + +Implement the `run` method or any other abstract methods required by `BaseLLM`. This is where you define how your model processes input and returns output. + +```python +class vLLMLM(BaseLLM): + # ... existing code ... + + def run(self, task, *args, **kwargs): + # Logic for running your model goes here + return "Processed output" +``` + +#### Step 5: Test Your Model + +Instantiate your custom LLM and test it to ensure that it works as expected. + +```python +model = vLLMLM(model_name='my_custom_model', tensor_parallel_size=2) +output = model.run("What are the symptoms of COVID-19?") +print(output) # Outputs: "Processed output" +``` + +#### Step 6: Integrate Additional Components + +Depending on the requirements, you might need to integrate additional components such as database connections, parallel computing resources, or custom processing pipelines. + +#### Step 7: Documentation + +Write comprehensive docstrings for your class and its methods. Good documentation is crucial for maintaining the code and for other developers who might use your model. + +```python +class vLLMLM(BaseLLM): + """ + A custom language model class that extends BaseLLM. + + ... more detailed docstring ... + """ + # ... existing code ... +``` + +#### Step 8: Best Practices + +Follow best practices such as error handling, input validation, and resource management to ensure your model is robust and reliable. + +#### Step 9: Packaging Your Model + +Package your custom LLM class into a module or package that can be easily distributed and imported into other projects. + +#### Step 10: Version Control and Collaboration + +Use a version control system like Git to track changes to your model. This makes collaboration easier and helps you keep a history of your work. + +### Conclusion + +By following this guide, you should now have a custom model that extends the `BaseLLM`. Remember that the key to a successful custom LLM is understanding the base functionalities, implementing necessary changes, and testing thoroughly. Keep iterating and improving based on feedback and performance metrics. + +### Further Reading + +- Official Python documentation on abstract base classes. +- In-depth tutorials on object-oriented programming in Python. +- Advanced NLP techniques and optimization strategies for language models. + +This guide provides the fundamental steps to create custom models using `BaseLLM`. For detailed implementation and advanced customization, it's essential to dive deeper into the specific functionalities and capabilities of the language model framework you are using. \ No newline at end of file diff --git a/docs_edit/swarms/models/dalle3.md b/docs_edit/swarms/models/dalle3.md new file mode 100644 index 00000000..346489c7 --- /dev/null +++ b/docs_edit/swarms/models/dalle3.md @@ -0,0 +1,261 @@ +# `Dalle3` Documentation + +## Table of Contents + +1. [Introduction](#introduction) +2. [Installation](#installation) +3. [Quick Start](#quick-start) +4. [Dalle3 Class](#dalle3-class) + - [Attributes](#attributes) + - [Methods](#methods) +5. [Usage Examples](#usage-examples) +6. [Error Handling](#error-handling) +7. [Advanced Usage](#advanced-usage) +8. [References](#references) + +--- + +## Introduction + +The Dalle3 library is a Python module that provides an easy-to-use interface for generating images from text descriptions using the DALL·E 3 model by OpenAI. DALL·E 3 is a powerful language model capable of converting textual prompts into images. This documentation will guide you through the installation, setup, and usage of the Dalle3 library. + +--- + +## Installation + +To use the Dalle3 model, you must first install swarms: + +```bash +pip install swarms +``` + +--- + +## Quick Start + +Let's get started with a quick example of using the Dalle3 library to generate an image from a text prompt: + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class +dalle = Dalle3() + +# Define a text prompt +task = "A painting of a dog" + +# Generate an image from the text prompt +image_url = dalle3(task) + +# Print the generated image URL +print(image_url) +``` + +This example demonstrates the basic usage of the Dalle3 library to convert a text prompt into an image. The generated image URL will be printed to the console. + +--- + +## Dalle3 Class + +The Dalle3 library provides a `Dalle3` class that allows you to interact with the DALL·E 3 model. This class has several attributes and methods for generating images from text prompts. + +### Attributes + +- `model` (str): The name of the DALL·E 3 model. Default: "dall-e-3". +- `img` (str): The image URL generated by the Dalle3 API. +- `size` (str): The size of the generated image. Default: "1024x1024". +- `max_retries` (int): The maximum number of API request retries. Default: 3. +- `quality` (str): The quality of the generated image. Default: "standard". +- `n` (int): The number of variations to create. Default: 4. + +### Methods + +#### `__call__(self, task: str) -> Dalle3` + +This method makes a call to the Dalle3 API and returns the image URL generated from the provided text prompt. + +Parameters: +- `task` (str): The text prompt to be converted to an image. + +Returns: +- `Dalle3`: An instance of the Dalle3 class with the image URL generated by the Dalle3 API. + +#### `create_variations(self, img: str)` + +This method creates variations of an image using the Dalle3 API. + +Parameters: +- `img` (str): The image to be used for the API request. + +Returns: +- `img` (str): The image URL of the generated variations. + +--- + +## Usage Examples + +### Example 1: Basic Image Generation + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class +dalle3 = Dalle3() + +# Define a text prompt +task = "A painting of a dog" + +# Generate an image from the text prompt +image_url = dalle3(task) + +# Print the generated image URL +print(image_url) +``` + +### Example 2: Creating Image Variations + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class +dalle3 = Dalle3() + +# Define the URL of an existing image +img_url = "https://images.unsplash.com/photo-1694734479898-6ac4633158ac?q=80&w=1287&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D + +# Create variations of the image +variations_url = dalle3.create_variations(img_url) + +# Print the URLs of the generated variations +print(variations_url) +``` + +Certainly! Here are additional examples that cover various edge cases and methods of the `Dalle3` class in the Dalle3 library: + +### Example 3: Customizing Image Size + +You can customize the size of the generated image by specifying the `size` parameter when creating an instance of the `Dalle3` class. Here's how to generate a smaller image: + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class with a custom image size +dalle3 = Dalle3(size="512x512") + +# Define a text prompt +task = "A small painting of a cat" + +# Generate a smaller image from the text prompt +image_url = dalle3(task) + +# Print the generated image URL +print(image_url) +``` + +### Example 4: Adjusting Retry Limit + +You can adjust the maximum number of API request retries using the `max_retries` parameter. Here's how to increase the retry limit: + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class with a higher retry limit +dalle3 = Dalle3(max_retries=5) + +# Define a text prompt +task = "An image of a landscape" + +# Generate an image with a higher retry limit +image_url = dalle3(task) + +# Print the generated image URL +print(image_url) +``` + +### Example 5: Generating Image Variations + +To create variations of an existing image, you can use the `create_variations` method. Here's an example: + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class +dalle3 = Dalle3() + +# Define the URL of an existing image +img_url = "https://images.unsplash.com/photo-1677290043066-12eccd944004?q=80&w=1287&auto=format&fit=crop&ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" + +# Create variations of the image +variations_url = dalle3.create_variations(img_url) + +# Print the URLs of the generated variations +print(variations_url) +``` + +### Example 6: Handling API Errors + +The Dalle3 library provides error handling for API-related issues. Here's how to handle and display API errors: + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class +dalle3 = Dalle3() + +# Define a text prompt +task = "Invalid prompt that may cause an API error" + +try: + # Attempt to generate an image with an invalid prompt + image_url = dalle3(task) + print(image_url) +except Exception as e: + print(f"Error occurred: {str(e)}") +``` + +### Example 7: Customizing Image Quality + +You can customize the quality of the generated image by specifying the `quality` parameter. Here's how to generate a high-quality image: + +```python +from swarms.models.dalle3 import Dalle3 + +# Create an instance of the Dalle3 class with high quality +dalle3 = Dalle3(quality="high") + +# Define a text prompt +task = "A high-quality image of a sunset" + +# Generate a high-quality image from the text prompt +image_url = dalle3(task) + +# Print the generated image URL +print(image_url) +``` + + +--- + +## Error Handling + +The Dalle3 library provides error handling for API-related issues. If an error occurs during API communication, the library will handle it and provide detailed error messages. Make sure to handle exceptions appropriately in your code. + +--- + +## Advanced Usage + +For advanced usage and customization of the Dalle3 library, you can explore the attributes and methods of the `Dalle3` class. Adjusting parameters such as `size`, `max_retries`, and `quality` allows you to fine-tune the image generation process to your specific needs. + +--- + +## References + +For more information about the DALL·E 3 model and the Dalle3 library, you can refer to the official OpenAI documentation and resources. + +- [OpenAI API Documentation](https://beta.openai.com/docs/) +- [DALL·E 3 Model Information](https://openai.com/research/dall-e-3) +- [Dalle3 GitHub Repository](https://github.com/openai/dall-e-3) + +--- + +This concludes the documentation for the Dalle3 library. You can now use the library to generate images from text prompts and explore its advanced features for various applications. \ No newline at end of file diff --git a/docs_edit/swarms/models/distilled_whisperx.md b/docs_edit/swarms/models/distilled_whisperx.md new file mode 100644 index 00000000..79c8c2ea --- /dev/null +++ b/docs_edit/swarms/models/distilled_whisperx.md @@ -0,0 +1,123 @@ +# DistilWhisperModel Documentation + +## Overview + +The `DistilWhisperModel` is a Python class designed to handle English speech recognition tasks. It leverages the capabilities of the Whisper model, which is fine-tuned for speech-to-text processes. It is designed for both synchronous and asynchronous transcription of audio inputs, offering flexibility for real-time applications or batch processing. + +## Installation + +Before you can use `DistilWhisperModel`, ensure you have the required libraries installed: + +```sh +pip3 install --upgrade swarms +``` + +## Initialization + +The `DistilWhisperModel` class is initialized with the following parameters: + +| Parameter | Type | Description | Default | +|-----------|------|-------------|---------| +| `model_id` | `str` | The identifier for the pre-trained Whisper model | `"distil-whisper/distil-large-v2"` | + +Example of initialization: + +```python +from swarms.models import DistilWhisperModel + +# Initialize with default model +model_wrapper = DistilWhisperModel() + +# Initialize with a specific model ID +model_wrapper = DistilWhisperModel(model_id="distil-whisper/distil-large-v2") +``` + +## Attributes + +After initialization, the `DistilWhisperModel` has several attributes: + +| Attribute | Type | Description | +|-----------|------|-------------| +| `device` | `str` | The device used for computation (`"cuda:0"` for GPU or `"cpu"`). | +| `torch_dtype` | `torch.dtype` | The data type used for the Torch tensors. | +| `model_id` | `str` | The model identifier string. | +| `model` | `torch.nn.Module` | The actual Whisper model loaded from the identifier. | +| `processor` | `transformers.AutoProcessor` | The processor for handling input data. | + +## Methods + +### `transcribe` + +Transcribes audio input synchronously. + +**Arguments**: + +| Argument | Type | Description | +|----------|------|-------------| +| `inputs` | `Union[str, dict]` | File path or audio data dictionary. | + +**Returns**: `str` - The transcribed text. + +**Usage Example**: + +```python +# Synchronous transcription +transcription = model_wrapper.transcribe("path/to/audio.mp3") +print(transcription) +``` + +### `async_transcribe` + +Transcribes audio input asynchronously. + +**Arguments**: + +| Argument | Type | Description | +|----------|------|-------------| +| `inputs` | `Union[str, dict]` | File path or audio data dictionary. | + +**Returns**: `Coroutine` - A coroutine that when awaited, returns the transcribed text. + +**Usage Example**: + +```python +import asyncio + +# Asynchronous transcription +transcription = asyncio.run(model_wrapper.async_transcribe("path/to/audio.mp3")) +print(transcription) +``` + +### `real_time_transcribe` + +Simulates real-time transcription of an audio file. + +**Arguments**: + +| Argument | Type | Description | +|----------|------|-------------| +| `audio_file_path` | `str` | Path to the audio file. | +| `chunk_duration` | `int` | Duration of audio chunks in seconds. | + +**Usage Example**: + +```python +# Real-time transcription simulation +model_wrapper.real_time_transcribe("path/to/audio.mp3", chunk_duration=5) +``` + +## Error Handling + +The `DistilWhisperModel` class incorporates error handling for file not found errors and generic exceptions during the transcription process. If a non-recoverable exception is raised, it is printed to the console in red to indicate failure. + +## Conclusion + +The `DistilWhisperModel` offers a convenient interface to the powerful Whisper model for speech recognition. Its design supports both batch and real-time transcription, catering to different application needs. The class's error handling and retry logic make it robust for real-world applications. + +## Additional Notes + +- Ensure you have appropriate permissions to read audio files when using file paths. +- Transcription quality depends on the audio quality and the Whisper model's performance on your dataset. +- Adjust `chunk_duration` according to the processing power of your system for real-time transcription. + +For a full list of models supported by `transformers.AutoModelForSpeechSeq2Seq`, visit the [Hugging Face Model Hub](https://huggingface.co/models). diff --git a/docs_edit/swarms/models/fuyu.md b/docs_edit/swarms/models/fuyu.md new file mode 100644 index 00000000..e54a4a22 --- /dev/null +++ b/docs_edit/swarms/models/fuyu.md @@ -0,0 +1,89 @@ +# Fuyu Documentation + +## Introduction + +Welcome to the documentation for Fuyu, a versatile model for generating text conditioned on both textual prompts and images. Fuyu is based on the Adept's Fuyu model and offers a convenient way to create text that is influenced by the content of an image. In this documentation, you will find comprehensive information on the Fuyu class, its architecture, usage, and examples. + +## Overview + +Fuyu is a text generation model that leverages both text and images to generate coherent and contextually relevant text. It combines state-of-the-art language modeling techniques with image processing capabilities to produce text that is semantically connected to the content of an image. Whether you need to create captions for images or generate text that describes visual content, Fuyu can assist you. + +## Class Definition + +```python +class Fuyu: + def __init__( + self, + pretrained_path: str = "adept/fuyu-8b", + device_map: str = "cuda:0", + max_new_tokens: int = 7, + ): +``` + +## Purpose + +The Fuyu class serves as a convenient interface for using the Adept's Fuyu model. It allows you to generate text based on a textual prompt and an image. The primary purpose of Fuyu is to provide a user-friendly way to create text that is influenced by visual content, making it suitable for various applications, including image captioning, storytelling, and creative text generation. + +## Parameters + +- `pretrained_path` (str): The path to the pretrained Fuyu model. By default, it uses the "adept/fuyu-8b" model. +- `device_map` (str): The device to use for model inference (e.g., "cuda:0" for GPU or "cpu" for CPU). Default: "cuda:0". +- `max_new_tokens` (int): The maximum number of tokens to generate in the output text. Default: 7. + +## Usage + +To use Fuyu, follow these steps: + +1. Initialize the Fuyu instance: + +```python +from swarms.models.fuyu import Fuyu + +fuyu = Fuyu() +``` + + +2. Generate Text with Fuyu: + +```python +text = "Hello, my name is" +img_path = "path/to/image.png" +output_text = fuyu(text, img_path) +``` + +### Example 2 - Text Generation + +```python +from swarms.models.fuyu import Fuyu + +fuyu = Fuyu() + +text = "Hello, my name is" + +img_path = "path/to/image.png" + +output_text = fuyu(text, img_path) +print(output_text) +``` + +## How Fuyu Works + +Fuyu combines text and image processing to generate meaningful text outputs. Here's how it works: + +1. **Initialization**: When you create a Fuyu instance, you specify the pretrained model path, the device for inference, and the maximum number of tokens to generate. + +2. **Processing Text and Images**: Fuyu can process both textual prompts and images. You provide a text prompt and the path to an image as input. + +3. **Tokenization**: Fuyu tokenizes the input text and encodes the image using its tokenizer. + +4. **Model Inference**: The model takes the tokenized inputs and generates text that is conditioned on both the text and the image. + +5. **Output Text**: Fuyu returns the generated text as the output. + +## Additional Information + +- Fuyu uses the Adept's Fuyu model, which is pretrained on a large corpus of text and images, making it capable of generating coherent and contextually relevant text. +- You can specify the device for inference to utilize GPU acceleration if available. +- The `max_new_tokens` parameter allows you to control the length of the generated text. + +That concludes the documentation for Fuyu. We hope you find this model useful for your text generation tasks that involve images. If you have any questions or encounter any issues, please refer to the Fuyu documentation for further assistance. Enjoy working with Fuyu! \ No newline at end of file diff --git a/docs_edit/swarms/models/gemini.md b/docs_edit/swarms/models/gemini.md new file mode 100644 index 00000000..d5b1b44a --- /dev/null +++ b/docs_edit/swarms/models/gemini.md @@ -0,0 +1,178 @@ +## `Gemini` Documentation + +### Introduction + +The Gemini module is a versatile tool for leveraging the power of multimodal AI models to generate content. It allows users to combine textual and image inputs to generate creative and informative outputs. In this documentation, we will explore the Gemini module in detail, covering its purpose, architecture, methods, and usage examples. + +#### Purpose + +The Gemini module is designed to bridge the gap between text and image data, enabling users to harness the capabilities of multimodal AI models effectively. By providing both a textual task and an image as input, Gemini generates content that aligns with the specified task and incorporates the visual information from the image. + +### Installation + +Before using Gemini, ensure that you have the required dependencies installed. You can install them using the following commands: + +```bash +pip install swarms +pip install google-generativeai +pip install python-dotenv +``` + +### Class: Gemini + +#### Overview + +The `Gemini` class is the central component of the Gemini module. It inherits from the `BaseMultiModalModel` class and provides methods to interact with the Gemini AI model. Let's dive into its architecture and functionality. + +##### Class Constructor + +```python +class Gemini(BaseMultiModalModel): + def __init__( + self, + model_name: str = "gemini-pro", + gemini_api_key: str = get_gemini_api_key_env, + *args, + **kwargs, + ): +``` + +| Parameter | Type | Description | Default Value | +|---------------------|---------|------------------------------------------------------------------|--------------------| +| `model_name` | str | The name of the Gemini model. | "gemini-pro" | +| `gemini_api_key` | str | The Gemini API key. If not provided, it is fetched from the environment. | (None) | + +- `model_name`: Specifies the name of the Gemini model to use. By default, it is set to "gemini-pro," but you can specify a different model if needed. + +- `gemini_api_key`: This parameter allows you to provide your Gemini API key directly. If not provided, the constructor attempts to fetch it from the environment using the `get_gemini_api_key_env` helper function. + +##### Methods + +1. **run()** + + ```python + def run( + self, + task: str = None, + img: str = None, + *args, + **kwargs, + ) -> str: + ``` + + | Parameter | Type | Description | + |---------------|----------|--------------------------------------------| + | `task` | str | The textual task for content generation. | + | `img` | str | The path to the image to be processed. | + | `*args` | Variable | Additional positional arguments. | + | `**kwargs` | Variable | Additional keyword arguments. | + + - `task`: Specifies the textual task for content generation. It can be a sentence or a phrase that describes the desired content. + + - `img`: Provides the path to the image that will be processed along with the textual task. Gemini combines the visual information from the image with the textual task to generate content. + + - `*args` and `**kwargs`: Allow for additional, flexible arguments that can be passed to the underlying Gemini model. These arguments can vary based on the specific Gemini model being used. + + **Returns**: A string containing the generated content. + + **Examples**: + + ```python + from swarms.models import Gemini + + # Initialize the Gemini model + gemini = Gemini() + + # Generate content for a textual task with an image + generated_content = gemini.run( + task="Describe this image", + img="image.jpg", + ) + + # Print the generated content + print(generated_content) + ``` + + In this example, we initialize the Gemini model, provide a textual task, and specify an image for processing. The `run()` method generates content based on the input and returns the result. + +2. **process_img()** + + ```python + def process_img( + self, + img: str = None, + type: str = "image/png", + *args, + **kwargs, + ): + ``` + + | Parameter | Type | Description | Default Value | + |---------------|----------|------------------------------------------------------|----------------| + | `img` | str | The path to the image to be processed. | (None) | + | `type` | str | The MIME type of the image (e.g., "image/png"). | "image/png" | + | `*args` | Variable | Additional positional arguments. | + | `**kwargs` | Variable | Additional keyword arguments. | + + - `img`: Specifies the path to the image that will be processed. It's essential to provide a valid image path for image-based content generation. + + - `type`: Indicates the MIME type of the image. By default, it is set to "image/png," but you can change it based on the image format you're using. + + - `*args` and `**kwargs`: Allow for additional, flexible arguments that can be passed to the underlying Gemini model. These arguments can vary based on the specific Gemini model being used. + + **Raises**: ValueError if any of the following conditions are met: + - No image is provided. + - The image type is not specified. + - The Gemini API key is missing. + + **Examples**: + + ```python + from swarms.models.gemini import Gemini + + # Initialize the Gemini model + gemini = Gemini() + + # Process an image + processed_image = gemini.process_img( + img="image.jpg", + type="image/jpeg", + ) + + # Further use the processed image in content generation + generated_content = gemini.run( + task="Describe this image", + img=processed_image, + ) + + # Print the generated content + print(generated_content) + ``` + + In this example, we demonstrate how to process an image using the `process_img()` method and then use the processed image in content generation. + +#### Additional Information + +- Gemini is designed to work seamlessly with various multimodal AI models, making it a powerful tool for content generation tasks. + +- The module uses the `google.generativeai` package to access the underlying AI models. Ensure that you have this package installed to leverage the full capabilities of Gemini. + +- It's essential to provide a valid Gemini API key for authentication. You can either pass it directly during initialization or store it in the environment variable "GEMINI_API_KEY." + +- Gemini's flexibility allows you to experiment with different Gemini models and tailor the content generation process to your specific needs. + +- Keep in mind that Gemini is designed to handle both textual and image inputs, making it a valuable asset for various applications, including natural language processing and computer vision tasks. + +- If you encounter any issues or have specific requirements, refer to the Gemini documentation for more details and advanced usage. + +### References and Resources + +- [Gemini GitHub Repository](https://github.com/swarms/gemini): Explore the Gemini repository for additional information, updates, and examples. + +- [Google GenerativeAI Documentation](https://docs.google.com/document/d/1WZSBw6GsOhOCYm0ArydD_9uy6nPPA1KFIbKPhjj43hA): Dive deeper into the capabilities of the Google GenerativeAI package used by Gemini. + +- [Gemini API Documentation](https://gemini-api-docs.example.com): Access the official documentation for the Gemini API to explore advanced features and integrations. + +## Conclusion + +In this comprehensive documentation, we've explored the Gemini module, its purpose, architecture, methods, and usage examples. Gemini empowers developers to generate content by combining textual tasks and images, making it a valuable asset for multimodal AI applications. Whether you're working on natural language processing or computer vision projects, Gemini can help you achieve impressive results. \ No newline at end of file diff --git a/docs_edit/swarms/models/gpt4o.md b/docs_edit/swarms/models/gpt4o.md new file mode 100644 index 00000000..7b53a742 --- /dev/null +++ b/docs_edit/swarms/models/gpt4o.md @@ -0,0 +1,150 @@ +# Documentation for GPT4o Module + +## Overview and Introduction + +The `GPT4o` module is a multi-modal conversational model based on OpenAI's GPT-4 architecture. It extends the functionality of the `BaseMultiModalModel` class, enabling it to handle both text and image inputs for generating diverse and contextually rich responses. This module leverages the power of the GPT-4 model to enhance interactions by integrating visual information with textual prompts, making it highly relevant for applications requiring multi-modal understanding and response generation. + +### Key Concepts +- **Multi-Modal Model**: A model that can process and generate responses based on multiple types of inputs, such as text and images. +- **System Prompt**: A predefined prompt to guide the conversation flow. +- **Temperature**: A parameter that controls the randomness of the response generation. +- **Max Tokens**: The maximum number of tokens (words or word pieces) in the generated response. + +## Class Definition + +### `GPT4o` Class + + +### Parameters + +| Parameter | Type | Description | +|-----------------|--------|--------------------------------------------------------------------------------------| +| `system_prompt` | `str` | The system prompt to be used in the conversation. | +| `temperature` | `float`| The temperature parameter for generating diverse responses. Default is `0.1`. | +| `max_tokens` | `int` | The maximum number of tokens in the generated response. Default is `300`. | +| `openai_api_key`| `str` | The API key for accessing the OpenAI GPT-4 API. | +| `*args` | | Additional positional arguments. | +| `**kwargs` | | Additional keyword arguments. | + +## Functionality and Usage + +### `encode_image` Function + +The `encode_image` function is used to encode an image file into a base64 string format, which can then be included in the request to the GPT-4 API. + +#### Parameters + +| Parameter | Type | Description | +|---------------|--------|----------------------------------------------| +| `image_path` | `str` | The local path to the image file to be encoded. | + +#### Returns + +| Return Type | Description | +|-------------|---------------------------------| +| `str` | The base64 encoded string of the image. | + +### `GPT4o.__init__` Method + +The constructor for the `GPT4o` class initializes the model with the specified parameters and sets up the OpenAI client. + +### `GPT4o.run` Method + +The `run` method executes the GPT-4o model to generate a response based on the provided task and optional image. + +#### Parameters + +| Parameter | Type | Description | +|---------------|--------|----------------------------------------------------| +| `task` | `str` | The task or user prompt for the conversation. | +| `local_img` | `str` | The local path to the image file. | +| `img` | `str` | The URL of the image. | +| `*args` | | Additional positional arguments. | +| `**kwargs` | | Additional keyword arguments. | + +#### Returns + +| Return Type | Description | +|-------------|--------------------------------------------------| +| `str` | The generated response from the GPT-4o model. | + +## Usage Examples + +### Example 1: Basic Text Prompt + +```python +from swarms import GPT4o + +# Initialize the model +model = GPT4o( + system_prompt="You are a helpful assistant.", + temperature=0.7, + max_tokens=150, + openai_api_key="your_openai_api_key" +) + +# Define the task +task = "What is the capital of France?" + +# Generate response +response = model.run(task) +print(response) +``` + +### Example 2: Text Prompt with Local Image + +```python +from swarms import GPT4o + +# Initialize the model +model = GPT4o( + system_prompt="Describe the image content.", + temperature=0.5, + max_tokens=200, + openai_api_key="your_openai_api_key" +) + +# Define the task and image path +task = "Describe the content of this image." +local_img = "path/to/your/image.jpg" + +# Generate response +response = model.run(task, local_img=local_img) +print(response) +``` + +### Example 3: Text Prompt with Image URL + +```python +from swarms import GPT4o + +# Initialize the model +model = GPT4o( + system_prompt="You are a visual assistant.", + temperature=0.6, + max_tokens=250, + openai_api_key="your_openai_api_key" +) + +# Define the task and image URL +task = "What can you tell about the scenery in this image?" +img_url = "http://example.com/image.jpg" + +# Generate response +response = model.run(task, img=img_url) +print(response) +``` + +## Additional Information and Tips + +- **API Key Management**: Ensure that your OpenAI API key is securely stored and managed. Do not hard-code it in your scripts. Use environment variables or secure storage solutions. +- **Image Encoding**: The `encode_image` function is crucial for converting images to a base64 format suitable for API requests. Ensure that the images are accessible and properly formatted. +- **Temperature Parameter**: Adjust the `temperature` parameter to control the creativity of the model's responses. Lower values make the output more deterministic, while higher values increase randomness. +- **Token Limit**: Be mindful of the `max_tokens` parameter to avoid exceeding the API's token limits. This parameter controls the length of the generated responses. + +## References and Resources + +- [OpenAI API Documentation](https://beta.openai.com/docs/) +- [Python Base64 Encoding](https://docs.python.org/3/library/base64.html) +- [dotenv Documentation](https://saurabh-kumar.com/python-dotenv/) +- [BaseMultiModalModel Documentation](https://swarms.apac.ai) \ No newline at end of file diff --git a/docs_edit/swarms/models/gpt4v.md b/docs_edit/swarms/models/gpt4v.md new file mode 100644 index 00000000..5ad80cd9 --- /dev/null +++ b/docs_edit/swarms/models/gpt4v.md @@ -0,0 +1,201 @@ +# `GPT4VisionAPI` Documentation + +**Table of Contents** +- [Introduction](#introduction) +- [Installation](#installation) +- [Module Overview](#module-overview) +- [Class: GPT4VisionAPI](#class-gpt4visionapi) + - [Initialization](#initialization) + - [Methods](#methods) + - [encode_image](#encode_image) + - [run](#run) + - [__call__](#__call__) +- [Examples](#examples) + - [Example 1: Basic Usage](#example-1-basic-usage) + - [Example 2: Custom API Key](#example-2-custom-api-key) + - [Example 3: Adjusting Maximum Tokens](#example-3-adjusting-maximum-tokens) +- [Additional Information](#additional-information) +- [References](#references) + +## Introduction + +Welcome to the documentation for the `GPT4VisionAPI` module! This module is a powerful wrapper for the OpenAI GPT-4 Vision model. It allows you to interact with the model to generate descriptions or answers related to images. This documentation will provide you with comprehensive information on how to use this module effectively. + +## Installation + +Before you start using the `GPT4VisionAPI` module, make sure you have the required dependencies installed. You can install them using the following commands: + +```bash +pip3 install --upgrade swarms +``` + +## Module Overview + +The `GPT4VisionAPI` module serves as a bridge between your application and the OpenAI GPT-4 Vision model. It allows you to send requests to the model and retrieve responses related to images. Here are some key features and functionality provided by this module: + +- Encoding images to base64 format. +- Running the GPT-4 Vision model with specified tasks and images. +- Customization options such as setting the OpenAI API key and maximum token limit. + +## Class: GPT4VisionAPI + +The `GPT4VisionAPI` class is the core component of this module. It encapsulates the functionality required to interact with the GPT-4 Vision model. Below, we'll dive into the class in detail. + +### Initialization + +When initializing the `GPT4VisionAPI` class, you have the option to provide the OpenAI API key and set the maximum token limit. Here are the parameters and their descriptions: + +| Parameter | Type | Default Value | Description | +|---------------------|----------|-------------------------------|----------------------------------------------------------------------------------------------------------| +| openai_api_key | str | `OPENAI_API_KEY` environment variable (if available) | The OpenAI API key. If not provided, it defaults to the `OPENAI_API_KEY` environment variable. | +| max_tokens | int | 300 | The maximum number of tokens to generate in the model's response. | + +Here's how you can initialize the `GPT4VisionAPI` class: + +```python +from swarms.models import GPT4VisionAPI + +# Initialize with default API key and max_tokens +api = GPT4VisionAPI() + +# Initialize with custom API key and max_tokens +custom_api_key = "your_custom_api_key" +api = GPT4VisionAPI(openai_api_key=custom_api_key, max_tokens=500) +``` + +### Methods + +#### encode_image + +This method allows you to encode an image from a URL to base64 format. It's a utility function used internally by the module. + +```python +def encode_image(img: str) -> str: + """ + Encode image to base64. + + Parameters: + - img (str): URL of the image to encode. + + Returns: + str: Base64 encoded image. + """ +``` + +#### run + +The `run` method is the primary way to interact with the GPT-4 Vision model. It sends a request to the model with a task and an image URL, and it returns the model's response. + +```python +def run(task: str, img: str) -> str: + """ + Run the GPT-4 Vision model. + + Parameters: + - task (str): The task or question related to the image. + - img (str): URL of the image to analyze. + + Returns: + str: The model's response. + """ +``` + +#### __call__ + +The `__call__` method is a convenient way to run the GPT-4 Vision model. It has the same functionality as the `run` method. + +```python +def __call__(task: str, img: str) -> str: + """ + Run the GPT-4 Vision model (callable). + + Parameters: + - task (str): The task or question related to the image. + - img + + (str): URL of the image to analyze. + + Returns: + str: The model's response. + """ +``` + +## Examples + +Let's explore some usage examples of the `GPT4VisionAPI` module to better understand how to use it effectively. + +### Example 1: Basic Usage + +In this example, we'll use the module with the default API key and maximum tokens to analyze an image. + +```python +from swarms.models import GPT4VisionAPI + +# Initialize with default API key and max_tokens +api = GPT4VisionAPI() + +# Define the task and image URL +task = "What is the color of the object?" +img = "https://i.imgur.com/2M2ZGwC.jpeg" + +# Run the GPT-4 Vision model +response = api.run(task, img) + +# Print the model's response +print(response) +``` + +### Example 2: Custom API Key + +If you have a custom API key, you can initialize the module with it as shown in this example. + +```python +from swarms.models import GPT4VisionAPI + +# Initialize with custom API key and max_tokens +custom_api_key = "your_custom_api_key" +api = GPT4VisionAPI(openai_api_key=custom_api_key, max_tokens=500) + +# Define the task and image URL +task = "What is the object in the image?" +img = "https://i.imgur.com/3T3ZHwD.jpeg" + +# Run the GPT-4 Vision model +response = api.run(task, img) + +# Print the model's response +print(response) +``` + +### Example 3: Adjusting Maximum Tokens + +You can also customize the maximum token limit when initializing the module. In this example, we set it to 1000 tokens. + +```python +from swarms.models import GPT4VisionAPI + +# Initialize with default API key and custom max_tokens +api = GPT4VisionAPI(max_tokens=1000) + +# Define the task and image URL +task = "Describe the scene in the image." +img = "https://i.imgur.com/4P4ZRxU.jpeg" + +# Run the GPT-4 Vision model +response = api.run(task, img) + +# Print the model's response +print(response) +``` + +## Additional Information + +- If you encounter any errors or issues with the module, make sure to check your API key and internet connectivity. +- It's recommended to handle exceptions when using the module to gracefully handle errors. +- You can further customize the module to fit your specific use case by modifying the code as needed. + +## References + +- [OpenAI API Documentation](https://beta.openai.com/docs/) + +This documentation provides a comprehensive guide on how to use the `GPT4VisionAPI` module effectively. It covers initialization, methods, usage examples, and additional information to ensure a smooth experience when working with the GPT-4 Vision model. \ No newline at end of file diff --git a/docs_edit/swarms/models/hf.md b/docs_edit/swarms/models/hf.md new file mode 100644 index 00000000..45d88af8 --- /dev/null +++ b/docs_edit/swarms/models/hf.md @@ -0,0 +1,91 @@ +# HuggingFaceLLM + +## Overview & Introduction + +The `HuggingFaceLLM` class in the Zeta library provides a simple and easy-to-use interface to harness the power of Hugging Face's transformer-based language models, specifically for causal language modeling. This enables developers to generate coherent and contextually relevant sentences or paragraphs given a prompt, without delving deep into the intricate details of the underlying model or the tokenization process. + +Causal Language Modeling (CLM) is a task where given a series of tokens (or words), the model predicts the next token in the sequence. This functionality is central to many natural language processing tasks, including chatbots, story generation, and code autocompletion. + +--- + +## Class Definition + +```python +class HuggingFaceLLM: +``` + +### Parameters: + +- `model_id (str)`: Identifier for the pre-trained model on the Hugging Face model hub. Examples include "gpt2-medium", "openai-gpt", etc. + +- `device (str, optional)`: The device on which to load and run the model. Defaults to 'cuda' if GPU is available, else 'cpu'. + +- `max_length (int, optional)`: Maximum length of the generated sequence. Defaults to 20. + +- `quantization_config (dict, optional)`: Configuration dictionary for model quantization (if applicable). Default is `None`. + +--- + +## Functionality & Usage + +### Initialization: + +```python +llm = HuggingFaceLLM(model_id="gpt2-medium") +``` + +Upon initialization, the specified pre-trained model and tokenizer are loaded from Hugging Face's model hub. The model is then moved to the designated device. If there's an issue loading either the model or the tokenizer, an error will be logged. + +### Generation: + +The main functionality of this class is text generation. The class provides two methods for this: `__call__` and `generate`. Both methods take in a prompt text and an optional `max_length` parameter and return the generated text. + +Usage: +```python +from swarms import HuggingFaceLLM + +# Initialize +llm = HuggingFaceLLM(model_id="gpt2-medium") + +# Generate text using __call__ method +result = llm("Once upon a time,") +print(result) + +# Alternatively, using the generate method +result = llm.generate("The future of AI is") +print(result) +``` + +--- + +## Mathematical Explanation: + +Given a sequence of tokens \( x_1, x_2, ..., x_n \), a causal language model aims to maximize the likelihood of the next token \( x_{n+1} \) in the sequence. Formally, it tries to optimize: + +\[ P(x_{n+1} | x_1, x_2, ..., x_n) \] + +Where \( P \) is the probability distribution over all possible tokens in the vocabulary. + +The model takes the tokenized input sequence, feeds it through several transformer blocks, and finally through a linear layer to produce logits for each token in the vocabulary. The token with the highest logit value is typically chosen as the next token in the sequence. + +--- + +## Additional Information & Tips: + +- Ensure you have an active internet connection when initializing the class for the first time, as the models and tokenizers are fetched from Hugging Face's servers. + +- Although the default `max_length` is set to 20, it's advisable to adjust this parameter based on the context of the problem. + +- Keep an eye on GPU memory when using large models or generating long sequences. + +--- + +## References & Resources: + +- Hugging Face Model Hub: [https://huggingface.co/models](https://huggingface.co/models) + +- Introduction to Transformers: [https://huggingface.co/transformers/introduction.html](https://huggingface.co/transformers/introduction.html) + +- Causal Language Modeling: Vaswani, A., et al. (2017). Attention is All You Need. [arXiv:1706.03762](https://arxiv.org/abs/1706.03762) + +Note: This documentation template provides a comprehensive overview of the `HuggingFaceLLM` class. Developers can follow similar structures when documenting other classes or functionalities. \ No newline at end of file diff --git a/docs_edit/swarms/models/huggingface.md b/docs_edit/swarms/models/huggingface.md new file mode 100644 index 00000000..50aaa2a1 --- /dev/null +++ b/docs_edit/swarms/models/huggingface.md @@ -0,0 +1,155 @@ +## `HuggingfaceLLM` Documentation + +### Introduction + +The `HuggingfaceLLM` class is designed for running inference using models from the Hugging Face Transformers library. This documentation provides an in-depth understanding of the class, its purpose, attributes, methods, and usage examples. + +#### Purpose + +The `HuggingfaceLLM` class serves the following purposes: + +1. Load pre-trained Hugging Face models and tokenizers. +2. Generate text-based responses from the loaded model using a given prompt. +3. Provide flexibility in device selection, quantization, and other configuration options. + +### Class Definition + +The `HuggingfaceLLM` class is defined as follows: + +```python +class HuggingfaceLLM: + def __init__( + self, + model_id: str, + device: str = None, + max_length: int = 20, + quantize: bool = False, + quantization_config: dict = None, + verbose=False, + distributed=False, + decoding=False, + ): + # Attributes and initialization logic explained below + pass + + def load_model(self): + # Method to load the pre-trained model and tokenizer + pass + + def run(self, prompt_text: str, max_length: int = None): + # Method to generate text-based responses + pass + + def __call__(self, prompt_text: str, max_length: int = None): + # Alternate method for generating text-based responses + pass +``` + +### Attributes + +| Attribute | Description | +|----------------------|---------------------------------------------------------------------------------------------------------------------------| +| `model_id` | The ID of the pre-trained model to be used. | +| `device` | The device on which the model runs (`'cuda'` for GPU or `'cpu'` for CPU). | +| `max_length` | The maximum length of the generated text. | +| `quantize` | A boolean indicating whether quantization should be used. | +| `quantization_config`| A dictionary with configuration options for quantization. | +| `verbose` | A boolean indicating whether verbose logs should be printed. | +| `logger` | An optional logger for logging messages (defaults to a basic logger). | +| `distributed` | A boolean indicating whether distributed processing should be used. | +| `decoding` | A boolean indicating whether to perform decoding during text generation. | + +### Class Methods + +#### `__init__` Method + +The `__init__` method initializes an instance of the `HuggingfaceLLM` class with the specified parameters. It also loads the pre-trained model and tokenizer. + +- `model_id` (str): The ID of the pre-trained model to use. +- `device` (str, optional): The device to run the model on ('cuda' or 'cpu'). +- `max_length` (int, optional): The maximum length of the generated text. +- `quantize` (bool, optional): Whether to use quantization. +- `quantization_config` (dict, optional): Configuration for quantization. +- `verbose` (bool, optional): Whether to print verbose logs. +- `logger` (logging.Logger, optional): The logger to use. +- `distributed` (bool, optional): Whether to use distributed processing. +- `decoding` (bool, optional): Whether to perform decoding during text generation. + +#### `load_model` Method + +The `load_model` method loads the pre-trained model and tokenizer specified by `model_id`. + +#### `run` and `__call__` Methods + +Both `run` and `__call__` methods generate text-based responses based on a given prompt. They accept the following parameters: + +- `prompt_text` (str): The text prompt to initiate text generation. +- `max_length` (int, optional): The maximum length of the generated text. + +### Usage Examples + +Here are three ways to use the `HuggingfaceLLM` class: + +#### Example 1: Basic Usage + +```python +from swarms.models import HuggingfaceLLM + +# Initialize the HuggingfaceLLM instance with a model ID +model_id = "NousResearch/Nous-Hermes-2-Vision-Alpha" +inference = HuggingfaceLLM(model_id=model_id) + +# Generate text based on a prompt +prompt_text = "Once upon a time" +generated_text = inference(prompt_text) +print(generated_text) +``` + +#### Example 2: Custom Configuration + +```python +from swarms.models import HuggingfaceLLM + +# Initialize with custom configuration +custom_config = { + "quantize": True, + "quantization_config": {"load_in_4bit": True}, + "verbose": True, +} +inference = HuggingfaceLLM( + model_id="NousResearch/Nous-Hermes-2-Vision-Alpha", **custom_config +) + +# Generate text based on a prompt +prompt_text = "Tell me a joke" +generated_text = inference(prompt_text) +print(generated_text) +``` + +#### Example 3: Distributed Processing + +```python +from swarms.models import HuggingfaceLLM + +# Initialize for distributed processing +inference = HuggingfaceLLM(model_id="gpt2-medium", distributed=True) + +# Generate text based on a prompt +prompt_text = "Translate the following sentence to French" +generated_text = inference(prompt_text) +print(generated_text) +``` + +### Additional Information + +- The `HuggingfaceLLM` class provides the flexibility to load and use pre-trained models from the Hugging Face Transformers library. +- Quantization can be enabled to reduce model size and inference time. +- Distributed processing can be used for parallelized inference. +- Verbose logging can help in debugging and understanding the text generation process. + +### References + +- [Hugging Face Transformers Documentation](https://huggingface.co/transformers/) +- [PyTorch Documentation](https://pytorch.org/docs/stable/index.html) + +This documentation provides a comprehensive understanding of the `HuggingfaceLLM` class, its attributes, methods, and usage examples. Developers can use this class to perform text generation tasks efficiently using pre-trained models from the Hugging Face Transformers library. \ No newline at end of file diff --git a/docs_edit/swarms/models/idefics.md b/docs_edit/swarms/models/idefics.md new file mode 100644 index 00000000..57125038 --- /dev/null +++ b/docs_edit/swarms/models/idefics.md @@ -0,0 +1,107 @@ +# `Idefics` Documentation + +## Introduction + +Welcome to the documentation for Idefics, a versatile multimodal inference tool using pre-trained models from the Hugging Face Hub. Idefics is designed to facilitate the generation of text from various prompts, including text and images. This documentation provides a comprehensive understanding of Idefics, its architecture, usage, and how it can be integrated into your projects. + +## Overview + +Idefics leverages the power of pre-trained models to generate textual responses based on a wide range of prompts. It is capable of handling both text and images, making it suitable for various multimodal tasks, including text generation from images. + +## Class Definition + +```python +class Idefics: + def __init__( + self, + checkpoint="HuggingFaceM4/idefics-9b-instruct", + device=None, + torch_dtype=torch.bfloat16, + max_length=100, + ): +``` + +## Usage + +To use Idefics, follow these steps: + +1. Initialize the Idefics instance: + +```python +from swarms.models import Idefics + +model = Idefics() +``` + +2. Generate text based on prompts: + +```python +prompts = [ + "User: What is in this image? https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG" +] +response = model(prompts) +print(response) +``` + +### Example 1 - Image Questioning + +```python +from swarms.models import Idefics + +model = Idefics() +prompts = [ + "User: What is in this image? https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG" +] +response = model(prompts) +print(response) +``` + +### Example 2 - Bidirectional Conversation + +```python +from swarms.models import Idefics + +model = Idefics() +user_input = "User: What is in this image? https://upload.wikimedia.org/wikipedia/commons/8/86/Id%C3%A9fix.JPG" +response = model.chat(user_input) +print(response) + +user_input = "User: Who is that? https://static.wikia.nocookie.net/asterix/images/2/25/R22b.gif/revision/latest?cb=20110815073052" +response = model.chat(user_input) +print(response) +``` + +### Example 3 - Configuration Changes + +```python +model.set_checkpoint("new_checkpoint") +model.set_device("cpu") +model.set_max_length(200) +model.clear_chat_history() +``` + +## How Idefics Works + +Idefics operates by leveraging pre-trained models from the Hugging Face Hub. Here's how it works: + +1. **Initialization**: When you create an Idefics instance, it initializes the model using a specified checkpoint, sets the device for inference, and configures other parameters like data type and maximum text length. + +2. **Prompt-Based Inference**: You can use the `infer` method to generate text based on prompts. It processes prompts in batched or non-batched mode, depending on your preference. It uses a pre-trained processor to handle text and images. + +3. **Bidirectional Conversation**: The `chat` method enables bidirectional conversations. You provide user input, and the model responds accordingly. The chat history is maintained for context. + +4. **Configuration Changes**: You can change the model checkpoint, device, maximum text length, or clear the chat history as needed during runtime. + +## Parameters + +- `checkpoint`: The name of the pre-trained model checkpoint (default is "HuggingFaceM4/idefics-9b-instruct"). +- `device`: The device to use for inference. By default, it uses CUDA if available; otherwise, it uses CPU. +- `torch_dtype`: The data type to use for inference. By default, it uses torch.bfloat16. +- `max_length`: The maximum length of the generated text (default is 100). + +## Additional Information + +- Idefics provides a convenient way to engage in bidirectional conversations with pre-trained models. +- You can easily change the model checkpoint, device, and other settings to adapt to your specific use case. + +That concludes the documentation for Idefics. We hope you find this tool valuable for your multimodal text generation tasks. If you have any questions or encounter any issues, please refer to the Hugging Face Transformers documentation for further assistance. Enjoy working with Idefics! \ No newline at end of file diff --git a/docs_edit/swarms/models/index.md b/docs_edit/swarms/models/index.md new file mode 100644 index 00000000..9e001eea --- /dev/null +++ b/docs_edit/swarms/models/index.md @@ -0,0 +1,178 @@ +## LLMs in Swarms Documentation + +Welcome to the documentation for the llm section of the swarms package, designed to facilitate seamless integration with various AI language models and APIs. This package empowers developers, end-users, and system administrators to interact with AI models from different providers, such as OpenAI, Hugging Face, Google PaLM, and Anthropic. + +### Table of Contents +1. [OpenAI](#openai) +2. [HuggingFace](#huggingface) +3. [Google PaLM](#google-palm) +4. [Anthropic](#anthropic) + +### 1. OpenAI (swarms.agents.models.OpenAI) + +The OpenAI class provides an interface to interact with OpenAI's language models. It allows both synchronous and asynchronous interactions. + +**Constructor:** +```python +OpenAI(api_key: str, system: str = None, console: bool = True, model: str = None, params: dict = None, save_messages: bool = True) +``` + +**Attributes:** +- `api_key` (str): Your OpenAI API key. + +- `system` (str, optional): A system message to be used in conversations. + +- `console` (bool, default=True): Display console logs. + +- `model` (str, optional): Name of the language model to use. + +- `params` (dict, optional): Additional parameters for model interactions. + +- `save_messages` (bool, default=True): Save conversation messages. + +**Methods:** + +- `generate(message: str, **kwargs) -> str`: Generate a response using the OpenAI model. + +- `generate_async(message: str, **kwargs) -> str`: Generate a response asynchronously. + +- `ask_multiple(ids: List[str], question_template: str) -> List[str]`: Query multiple IDs simultaneously. + +- `stream_multiple(ids: List[str], question_template: str) -> List[str]`: Stream multiple responses. + +**Usage Example:** +```python +import asyncio + +from swarms import OpenAI + +chat = OpenAI(api_key="YOUR_OPENAI_API_KEY") + +response = chat.generate("Hello, how can I assist you?") +print(response) + +ids = ["id1", "id2", "id3"] +async_responses = asyncio.run(chat.ask_multiple(ids, "How is {id}?")) +print(async_responses) +``` + +### 2. HuggingFace (swarms.agents.models.HuggingFaceLLM) + +The HuggingFaceLLM class allows interaction with language models from Hugging Face. + +**Constructor:** +```python +HuggingFaceLLM(model_id: str, device: str = None, max_length: int = 20, quantize: bool = False, quantization_config: dict = None) +``` + +**Attributes:** + +- `model_id` (str): ID or name of the Hugging Face model. + +- `device` (str, optional): Device to run the model on (e.g., 'cuda', 'cpu'). + +- `max_length` (int, default=20): Maximum length of generated text. + +- `quantize` (bool, default=False): Apply model quantization. + +- `quantization_config` (dict, optional): Configuration for quantization. + +**Methods:** + +- `generate(prompt_text: str, max_length: int = None) -> str`: Generate text based on a prompt. + +**Usage Example:** +```python +from swarms import HuggingFaceLLM + +model_id = "gpt2" +hugging_face_model = HuggingFaceLLM(model_id=model_id) + +prompt = "Once upon a time" +generated_text = hugging_face_model.generate(prompt) +print(generated_text) +``` + +### 3. Google PaLM (swarms.agents.models.GooglePalm) + +The GooglePalm class provides an interface for Google's PaLM Chat API. + +**Constructor:** +```python +GooglePalm(model_name: str = "models/chat-bison-001", google_api_key: str = None, temperature: float = None, top_p: float = None, top_k: int = None, n: int = 1) +``` + +**Attributes:** + +- `model_name` (str): Name of the Google PaLM model. + +- `google_api_key` (str, optional): Google API key. + +- `temperature` (float, optional): Temperature for text generation. + +- `top_p` (float, optional): Top-p sampling value. + +- `top_k` (int, optional): Top-k sampling value. + +- `n` (int, default=1): Number of candidate completions. + +**Methods:** + +- `generate(messages: List[Dict[str, Any]], stop: List[str] = None, **kwargs) -> Dict[str, Any]`: Generate text based on a list of messages. + +- `__call__(messages: List[Dict[str, Any]], stop: List[str] = None, **kwargs) -> Dict[str, Any]`: Generate text using the call syntax. + +**Usage Example:** +```python +from swarms import GooglePalm + +google_palm = GooglePalm() +messages = [ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": "Tell me a joke"}, +] + +response = google_palm.generate(messages) +print(response["choices"][0]["text"]) +``` + +### 4. Anthropic (swarms.agents.models.Anthropic) + +The Anthropic class enables interaction with Anthropic's large language models. + +**Constructor:** +```python +Anthropic(model: str = "claude-2", max_tokens_to_sample: int = 256, temperature: float = None, top_k: int = None, top_p: float = None, streaming: bool = False, default_request_timeout: int = None) +``` + +**Attributes:** + +- `model` (str): Name of the Anthropic model. + +- `max_tokens_to_sample` (int, default=256): Maximum tokens to sample. + +- `temperature` (float, optional): Temperature for text generation. + +- `top_k` (int, optional): Top-k sampling value. + +- `top_p` (float, optional): Top-p sampling value. + +- `streaming` (bool, default=False): Enable streaming mode. + +- `default_request_timeout` (int, optional): Default request timeout. + +**Methods:** + +- `generate(prompt: str, stop: List[str] = None) -> str`: Generate text based on a prompt. + +**Usage Example:** +```python +from swarms import Anthropic + +anthropic = Anthropic() +prompt = "Once upon a time" +generated_text = anthropic.generate(prompt) +print(generated_text) +``` + +This concludes the documentation for the "models" folder, providing you with tools to seamlessly integrate with various language models and APIs. Happy coding! \ No newline at end of file diff --git a/docs_edit/swarms/models/kosmos.md b/docs_edit/swarms/models/kosmos.md new file mode 100644 index 00000000..a19ea791 --- /dev/null +++ b/docs_edit/swarms/models/kosmos.md @@ -0,0 +1,217 @@ +# `Kosmos` Documentation + +## Introduction + +Welcome to the documentation for Kosmos, a powerful multimodal AI model that can perform various tasks, including multimodal grounding, referring expression comprehension, referring expression generation, grounded visual question answering (VQA), and grounded image captioning. Kosmos is based on the ydshieh/kosmos-2-patch14-224 model and is designed to process both text and images to provide meaningful outputs. In this documentation, you will find a detailed explanation of the Kosmos class, its functions, parameters, and usage examples. + +## Overview + +Kosmos is a state-of-the-art multimodal AI model that combines the power of natural language understanding with image analysis. It can perform several tasks that involve processing both textual prompts and images to provide informative responses. Whether you need to find objects in an image, understand referring expressions, generate descriptions, answer questions, or create captions, Kosmos has you covered. + +## Class Definition + +```python +class Kosmos: + def __init__(self, model_name="ydshieh/kosmos-2-patch14-224"): +``` + +## Usage + +To use Kosmos, follow these steps: + +1. Initialize the Kosmos instance: + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() +``` + +2. Perform Multimodal Grounding: + +```python +kosmos.multimodal_grounding( + "Find the red apple in the image.", "https://example.com/apple.jpg" +) +``` + +### Example 1 - Multimodal Grounding + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() + +kosmos.multimodal_grounding( + "Find the red apple in the image.", "https://example.com/apple.jpg" +) +``` + +3. Perform Referring Expression Comprehension: + +```python +kosmos.referring_expression_comprehension( + "Show me the green bottle.", "https://example.com/bottle.jpg" +) +``` + +### Example 2 - Referring Expression Comprehension + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() + +kosmos.referring_expression_comprehension( + "Show me the green bottle.", "https://example.com/bottle.jpg" +) +``` + +4. Generate Referring Expressions: + +```python +kosmos.referring_expression_generation( + "It is on the table.", "https://example.com/table.jpg" +) +``` + +### Example 3 - Referring Expression Generation + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() + +kosmos.referring_expression_generation( + "It is on the table.", "https://example.com/table.jpg" +) +``` + +5. Perform Grounded Visual Question Answering (VQA): + +```python +kosmos.grounded_vqa("What is the color of the car?", "https://example.com/car.jpg") +``` + +### Example 4 - Grounded Visual Question Answering + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() + +kosmos.grounded_vqa("What is the color of the car?", "https://example.com/car.jpg") +``` + +6. Generate Grounded Image Captions: + +```python +kosmos.grounded_image_captioning("https://example.com/beach.jpg") +``` + +### Example 5 - Grounded Image Captioning + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() + +kosmos.grounded_image_captioning("https://example.com/beach.jpg") +``` + +7. Generate Detailed Grounded Image Captions: + +```python +kosmos.grounded_image_captioning_detailed("https://example.com/beach.jpg") +``` + +### Example 6 - Detailed Grounded Image Captioning + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() + +kosmos.grounded_image_captioning_detailed("https://example.com/beach.jpg") +``` + +8. Draw Entity Boxes on Image: + +```python +image = kosmos.get_image("https://example.com/image.jpg") +entities = [ + ("apple", (0, 3), [(0.2, 0.3, 0.4, 0.5)]), + ("banana", (4, 9), [(0.6, 0.2, 0.8, 0.4)]), +] +kosmos.draw_entity_boxes_on_image(image, entities, show=True) +``` + +### Example 7 - Drawing Entity Boxes on Image + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() + +image = kosmos.get_image("https://example.com/image.jpg") +entities = [ + ("apple", (0, 3), [(0.2, 0.3, 0.4, 0.5)]), + ("banana", (4, 9), [(0.6, 0.2, 0.8, 0.4)]), +] +kosmos.draw_entity_boxes_on_image(image, entities, show=True) +``` + +9. Generate Boxes for Entities: + +```python +entities = [ + ("apple", (0, 3), [(0.2, 0.3, 0.4, 0.5)]), + ("banana", (4, 9), [(0.6, 0.2, 0.8, 0.4)]), +] +image = kosmos.generate_boxes( + "Find the apple and the banana in the image.", "https://example.com/image.jpg" +) +``` + +### Example 8 - Generating Boxes for Entities + +```python +from swarms.models.kosmos_two import Kosmos + +kosmos = Kosmos() +entities = [ + ("apple", (0, 3), [(0.2, 0.3, 0.4, 0.5)]), + ("banana", (4, 9), [(0.6, 0.2, 0.8, 0.4)]), +] +image = kosmos.generate_boxes( + "Find the apple and the banana in the image.", "https://example.com/image.jpg" +) +``` + +## How Kosmos Works + +Kosmos is a multimodal AI model that combines text and image processing. It uses the ydshieh/kosmos-2-patch14-224 model for understanding and generating responses. Here's how it works: + +1. **Initialization**: When you create a Kosmos instance, it loads the ydshieh/kosmos-2-patch14-224 model for multimodal tasks. + +2. **Processing Text and Images**: Kosmos can process both text prompts and images. It takes a textual prompt and an image URL as input. + +3. **Task Execution**: Based on the task you specify, Kosmos generates informative responses by combining natural language understanding with image analysis. + +4. **Drawing Entity Boxes**: You can use the `draw_entity_boxes_on_image` method to draw bounding boxes around entities in an image. + +5. **Generating Boxes for Entities**: The `generate_boxes` method allows you to generate bounding boxes for entities mentioned in a prompt. + +## Parameters + +- `model_name`: The name or path of the Kosmos model to be used. By default, it uses the ydshieh/kosmos-2-patch14-224 model. + +## Additional Information + +- Kosmos can handle various multimodal tasks, making it a versatile tool for understanding and generating content. +- You can provide image URLs for image-based tasks, and Kosmos will automatically retrieve and process the images. +- The `draw_entity_boxes_on_image` method is useful for visualizing the results of multimodal grounding tasks. +- The `generate_boxes` method is handy for generating bounding boxes around entities mentioned in a textual prompt. + +That concludes the documentation for Kosmos. We hope you find this multimodal AI model valuable for your projects. If you have any questions or encounter any issues, please refer to the Kosmos documentation for +further assistance. Enjoy working with Kosmos! diff --git a/docs_edit/swarms/models/layoutlm_document_qa.md b/docs_edit/swarms/models/layoutlm_document_qa.md new file mode 100644 index 00000000..4c6169d0 --- /dev/null +++ b/docs_edit/swarms/models/layoutlm_document_qa.md @@ -0,0 +1,88 @@ +# `LayoutLMDocumentQA` Documentation + +## Introduction + +Welcome to the documentation for LayoutLMDocumentQA, a multimodal model designed for visual question answering (QA) on real-world documents, such as invoices, PDFs, and more. This comprehensive documentation will provide you with a deep understanding of the LayoutLMDocumentQA class, its architecture, usage, and examples. + +## Overview + +LayoutLMDocumentQA is a versatile model that combines layout-based understanding of documents with natural language processing to answer questions about the content of documents. It is particularly useful for automating tasks like invoice processing, extracting information from PDFs, and handling various document-based QA scenarios. + +## Class Definition + +```python +class LayoutLMDocumentQA(AbstractModel): + def __init__( + self, + model_name: str = "impira/layoutlm-document-qa", + task: str = "document-question-answering", + ): +``` + +## Purpose + +The LayoutLMDocumentQA class serves the following primary purposes: + +1. **Document QA**: LayoutLMDocumentQA is specifically designed for document-based question answering. It can process both the textual content and the layout of a document to answer questions. + +2. **Multimodal Understanding**: It combines natural language understanding with document layout analysis, making it suitable for documents with complex structures. + +## Parameters + +- `model_name` (str): The name or path of the pretrained LayoutLMDocumentQA model. Default: "impira/layoutlm-document-qa". +- `task` (str): The specific task for which the model will be used. Default: "document-question-answering". + +## Usage + +To use LayoutLMDocumentQA, follow these steps: + +1. Initialize the LayoutLMDocumentQA instance: + +```python +from swarms.models import LayoutLMDocumentQA + +layout_lm_doc_qa = LayoutLMDocumentQA() +``` + +### Example 1 - Initialization + +```python +layout_lm_doc_qa = LayoutLMDocumentQA() +``` + +2. Ask a question about a document and provide the document's image path: + +```python +question = "What is the total amount?" +image_path = "path/to/document_image.png" +answer = layout_lm_doc_qa(question, image_path) +``` + +### Example 2 - Document QA + +```python +layout_lm_doc_qa = LayoutLMDocumentQA() +question = "What is the total amount?" +image_path = "path/to/document_image.png" +answer = layout_lm_doc_qa(question, image_path) +``` + +## How LayoutLMDocumentQA Works + +LayoutLMDocumentQA employs a multimodal approach to document QA. Here's how it works: + +1. **Initialization**: When you create a LayoutLMDocumentQA instance, you can specify the model to use and the task, which is "document-question-answering" by default. + +2. **Question and Document**: You provide a question about the document and the image path of the document to the LayoutLMDocumentQA instance. + +3. **Multimodal Processing**: LayoutLMDocumentQA processes both the question and the document image. It combines layout-based analysis with natural language understanding. + +4. **Answer Generation**: The model generates an answer to the question based on its analysis of the document layout and content. + +## Additional Information + +- LayoutLMDocumentQA uses the "impira/layoutlm-document-qa" pretrained model, which is specifically designed for document-based question answering. +- You can adapt this model to various document QA scenarios by changing the task and providing relevant questions and documents. +- This model is particularly useful for automating document-based tasks and extracting valuable information from structured documents. + +That concludes the documentation for LayoutLMDocumentQA. We hope you find this tool valuable for your document-based question answering needs. If you have any questions or encounter any issues, please refer to the LayoutLMDocumentQA documentation for further assistance. Enjoy using LayoutLMDocumentQA! \ No newline at end of file diff --git a/docs_edit/swarms/models/llama3.md b/docs_edit/swarms/models/llama3.md new file mode 100644 index 00000000..4ae0f1ef --- /dev/null +++ b/docs_edit/swarms/models/llama3.md @@ -0,0 +1,96 @@ +## Llava3 + + +```python +from transformers import AutoTokenizer, AutoModelForCausalLM +import torch +from swarms.models.base_llm import BaseLLM + + +class Llama3(BaseLLM): + """ + Llama3 class represents a Llama model for natural language generation. + + Args: + model_id (str): The ID of the Llama model to use. + system_prompt (str): The system prompt to use for generating responses. + temperature (float): The temperature value for controlling the randomness of the generated responses. + top_p (float): The top-p value for controlling the diversity of the generated responses. + max_tokens (int): The maximum number of tokens to generate in the response. + **kwargs: Additional keyword arguments. + + Attributes: + model_id (str): The ID of the Llama model being used. + system_prompt (str): The system prompt for generating responses. + temperature (float): The temperature value for generating responses. + top_p (float): The top-p value for generating responses. + max_tokens (int): The maximum number of tokens to generate in the response. + tokenizer (AutoTokenizer): The tokenizer for the Llama model. + model (AutoModelForCausalLM): The Llama model for generating responses. + + Methods: + run(task, *args, **kwargs): Generates a response for the given task. + + """ + + def __init__( + self, + model_id="meta-llama/Meta-Llama-3-8B-Instruct", + system_prompt: str = None, + temperature: float = 0.6, + top_p: float = 0.9, + max_tokens: int = 4000, + **kwargs, + ): + self.model_id = model_id + self.system_prompt = system_prompt + self.temperature = temperature + self.top_p = top_p + self.max_tokens = max_tokens + self.tokenizer = AutoTokenizer.from_pretrained(model_id) + self.model = AutoModelForCausalLM.from_pretrained( + model_id, + torch_dtype=torch.bfloat16, + device_map="auto", + ) + + def run(self, task: str, *args, **kwargs): + """ + Generates a response for the given task. + + Args: + task (str): The user's task or input. + + Returns: + str: The generated response. + + """ + messages = [ + {"role": "system", "content": self.system_prompt}, + {"role": "user", "content": task}, + ] + + input_ids = self.tokenizer.apply_chat_template( + messages, add_generation_prompt=True, return_tensors="pt" + ).to(self.model.device) + + terminators = [ + self.tokenizer.eos_token_id, + self.tokenizer.convert_tokens_to_ids("<|eot_id|>"), + ] + + outputs = self.model.generate( + input_ids, + max_new_tokens=self.max_tokens, + eos_token_id=terminators, + do_sample=True, + temperature=self.temperature, + top_p=self.top_p, + *args, + **kwargs, + ) + response = outputs[0][input_ids.shape[-1] :] + return self.tokenizer.decode( + response, skip_special_tokens=True + ) +``` \ No newline at end of file diff --git a/docs_edit/swarms/models/nougat.md b/docs_edit/swarms/models/nougat.md new file mode 100644 index 00000000..217990a1 --- /dev/null +++ b/docs_edit/swarms/models/nougat.md @@ -0,0 +1,118 @@ +# `Nougat` Documentation + +## Introduction + +Welcome to the documentation for Nougat, a versatile model designed by Meta for transcribing scientific PDFs into user-friendly Markdown format, extracting information from PDFs, and extracting metadata from PDF documents. This documentation will provide you with a deep understanding of the Nougat class, its architecture, usage, and examples. + +## Overview + +Nougat is a powerful tool that combines language modeling and image processing capabilities to convert scientific PDF documents into Markdown format. It is particularly useful for researchers, students, and professionals who need to extract valuable information from PDFs quickly. With Nougat, you can simplify complex PDFs, making their content more accessible and easy to work with. + +## Class Definition + +```python +class Nougat: + def __init__( + self, + model_name_or_path="facebook/nougat-base", + min_length: int = 1, + max_new_tokens: int = 30, + ): +``` + +## Purpose + +The Nougat class serves the following primary purposes: + +1. **PDF Transcription**: Nougat is designed to transcribe scientific PDFs into Markdown format. It helps convert complex PDF documents into a more readable and structured format, making it easier to extract information. + +2. **Information Extraction**: It allows users to extract valuable information and content from PDFs efficiently. This can be particularly useful for researchers and professionals who need to extract data, figures, or text from scientific papers. + +3. **Metadata Extraction**: Nougat can also extract metadata from PDF documents, providing essential details about the document, such as title, author, and publication date. + +## Parameters + +- `model_name_or_path` (str): The name or path of the pretrained Nougat model. Default: "facebook/nougat-base". +- `min_length` (int): The minimum length of the generated transcription. Default: 1. +- `max_new_tokens` (int): The maximum number of new tokens to generate in the Markdown transcription. Default: 30. + +## Usage + +To use Nougat, follow these steps: + +1. Initialize the Nougat instance: + +```python +from swarms.models import Nougat + +nougat = Nougat() +``` + +### Example 1 - Initialization + +```python +nougat = Nougat() +``` + +2. Transcribe a PDF image using Nougat: + +```python +markdown_transcription = nougat("path/to/pdf_file.png") +``` + +### Example 2 - PDF Transcription + +```python +nougat = Nougat() +markdown_transcription = nougat("path/to/pdf_file.png") +``` + +3. Extract information from a PDF: + +```python +information = nougat.extract_information("path/to/pdf_file.png") +``` + +### Example 3 - Information Extraction + +```python +nougat = Nougat() +information = nougat.extract_information("path/to/pdf_file.png") +``` + +4. Extract metadata from a PDF: + +```python +metadata = nougat.extract_metadata("path/to/pdf_file.png") +``` + +### Example 4 - Metadata Extraction + +```python +nougat = Nougat() +metadata = nougat.extract_metadata("path/to/pdf_file.png") +``` + +## How Nougat Works + +Nougat employs a vision encoder-decoder model, along with a dedicated processor, to transcribe PDFs into Markdown format and perform information and metadata extraction. Here's how it works: + +1. **Initialization**: When you create a Nougat instance, you can specify the model to use, the minimum transcription length, and the maximum number of new tokens to generate. + +2. **Processing PDFs**: Nougat can process PDFs as input. You can provide the path to a PDF document. + +3. **Image Processing**: The processor converts PDF pages into images, which are then encoded by the model. + +4. **Transcription**: Nougat generates Markdown transcriptions of PDF content, ensuring a minimum length and respecting the token limit. + +5. **Information Extraction**: Information extraction involves parsing the Markdown transcription to identify key details or content of interest. + +6. **Metadata Extraction**: Metadata extraction involves identifying and extracting document metadata, such as title, author, and publication date. + +## Additional Information + +- Nougat leverages the "facebook/nougat-base" pretrained model, which is specifically designed for document transcription and extraction tasks. +- You can adjust the minimum transcription length and the maximum number of new tokens to control the output's length and quality. +- Nougat can be run on both CPU and GPU devices. + +That concludes the documentation for Nougat. We hope you find this tool valuable for your PDF transcription, information extraction, and metadata extraction needs. If you have any questions or encounter any issues, please refer to the Nougat documentation for further assistance. Enjoy using Nougat! \ No newline at end of file diff --git a/docs_edit/swarms/models/openai.md b/docs_edit/swarms/models/openai.md new file mode 100644 index 00000000..ae547631 --- /dev/null +++ b/docs_edit/swarms/models/openai.md @@ -0,0 +1,200 @@ +# `BaseOpenAI` and `OpenAI` Documentation + +## Table of Contents + +1. [Overview](#overview) +2. [Class Architecture](#class-architecture) +3. [Purpose](#purpose) +4. [Class Attributes](#class-attributes) +5. [Methods](#methods) + - [Construction](#construction) + - [Configuration](#configuration) + - [Tokenization](#tokenization) + - [Generation](#generation) + - [Asynchronous Generation](#asynchronous-generation) +6. [Usage Examples](#usage-examples) + - [Creating an OpenAI Object](#creating-an-openai-object) + - [Generating Text](#generating-text) + - [Advanced Configuration](#advanced-configuration) + +--- + +## 1. Overview + +The `BaseOpenAI` and `OpenAI` classes are part of the LangChain library, designed to interact with OpenAI's large language models (LLMs). These classes provide a seamless interface for utilizing OpenAI's API to generate natural language text. + +## 2. Class Architecture + +Both `BaseOpenAI` and `OpenAI` classes inherit from `BaseLLM`, demonstrating an inheritance-based architecture. This architecture allows for easy extensibility and customization while adhering to the principles of object-oriented programming. + +## 3. Purpose + +The purpose of these classes is to simplify the interaction with OpenAI's LLMs. They encapsulate API calls, handle tokenization, and provide a high-level interface for generating text. By instantiating an object of the `OpenAI` class, developers can quickly leverage the power of OpenAI's models to generate text for various applications, such as chatbots, content generation, and more. + +## 4. Class Attributes + +Here are the key attributes and their descriptions for the `BaseOpenAI` and `OpenAI` classes: + +| Attribute | Description | +|---------------------------|-------------| +| `lc_secrets` | A dictionary of secrets required for LangChain, including the OpenAI API key. | +| `lc_attributes` | A dictionary of attributes relevant to LangChain. | +| `is_lc_serializable()` | A method indicating if the class is serializable for LangChain. | +| `model_name` | The name of the language model to use. | +| `temperature` | The sampling temperature for text generation. | +| `max_tokens` | The maximum number of tokens to generate in a completion. | +| `top_p` | The total probability mass of tokens to consider at each step. | +| `frequency_penalty` | Penalizes repeated tokens according to frequency. | +| `presence_penalty` | Penalizes repeated tokens. | +| `n` | How many completions to generate for each prompt. | +| `best_of` | Generates `best_of` completions server-side and returns the "best." | +| `model_kwargs` | Holds any model parameters valid for `create` calls not explicitly specified. | +| `openai_api_key` | The OpenAI API key used for authentication. | +| `openai_api_base` | The base URL for the OpenAI API. | +| `openai_organization` | The OpenAI organization name, if applicable. | +| `openai_proxy` | An explicit proxy URL for OpenAI requests. | +| `batch_size` | The batch size to use when passing multiple documents for generation. | +| `request_timeout` | The timeout for requests to the OpenAI completion API. | +| `logit_bias` | Adjustment to the probability of specific tokens being generated. | +| `max_retries` | The maximum number of retries to make when generating. | +| `streaming` | Whether to stream the results or not. | +| `allowed_special` | A set of special tokens that are allowed. | +| `disallowed_special` | A collection of special tokens that are not allowed. | +| `tiktoken_model_name` | The model name to pass to `tiktoken` for token counting. | + +## 5. Methods + +### 5.1 Construction + +#### 5.1.1 `__new__(cls, **data: Any) -> Union[OpenAIChat, BaseOpenAI]` +- Description: Initializes the OpenAI object. +- Arguments: + - `cls` (class): The class instance. + - `data` (dict): Additional data for initialization. +- Returns: + - Union[OpenAIChat, BaseOpenAI]: An instance of the OpenAI class. + +### 5.2 Configuration + +#### 5.2.1 `build_extra(cls, values: Dict[str, Any]) -> Dict[str, Any]` +- Description: Builds extra kwargs from additional params passed in. +- Arguments: + - `cls` (class): The class instance. + - `values` (dict): Values and parameters to build extra kwargs. +- Returns: + - Dict[str, Any]: A dictionary of built extra kwargs. + +#### 5.2.2 `validate_environment(cls, values: Dict) -> Dict` +- Description: Validates that the API key and python package exist in the environment. +- Arguments: + - `values` (dict): The class values and parameters. +- Returns: + - Dict: A dictionary of validated values. + +### 5.3 Tokenization + +#### 5.3.1 `get_sub_prompts(self, params: Dict[str, Any], prompts: List[str], stop: Optional[List[str]] = None) -> List[List[str]]` +- Description: Gets sub-prompts for LLM call. +- Arguments: + - `params` (dict): Parameters for LLM call. + - `prompts` (list): List of prompts. + - `stop` (list, optional): List of stop words. +- Returns: + - List[List[str]]: List of sub-prompts. + +#### 5.3.2 `get_token_ids(self, text: str) -> List[int]` +- Description: Gets token IDs using the `tiktoken` package. +- Arguments: + - `text` (str): The text for which to calculate token IDs. +- Returns: + - List[int]: A list of token IDs. + +#### 5.3.3 `modelname_to_contextsize(modelname: str) -> int` +- Description: Calculates the maximum number of tokens possible to generate for a model. +- Arguments: + - `modelname` (str): The model name to determine the context size for. +- Returns: + - int: The maximum context size. + +#### 5.3.4 `max_tokens_for_prompt(self, prompt: str) -> int` +- Description: Calculates the maximum number of tokens possible to generate for a prompt. +- Arguments: + - `prompt` (str): The prompt for which to + + determine the maximum token limit. +- Returns: + - int: The maximum token limit. + +### 5.4 Generation + +#### 5.4.1 `generate(self, text: Union[str, List[str]], **kwargs) -> Union[str, List[str]]` +- Description: Generates text using the OpenAI API. +- Arguments: + - `text` (str or list): The input text or list of inputs. + - `**kwargs` (dict): Additional parameters for the generation process. +- Returns: + - Union[str, List[str]]: The generated text or list of generated texts. + +### 5.5 Asynchronous Generation + +#### 5.5.1 `generate_async(self, text: Union[str, List[str]], **kwargs) -> Union[str, List[str]]` +- Description: Generates text asynchronously using the OpenAI API. +- Arguments: + - `text` (str or list): The input text or list of inputs. + - `**kwargs` (dict): Additional parameters for the asynchronous generation process. +- Returns: + - Union[str, List[str]]: The generated text or list of generated texts. + +## 6. Usage Examples + +### 6.1 Creating an OpenAI Object + +```python +# Import the OpenAI class +from swarms.models import OpenAI + +# Set your OpenAI API key +api_key = "YOUR_API_KEY" + +# Create an OpenAI object +openai = OpenAI(api_key) +``` + +### 6.2 Generating Text + +```python +# Generate text from a single prompt +prompt = "Translate the following English text to French: 'Hello, how are you?'" +generated_text = openai.generate(prompt, max_tokens=50) + +# Generate text from multiple prompts +prompts = [ + "Translate this: 'Good morning' to Spanish.", + "Summarize the following article:", + article_text, +] +generated_texts = openai.generate(prompts, max_tokens=100) + +# Generate text asynchronously +async_prompt = "Translate 'Thank you' into German." +async_result = openai.generate_async(async_prompt, max_tokens=30) + +# Access the result of an asynchronous generation +async_result_text = async_result.get() +``` + +### 6.3 Advanced Configuration + +```python +# Configure generation with advanced options +custom_options = { + "temperature": 0.7, + "max_tokens": 100, + "top_p": 0.9, + "frequency_penalty": 0.2, + "presence_penalty": 0.4, +} +generated_text = openai.generate(prompt, **custom_options) +``` + +This documentation provides a comprehensive understanding of the `BaseOpenAI` and `OpenAI` classes, their attributes, methods, and usage examples. Developers can utilize these classes to interact with OpenAI's language models efficiently, enabling various natural language generation tasks. \ No newline at end of file diff --git a/docs_edit/swarms/models/openai_chat.md b/docs_edit/swarms/models/openai_chat.md new file mode 100644 index 00000000..d7d9b2eb --- /dev/null +++ b/docs_edit/swarms/models/openai_chat.md @@ -0,0 +1,185 @@ +# `OpenAIChat` Documentation + +## Table of Contents + +1. [Introduction](#introduction) +2. [Class Overview](#class-overview) +3. [Class Architecture](#class-architecture) +4. [Class Attributes](#class-attributes) +5. [Methods](#methods) + - [Construction](#construction) + - [Configuration](#configuration) + - [Message Handling](#message-handling) + - [Generation](#generation) + - [Tokenization](#tokenization) +6. [Usage Examples](#usage-examples) +7. [Additional Information](#additional-information) + +--- + +## 1. Introduction + +The `OpenAIChat` class is part of the LangChain library and serves as an interface to interact with OpenAI's Chat large language models. This documentation provides an in-depth understanding of the class, its attributes, methods, and usage examples. + +## 2. Class Overview + +The `OpenAIChat` class is designed for conducting chat-like conversations with OpenAI's language models, such as GPT-3.5 Turbo. It allows you to create interactive conversations by sending messages and receiving model-generated responses. This class simplifies the process of integrating OpenAI's models into chatbot applications and other natural language processing tasks. + +## 3. Class Architecture + +The `OpenAIChat` class is built on top of the `BaseLLM` class, which provides a foundation for working with large language models. This inheritance-based architecture allows for customization and extension while adhering to object-oriented programming principles. + +## 4. Class Attributes + +Here are the key attributes and their descriptions for the `OpenAIChat` class: + +| Attribute | Description | +|-----------------------------|-------------------------------------------------------------------------------| +| `client` | An internal client for making API calls to OpenAI. | +| `model_name` | The name of the language model to use (default: "gpt-3.5-turbo"). | +| `model_kwargs` | Additional model parameters valid for `create` calls not explicitly specified.| +| `openai_api_key` | The OpenAI API key used for authentication. | +| `openai_api_base` | The base URL for the OpenAI API. | +| `openai_proxy` | An explicit proxy URL for OpenAI requests. | +| `max_retries` | The maximum number of retries to make when generating (default: 6). | +| `prefix_messages` | A list of messages to set the initial conversation state (default: []). | +| `streaming` | Whether to stream the results or not (default: False). | +| `allowed_special` | A set of special tokens that are allowed (default: an empty set). | +| `disallowed_special` | A collection of special tokens that are not allowed (default: "all"). | + +## 5. Methods + +### 5.1 Construction + +#### 5.1.1 `__init__(self, model_name: str = "gpt-3.5-turbo", openai_api_key: Optional[str] = None, openai_api_base: Optional[str] = None, openai_proxy: Optional[str] = None, max_retries: int = 6, prefix_messages: List = [])` +- Description: Initializes an OpenAIChat object. +- Arguments: + - `model_name` (str): The name of the language model to use (default: "gpt-3.5-turbo"). + - `openai_api_key` (str, optional): The OpenAI API key used for authentication. + - `openai_api_base` (str, optional): The base URL for the OpenAI API. + - `openai_proxy` (str, optional): An explicit proxy URL for OpenAI requests. + - `max_retries` (int): The maximum number of retries to make when generating (default: 6). + - `prefix_messages` (List): A list of messages to set the initial conversation state (default: []). + +### 5.2 Configuration + +#### 5.2.1 `build_extra(self, values: Dict[str, Any]) -> Dict[str, Any]` +- Description: Builds extra kwargs from additional parameters passed in. +- Arguments: + - `values` (dict): Values and parameters to build extra kwargs. +- Returns: + - Dict[str, Any]: A dictionary of built extra kwargs. + +#### 5.2.2 `validate_environment(self, values: Dict) -> Dict` +- Description: Validates that the API key and Python package exist in the environment. +- Arguments: + - `values` (dict): The class values and parameters. +- Returns: + - Dict: A dictionary of validated values. + +### 5.3 Message Handling + +#### 5.3.1 `_get_chat_params(self, prompts: List[str], stop: Optional[List[str]] = None) -> Tuple` +- Description: Gets chat-related parameters for generating responses. +- Arguments: + - `prompts` (list): List of user messages. + - `stop` (list, optional): List of stop words. +- Returns: + - Tuple: Messages and parameters. + +### 5.4 Generation + +#### 5.4.1 `_stream(self, prompt: str, stop: Optional[List[str]] = None, run_manager: Optional[CallbackManagerForLLMRun] = None, **kwargs: Any) -> Iterator[GenerationChunk]` +- Description: Generates text asynchronously using the OpenAI API. +- Arguments: + - `prompt` (str): The user's message. + - `stop` (list, optional): List of stop words. + - `run_manager` (optional): Callback manager for asynchronous generation. + - `**kwargs` (dict): Additional parameters for asynchronous generation. +- Returns: + - Iterator[GenerationChunk]: An iterator of generated text chunks. + +#### 5.4.2 `_agenerate(self, prompts: List[str], stop: Optional[List[str]] = None, run_manager: Optional[AsyncCallbackManagerForLLMRun] = None, **kwargs: Any) -> LLMResult` +- Description: Generates text asynchronously using the OpenAI API (async version). +- Arguments: + - `prompts` (list): List of user messages. + - `stop` (list, optional): List of stop words. + - `run_manager` (optional): Callback manager for asynchronous generation. + - `**kwargs` (dict): Additional parameters for asynchronous generation. +- Returns: + - LLMResult: A result object containing the generated text. + +### 5.5 Tokenization + +#### 5.5.1 `get_token_ids(self, text: str) -> List[int]` +- Description: Gets token IDs using the tiktoken package. +- Arguments: + - `text` (str): The text for which to calculate token IDs. +- Returns: + - List[int]: A list of + + token IDs. + +## 6. Usage Examples + +### Example 1: Initializing `OpenAIChat` + +```python +from swarms.models import OpenAIChat + +# Initialize OpenAIChat with model name and API key +openai_chat = OpenAIChat(model_name="gpt-3.5-turbo", openai_api_key="YOUR_API_KEY") +``` + +### Example 2: Sending Messages and Generating Responses + +```python +# Define a conversation +conversation = [ + "User: Tell me a joke.", + "Assistant: Why did the chicken cross the road?", + "User: I don't know. Why?", + "Assistant: To get to the other side!", +] + +# Set the conversation as the prefix messages +openai_chat.prefix_messages = conversation + +# Generate a response +user_message = "User: Tell me another joke." +response = openai_chat.generate([user_message]) + +# Print the generated response +print( + response[0][0].text +) # Output: "Assistant: Why don't scientists trust atoms? Because they make up everything!" +``` + +### Example 3: Asynchronous Generation + +```python +import asyncio + + +# Define an asynchronous function for generating responses +async def generate_responses(): + user_message = "User: Tell me a fun fact." + async for chunk in openai_chat.stream([user_message]): + print(chunk.text) + + +# Run the asynchronous generation function +asyncio.run(generate_responses()) +``` + +## 7. Additional Information + +- To use the `OpenAIChat` class, you should have the `openai` Python package installed, and the environment variable `OPENAI_API_KEY` set with your API key. +- Any parameters that are valid to be passed to the `openai.create` call can be passed to the `OpenAIChat` constructor. +- You can customize the behavior of the class by setting various attributes, such as `model_name`, `openai_api_key`, `prefix_messages`, and more. +- For asynchronous generation, you can use the `_stream` and `_agenerate` methods to interactively receive model-generated text chunks. +- To calculate token IDs, you can use the `get_token_ids` method, which utilizes the `tiktoken` package. Make sure to install the `tiktoken` package with `pip install tiktoken` if needed. + +--- + +This documentation provides a comprehensive overview of the `OpenAIChat` class, its attributes, methods, and usage examples. You can use this class to create chatbot applications, conduct conversations with language models, and explore the capabilities of OpenAI's GPT-3.5 Turbo model. \ No newline at end of file diff --git a/docs_edit/swarms/models/openai_tts.md b/docs_edit/swarms/models/openai_tts.md new file mode 100644 index 00000000..b2996312 --- /dev/null +++ b/docs_edit/swarms/models/openai_tts.md @@ -0,0 +1,135 @@ +# `OpenAITTS` Documentation + +## Table of Contents +1. [Overview](#overview) +2. [Installation](#installation) +3. [Usage](#usage) + - [Initialization](#initialization) + - [Running TTS](#running-tts) + - [Running TTS and Saving](#running-tts-and-saving) +4. [Examples](#examples) + - [Basic Usage](#basic-usage) + - [Saving the Output](#saving-the-output) +5. [Advanced Options](#advanced-options) +6. [Troubleshooting](#troubleshooting) +7. [References](#references) + +## 1. Overview + +The `OpenAITTS` module is a Python library that provides an interface for converting text to speech (TTS) using the OpenAI TTS API. It allows you to generate high-quality speech from text input, making it suitable for various applications such as voice assistants, speech synthesis, and more. + +### Features: +- Convert text to speech using OpenAI's TTS model. +- Supports specifying the model name, voice, and other parameters. +- Option to save the generated speech to a WAV file. + +## 2. Installation + +To use the `OpenAITTS` model, you need to install the necessary dependencies. You can do this using `pip`: + +```bash +pip install swarms requests wave +``` + +## 3. Usage + +### Initialization + +To use the `OpenAITTS` module, you need to initialize an instance of the `OpenAITTS` class. Here's how you can do it: + +```python +from swarms.models.openai_tts import OpenAITTS + +# Initialize the OpenAITTS instance +tts = OpenAITTS( + model_name="tts-1-1106", + proxy_url="https://api.openai.com/v1/audio/speech", + openai_api_key=openai_api_key_env, + voice="onyx", +) +``` + +#### Parameters: +- `model_name` (str): The name of the TTS model to use (default is "tts-1-1106"). +- `proxy_url` (str): The URL for the OpenAI TTS API (default is "https://api.openai.com/v1/audio/speech"). +- `openai_api_key` (str): Your OpenAI API key. It can be obtained from the OpenAI website. +- `voice` (str): The voice to use for generating speech (default is "onyx"). +- `chunk_size` (int): The size of data chunks when fetching audio (default is 1024 * 1024 bytes). +- `autosave` (bool): Whether to automatically save the generated speech to a file (default is False). +- `saved_filepath` (str): The path to the file where the speech will be saved (default is "runs/tts_speech.wav"). + +### Running TTS + +Once the `OpenAITTS` instance is initialized, you can use it to convert text to speech using the `run` method: + +```python +# Generate speech from text +speech_data = tts.run("Hello, world!") +``` + +#### Parameters: +- `task` (str): The text you want to convert to speech. + +#### Returns: +- `speech_data` (bytes): The generated speech data. + +### Running TTS and Saving + +You can also use the `run_and_save` method to generate speech from text and save it to a file: + +```python +# Generate speech from text and save it to a file +speech_data = tts.run_and_save("Hello, world!") +``` + +#### Parameters: +- `task` (str): The text you want to convert to speech. + +#### Returns: +- `speech_data` (bytes): The generated speech data. + +## 4. Examples + +### Basic Usage + +Here's a basic example of how to use the `OpenAITTS` module to generate speech from text: + +```python +from swarms.models.openai_tts import OpenAITTS + +# Initialize the OpenAITTS instance +tts = OpenAITTS( + model_name="tts-1-1106", + proxy_url="https://api.openai.com/v1/audio/speech", + openai_api_key=openai_api_key_env, + voice="onyx", +) + +# Generate speech from text +speech_data = tts.run("Hello, world!") +``` + +### Saving the Output + +You can save the generated speech to a WAV file using the `run_and_save` method: + +```python +# Generate speech from text and save it to a file +speech_data = tts.run_and_save("Hello, world!") +``` + +## 5. Advanced Options + +The `OpenAITTS` module supports various advanced options for customizing the TTS generation process. You can specify the model name, voice, and other parameters during initialization. Additionally, you can configure the chunk size for audio data fetching and choose whether to automatically save the generated speech to a file. + +## 6. Troubleshooting + +If you encounter any issues while using the `OpenAITTS` module, please make sure you have installed all the required dependencies and that your OpenAI API key is correctly configured. If you still face problems, refer to the OpenAI documentation or contact their support for assistance. + +## 7. References + +- [OpenAI API Documentation](https://beta.openai.com/docs/) +- [Python Requests Library](https://docs.python-requests.org/en/latest/) +- [Python Wave Library](https://docs.python.org/3/library/wave.html) + +This documentation provides a comprehensive guide on how to use the `OpenAITTS` module to convert text to speech using OpenAI's TTS model. It covers initialization, basic usage, advanced options, troubleshooting, and references for further exploration. \ No newline at end of file diff --git a/docs_edit/swarms/models/vilt.md b/docs_edit/swarms/models/vilt.md new file mode 100644 index 00000000..2cb56b22 --- /dev/null +++ b/docs_edit/swarms/models/vilt.md @@ -0,0 +1,95 @@ +# `Vilt` Documentation + +## Introduction + +Welcome to the documentation for Vilt, a Vision-and-Language Transformer (ViLT) model fine-tuned on the VQAv2 dataset. Vilt is a powerful model capable of answering questions about images. This documentation will provide a comprehensive understanding of Vilt, its architecture, usage, and how it can be integrated into your projects. + +## Overview + +Vilt is based on the Vision-and-Language Transformer (ViLT) architecture, designed for tasks that involve understanding both text and images. It has been fine-tuned on the VQAv2 dataset, making it adept at answering questions about images. This model is particularly useful for tasks where textual and visual information needs to be combined to provide meaningful answers. + +## Class Definition + +```python +class Vilt: + def __init__(self): + """ + Initialize the Vilt model. + """ +``` + +## Usage + +To use the Vilt model, follow these steps: + +1. Initialize the Vilt model: + +```python +from swarms.models import Vilt + +model = Vilt() +``` + +2. Call the model with a text question and an image URL: + +```python +output = model( + "What is this image?", "http://images.cocodataset.org/val2017/000000039769.jpg" +) +``` + +### Example 1 - Image Questioning + +```python +model = Vilt() +output = model( + "What are the objects in this image?", + "http://images.cocodataset.org/val2017/000000039769.jpg", +) +print(output) +``` + +### Example 2 - Image Analysis + +```python +model = Vilt() +output = model( + "Describe the scene in this image.", + "http://images.cocodataset.org/val2017/000000039769.jpg", +) +print(output) +``` + +### Example 3 - Visual Knowledge Retrieval + +```python +model = Vilt() +output = model( + "Tell me more about the landmark in this image.", + "http://images.cocodataset.org/val2017/000000039769.jpg", +) +print(output) +``` + +## How Vilt Works + +Vilt operates by combining text and image information to generate meaningful answers to questions about the provided image. Here's how it works: + +1. **Initialization**: When you create a Vilt instance, it initializes the processor and the model. The processor is responsible for handling the image and text input, while the model is the fine-tuned ViLT model. + +2. **Processing Input**: When you call the Vilt model with a text question and an image URL, it downloads the image and processes it along with the text question. This processing step involves tokenization and encoding of the input. + +3. **Forward Pass**: The encoded input is then passed through the ViLT model. It calculates the logits, and the answer with the highest probability is selected. + +4. **Output**: The predicted answer is returned as the output of the model. + +## Parameters + +Vilt does not require any specific parameters during initialization. It is pre-configured to work with the "dandelin/vilt-b32-finetuned-vqa" model. + +## Additional Information + +- Vilt is fine-tuned on the VQAv2 dataset, making it proficient at answering questions about a wide range of images. +- You can use Vilt for various applications, including image question-answering, image analysis, and visual knowledge retrieval. + +That concludes the documentation for Vilt. We hope you find this model useful for your vision-and-language tasks. If you have any questions or encounter any issues, please refer to the Hugging Face Transformers documentation for further assistance. Enjoy working with Vilt! \ No newline at end of file diff --git a/docs_edit/swarms/papers.md b/docs_edit/swarms/papers.md new file mode 100644 index 00000000..3df45299 --- /dev/null +++ b/docs_edit/swarms/papers.md @@ -0,0 +1,3 @@ +# awesome-multi-agent-papers + +An awesome list of multi-agent papers that show you various swarm architectures and much more. [Get started](https://github.com/kyegomez/awesome-multi-agent-papers) \ No newline at end of file diff --git a/docs_edit/swarms/structs/abstractswarm.md b/docs_edit/swarms/structs/abstractswarm.md new file mode 100644 index 00000000..82ebf44e --- /dev/null +++ b/docs_edit/swarms/structs/abstractswarm.md @@ -0,0 +1,516 @@ +# `BaseSwarm` Documentation + +## Table of Contents + +1. [Introduction](#introduction) +2. [Class Definition](#class-definition) +3. [Methods](#methods) + - [communicate()](#communicate) + - [run()](#run) + - [arun()](#arun) + - [add_worker(worker)](#add_worker) + - [remove_worker(worker)](#remove_worker) + - [broadcast(message, sender)](#broadcast) + - [reset()](#reset) + - [plan(task)](#plan) + - [direct_message(message, sender, recipient)](#direct_message) + - [autoscaler(num_workers, worker)](#autoscaler) + - [get_worker_by_id(id)](#get_worker_by_id) + - [get_worker_by_name(name)](#get_worker_by_name) + - [assign_task(worker, task)](#assign_task) + - [get_all_tasks(worker, task)](#get_all_tasks) + - [get_finished_tasks()](#get_finished_tasks) + - [get_pending_tasks()](#get_pending_tasks) + - [pause_worker(worker, worker_id)](#pause_worker) + - [resume_worker(worker, worker_id)](#resume_worker) + - [stop_worker(worker, worker_id)](#stop_worker) + - [restart_worker(worker)](#restart_worker) + - [scale_up(num_worker)](#scale_up) + - [scale_down(num_worker)](#scale_down) + - [scale_to(num_worker)](#scale_to) + - [get_all_workers()](#get_all_workers) + - [get_swarm_size()](#get_swarm_size) + - [get_swarm_status()](#get_swarm_status) + - [save_swarm_state()](#save_swarm_state) + +--- + +## 1. Introduction + +The Swarms library is designed to provide a framework for swarm simulation architectures. Swarms are collections of autonomous agents or workers that collaborate to perform tasks and achieve common goals. This documentation will guide you through the functionality and usage of the Swarms library, explaining the purpose and implementation details of the provided classes and methods. + +## 2. Class Definition + +### `BaseSwarm` Class + +The `BaseSwarm` class is an abstract base class that serves as the foundation for swarm simulation architectures. It defines the core functionality and methods required to manage and interact with a swarm of workers. + +```python +from abc import ABC, abstractmethod +from typing import List + +from swarms.swarms.base import AbstractWorker + + +class BaseSwarm(ABC): + """ + Abstract class for swarm simulation architectures + + Methods: + --------- + ... + """ + + # The class definition and constructor are provided here. + + @abstractmethod + def __init__(self, workers: List["AbstractWorker"]): + """Initialize the swarm with workers""" + + # Other abstract methods are listed here. +``` + +## 3. Methods + +### `communicate()` + +The `communicate()` method allows the swarm to exchange information through the orchestrator, protocols, and the universal communication layer. + +**Usage Example 1:** + +```python +swarm = YourSwarmClass(workers) +swarm.communicate() +``` + +**Usage Example 2:** + +```python +# Another example of using the communicate method +swarm = YourSwarmClass(workers) +swarm.communicate() +``` + +### `run()` + +The `run()` method executes the swarm, initiating its activities. + +**Usage Example 1:** + +```python +swarm = YourSwarmClass(workers) +swarm.run() +``` + +**Usage Example 2:** + +```python +# Another example of running the swarm +swarm = YourSwarmClass(workers) +swarm.run() +``` + +### `arun()` + +The `arun()` method runs the swarm asynchronously, allowing for parallel execution of tasks. + +**Usage Example 1:** + +```python +swarm = YourSwarmClass(workers) +swarm.arun() +``` + +**Usage Example 2:** + +```python +# Another example of running the swarm asynchronously +swarm = YourSwarmClass(workers) +swarm.arun() +``` + +### `add_worker(worker: "AbstractWorker")` + +The `add_worker()` method adds a worker to the swarm. + +**Parameters:** +- `worker` (AbstractWorker): The worker to be added to the swarm. + +**Usage Example:** + +```python +swarm = YourSwarmClass([]) +worker = YourWorkerClass() +swarm.add_worker(worker) +``` + +### `remove_worker(worker: "AbstractWorker")` + +The `remove_worker()` method removes a worker from the swarm. + +**Parameters:** +- `worker` (AbstractWorker): The worker to be removed from the swarm. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker = swarm.get_worker_by_id("worker_id") +swarm.remove_worker(worker) +``` + +### `broadcast(message: str, sender: Optional["AbstractWorker"] = None)` + +The `broadcast()` method sends a message to all workers in the swarm. + +**Parameters:** +- `message` (str): The message to be broadcasted. +- `sender` (Optional[AbstractWorker]): The sender of the message (optional). + +**Usage Example 1:** + +```python +swarm = YourSwarmClass(workers) +message = "Hello, everyone!" +swarm.broadcast(message) +``` + +**Usage Example 2:** + +```python +# Another example of broadcasting a message +swarm = YourSwarmClass(workers) +message = "Important announcement!" +sender = swarm.get_worker_by_name("Supervisor") +swarm.broadcast(message, sender) +``` + +### `reset()` + +The `reset()` method resets the swarm to its initial state. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +swarm.reset() +``` + +### `plan(task: str)` + +The `plan()` method instructs workers to individually plan using a workflow or pipeline for a specified task. + +**Parameters:** +- `task` (str): The task for which workers should plan. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +task = "Perform data analysis" +swarm.plan(task) +``` + +### `direct_message(message: str, sender: "AbstractWorker", recipient: "AbstractWorker")` + +The `direct_message()` method sends a direct message from one worker to another. + +**Parameters:** +- `message` (str): The message to be sent. +- `sender` (AbstractWorker): The sender of the message. +- `recipient` (AbstractWorker): The recipient of the message. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +sender = swarm.get_worker_by_name("Worker1") +recipient = swarm.get_worker_by_name("Worker2") +message = "Hello + +, Worker2!" +swarm.direct_message(message, sender, recipient) +``` + +### `autoscaler(num_workers: int, worker: List["AbstractWorker"])` + +The `autoscaler()` method acts as an autoscaler, dynamically adjusting the number of workers based on system load or other criteria. + +**Parameters:** +- `num_workers` (int): The desired number of workers. +- `worker` (List[AbstractWorker]): A list of workers to be managed by the autoscaler. + +**Usage Example:** + +```python +swarm = YourSwarmClass([]) +workers = [YourWorkerClass() for _ in range(10)] +swarm.autoscaler(5, workers) +``` + +### `get_worker_by_id(id: str) -> "AbstractWorker"` + +The `get_worker_by_id()` method locates a worker in the swarm by their ID. + +**Parameters:** +- `id` (str): The ID of the worker to locate. + +**Returns:** +- `AbstractWorker`: The worker with the specified ID. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker_id = "worker_123" +worker = swarm.get_worker_by_id(worker_id) +``` + +### `get_worker_by_name(name: str) -> "AbstractWorker"` + +The `get_worker_by_name()` method locates a worker in the swarm by their name. + +**Parameters:** +- `name` (str): The name of the worker to locate. + +**Returns:** +- `AbstractWorker`: The worker with the specified name. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker_name = "Alice" +worker = swarm.get_worker_by_name(worker_name) +``` + +### `assign_task(worker: "AbstractWorker", task: Any) -> Dict` + +The `assign_task()` method assigns a task to a specific worker. + +**Parameters:** +- `worker` (AbstractWorker): The worker to whom the task should be assigned. +- `task` (Any): The task to be assigned. + +**Returns:** +- `Dict`: A dictionary indicating the status of the task assignment. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker = swarm.get_worker_by_name("Worker1") +task = "Perform data analysis" +result = swarm.assign_task(worker, task) +``` + +### `get_all_tasks(worker: "AbstractWorker", task: Any)` + +The `get_all_tasks()` method retrieves all tasks assigned to a specific worker. + +**Parameters:** +- `worker` (AbstractWorker): The worker for whom tasks should be retrieved. +- `task` (Any): The task to be retrieved. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker = swarm.get_worker_by_name("Worker1") +tasks = swarm.get_all_tasks(worker, "data analysis") +``` + +### `get_finished_tasks() -> List[Dict]` + +The `get_finished_tasks()` method retrieves all tasks that have been completed by the workers in the swarm. + +**Returns:** +- `List[Dict]`: A list of dictionaries representing finished tasks. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +finished_tasks = swarm.get_finished_tasks() +``` + +### `get_pending_tasks() -> List[Dict]` + +The `get_pending_tasks()` method retrieves all tasks that are pending or yet to be completed by the workers in the swarm. + +**Returns:** +- `List[Dict]`: A list of dictionaries representing pending tasks. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +pending_tasks = swarm.get_pending_tasks() +``` + +### `pause_worker(worker: "AbstractWorker", worker_id: str)` + +The `pause_worker()` method pauses a specific worker, temporarily suspending their activities. + +**Parameters:** +- `worker` (AbstractWorker): The worker to be paused. +- `worker_id` (str): The ID of the worker to be paused. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker = swarm.get_worker_by_name("Worker1") +worker_id = "worker_123" +swarm.pause_worker(worker, worker_id) +``` + +### `resume_worker(worker: "AbstractWorker", worker_id: str)` + +The `resume_worker()` method resumes a paused worker, allowing them to continue their activities. + +**Parameters:** +- `worker` (AbstractWorker): The worker to be resumed. +- `worker_id` (str): The ID of the worker to be resumed. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker = swarm.get_worker_by_name("Worker1") +worker_id = "worker_123" +swarm.resume_worker(worker, worker_id) +``` + +### `stop_worker(worker: "AbstractWorker", worker_id: str)` + +The `stop_worker()` method stops a specific worker, terminating their activities. + +**Parameters:** +- `worker` (AbstractWorker): The worker to be stopped. +- `worker_id` (str): The ID of the worker to be stopped. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker = swarm.get_worker_by_name("Worker1") +worker_id = "worker_123" +swarm.stop_worker(worker, worker_id) +``` + +### `restart_worker(worker: "AbstractWorker")` + +The `restart_worker()` method restarts a worker, resetting them to their initial state. + +**Parameters:** +- `worker` (AbstractWorker): The worker to be restarted. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +worker = swarm.get_worker_by_name("Worker1") +swarm.restart_worker(worker) +``` + +### `scale_up(num_worker: int)` + +The `scale_up()` method increases the number of workers in the swarm. + +**Parameters:** +- `num_worker` (int): The number of workers to add to the swarm. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +swarm.scale_up(5) +``` + +### `scale_down(num_worker: int)` + +The `scale_down()` method decreases the number of workers in the swarm. + +**Parameters:** +- `num_worker` (int): The number of workers to remove from the swarm. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +swarm.scale_down(3) +``` + +### `scale_to(num_worker: int)` + +The `scale_to()` method scales the swarm to a specific number of workers. + +**Parameters:** +- `num_worker` (int): The desired number of workers. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +swarm.scale_to(10) +``` + +### `get + +_all_workers() -> List["AbstractWorker"]` + +The `get_all_workers()` method retrieves a list of all workers in the swarm. + +**Returns:** +- `List[AbstractWorker]`: A list of all workers in the swarm. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +all_workers = swarm.get_all_workers() +``` + +### `get_swarm_size() -> int` + +The `get_swarm_size()` method returns the size of the swarm, which is the total number of workers. + +**Returns:** +- `int`: The size of the swarm. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +swarm_size = swarm.get_swarm_size() +``` + +### `get_swarm_status() -> Dict` + +The `get_swarm_status()` method provides information about the current status of the swarm. + +**Returns:** +- `Dict`: A dictionary containing various status indicators for the swarm. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +swarm_status = swarm.get_swarm_status() +``` + +### `save_swarm_state()` + +The `save_swarm_state()` method allows you to save the current state of the swarm, including worker configurations and task assignments. + +**Usage Example:** + +```python +swarm = YourSwarmClass(workers) +swarm.save_swarm_state() +``` + +--- + +This comprehensive documentation covers the Swarms library, including the `BaseSwarm` class and its methods. You can use this documentation as a guide to understanding and effectively utilizing the Swarms framework for swarm simulation architectures. Feel free to explore further and adapt the library to your specific use cases. \ No newline at end of file diff --git a/docs_edit/swarms/structs/agent.md b/docs_edit/swarms/structs/agent.md new file mode 100644 index 00000000..8408b0b8 --- /dev/null +++ b/docs_edit/swarms/structs/agent.md @@ -0,0 +1,163 @@ +# `Agent` Documentation + +## Overview + +The `Agent` class is a Python module designed to facilitate interactions with a language model, particularly one that operates as an autonomous agent. This class is part of a larger framework aimed at creating conversational agents using advanced language models like GPT-3. It enables you to establish a conversational loop with the model, generate responses, collect feedback, and control the agent of the conversation. + +In this documentation, you will learn how to use the `Agent` class effectively, its purpose, and how it can be integrated into your projects. + +## Purpose + +The `Agent` class serves several key purposes: + +1. **Conversational Loop**: It establishes a conversational loop with a language model. This means it allows you to interact with the model in a back-and-forth manner, taking turns in the conversation. + +2. **Feedback Collection**: The class allows users to provide feedback on the responses generated by the model. This feedback can be valuable for training and improving the model's responses over time. + +3. **Stoppable Conversation**: You can define custom stopping conditions for the conversation, allowing you to stop the interaction based on specific criteria. For example, you can stop the conversation if a certain keyword is detected in the responses. + +4. **Retry Mechanism**: The class includes a retry mechanism that can be helpful if there are issues generating responses from the model. It attempts to generate a response multiple times before raising an error. + +## Class Definition + +The `Agent` class has the following constructor: + +```python +class Agent: + def __init__( + self, + llm: Any, + max_loops: int = 5, + stopping_condition: Optional[Callable[[str], bool]] = None, + loop_interval: int = 1, + retry_attempts: int = 3, + retry_interval: int = 1, + interactive: bool = False, + **kwargs: Any, + ): +``` + +### Parameters + +- `llm` (Any): The language model with which you want to interact. +- `max_loops` (int): The maximum number of conversation loops. Default is 5. +- `stopping_condition` (Optional[Callable[[str], bool]]): A custom stopping condition function. Default is `None`. +- `loop_interval` (int): The time interval (in seconds) between conversation loops. Default is 1 second. +- `retry_attempts` (int): The number of retry attempts if response generation fails. Default is 3. +- `retry_interval` (int): The time interval (in seconds) between retry attempts. Default is 1 second. +- `interactive` (bool): Set to `True` if the conversation is interactive, meaning the user is involved. Default is `False`. + +## Usage + +The `Agent` class can be used to create a conversational loop with the language model. Here's how you can use it: + +```python +from swarms.structs import Agent + +agent = Agent(llm=my_language_model, max_loops=5) + +# Define a starting task or message +initial_task = "Generate a 10,000 word blog on health and wellness." + +# Run the conversation loop +final_response = agent.run(initial_task) +``` + +### Feedback + +You can collect feedback during the conversation using the `provide_feedback` method: + +```python +agent.provide_feedback( + "Generate an SOP for new sales employees on the best cold sales practices" +) +``` + +### Stopping Condition + +You can define a custom stopping condition using a function. For example, you can stop the conversation if the response contains the word "Stop": + +```python +from swarms.structs import Agent + + +def stop_when_repeats(response: str) -> bool: + return "Stop" in response.lower() + + +agent = Agent(llm=my_language_model, max_loops=5, stopping_condition=stop_when_repeats) +``` + +### Retry Mechanism + +If the response generation fails, the class will retry up to the specified number of attempts: + +```python +agent = Agent(llm=my_language_model, max_loops=5, retry_attempts=3) +``` + +## Additional Information + +- To save the conversation history to a file, you can use the `save` method. + +- To load a previously saved conversation history, you can use the `load` method. + +- The class includes methods for bulk running conversations with multiple input sets. + +## Examples + +Here are three usage examples: + +### Example 1: Simple Conversation + +```python +# Select any Language model from the models folder +from swarms.models import Mistral, OpenAIChat +from swarms.structs import Agent + +llm = Mistral() +# llm = OpenAIChat() + +agent = Agent(llm=llm, max_loops=5) + +# Define a starting task or message +initial_task = "Generate an long form analysis on the transformer model architecture." + +# Run the conversation loop +final_response = agent.run(initial_task) +``` + +### Example 2: Custom Stopping Condition + +```python +from swarms.structs import Agent + + +def stop_when_repeats(response: str) -> bool: + return "Stop" in response.lower() + + +agent = Agent(llm=llm, max_loops=5, stopping_condition=stop_when_repeats) +``` + +### Example 3: Interactive Conversation + +```python +from swarms.structs import Agent + +agent = Agent(llm=llm, max_loops=5, interactive=True) + +# Provide initial task +initial_task = "Rank and prioritize the following financial documents and cut out 30% of our expenses" + +# Run the conversation loop +final_response = agent.run(initial_task) +``` + +## References and Resources + +- [GitHub Repository](https://github.com/kyegomez/swarms) + +## Conclusion + +The `Agent` class provides a powerful way to interact with language models in a conversational manner. By defining custom stopping conditions, collecting feedback, and controlling the agent of the conversation, you can create engaging and interactive applications that make use of advanced language models. \ No newline at end of file diff --git a/docs_edit/swarms/structs/agent_rearrange.md b/docs_edit/swarms/structs/agent_rearrange.md new file mode 100644 index 00000000..967b69f7 --- /dev/null +++ b/docs_edit/swarms/structs/agent_rearrange.md @@ -0,0 +1,274 @@ +# Documentation for `AgentRearrange` Class +----- + +The `AgentRearrange` class represents a swarm of agents for rearranging tasks. It allows you to create a swarm of agents, add or remove agents from the swarm, and run the swarm to process tasks based on a specified flow pattern. + +## Attributes +---------- + +| Attribute | Type | Description | +| --- | --- | --- | +| `agents` | `dict` | A dictionary of agents, where the key is the agent's name and the value is the agent object. | +| `flow` | `str` | The flow pattern of the tasks. | +| `max_loops` | `int` | The maximum number of loops for the agents to run. | +| `verbose` | `bool` | Whether to enable verbose logging or not. | + +## Methods +------- + +### `__init__(self, agents: List[Agent] = None, flow: str = None, max_loops: int = 1, verbose: bool = True)` + +Initializes the `AgentRearrange` object. + +| Parameter | Type | Description | +| --- | --- | --- | +| `agents` | `List[Agent]` (optional) | A list of `Agent` objects. Defaults to `None`. | +| `flow` | `str` (optional) | The flow pattern of the tasks. Defaults to `None`. | +| `max_loops` | `int` (optional) | The maximum number of loops for the agents to run. Defaults to `1`. | +| `verbose` | `bool` (optional) | Whether to enable verbose logging or not. Defaults to `True`. | + +### `add_agent(self, agent: Agent)` + +Adds an agent to the swarm. + +| Parameter | Type | Description | +| --- | --- | --- | +| `agent` | `Agent` | The agent to be added. | + +### `remove_agent(self, agent_name: str)` + +Removes an agent from the swarm. + +| Parameter | Type | Description | +| --- | --- | --- | +| `agent_name` | `str` | The name of the agent to be removed. | + +### `add_agents(self, agents: List[Agent])` + +Adds multiple agents to the swarm. + +| Parameter | Type | Description | +| --- | --- | --- | +| `agents` | `List[Agent]` | A list of `Agent` objects. | + +### `validate_flow(self)` + +Validates the flow pattern. + +**Raises:** + +- `ValueError`: If the flow pattern is incorrectly formatted or contains duplicate agent names. + +**Returns:** + +- `bool`: `True` if the flow pattern is valid. + +### `run(self, task: str, *args, **kwargs)` + +Runs the swarm to rearrange the tasks. + +| Parameter | Type | Description | +| --- | --- | --- | +| `task` | `str` | The initial task to be processed. | +| `*args` | - | Additional positional arguments. | +| `**kwargs` | - | Additional keyword arguments. | + +**Returns:** + +- `str`: The final processed task. + +## Documentation for `rearrange` Function +====================================== + +The `rearrange` function is a helper function that rearranges the given list of agents based on the specified flow. + +## Parameters +---------- + +| Parameter | Type | Description | +| --- | --- | --- | +| `agents` | `List[Agent]` | The list of agents to be rearranged. | +| `flow` | `str` | The flow used for rearranging the agents. | +| `task` | `str` (optional) | The task to be performed during rearrangement. Defaults to `None`. | +| `*args` | - | Additional positional arguments. | +| `**kwargs` | - | Additional keyword arguments. | + +## Returns +------- + +The result of running the agent system with the specified task. + +### Example +------- + +```python +agents = [agent1, agent2, agent3] +flow = "agent1 -> agent2, agent3" +task = "Perform a task" +rearrange(agents, flow, task) +``` + +### Example Usage +------------- + +Here's an example of how to use the `AgentRearrange` class and the `rearrange` function: + +```python +from swarms import Agent, AgentRearrange, rearrange +from typing import List + +# Initialize the director agent +director = Agent( + agent_name="Director", + system_prompt="Directs the tasks for the workers", + llm=Anthropic(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="director.json", +) + +# Initialize worker 1 +worker1 = Agent( + agent_name="Worker1", + system_prompt="Generates a transcript for a youtube video on what swarms are", + llm=Anthropic(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="worker1.json", +) + +# Initialize worker 2 +worker2 = Agent( + agent_name="Worker2", + system_prompt="Summarizes the transcript generated by Worker1", + llm=Anthropic(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="worker2.json", +) + +# Create a list of agents +agents = [director, worker1, worker2] + +# Define the flow pattern +flow = "Director -> Worker1 -> Worker2" + +# Using AgentRearrange class +agent_system = AgentRearrange(agents=agents, flow=flow) +output = agent_system.run("Create a format to express and communicate swarms of llms in a structured manner for youtube") +print(output) + +# Using rearrange function +output = rearrange(agents, flow, "Create a format to express and communicate swarms of llms in a structured manner for youtube") +print(output) + +``` + +In this example, we first initialize three agents: `director`, `worker1`, and `worker2`. Then, we create a list of these agents and define the flow pattern `"Director -> Worker1 -> Worker2"`. + +We can use the `AgentRearrange` class by creating an instance of it with the list of agents and the flow pattern. We then call the `run` method with the initial task, and it will execute the agents in the specified order, passing the output of one agent as the input to the next agent. + +Alternatively, we can use the `rearrange` function by passing the list of agents, the flow pattern, and the initial task as arguments. + +Both the `AgentRearrange` class and the `rearrange` function will return the final output after processing the task through the agents according to the specified flow pattern. + +## Error Handling +-------------- + +The `AgentRearrange` class includes error handling mechanisms to validate the flow pattern. If the flow pattern is incorrectly formatted or contains duplicate agent names, a `ValueError` will be raised with an appropriate error message. + +### Example: + +```python +# Invalid flow pattern +invalid_flow = "Director->Worker1,Worker2->Worker3" +agent_system = AgentRearrange(agents=agents, flow=invalid_flow) +output = agent_system.run("Some task")` +``` + +This will raise a `ValueError` with the message `"Agent 'Worker3' is not registered."`. + + +## Parallel and Sequential Processing +---------------------------------- + +The `AgentRearrange` class supports both parallel and sequential processing of tasks based on the specified flow pattern. If the flow pattern includes multiple agents separated by commas (e.g., `"agent1, agent2"`), the agents will be executed in parallel, and their outputs will be concatenated with a semicolon (`;`). If the flow pattern includes a single agent, it will be executed sequentially. + + +### Parallel processing +`parallel_flow = "Worker1, Worker2 -> Director"` + +### Sequential processing +`sequential_flow = "Worker1 -> Worker2 -> Director"` + +In the `parallel_flow` example, `Worker1` and `Worker2` will be executed in parallel, and their outputs will be concatenated and passed to `Director`. In the `sequential_flow` example, `Worker1` will be executed first, and its output will be passed to `Worker2`, and then the output of `Worker2` will be passed to `Director`. + +## Logging +------- + +The `AgentRearrange` class includes logging capabilities using the `loguru` library. If `verbose` is set to `True` during initialization, a log file named `agent_rearrange.log` will be created, and log messages will be written to it. You can use this log file to track the execution of the agents and any potential issues or errors that may occur. + + +```bash +2023-05-08 10:30:15.456 | INFO | agent_rearrange:__init__:34 - Adding agent Director to the swarm. +2023-05-08 10:30:15.457 | INFO | agent_rearrange:__init__:34 - Adding agent Worker1 to the swarm. +2023-05-08 10:30:15.457 | INFO | agent_rearrange:__init__:34 - Adding agent Worker2 to the swarm. +2023-05-08 10:30:15.458 | INFO | agent_rearrange:run:118 - Running agents in parallel: ['Worker1', 'Worker2'] +2023-05-08 10:30:15.459 | INFO | agent_rearrange:run:121 - Running agents sequentially: ['Director']` +``` + +## Additional Parameters +--------------------- + +The `AgentRearrange` class also accepts additional parameters that can be passed to the `run` method using `*args` and `**kwargs`. These parameters will be forwarded to the individual agents during execution. + +`agent_system = AgentRearrange(agents=agents, flow=flow)` +`output = agent_system.run("Some task", max_tokens=200, temperature=0.7)` + +In this example, the `max_tokens` and `temperature` parameters will be passed to each agent during execution. + +## Customization +------------- + +The `AgentRearrange` class and the `rearrange` function can be customized and extended to suit specific use cases. For example, you can create custom agents by inheriting from the `Agent` class and implementing custom logic for task processing. You can then add these custom agents to the swarm and define the flow pattern accordingly. + +Additionally, you can modify the `run` method of the `AgentRearrange` class to implement custom logic for task processing and agent interaction. + + +## Limitations +----------- + +It's important to note that the `AgentRearrange` class and the `rearrange` function rely on the individual agents to process tasks correctly. The quality of the output will depend on the capabilities and configurations of the agents used in the swarm. Additionally, the `AgentRearrange` class does not provide any mechanisms for task prioritization or load balancing among the agents. + +## Future Improvements +------------------- + +Here are some potential future improvements for the `AgentRearrange` class and the `rearrange` function: + +- **Task Prioritization**: Implement a mechanism to prioritize tasks based on factors such as urgency, importance, or resource availability. +- **Load Balancing**: Incorporate load balancing algorithms to distribute tasks among agents more efficiently, taking into account factors such as agent availability, performance, and resource utilization. +- **Dynamic Flow Reconfiguration**: Allow for dynamic reconfiguration of the flow pattern during runtime, enabling the addition, removal, or reordering of agents based on specific conditions or events. +- **Error Handling and Fault Tolerance**: Enhance error handling and fault tolerance mechanisms to gracefully handle agent failures, task timeouts, or other exceptional situations. +- **Monitoring and Metrics**: Implement monitoring and metrics collection to track the performance and efficiency of the swarm, as well as individual agent performance. +- **Scalability**: Enhance the scalability of the system to handle larger numbers of agents and tasks efficiently. + +## Conclusion +---------- + +The `AgentRearrange` class and the `rearrange` function provide a flexible and extensible framework for orchestrating swarms of agents to process tasks based on a specified flow pattern. By combining the capabilities of individual agents, you can create complex workflows and leverage the strengths of different agents to tackle various tasks efficiently. + +While the current implementation offers basic functionality for agent rearrangement, there is room for future improvements and customizations to enhance the system's capabilities and cater to more specific use cases. + +Whether you're working on natural language processing tasks, data analysis, or any other domain where agent-based systems can be beneficial, the `AgentRearrange` class and the `rearrange` function provide a solid foundation for building and experimenting with swarm-based solutions. \ No newline at end of file diff --git a/docs_edit/swarms/structs/artifact.md b/docs_edit/swarms/structs/artifact.md new file mode 100644 index 00000000..9e00f083 --- /dev/null +++ b/docs_edit/swarms/structs/artifact.md @@ -0,0 +1,103 @@ +# swarms.structs Documentation + +## Introduction + +The swarms.structs library provides a collection of classes for representing artifacts and their attributes. This documentation will provide an overview of the `Artifact` class, its attributes, functionality, and usage examples. + +### Artifact Class + +The `Artifact` class represents an artifact and its attributes. It inherits from the `BaseModel` class and includes the following attributes: + +#### Attributes + +1. `artifact_id (str)`: Id of the artifact. +2. `file_name (str)`: Filename of the artifact. +3. `relative_path (str, optional)`: Relative path of the artifact in the agent's workspace. + +These attributes are crucial for identifying and managing different artifacts within a given context. + +## Class Definition + +The `Artifact` class can be defined as follows: + +```python +class Artifact(BaseModel): + """ + Represents an artifact. + + Attributes: + artifact_id (str): Id of the artifact. + file_name (str): Filename of the artifact. + relative_path (str, optional): Relative path of the artifact in the agent's workspace. + """ + + artifact_id: str = Field( + ..., + description="Id of the artifact", + example="b225e278-8b4c-4f99-a696-8facf19f0e56", + ) + file_name: str = Field( + ..., description="Filename of the artifact", example="main.py" + ) + relative_path: Optional[str] = Field( + None, + description=("Relative path of the artifact in the agent's workspace"), + example="python/code/", + ) +``` + +The `Artifact` class defines the mandatory and optional attributes and provides corresponding descriptions along with example values. + +## Functionality and Usage + +The `Artifact` class encapsulates the information and attributes representing an artifact. It provides a structured and organized way to manage artifacts within a given context. + +### Example 1: Creating an Artifact instance + +To create an instance of the `Artifact` class, you can simply initialize it with the required attributes. Here's an example: + +```python +from swarms.structs import Artifact + +artifact_instance = Artifact( + artifact_id="b225e278-8b4c-4f99-a696-8facf19f0e56", + file_name="main.py", + relative_path="python/code/", +) +``` + +In this example, we create an instance of the `Artifact` class with the specified artifact details. + +### Example 2: Accessing Artifact attributes + +You can access the attributes of the `Artifact` instance using dot notation. Here's how you can access the file name of the artifact: + +```python +print(artifact_instance.file_name) +# Output: "main.py" +``` + +### Example 3: Handling optional attributes + +If the `relative_path` attribute is not provided during artifact creation, it will default to `None`. Here's an example: + +```python +artifact_instance_no_path = Artifact( + artifact_id="c280s347-9b7d-3c68-m337-7abvf50j23k", file_name="script.js" +) + +print(artifact_instance_no_path.relative_path) +# Output: None +``` + +By providing default values for optional attributes, the `Artifact` class allows flexibility in defining artifact instances. + +### Additional Information and Tips + +The `Artifact` class represents a powerful and flexible means of handling various artifacts with different attributes. By utilizing this class, users can organize, manage, and streamline their artifacts with ease. + +## References and Resources + +For further details and references related to the swarms.structs library and the `Artifact` class, refer to the [official documentation](https://swarms.structs.docs/artifact.html). + +This comprehensive documentation provides an in-depth understanding of the `Artifact` class, its attributes, functionality, and usage examples. By following the detailed examples and explanations, developers can effectively leverage the capabilities of the `Artifact` class within their projects. diff --git a/docs_edit/swarms/structs/artifactupload.md b/docs_edit/swarms/structs/artifactupload.md new file mode 100644 index 00000000..90b30f58 --- /dev/null +++ b/docs_edit/swarms/structs/artifactupload.md @@ -0,0 +1,49 @@ +# swarms.structs + +## Overview + +Swarms is a library that provides tools for managing a distributed system of agents working together to achieve a common goal. The structs module within Swarms provides a set of data structures and classes that are used to represent artifacts, tasks, and other entities within the system. The `ArtifactUpload` class is one such data structure that represents the process of uploading an artifact to an agent's workspace. + +## ArtifactUpload + +The `ArtifactUpload` class inherits from the `BaseModel` class. It has two attributes: `file` and `relative_path`. The `file` attribute represents the bytes of the file to be uploaded, while the `relative_path` attribute represents the relative path of the artifact in the agent's workspace. + +### Class Definition + +```python +class ArtifactUpload(BaseModel): + file: bytes = Field(..., description="File to upload") + relative_path: Optional[str] = Field( + None, + description=("Relative path of the artifact in the agent's workspace"), + example="python/code/", + ) +``` + +The `ArtifactUpload` class requires the `file` attribute to be passed as an argument. It is of type `bytes` and represents the file to be uploaded. The `relative_path` attribute is optional and is of type `str`. It represents the relative path of the artifact in the agent's workspace. If not provided, it defaults to `None`. + +### Functionality and Usage + +The `ArtifactUpload` class is used to create an instance of an artifact upload. It can be instantiated with or without a `relative_path`. Here is an example of how the class can be used: + +```python +from swarms.structs import ArtifactUpload + +# Uploading a file with no relative path +upload_no_path = ArtifactUpload(file=b"example_file_contents") + +# Uploading a file with a relative path +upload_with_path = ArtifactUpload( + file=b"example_file_contents", relative_path="python/code/" +) +``` + +In the above example, `upload_no_path` is an instance of `ArtifactUpload` with no specified `relative_path`, whereas `upload_with_path` is an instance of `ArtifactUpload` with the `relative_path` set to "python/code/". + +### Additional Information + +When passing the `file` and `relative_path` parameters to the `ArtifactUpload` class, ensure that the `file` parameter is provided exactly as the file that needs to be uploaded, represented as a `bytes` object. If a `relative_path` is provided, ensure that it is a valid path within the agent's workspace. + +# Conclusion + +The `ArtifactUpload` class is an essential data structure within the Swarms library that represents the process of uploading an artifact to an agent's workspace. By using this class, users can easily manage and represent artifact uploads within the Swarms distributed system. diff --git a/docs_edit/swarms/structs/autoscaler.md b/docs_edit/swarms/structs/autoscaler.md new file mode 100644 index 00000000..6d07d3b1 --- /dev/null +++ b/docs_edit/swarms/structs/autoscaler.md @@ -0,0 +1,178 @@ +### Enterprise Grade Documentation + +--- + +## AutoScaler Class from `swarms` Package + +The `AutoScaler` class, part of the `swarms` package, provides a dynamic mechanism to handle agents depending on the workload. This document outlines how to use it, complete with import statements and examples. + +--- + +### Importing the AutoScaler Class + +Before you can use the `AutoScaler` class, you must import it from the `swarms` package: + +```python +from swarms import AutoScaler +``` + +--- + +### Constructor: `AutoScaler.__init__()` + +**Description**: +Initializes the `AutoScaler` with a predefined number of agents and sets up configurations for scaling. + +**Parameters**: +- `initial_agents (int)`: Initial number of agents. Default is 10. +- `scale_up_factor (int)`: Multiplicative factor to scale up the number of agents. Default is 2. +- `idle_threshold (float)`: Threshold below which agents are considered idle. Expressed as a ratio (0-1). Default is 0.2. +- `busy_threshold (float)`: Threshold above which agents are considered busy. Expressed as a ratio (0-1). Default is 0.7. + +**Returns**: +- None + +**Example Usage**: +```python +from swarms import AutoScaler + +scaler = AutoScaler( + initial_agents=5, scale_up_factor=3, idle_threshold=0.1, busy_threshold=0.8 +) +``` + +--- + +### Method: `AutoScaler.add_task(task)` + +**Description**: +Enqueues the specified task into the task queue. + +**Parameters**: +- `task`: The task to be added to the queue. + +**Returns**: +- None + +**Example Usage**: +```python +task_data = "Process dataset X" +scaler.add_task(task_data) +``` + +--- + +### Method: `AutoScaler.scale_up()` + +**Description**: +Scales up the number of agents based on the specified scale-up factor. + +**Parameters**: +- None + +**Returns**: +- None + +**Example Usage**: +```python +# Called internally but can be manually invoked if necessary +scaler.scale_up() +``` + +--- + +### Method: `AutoScaler.scale_down()` + +**Description**: +Scales down the number of agents, ensuring a minimum is always present. + +**Parameters**: +- None + +**Returns**: +- None + +**Example Usage**: +```python +# Called internally but can be manually invoked if necessary +scaler.scale_down() +``` + +--- + +### Method: `AutoScaler.monitor_and_scale()` + +**Description**: +Continuously monitors the task queue and agent utilization to decide on scaling. + +**Parameters**: +- None + +**Returns**: +- None + +**Example Usage**: +```python +# This method is internally used as a thread and does not require manual invocation in most scenarios. +``` + +--- + +### Method: `AutoScaler.start()` + +**Description**: +Initiates the monitoring process and starts processing tasks from the queue. + +**Parameters**: +- None + +**Returns**: +- None + +**Example Usage**: +```python +scaler.start() +``` + +--- + +### Full Usage + +```python +from swarms import AutoScaler + +# Initialize the scaler +auto_scaler = AutoScaler( + initial_agents=15, scale_up_factor=2, idle_threshold=0.2, busy_threshold=0.7 +) + +# Start the monitoring and task processing +auto_scaler.start() + +# Simulate the addition of tasks +for i in range(100): + auto_scaler.add_task(f"Task {i}") +``` + +### Pass in Custom Agent +You can pass any agent class that adheres to the required interface (like having a run() method). If no class is passed, it defaults to using AutoBot. This makes the AutoScaler more flexible and able to handle a wider range of agent implementations. + +```python +from swarms import AutoScaler + +auto_scaler = AutoScaler(agent=YourCustomAgent) +auto_scaler.start() + +for i in range(100): # Adding tasks + auto_scaler.add_task(f"Task {i}") +``` + + +--- + +**Notes**: +1. Adjust the thresholds and scaling factors as per your specific requirements and nature of the tasks. +2. The provided implementation is a baseline. Depending on your production environment, you may need additional features, error-handling, and optimizations. +3. Ensure that the `swarms` package and its dependencies are installed in your environment. + +--- diff --git a/docs_edit/swarms/structs/basestructure.md b/docs_edit/swarms/structs/basestructure.md new file mode 100644 index 00000000..8a5dab04 --- /dev/null +++ b/docs_edit/swarms/structs/basestructure.md @@ -0,0 +1,137 @@ +# Module/Function Name: BaseStructure + +## Introduction: + +The `BaseStructure` module contains the basic structure and attributes required for running machine learning models and associated metadata, error logging, artifact saving/loading, and relevant event logging. + +The module provides the flexibility to save and load the model metadata, log errors, save artifacts, and maintain a log for multiple events associated with multiple threads and batched operations. The key attributes of the module include **name**, **description**, **save_metadata_path**, and **save_error_path**. + +## Class Definition: + +### Arguments: +| Argument | Type | Description | +|----------------------|--------|----------------------------------------------------------------------| +| name | str | (Optional) The name of the structure. | +| description | str | (Optional) A description of the structure. | +| save_metadata | bool | A boolean flag to enable or disable metadata saving. | +| save_artifact_path | str | (Optional) The path to save artifacts. | +| save_metadata_path | str | (Optional) The path to save metadata. | +| save_error_path | str | (Optional) The path to save errors. | + +## Methods: + +### 1. run +Runs the structure. + +### 2. save_to_file +Saves data to a file. +* **data**: Value to be saved. +* **file_path**: Path where the data is to be saved. + +### 3. load_from_file +Loads data from a file. +* **file_path**: Path from where the data is to be loaded. + +### 4. save_metadata +Saves metadata to a file. +* **metadata**: Data to be saved as metadata. + +### 5. load_metadata +Loads metadata from a file. + +### 6. log_error +Logs error to a file. + +### 7. save_artifact +Saves artifact to a file. +* **artifact**: The artifact to be saved. +* **artifact_name**: Name of the artifact. + +### 8. load_artifact +Loads artifact from a file. +* **artifact_name**: Name of the artifact. + +### 9. log_event +Logs an event to a file. +* **event**: The event to be logged. +* **event_type**: Type of the event (optional, defaults to "INFO"). + +### 10. run_async +Runs the structure asynchronously. + +### 11. save_metadata_async +Saves metadata to a file asynchronously. + +### 12. load_metadata_async +Loads metadata from a file asynchronously. + +### 13. log_error_async +Logs error to a file asynchronously. + +### 14. save_artifact_async +Saves artifact to a file asynchronously. + +### 15. load_artifact_async +Loads artifact from a file asynchronously. + +### 16. log_event_async +Logs an event to a file asynchronously. + +### 17. asave_to_file +Saves data to a file asynchronously. + +### 18. aload_from_file +Loads data from a file asynchronously. + +### 19. run_concurrent +Runs the structure concurrently. + +### 20. compress_data +Compresses data. + +### 21. decompres_data +Decompresses data. + +### 22. run_batched +Runs batched data. + +## Examples: + +### Example 1: Saving Metadata +```python +base_structure = BaseStructure(name="ExampleStructure") +metadata = {"key1": "value1", "key2": "value2"} +base_structure.save_metadata(metadata) +``` + +### Example 2: Loading Artifact +```python +artifact_name = "example_artifact" +artifact_data = base_structure.load_artifact(artifact_name) +``` + +### Example 3: Running Concurrently +```python +concurrent_data = [data1, data2, data3] +results = base_structure.run_concurrent(batched_data=concurrent_data) +``` + +## Note: + +The `BaseStructure` class is designed to provide a modular and extensible structure for managing metadata, logs, errors, and batched operations while running machine learning models. The class's methods offer asynchronous and concurrent execution capabilities, thus optimizing the performance of the associated applications and models. The module's attributes and methods cater to a wide range of use cases, making it an essential foundational component for machine learning and data-based applications. + +# Conclusion: + +The `BaseStructure` module offers a robust and flexible foundation for managing machine learning model metadata, error logs, and event tracking, including asynchronous, concurrent, and batched operations. By leveraging the inherent capabilities of this class, developers can enhance the reliability, scalability, and performance of machine learning-based applications. + +## References: + +- [Python Concurrent Programming with `asyncio`](https://docs.python.org/3/library/asyncio.html) +- [Understanding Thread Pool Executor in Python](https://docs.python.org/3/library/concurrent.futures.html#executor-objects) +- [Documentation on `gzip` Module for Data Compression](https://docs.python.org/3/library/gzip.html) + +--- + +The above documentation provides detailed information about the `BaseStructure` module, including its functionality, attributes, methods, usage examples, and references to relevant resources for further exploration. This comprehensive documentation aims to deepen the users' understanding of the module's purpose and how it can be effectively utilized in practice. + +Please let me know if you need further elaboration on any specific aspect or functionality of the `BaseStructure` module. diff --git a/docs_edit/swarms/structs/baseworkflow.md b/docs_edit/swarms/structs/baseworkflow.md new file mode 100644 index 00000000..2cb4b5eb --- /dev/null +++ b/docs_edit/swarms/structs/baseworkflow.md @@ -0,0 +1,42 @@ +### swarms.modules.structs + + `Class Name: BaseWorkflow` + +Base class for workflows. + +`Attributes` +- Task_pool (list): A list to store tasks. + +`Methods` +- Add(task: Task = None, tasks: List[Task] = None, *args, **kwargs): Adds a task or a list of tasks to the task pool. +- Run(): Abstract method to run the workflow. + +Source Code: +```python +class BaseWorkflow(BaseStructure): +""" +Base class for workflows. + + Attributes: + task_pool (list): A list to store tasks. + + Methods: + add(task: Task = None, tasks: List[Task] = None, *args, **kwargs): + Adds a task or a list of tasks to the task pool. + run(): + Abstract method to run the workflow. +""" +``` + +For the usage examples and additional in-depth documentation please visit [BaseWorkflow](https://github.com/swarms-modules/structs/blob/main/baseworkflow.md#swarms-structs) + +Explanation: + +Initially, the `BaseWorkflow` class is a class designed to handle workflows. It contains a list within the task pool to handle various tasks and run methods. In the current structure, there are a few in-built methods such as `add`, `run`, `__sequential_loop`, `__log`, `reset`, `get_task_results`, `remove_task`, `update_task`, `delete_task`, `save_workflow_state`, `add_objective_to_workflow`, and `load_workflow_state`, each serving a unique purpose. + +The `add` method functions to add tasks or a list of tasks to the task pool while the `run` method is left as an abstract method for initializing the workflow. Considering the need to run the workflow, `__sequential_loop` is another abstract method. In cases where the user desires to log messages, `__log` can be utilized. For resetting the workflow, there is a `reset` method, complemented by `get_task_results` that returns the results of each task in the workflow. To remove a task from the workflow, `remove_task` can be employed. + +In cases where an update is required for the tasks in the workflow, `update_task` comes in handy. Deleting a task from the workflow can be achieved using the `delete_task` method. The method saves the workflow’s state to a JSON file, and the user can fix the path where the file resides. For adding objectives to the workflow, `add_objective_to_workflow` can be employed, and there is an abstract method of `load_workflow_state` for loading the workflow state from a JSON file providing the freedom to revert the workflow to a specific state. + +The class also has a method `__str__` and `__repr__` to represent the text and instantiate an object of the class, respectively. The object can be reset, task results obtained, tasks removed, tasks updated, tasks deleted, or workflow state saved. The structure provides detailed methods for altering the workflow at every level. + diff --git a/docs_edit/swarms/structs/concurrentworkflow.md b/docs_edit/swarms/structs/concurrentworkflow.md new file mode 100644 index 00000000..9b60392c --- /dev/null +++ b/docs_edit/swarms/structs/concurrentworkflow.md @@ -0,0 +1,77 @@ +``` + # Module/Function Name: ConcurrentWorkflow + + class swarms.structs.ConcurrentWorkflow(max_workers, autosave, saved_state_filepath): + """ + ConcurrentWorkflow class for running a set of tasks concurrently using N autonomous agents. + + Args: + - max_workers (int): The maximum number of workers to use for concurrent execution. + - autosave (bool): Whether to autosave the workflow state. + - saved_state_filepath (Optional[str]): The file path to save the workflow state. + + """ + + def add(self, task, tasks=None): + """Adds a task to the workflow. + + Args: + - task (Task): Task to add to the workflow. + - tasks (List[Task]): List of tasks to add to the workflow (optional). + + """ + try: + # Implementation of the function goes here + except Exception as error: + print(f"[ERROR][ConcurrentWorkflow] {error}") + raise error + + def run(self, print_results=False, return_results=False): + """ + Executes the tasks in parallel using a ThreadPoolExecutor. + + Args: + - print_results (bool): Whether to print the results of each task. Default is False. + - return_results (bool): Whether to return the results of each task. Default is False. + + Returns: + - (List[Any]): A list of the results of each task, if return_results is True. Otherwise, returns None. + + """ + try: + # Implementation of the function goes here + except Exception as e: + print(f"Task {task} generated an exception: {e}") + + return results if self.return_results else None + + def _execute_task(self, task): + """Executes a task. + + Args: + - task (Task): Task to execute. + + Returns: + - result: The result of executing the task. + + """ + try: + # Implementation of the function goes here + except Exception as error: + print(f"[ERROR][ConcurrentWorkflow] {error}") + raise error + + # Usage example: + + from swarms.models import OpenAIChat + from swarms.structs import ConcurrentWorkflow + + llm = OpenAIChat(openai_api_key="") + workflow = ConcurrentWorkflow(max_workers=5) + workflow.add("What's the weather in miami", llm) + workflow.add("Create a report on these metrics", llm) + workflow.run() + workflow.tasks + + """ + ``` diff --git a/docs_edit/swarms/structs/conversation.md b/docs_edit/swarms/structs/conversation.md new file mode 100644 index 00000000..be9ceffa --- /dev/null +++ b/docs_edit/swarms/structs/conversation.md @@ -0,0 +1,265 @@ +# Module/Class Name: Conversation + +## Introduction + +The `Conversation` class is a powerful tool for managing and structuring conversation data in a Python program. It enables you to create, manipulate, and analyze conversations easily. This documentation will provide you with a comprehensive understanding of the `Conversation` class, its attributes, methods, and how to effectively use it. + +## Table of Contents + +1. **Class Definition** + - Overview + - Attributes + +2. **Methods** + - `__init__(self, time_enabled: bool = False, *args, **kwargs)` + - `add(self, role: str, content: str, *args, **kwargs)` + - `delete(self, index: str)` + - `update(self, index: str, role, content)` + - `query(self, index: str)` + - `search(self, keyword: str)` + - `display_conversation(self, detailed: bool = False)` + - `export_conversation(self, filename: str)` + - `import_conversation(self, filename: str)` + - `count_messages_by_role(self)` + - `return_history_as_string(self)` + - `save_as_json(self, filename: str)` + - `load_from_json(self, filename: str)` + - `search_keyword_in_conversation(self, keyword: str)` + - `pretty_print_conversation(self, messages)` + +--- + +### 1. Class Definition + +#### Overview + +The `Conversation` class is designed to manage conversations by keeping track of messages and their attributes. It offers methods for adding, deleting, updating, querying, and displaying messages within the conversation. Additionally, it supports exporting and importing conversations, searching for specific keywords, and more. + +#### Attributes + +- `time_enabled (bool)`: A flag indicating whether to enable timestamp recording for messages. +- `conversation_history (list)`: A list that stores messages in the conversation. + +### 2. Methods + +#### `__init__(self, time_enabled: bool = False, *args, **kwargs)` + +- **Description**: Initializes a new Conversation object. +- **Parameters**: + - `time_enabled (bool)`: If `True`, timestamps will be recorded for each message. Default is `False`. + +#### `add(self, role: str, content: str, *args, **kwargs)` + +- **Description**: Adds a message to the conversation history. +- **Parameters**: + - `role (str)`: The role of the speaker (e.g., "user," "assistant"). + - `content (str)`: The content of the message. + +#### `delete(self, index: str)` + +- **Description**: Deletes a message from the conversation history. +- **Parameters**: + - `index (str)`: The index of the message to delete. + +#### `update(self, index: str, role, content)` + +- **Description**: Updates a message in the conversation history. +- **Parameters**: + - `index (str)`: The index of the message to update. + - `role (_type_)`: The new role of the speaker. + - `content (_type_)`: The new content of the message. + +#### `query(self, index: str)` + +- **Description**: Retrieves a message from the conversation history. +- **Parameters**: + - `index (str)`: The index of the message to query. +- **Returns**: The message as a string. + +#### `search(self, keyword: str)` + +- **Description**: Searches for messages containing a specific keyword in the conversation history. +- **Parameters**: + - `keyword (str)`: The keyword to search for. +- **Returns**: A list of messages that contain the keyword. + +#### `display_conversation(self, detailed: bool = False)` + +- **Description**: Displays the conversation history. +- **Parameters**: + - `detailed (bool, optional)`: If `True`, provides detailed information about each message. Default is `False`. + +#### `export_conversation(self, filename: str)` + +- **Description**: Exports the conversation history to a text file. +- **Parameters**: + - `filename (str)`: The name of the file to export to. + +#### `import_conversation(self, filename: str)` + +- **Description**: Imports a conversation history from a text file. +- **Parameters**: + - `filename (str)`: The name of the file to import from. + +#### `count_messages_by_role(self)` + +- **Description**: Counts the number of messages by role in the conversation. +- **Returns**: A dictionary containing the count of messages for each role. + +#### `return_history_as_string(self)` + +- **Description**: Returns the entire conversation history as a single string. +- **Returns**: The conversation history as a string. + +#### `save_as_json(self, filename: str)` + +- **Description**: Saves the conversation history as a JSON file. +- **Parameters**: + - `filename (str)`: The name of the JSON file to save. + +#### `load_from_json(self, filename: str)` + +- **Description**: Loads a conversation history from a JSON file. +- **Parameters**: + - `filename (str)`: The name of the JSON file to load. + +#### `search_keyword_in_conversation(self, keyword: str)` + +- **Description**: Searches for a keyword in the conversation history and returns matching messages. +- **Parameters**: + - `keyword (str)`: The keyword to search for. +- **Returns**: A list of messages containing the keyword. + +#### `pretty_print_conversation(self, messages)` + +- **Description**: Pretty prints a list of messages with colored role indicators. +- **Parameters**: + - `messages (list)`: A list of messages to print. + +## Examples + +Here are some usage examples of the `Conversation` class: + +### Creating a Conversation + +```python +from swarms.structs import Conversation + +conv = Conversation() +``` + +### Adding Messages + +```python +conv.add("user", "Hello, world!") +conv.add("assistant", "Hello, user!") +``` + +### Displaying the Conversation + +```python +conv.display_conversation() +``` + +### Searching for Messages + +```python +result = conv.search("Hello") +``` + +### Exporting and Importing Conversations + +```python +conv.export_conversation("conversation.txt") +conv.import_conversation("conversation.txt") +``` + +### Counting Messages by Role + +```python +counts = conv.count_messages_by_role() +``` + +### Loading and Saving as JSON + +```python +conv.save_as_json("conversation.json") +conv.load_from_json("conversation.json") +``` + +Certainly! Let's continue with more examples and additional information about the `Conversation` class. + +### Querying a Specific Message + +You can retrieve a specific message from the conversation by its index: + +```python +message = conv.query(0) # Retrieves the first message +``` + +### Updating a Message + +You can update a message's content or role within the conversation: + +```python +conv.update(0, "user", "Hi there!") # Updates the first message +``` + +### Deleting a Message + +If you want to remove a message from the conversation, you can use the `delete` method: + +```python +conv.delete(0) # Deletes the first message +``` + +### Counting Messages by Role + +You can count the number of messages by role in the conversation: + +```python +counts = conv.count_messages_by_role() +# Example result: {'user': 2, 'assistant': 2} +``` + +### Exporting and Importing as Text + +You can export the conversation to a text file and later import it: + +```python +conv.export_conversation("conversation.txt") # Export +conv.import_conversation("conversation.txt") # Import +``` + +### Exporting and Importing as JSON + +Conversations can also be saved and loaded as JSON files: + +```python +conv.save_as_json("conversation.json") # Save as JSON +conv.load_from_json("conversation.json") # Load from JSON +``` + +### Searching for a Keyword + +You can search for messages containing a specific keyword within the conversation: + +```python +results = conv.search_keyword_in_conversation("Hello") +``` + +### Pretty Printing + +The `pretty_print_conversation` method provides a visually appealing way to display messages with colored role indicators: + +```python +conv.pretty_print_conversation(conv.conversation_history) +``` + +These examples demonstrate the versatility of the `Conversation` class in managing and interacting with conversation data. Whether you're building a chatbot, conducting analysis, or simply organizing dialogues, this class offers a robust set of tools to help you accomplish your goals. + +## Conclusion + +The `Conversation` class is a valuable utility for handling conversation data in Python. With its ability to add, update, delete, search, export, and import messages, you have the flexibility to work with conversations in various ways. Feel free to explore its features and adapt them to your specific projects and applications. + +If you have any further questions or need additional assistance, please don't hesitate to ask! \ No newline at end of file diff --git a/docs_edit/swarms/structs/diy_your_own_agent.md b/docs_edit/swarms/structs/diy_your_own_agent.md new file mode 100644 index 00000000..d75c1667 --- /dev/null +++ b/docs_edit/swarms/structs/diy_your_own_agent.md @@ -0,0 +1,349 @@ +# Create your own agent with `Agent` class + +In the rapidly evolving world of artificial intelligence (AI), the demand for specialized and highly customized agents is on the rise. Whether it's for task automation, decision support systems, or intelligent virtual assistants, the ability to create tailored agents can unlock new possibilities and efficiencies across various domains. Enter the Agent class, a powerful and flexible tool designed by Anthropic that empowers AI agents to build their own custom agents, tailored to their specific needs. + +This comprehensive guide will explore the process of inheriting from the Agent class, enabling agents to create their own custom agent classes. By leveraging the rich features and extensibility of the Agent class, agents can imbue their offspring agents with unique capabilities, specialized toolsets, and tailored decision-making processes. + +## Understanding the Agent Class + +Before we dive into the intricacies of creating custom agent classes, let's revisit the foundational elements of the Agent class itself. The Agent class is a versatile and feature-rich class designed to streamline the process of building and managing AI agents. It acts as a backbone, connecting language models (LLMs) with various tools, long-term memory, and a wide range of customization options. + +### Key Features of the Agent Class + +The Agent class offers a plethora of features that can be inherited and extended by custom agent classes. Here are some of the key features that make the Agent class a powerful foundation: + +1\. **Language Model Integration**: The Agent class supports seamless integration with popular language models such as LangChain, HuggingFace Transformers, and Autogen, allowing custom agent classes to leverage the power of state-of-the-art language models. + +2\. **Tool Integration**: One of the standout features of the Agent class is its ability to integrate with various tools. Custom agent classes can inherit this capability and incorporate specialized tools tailored to their specific use cases. + +3\. **Long-Term Memory**: The Agent class provides built-in support for long-term memory, enabling custom agent classes to retain and access information from previous interactions, essential for maintaining context and learning from past experiences. + +4\. **Customizable Prompts and Standard Operating Procedures (SOPs)**: The Agent class allows you to define custom prompts and Standard Operating Procedures (SOPs) that guide an agent's behavior and decision-making process. Custom agent classes can inherit and extend these prompts and SOPs to align with their unique objectives and requirements. + +5\. **Interactive and Dashboard Modes**: The Agent class supports interactive and dashboard modes, enabling real-time monitoring and interaction with agents. Custom agent classes can inherit these modes, facilitating efficient development, debugging, and user interaction. + +6\. **Autosave and State Management**: With the Agent class, agents can easily save and load their state, including configuration, memory, and history. Custom agent classes can inherit this capability, ensuring seamless task continuation and enabling efficient collaboration among team members. + +7\. **Response Filtering**: The Agent class provides built-in response filtering capabilities, allowing agents to filter out or replace specific words or phrases in their responses. Custom agent classes can inherit and extend this feature to ensure compliance with content moderation policies or specific guidelines. + +8\. **Code Execution and Multimodal Support**: The Agent class supports code execution and multimodal input/output, enabling agents to process and generate code, as well as handle various data formats such as images, audio, and video. Custom agent classes can inherit and specialize these capabilities for their unique use cases. + +9\. **Extensibility and Customization**: The Agent class is designed to be highly extensible and customizable, allowing agents to tailor its behavior, add custom functionality, and integrate with external libraries and APIs. Custom agent classes can leverage this extensibility to introduce specialized features and capabilities. + +### Creating a Custom Agent Class + +Now that we have a solid understanding of the Agent class and its features, let's dive into the process of creating a custom agent class by inheriting from the Agent class. Throughout this process, we'll explore how agents can leverage and extend the existing functionality, while introducing specialized features and capabilities tailored to their unique requirements. + +#### Step 1: Inherit from the Agent Class + +The first step in creating a custom agent class is to inherit from the Agent class. This will provide your custom agent class with the foundational features and capabilities of the Agent class, which can then be extended and customized as needed. + +```python + +from swarms import Agent + +class MyCustomAgent(Agent): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Add custom initialization logic here + +``` + +In the example above, we define a new class `MyCustomAgent` that inherits from the `Agent` class. Within the `__init__` method, we call the parent class's `__init__` method using `super().__init__(*args, **kwargs)`, which ensures that the parent class's initialization logic is executed. You can then add any custom initialization logic specific to your custom agent class. + +#### Step 2: Customize the Agent's Behavior + +One of the key advantages of inheriting from the Agent class is the ability to customize the agent's behavior according to your specific requirements. This can be achieved by overriding or extending the existing methods, or by introducing new methods altogether. + +```python +from swarms import Agent + + +class MyCustomAgent(Agent): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom initialization logic + +    def custom_method(self, *args, **kwargs): + +        # Implement custom logic here + +        pass + +    def run(self, task, *args, **kwargs): + +        # Customize the run method + +        response = super().run(task, *args, **kwargs) + +        # Additional custom logic + +        return response + +``` + +In the example above, we introduce a new `custom_method` that can encapsulate any specialized logic or functionality specific to your custom agent class. Additionally, we override the `run` method, which is responsible for executing the agent's main task loop. Within the overridden `run` method, you can call the parent class's `run` method using `super().run(task, *args, **kwargs)` and then introduce any additional custom logic before or after the parent method's execution. + +#### Step 3: Integrate Custom Tools + +One of the powerful features of the Agent class is the ability to integrate with various tools. Custom agent classes can inherit this capability and incorporate specialized tools tailored to their unique use cases. + +```python + +from swarms.tools import BaseTool +from swarms import Agent + + +class CustomTool(BaseTool): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom tool initialization logic + +    def run(self, *args, **kwargs): + +        # Custom tool logic + +        return result + +class MyCustomAgent(Agent): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom initialization logic + +        self.tools = [CustomTool()] + +    def run(self, task, *args, **kwargs): + +        # Customize the run method + +        response = super().run(task, *args, **kwargs) + +        # Utilize custom tools + +        for tool in self.tools: + +            result = tool.run(*args, **kwargs) + +            # Process tool result + +        return response + +``` + +In the example above, we define a new `CustomTool` class that inherits from the `BaseTool` class provided by the Agent class framework. Within the `CustomTool` class, you can implement the specialized logic and functionality required by your custom tool. + +Next, within the `MyCustomAgent` class, we initialize an instance of the `CustomTool` and store it in the `self.tools` list. This list can then be utilized within the overridden `run` method, where you can execute each tool and process its results as needed. + +#### Step 4: Extend Memory Management + +The Agent class provides built-in support for long-term memory, allowing agents to retain and access information from previous interactions. Custom agent classes can inherit and extend this capability by introducing specialized memory management techniques. + +```python + +from swarms.memory import BaseVectorDatabase +from swarms import Agent + + +class CustomMemory(BaseVectorDatabase): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom memory initialization logic + +    def query(self, *args, **kwargs): + +        # Custom memory query logic + +        return result + +class MyCustomAgent(Agent): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom initialization logic + +        self.long_term_memory = CustomMemory() + +    def run(self, task, *args, **kwargs): + +        # Customize the run method + +        response = super().run(task, *args, **kwargs) + +        # Utilize custom memory + +        memory_result = self.long_term_memory.query(*args, **kwargs) + +        # Process memory result + +        return response + +``` + +In the example above, we define a new `CustomMemory` class that inherits from the `BaseVectorDatabase` class provided by the Agent class framework. Within the `CustomMemory` class, you can implement specialized memory management logic, such as custom indexing, retrieval, and storage mechanisms. + +Next, within the `MyCustomAgent` class, we initialize an instance of the `CustomMemory` class and assign it to the `self.long_term_memory` attribute. This custom memory instance can then be utilized within the overridden `run` method, where you can query the memory and process the results as needed. + +Step 5: Introduce Custom Prompts and Standard Operating Procedures (SOPs) + +The Agent class allows you to define custom prompts and Standard Operating Procedures (SOPs) that guide an agent's behavior and decision-making process. Custom agent classes can inherit and extend these prompts and SOPs to align with their unique objectives and requirements. + +```python +from swarms import Agent + + +class MyCustomAgent(Agent): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom initialization logic + +        self.custom_sop = "Custom SOP for MyCustomAgent..." + +        self.custom_prompt = "Custom prompt for MyCustomAgent..." + +    def run(self, task, *args, **kwargs): + +        # Customize the run method + +        response = super().run(task, *args, **kwargs) + +        # Utilize custom prompts and SOPs + +        custom_prompt = self.construct_dynamic_prompt(self.custom_prompt) + +        custom_sop = self.construct_dynamic_sop(self.custom_sop) + +        # Process custom prompts and SOPs + +        return response + +    def construct_dynamic_prompt(self, prompt): + +        # Custom prompt construction logic + +        return prompt + +    def construct_dynamic_sop(self, sop): + +        # Custom SOP construction logic + +        return sop + +``` + +In the example above, we define two new attributes within the `MyCustomAgent` class: `custom_sop` and `custom_prompt`. These attributes can be used to store custom prompts and SOPs specific to your custom agent class. + +Within the overridden `run` method, you can utilize these custom prompts and SOPs by calling the `construct_dynamic_prompt` and `construct_dynamic_sop` methods, which can be defined within the `MyCustomAgent` class to implement specialized prompt and SOP construction logic. + +#### Step 6: Introduce Custom Response Handling + +The Agent class provides built-in response filtering capabilities, allowing agents to filter out or replace specific words or phrases in their responses. Custom agent classes can inherit and extend this feature to ensure compliance with content moderation policies or specific guidelines. + +```python +from swarms import Agent + + +class MyCustomAgent(Agent): + +    def __init__(self, *args, **kwargs): + +        super().__init__(*args, **kwargs) + +        # Custom initialization logic + +        self.response_filters = ["filter_word_1", "filter_word_2"] + +    def run(self, task, *args, **kwargs): + +        # Customize the run method + +        response = super().run(task, *args, **kwargs) + +        # Apply custom response filtering + +        filtered_response = self.apply_response_filters(response) + +        return filtered_response + +    def apply_response_filters(self, response): + +        # Custom response filtering logic + +        for word in self.response_filters: + +            response = response.replace(word, "[FILTERED]") + +        return response + +``` + +In the example above, we define a new attribute `response_filters` within the `MyCustomAgent` class, which is a list of words or phrases that should be filtered out or replaced in the agent's responses. + +Within the overridden `run` method, we call the `apply_response_filters` method, which can be defined within the `MyCustomAgent` class to implement specialized response filtering logic. In the example, we iterate over the `response_filters` list and replace each filtered word or phrase with a placeholder string (`"[FILTERED]"`). + +### Advanced Customization and Integration + +The Agent class and its inherited custom agent classes can be further extended and customized to suit specific requirements and integrate with external libraries, APIs, and services. Here are some advanced customization and integration examples: + +1\. **Multimodal Input/Output Integration**: Custom agent classes can leverage the multimodal input/output capabilities of the Agent class and introduce specialized handling for various data formats such as images, audio, and video. + +2\. **Code Execution and Integration**: The Agent class supports code execution, enabling agents to run and evaluate code snippets. Custom agent classes can inherit and extend this capability, introducing specialized code execution environments, sandboxing mechanisms, or integration with external code repositories or platforms. + +3\. **External API and Service Integration**: Custom agent classes can integrate with external APIs and services, enabling agents to leverage specialized data sources, computational resources, or domain-specific services. + +4\. **Performance Optimization**: Depending on the use case and requirements, custom agent classes can introduce performance optimizations, such as adjusting loop intervals, retry attempts, or enabling parallel execution for certain tasks. + +5\. **Logging and Monitoring**: Custom agent classes can introduce specialized logging and monitoring mechanisms, enabling agents to track their performance, identify potential issues, and generate detailed reports or dashboards. + +6\. **Security and Privacy Enhancements**: Custom agent classes can implement security and privacy enhancements, such as data encryption, access control mechanisms, or compliance with industry-specific regulations and standards. + +7\. **Distributed Execution and Scaling**: Custom agent classes can be designed to support distributed execution and scaling, enabling agents to leverage cloud computing resources or distributed computing frameworks for handling large-scale tasks or high-concurrency workloads. + +By leveraging these advanced customization and integration capabilities, agents can create highly specialized and sophisticated custom agent classes tailored to their unique requirements and use cases. + +### Best Practices and Considerations + +While building custom agent classes by inheriting from the Agent class offers immense flexibility and power, it's essential to follow best practices and consider potential challenges and considerations: + +1\. **Maintainability and Documentation**: As custom agent classes become more complex, it's crucial to prioritize maintainability and thorough documentation. Clear and concise code, comprehensive comments, and up-to-date documentation can significantly improve the long-term sustainability and collaboration efforts surrounding custom agent classes. + +2\. **Testing and Validation**: Custom agent classes should undergo rigorous testing and validation to ensure their correctness, reliability, and adherence to expected behaviors. Establish a robust testing framework and continuously validate the agent's performance, particularly after introducing new features or integrations. + +3\. **Security and Privacy Considerations**: When building custom agent classes, it's essential to consider security and privacy implications, especially if the agents will handle sensitive data or interact with critical systems. Implement appropriate security measures, such as access controls, data encryption, and secure communication protocols, to protect against potential vulnerabilities and ensure compliance with relevant regulations and standards. + +4\. **Scalability and Performance Monitoring**: As custom agent classes are deployed and adopted, it's important to monitor their scalability and performance characteristics. Identify potential bottlenecks, resource constraints, or performance degradation, and implement appropriate optimization strategies or scaling mechanisms to ensure efficient and reliable operation. + +5\. **Collaboration and Knowledge Sharing**: Building custom agent classes often involves collaboration among teams and stakeholders. Foster an environment of knowledge sharing, code reviews, and open communication to ensure that everyone involved understands the agent's capabilities, limitations, and intended use cases. + +6\. **Ethical Considerations**: As AI agents become more advanced and autonomous, it's crucial to consider the ethical implications of their actions and decisions. Implement appropriate safeguards, oversight mechanisms, and ethical guidelines to ensure that custom agent classes operate in a responsible and transparent manner, aligning with ethical principles and societal values. + +7\. **Continuous Learning and Adaptation**: The field of AI is rapidly evolving, with new techniques, tools, and best practices emerging regularly. Stay up-to-date with the latest developments and be prepared to adapt and refine your custom agent classes as new advancements become available. + +By following these best practices and considering potential challenges, agents can create robust, reliable, and ethical custom agent classes that meet their specific requirements while adhering to industry standards and best practices. + +# Conclusion + +In this comprehensive guide, we have explored the process of creating custom agent classes by inheriting from the powerful Agent class. We have covered the key features of the Agent class, walked through the step-by-step process of inheriting and extending its functionality, and discussed advanced customization and integration techniques. + +Building custom agent classes empowers AI agents to create tailored and specialized agents capable of tackling unique challenges and addressing specific domain requirements. By leveraging the rich features and extensibility of the Agent class, agents can imbue their offspring agents with unique capabilities, specialized toolsets, and tailored decision-making processes. + +Remember, the journey of building custom agent classes is an iterative and collaborative process that requires continuous learning, adaptation, and refinement. Embrace the \ No newline at end of file diff --git a/docs_edit/swarms/structs/groupchat.md b/docs_edit/swarms/structs/groupchat.md new file mode 100644 index 00000000..cb2cb944 --- /dev/null +++ b/docs_edit/swarms/structs/groupchat.md @@ -0,0 +1,147 @@ +# Module Name: Group Chat + +The `GroupChat` class is used to create a group chat containing a list of agents. This class is used in scenarios such as role-play games or collaborative simulations, where multiple agents must interact with each other. It provides functionalities to select the next speaker, format chat history, reset the chat, and access details of the agents. + +## Class Definition + +The `GroupChat` class is defined as follows: + +```python +@dataclass +class GroupChat: + """ + A group chat class that contains a list of agents and the maximum number of rounds. + + Args: + agents: List[Agent] + messages: List[Dict] + max_round: int + admin_name: str + + Usage: + >>> from swarms import GroupChat + >>> from swarms.structs.agent import Agent + >>> agents = Agent() + """ + + agents: List[Agent] + messages: List[Dict] + max_round: int = 10 + admin_name: str = "Admin" # the name of the admin agent +``` + +## Arguments + +The `GroupChat` class takes the following arguments: +| Argument | Type | Description | Default Value | +|-------------|---------------|---------------------------------------------------|-----------------| +| agents | List[Agent] | List of agents participating in the group chat. | | +| messages | List[Dict] | List of messages exchanged in the group chat. | | +| max_round | int | Maximum number of rounds for the group chat. | 10 | +| admin_name | str | Name of the admin agent. | "Admin" | + +## Methods + +1. **agent_names** + - Returns the names of the agents in the group chat. + - Returns: List of strings. + +2. **reset** + - Resets the group chat, clears all the messages. + +3. **agent_by_name** + - Finds an agent in the group chat by their name. + - Arguments: name (str) - Name of the agent to search for. + - Returns: Agent - The agent with the matching name. + - Raises: ValueError if no matching agent is found. + +4. **next_agent** + - Returns the next agent in the list based on the order of agents. + - Arguments: agent (Agent) - The current agent. + - Returns: Agent - The next agent in the list. + +5. **select_speaker_msg** + - Returns the message for selecting the next speaker. + +6. **select_speaker** + - Selects the next speaker based on the system message and history of conversations. + - Arguments: last_speaker (Agent) - The speaker in the last round, selector (Agent) - The agent responsible for selecting the next speaker. + - Returns: Agent - The agent selected as the next speaker. + +7. **_participant_roles** + - Formats and returns a string containing the roles of the participants. + - (Internal method, not intended for direct usage) + +8. **format_history** + - Formats the history of messages exchanged in the group chat. + - Arguments: messages (List[Dict]) - List of messages. + - Returns: str - Formatted history of messages. + +## Additional Information + +- For operations involving roles and conversations, the system messages and agent names are used. +- The `select_speaker` method warns when the number of agents is less than 3, indicating that direct communication might be more efficient. + +## Usage Example 1 + +```Python +from swarms import GroupChat +from swarms.structs.agent import Agent + +agents = [Agent(name="Alice"), Agent(name="Bob"), Agent(name="Charlie")] +group_chat = GroupChat(agents, [], max_round=5) + +print(group_chat.agent_names) # Output: ["Alice", "Bob", "Charlie"] + +selector = agents[1] +next_speaker = group_chat.select_speaker(last_speaker=agents[0], selector=selector) +print(next_speaker.name) # Output: "Bob" +``` + +## Usage Example 2 + +```Python +from swarms import GroupChat +from swarms.structs.agent import Agent + +agents = [Agent(name="X"), Agent(name="Y")] +group_chat = GroupChat(agents, [], max_round=10) + +group_chat.messages.append({"role": "X", "content": "Hello Y!"}) +group_chat.messages.append({"role": "Y", "content": "Hi X!"}) + +formatted_history = group_chat.format_history(group_chat.messages) +print(formatted_history) +""" +Output: +'X: Hello Y! +Y: Hi X!' +""" + +agent_charlie = Agent(name="Charlie") +group_chat.agents.append(agent_charlie) + +print(group_chat.agent_names) # Output: ["X", "Y", "Charlie"] +``` + +## Usage Example 3 + +```Python +from swarms import GroupChat +from swarms.structs.agent import Agent + +agents = [Agent(name="A1"), Agent(name="A2"), Agent(name="A3")] +group_chat = GroupChat(agents, [], max_round=3, admin_name="A1") + +group_chat.reset() +print(group_chat.messages) # Output: [] +``` + +## References + +1. [Swarms Documentation](https://docs.swarms.org/) +2. [Role-Based Conversations in Multi-Agent Systems](https://arxiv.org/abs/2010.01539) + +This detailed documentation has provided a comprehensive understanding of the `GroupChat` class in the `swarms.structs` module of the `swarms` library. It includes class definition, method descriptions, argument types, and usage examples. + +*(Sample Documentation - 950 words)* diff --git a/docs_edit/swarms/structs/groupchatmanager.md b/docs_edit/swarms/structs/groupchatmanager.md new file mode 100644 index 00000000..cb2ce035 --- /dev/null +++ b/docs_edit/swarms/structs/groupchatmanager.md @@ -0,0 +1,90 @@ +# GroupChatManager +Documentation: + +The `GroupChatManager` class is designed for managing group chat interactions between agents. It allows you to create and manage group chats among multiple agents. The `GroupChatManager` requires two main arguments - the `groupchat` of type `GroupChat` which indicates the actual group chat object and `selector` of type `Agent` which specifies the agent who is the selector or the initiator of the chat. + +This class provides a variety of features and functions such as maintaining and appending messages, managing the communication rounds, interacting between different agents and extracting replies. + +Args: + +| Parameter | Type | Description | +|-----------|--------------|--------------------------------------------------| +| groupchat | `GroupChat` | The group chat object where the conversation occurs. | +| selector | `Agent` | The agent who is the selector or the initiator of the chat. | +Usage: + +```python +from swarms import GroupChatManager +from swarms.structs.agent import Agent + +# Create an instance of Agent +agents = Agent() + +# Initialize GroupChatManager with an existing GroupChat instance and an agent +manager = GroupChatManager(groupchat, selector) + +# Call the group chat manager passing a specific chat task +result = manager("Discuss the agenda for the upcoming meeting") +``` + +Explanation: + +1. First, you import the `GroupChatManager` class and the `Agent` class from the `swarms` library. + +2. Then, you create an instance of the `Agent`. + +3. After that, you initialize the `GroupChatManager` with an existing `GroupChat` instance and an agent. + +4. Finally, you call the group chat manager, passing a specific chat task and receive the response. + +Source Code: + +```python +class GroupChatManager: + """ + GroupChatManager + + Args: + groupchat: GroupChat + selector: Agent + + Usage: + >>> from swarms import GroupChatManager + >>> from swarms.structs.agent import Agent + >>> agents = Agent() + """ + + def __init__(self, groupchat: GroupChat, selector: Agent): + self.groupchat = groupchat + self.selector = selector + + def __call__(self, task: str): + """Call 'GroupChatManager' instance as a function. + + Args: + task (str): The task to be performed during the group chat. + + Returns: + str: The response from the group chat. + """ + self.groupchat.messages.append({"role": self.selector.name, "content": task}) + for i in range(self.groupchat.max_round): + speaker = self.groupchat.select_speaker( + last_speaker=self.selector, selector=self.selector + ) + reply = speaker.generate_reply( + self.groupchat.format_history(self.groupchat.messages) + ) + self.groupchat.messages.append(reply) + print(reply) + if i == self.groupchat.max_round - 1: + break + + return reply +``` + +The `GroupChatManager` class has an `__init__` method which takes `groupchat` and `selector` as arguments to initialize the class properties. It also has a `__call__` method to perform the group chat task and provide the appropriate response. + +In the `__call__` method, it appends the message with the speaker’s role and their content. It then iterates over the communication rounds, selects speakers, generates replies and appends messages to the group chat. Finally, it returns the response. + +The above example demonstrates how to use the `GroupChatManager` class to manage group chat interactions. You can further customize this class based on specific requirements and extend its functionality as needed. diff --git a/docs_edit/swarms/structs/index.md b/docs_edit/swarms/structs/index.md new file mode 100644 index 00000000..b4ab01c3 --- /dev/null +++ b/docs_edit/swarms/structs/index.md @@ -0,0 +1,363 @@ +# Enterprise-Grade and Production Ready Agents + +Swarms is an enterprise grade and production ready multi-agent collaboration framework that enables you to orchestrate many agents to work collaboratively at scale to automate real-world activities. + +| **Feature** | **Description** | **Performance Impact** | **Documentation Link** | +|------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|------------------------|-------------------------------| +| Models | Pre-trained models that can be utilized for various tasks within the swarm framework. | ⭐⭐⭐ | [Documentation](https://docs.swarms.world/en/latest/swarms/models/) | +| Models APIs | APIs to interact with and utilize the models effectively, providing interfaces for inference, training, and fine-tuning. | ⭐⭐⭐ | [Documentation](https://docs.swarms.world/en/latest/swarms/models/) | +| Agents with Tools | Agents equipped with specialized tools to perform specific tasks more efficiently, such as data processing, analysis, or interaction with external systems. | ⭐⭐⭐⭐ | [Documentation](https://medium.com/@kyeg/the-swarms-tool-system-functions-pydantic-basemodels-as-tools-and-radical-customization-c2a2e227b8ca) | +| Agents with Memory | Mechanisms for agents to store and recall past interactions, improving learning and adaptability over time. | ⭐⭐⭐⭐ | [Documentation](https://github.com/kyegomez/swarms/blob/master/playground/structs/agent/agent_with_longterm_memory.py) | +| Multi-Agent Orchestration | Coordination of multiple agents to work together seamlessly on complex tasks, leveraging their individual strengths to achieve higher overall performance. | ⭐⭐⭐⭐⭐ | [Documentation]() | + +The performance impact is rated on a scale from one to five stars, with multi-agent orchestration being the highest due to its ability to combine the strengths of multiple agents and optimize task execution. + +---- + +## Install 💻 +`$ pip3 install -U swarms` + +--- + +# Usage Examples 🤖 + +### Google Collab Example +Run example in Collab: +Open In Colab + + +--- + +## `Agents` +A fully plug-and-play autonomous agent powered by an LLM extended by a long-term memory database, and equipped with function calling for tool usage! By passing in an LLM, you can create a fully autonomous agent with extreme customization and reliability, ready for real-world task automation! + +Features: + +✅ Any LLM / Any framework + +✅ Extremely customize-able with max loops, autosaving, import docs (PDFS, TXT, CSVs, etc), tool usage, etc etc + +✅ Long term memory database with RAG (ChromaDB, Pinecone, Qdrant) + +```python +import os + +from dotenv import load_dotenv + +# Import the OpenAIChat model and the Agent struct +from swarms import Agent, OpenAIChat + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") + +# Initialize the language model +llm = OpenAIChat( + temperature=0.5, model_name="gpt-4", openai_api_key=api_key, max_tokens=4000 +) + + +## Initialize the workflow +agent = Agent(llm=llm, max_loops=1, autosave=True, dashboard=True) + +# Run the workflow on a task +agent.run("Generate a 10,000 word blog on health and wellness.") +``` + + +### `Agent` + Long Term Memory +`Agent` equipped with quasi-infinite long term memory. Great for long document understanding, analysis, and retrieval. + +```python +from swarms import Agent, OpenAIChat +from playground.memory.chromadb_example import ChromaDB # Copy and paste the code and put it in your own local directory. + +# Making an instance of the ChromaDB class +memory = ChromaDB( + metric="cosine", + n_results=3, + output_dir="results", + docs_folder="docs", +) + +# Initializing the agent with the Gemini instance and other parameters +agent = Agent( + agent_name="Covid-19-Chat", + agent_description=( + "This agent provides information about COVID-19 symptoms." + ), + llm=OpenAIChat(), + max_loops="auto", + autosave=True, + verbose=True, + long_term_memory=memory, + stopping_condition="finish", +) + +# Defining the task and image path +task = ("What are the symptoms of COVID-19?",) + +# Running the agent with the specified task and image +out = agent.run(task) +print(out) + +``` + + +### `Agent` ++ Long Term Memory ++ Tools! +An LLM equipped with long term memory and tools, a full stack agent capable of automating all and any digital tasks given a good prompt. + +```python +from swarms import Agent, ChromaDB, OpenAIChat + +# Making an instance of the ChromaDB class +memory = ChromaDB( + metric="cosine", + n_results=3, + output_dir="results", + docs_folder="docs", +) + +# Initialize a tool +def search_api(query: str): + # Add your logic here + return query + +# Initializing the agent with the Gemini instance and other parameters +agent = Agent( + agent_name="Covid-19-Chat", + agent_description=( + "This agent provides information about COVID-19 symptoms." + ), + llm=OpenAIChat(), + max_loops="auto", + autosave=True, + verbose=True, + long_term_memory=memory, + stopping_condition="finish", + tools=[search_api], +) + +# Defining the task and image path +task = ("What are the symptoms of COVID-19?",) + +# Running the agent with the specified task and image +out = agent.run(task) +print(out) + +``` + + +### Devin +Implementation of Devin in less than 90 lines of code with several tools: +terminal, browser, and edit files. + +```python +from swarms import Agent, Anthropic +import subprocess + +# Model +llm = Anthropic( + temperature=0.1, +) + +# Tools +def terminal( + code: str, +): + """ + Run code in the terminal. + + Args: + code (str): The code to run in the terminal. + + Returns: + str: The output of the code. + """ + out = subprocess.run( + code, shell=True, capture_output=True, text=True + ).stdout + return str(out) + +def browser(query: str): + """ + Search the query in the browser with the `browser` tool. + + Args: + query (str): The query to search in the browser. + + Returns: + str: The search results. + """ + import webbrowser + + url = f"https://www.google.com/search?q={query}" + webbrowser.open(url) + return f"Searching for {query} in the browser." + +def create_file(file_path: str, content: str): + """ + Create a file using the file editor tool. + + Args: + file_path (str): The path to the file. + content (str): The content to write to the file. + + Returns: + str: The result of the file creation operation. + """ + with open(file_path, "w") as file: + file.write(content) + return f"File {file_path} created successfully." + +def file_editor(file_path: str, mode: str, content: str): + """ + Edit a file using the file editor tool. + + Args: + file_path (str): The path to the file. + mode (str): The mode to open the file in. + content (str): The content to write to the file. + + Returns: + str: The result of the file editing operation. + """ + with open(file_path, mode) as file: + file.write(content) + return f"File {file_path} edited successfully." + + +# Agent +agent = Agent( + agent_name="Devin", + system_prompt=( + "Autonomous agent that can interact with humans and other" + " agents. Be Helpful and Kind. Use the tools provided to" + " assist the user. Return all code in markdown format." + ), + llm=llm, + max_loops="auto", + autosave=True, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + interactive=True, + tools=[terminal, browser, file_editor, create_file], + code_interpreter=True, + # streaming=True, +) + +# Run the agent +out = agent("Create a new file for a plan to take over the world.") +print(out) +``` + + +### `Agent`with Pydantic BaseModel as Output Type +The following is an example of an agent that intakes a pydantic basemodel and outputs it at the same time: + +```python +from pydantic import BaseModel, Field +from swarms import Anthropic, Agent + + +# Initialize the schema for the person's information +class Schema(BaseModel): + name: str = Field(..., title="Name of the person") + agent: int = Field(..., title="Age of the person") + is_student: bool = Field(..., title="Whether the person is a student") + courses: list[str] = Field( + ..., title="List of courses the person is taking" + ) + + +# Convert the schema to a JSON string +tool_schema = Schema( + name="Tool Name", + agent=1, + is_student=True, + courses=["Course1", "Course2"], +) + +# Define the task to generate a person's information +task = "Generate a person's information based on the following schema:" + +# Initialize the agent +agent = Agent( + agent_name="Person Information Generator", + system_prompt=( + "Generate a person's information based on the following schema:" + ), + # Set the tool schema to the JSON string -- this is the key difference + tool_schema=tool_schema, + llm=Anthropic(), + max_loops=3, + autosave=True, + dashboard=False, + streaming_on=True, + verbose=True, + interactive=True, + # Set the output type to the tool schema which is a BaseModel + output_type=tool_schema, # or dict, or str + metadata_output_type="json", + # List of schemas that the agent can handle + list_tool_schemas=[tool_schema], + function_calling_format_type="OpenAI", + function_calling_type="json", # or soon yaml +) + +# Run the agent to generate the person's information +generated_data = agent.run(task) + +# Print the generated data +print(f"Generated data: {generated_data}") + + +``` + +### Multi Modal Autonomous Agent +Run the agent with multiple modalities useful for various real-world tasks in manufacturing, logistics, and health. + +```python +# Description: This is an example of how to use the Agent class to run a multi-modal workflow +import os + +from dotenv import load_dotenv + +from swarms.models.gpt4_vision_api import GPT4VisionAPI +from swarms.structs import Agent + +# Load the environment variables +load_dotenv() + +# Get the API key from the environment +api_key = os.environ.get("OPENAI_API_KEY") + +# Initialize the language model +llm = GPT4VisionAPI( + openai_api_key=api_key, + max_tokens=500, +) + +# Initialize the task +task = ( + "Analyze this image of an assembly line and identify any issues such as" + " misaligned parts, defects, or deviations from the standard assembly" + " process. IF there is anything unsafe in the image, explain why it is" + " unsafe and how it could be improved." +) +img = "assembly_line.jpg" + +## Initialize the workflow +agent = Agent( + llm=llm, max_loops="auto", autosave=True, dashboard=True, multi_modal=True +) + +# Run the workflow on a task +agent.run(task=task, img=img) +``` +---- + diff --git a/docs_edit/swarms/structs/majorityvoting.md b/docs_edit/swarms/structs/majorityvoting.md new file mode 100644 index 00000000..4c7f7612 --- /dev/null +++ b/docs_edit/swarms/structs/majorityvoting.md @@ -0,0 +1,111 @@ +# `MajorityVoting` Documentation + +## Overview + +The `swarms.structs` library provides a flexible architecture for creating and managing swarms of agents capable of performing tasks and making decisions based on majority voting. This documentation will guide you through the `MajorityVoting` class, explaining its purpose, architecture, and usage with examples. + +## Table of Contents + +- [Introduction](#introduction) +- [Installation](#installation) +- [The `MajorityVoting` Class](#the-majorityvoting-class) + - [Class Definition](#class-definition) + - [Parameters](#parameters) + - [Methods](#methods) + - [`__init__`](#__init__) + - [`run`](#run) +- [Usage Examples](#usage-examples) + - [Basic Usage](#basic-usage) + - [Concurrent Execution](#concurrent-execution) + - [Asynchronous Execution](#asynchronous-execution) +- [Advanced Features](#advanced-features) +- [Troubleshooting and FAQ](#troubleshooting-and-faq) +- [Conclusion](#conclusion) +- [References](#references) + +## Introduction + +The `swarms.structs` library introduces a mode of distributed computation through "agents" that collaborate to determine the outcome of tasks using a majority voting system. It becomes crucial in scenarios where collective decision-making is preferred over individual agent accuracy. + +## Installation + +To install the `swarms.structs` library, run the following command: + +```bash +pip install swarms-structs +``` + +## The `MajorityVoting` Class + +The `MajorityVoting` class is a high-level abstraction used to coordinate a group of agents that perform tasks and return results. These results are then aggregated to form a majority vote, determining the final output. + +### Class Definition + +### Parameters + +| Parameter | Type | Default | Description | +|-----------------|------------|----------|----------------------------------------------------------------------| +| agents | List[Agent]| Required | A list of agent instances to participate in the voting process. | +| concurrent | bool | False | Enables concurrent execution using threading if set to `True`. | +| multithreaded | bool | False | Enables execution using multiple threads if set to `True`. | +| multiprocess | bool | False | Enables execution using multiple processes if set to `True`. | +| asynchronous | bool | False | Enables asynchronous execution if set to `True`. | +| output_parser | callable | None | A function to parse the output from the majority voting function. | +| autosave | bool | False | Enables automatic saving of the process state if set to `True`. (currently not used in source code) | +| verbose | bool | False | Enables verbose logging if set to `True`. | + +### Methods + +#### `__init__` + +The constructor for the `MajorityVoting` class. Initializes a new majority voting system with the given configuration. + +*This method doesn't return any value.* + +#### `run` + +Executes the given task by all participating agents and aggregates the results through majority voting. + +| Parameter | Type | Description | +|-----------|-----------|----------------------------------| +| task | str | The task to be performed. | +| *args | list | Additional positional arguments. | +| **kwargs | dict | Additional keyword arguments. | + +*Returns:* List[Any] - The result based on the majority vote. + +## Usage Examples + +### Basic Usage + +```python +from swarms.structs.agent import Agent +from swarms.structs.majority_voting import MajorityVoting + + +def create_agent(name): + return Agent(name) + + +agents = [create_agent(name) for name in ["GPT-3", "Codex", "Tabnine"]] +majority_voting = MajorityVoting(agents) +result = majority_voting.run("What is the capital of France?") +print(result) # Output: Paris +``` + +### Concurrent Execution + +```python +majority_voting = MajorityVoting(agents, concurrent=True) +result = majority_voting.run("What is the largest continent?") +print(result) # Example Output: Asia +``` + +### Asynchronous Execution + +```python +majority_voting = MajorityVoting(agents, asynchronous=True) +result = majority_voting.run("What is the square root of 16?") +print(result) # Output: 4 +``` + diff --git a/docs_edit/swarms/structs/moa.md b/docs_edit/swarms/structs/moa.md new file mode 100644 index 00000000..2fe489c7 --- /dev/null +++ b/docs_edit/swarms/structs/moa.md @@ -0,0 +1,379 @@ +# MixtureOfAgents Class Documentation + +## Overview + +The `MixtureOfAgents` class represents a mixture of agents operating within a swarm. The workflow of the swarm follows a parallel → sequential → parallel → final output agent process. This implementation is inspired by concepts discussed in the paper: [https://arxiv.org/pdf/2406.04692](https://arxiv.org/pdf/2406.04692). + +The class is designed to manage a collection of agents, orchestrate their execution in layers, and handle the final aggregation of their outputs through a designated final agent. This architecture facilitates complex, multi-step processing where intermediate results are refined through successive layers of agent interactions. + +## Class Definition + +### MixtureOfAgents + +```python +class MixtureOfAgents(BaseSwarm): +``` + +### Attributes + +| Attribute | Type | Description | Default | +|------------------|--------------|-------------------------------------------------------------------------------------|---------------------------------| +| `agents` | `List[Agent]`| The list of agents in the swarm. | `None` | +| `flow` | `str` | The flow of the swarm. | `parallel -> sequential -> parallel -> final output agent` | +| `max_loops` | `int` | The maximum number of loops to run. | `1` | +| `verbose` | `bool` | Flag indicating whether to print verbose output. | `True` | +| `layers` | `int` | The number of layers in the swarm. | `3` | +| `rules` | `str` | The rules for the swarm. | `None` | +| `final_agent` | `Agent` | The agent to handle the final output processing. | `None` | +| `auto_save` | `bool` | Flag indicating whether to auto-save the metadata to a file. | `False` | +| `saved_file_name`| `str` | The name of the file where the metadata will be saved. | `"moe_swarm.json"` | + +## Methods + +### `__init__` + +#### Parameters + +| Parameter | Type | Description | Default | +|------------------|--------------|-----------------------------------------------------------------------------------------------|----------------------------------------| +| `name` | `str` | The name of the swarm. | `"MixtureOfAgents"` | +| `description` | `str` | A brief description of the swarm. | `"A swarm of agents that run in parallel and sequentially."` | +| `agents` | `List[Agent]`| The list of agents in the swarm. | `None` | +| `max_loops` | `int` | The maximum number of loops to run. | `1` | +| `verbose` | `bool` | Flag indicating whether to print verbose output. | `True` | +| `layers` | `int` | The number of layers in the swarm. | `3` | +| `rules` | `str` | The rules for the swarm. | `None` | +| `final_agent` | `Agent` | The agent to handle the final output processing. | `None` | +| `auto_save` | `bool` | Flag indicating whether to auto-save the metadata to a file. | `False` | +| `saved_file_name`| `str` | The name of the file where the metadata will be saved. | `"moe_swarm.json"` | + +### `agent_check` + +```python +def agent_check(self): +``` + +#### Description + +Checks if the provided `agents` attribute is a list of `Agent` instances. Raises a `TypeError` if the validation fails. + +#### Example Usage + +```python +moe_swarm = MixtureOfAgents(agents=[agent1, agent2]) +moe_swarm.agent_check() # Validates the agents +``` + +### `final_agent_check` + +```python +def final_agent_check(self): +``` + +#### Description + +Checks if the provided `final_agent` attribute is an instance of `Agent`. Raises a `TypeError` if the validation fails. + +#### Example Usage + +```python +moe_swarm = MixtureOfAgents(final_agent=final_agent) +moe_swarm.final_agent_check() # Validates the final agent +``` + +### `swarm_initialization` + +```python +def swarm_initialization(self): +``` + +#### Description + +Initializes the swarm by logging the swarm name, description, and the number of agents. + +#### Example Usage + +```python +moe_swarm = MixtureOfAgents(agents=[agent1, agent2]) +moe_swarm.swarm_initialization() # Initializes the swarm +``` + +### `run` + +```python +def run(self, task: str = None, *args, **kwargs): +``` + +#### Parameters + +| Parameter | Type | Description | Default | +|-----------|--------|---------------------------------|---------| +| `task` | `str` | The task to be performed by the swarm. | `None` | +| `*args` | `tuple`| Additional arguments. | `None` | +| `**kwargs`| `dict` | Additional keyword arguments. | `None` | + +#### Returns + +| Type | Description | +|-------|---------------------------------------------| +| `str` | The conversation history as a string. | + +#### Description + +Runs the swarm with the given task, orchestrates the execution of agents through the specified layers, and returns the conversation history. + +#### Example Usage + +```python +moe_swarm = MixtureOfAgents(agents=[agent1, agent2], final_agent=final_agent) +history = moe_swarm.run(task="Solve this problem.") +print(history) +``` + +## Detailed Explanation + +### Initialization + +The `__init__` method initializes the swarm with the provided parameters, sets up the conversation rules, and invokes the initialization of the swarm. It also ensures the validity of the `agents` and `final_agent` attributes by calling the `agent_check` and `final_agent_check` methods respectively. + +### Agent Validation + +The `agent_check` method validates whether the `agents` attribute is a list of `Agent` instances, while the `final_agent_check` method validates whether the `final_agent` is an instance of `Agent`. These checks are crucial to ensure that the swarm operates correctly with the appropriate agent types. + +### Swarm Initialization + +The `swarm_initialization` method logs essential information about the swarm, including its name, description, and the number of agents. This provides a clear starting point for the swarm's operations and facilitates debugging and monitoring. + +### Running the Swarm + +The `run` method is the core of the `MixtureOfAgents` class. It orchestrates the execution of agents through multiple layers, collects their outputs, and processes the final output using the `final_agent`. The conversation history is maintained and updated throughout this process, allowing for a seamless flow of information and responses. + +During each layer, the method iterates over the agents, invokes their `run` method with the current conversation history, and logs the outputs. These outputs are then added to the conversation, and the history is updated for the next layer. + +After all layers are completed, the final output agent processes the entire conversation history, and the metadata is created and optionally saved to a file. This metadata includes details about the layers, agent runs, and final output, providing a comprehensive record of the swarm's execution. + +## Additional Information and Tips + +### Common Issues and Solutions + +- **Type Errors**: Ensure that all agents in the `agents` list and the `final_agent` are instances of the `Agent` class. The `agent_check` and `final_agent_check` methods help validate this. +- **Verbose Logging**: Use the `verbose` flag to control the verbosity of the output. This can help with debugging or reduce clutter in the logs. +- **Auto-Save Feature**: Utilize the `auto_save` flag to automatically save the metadata to a file. This can be useful for keeping records of the swarm's operations without manual intervention. + +### References and Resources + +For further reading and background information on the concepts used in the `MixtureOfAgents` class, refer to the paper: [https://arxiv.org/pdf/2406.04692](https://arxiv.org/pdf/2406.04692). + +### Usage Examples + +#### Example 1: Basic Initialization and Run + +```python +from swarms import MixtureOfAgents, Agent, OpenAIOpenAIChat + +# Define agents +director = Agent( + agent_name="Director", + system_prompt="Directs the tasks for the accountants", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="director.json", +) + +# Initialize accountant 1 +accountant1 = Agent( + agent_name="Accountant1", + system_prompt="Prepares financial statements", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="accountant1.json", +) + +# Initialize accountant 2 +accountant2 = Agent( + agent_name="Accountant2", + system_prompt="Audits financial records", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="accountant2.json", +) + + +# Initialize the MixtureOfAgents +moe_swarm = MixtureOfAgents(agents=[director, accountant1, accountant2], final_agent=director) + +# Run the swarm +history = moe_swarm.run(task="Perform task X.") +print(history) +``` + +#### Example 2: Verbose Output and Auto-Save + +```python +from swarms import MixtureOfAgents, Agent, OpenAIOpenAIChat + +# Define Agents +# Define agents +director = Agent( + agent_name="Director", + system_prompt="Directs the tasks for the accountants", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="director.json", +) + +# Initialize accountant 1 +accountant1 = Agent( + agent_name="Accountant1", + system_prompt="Prepares financial statements", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="accountant1.json", +) + +# Initialize accountant 2 +accountant2 = Agent( + agent_name="Accountant2", + system_prompt="Audits financial records", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="accountant2.json", +) + +# Initialize the MixtureOfAgents with verbose output and auto-save enabled +moe_swarm = MixtureOfAgents( + agents=[director, accountant1, accountant2], + final_agent=director, + verbose=True, + auto_save=True +) + +# Run the swarm +history = moe_swarm.run(task="Analyze data set Y.") +print(history) +``` + +#### Example 3: Custom Rules and Multiple Layers + +```python +from swarms import MixtureOfAgents, Agent, OpenAIOpenAIChat + +# Define agents +# Initialize the director agent +director = Agent( + agent_name="Director", + system_prompt="Directs the tasks for the accountants", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="director.json", +) + +# Initialize accountant 1 +accountant1 = Agent( + agent_name="Accountant1", + system_prompt="Prepares financial statements", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="accountant1.json", +) + +# Initialize accountant 2 +accountant2 = Agent( + agent_name="Accountant2", + system_prompt="Audits financial records", + llm=OpenAIChat(), + max_loops=1, + dashboard=False, + streaming_on=True, + verbose=True, + stopping_token="", + state_save_file_type="json", + saved_state_path="accountant2.json", +) + +# Initialize the MixtureOfAgents with custom rules and multiple layers +moe_swarm = MixtureOfAgents( + agents=[director, accountant1, accountant2], + final_agent=director, + layers=5, + rules="Custom rules for the swarm" +) + +# Run the swarm +history = moe_swarm.run(task="Optimize process Z.") +print(history) +``` + +This comprehensive documentation provides a detailed understanding of the `MixtureOfAgents` class, its attributes, methods, and usage. The examples illustrate how to initialize and run the swarm, demonstrating its flexibility and capability to handle various tasks and configurations. + + +# Conclusion + +The `MixtureOfAgents` class is a powerful and flexible framework for managing and orchestrating a swarm of agents. By following a structured approach of parallel and sequential processing, it enables the implementation of complex multi-step workflows where intermediate results are refined through multiple layers of agent interactions. This architecture is particularly suitable for tasks that require iterative processing, collaboration among diverse agents, and sophisticated aggregation of outputs. + +### Key Takeaways + +1. **Flexible Initialization**: The class allows for customizable initialization with various parameters, enabling users to tailor the swarm's configuration to their specific needs. +2. **Robust Agent Management**: With built-in validation methods, the class ensures that all agents and the final agent are correctly instantiated, preventing runtime errors and facilitating smooth execution. +3. **Layered Processing**: The layered approach to processing allows for intermediate results to be iteratively refined, enhancing the overall output quality. +4. **Verbose Logging and Auto-Save**: These features aid in debugging, monitoring, and record-keeping, providing transparency and ease of management. +5. **Comprehensive Documentation**: The detailed class and method documentation, along with numerous usage examples, provide a clear and thorough understanding of how to leverage the `MixtureOfAgents` class effectively. + +### Practical Applications + +The `MixtureOfAgents` class can be applied in various domains, including but not limited to: + +- **Natural Language Processing (NLP)**: Managing a swarm of NLP models to process, analyze, and synthesize text. +- **Data Analysis**: Coordinating multiple data analysis agents to process and interpret complex data sets. +- **Optimization Problems**: Running a swarm of optimization algorithms to solve complex problems in fields such as logistics, finance, and engineering. +- **AI Research**: Implementing experimental setups that require the collaboration of multiple AI models or agents to explore new methodologies and approaches. + +### Future Extensions + +The `MixtureOfAgents` framework provides a solid foundation for further extensions and customizations, including: + +- **Dynamic Layer Configuration**: Allowing layers to be added or removed dynamically based on the task requirements or intermediate results. +- **Advanced Agent Communication**: Enhancing the communication protocols between agents to allow for more sophisticated information exchange. +- **Integration with Other Frameworks**: Seamlessly integrating with other machine learning or data processing frameworks to leverage their capabilities within the swarm architecture. + +In conclusion, the `MixtureOfAgents` class represents a versatile and efficient solution for orchestrating multi-agent systems, facilitating complex task execution through its structured and layered approach. By harnessing the power of parallel and sequential processing, it opens up new possibilities for tackling intricate problems across various domains. \ No newline at end of file diff --git a/docs_edit/swarms/structs/multi_agent_orchestration.md b/docs_edit/swarms/structs/multi_agent_orchestration.md new file mode 100644 index 00000000..80dedff3 --- /dev/null +++ b/docs_edit/swarms/structs/multi_agent_orchestration.md @@ -0,0 +1,15 @@ +# Multi-Agent Orchestration: +Swarms was designed to faciliate the communication between many different and specialized agents from a vast array of other frameworks such as langchain, autogen, crew, and more. + +In traditional swarm theory, there are many types of swarms usually for very specialized use-cases and problem sets. Such as Hiearchical and sequential are great for accounting and sales, because there is usually a boss coordinator agent that distributes a workload to other specialized agents. + + +| **Name** | **Description** | **Code Link** | **Use Cases** | +|-------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|---------------------------------------------------------------------------------------------------| +| Hierarchical Swarms | A system where agents are organized in a hierarchy, with higher-level agents coordinating lower-level agents to achieve complex tasks. | [Code Link](#) | Manufacturing process optimization, multi-level sales management, healthcare resource coordination | +| Agent Rearrange | A setup where agents rearrange themselves dynamically based on the task requirements and environmental conditions. | [Code Link](https://docs.swarms.world/en/latest/swarms/structs/agent_rearrange/) | Adaptive manufacturing lines, dynamic sales territory realignment, flexible healthcare staffing | +| Concurrent Workflows | Agents perform different tasks simultaneously, coordinating to complete a larger goal. | [Code Link](#) | Concurrent production lines, parallel sales operations, simultaneous patient care processes | +| Sequential Coordination | Agents perform tasks in a specific sequence, where the completion of one task triggers the start of the next. | [Code Link](https://docs.swarms.world/en/latest/swarms/structs/sequential_workflow/) | Step-by-step assembly lines, sequential sales processes, stepwise patient treatment workflows | +| Parallel Processing | Agents work on different parts of a task simultaneously to speed up the overall process. | [Code Link](#) | Parallel data processing in manufacturing, simultaneous sales analytics, concurrent medical tests | + + diff --git a/docs_edit/swarms/structs/nonlinearworkflow.md b/docs_edit/swarms/structs/nonlinearworkflow.md new file mode 100644 index 00000000..09d00074 --- /dev/null +++ b/docs_edit/swarms/structs/nonlinearworkflow.md @@ -0,0 +1,96 @@ + +#### Class Name: NonlinearWorkflow + +This class represents a Directed Acyclic Graph (DAG) workflow used to store tasks and their dependencies in a workflow. The structures can validate, execute and store the order of tasks present in the workflow. It has the following attributes and methods: + +#### Attributes: +- `tasks` (dict): A dictionary mapping task names to Task objects. +- `edges` (dict): A dictionary mapping task names to a list of dependencies. +- `stopping_token` (str): The token which denotes the end condition for the workflow execution. Default: `` + +#### Methods: + +1. `__init__(self, stopping_token: str = "")`: The initialization method that sets up the NonlinearWorkflow object with an optional stopping token. This token marks the end of the workflow. + - **Args**: + - `stopping_token` (str): The token to denote the end condition for the workflow execution. + +2. `add(task: Task, *dependencies: str)`: Adds a task to the workflow along with its dependencies. This method is used to add a new task to the workflow with an optional list of dependency tasks. + - **Args**: + - `task` (Task): The task to be added. + - `dependencies` (varargs): Variable number of dependency task names. + - **Returns**: None + +3. `run()`: This method runs the workflow by executing tasks in topological order. It runs the tasks according to the sequence of dependencies. + - **Raises**: + - `Exception`: If a circular dependency is detected. + - **Returns**: None + +#### Examples: + +Usage Example 1: + +```python +from swarms.models import OpenAIChat +from swarms.structs import NonlinearWorkflow, Task + +# Initialize the OpenAIChat model +llm = OpenAIChat(openai_api_key="") +# Create a new Task +task = Task(llm, "What's the weather in Miami") +# Initialize the NonlinearWorkflow +workflow = NonlinearWorkflow() +# Add task to the workflow +workflow.add(task) +# Execute the workflow +workflow.run() +``` + +Usage Example 2: + +```python +from swarms.models import OpenAIChat +from swarms.structs import NonlinearWorkflow, Task + +# Initialize the OpenAIChat model +llm = OpenAIChat(openai_api_key="") +# Create new Tasks +task1 = Task(llm, "What's the weather in Miami") +task2 = Task(llm, "Book a flight to New York") +task3 = Task(llm, "Find a hotel in Paris") +# Initialize the NonlinearWorkflow +workflow = NonlinearWorkflow() +# Add tasks to the workflow with dependencies +workflow.add(task1, task2.name) +workflow.add(task2, task3.name) +workflow.add(task3, "OpenAIChat Initialization") +# Execute the workflow +workflow.run() +``` + +Usage Example 3: + +```python +from swarms.models import OpenAIChat +from swarms.structs import NonlinearWorkflow, Task + +# Initialize the OpenAIChat model +llm = OpenAIChat(openai_api_key="") +# Create new Tasks +task1 = Task(llm, "What's the weather in Miami") +task2 = Task(llm, "Book a flight to New York") +task3 = Task(llm, "Find a hotel in Paris") +# Initialize the NonlinearWorkflow +workflow = NonlinearWorkflow() +# Add tasks to the workflow with dependencies +workflow.add(task1) +workflow.add(task2, task1.name) +workflow.add(task3, task1.name, task2.name) +# Execute the workflow +workflow.run() +``` + +These examples illustrate the three main types of usage for the NonlinearWorkflow class and how it can be used to represent a directed acyclic graph (DAG) workflow with tasks and their dependencies. + +--- + +The explanatory documentation details the architectural aspects, methods, attributes, examples, and usage patterns for the `NonlinearWorkflow` class. By following the module and function definition structure, the documentation provides clear and comprehensive descriptions of the class and its functionalities. diff --git a/docs_edit/swarms/structs/recursiveworkflow.md b/docs_edit/swarms/structs/recursiveworkflow.md new file mode 100644 index 00000000..40c31478 --- /dev/null +++ b/docs_edit/swarms/structs/recursiveworkflow.md @@ -0,0 +1,23 @@ +**Module/Function Name: RecursiveWorkflow** + +`class` RecursiveWorkflow(BaseStructure): + +Creates a recursive workflow structure for executing a task until a stated stopping condition is reached. + +#### Parameters +* *task* (`Task`): The task to execute. +* *stop_token* (`Any`): The token that signals the termination of the workflow. + +#### Examples: +```python +from swarms.models import OpenAIChat +from swarms.structs import RecursiveWorkflow, Task + +llm = OpenAIChat(openai_api_key="YourKey") +task = Task(llm, "What's the weather in miami") +workflow = RecursiveWorkflow(stop_token="") +workflow.add(task) +workflow.run() +``` + +In summary, the `RecursiveWorkflow` class is designed to automate tasks by adding and executing these tasks recursively until a stopping condition is reached. This can be achieved by utilizing the `add` and `run` methods provided. A general format for adding and utilizing the `RecursiveWorkflow` class has been provided under the "Examples" section. If you require any further information, view other sections, like Args and Source Code for specifics on using the class effectively. diff --git a/docs_edit/swarms/structs/round_robin_swarm.md b/docs_edit/swarms/structs/round_robin_swarm.md new file mode 100644 index 00000000..6dbe0ae3 --- /dev/null +++ b/docs_edit/swarms/structs/round_robin_swarm.md @@ -0,0 +1,127 @@ +# RoundRobin: Round-Robin Task Execution in a Swarm + +## Introduction + +The `RoundRobinSwarm` class is designed to manage and execute tasks among multiple agents in a round-robin fashion. This approach ensures that each agent in a swarm receives an equal opportunity to execute tasks, which promotes fairness and efficiency in distributed systems. It is particularly useful in environments where collaborative, sequential task execution is needed among various agents. + +## Conceptual Overview + +### What is Round-Robin? + +Round-robin is a scheduling technique commonly used in computing for managing processes in shared systems. It involves assigning a fixed time slot to each process and cycling through all processes in a circular order without prioritization. In the context of swarms of agents, this method ensures equitable distribution of tasks and resource usage among all agents. + +### Application in Swarms + +In swarms, `RoundRobinSwarm` utilizes the round-robin scheduling to manage tasks among agents like software components, autonomous robots, or virtual entities. This strategy is beneficial where tasks are interdependent or require sequential processing. + +## Class Attributes + +- `agents (List[Agent])`: List of agents participating in the swarm. +- `verbose (bool)`: Enables or disables detailed logging of swarm operations. +- `max_loops (int)`: Limits the number of times the swarm cycles through all agents. +- `index (int)`: Maintains the current position in the agent list to ensure round-robin execution. + +## Methods + +### `__init__` + +Initializes the swarm with the provided list of agents, verbosity setting, and operational parameters. + +**Parameters:** +- `agents`: Optional list of agents in the swarm. +- `verbose`: Boolean flag for detailed logging. +- `max_loops`: Maximum number of execution cycles. +- `callback`: Optional function called after each loop. + +### `run` + +Executes a specified task across all agents in a round-robin manner, cycling through each agent repeatedly for the number of specified loops. + +**Conceptual Behavior:** +- Distribute the task sequentially among all agents starting from the current index. +- Each agent processes the task and potentially modifies it or produces new output. +- After an agent completes its part of the task, the index moves to the next agent. +- This cycle continues until the specified maximum number of loops is completed. +- Optionally, a callback function can be invoked after each loop to handle intermediate results or perform additional actions. + +## Examples +### Example 1: Load Balancing Among Servers + +In this example, `RoundRobinSwarm` is used to distribute network requests evenly among a group of servers. This is common in scenarios where load balancing is crucial for maintaining system responsiveness and scalability. + +```python +from swarms.structs.round_robin import RoundRobinSwarm +from swarms import Agent + +# Define server agents +server1 = Agent(agent_name="Server1", system_prompt="Handle network requests") +server2 = Agent(agent_name="Server2", system_prompt="Handle network requests") +server3 = Agent(agent_name="Server3", system_prompt="Handle network requests") + +# Initialize the swarm with server agents +network_load_balancer = RoundRobinSwarm(agents=[server1, server2, server3], verbose=True) + +# Define a network request task +task = "Process incoming network request" + +# Simulate processing of multiple requests +for _ in range(10): # Assume 10 incoming requests + results = network_load_balancer.run(task) + print("Request processed:", results) +``` + +### Example 2: Document Review Process + +This example demonstrates how `RoundRobinSwarm` can be used to distribute parts of a document among different reviewers in a sequential manner, ensuring that each part of the document is reviewed by different agents. + +```python +from swarms.structs.round_robin import RoundRobinSwarm +from swarms import Agent + +# Define reviewer agents +reviewer1 = Agent(agent_name="Reviewer1", system_prompt="Review document section") +reviewer2 = Agent(agent_name="Reviewer2", system_prompt="Review document section") +reviewer3 = Agent(agent_name="Reviewer3", system_prompt="Review document section") + +# Initialize the swarm with reviewer agents +document_review_swarm = RoundRobinSwarm(agents=[reviewer1, reviewer2, reviewer3], verbose=True) + +# Define a document review task +task = "Review section of the document" + +# Distribute sections of the document to different reviewers +for section in range(5): # Assume the document has 5 sections + results = document_review_swarm.run(task) + print(f"Section {section + 1} reviewed:", results) +``` + +### Example 3: Multi-Stage Data Processing + +In this scenario, `RoundRobinSwarm` facilitates a multi-stage data processing pipeline where data passes through multiple agents, each performing a specific type of data processing in sequence. + +```python +from swarms.structs.round_robin import RoundRobinSwarm +from swarms import Agent + +# Define data processing agents +preprocessor = Agent(agent_name="Preprocessor", system_prompt="Preprocess data") +analyzer = Agent(agent_name="Analyzer", system_prompt="Analyze data") +summarizer = Agent(agent_name="Summarizer", system_prompt="Summarize analysis results") + +# Initialize the swarm with data processing agents +data_processing_swarm = RoundRobinSwarm(agents=[preprocessor, analyzer, summarizer], verbose=True) + +# Define a data processing task +task = "Initial raw data" + +# Run the data through the processing pipeline +results = data_processing_swarm.run(task) +print("Final results from data processing:", results) +``` + +These examples provide a glimpse into how the `RoundRobinSwarm` class can be adapted to various domains and applications, showcasing its versatility in managing tasks and resources in a distributed environment. +``` + +## Conclusion + +The RoundRobinSwarm class provides a robust and flexible framework for managing tasks among multiple agents in a fair and efficient manner. This class is especially useful in environments where tasks need to be distributed evenly among a group of agents, ensuring that all tasks are handled timely and effectively. Through the round-robin algorithm, each agent in the swarm is guaranteed an equal opportunity to contribute to the overall task, promoting efficiency and collaboration. diff --git a/docs_edit/swarms/structs/sequential_workflow.md b/docs_edit/swarms/structs/sequential_workflow.md new file mode 100644 index 00000000..74ee1acb --- /dev/null +++ b/docs_edit/swarms/structs/sequential_workflow.md @@ -0,0 +1,606 @@ +# `SequentialWorkflow` Documentation + +The **SequentialWorkflow** class is a Python module designed to facilitate the execution of a sequence of tasks in a sequential manner. It is a part of the `swarms.structs` package and is particularly useful for orchestrating the execution of various callable objects, such as functions or models, in a predefined order. This documentation will provide an in-depth understanding of the **SequentialWorkflow** class, including its purpose, architecture, usage, and examples. + +## Purpose and Relevance + +The **SequentialWorkflow** class is essential for managing and executing a series of tasks or processes, where each task may depend on the outcome of the previous one. It is commonly used in various application scenarios, including but not limited to: + +1. **Natural Language Processing (NLP) Workflows:** In NLP workflows, multiple language models are employed sequentially to process and generate text. Each model may depend on the results of the previous one, making sequential execution crucial. + +2. **Data Analysis Pipelines:** Data analysis often involves a series of tasks such as data preprocessing, transformation, and modeling steps. These tasks must be performed sequentially to ensure data consistency and accuracy. + +3. **Task Automation:** In task automation scenarios, there is a need to execute a series of automated tasks in a specific order. Sequential execution ensures that each task is performed in a predefined sequence, maintaining the workflow's integrity. + +By providing a structured approach to managing these tasks, the **SequentialWorkflow** class helps developers streamline their workflow execution and improve code maintainability. + +## Key Concepts and Terminology + +Before delving into the details of the **SequentialWorkflow** class, let's define some key concepts and terminology that will be used throughout the documentation: + +### Task + +A **task** refers to a specific unit of work that needs to be executed as part of the workflow. Each task is associated with a description and can be implemented as a callable object, such as a function or a model. + +### Agent + +A **agent** represents a callable object that can be a task within the **SequentialWorkflow**. Agents encapsulate the logic and functionality of a particular task. Agents can be functions, models, or any callable object that can be executed. + +### Sequential Execution + +Sequential execution refers to the process of running tasks one after the other in a predefined order. In a **SequentialWorkflow**, tasks are executed sequentially, meaning that each task starts only after the previous one has completed. + +### Workflow + +A **workflow** is a predefined sequence of tasks that need to be executed in a specific order. It represents the overall process or pipeline that the **SequentialWorkflow** manages. + +### Dashboard (Optional) + +A **dashboard** is an optional feature of the **SequentialWorkflow** that provides real-time monitoring and visualization of the workflow's progress. It displays information such as the current task being executed, task results, and other relevant metadata. + +### Max Loops + +The **maximum number of times** the entire workflow can be run. This parameter allows developers to control how many times the workflow is executed. + +### Autosaving + +**Autosaving** is a feature that allows the **SequentialWorkflow** to automatically save its state to a file at specified intervals. This feature helps in resuming a workflow from where it left off, even after interruptions. + +Now that we have a clear understanding of the key concepts and terminology, let's explore the architecture and usage of the **SequentialWorkflow** class in more detail. + +## Architecture of SequentialWorkflow + +The architecture of the **SequentialWorkflow** class is designed to provide a structured and flexible way to define, manage, and execute a sequence of tasks. It comprises the following core components: + +1. **Task**: The **Task** class represents an individual unit of work within the workflow. Each task has a description, which serves as a human-readable identifier for the task. Tasks can be implemented as callable objects, allowing for great flexibility in defining their functionality. + +2. **Workflow**: The **SequentialWorkflow** class itself represents the workflow. It manages a list of tasks in the order they should be executed. Workflows can be run sequentially or asynchronously, depending on the use case. + +3. **Task Execution**: Task execution is the process of running each task in the workflow. Tasks are executed one after another in the order they were added to the workflow. Task results can be passed as inputs to subsequent tasks. + +4. **Dashboard (Optional)**: The **SequentialWorkflow** optionally includes a dashboard feature. The dashboard provides a visual interface for monitoring the progress of the workflow. It displays information about the current task, task results, and other relevant metadata. + +5. **State Management**: The **SequentialWorkflow** supports state management, allowing developers to save and load the state of the workflow to and from JSON files. This feature is valuable for resuming workflows after interruptions or for sharing workflow configurations. + +## Usage of SequentialWorkflow + +The **SequentialWorkflow** class is versatile and can be employed in a wide range of applications. Its usage typically involves the following steps: + +1. **Initialization**: Begin by initializing any callable objects or flows that will serve as tasks in the workflow. These callable objects can include functions, models, or any other Python objects that can be executed. + +2. **Workflow Creation**: Create an instance of the **SequentialWorkflow** class. Specify the maximum number of loops the workflow should run and whether a dashboard should be displayed. + +3. **Task Addition**: Add tasks to the workflow using the `add` method. Each task should be described using a human-readable description, and the associated agent (callable object) should be provided. Additional arguments and keyword arguments can be passed to the task. + +4. **Task Execution**: Execute the workflow using the `run` method. The tasks within the workflow will be executed sequentially, with task results passed as inputs to subsequent tasks. + +5. **Accessing Results**: After running the workflow, you can access the results of each task using the `get_task_results` method or by directly accessing the `result` attribute of each task. + +6. **Optional Features**: Optionally, you can enable features such as autosaving of the workflow state and utilize the dashboard for real-time monitoring. + + +## Installation + +Before using the Sequential Workflow library, you need to install it. You can install it via pip: + +```bash +pip3 install --upgrade swarms +``` + +## Quick Start + +Let's begin with a quick example to demonstrate how to create and run a Sequential Workflow. In this example, we'll create a workflow that generates a 10,000-word blog on "health and wellness" using an AI model and then summarizes the generated content. + +```python +from swarms.models import OpenAIChat +from swarms.structs import Agent +from swarms.structs.sequential_workflow import SequentialWorkflow + +# Initialize the language model agent (e.g., GPT-3) +llm = OpenAIChat( + openai_api_key="YOUR_API_KEY", + temperature=0.5, + max_tokens=3000, +) + +# Initialize flows for individual tasks +flow1 = Agent(llm=llm, max_loops=1, dashboard=False) +flow2 = Agent(llm=llm, max_loops=1, dashboard=False) + +# Create the Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to the workflow +workflow.add("Generate a 10,000 word blog on health and wellness.", flow1) +workflow.add("Summarize the generated blog", flow2) + +# Run the workflow +workflow.run() + +# Output the results +for task in workflow.tasks: + print(f"Task: {task.description}, Result: {task.result}") +``` + +This quick example demonstrates the basic usage of the Sequential Workflow. It creates two tasks and executes them sequentially. + +## Class: `Task` + +### Description + +The `Task` class represents an individual task in the workflow. A task is essentially a callable object, such as a function or a class, that can be executed sequentially. Tasks can have arguments and keyword arguments. + +### Class Definition + +```python +class Task: + def __init__(self, description: str, agent: Union[Callable, Agent], args: List[Any] = [], kwargs: Dict[str, Any] = {}, result: Any = None, history: List[Any] = []) +``` + +### Parameters + +- `description` (str): A description of the task. +- `agent` (Union[Callable, Agent]): The callable object representing the task. It can be a function, class, or a `Agent` instance. +- `args` (List[Any]): A list of positional arguments to pass to the task when executed. Default is an empty list. +- `kwargs` (Dict[str, Any]): A dictionary of keyword arguments to pass to the task when executed. Default is an empty dictionary. +- `result` (Any): The result of the task's execution. Default is `None`. +- `history` (List[Any]): A list to store the historical results of the task. Default is an empty list. + +### Methods + +#### `execute()` + +Execute the task. + +```python +def execute(self): +``` + +This method executes the task and updates the `result` and `history` attributes of the task. It checks if the task is a `Agent` instance and if the 'task' argument is needed. + +## Class: `SequentialWorkflow` + +### Description + +The `SequentialWorkflow` class is responsible for managing a sequence of tasks and executing them in a sequential order. It provides methods for adding tasks, running the workflow, and managing the state of the tasks. + +### Class Definition + +```python +class SequentialWorkflow: + def __init__(self, max_loops: int = 1, autosave: bool = False, saved_state_filepath: Optional[str] = "sequential_workflow_state.json", restore_state_filepath: Optional[str] = None, dashboard: bool = False, tasks: List[Task] = []) +``` + +### Parameters + +- `max_loops` (int): The maximum number of times to run the workflow sequentially. Default is `1`. +- `autosave` (bool): Whether to enable autosaving of the workflow state. Default is `False`. +- `saved_state_filepath` (Optional[str]): The file path to save the workflow state when autosave is enabled. Default is `"sequential_workflow_state.json"`. +- `restore_state_filepath` (Optional[str]): The file path to restore the workflow state when initializing. Default is `None`. +- `dashboard` (bool): Whether to display a dashboard with workflow information. Default is `False`. +- `tasks` (List[Task]): A list of `Task` instances representing the tasks in the workflow. Default is an empty list. + +### Methods + +#### `add(task: str, agent: Union[Callable, Agent], *args, **kwargs)` + +Add a task to the workflow. + +```python +def add(self, task: str, agent: Union[Callable, Agent], *args, **kwargs) -> None: +``` + +This method adds a new task to the workflow. You can provide a description of the task, the callable object (function, class, or `Agent` instance), and any additional positional or keyword arguments required for the task. + +#### `reset_workflow()` + +Reset the workflow by clearing the results of each task. + +```python +def reset_workflow(self) -> None: +``` + +This method clears the results of each task in the workflow, allowing you to start fresh without reinitializing the workflow. + +#### `get_task_results()` + +Get the results of each task in the workflow. + +```python +def get_task_results(self) -> Dict[str, Any]: +``` + +This method returns a dictionary containing the results of each task in the workflow, where the keys are task descriptions, and the values are the corresponding results. + +#### `remove_task(task_description: str)` + +Remove a task from the workflow. + +```python +def remove_task(self, task_description: str) -> None: +``` + +This method removes a specific task from the workflow based on its description. + +#### `update_task(task_description: str, **updates)` + +Update the arguments of a task in the workflow. + +```python +def update_task(self, task_description: str, **updates) -> None: +``` + +This method allows you to update the arguments and keyword arguments of a task in the workflow. You specify the task's description and provide the updates as keyword arguments. + +#### `save_workflow_state(filepath: Optional[str] = "sequential_workflow_state.json", **kwargs)` + +Save the workflow state to a JSON file. + +```python +def save_workflow_state(self, filepath: Optional[str] = "sequential_workflow_state.json", **kwargs) -> None: +``` + +This method saves the current state of the workflow, including the results and history of each task, to a JSON file. You can specify the file path for saving the state. + +#### `load_workflow_state(filepath: str = None, **kwargs)` + +Load the workflow state from a JSON file and restore the workflow state. + +```python +def load_workflow_state(self, filepath: str = None, **kwargs) -> None: +``` + +This method loads a previously saved workflow state from a JSON file + + and restores the state, allowing you to continue the workflow from where it was saved. You can specify the file path for loading the state. + +#### `run()` + +Run the workflow sequentially. + +```python +def run(self) -> None: +``` + +This method executes the tasks in the workflow sequentially. It checks if a task is a `Agent` instance and handles the agent of data between tasks accordingly. + +#### `arun()` + +Asynchronously run the workflow. + +```python +async def arun(self) -> None: +``` + +This method asynchronously executes the tasks in the workflow sequentially. It's suitable for use cases where asynchronous execution is required. It also handles data agent between tasks. + +#### `workflow_bootup(**kwargs)` + +Display a bootup message for the workflow. + +```python +def workflow_bootup(self, **kwargs) -> None: +``` + +This method displays a bootup message when the workflow is initialized. You can customize the message by providing additional keyword arguments. + +#### `workflow_dashboard(**kwargs)` + +Display a dashboard for the workflow. + +```python +def workflow_dashboard(self, **kwargs) -> None: +``` + +This method displays a dashboard with information about the workflow, such as the number of tasks, maximum loops, and autosave settings. You can customize the dashboard by providing additional keyword arguments. + +## Examples + +Let's explore some examples to illustrate how to use the Sequential Workflow library effectively. + +Sure, I'll recreate the usage examples section for each method and use case using the provided foundation. Here are the examples: + +### Example 1: Adding Tasks to a Sequential Workflow + +In this example, we'll create a Sequential Workflow and add tasks to it. + +```python +from swarms.models import OpenAIChat +from swarms.structs import Agent +from swarms.structs.sequential_workflow import SequentialWorkflow + +# Example usage +api_key = "" # Your actual API key here + +# Initialize the language agent +llm = OpenAIChat( + openai_api_key=api_key, + temperature=0.5, + max_tokens=3000, +) + +# Initialize Agents for individual tasks +flow1 = Agent(llm=llm, max_loops=1, dashboard=False) +flow2 = Agent(llm=llm, max_loops=1, dashboard=False) + +# Create the Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to the workflow +workflow.add("Generate a 10,000 word blog on health and wellness.", flow1) +workflow.add("Summarize the generated blog", flow2) + +# Output the list of tasks in the workflow +print("Tasks in the workflow:") +for task in workflow.tasks: + print(f"Task: {task.description}") +``` + +In this example, we create a Sequential Workflow and add two tasks to it. + +### Example 2: Resetting a Sequential Workflow + +In this example, we'll create a Sequential Workflow, add tasks to it, and then reset it. + +```python +from swarms.models import OpenAIChat +from swarms.structs import Agent +from swarms.structs.sequential_workflow import SequentialWorkflow + +# Example usage +api_key = "" # Your actual API key here + +# Initialize the language agent +llm = OpenAIChat( + openai_api_key=api_key, + temperature=0.5, + max_tokens=3000, +) + +# Initialize Agents for individual tasks +flow1 = Agent(llm=llm, max_loops=1, dashboard=False) +flow2 = Agent(llm=llm, max_loops=1, dashboard=False) + +# Create the Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to the workflow +workflow.add("Generate a 10,000 word blog on health and wellness.", flow1) +workflow.add("Summarize the generated blog", flow2) + +# Reset the workflow +workflow.reset_workflow() + +# Output the list of tasks in the workflow after resetting +print("Tasks in the workflow after resetting:") +for task in workflow.tasks: + print(f"Task: {task.description}") +``` + +In this example, we create a Sequential Workflow, add two tasks to it, and then reset the workflow, clearing all task results. + +### Example 3: Getting Task Results from a Sequential Workflow + +In this example, we'll create a Sequential Workflow, add tasks to it, run the workflow, and then retrieve the results of each task. + +```python +from swarms.models import OpenAIChat +from swarms.structs import Agent +from swarms.structs.sequential_workflow import SequentialWorkflow + +# Example usage +api_key = "" # Your actual API key here + +# Initialize the language agent +llm = OpenAIChat( + openai_api_key=api_key, + temperature=0.5, + max_tokens=3000, +) + +# Initialize Agents for individual tasks +flow1 = Agent(llm=llm, max_loops=1, dashboard=False) +flow2 = Agent(llm=llm, max_loops=1, dashboard=False) + +# Create the Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to the workflow +workflow.add("Generate a 10,000 word blog on health and wellness.", flow1) +workflow.add("Summarize the generated blog", flow2) + +# Run the workflow +workflow.run() + +# Get and display the results of each task in the workflow +results = workflow.get_task_results() +for task_description, result in results.items(): + print(f"Task: {task_description}, Result: {result}") +``` + +In this example, we create a Sequential Workflow, add two tasks to it, run the workflow, and then retrieve and display the results of each task. + +### Example 4: Removing a Task from a Sequential Workflow + +In this example, we'll create a Sequential Workflow, add tasks to it, and then remove a specific task from the workflow. + +```python +from swarms.models import OpenAIChat +from swarms.structs import Agent +from swarms.structs.sequential_workflow import SequentialWorkflow + +# Example usage +api_key = "" # Your actual API key here + +# Initialize the language agent +llm = OpenAIChat( + openai_api_key=api_key, + temperature=0.5, + max_tokens=3000, +) + +# Initialize Agents for individual tasks +flow1 = Agent(llm=llm, max_loops=1, dashboard=False) +flow2 = Agent(llm=llm, max_loops=1, dashboard=False) + +# Create the Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to the workflow +workflow.add("Generate a 10,000 word blog on health and wellness.", flow1) +workflow.add("Summarize the generated blog", flow2) + +# Remove a specific task from the workflow +workflow.remove_task("Generate a 10,000 word blog on health and wellness.") + +# Output the list of tasks in the workflow after removal +print("Tasks in the workflow after removing a task:") +for task in workflow.tasks: + print(f"Task: {task.description}") +``` + +In this example, we create a Sequential Workflow, add two tasks to it, and then remove a specific task from the workflow. + +### Example 5: Updating Task Arguments in a Sequential Workflow + +In this example, we'll create a Sequential Workflow, add tasks to it, and then update the arguments of a specific task in the workflow. + +```python +from swarms.models import OpenAIChat +from swarms.structs import Agent +from swarms.structs.sequential_workflow import SequentialWorkflow + +# Example usage +api_key = ( + "" # Your actual API key here +) + +# Initialize the language agent +llm = OpenAIChat( + openai_api_key=api_key, + temperature=0.5, + max_tokens=3000, +) + +# Initialize Agents for individual tasks +flow1 = Agent(llm=llm, max_loops=1, dashboard=False) +flow2 = Agent(llm=llm, max_loops=1, dashboard=False) + +# Create the Sequential Workflow +workflow = SequentialWorkflow(max_loops=1) + +# Add tasks to the workflow +workflow.add("Generate a 10,000 word blog on health and wellness.", flow1) +workflow.add("Summarize the generated blog", flow2) + +# Update the arguments of a specific task in the workflow +workflow.update_task("Generate a 10,000 word blog on health and wellness.", max_loops=2) + +# Output the list of tasks in the workflow after updating task arguments +print("Tasks in the workflow after updating task arguments:") +for task in workflow.tasks: + print(f"Task: {task.description}, Arguments: { + +task.arguments}") +``` + +In this example, we create a Sequential Workflow, add two tasks to it, and then update the arguments of a specific task in the workflow. + +These examples demonstrate various operations and use cases for working with a Sequential Workflow. + +# Why `SequentialWorkflow`? + +## Enhancing Autonomous Agent Development + +The development of autonomous agents, whether they are conversational AI, robotic systems, or any other AI-driven application, often involves complex workflows that require a sequence of tasks to be executed in a specific order. Managing and orchestrating these tasks efficiently is crucial for building reliable and effective agents. The Sequential Workflow module serves as a valuable tool for AI engineers in achieving this goal. + +## Reliability and Coordination + +One of the primary challenges in autonomous agent development is ensuring that tasks are executed in the correct sequence and that the results of one task can be used as inputs for subsequent tasks. The Sequential Workflow module simplifies this process by allowing AI engineers to define and manage workflows in a structured and organized manner. + +By using the Sequential Workflow module, AI engineers can achieve the following benefits: + +### 1. Improved Reliability + +Reliability is a critical aspect of autonomous agents. The ability to handle errors gracefully and recover from failures is essential for building robust systems. The Sequential Workflow module offers a systematic approach to task execution, making it easier to handle errors, retry failed tasks, and ensure that the agent continues to operate smoothly. + +### 2. Task Coordination + +Coordinating tasks in the correct order is essential for achieving the desired outcome. The Sequential Workflow module enforces task sequencing, ensuring that each task is executed only when its dependencies are satisfied. This eliminates the risk of executing tasks out of order, which can lead to incorrect results. + +### 3. Code Organization + +Managing complex workflows can become challenging without proper organization. The Sequential Workflow module encourages AI engineers to structure their code in a modular and maintainable way. Each task can be encapsulated as a separate unit, making it easier to understand, modify, and extend the agent's behavior. + +### 4. Workflow Visualization + +Visualization is a powerful tool for understanding and debugging workflows. The Sequential Workflow module can be extended to include a visualization dashboard, allowing AI engineers to monitor the progress of tasks, track results, and identify bottlenecks or performance issues. + +## TODO: Future Features + +While the Sequential Workflow module offers significant advantages, there are opportunities for further enhancement. Here is a list of potential features and improvements that can be added to make it even more versatile and adaptable for various AI engineering tasks: + +### 1. Asynchronous Support + +Adding support for asynchronous task execution can improve the efficiency of workflows, especially when dealing with tasks that involve waiting for external events or resources. + +### 2. Context Managers + +Introducing context manager support for tasks can simplify resource management, such as opening and closing files, database connections, or network connections within a task's context. + +### 3. Workflow History + +Maintaining a detailed history of workflow execution, including timestamps, task durations, and input/output data, can facilitate debugging and performance analysis. + +### 4. Parallel Processing + +Enhancing the module to support parallel processing with a pool of workers can significantly speed up the execution of tasks, especially for computationally intensive workflows. + +### 5. Error Handling Strategies + +Providing built-in error handling strategies, such as retries, fallbacks, and custom error handling functions, can make the module more robust in handling unexpected failures. + +## Conclusion + +The Sequential Workflow module is a valuable tool for AI engineers working on autonomous agents and complex AI-driven applications. It offers a structured and reliable approach to defining and executing workflows, ensuring that tasks are performed in the correct sequence. By using this module, AI engineers can enhance the reliability, coordination, and maintainability of their agents. + +As the field of AI continues to evolve, the demand for efficient workflow management tools will only increase. The Sequential Workflow module is a step towards meeting these demands and empowering AI engineers to create more reliable and capable autonomous agents. With future enhancements and features, it has the potential to become an indispensable asset in the AI engineer's toolkit. + +In summary, the Sequential Workflow module provides a foundation for orchestrating complex tasks and workflows, enabling AI engineers to focus on designing intelligent agents that can perform tasks with precision and reliability. + + +## Frequently Asked Questions (FAQs) + +### Q1: What is the difference between a task and a agent in Sequential Workflows? + +**A1:** In Sequential Workflows, a **task** refers to a specific unit of work that needs to be executed. It can be implemented as a callable object, such as a Python function, and is the fundamental building block of a workflow. + +A **agent**, on the other hand, is an encapsulation of a task within the workflow. Agents define the order in which tasks are executed and can be thought of as task containers. They allow you to specify dependencies, error handling, and other workflow-related configurations. + +### Q2: Can I run tasks in parallel within a Sequential Workflow? + +**A2:** Yes, you can run tasks in parallel within a Sequential Workflow by using parallel execution techniques. This advanced feature allows you to execute multiple tasks concurrently, improving performance and efficiency. You can explore this feature further in the guide's section on "Parallel Execution." + +### Q3: How do I handle errors within Sequential Workflows? + +**A3:** Error handling within Sequential Workflows can be implemented by adding error-handling logic within your task functions. You can catch exceptions and handle errors gracefully, ensuring that your workflow can recover from unexpected scenarios. The guide also covers more advanced error handling strategies, such as retrying failed tasks and handling specific error types. + +### Q4: What are some real-world use cases for Sequential Workflows? + +**A4:** Sequential Workflows can be applied to a wide range of real-world use cases, including: + +- **Data ETL (Extract, Transform, Load) Processes:** Automating data pipelines that involve data extraction, transformation, and loading into databases or data warehouses. + +- **Batch Processing:** Running batch jobs that process large volumes of data or perform data analysis. + +- **Automation of DevOps Tasks:** Streamlining DevOps processes such as deployment, provisioning, and monitoring. + +- **Cross-system Integrations:** Automating interactions between different systems, services, or APIs. + +- **Report Generation:** Generating reports and documents automatically based on data inputs. + +- **Workflow Orchestration:** Orchestrating complex workflows involving multiple steps and dependencies. + +- **Resource Provisioning:** Automatically provisioning and managing cloud resources. + +These are just a few examples, and Sequential Workflows can be tailored to various automation needs across industries. diff --git a/docs_edit/swarms/structs/stackoverflowswarm.md b/docs_edit/swarms/structs/stackoverflowswarm.md new file mode 100644 index 00000000..c3e83b47 --- /dev/null +++ b/docs_edit/swarms/structs/stackoverflowswarm.md @@ -0,0 +1,114 @@ +# StackOverflowSwarm Class Documentation + +## Overview + +The `StackOverflowSwarm` class is part of the `swarms.structs` library. It is designed to simulate a collective intelligence or swarm intelligence scenario where multiple individual agents (referred to as `Agent` objects) come together to solve problems or answer questions typically found on platforms like Stack Overflow. This class is helpful in experiments involving cooperative multi-agent interactions, decision-making, and problem-solving, primarily when applied to question-and-answer scenarios. + +Swarm intelligence is modeled after social insects and natural systems where the collective behavior of decentralized, self-organized systems leads to the solving of complex tasks. `StackOverflowSwarm`, as a mini-framework within this library, provides a way to simulate such systems programmatically. + +The design of the `StackOverflowSwarm` class is intended to allow easy tracking of multi-agent interactions, the ability to autosave conversations, provide verbose outputs for monitoring purposes, and deal with problem-solving in a structured manner. This document provides a deep dive into the class' mechanisms, its architecture, and comprehensive usage examples for developers and researchers interested in swarm intelligence applications. + +## Class Definition + +### StackOverflowSwarm Attributes: + +| Attribute | Type | Description | +|-----------------|---------------------|-----------------------------------------------------------------------------| +| `agents` | `List[Agent]` | The list of agents in the swarm. | +| `autosave` | `bool` | Flag indicating whether to automatically save the conversation. | +| `verbose` | `bool` | Flag indicating whether to display verbose output. | +| `save_filepath` | `str` | The filepath to save the conversation. | +| `conversation` | `Conversation` | The conversation object for storing the interactions. | +| `eval_agent` | `Agent` or `None` | An optional evaluation agent within the swarm (not used in provided code). | +| `upvotes` | `int` | Counter for the number of upvotes per post (initialized as 0). | +| `downvotes` | `int` | Counter for the number of downvotes per post (initialized as 0). | +| `forum` | `List` | An empty list to represent the forum for the agents to interact. | + +### StackOverflowSwarm Method: `__init__` + +| Argument | Type | Default | Description | +|------------------|---------------|----------------------------------|---------------------------------------------------| +| `agents` | `List[Agent]` | Required | The list of agents in the swarm. | +| `autosave` | `bool` | `False` | Whether to automatically save the conversation. | +| `verbose` | `bool` | `False` | Whether to display verbose output. | +| `save_filepath` | `str` | `"stack_overflow_swarm.json"` | The filepath to save the conversation. | +| `eval_agent` | `Agent` | `None` | An optional eval agent (not entirely implemented).| +| `*args` | `variable` | | Variable length argument list. | +| `**kwargs` | `variable` | | Arbitrary keyword arguments. | + +### StackOverflowSwarm Method: `run` + +| Argument | Type | Description | +|-----------|----------|------------------------------------------------------------------------| +| `task` | `str` | The task to be performed by the agents. | +| `*args` | `variable`| Variable length argument list. | +| `**kwargs`| `variable`| Arbitrary keyword arguments. | + +#### Return + +| Type | Description | +|--------------|---------------------------------------------| +| `List[str]` | The conversation history as a list of strings.| + +### API Usage and Examples + +**Initializing and Running a StackOverflowSwarm** + +```python +from swarms.structs.agent import Agent +from swarms.structs.stack_overflow_swarm import StackOverflowSwarm + + +# Define custom Agents with some logic (placeholder for actual Agent implementation) +class CustomAgent(Agent): + def run(self, conversation, *args, **kwargs): + return "This is a response from CustomAgent." + + +# Initialize agents +agent1 = CustomAgent(ai_name="Agent1") +agent2 = CustomAgent(ai_name="Agent2") + +# Create a swarm +swarm = StackOverflowSwarm(agents=[agent1, agent2], autosave=True, verbose=True) + +# Define a task +task_description = "How can I iterate over a list in Python?" + +# Run the swarm with a task +conversation_history = swarm.run(task_description) + +# Output the conversation history +print(conversation_history) +``` + +### How the Swarm Works + +The `StackOverflowSwarm` starts by initializing agents, autosave preferences, conversation object, upvote/downvote counters, and a forum list to manage inter-agent communication. When the `run` method is invoked, it adds the given task to the conversation, logging this addition if verbose mode is enabled. + +Each agent in the swarm runs its logic, possibly taking the current conversation history into consideration (the exact logic depends on the agent's implementation) and then responds to the task. Each agent's response is added to the conversation and logged. + +If autosave is enabled, the conversation is saved to the specified file path. The `run` method ultimately returns the conversation history as a string, which could also be a serialized JSON depending on the implementation of `Agent` and `Conversation`. + +### Considerations + +- This is a high-level conceptual example and lacks the detailed implementations of `Agent`, `Conversation`, and the actual `run` logic within each `Agent`. +- The `eval_agent` attribute and related logic have not been implemented in the provided code. + +### Common Issues + +- Since the implementation of `Agent` and `Conversation` is not provided, one must ensure these components are compatible with the `StackOverflowSwarm` class for the interconnectivity and conversation saving/management to function correctly. +- It is essential to handle exceptions and errors within the `run` methods of each `Agent` to ensure that the failure of one agent does not halt the entire swarm. + +### Additional Resources + +For further exploration into swarm intelligence, collective behavior in natural and artificial systems, and multi-agent problem solving: + +1. Bonabeau, E., Dorigo, M., & Theraulaz, G. (1999). Swarm Intelligence: From Natural to Artificial Systems. Oxford University Press. +2. Kennedy, J., Eberhart, R. C., & Shi, Y. (2001). Swarm Intelligence. Morgan Kaufmann. +3. [Multi-Agent Systems Virtual Labs](http://multiagent.fr) +4. [PyTorch – Deep Learning and Artificial Intelligence](https://pytorch.org) + +### Note + +This documentation provides an overview of the `StackOverflowSwarm` class, its attributes, and methods. It should be adapted and expanded upon with actual code implementations for proper functionality and achieving the desired behavior in a swarm-based system. diff --git a/docs_edit/swarms/structs/stepinput.md b/docs_edit/swarms/structs/stepinput.md new file mode 100644 index 00000000..2230ccdf --- /dev/null +++ b/docs_edit/swarms/structs/stepinput.md @@ -0,0 +1,64 @@ +# Module/Class Name: StepInput + +The `StepInput` class is used to define the input parameters for the task step. It is a part of the `BaseModel` and accepts any value. This documentation will provide an overview of the class, its functionality, and usage examples. + +## Overview and Introduction +The `StepInput` class is an integral part of the `swarms.structs` library, allowing users to define and pass input parameters for a specific task step. This class provides flexibility by accepting any value, allowing the user to customize the input parameters according to their requirements. + +## Class Definition +The `StepInput` class is defined as follows: + +```python +class StepInput(BaseModel): + __root__: Any = Field( + ..., + description=("Input parameters for the task step. Any value is" " allowed."), + example='{\n"file_to_refactor": "models.py"\n}', + ) +``` + +The `StepInput` class extends the `BaseModel` and contains a single field `__root__` of type `Any` with a description of accepting input parameters for the task step. + +## Functionality and Usage +The `StepInput` class is designed to accept any input value, providing flexibility and customization for task-specific parameters. Upon creating an instance of `StepInput`, the user can define and pass input parameters as per their requirements. + +### Usage Example 1: +```python +from swarms.structs import StepInput + +input_params = {"file_to_refactor": "models.py", "refactor_method": "code"} +step_input = StepInput(__root__=input_params) +``` + +In this example, we import the `StepInput` class from the `swarms.structs` library and create an instance `step_input` by passing a dictionary of input parameters. The `StepInput` class allows any value to be passed, providing flexibility for customization. + +### Usage Example 2: +```python +from swarms.structs import StepInput + +input_params = {"input_path": "data.csv", "output_path": "result.csv"} +step_input = StepInput(__root__=input_params) +``` + +In this example, we again create an instance of `StepInput` by passing a dictionary of input parameters. The `StepInput` class does not restrict the type of input, allowing users to define parameters based on their specific task requirements. + +### Usage Example 3: +```python +from swarms.structs import StepInput + +file_path = "config.json" +with open(file_path) as f: + input_data = json.load(f) + +step_input = StepInput(__root__=input_data) +``` + +In this example, we read input parameters from a JSON file and create an instance of `StepInput` by passing the loaded JSON data. The `StepInput` class seamlessly accepts input data from various sources, providing versatility to the user. + +## Additional Information and Tips +When using the `StepInput` class, ensure that the input parameters are well-defined and align with the requirements of the task step. When passing complex data structures, such as nested dictionaries or JSON objects, ensure that the structure is valid and well-formed. + +## References and Resources +- For further information on the `BaseModel` and `Field` classes, refer to the Pydantic documentation: [Pydantic Documentation](https://pydantic-docs.helpmanual.io/) + +The `StepInput` class within the `swarms.structs` library is a versatile and essential component for defining task-specific input parameters. Its flexibility in accepting any value and seamless integration with diverse data sources make it a valuable asset for customizing input parameters for task steps. diff --git a/docs_edit/swarms/structs/swarmnetwork.md b/docs_edit/swarms/structs/swarmnetwork.md new file mode 100644 index 00000000..efbdf279 --- /dev/null +++ b/docs_edit/swarms/structs/swarmnetwork.md @@ -0,0 +1,167 @@ +```markdown +# Class Name: SwarmNetwork + +## Overview and Introduction +The `SwarmNetwork` class is responsible for managing the agents pool and the task queue. It also monitors the health of the agents and scales the pool up or down based on the number of pending tasks and the current load of the agents. + +## Class Definition + +The `SwarmNetwork` class has the following parameters: + +| Parameter | Type | Description | +|-------------------|-------------------|-------------------------------------------------------------------------------| +| idle_threshold | float | Threshold for idle agents to trigger scaling down | +| busy_threshold | float | Threshold for busy agents to trigger scaling up | +| agents | List[Agent] | List of agent instances to be added to the pool | +| api_enabled | Optional[bool] | Flag to enable/disable the API functionality | +| logging_enabled | Optional[bool] | Flag to enable/disable logging | +| other arguments | *args | Additional arguments | +| other keyword | **kwargs | Additional keyword arguments | + +## Function Explanation and Usage + +### Function: `add_task` +- Adds a task to the task queue +- Parameters: + - `task`: The task to be added to the queue +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork(agents=[agent]) + swarm.add_task("task") + ``` + +### Function: `async_add_task` +- Asynchronous function to add a task to the task queue +- Parameters: + - `task`: The task to be added to the queue +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork(agents=[agent]) + await swarm.async_add_task("task") + ``` + +### Function: `run_single_agent` +- Executes a task on a single agent +- Parameters: + - `agent_id`: ID of the agent to run the task on + - `task`: The task to be executed by the agent (optional) +- Returns: + - Result of the task execution +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork(agents=[agent]) + swarm.run_single_agent(agent_id, "task") + ``` + +### Function: `run_many_agents` +- Executes a task on all the agents in the pool +- Parameters: + - `task`: The task to be executed by the agents (optional) +- Returns: + - List of results from each agent +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork(agents=[agent]) + swarm.run_many_agents("task") + ``` + +### Function: `list_agents` +- Lists all the agents in the pool +- Returns: + - List of active agents +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork(agents=[agent]) + swarm.list_agents() + ``` + +### Function: `add_agent` +- Adds an agent to the agent pool +- Parameters: + - `agent`: Agent instance to be added to the pool +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork() + swarm.add_agent(agent) + ``` + +### Function: `remove_agent` +- Removes an agent from the agent pool +- Parameters: + - `agent_id`: ID of the agent to be removed from the pool +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork(agents=[agent]) + swarm.remove_agent(agent_id) + ``` + +### Function: `scale_up` +- Scales up the agent pool by adding new agents +- Parameters: + - `num_agents`: Number of agents to be added (optional) +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + swarm = SwarmNetwork() + swarm.scale_up(num_agents=5) + ``` + +### Function: `scale_down` +- Scales down the agent pool by removing existing agents +- Parameters: + - `num_agents`: Number of agents to be removed (optional) +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + swarm = SwarmNetwork(agents=[agent1, agent2, agent3, agent4, agent5]) + swarm.scale_down(num_agents=2) + ``` + +### Function: `create_apis_for_agents` +- Creates APIs for each agent in the pool (optional) +- Example: + ```python + from swarms.structs.agent import Agent + from swarms.structs.swarm_net import SwarmNetwork + + agent = Agent() + swarm = SwarmNetwork(agents=[agent]) + swarm.create_apis_for_agents() + ``` + +## Additional Information +- The `SwarmNetwork` class is an essential part of the swarms.structs library, enabling efficient management and scaling of agent pools. + +``` diff --git a/docs_edit/swarms/structs/task.md b/docs_edit/swarms/structs/task.md new file mode 100644 index 00000000..f6a72aef --- /dev/null +++ b/docs_edit/swarms/structs/task.md @@ -0,0 +1,29 @@ +- This is the class for the Task +- For the constructor, it takes in the description, agent, args, kwargs, result, history, schedule_time, scheduler, trigger, action, condition, priority, and dependencies +- The `execute` method runs the task by calling the agent or model with the arguments and keyword arguments +- It sets a trigger, action, and condition for the task +- Task completion is checked with `is_completed` method +- `add_dependency` adds a task to the list of dependencies +- `set_priority` sets the priority of the task + +```python +# Example 1: Creating and executing a Task +from swarms.models import OpenAIChat +from swarms.structs import Agent, Task + +agent = Agent(llm=OpenAIChat(openai_api_key=""), max_loops=1, dashboard=False) +task = Task(agent=agent) +task.execute("What's the weather in miami") +print(task.result) + +# Example 2: Adding a dependency and setting priority +task2 = Task(description="Task 2", agent=agent) +task.add_dependency(task2) +task.set_priority(1) + +# Example 3: Executing a scheduled task +task3 = Task(description="Scheduled Task", agent=agent) +task3.schedule_time = datetime.datetime.now() + datetime.timedelta(minutes=30) +task3.handle_scheduled_task() +print(task3.is_completed()) +``` diff --git a/docs_edit/swarms/structs/taskinput.md b/docs_edit/swarms/structs/taskinput.md new file mode 100644 index 00000000..8e9ed33f --- /dev/null +++ b/docs_edit/swarms/structs/taskinput.md @@ -0,0 +1,84 @@ +## Module/Class Name: TaskInput + +The `TaskInput` class is designed to handle the input parameters for a task. It is an abstract class that serves as the base model for input data manipulation. + +### Overview and Introduction +The `TaskInput` class is an essential component of the `swarms.structs` library, allowing users to define and pass input parameters to tasks. It is crucial for ensuring the correct and structured input to various tasks and processes within the library. + +### Class Definition + +#### TaskInput Class: +- Parameters: + - `__root__` (Any): The input parameters for the task. Any value is allowed. + +### Disclaimer: +It is important to note that the `TaskInput` class extends the `BaseModel` from the `pydantic` library. This means that it inherits all the properties and methods of the `BaseModel`. + +### Functionality and Usage +The `TaskInput` class encapsulates the input parameters in a structured format. It allows for easy validation and manipulation of input data. + +#### Usage Example 1: Using TaskInput for Debugging +```python +from pydantic import BaseModel, Field + +from swarms.structs import TaskInput + + +class DebugInput(TaskInput): + debug: bool + + +# Creating an instance of DebugInput +debug_params = DebugInput(__root__={"debug": True}) + +# Accessing the input parameters +print(debug_params.debug) # Output: True +``` + +#### Usage Example 2: Using TaskInput for Task Modes +```python +from pydantic import BaseModel, Field + +from swarms.structs import TaskInput + + +class ModeInput(TaskInput): + mode: str + + +# Creating an instance of ModeInput +mode_params = ModeInput(__root__={"mode": "benchmarks"}) + +# Accessing the input parameters +print(mode_params.mode) # Output: benchmarks +``` + +#### Usage Example 3: Using TaskInput with Arbitrary Parameters +```python +from pydantic import BaseModel, Field + +from swarms.structs import TaskInput + + +class ArbitraryInput(TaskInput): + message: str + quantity: int + + +# Creating an instance of ArbitraryInput +arbitrary_params = ArbitraryInput(__root__={"message": "Hello, world!", "quantity": 5}) + +# Accessing the input parameters +print(arbitrary_params.message) # Output: Hello, world! +print(arbitrary_params.quantity) # Output: 5 +``` + +### Additional Information and Tips +- The `TaskInput` class can be extended to create custom input models with specific parameters tailored to individual tasks. +- The `Field` class from `pydantic` can be used to specify metadata and constraints for the input parameters. + +### References and Resources +- Official `pydantic` Documentation: [https://pydantic-docs.helpmanual.io/](https://pydantic-docs.helpmanual.io/) +- Additional resources on data modelling with `pydantic`: [https://www.tiangolo.com/blog/2021/02/16/real-python-tutorial-modern-fastapi-pydantic/](https://www.tiangolo.com/blog/2021/02/16/real-python-tutorial-modern-fastapi-pydantic/) + +This documentation presents the `TaskInput` class, its usage, and practical examples for creating and handling input parameters within the `swarms.structs` library. diff --git a/docs_edit/swarms/structs/taskqueuebase.md b/docs_edit/swarms/structs/taskqueuebase.md new file mode 100644 index 00000000..0feee648 --- /dev/null +++ b/docs_edit/swarms/structs/taskqueuebase.md @@ -0,0 +1,130 @@ + +# `TaskQueueBase` + +## Introduction +The `swarms.structs` library is a key component of a multi-agent system's task management infrastructure. It provides the necessary classes and methods to create and manage queues of tasks that can be distributed among a swarm of agents. The purpose of this documentation is to guide users through the proper use of the `TaskQueueBase` class, which serves as an abstract base class for implementing task queues. + +## TaskQueueBase Class + +```python +import threading +from abc import ABC, abstractmethod + +# Include any additional imports that are relevant to decorators and other classes such as Task and Agent if needed + +# Definition of the synchronized_queue decorator (if necessary) + + +class TaskQueueBase(ABC): + def __init__(self): + self.lock = threading.Lock() + + @synchronized_queue + @abstractmethod + def add_task(self, task: Task) -> bool: + pass + + @synchronized_queue + @abstractmethod + def get_task(self, agent: Agent) -> Task: + pass + + @synchronized_queue + @abstractmethod + def complete_task(self, task_id: str): + pass + + @synchronized_queue + @abstractmethod + def reset_task(self, task_id: str): + pass +``` + +### Architecture and Purpose +The `TaskQueueBase` class provides an abstract interface for task queue implementations. This class uses the `threading.Lock` to ensure mutual exclusion, making it suitable for concurrent environments. The `@synchronized_queue` decorator implies that each method should be synchronized to prevent race conditions. + +Tasks are generally represented by the `Task` class, and agents by the `Agent` class. Implementations of the `TaskQueueBase` will provide the logic to store tasks, distribute them to agents, and manage their lifecycles. + +#### Methods and Their Arguments + +Here's an overview of each method and its arguments: + +| Method | Arguments | Return Type | Description | +|----------------|----------------|-------------|-----------------------------------------------------------------------------------------------| +| add_task | task (Task) | bool | Adds a task to the queue and returns True if successfully added, False otherwise. | +| get_task | agent (Agent) | Task | Retrieves the next task for the given agent. | +| complete_task | task_id (str) | None | Marks the task identified by task_id as completed. | +| reset_task | task_id (str) | None | Resets the task identified by task_id, typically done if an agent fails to complete the task. | + +### Example Usage + +Below are three examples of how the `TaskQueueBase` class can be implemented and used. + +**Note:** The actual code for decorators, Task, Agent, and concrete implementations of `TaskQueueBase` is not provided and should be created as per specific requirements. + +#### Example 1: Basic Implementation + +```python +# file: basic_queue.py + +# Assume synchronized_queue decorator is defined elsewhere +from decorators import synchronized_queue + +from swarms.structs import Agent, Task, TaskQueueBase + + +class BasicTaskQueue(TaskQueueBase): + def __init__(self): + super().__init__() + self.tasks = [] + + @synchronized_queue + def add_task(self, task: Task) -> bool: + self.tasks.append(task) + return True + + @synchronized_queue + def get_task(self, agent: Agent) -> Task: + return self.tasks.pop(0) + + @synchronized_queue + def complete_task(self, task_id: str): + # Logic to mark task as completed + pass + + @synchronized_queue + def reset_task(self, task_id: str): + # Logic to reset the task + pass + + +# Usage +queue = BasicTaskQueue() +# Add task, assuming Task object is created +queue.add_task(someTask) +# Get task for an agent, assuming Agent object is created +task = queue.get_task(someAgent) +``` + +#### Example 2: Priority Queue Implementation + +```python +# file: priority_queue.py +# Similar to example 1, but tasks are managed based on priority within add_task and get_task methods +``` + +#### Example 3: Persistent Queue Implementation + +```python +# file: persistent_queue.py +# An example demonstrating tasks being saved to a database or filesystem. Methods would include logic for persistence. +``` + +### Additional Information and Common Issues + +This section would provide insights on thread safety, error handling, and best practices in working with task queues in a multi-agent system. + +### References + +Links to further resources and any academic papers or external documentation related to task queues and multi-agent systems would be included here. + diff --git a/docs_edit/swarms/structs/workflow.md b/docs_edit/swarms/structs/workflow.md new file mode 100644 index 00000000..2ab1a6e2 --- /dev/null +++ b/docs_edit/swarms/structs/workflow.md @@ -0,0 +1,200 @@ +# Module/Class Name: Workflow +=========================== + +The `Workflow` class is a part of the `swarms` library and is used to create and execute a workflow of tasks. It provides a way to define a sequence of tasks and execute them in order, with the output of each task being used as the input for the next task. + +## Overview and Introduction +------------------------- + +The `Workflow` class is designed to simplify the execution of a series of tasks by providing a structured way to define and execute them. It allows for sequential execution of tasks, with the output of each task being passed as input to the next task. This makes it easy to create complex workflows and automate multi-step processes. + + +## Class Definition: Workflow + + +The `Workflow` class is a powerful tool provided by the `swarms` library that allows users to create and execute a sequence of tasks in a structured and automated manner. It simplifies the process of defining and executing complex workflows by providing a clear and intuitive interface. + +## Why Use Workflows? +------------------ + +Workflows are essential in many domains, including data processing, automation, and task management. They enable the automation of multi-step processes, where the output of one task serves as the input for the next task. By using workflows, users can streamline their work, reduce manual effort, and ensure consistent and reliable execution of tasks. + +The `Workflow` class provides a way to define and execute workflows in a flexible and efficient manner. It allows users to define the sequence of tasks, specify dependencies between tasks, and execute them in order. This makes it easier to manage complex processes and automate repetitive tasks. + +## How Does it Work? +----------------- + +The `Workflow` class consists of two main components: the `Task` class and the `Workflow` class itself. Let's explore each of these components in detail. + +### Task Class + +The `Task` class represents an individual task within a workflow. Each task is defined by a string description. It contains attributes such as `parents`, `children`, `output`, and `structure`. + +The `parents` attribute is a list that stores references to the parent tasks of the current task. Similarly, the `children` attribute is a list that stores references to the child tasks of the current task. These attributes allow for the definition of task dependencies and the establishment of the workflow's structure. + +The `output` attribute stores the output of the task, which is generated when the task is executed. Initially, the output is set to `None`, indicating that the task has not been executed yet. + +The `structure` attribute refers to the `Workflow` object that the task belongs to. This attribute is set when the task is added to the workflow. + +The `Task` class also provides methods such as `add_child` and `execute`. The `add_child` method allows users to add child tasks to the current task, thereby defining the workflow's structure. The `execute` method is responsible for executing the task by running the associated agent's `run` method with the task as input. It returns the response generated by the agent's `run` method. + +### Workflow Class + +The `Workflow` class is the main class that orchestrates the execution of tasks in a workflow. It takes an agent object as input, which is responsible for executing the tasks. The agent object should have a `run` method that accepts a task as input and returns a response. + +The `Workflow` class provides methods such as `add`, `run`, and `context`. The `add` method allows users to add tasks to the workflow. It returns the newly created task object, which can be used to define task dependencies. The `run` method executes the workflow by running each task in order. It returns the last task in the workflow. The `context` method returns a dictionary containing the context information for a given task, including the parent output, parent task, and child task. + +The `Workflow` class also has attributes such as `tasks` and `parallel`. The `tasks` attribute is a list that stores references to all the tasks in the workflow. The `parallel` attribute is a boolean flag that determines whether the tasks should be executed in parallel or sequentially. + +When executing the workflow, the `run` method iterates over the tasks in the workflow and executes each task in order. If the `parallel` flag is set to `True`, the tasks are executed in parallel using a `ThreadPoolExecutor`. Otherwise, the tasks are executed sequentially. + +## Benefits and Use Cases +---------------------- + +The `Workflow` class provides several benefits and use cases: + +- Automation: Workflows automate multi-step processes, reducing manual effort and increasing efficiency. By defining the sequence of tasks and their dependencies, users can automate repetitive tasks and ensure consistent execution. + +- Flexibility: Workflows can be easily customized and modified to suit specific needs. Users can add, remove, or rearrange tasks as required, allowing for dynamic and adaptable workflows. + +- Error Handling: Workflows provide a structured approach to error handling. If an error occurs during the execution of a task, the workflow can be designed to handle the error gracefully and continue with the remaining tasks. + +- Collaboration: Workflows facilitate collaboration by providing a shared structure for task execution. Multiple users can contribute to the workflow by adding or modifying tasks, enabling teamwork and coordination. + +- Reproducibility: Workflows ensure reproducibility by defining a clear sequence of tasks. By following the same workflow, users can achieve consistent results and easily reproduce previous analyses or processes. + +Overall, the `Workflow` class is a valuable tool for managing and executing complex processes. It simplifies the creation + + +## Class Parameters +---------------- + +- `agent` (Any): The agent object that will be used to execute the tasks. It should have a `run` method that takes a task as input and returns a response. +- `parallel` (bool): If `True`, the tasks will be executed in parallel using a `ThreadPoolExecutor`. Default: `False`. + +## Class Methods +------------- + +### `add(task: str) -> Task` + +Adds a new task to the workflow. + +- `task` (str): The task to be added. + +Returns: + +- `Task`: The newly created task object. + +### `run(*args) -> Task` + +Executes the workflow by running each task in order. + +Returns: + +- `Task`: The last task in the workflow. + +### `context(task: Task) -> Dict[str, Any]` + +Returns a dictionary containing the context information for a given task. The context includes the parent output, parent task, and child task. + +- `task` (Task): The task for which the context information is required. + +Returns: + +- `Dict[str, Any]`: A dictionary containing the context information. + +## Task Class +---------- + +The `Task` class is a nested class within the `Workflow` class. It represents an individual task in the workflow. + +### Task Parameters + +- `task` (str): The task description. + +### Task Methods + +### `add_child(child: 'Workflow.Task')` + +Adds a child task to the current task. + +- `child` ('Workflow.Task'): The child task to be added. + +### `execute() -> Any` + +Executes the task by running the associated agent's `run` method with the task as input. + +Returns: + +- `Any`: The response from the agent's `run` method. + + +## Functionality and Usage +----------------------------------- + +To use the `Workflow` class, follow these steps: + +1. Create an instance of the `Workflow` class, providing an agent object that has a `run` method. This agent will be responsible for executing the tasks in the workflow. + +``` +from swarms import Workflow + +# Create an instance of the Workflow class +workflow = Workflow(agent=my_agent) +``` + + +1. Add tasks to the workflow using the `add` method. Each task should be a string description. + +``` +# Add tasks to the workflow +task1 = workflow.add("Task 1") +task2 = workflow.add("Task 2") +task3 = workflow.add("Task 3") +``` + + +1. Define the sequence of tasks by adding child tasks to each task using the `add_child` method. + +``` +# Define the sequence of tasks +task1.add_child(task2) +task2.add_child(task3) +``` + + +1. Execute the workflow using the `run` method. This will run each task in order, with the output of each task being passed as input to the next task. + +``` +# Execute the workflow +workflow.run() +``` + + +1. Access the output of each task using the `output` attribute of the task object. + +``` +# Access the output of each task +output1 = task1.output +output2 = task2.output +output3 = task3.output +``` + + +1. Optionally, you can run the tasks in parallel by setting the `parallel` parameter to `True` when creating the `Workflow` object. + +``` +# Create a parallel workflow +parallel_workflow = Workflow(agent=my_agent, parallel=True) +``` + + +1. You can also access the context information for a task using the `context` method. This method returns a dictionary containing the parent output, parent task, and child task for the given task. + +``` +# Access the context information for a task +context = workflow.context(task2) +parent_output = context["parent_output"] +parent_task = context["parent"] +child_task = context["child"] +``` diff --git a/docs_edit/swarms/structs/yaml_model.md b/docs_edit/swarms/structs/yaml_model.md new file mode 100644 index 00000000..4b261415 --- /dev/null +++ b/docs_edit/swarms/structs/yaml_model.md @@ -0,0 +1,251 @@ +# YamlModel: A Pydantic Model for YAML Data + +### Introduction + +The `YamlModel` class, derived from `BaseModel` in Pydantic, offers a convenient way to work with YAML data in your Python applications. It provides methods for serialization (converting to YAML), deserialization (creating an instance from YAML), and schema generation. This documentation will delve into the functionalities of `YamlModel` and guide you through its usage with illustrative examples. + +### Purpose and Functionality + +The primary purpose of `YamlModel` is to streamline the interaction between your Python code and YAML data. It accomplishes this by: + +* **Serialization:** Transforming a `YamlModel` instance into a YAML string representation using the `to_yaml()` method. +* **Deserialization:** Constructing a `YamlModel` instance from a provided YAML string using the `from_yaml()` class method. +* **JSON to YAML Conversion:** Facilitating the conversion of JSON data to YAML format through the `json_to_yaml()` static method. +* **Saving to YAML File:** Enabling the storage of `YamlModel` instances as YAML files using the `save_to_yaml()` method. +* (Future Implementation) **Schema Generation:** The `create_yaml_schema()` class method (not yet implemented but included for future reference) will generate a YAML schema that reflects the structure of the `YamlModel` class and its fields. + +### Class Definition and Arguments + +The `YamlModel` class inherits from Pydantic's `BaseModel` class. You can define your custom YAML models by creating subclasses of `YamlModel` and specifying your data fields within the class definition. Here's the breakdown of the `YamlModel` class and its methods: + +```python +class YamlModel(BaseModel): + """ + A Pydantic model class for working with YAML data. + """ + + def to_yaml(self): + """ + Serialize the Pydantic model instance to a YAML string. + """ + return yaml.safe_dump(self.dict(), sort_keys=False) + + @classmethod + def from_yaml(cls, yaml_str: str): + """ + Create an instance of the class from a YAML string. + + Args: + yaml_str (str): The YAML string to parse. + + Returns: + cls: An instance of the class with attributes populated from the YAML data. + Returns None if there was an error loading the YAML data. + """ + # ... + + @staticmethod + def json_to_yaml(json_str: str): + """ + Convert a JSON string to a YAML string. + """ + # ... + + def save_to_yaml(self, filename: str): + """ + Save the Pydantic model instance as a YAML file. + """ + # ... + + # TODO: Implement a method to create a YAML schema from the model fields + # @classmethod + # def create_yaml_schema(cls): + # # ... + """ +``` + +**Arguments:** + +* `self` (implicit): Refers to the current instance of the `YamlModel` class. +* `yaml_str` (str): The YAML string used for deserialization in the `from_yaml()` method. +* `json_str` (str): The JSON string used for conversion to YAML in the `json_to_yaml()` method. +* `filename` (str): The filename (including path) for saving the YAML model instance in the `save_to_yaml()` method. + +### Detailed Method Descriptions + +**1. to_yaml()** + +This method transforms an instance of the `YamlModel` class into a YAML string representation. It utilizes the `yaml.safe_dump()` function from the `PyYAML` library to ensure secure YAML data generation. The `sort_keys=False` argument guarantees that the order of keys in the resulting YAML string remains consistent with the order of fields defined in your `YamlModel` subclass. + +**Example:** + +```python +class User(YamlModel): + name: str + age: int + is_active: bool + +user = User(name="Bob", age=30, is_active=True) +yaml_string = user.to_yaml() +print(yaml_string) +``` + +This code will output a YAML string representation of the `user` object, resembling: + +```yaml +name: Bob +age: 30 +is_active: true +``` + +### Detailed Method Descriptions + +**2. from_yaml(cls, yaml_str)** (Class Method) + +The `from_yaml()` class method is responsible for constructing a `YamlModel` instance from a provided YAML string. + +* **Arguments:** + * `cls` (class): The class representing the desired YAML model (the subclass of `YamlModel` that matches the structure of the YAML data). + * `yaml_str` (str): The YAML string containing the data to be parsed and used for creating the model instance. + +* **Returns:** + * `cls` (instance): An instance of the specified class (`cls`) populated with the data extracted from the YAML string. If an error occurs during parsing, it returns `None`. + +* **Error Handling:** + +The `from_yaml()` method employs `yaml.safe_load()` for secure YAML parsing. It incorporates a `try-except` block to handle potential `ValueError` exceptions that might arise during the parsing process. If an error is encountered, it logs the error message and returns `None`. + +**Example:** + +```python +class User(YamlModel): + name: str + age: int + is_active: bool + +yaml_string = """ +name: Alice +age: 25 +is_active: false +""" + +user = User.from_yaml(yaml_string) +print(user.name) # Output: Alice +``` + +**3. json_to_yaml(json_str)** (Static Method) + +This static method in the `YamlModel` class serves the purpose of converting a JSON string into a YAML string representation. + +* **Arguments:** + * `json_str` (str): The JSON string that needs to be converted to YAML format. + +* **Returns:** + * `str`: The converted YAML string representation of the provided JSON data. + +* **Functionality:** + +The `json_to_yaml()` method leverages the `json.loads()` function to parse the JSON string into a Python dictionary. Subsequently, it utilizes `yaml.dump()` to generate the corresponding YAML string representation from the parsed dictionary. + +**Example:** + +```python +json_string = '{"name": "Charlie", "age": 42, "is_active": true}' +yaml_string = YamlModel.json_to_yaml(json_string) +print(yaml_string) +``` + +This code snippet will convert the JSON data to a YAML string, likely resembling: + +```yaml +name: Charlie +age: 42 +is_active: true +``` + +**4. save_to_yaml(self, filename)** + +The `save_to_yaml()` method facilitates the storage of a `YamlModel` instance as a YAML file. + +* **Arguments:** + * `self` (implicit): Refers to the current instance of the `YamlModel` class that you intend to save. + * `filename` (str): The desired filename (including path) for the YAML file. + +* **Functionality:** + +The `save_to_yaml()` method employs the previously explained `to_yaml()` method to generate a YAML string representation of the `self` instance. It then opens the specified file in write mode (`"w"`) and writes the YAML string content to the file. + +**Example:** + +```python +class Employee(YamlModel): + name: str + department: str + salary: float + +employee = Employee(name="David", department="Engineering", salary=95000.00) +employee.save_to_yaml("employee.yaml") +``` + +This code will create a YAML file named "employee.yaml" containing the serialized representation of the `employee` object. + + +### More Usage Examples ++ + +```python +class User(YamlModel): + name: str + age: int + is_active: bool + +# Create an instance of the User model +user = User(name="Alice", age=30, is_active=True) + +# Serialize the User instance to YAML and print it +yaml_string = user.to_yaml() +print(yaml_string) +``` + +This code snippet demonstrates the creation of a `User` instance and its subsequent serialization to a YAML string using the `to_yaml()` method. The printed output will likely resemble: + +```yaml +name: Alice +age: 30 +is_active: true +``` + +### Converting JSON to YAML + +```python +# Convert JSON string to YAML and print +json_string = '{"name": "Bob", "age": 25, "is_active": false}' +yaml_string = YamlModel.json_to_yaml(json_string) +print(yaml_string) +``` + +This example showcases the conversion of a JSON string containing user data into a YAML string representation using the `json_to_yaml()` static method. The resulting YAML string might look like: + +```yaml +name: Bob +age: 25 +is_active: false +``` + +### Saving User Instance to YAML File + +```python +# Save the User instance to a YAML file +user.save_to_yaml("user.yaml") +``` + +This code demonstrates the utilization of the `save_to_yaml()` method to store the `user` instance as a YAML file named "user.yaml". The contents of the file will mirror the serialized YAML string representation of the user object. + +## Additional Considerations + +* Ensure you have the `PyYAML` library installed (`pip install pyyaml`) to leverage the YAML parsing and serialization functionalities within `YamlModel`. +* Remember that the `create_yaml_schema()` method is not yet implemented but serves as a placeholder for future enhancements. +* For complex data structures within your YAML models, consider leveraging Pydantic's data validation and nested model capabilities for robust data management. + +## Conclusion + +The `YamlModel` class in Pydantic offers a streamlined approach to working with YAML data in your Python projects. By employing the provided methods (`to_yaml()`, `from_yaml()`, `json_to_yaml()`, and `save_to_yaml()`), you can efficiently convert between Python objects and YAML representations, facilitating data persistence and exchange. This comprehensive documentation empowers you to effectively utilize `YamlModel` for your YAML data processing requirements. \ No newline at end of file diff --git a/docs_edit/swarms/tools/base_tool.md b/docs_edit/swarms/tools/base_tool.md new file mode 100644 index 00000000..6f5776fa --- /dev/null +++ b/docs_edit/swarms/tools/base_tool.md @@ -0,0 +1,118 @@ +# Documentation Outline for `BaseTool` Class + +1. **Module Overview** +2. **Installation and Setup** +3. **Class Definition** +4. **Attributes and Methods** +5. **Functionality and Usage** + - Basic Usage Examples + - Advanced Use Cases +6. **Common Issues and Troubleshooting** +7. **References and Additional Resources** + +## 1. Module Overview + +The `BaseTool` class is a part of the `swarms` package and serves as a foundational class for creating and managing tools that can be executed with different inputs and configurations. It leverages Pydantic for input validation and includes extensive logging for easy debugging and monitoring. + +## 2. Installation and Setup + +To use the `BaseTool` class, ensure that you have the required dependencies installed: + +```bash +pip install pydantic loguru +``` + +Include the necessary imports in your Python script: + +```python +from swarms.tools.base_tool import BaseTool +``` + +## 3. Class Definition + +`BaseTool` is designed using Pydantic's `BaseModel` to leverage type annotations and validations: + +```python +from pydantic import BaseModel + +class BaseTool(BaseModel): + # Attributes and method definitions follow +``` + +## 4. Attributes and Methods + +### Attributes + +| Attribute | Type | Description | +|---------------------|----------------------------|--------------------------------------------------------------| +| `verbose` | `bool` | Enables verbose output, providing detailed logs. | +| `functions` | `List[Callable[..., Any]]` | Stores a list of functions that can be managed by the tool. | +| `base_models` | `List[type[BaseModel]]` | List of Pydantic models associated with the tool. | +| `autocheck` | `bool` | Automatically checks conditions before execution (not implemented). | +| `auto_execute_tool` | `Optional[bool]` | Automatically executes tools if set. | + +### Key Methods + +- `func_to_dict`: Converts a function to a dictionary format suitable for OpenAI function schema. +- `load_params_from_func_for_pybasemodel`: Loads parameters dynamically for Pydantic models based on the function signature. +- `execute_tool`: Executes a specified tool using a mapping of function names to callable functions. + +## 5. Functionality and Usage + +### Basic Usage Examples + +#### Initialize BaseTool + +```python +tool = BaseTool(verbose=True) +``` + +#### Convert a Function to Dictionary + +```python +def sample_function(x, y): + return x + y + +schema = tool.func_to_dict(sample_function, name="AddFunction", description="Adds two numbers") +print(schema) +``` + +### Advanced Use Cases + +#### Executing a Tool Dynamically + +```python +# Define a sample tool +def add(x, y): + return x + y + +# Tool registration and execution +tool_dict = tool.func_to_dict(add, name="Add") +result = tool.execute_tool([tool_dict], {'Add': add}, 5, 3) +print("Result of add:", result) +``` + +#### Handling Multiple Models + +```python +# Define multiple Pydantic models +class ModelOne(BaseModel): + a: int + +class ModelTwo(BaseModel): + b: str + +# Convert and manage multiple models +schemas = tool.multi_base_models_to_dict([ModelOne, ModelTwo]) +print(schemas) +``` + +## 6. Common Issues and Troubleshooting + +- **Type Errors**: Ensure that all parameters match the expected types as defined in the Pydantic models. +- **Execution Failures**: Check the function and tool configurations for compatibility and completeness. + +## 7. References and Additional Resources + +- [Pydantic Documentation](https://pydantic-docs.helpmanual.io/) +- [Loguru GitHub Repository](https://github.com/Delgan/loguru) diff --git a/docs_edit/swarms/tools/decorator.md b/docs_edit/swarms/tools/decorator.md new file mode 100644 index 00000000..5d4acb13 --- /dev/null +++ b/docs_edit/swarms/tools/decorator.md @@ -0,0 +1,92 @@ + +# Tool Decorator Documentation + +## Module Overview + +The `tool` decorator is designed to enhance functions by automatically generating an OpenAI function schema based on the function's signature and provided metadata. This schema can be outputted in different formats based on the decorator's arguments. The primary use of this decorator is to facilitate the integration of Python functions with external systems that require structured metadata, making it ideal for creating machine-readable descriptions of functions. + +## Key Features + +- **Automatic Schema Generation:** Generates a schema based on the function's signature. +- **Flexible Output Formats:** Supports returning the schema as a dictionary, string, or YAML (if integrated). +- **Logging Support:** Includes logging of function calls and errors, aiding in debugging and monitoring. + +## Installation and Setup + +Before using the `tool` decorator, ensure that the required libraries are installed and configured. Here’s a basic setup: + +```bash +$ pip install -U swarms +``` + +## Decorator Definition + +### Signature + +```python +def tool(name: str = None, description: str = None, return_dict: bool = True, verbose: bool = True, return_string: bool = False, return_yaml: bool = False): +``` + +### Parameters + +| Parameter | Type | Default | Description | +|------------------|---------|---------|--------------------------------------------------------| +| `name` | str | None | Name of the OpenAI function. Optional. | +| `description` | str | None | Description of the OpenAI function. Optional. | +| `return_dict` | bool | True | Whether to return the schema as a dictionary. | +| `verbose` | bool | True | Enables verbose output. | +| `return_string` | bool | False | Whether to return the schema as a string. | +| `return_yaml` | bool | False | Whether to return the schema in YAML format. | + +## Functionality and Usage + +### Basic Usage + +Here is an example of using the `tool` decorator to enhance a simple function: + +```python +@tool(name="ExampleFunction", description="Demonstrates the use of the tool decorator") +def example_function(param1: int, param2: str): + print(f"Received param1: {param1}, param2: {param2}") + +example_function(123, "abc") +``` + +### Advanced Usage + +#### Returning Schema as String + +To get the schema as a string instead of a dictionary: + +```python +@tool(name="StringSchemaFunction", description="Returns schema as string", return_dict=False, return_string=True) +def another_function(): + pass + +print(another_function()) # Outputs the schema as a string +``` + +#### Handling Exceptions + +Demonstrating error handling with the decorator: + +```python +@tool(name="ErrorHandlingFunction", description="Handles errors gracefully") +def error_prone_function(): + raise ValueError("An example error") + +try: + error_prone_function() +except Exception as e: + print(f"Caught an error: {e}") +``` + +## Additional Information and Tips + +- **Logging:** The decorator logs all function calls and exceptions. Make sure to configure the `loguru` logger accordingly to capture these logs. +- **Assertion Errors:** The decorator performs type checks on the arguments, and if the types do not match, it will raise an assertion error. + +## References + +- For more on decorators: [Python Decorators Documentation](https://docs.python.org/3/glossary.html#term-decorator) +- Loguru library for logging: [Loguru Documentation](https://loguru.readthedocs.io/en/stable/) diff --git a/docs_edit/swarms/tools/main.md b/docs_edit/swarms/tools/main.md new file mode 100644 index 00000000..214e143d --- /dev/null +++ b/docs_edit/swarms/tools/main.md @@ -0,0 +1,387 @@ +# The Swarms Tool System: Functions, Pydantic BaseModels as Tools, and Radical Customization + + +This guide provides an in-depth look at the Swarms Tool System, focusing on its functions, the use of Pydantic BaseModels as tools, and the extensive customization options available. Aimed at developers, this documentation highlights how the Swarms framework works and offers detailed examples of creating and customizing tools and agents, specifically for accounting tasks. + +The Swarms Tool System is a flexible and extensible component of the Swarms framework that allows for the creation, registration, and utilization of various tools. These tools can perform a wide range of tasks and are integrated into agents to provide specific functionalities. The system supports multiple ways to define tools, including using Pydantic BaseModels, functions, and dictionaries. + +### Architecture + +The architecture of the Swarms Tool System is designed to be highly modular. It consists of the following main components: + +1. **Agents:** The primary entities that execute tasks. +2. **Tools:** Functions or classes that perform specific operations. +3. **Schemas:** Definitions of input and output data formats using Pydantic BaseModels. + +### Key Concepts + +#### Tools + +Tools are the core functional units within the Swarms framework. They can be defined in various ways: + +- **Pydantic BaseModels**: Tools can be defined using Pydantic BaseModels to ensure data validation and serialization. +- **Functions**: Tools can be simple or complex functions. +- **Dictionaries**: Tools can be represented as dictionaries for flexibility. + +#### Agents + +Agents utilize tools to perform tasks. They are configured with a set of tools and schemas, and they execute the tools based on the input they receive. + +## Detailed Documentation + +### Tool Definition + +#### Using Pydantic BaseModels + +Pydantic BaseModels provide a structured way to define tool inputs and outputs. They ensure data validation and serialization, making them ideal for complex data handling. + +**Example:** + +Define Pydantic BaseModels for accounting tasks: + +```python +from pydantic import BaseModel + +class CalculateTax(BaseModel): + income: float + +class GenerateInvoice(BaseModel): + client_name: str + amount: float + date: str + +class SummarizeExpenses(BaseModel): + expenses: list[dict] +``` + +Define tool functions using these models: + +```python +def calculate_tax(data: CalculateTax) -> dict: + tax_rate = 0.3 # Example tax rate + tax = data.income * tax_rate + return {"income": data.income, "tax": tax} + +def generate_invoice(data: GenerateInvoice) -> dict: + invoice = { + "client_name": data.client_name, + "amount": data.amount, + "date": data.date, + "invoice_id": "INV12345" + } + return invoice + +def summarize_expenses(data: SummarizeExpenses) -> dict: + total_expenses = sum(expense['amount'] for expense in data.expenses) + return {"total_expenses": total_expenses} +``` + +#### Using Functions Directly + +Tools can also be defined directly as functions without using Pydantic models. This approach is suitable for simpler tasks where complex validation is not required. + +**Example:** + +```python +def basic_tax_calculation(income: float) -> dict: + tax_rate = 0.25 + tax = income * tax_rate + return {"income": income, "tax": tax} +``` + +#### Using Dictionaries + +Tools can be represented as dictionaries, providing maximum flexibility. This method is useful when the tool's functionality is more dynamic or when integrating with external systems. + +**Example:** + +```python +basic_tool_schema = { + "name": "basic_tax_tool", + "description": "A basic tax calculation tool", + "parameters": { + "type": "object", + "properties": { + "income": {"type": "number", "description": "Income amount"} + }, + "required": ["income"] + } +} + +def basic_tax_tool(income: float) -> dict: + tax_rate = 0.2 + tax = income * tax_rate + return {"income": income, "tax": tax} +``` + +### Tool Registration + +Tools need to be registered with the agent for it to utilize them. This can be done by specifying the tools in the `tools` parameter during agent initialization. + +**Example:** + +```python +from swarms import Agent +from llama_hosted import llama3Hosted + +# Define Pydantic BaseModels for accounting tasks +class CalculateTax(BaseModel): + income: float + +class GenerateInvoice(BaseModel): + client_name: str + amount: float + date: str + +class SummarizeExpenses(BaseModel): + expenses: list[dict] + +# Define tool functions using these models +def calculate_tax(data: CalculateTax) -> dict: + tax_rate = 0.3 + tax = data.income * tax_rate + return {"income": data.income, "tax": tax} + +def generate_invoice(data: GenerateInvoice) -> dict: + invoice = { + "client_name": data.client_name, + "amount": data.amount, + "date": data.date, + "invoice_id": "INV12345" + } + return invoice + +def summarize_expenses(data: SummarizeExpenses) -> dict: + total_expenses = sum(expense['amount'] for expense in data.expenses) + return {"total_expenses": total_expenses} + +# Function to generate a tool schema for demonstration purposes +def create_tool_schema(): + return { + "name": "execute", + "description": "Executes code on the user's machine", + "parameters": { + "type": "object", + "properties": { + "language": { + "type": "string", + "description": "Programming language", + "enum": ["python", "java"] + }, + "code": {"type": "string", "description": "Code to execute"} + }, + "required": ["language", "code"] + } + } + +# Initialize the agent with the tools +agent = Agent( + agent_name="Accounting Agent", + system_prompt="This agent assists with various accounting tasks.", + sop_list=["Provide accurate and timely accounting services."], + llm=llama3Hosted(), + max_loops="auto", + interactive=True, + verbose=True, + tool_schema=BaseModel, + list_base_models=[ + CalculateTax, + GenerateInvoice, + SummarizeExpenses + ], + output_type=str, + metadata_output_type="json", + function_calling_format_type="OpenAI", + function_calling_type="json", + tools=[ + calculate_tax, + generate_invoice, + summarize_expenses + ], + list_tool_schemas_json=create_tool_schema(), +) +``` + +### Running the Agent + +The agent can execute tasks using the `run` method. This method takes a prompt and determines the appropriate tool to use based on the input. + +**Example:** + +```python +# Example task: Calculate tax for an income +result = agent.run("Calculate the tax for an income of $50,000.") +print(f"Result: {result}") + +# Example task: Generate an invoice +invoice_data = agent.run("Generate an invoice for John Doe for $1500 on 2024-06-01.") +print(f"Invoice Data: {invoice_data}") + +# Example task: Summarize expenses +expenses = [ + {"amount": 200.0, "description": "Office supplies"}, + {"amount": 1500.0, "description": "Software licenses"}, + {"amount": 300.0, "description": "Travel expenses"} +] +summary = agent.run("Summarize these expenses: " + str(expenses)) +print(f"Expenses Summary: {summary}") +``` + + +### Customizing Tools + +Custom tools can be created to extend the functionality of the Swarms framework. This can include integrating external APIs, performing complex calculations, or handling specialized data formats. + +**Example: Custom Accounting Tool** + +```python +from pydantic import BaseModel + +class CustomAccountingTool(BaseModel): + data: dict + +def custom_accounting_tool(data: CustomAccountingTool) -> dict: + # Custom logic for the accounting tool + result = { + "status": "success", + "data_processed": len(data.data) + } + return result + +# Register the custom tool with the agent +agent = Agent( + agent_name="Accounting Agent", + system_prompt="This agent assists with various accounting tasks.", + sop_list=["Provide accurate and timely accounting services."], + llm=llama3Hosted(), + max_loops="auto", + interactive=True, + verbose=True, + tool_schema=BaseModel, + list_base_models=[ + CalculateTax, + GenerateInvoice, + SummarizeExpenses, + CustomAccountingTool + ], + output_type=str, + metadata_output_type="json", + function_calling_format_type="OpenAI", + function_calling_type="json", + tools=[ + calculate_tax, + generate_invoice, + summarize_expenses, + custom_accounting_tool + ], + list_tool_schemas_json=create_tool_schema(), +) +``` + +### Advanced Customization + +Advanced customization involves modifying the core components of the Swarms framework. This includes extending existing classes, adding new methods, or integrating third-party libraries. + +**Example: Extending the Agent Class** + +```python +from swarms import Agent + +class AdvancedAccountingAgent(Agent): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def custom_behavior(self): + print("Executing custom behavior") + + def another_custom_method(self): + print("Another + + custom method") + +# Initialize the advanced agent +advanced_agent = AdvancedAccountingAgent( + agent_name="Advanced Accounting Agent", + system_prompt="This agent performs advanced accounting tasks.", + sop_list=["Provide advanced accounting services."], + llm=llama3Hosted(), + max_loops="auto", + interactive=True, + verbose=True, + tool_schema=BaseModel, + list_base_models=[ + CalculateTax, + GenerateInvoice, + SummarizeExpenses, + CustomAccountingTool + ], + output_type=str, + metadata_output_type="json", + function_calling_format_type="OpenAI", + function_calling_type="json", + tools=[ + calculate_tax, + generate_invoice, + summarize_expenses, + custom_accounting_tool + ], + list_tool_schemas_json=create_tool_schema(), +) + +# Call custom methods +advanced_agent.custom_behavior() +advanced_agent.another_custom_method() +``` + +### Integrating External Libraries + +You can integrate external libraries to extend the functionality of your tools. This is useful for adding new capabilities or leveraging existing libraries for complex tasks. + +**Example: Integrating Pandas for Data Processing** + +```python +import pandas as pd +from pydantic import BaseModel + +class DataFrameTool(BaseModel): + data: list[dict] + +def process_data_frame(data: DataFrameTool) -> dict: + df = pd.DataFrame(data.data) + summary = df.describe().to_dict() + return {"summary": summary} + +# Register the tool with the agent +agent = Agent( + agent_name="Data Processing Agent", + system_prompt="This agent processes data frames.", + sop_list=["Provide data processing services."], + llm=llama3Hosted(), + max_loops="auto", + interactive=True, + verbose=True, + tool_schema=BaseModel, + list_base_models=[DataFrameTool], + output_type=str, + metadata_output_type="json", + function_calling_format_type="OpenAI", + function_calling_type="json", + tools=[process_data_frame], + list_tool_schemas_json=create_tool_schema(), +) + +# Example task: Process a data frame +data = [ + {"col1": 1, "col2": 2}, + {"col1": 3, "col2": 4}, + {"col1": 5, "col2": 6} +] +result = agent.run("Process this data frame: " + str(data)) +print(f"Data Frame Summary: {result}") +``` + +## Conclusion + +The Swarms Tool System provides a robust and flexible framework for defining and utilizing tools within agents. By leveraging Pydantic BaseModels, functions, and dictionaries, developers can create highly customized tools to perform a wide range of tasks. The extensive customization options allow for the integration of external libraries and the extension of core components, making the Swarms framework suitable for diverse applications. + +This guide has covered the fundamental concepts and provided detailed examples to help you get started with the Swarms Tool System. With this foundation, you can explore and implement advanced features to build powerful \ No newline at end of file diff --git a/docs_edit/swarms_cloud/architecture.md b/docs_edit/swarms_cloud/architecture.md new file mode 100644 index 00000000..0a0e7db4 --- /dev/null +++ b/docs_edit/swarms_cloud/architecture.md @@ -0,0 +1,138 @@ +# Under The Hood: The Swarm Cloud Serving Infrastructure +----------------------------------------------------------------- + +This blog post delves into the intricate workings of our serving model infrastructure, providing a comprehensive understanding for both users and infrastructure engineers. We'll embark on a journey that starts with an API request and culminates in a response generated by your chosen model, all orchestrated within a multi-cloud environment. + +### The Journey of an API Request + +1. **The Gateway:** Your API request first arrives at an EC2 instance running SkyPilot, a lightweight controller. + +2. **Intelligent Routing:** SkyPilot, wielding its decision-making prowess, analyzes the request and identifies the most suitable GPU in our multi-cloud setup. Factors like resource availability, latency, and cost might influence this choice. + +3. **Multi-Cloud Agility:** Based on the chosen cloud provider (AWS or Azure), SkyPilot seamlessly directs the request to the appropriate containerized model residing in a sky clusters cluster. Here's where the magic of cloud-agnostic deployments comes into play. + +### Unveiling the Architecture + +Let's dissect the technical architecture behind this process: + +- **SkyPilot (EC2 Instance):** This lightweight controller, deployed on an EC2 instance, acts as the central hub for orchestrating requests and routing them to suitable model instances. + +- **Swarm Cloud Repositories:** Each model resides within its own dedicated folder on the Swarms Cloud GitHub repository (). Here, you'll find a folder structure like this: + +``` +servers/ + / + sky-serve.yaml # Deployment configuration file + / + sky-serve.yaml + ... + +``` + +- **SkyServe Deployment Tool:** This is the workhorse responsible for deploying models within sky clusters clusters. Each model's folder contains a `sky-serve.yaml` file that dictates the deployment configuration. + +### Infrastructure Engineer's Toolkit: Commands for Model Deployment + +Here's a breakdown of the `sky serve` command and its subcommands: + +- `sky serve -h`: Displays the help message for the `sky serve` CLI tool. + +**Commands:** + +- `sky serve up yaml.yaml -n --cloud aws/azure`: This command deploys a SkyServe service based on the provided `yaml.yaml` configuration file. The `-n` flag indicates a new deployment, and the `--cloud` flag specifies the target cloud platform (AWS or Azure). + +**Additional Commands:** + +- `sky serve update`: Updates a running SkyServe service. + +- `sky serve status`: Shows the status of deployed SkyServe services. + +- `sky serve down`: Tears down (stops and removes) a SkyServe service. + +- `sky serve logs`: Tails the logs of a running SkyServe service, providing valuable insights into its operation. + +By leveraging these commands, infrastructure engineers can efficiently manage the deployment and lifecycle of models within the multi-cloud environment. + +**Building the Cluster and Accessing the Model:** + +When you deploy a model using `sky serve up`, SkyServe triggers the building of a sky clusters cluster, if one doesn't already exist. Once the deployment is complete, SkyServe provides you with an endpoint URL for interacting with the model. This URL allows you to send requests to the deployed model and receive its predictions. + +### Understanding the `sky-serve.yaml` Configuration + +The `sky-serve.yaml` file plays a crucial role in defining the deployment parameters for your model. This file typically includes properties such as: + +- **Image:** Specifies the Docker image containing your model code and dependencies. + +- **Replicas:** Defines the number of model replicas to be deployed in the Swarm cluster. This allows for load balancing and fault tolerance. + +- **Resources:** Sets memory and CPU resource constraints for the deployed model containers. + +- **Networking:** Configures network settings for communication within the sky clusters and with the outside world. + +**Benefits of Our Infrastructure:** + +- **Multi-Cloud Flexibility:** Deploy models seamlessly across AWS and Azure, taking advantage of whichever platform best suits your needs. + +- **Scalability:** Easily scale model deployments up or down based on traffic demands. + +- **Cost Optimization:** The intelligent routing by SkyPilot helps optimize costs by utilizing the most cost-effective cloud resources. + +- **Simplified Management:** Manage models across clouds with a single set of commands using `sky serve`. + +### Deep Dive: Technical Architecture + +**Cloud Considerations:** + +Our multi-cloud architecture offers several advantages, but it also introduces complexities that need to be addressed. Here's a closer look at some key considerations: + +- **Cloud Provider APIs and SDKs:** SkyPilot interacts with the APIs and SDKs of the chosen cloud provider (AWS or Azure) to manage resources like virtual machines, storage, and networking. Infrastructure engineers need to be familiar with the specific APIs and SDKs for each cloud platform to ensure smooth operation and troubleshooting. + +- **Security:** Maintaining consistent security across different cloud environments is crucial. This involves aspects like IAM (Identity and Access Management) configuration, network segmentation, and encryption of sensitive data at rest and in transit. Infrastructure engineers need to implement robust security measures tailored to each cloud provider's offerings. + +- **Network Connectivity:** Establishing secure and reliable network connectivity between SkyPilot (running on EC2), sky clusters clusters (deployed on cloud VMs), and your client applications is essential. This might involve setting up VPN tunnels or utilizing cloud-native networking solutions offered by each provider. + +- **Monitoring and Logging:** Monitoring the health and performance of SkyPilot, sky clusters clusters, and deployed models across clouds is critical for proactive issue identification and resolution. Infrastructure engineers can leverage cloud provider-specific monitoring tools alongside centralized logging solutions for comprehensive oversight. + +**sky clusters Clusters** + +sky clusters is a container orchestration platform that facilitates the deployment and management of containerized applications, including your machine learning models. When you deploy a model with `sky serve up`, SkyPilot launches an node with: + +- **Provision Resources:** SkyPilot requests resources from the chosen cloud provider (e.g., VMs with GPUs) to create a sky clusters cluster if one doesn't already exist. + +- **Deploy Containerized Models:** SkyPilot leverages the `sky-serve.yaml` configuration to build Docker images containing your model code and dependencies. These images are then pushed to a container registry (e.g., Docker Hub) and deployed as containers within the Swarm cluster. + +- **Load Balancing and Service Discovery:** sky clusters provides built-in load balancing capabilities to distribute incoming requests across multiple model replicas, ensuring high availability and performance. Additionally, service discovery mechanisms allow models to find each other and communicate within the cluster. + +**SkyPilot - The Orchestrator** + +SkyPilot, the lightweight controller running on an EC2 instance, plays a central role in this infrastructure. Here's a deeper look at its functionalities: + +- **API Gateway Integration:** SkyPilot can be integrated with your API gateway or service mesh to receive incoming requests for model predictions. + +- **Request Routing:** SkyPilot analyzes the incoming request, considering factors like model compatibility, resource availability, and latency. Based on this analysis, SkyPilot selects the most suitable model instance within the appropriate sky clusters cluster. + +- **Cloud Provider Interaction:** SkyPilot interacts with the chosen cloud provider's APIs to manage resources required for the sky clusters cluster and model deployment. + +- **Model Health Monitoring:** SkyPilot can be configured to monitor the health and performance of deployed models. This might involve collecting metrics like model response times, resource utilization, and error rates. + +- **Scalability Management:** Based on pre-defined policies or real-time traffic patterns, SkyPilot can trigger the scaling of model deployments (adding or removing replicas) within the sky clusters cluster. + +**Advanced Considerations** + +This blog post has provided a foundational understanding of our serving model infrastructure. For infrastructure engineers seeking a deeper dive, here are some additional considerations: + +- **Container Security:** Explore container image scanning for vulnerabilities, enforcing least privilege principles within container runtime environments, and utilizing secrets management solutions for secure access to sensitive data. + +- **Model Versioning and Rollbacks:** Implement a model versioning strategy to track changes and facilitate rollbacks to previous versions if necessary. + +- **A/B Testing:** Integrate A/B testing frameworks to evaluate the performance of different model versions and configurations before full-scale deployment. + +- **Auto-Scaling with Cloud Monitoring:** Utilize cloud provider-specific monitoring services like Amazon CloudWatch or Azure Monitor to trigger auto-scaling of sky clusters clusters based on predefined metrics. + +By understanding these technical aspects and considerations, infrastructure engineers can effectively manage and optimize our multi-cloud serving model infrastructure. + +### Conclusion + +This comprehensive exploration has shed light on the intricate workings of our serving model infrastructure. We've covered the journey of an API request, delved into the technical architecture with a focus on cloud considerations, sky clusters clusters, and SkyPilot's role as the orchestrator. We've also explored advanced considerations for infrastructure engineers seeking to further optimize and secure this multi-cloud environment. + +This understanding empowers both users and infrastructure engineers to leverage this technology effectively for deploying and managing your machine learning models at scale. diff --git a/docs_edit/swarms_cloud/available_models.md b/docs_edit/swarms_cloud/available_models.md new file mode 100644 index 00000000..6754cc80 --- /dev/null +++ b/docs_edit/swarms_cloud/available_models.md @@ -0,0 +1,10 @@ +# Available Models + +| Model Name | Description | Input Price | Output Price | Use Cases | +|-----------------------|---------------------------------------------------------------------------------------------------------|--------------|--------------|------------------------------------------------------------------------| +| **Qwen-vl** | Qwen VL for real-world multi-modal function calling. | $5/1M Tokens | $10/1M Tokens | Multi-modal interactions and function handling in complex environments.| +| **XComposer2-4khd-7b** | One of the highest performing VLMs (Video Language Models). | $4/1M Tokens | $8/1M Tokens | High-resolution video processing and understanding. | + + +## What models should we add? +[Book a call with us to learn more about your needs:](https://calendly.com/swarm-corp/30min) diff --git a/docs_edit/swarms_cloud/getting_started.md b/docs_edit/swarms_cloud/getting_started.md new file mode 100644 index 00000000..5fb114ac --- /dev/null +++ b/docs_edit/swarms_cloud/getting_started.md @@ -0,0 +1,94 @@ +# Getting Started with State-of-the-Art Vision Language Models (VLMs) Using the Swarms API + +The intersection of vision and language tasks within the field of artificial intelligence has led to the emergence of highly sophisticated models known as Vision Language Models (VLMs). These models leverage the capabilities of both computer vision and natural language processing to provide a more nuanced understanding of multimodal inputs. In this blog post, we will guide you through the process of integrating state-of-the-art VLMs available through the Swarms API, focusing particularly on models like "internlm-xcomposer2-4khd", which represents a blend of high-performance language and visual understanding. + +#### What Are Vision Language Models? + +Vision Language Models are at the frontier of integrating visual data processing with text analysis. These models are trained on large datasets that include both images and their textual descriptions, learning to correlate visual elements with linguistic context. The result is a model that can not only recognize objects in an image but also generate descriptive, context-aware text, answer questions about the image, and even engage in a dialogue about its content. + +#### Why Use Swarms API for VLMs? + +Swarms API provides access to several cutting-edge VLMs including the "internlm-xcomposer2-4khd" model. This API is designed for developers looking to seamlessly integrate advanced multimodal capabilities into their applications without the need for extensive machine learning expertise or infrastructure. Swarms API is robust, scalable, and offers state-of-the-art models that are continuously updated to leverage the latest advancements in AI research. + +#### Prerequisites + +Before diving into the technical setup, ensure you have the following: +- An active account with Swarms API to obtain an API key. +- Python installed on your machine (Python 3.6 or later is recommended). +- An environment where you can install packages and run Python scripts (like Visual Studio Code, Jupyter Notebook, or simply your terminal). + +#### Setting Up Your Environment + +First, you'll need to install the `OpenAI` Python library if it's not already installed: + +```bash +pip install openai +``` + +#### Integrating the Swarms API + +Here’s a basic guide on how to set up the Swarms API in your Python environment: + +1. **API Key Configuration**: + Start by setting up your API key and base URL. Replace `"your_swarms_key"` with the actual API key you obtained from Swarms. + + ```python + from openai import OpenAI + + openai_api_key = "your_swarms_key" + openai_api_base = "https://api.swarms.world/v1" + ``` + +2. **Initialize Client**: + Initialize your OpenAI client with the provided API key and base URL. + + ```python + client = OpenAI( + api_key=openai_api_key, + base_url=openai_api_base, + ) + ``` + +3. **Creating a Chat Completion**: + To use the VLM, you’ll send a request to the API with a multimodal input consisting of both an image and a text query. The following example shows how to structure this request: + + ```python + chat_response = client.chat.completions.create( + model="internlm-xcomposer2-4khd", + messages=[ + { + "role": "user", + "content": [ + { + "type": "image_url", + "image_url": { + "url": "https://upload.wikimedia.org/wikipedia/commons/thumb/d/dd/Gfp-wisconsin-madison-the-nature-boardwalk.jpg/2560px-Gfp-wisconsin-madison-the-nature-boardwalk.jpg", + }, + }, + {"type": "text", "text": "What's in this image?"}, + ] + } + ], + ) + print("Chat response:", chat_response) + ``` + + This code sends a multimodal query to the model, which includes an image URL followed by a text question regarding the image. + +#### Understanding the Response + +The response from the API will include details generated by the model about the image based on the textual query. This could range from simple descriptions to complex narratives, depending on the model’s capabilities and the nature of the question. + +#### Best Practices + +- **Data Privacy**: Always ensure that the images and data you use comply with privacy laws and regulations. +- **Error Handling**: Implement robust error handling to manage potential issues during API calls. +- **Model Updates**: Keep track of updates to the Swarms API and model improvements to leverage new features and improved accuracies. + +#### Conclusion + +Integrating VLMs via the Swarms API opens up a plethora of opportunities for developers to create rich, interactive, and intelligent applications that understand and interpret the world not just through text but through visuals as well. Whether you’re building an educational tool, a content management system, or an interactive chatbot, these models can significantly enhance the way users interact with your application. + +As you embark on your journey to integrate these powerful models into your projects, remember that the key to successful implementation lies in understanding the capabilities and limitations of the technology, continually testing with diverse data, and iterating based on user feedback and technological advances. + +Happy coding, and here’s to building more intelligent, multimodal applications! \ No newline at end of file diff --git a/docs_edit/swarms_cloud/main.md b/docs_edit/swarms_cloud/main.md new file mode 100644 index 00000000..d54451a4 --- /dev/null +++ b/docs_edit/swarms_cloud/main.md @@ -0,0 +1,352 @@ +# Swarm Cloud API Reference + +## Overview + +The AI Chat Completion API processes text and image inputs to generate conversational responses. It supports various configurations to customize response behavior and manage input content. + +## API Endpoints + +### Chat Completion URL +`https://api.swarms.world` + + + +- **Endpoint:** `/v1/chat/completions` +-- **Full Url** `https://api.swarms.world/v1/chat/completions` +- **Method:** POST +- **Description:** Generates a response based on the provided conversation history and parameters. + +#### Request Parameters + +| Parameter | Type | Description | Required | +|---------------|--------------------|-----------------------------------------------------------|----------| +| `model` | string | The AI model identifier. | Yes | +| `messages` | array of objects | A list of chat messages, including the sender's role and content. | Yes | +| `temperature` | float | Controls randomness. Lower values make responses more deterministic. | No | +| `top_p` | float | Controls diversity. Lower values lead to less random completions. | No | +| `max_tokens` | integer | The maximum number of tokens to generate. | No | +| `stream` | boolean | If set to true, responses are streamed back as they're generated. | No | + +#### Response Structure + +- **Success Response Code:** `200 OK` + +```markdown +{ + "model": string, + "object": string, + "choices": array of objects, + "usage": object +} +``` + +### List Models + +- **Endpoint:** `/v1/models` +- **Method:** GET +- **Description:** Retrieves a list of available models. + +#### Response Structure + +- **Success Response Code:** `200 OK` + +```markdown +{ + "data": array of objects +} +``` + +## Objects + +### Request + +| Field | Type | Description | Required | +|-----------|---------------------|-----------------------------------------------|----------| +| `role` | string | The role of the message sender. | Yes | +| `content` | string or array | The content of the message. | Yes | +| `name` | string | An optional name identifier for the sender. | No | + +### Response + +| Field | Type | Description | +|-----------|--------|------------------------------------| +| `index` | integer| The index of the choice. | +| `message` | object | A `ChatMessageResponse` object. | + +#### UsageInfo + +| Field | Type | Description | +|-------------------|---------|-----------------------------------------------| +| `prompt_tokens` | integer | The number of tokens used in the prompt. | +| `total_tokens` | integer | The total number of tokens used. | +| `completion_tokens`| integer| The number of tokens used for the completion. | + +## Example Requests + +### Text Chat Completion + +```json +POST /v1/chat/completions +{ + "model": "cogvlm-chat-17b", + "messages": [ + { + "role": "user", + "content": "Hello, world!" + } + ], + "temperature": 0.8 +} +``` + +### Image and Text Chat Completion + +```json +POST /v1/chat/completions +{ + "model": "cogvlm-chat-17b", + "messages": [ + { + "role": "user", + "content": [ + { + "type": "text", + "text": "Describe this image" + }, + { + "type": "image_url", + "image_url": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD..." + } + ] + } + ], + "temperature": 0.8, + "top_p": 0.9, + "max_tokens": 1024 +} +``` + +## Error Codes + +The API uses standard HTTP status codes to indicate the success or failure of an API call. + +| Status Code | Description | +|-------------|-----------------------------------| +| 200 | OK - The request has succeeded. | +| 400 | Bad Request - Invalid request format. | +| 500 | Internal Server Error - An error occurred on the server. | + + +## Examples in Various Languages + +### Python +```python +import requests +import base64 +from PIL import Image +from io import BytesIO + + +# Convert image to Base64 +def image_to_base64(image_path): + with Image.open(image_path) as image: + buffered = BytesIO() + image.save(buffered, format="JPEG") + img_str = base64.b64encode(buffered.getvalue()).decode("utf-8") + return img_str + + +# Replace 'image.jpg' with the path to your image +base64_image = image_to_base64("your_image.jpg") +text_data = {"type": "text", "text": "Describe what is in the image"} +image_data = { + "type": "image_url", + "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}, +} + +# Construct the request data +request_data = { + "model": "cogvlm-chat-17b", + "messages": [{"role": "user", "content": [text_data, image_data]}], + "temperature": 0.8, + "top_p": 0.9, + "max_tokens": 1024, +} + +# Specify the URL of your FastAPI application +url = "https://api.swarms.world/v1/chat/completions" + +# Send the request +response = requests.post(url, json=request_data) +# Print the response from the server +print(response.text) +``` + +### Example API Request in Node +```js +const fs = require('fs'); +const https = require('https'); +const sharp = require('sharp'); + +// Convert image to Base64 +async function imageToBase64(imagePath) { + try { + const imageBuffer = await sharp(imagePath).jpeg().toBuffer(); + return imageBuffer.toString('base64'); + } catch (error) { + console.error('Error converting image to Base64:', error); + } +} + +// Main function to execute the workflow +async function main() { + const base64Image = await imageToBase64("your_image.jpg"); + const textData = { type: "text", text: "Describe what is in the image" }; + const imageData = { + type: "image_url", + image_url: { url: `data:image/jpeg;base64,${base64Image}` }, + }; + + // Construct the request data + const requestData = JSON.stringify({ + model: "cogvlm-chat-17b", + messages: [{ role: "user", content: [textData, imageData] }], + temperature: 0.8, + top_p: 0.9, + max_tokens: 1024, + }); + + const options = { + hostname: 'api.swarms.world', + path: '/v1/chat/completions', + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Content-Length': requestData.length, + }, + }; + + const req = https.request(options, (res) => { + let responseBody = ''; + + res.on('data', (chunk) => { + responseBody += chunk; + }); + + res.on('end', () => { + console.log('Response:', responseBody); + }); + }); + + req.on('error', (error) => { + console.error(error); + }); + + req.write(requestData); + req.end(); +} + +main(); +``` + +### Example API Request in Go + +```go +package main + +import ( + "bytes" + "encoding/base64" + "encoding/json" + "fmt" + "image" + "image/jpeg" + _ "image/png" // Register PNG format + "io" + "net/http" + "os" +) + +// imageToBase64 converts an image to a Base64-encoded string. +func imageToBase64(imagePath string) (string, error) { + file, err := os.Open(imagePath) + if err != nil { + return "", err + } + defer file.Close() + + img, _, err := image.Decode(file) + if err != nil { + return "", err + } + + buf := new(bytes.Buffer) + err = jpeg.Encode(buf, img, nil) + if err != nil { + return "", err + } + + return base64.StdEncoding.EncodeToString(buf.Bytes()), nil +} + +// main is the entry point of the program. +func main() { + base64Image, err := imageToBase64("your_image.jpg") + if err != nil { + fmt.Println("Error converting image to Base64:", err) + return + } + + requestData := map[string]interface{}{ + "model": "cogvlm-chat-17b", + "messages": []map[string]interface{}{ + { + "role": "user", + "content": []map[string]string{{"type": "text", "text": "Describe what is in the image"}, {"type": "image_url", "image_url": {"url": fmt.Sprintf("data:image/jpeg;base64,%s", base64Image)}}}, + }, + }, + "temperature": 0.8, + "top_p": 0.9, + "max_tokens": 1024, + } + + requestBody, err := json.Marshal(requestData) + if err != nil { + fmt.Println("Error marshaling request data:", err) + return + } + + url := "https://api.swarms.world/v1/chat/completions" + request, err := http.NewRequest("POST", url, bytes.NewBuffer(requestBody)) + if err != nil { + fmt.Println("Error creating request:", err) + return + } + + request.Header.Set("Content-Type", "application/json") + + client := &http.Client{} + response, err := client.Do(request) + if err != nil { + fmt.Println("Error sending request:", err) + return + } + defer response.Body.Close() + + responseBody, err := io.ReadAll(response.Body) + if err != nil { + fmt.Println("Error reading response body:", err) + return + } + + fmt.Println("Response:", string(responseBody)) +} +``` + + + + + +## Conclusion + +This API reference provides the necessary details to understand and interact with the AI Chat Completion API. By following the outlined request and response formats, users can integrate this API into their applications to generate dynamic and contextually relevant conversational responses. \ No newline at end of file diff --git a/docs_edit/swarms_cloud/migrate_openai.md b/docs_edit/swarms_cloud/migrate_openai.md new file mode 100644 index 00000000..23718eec --- /dev/null +++ b/docs_edit/swarms_cloud/migrate_openai.md @@ -0,0 +1,82 @@ +**Quickstart** + +## Migrate from OpenAI to Swarms in 3 lines of code +If you’ve been using GPT-3.5 or GPT-4, switching to Swarms is easy! + +Swarms VLMs are available to use through our OpenAI compatible API. Additionally, if you have been building or prototyping using OpenAI’s Python SDK you can keep your code as-is and use Swarms’s VLMs models. + +In this example, we will show you how to change just three lines of code to make your Python application use Swarms’s Open Source models through OpenAI’s Python SDK. + +​ +## Getting Started +Migrate OpenAI’s Python SDK example script to use Swarms’s LLM endpoints. + +These are the three modifications necessary to achieve our goal: + +Redefine OPENAI_API_KEY your API key environment variable to use your Swarms key. + +Redefine OPENAI_BASE_URL to point to `https://api.swarms.world/v1/chat/completions` + +Change the model name to an Open Source model, for example: cogvlm-chat-17b +​ +## Requirements +We will be using Python and OpenAI’s Python SDK. +​ +## Instructions +Set up a Python virtual environment. Read Creating Virtual Environments here. + +```sh +python3 -m venv .venv +source .venv/bin/activate +``` + +Install the pip requirements in your local python virtual environment + +`python3 -m pip install openai` +​ +## Environment setup +To run this example, there are simple steps to take: + +Get an Swarms API token by following these instructions. +Expose the token in a new SWARMS_API_TOKEN environment variable: + +`export SWARMS_API_TOKEN=` + +Switch the OpenAI token and base URL environment variable + +`export OPENAI_API_KEY=$SWARMS_API_TOKEN` +`export OPENAI_BASE_URL="https://api.swarms.world/v1/chat/completions"` + +If you prefer, you can also directly paste your token into the client initialization. + +​ +## Example code +Once you’ve completed the steps above, the code below will call Swarms LLMs: + +```python +from openai import OpenAI + +client = OpenAI() + +completion = client.chat.completions.create( + model="cogvlm-chat-17b", + messages=[ + {"role": "system", "content": "You are a helpful assistant."}, + {"role": "user", "content": "Hello!"}, + ], +) + +print(completion.choices[0].message) +```  + +Note that you need to supply one of Swarms’s supported LLMs as an argument, as in the example above. For a complete list of our supported LLMs, check out our REST API page. + +​ +## Example output +The code above produces the following object: + +``` +ChatCompletionMessage(content=" Hello! How can I assist you today? Do you have any questions or tasks you'd like help with? Please let me know and I'll do my best to assist you.", role='assistant' function_call=None, tool_calls=None) +``` + + diff --git a/docs_edit/swarms_cloud/production_deployment.md b/docs_edit/swarms_cloud/production_deployment.md new file mode 100644 index 00000000..749e0530 --- /dev/null +++ b/docs_edit/swarms_cloud/production_deployment.md @@ -0,0 +1,319 @@ +# Enterprise Guide to High-Performance Multi-Agent LLM Deployments +------- + +As large language models (LLMs) continue to advance and enable a wide range of powerful applications, enterprises are increasingly exploring multi-agent architectures to leverage the collective capabilities of multiple LLMs. However, coordinating and optimizing the performance of these complex multi-agent systems presents significant challenges. + +This comprehensive guide provides enterprise architects, engineering leaders, and technical decision-makers with a strategic framework for maximizing performance across multi-agent LLM deployments. Developed through extensive research and collaboration with industry partners, this guide distills best practices, proven techniques, and cutting-edge methodologies into seven core principles. + +By implementing the recommendations outlined in this guide, organizations can achieve superior latency, throughput, and resource utilization while ensuring scalability, cost-effectiveness, and optimal user experiences. Whether powering customer-facing conversational agents, driving internal knowledge management systems, or fueling mission-critical decision support tools, high-performance multi-agent LLM deployments will be pivotal to unlocking the full potential of this transformative technology. + +## Introduction + +The rise of large language models (LLMs) has ushered in a new era of human-machine interaction, enabling enterprises to develop sophisticated natural language processing (NLP) applications that can understand, generate, and reason with human-like text. However, as the complexity and scale of LLM deployments grow, traditional monolithic architectures are increasingly challenged to meet the stringent performance, scalability, and cost requirements of enterprise environments. + +Multi-agent architectures, which coordinate the collective capabilities of multiple specialized LLMs, have emerged as a powerful paradigm for addressing these challenges. By distributing workloads across a cohort of agents, each optimized for specific tasks or domains, multi-agent systems can deliver superior performance, resilience, and adaptability compared to single-model solutions. + +However, realizing the full potential of multi-agent LLM deployments requires a strategic approach to system design, optimization, and ongoing management. This guide presents a comprehensive framework for maximizing performance across seven core principles, each underpinned by a range of proven techniques and methodologies. + +Whether you are architecting a customer-facing conversational agent, building an internal knowledge management platform, or developing a mission-critical decision support system, this guide will equip you with the insights and best practices necessary to unlock the full potential of multi-agent LLM deployments within your enterprise. + +## Principle 1: Distribute Token Processing +---------------------------------------- + +At the heart of every LLM deployment lies the fundamental challenge of optimizing token processing -- the rate at which the model consumes and generates text inputs and outputs. In multi-agent architectures, distributing and parallelizing token processing across multiple agents is a critical performance optimization strategy. + +### Agent Specialization + +One of the key advantages of multi-agent architectures is the ability to dedicate specific agents to specialized tasks or domains. By carefully matching agents to the workloads they are optimized for, enterprises can maximize overall throughput and minimize latency. + +For example, in a conversational agent deployment, one agent may be optimized for intent recognition and query understanding, while another is fine-tuned for generating coherent, context-aware responses. In a document processing pipeline, separate agents could be dedicated to tasks such as named entity recognition, sentiment analysis, and summarization. + +To effectively leverage agent specialization, enterprises should: + +- Conduct a thorough analysis of their application's workflow and identify distinct tasks or domains that could benefit from dedicated agents. +- Evaluate the strengths and weaknesses of available LLM models and agents, and map them to the identified tasks or domains based on their capabilities and performance characteristics. +- Implement continuous monitoring and performance tuning processes to ensure agents remain optimized for their assigned workloads as models evolve and domain requirements shift. + +### Load Balancing + +Even with a well-designed allocation of tasks across specialized agents, fluctuations in workload and demand can create bottlenecks and performance degradation. Effective load balancing strategies are essential to ensure that token processing capacity is dynamically distributed across available agents based on real-time conditions. + +Load balancing in multi-agent LLM deployments can be accomplished through a combination of techniques, including: + +- **Round-Robin**: Distributing incoming requests across agents in a cyclical fashion, ensuring an even distribution of workload. +- **Least Connections**: Routing requests to the agent with the fewest active connections or outstanding tasks, minimizing the risk of overloading any single agent. +- **Response Time Monitoring**: Continuously monitoring the response times of each agent and dynamically adjusting request routing to favor faster-responding agents. +- **Resource-Based Routing**: Factoring in agent-level resource consumption (e.g., CPU, memory) when making routing decisions, ensuring that overloaded agents are relieved of additional workload. + +Implementing effective load balancing requires careful consideration of the specific characteristics and requirements of your multi-agent deployment, as well as the integration of robust monitoring and analytics capabilities to inform dynamic routing decisions. + +### Horizontal Scaling + +While load balancing optimizes the utilization of existing agent resources, horizontal scaling strategies enable organizations to dynamically provision additional token processing capacity to meet demand spikes or handle larger overall workloads. + +In multi-agent LLM deployments, horizontal scaling can be achieved through: + +- **Agent Replication**: Spin up additional instances of existing agents to increase parallel processing capacity for specific tasks or domains. +- **Hybrid Scaling**: Combine agent replication with the dynamic provisioning of additional compute resources (e.g., CPU, GPU) to support the increased agent count. +- **Serverless Deployment**: Leverage serverless computing platforms (e.g., AWS Lambda, Google Cloud Functions) to automatically scale agent instances based on real-time demand, minimizing idle resource consumption. + +Effective horizontal scaling requires robust orchestration and management capabilities, as well as seamless integration with load balancing mechanisms to ensure that incoming workloads are efficiently distributed across the dynamically scaled agent pool. + +## Principle 2: Optimize Agent Communication +----------------------------------------- + +In multi-agent LLM deployments, efficient inter-agent communication is crucial for coordinating tasks, exchanging context and intermediate results, and maintaining overall system coherence. However, communication overhead can quickly become a performance bottleneck if not carefully managed. + +### Minimizing Overhead + +Reducing the volume and complexity of information exchanged between agents is a key strategy for optimizing communication performance. Techniques for minimizing overhead include: + +- **Data Compression**: Applying lossless or lossy compression algorithms to reduce the size of data payloads exchanged between agents, lowering bandwidth requirements and transmission latencies. +- **Information Summarization**: Distilling and summarizing context, results, or other data exchanged between agents to its essential elements, minimizing redundant or non-critical information. +- **Differential Updates**: Rather than transmitting entire data payloads, agents can exchange only the differential updates or deltas required to synchronize their respective states. + +Implementing these techniques requires careful analysis of the specific data exchange patterns and communication requirements within your multi-agent deployment, as well as the integration of appropriate compression, summarization, and differential update algorithms. + +### Prioritizing Critical Information + +In scenarios where communication bandwidth or latency constraints cannot be fully alleviated through overhead reduction techniques, enterprises can prioritize the exchange of critical information over non-essential data. + +This can be achieved through: + +- **Prioritized Queuing**: Implementing queuing mechanisms that prioritize the transmission of high-priority, time-sensitive data over lower-priority, non-critical information. +- **Selective Communication**: Dynamically determining which agents require specific pieces of information based on their roles and responsibilities, and selectively transmitting data only to those agents that truly need it. +- **Progressive Information Exchange**: Exchanging information in a progressive or staged manner, with critical elements transmitted first, followed by supplementary or contextual data as bandwidth becomes available. + +Effective prioritization requires a deep understanding of the interdependencies and information flow within your multi-agent system, as well as the ability to dynamically assess and prioritize data based on its criticality and urgency. + +### Caching and Reusing Context + +In many multi-agent LLM deployments, agents frequently exchange or operate on shared context, such as user profiles, conversation histories, or domain-specific knowledge bases. Caching and reusing this context information can significantly reduce redundant communication and processing overhead. + +Strategies for optimizing context caching and reuse include: + +- **Agent-Level Caching**: Implementing caching mechanisms within individual agents to store and retrieve frequently accessed context data, minimizing the need for inter-agent communication. +- **Centralized Context Management**: Deploying a dedicated context management service or data store that agents can query and update, ensuring consistent access to the latest context information across the system. +- **Context Versioning and Invalidation**: Implementing versioning and invalidation mechanisms to ensure that cached context data remains fresh and consistent, avoiding stale or outdated information from propagating through the system. + + +### Principle 3: Leverage Agent Specialization +------------------------------------------ + +One of the key advantages of multi-agent architectures is the ability to optimize individual agents for specific tasks, domains, or capabilities. By leveraging agent specialization, enterprises can ensure that each component of their LLM system is finely tuned for maximum performance and quality. + +### Task-Specific Optimization + +Within a multi-agent LLM deployment, different agents may be responsible for distinct tasks such as language understanding, knowledge retrieval, response generation, or post-processing. Optimizing each agent for its designated task can yield significant performance gains and quality improvements. + +Techniques for task-specific optimization include: + +- **Prompt Engineering**: Crafting carefully designed prompts that provide the necessary context, instructions, and examples to guide an agent towards optimal performance for its assigned task. +- **Fine-Tuning**: Adapting a pre-trained LLM to a specific task or domain by fine-tuning it on a curated dataset, allowing the agent to specialize and improve its performance on that particular workload. +- **Model Distillation**: Transferring the knowledge and capabilities of a larger, more capable LLM into a smaller, more efficient model specialized for a specific task, balancing performance and quality trade-offs. + +Implementing these optimization techniques requires a deep understanding of the capabilities and requirements of each task within your multi-agent system, as well as access to relevant training data and computational resources for fine-tuning and distillation processes. + +### Domain Adaptation + +Many enterprise applications operate within specific domains or verticals, such as finance, healthcare, or legal. Adapting agents to these specialized domains can significantly improve their performance, accuracy, and compliance within the target domain. + +Strategies for domain adaptation include: + +- **Domain-Specific Pre-Training**: Leveraging domain-specific corpora to pre-train LLM agents, imbuing them with a foundational understanding of the language, concepts, and nuances specific to the target domain. +- **Transfer Learning**: Fine-tuning agents that have been pre-trained on general or adjacent domains, transferring their existing knowledge and capabilities to the target domain while optimizing for its specific characteristics. +- **Domain Persona Injection**: Injecting domain-specific personas, traits, or constraints into agents during fine-tuning or deployment, shaping their behavior and outputs to align with domain-specific norms and requirements. + +Effective domain adaptation requires access to high-quality, domain-specific training data, as well as close collaboration with subject matter experts to ensure that agents are properly calibrated to meet the unique demands of the target domain. + +### Ensemble Techniques + +In complex multi-agent deployments, individual agents may excel at specific subtasks or aspects of the overall workflow. Ensemble techniques that combine the outputs or predictions of multiple specialized agents can often outperform any single agent, leveraging the collective strengths of the ensemble. + +Common ensemble techniques for multi-agent LLM systems include: + +- **Voting**: Combining the outputs or predictions of multiple agents through majority voting, weighted voting, or other consensus mechanisms. +- **Stacking**: Training a meta-agent to combine and optimize the outputs of multiple base agents, effectively learning to leverage their collective strengths. +- **Blending**: Combining the outputs of multiple agents through weighted averaging, linear interpolation, or other blending techniques, allowing for nuanced integration of diverse perspectives. + +Implementing effective ensemble techniques requires careful analysis of the strengths, weaknesses, and complementary capabilities of individual agents, as well as the development of robust combination strategies that can optimally leverage the ensemble's collective intelligence. + +### Principle 4: Implement Dynamic Scaling +-------------------------------------- + +The demand and workload patterns of enterprise LLM deployments can be highly dynamic, with significant fluctuations driven by factors such as user activity, data ingestion schedules, or periodic batch processing. Implementing dynamic scaling strategies allows organizations to optimally provision and allocate resources in response to these fluctuations, ensuring consistent performance while minimizing unnecessary costs. + +### Autoscaling + +Autoscaling is a core capability that enables the automatic adjustment of compute resources (e.g., CPU, GPU, memory) and agent instances based on real-time demand patterns and workload metrics. By dynamically scaling resources up or down, enterprises can maintain optimal performance and resource utilization, avoiding both over-provisioning and under-provisioning scenarios. + +Effective autoscaling in multi-agent LLM deployments requires: + +- **Monitoring and Metrics**: Implementing robust monitoring and metrics collection mechanisms to track key performance indicators (KPIs) such as request rates, response times, resource utilization, and agent-level metrics. +- **Scaling Policies**: Defining scaling policies that specify the conditions and thresholds for triggering automatic scaling actions, such as provisioning additional agents or compute resources when certain KPIs are breached. +- **Scaling Orchestration**: Integrating autoscaling capabilities with resource orchestration and management tools (e.g., Kubernetes, AWS Auto Scaling) to seamlessly provision, configure, and integrate new resources into the existing multi-agent deployment. + +By automating the scaling process, enterprises can respond rapidly to workload fluctuations, ensuring consistent performance and optimal resource utilization without the need for manual intervention. + +### Spot Instance Utilization + +Many cloud providers offer spot instances or preemptible resources at significantly discounted prices compared to on-demand or reserved instances. While these resources may be reclaimed with little notice, they can be leveraged judiciously within multi-agent LLM deployments to reduce operational costs. + +Strategies for leveraging spot instances include: + +- **Fault-Tolerant Agent Deployment**: Deploying certain agents or components of the multi-agent system on spot instances, while ensuring that these components can be rapidly and seamlessly replaced or migrated in the event of instance preemption. +- **Batch Workload Offloading**: Offloading batch processing workloads or non-time-sensitive tasks to spot instances, leveraging their cost-effectiveness while minimizing the impact of potential disruptions. +- **Hybrid Provisioning**: Implementing a hybrid approach that combines on-demand or reserved instances for mission-critical components with spot instances for more flexible or elastic workloads. + +Effective spot instance utilization requires careful architectural considerations to ensure fault tolerance and minimize the impact of potential disruptions, as well as robust monitoring and automation capabilities to seamlessly replace or migrate workloads in response to instance preemption events. + +### Serverless Deployments + +Serverless computing platforms, such as AWS Lambda, Google Cloud Functions, or Azure Functions, offer a compelling alternative to traditional server-based deployments. By automatically scaling compute resources based on real-time demand and charging only for the resources consumed, serverless architectures can provide significant cost savings and operational simplicity. + +Leveraging serverless deployments for multi-agent LLM systems can be achieved through: + +- **Function-as-a-Service (FaaS) Agents**: Deploying individual agents or components of the multi-agent system as serverless functions, allowing for rapid and automatic scaling in response to fluctuating workloads. +- **Event-Driven Architectures**: Designing the multi-agent system to operate in an event-driven manner, with agents triggered and executed in response to specific events or data ingestion, aligning with the serverless execution model. +- **Hybrid Deployments**: Combining serverless components with traditional server-based components, leveraging the strengths and cost advantages of each deployment model for different aspects of the multi-agent system. + +Adopting serverless architectures requires careful consideration of factors such as execution duration limits, cold start latencies, and integration with other components of the multi-agent deployment. However, when implemented effectively, serverless deployments can provide unparalleled scalability, cost-efficiency, and operational simplicity for dynamic, event-driven workloads. + + +### Principle 5: Employ Selective Execution +--------------------------------------- + +Not every input or request within a multi-agent LLM deployment requires the full execution of all agents or the complete processing pipeline. Selectively invoking agents or tasks based on input characteristics or intermediate results can significantly optimize performance by avoiding unnecessary computation and resource consumption. + +### Input Filtering + +Implementing input filtering mechanisms allows enterprises to reject or bypass certain inputs before they are processed by the multi-agent system. This can be achieved through techniques such as: + +- **Blacklisting/Whitelisting**: Maintaining lists of inputs (e.g., specific phrases, URLs, or content types) that should be automatically rejected or allowed, based on predefined criteria. +- **Rules-Based Filtering**: Defining a set of rules or heuristics to assess the suitability or relevance of an input for further processing, based on factors such as language, content, or metadata. +- **Confidence Thresholding**: Leveraging pre-processing agents or models to assess the likelihood that an input is relevant or valuable, and filtering out inputs that fall below a predetermined confidence threshold. + +Effective input filtering requires careful consideration of the specific requirements, constraints, and objectives of your multi-agent deployment, as well as ongoing monitoring and adjustment of filtering rules and thresholds to maintain optimal performance and accuracy. + +### Early Stopping + +In many multi-agent LLM deployments, intermediate results or predictions generated by early-stage agents can be used to determine whether further processing is required or valuable. Early stopping mechanisms allow enterprises to terminate execution pipelines when specific conditions or thresholds are met, avoiding unnecessary downstream processing. + +Techniques for implementing early stopping include: + +- **Confidence-Based Stopping**: Monitoring the confidence scores or probabilities associated with intermediate results, and terminating execution if a predefined confidence threshold is exceeded. +- **Exception-Based Stopping**: Defining specific intermediate results or conditions that indicate that further processing is unnecessary or undesirable, and terminating execution upon encountering these exceptions. +- **Adaptive Stopping**: Employing machine learning models or reinforcement learning agents to dynamically determine when to terminate execution based on learned patterns and trade-offs between accuracy, latency, and resource consumption. + +Effective early stopping requires a deep understanding of the interdependencies and decision points within your multi-agent workflow, as well as careful tuning and monitoring to ensure that stopping conditions are calibrated to maintain an optimal balance between performance and accuracy. + +### Conditional Branching + +Rather than executing a linear, fixed pipeline of agents, conditional branching allows multi-agent systems to dynamically invoke different agents or execution paths based on input characteristics or intermediate results. This can significantly optimize resource utilization by ensuring that only the necessary agents and processes are executed for a given input or scenario. + +Implementing conditional branching involves: + +- **Decision Points**: Identifying key points within the multi-agent workflow where branching decisions can be made based on input or intermediate data. +- **Branching Logic**: Defining the rules, conditions, or machine learning models that will evaluate the input or intermediate data and determine the appropriate execution path or agent invocation. +- **Execution Routing**: Integrating mechanisms to dynamically route inputs or intermediate data to the appropriate agents or processes based on the branching decision. + +Conditional branching can be particularly effective in scenarios where inputs or workloads exhibit distinct characteristics or require significantly different processing pipelines, allowing enterprises to optimize resource allocation and minimize unnecessary computation. + +### Principle 6: Optimize User Experience +------------------------------------- + +While many of the principles outlined in this guide focus on optimizing backend performance and resource utilization, delivering an exceptional user experience is also a critical consideration for enterprise multi-agent LLM deployments. By minimizing perceived wait times and providing real-time progress updates, organizations can ensure that users remain engaged and satisfied, even during periods of high workload or resource constraints. + +### Streaming Responses + +One of the most effective techniques for minimizing perceived wait times is to stream responses or outputs to users as they are generated, rather than waiting for the entire response to be completed before delivering it. This approach is particularly valuable in conversational agents, document summarization, or other scenarios where outputs can be naturally segmented and delivered incrementally. + +Implementing streaming responses requires: + +- **Partial Output Generation**: Modifying agents or models to generate and emit outputs in a streaming or incremental fashion, rather than producing the entire output in a single, monolithic operation. +- **Streaming Data Pipelines**: Integrating streaming data pipelines and message queues to enable the efficient and reliable transmission of partial outputs from agents to user-facing interfaces or applications. +- **Incremental Rendering**: Updating user interfaces and displays to incrementally render or populate with newly streamed output segments, providing a seamless and real-time experience for end-users. + +By delivering outputs as they are generated, streaming responses can significantly improve the perceived responsiveness and interactivity of multi-agent LLM deployments, even in scenarios where the overall processing time remains unchanged. + +### Progress Indicators + +In cases where streaming responses may not be feasible or appropriate, providing visual or textual indicators of ongoing processing and progress can help manage user expectations and improve the overall experience. Progress indicators can be implemented through techniques such as: + +- **Loader Animations**: Displaying simple animations or spinner graphics to indicate that processing is underway and provide a sense of activity and progress. +- **Progress Bars**: Rendering progress bars or completion indicators based on estimated or actual progress through multi-agent workflows or processing pipelines. +- **Status Updates**: Periodically updating user interfaces with textual status messages or descriptions of the current processing stage, providing users with a more detailed understanding of the system's activities. + +Effective progress indicators require careful integration with monitoring and telemetry capabilities to accurately track and communicate the progress of multi-agent workflows, as well as thoughtful user experience design to ensure that indicators are clear, unobtrusive, and aligned with user expectations. + +### Chunked Delivery + +In scenarios where outputs or responses cannot be effectively streamed or rendered incrementally, chunked delivery can provide a middle ground between delivering the entire output at once and streaming individual tokens or characters. By breaking larger outputs into smaller, more manageable chunks and delivering them individually, enterprises can improve perceived responsiveness and provide a more engaging user experience. + +Implementing chunked delivery involves: + +- **Output Segmentation**: Identifying logical breakpoints or segmentation boundaries within larger outputs, such as paragraphs, sections, or other structural elements. +- **Chunking Mechanisms**: Integrating mechanisms to efficiently break outputs into individual chunks and transmit or render them sequentially, with minimal delay between chunks. +- **Chunk Rendering**: Updating user interfaces or displays to seamlessly render or append new output chunks as they are received, providing a sense of continuous progress and minimizing the perception of extended waiting periods. + +Chunked delivery can be particularly effective in scenarios where outputs are inherently structured or segmented, such as document generation, report creation, or multi-step instructions or workflows. + +## Principle 7: Leverage Hybrid Approaches +--------------------------------------- + +While multi-agent LLM architectures offer numerous advantages, they should not be viewed as a one-size-fits-all solution. In many cases, combining LLM agents with traditional techniques, optimized components, or external services can yield superior performance, cost-effectiveness, and resource utilization compared to a pure LLM-based approach. + +### Task Offloading + +Certain tasks or subtasks within a larger multi-agent workflow may be more efficiently handled by dedicated, optimized components or external services, rather than relying solely on LLM agents. Task offloading involves identifying these opportunities and integrating the appropriate components or services into the overall architecture. + +Examples of task offloading in multi-agent LLM deployments include: + +- **Regular Expression Matching**: Offloading pattern matching or text extraction tasks to dedicated regular expression engines, which can often outperform LLM-based approaches in terms of speed and efficiency. +- **Structured Data Processing**: Leveraging specialized data processing engines or databases for tasks involving structured data, such as querying, filtering, or transforming tabular or relational data. +- **External APIs and Services**: Integrating with external APIs or cloud services for specific tasks, such as speech recognition, translation, or knowledge base lookup, leveraging the specialized capabilities and optimizations of these dedicated services. + +Effective task offloading requires a thorough understanding of the strengths and limitations of both LLM agents and traditional components, as well as careful consideration of integration points, data flows, and performance trade-offs within the overall multi-agent architecture. + +### Caching and Indexing + +While LLMs excel at generating dynamic, context-aware outputs, they can be less efficient when dealing with static or frequently accessed information or knowledge. Caching and indexing strategies can help mitigate this limitation by minimizing redundant LLM processing and enabling faster retrieval of commonly accessed data. + +Techniques for leveraging caching and indexing in multi-agent LLM deployments include: + +**Output Caching**: Caching the outputs or responses generated by LLM agents, allowing for rapid retrieval and reuse in cases where the same or similar input is encountered in the future. + +**Knowledge Base Indexing**: Indexing domain-specific knowledge bases, data repositories, or other static information sources using traditional search and information retrieval techniques. This allows LLM agents to efficiently query and incorporate relevant information into their outputs, without needing to process or generate this content from scratch. + +**Contextual Caching**: Caching not only outputs but also the contextual information and intermediate results generated during multi-agent workflows. This enables more efficient reuse and continuation of previous processing in scenarios where contexts are long-lived or recurring. + +Implementing effective caching and indexing strategies requires careful consideration of data freshness, consistency, and invalidation mechanisms, as well as seamless integration with LLM agents and multi-agent workflows to ensure that cached or indexed data is appropriately leveraged and updated. + +### Pre-computation and Lookup + +In certain scenarios, especially those involving constrained or well-defined inputs, pre-computing and lookup strategies can be leveraged to minimize or entirely avoid the need for real-time LLM processing. By generating and storing potential outputs or responses in advance, enterprises can significantly improve performance and reduce resource consumption. + +Approaches for pre-computation and lookup include: + +**Output Pre-generation**: For inputs or scenarios with a limited set of potential outputs, pre-generating and storing all possible responses, allowing for rapid retrieval and delivery without the need for real-time LLM execution. + +**Retrieval-Based Responses**: Developing retrieval models or techniques that can identify and surface pre-computed or curated responses based on input characteristics, leveraging techniques such as nearest neighbor search, embedding-based retrieval, or example-based generation. + +**Hybrid Approaches**: Combining pre-computed or retrieved responses with real-time LLM processing, allowing for the generation of dynamic, context-aware content while still leveraging pre-computed components to optimize performance and resource utilization. + +Effective implementation of pre-computation and lookup strategies requires careful analysis of input patterns, output distributions, and potential performance gains, as well as robust mechanisms for managing and updating pre-computed data as application requirements or domain knowledge evolves. + +# Conclusion +---------- + +As enterprises increasingly embrace the transformative potential of large language models, optimizing the performance, scalability, and cost-effectiveness of these deployments has become a critical imperative. Multi-agent architectures, which coordinate the collective capabilities of multiple specialized LLM agents, offer a powerful paradigm for addressing these challenges. + +By implementing the seven principles outlined in this guide -- distributing token processing, optimizing agent communication, leveraging agent specialization, implementing dynamic scaling, employing selective execution, optimizing user experience, and leveraging hybrid approaches -- organizations can unlock the full potential of multi-agent LLM deployments. + +However, realizing these benefits requires a strategic and holistic approach that accounts for the unique requirements, constraints, and objectives of each enterprise. From task-specific optimizations and domain adaptation to dynamic scaling and user experience considerations, maximizing the performance of multi-agent LLM systems demands a deep understanding of the underlying technologies, as well as the ability to navigate the inherent complexities of these sophisticated architectures. + +To learn more about how Swarm Corporation can assist your organization in architecting, deploying, and optimizing high-performance multi-agent LLM solutions, we invite you to book a consultation with one of our agent specialists. Visit to schedule a 30-minute call and explore how our expertise and cutting-edge technologies can drive transformative outcomes for your business. + +In the rapidly evolving landscape of artificial intelligence and natural language processing, staying ahead of the curve is essential. Partner with Swarm Corporation, and unlock the full potential of multi-agent LLM deployments, today. + +[Book a call with us now:](https://calendly.com/swarm-corp/30min) \ No newline at end of file