+
+
+## Node
+Let's have a closer look of the workflow above. That whole process is simply made up of a few connected steps: **Uploading the image, Extracting the information, and Combining the results**.
+
+Each of these steps is called a **Node**.
+
+Think of them like runners in a relay race: each node has a specific task. Once it finishes its turn, it passes the baton to the next node in line.
+
+Dify offers you a box of ready-to-use nodes, such as the LLM, Knowledge Retrieval, If/Else, Tools, etc. You can connect these nodes just by dragging and dropping—it's like building with the Lego blocks! You can easily snap them together to create a powerful automated workflow.
+
+## It's Your Turn
+1. Go [Dify](https://dify.ai/) and click **Get Started** in the upper right corner.
+2. Click on Explore. This is a library which collects different workflow of different scenarios.
+
+
+
+
+3. Pick a template that looks like a right fit for you.Don't worry if you don't understand every setting yet—just look at how the nodes are connected.
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-02.mdx b/en/use-dify/tutorials/workflow-101/lesson-02.mdx
new file mode 100644
index 000000000..37a292b67
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-02.mdx
@@ -0,0 +1,178 @@
+---
+title: "Lesson 2: Head and Tail (Start & Output Node)"
+sidebarTitle: Lesson 2
+---
+
+In the last lesson, we compared a Workflow to a Recipe. Today, we are stepping into the professional kitchen to prep our ingredients (Start) and get our serving plates ready (Output).
+
+## Creating the App
+
+
+
+
+
+
+
+
+
+
+Remember the Nodes we learned in Lesson 1? The user input node you see on the canvas now is where everything begins.
+
+Every complete workflow relies on a basic skeleton: the Start Node (The Head) and the End Node (The Tail).
+
+## The Start Node
+
+
+
+
+
+The Start Node is the only entrance to your entire workflow. It's like the "Prep Ingredients" step in cooking. Its job is to define what information the workflow needs to receive from the user to get started.
+
+We just selected "User Input" as our Start Node.
+
+### Core Concept: Variables
+
+Inside the Start Node, you will see the word **Variable**. Don't panic! You can think of a variable as a **Storage Box with a Label**.
+
+Each box is designed to hold a specific type of information:
+
+For example, if you are building a "Travel Planner", you need the user to provide two pieces of information: `Destination` and `Travel Days`.
+
+User A might want to go to "Japan for 5 days". User B might want to go to "Paris for 3 days".
+
+Every user provides different content, so every time the app runs, the stuff inside these "boxes" changes.
+
+This is the meaning of a "Variable"—digging a hole for the user to fill, helping your workflow to handle different requests flexibly every time.
+
+## The End Node (Output)
+
+
+
+
+
+This is the finish line of the workflow. Think of it as Serving the Dish and it defines what the user actually sees at the very end.
+
+For example, remember that Travel Planner we talked about? If the user inputs Destination: Paris and Duration: 5 Days in the User Input Node. The Output Node is where the system finally hands over the result: "Here is your complete 5-Day Itinerary for Paris."
+
+
+
+
+ 2. In the popup, we will create two variables (two storage boxes):
+
+ **Variable 1 (For the Customer Name)**
+
+
+
+
+
+ - Field Type: Text (Short Text)
+ - Variable Name: `customer_name`
+ - Label Name: Customer Name
+ - Keep other options as default and click **Save**
+
+ **Variable 2 (For the Email Content)**
+
+
+
+
+
+ - Field Type: Click the dropdown and select **Paragraph** (Since emails are usually long, a Paragraph box is bigger and holds more text)
+ - Variable Name: `email_content`
+ - Label Name: Original Email
+ - Max Length: Manually change this to **2000** to ensure it fits long emails
+
+
+
+
+
+
+We have successfully built basic frame of the workflow. The empty space in the middle is where we will place the LLM (AI Brain) Node in the next lesson to process this information.
+
+## Mini Challenge
+
+**Task**: If you needed to create a Travel Plan Generator, what variables should the Start Node include?
+
+
+
+
+In Lesson 2, we set up the Ingredients (Start Node) and the Serving Plate (Output Node). If the Start Node is the prep cook, the LLM Node is the Master Chef. It is the brain and core of your workflow. It handles all the thinking, analyzing, and creative writing. Whether you want to summarize an article, write code, or draft an email, this is the node that does the heavy lifting.
+
+## Configure the Model
+
+Before getting started, we need to connect to a Model Provider.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### Key Concept: The Prompt (The Instructions)
+
+**What is a Prompt?** Think of the Prompt as the specific note you attach to the order ticket. It tells the AI exactly **what to do** and **how to do it**.
+
+The most critical part is the ability to use **Variables** from the Start Node directly within your Prompt. This allows the AI to adapt its output based on the different "raw materials" you provide each time.
+
+In Dify, when you insert a variable like `customer_name` into the prompt, you are telling the AI: _"Go and look in the box labeled Customer Name and use the text inside."_
+
+## Hands-On 2: Write the Prompt
+
+Now, let's apply this. We are going to write a prompt that mixes instructions with our variables.
+
+
+
+
+
+
+
+ 5. Using the same way, select **customer name** in the prompt and replace it with the `customer_name` variable.
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-04.mdx b/en/use-dify/tutorials/workflow-101/lesson-04.mdx
new file mode 100644
index 000000000..c08fc1dbe
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-04.mdx
@@ -0,0 +1,203 @@
+---
+title: "Lesson 4: The Cheat Sheet (Knowledge Retrieval)"
+sidebarTitle: Lesson 4
+---
+
+In the previous lessons, our AI email assistant can draft basic emails. But what if a customer asks about specific pricing plans or refund policy, the AI might start "Hallucinating"—which is a fancy way of saying it's "confidently making things up."
+
+How do we stop the AI from hallucination? We give it a Cheat Sheet.
+
+## What is Retrieval Augmented Generation (RAG)
+
+The technical name for this is RAG (Retrieval-Augmented Generation). Think of it as turning the AI from a chef who memorizes general recipes into a chef who has a Specific Cookbook right on the counter.
+
+It happens in three simple steps:
+
+**1. Retrieval (Find the Recipe)**
+
+When a user asks a question, the AI flips through your "Cookbook" (the files you uploaded) to find the most relevant pages.
+
+Example: Someone asks for "Grandma's Special Apple Pie." You go find that specific recipe page.
+
+**2. Augmentation (Prepare the Ingredients)**
+
+The AI takes that specific recipe and puts it right in front of its eyes so it doesn't have to rely on memory.
+
+Example: You lay the recipe on the counter and get the exact apples and cinnamon ready.
+
+**3. Generation (The Baking)**
+
+The AI writes the answer based only on the facts it just found.
+
+Example: You bake the pie exactly as the recipe says, ensuring it tastes like Grandma's, not a generic store-bought version.
+
+## The Knowledge Retrieval Node
+
+Think of this as placing a stack of reference materials right next to your AI Assistant. When a user asks a question, the AI first flips through this "Cheat Sheet" to find the most relevant pages. Then, it combines those findings with the user's original question to think of the best answer.
+
+In this practice, we will use the Knowledge Retrieval node to provide our AI Assistant with official "Cheat Sheets," ensuring its answers are always backed by facts!
+
+### Hands-On 1: Create the Knowledge Base
+
+
+
+
+ In Dify, you can sync from Notion or a website, but for today, let's upload a file from your device. Click [here](https://drive.google.com/file/d/1imExB0-rtwASbmKjg3zdu-FAqSSI7-7K/view) to download Dify Intro for the upload later.
+
+
+
+
+
+ **Index Method**
+
+ - **High Quality**: Use LLM model to process documents for more precise retrieval helps LLM generate high-quality answers
+ - **Economical**: Using 10 keywords per chunk for retrieval, no tokens are consumed at the expense of reduced retrieval accuracy
+
+
+
+
+
+
+
+ **Inverted Index**: This is the default structure Dify uses. Think of it like the Index at the back of a book—it lists key terms and tells Dify exactly which pages they appear on. This allows Dify to instantly jump to the right knowledge card based on keywords, rather than reading the whole book from start.
+
+ **Top K**: You'll see a slider set to 3. This tells Dify: "When the user asks a question, find the top 3 most relevant Knowledge Cards from the cookbook to show the AI." If you set it higher, the AI gets more context to read, but if it's too high, it might get overwhelmed with too much information.
+
+
+
+
+
+
+
+
+ Choose **What's Dify**, and click **Add**.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Mini Challenge
+
+1. What happens if a customer asks a question that isn't in the knowledge base?
+2. What kind of information could you upload as a knowledge base?
+3. Explore Chunk Structure, Index Method, and Retrieval Setting.
diff --git a/en/use-dify/tutorials/workflow-101/lesson-05.mdx b/en/use-dify/tutorials/workflow-101/lesson-05.mdx
new file mode 100644
index 000000000..28c0f9c3e
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-05.mdx
@@ -0,0 +1,163 @@
+---
+title: "Lesson 5: The Crossroads of Your Workflow (Sorting and Executing)"
+sidebarTitle: Lesson 5
+---
+
+Right now, our Email Assistant treats every message following the same path of the workflow. That's not smart enough. An email asking about Dify's price should be handled differently than an email on bug reporting.
+
+To make our assistant truly intelligent, we need to teach it how to "Read the Room." We're going to set up a Crossroads that sends different types of emails down different tracks.
+
+## The If/Else Node
+
+
+
+
+
+If/Else node is just like a traffic light. It checks a condition (like: "Does this email mention pricing?") and sends the flow left or right based on the result.
+
+### Hands-On 1: Set up the Crossroads
+
+Let's upgrade our assistant so it can tell the difference between "Dify-related" emails and "Everything else."
+
+
+
+
+ 3. The Logic: Keep it as **Contains**. Type **Dify** in the input box
+
+
+
+
+
+ Now, the complete logic for the IF branch is: "If the email content contains the word 'Dify'."
+
+
+
+**B. The Unrelated Email Track (ELSE Branch)**
+
+For emails that are not related or mention Dify, we want to create a simple, polite, and general reply process.
+
+1. Create a new Node: Click the **(+)** next to ELSE and select a new **LLM Node (LLM 2)**
+2. Add prompt to this LLM node in system, using the prompt below:
+
+```text
+You are a professional customer service manager. Based on the `{x} email_content`, kindly inform the user that no relevant information was found and provide relevant guidance.
+
+Requirements:
+1. Address the customer as `{x} customer_name}` in a friendly tone.
+2. Thank them for their letter.
+3. Keep the tone professional and friendly.
+4. Sign off as "Anne."
+```
+
+
+
+
+
+Now we have two tracks generating two different replies. Imagine if we had 10 tracks, our workflow would look like a messy plate of spaghetti. To keep things clean, we use a Variable Aggregator. Think of it as a Traffic Hub where all the different roads merge back into one main highway.
+
+## Variable Aggregator
+
+
+
+
+
+Variable Aggregator is like a traffic hub where all the different roads merge back into one main highway.
+
+### Hands-On 3: Add Variable Aggregator
+
+
+
+
+
+
+ Now, no matter which LLM node generates the response, the Variable Aggregator node gathers the content and hands it to the Output Node.
+
+
+
+ Here's how the workflow looks:
+
+
+
+
+
+
+
+You can take Parameter Extractor as a highly organized scout. It reads a paragraph of texts (like an email) and picks out the specific piece of information you asked for, putting them into a neat and organized list.
+
+### Hands-On 1: Add Parameter Extractor
+
+Before we upgrade the email assistant, let's remove these nodes: Knowledge Retrieval, If/Else, LLM, LLM 2, and Variable Aggregator.
+
+
+
+
+
+
+ Since AI doesn't automatically know which specific information we need from the email, we must tell it to collect all the questions.
+
+
+
+ **Parameter Types**
+
+ If Parameter Extractor is a scout, then Type is the bucket they use to carry the info. You need the right bucket for the right information.
+
+ **Single Items (The Small Buckets)**
+
+ - **String (Text)**: For a single piece of text, e.g. customer's name
+ - **Number**: For a single digit, e.g. order quantity
+ - **Boolean**: A simple Yes or No (True/False), good for a judgement result or a decision
+
+ **List Items (The Arrays)**
+
+ - **Array[String]**: Array means "List," and String means "Text." So, `Array[String]` means we are using a basket that can hold multiple pieces of text—like all the separate questions in an email
+ - **Array[Number]**: A container that holds different numbers, e.g. a list of prices or commodities
+ - **Array[Boolean]**: Used to store multiple "Yes/No" judgment results. For example, checking a list containing multiple to-do items and returning whether each item is completed, such as `[Yes, No, Yes]`
+ - **Array[Object]**: An advanced folder that holds sets of data (like a contact list where each entry has a Name and a Phone Number)
+
+
+
+
+
+With iteration, your assistant has a team of identical twins. When you hand over a list (like questions in the mail list), a twin appears for every single item on that list. Each twin takes their assigned item and performs the exact same task you've set up, ensuring nothing gets missed.
+
+### Hands-On 2: Set up Iteration Node
+
+
+
+
+ **Advanced Options in Iteration**
+
+ In the Iteration panel, you'll see more settings. Let's have a quick walk-through.
+
+
+
+
+
+ **Parallel Mode: OFF (Default)**: When disabled, the workflow processes each item in the list one after another (finish Question 1, then move to Question 2). When enabled, the workflow attempts to process all items in the list simultaneously (similar to 5 chefs cooking 5 different dishes at the same time).
+
+ **Error Response Method**: Terminate on error by default.
+ - **Terminate**: This means if any single item in the list (e.g., the 2nd question) fails during the sub-process, the entire workflow will stop immediately
+ - **Ignore Error and Continue**: This means even if the 2nd question fails, the workflow will skip it and move on to process the remaining questions
+ - **Remove Abnormal Output**: Similar to ignore, but it also removes that specific failed item from the final output list results
+
+ Back to the workflow, you'll see a sub-process area under the Iteration node. Every node inside this box will run once for every question.
+
+
+
+
+
+ Since the iteration node generates an answer for each individual question, we need to gather all these answers to create one complete reply email.
+
+
+
+
+
+
+
+
+
+
+
+Tools are the superpower for your AI workflow.
+
+The Dify Marketplace is like a Plugin Supermarket. It's filled with ready-made superpowers—searching Google, checking the weather, drawing images, or calculating complex math. You just install and plug them into your workflow with several clicks.
+
+Now, let's continue to upgrade on current workflow.
+
+### Hands-On 1: Upgrade the Sub-process Area in Iteration
+
+We are going to add a new logic to our assistant: Check the Knowledge Base first; if the answer isn't there, go search Google.
+
+To focus on the new logic, let's keep only these nodes: **User input, Parameter Extractor, and Iteration**.
+
+**Step 1: Knowledge Query and the Judge**
+
+1. **Enter the Iteration**
+
+ Click to enter the sub-process area of the Iteration node. Keep Knowledge Retrieval node, and make sure the query variable as `{x} item`. Delete the previous LLM node.
+
+2. **Add the Judge (LLM Node)**
+
+ Add an LLM node right after Knowledge Retrieval node. Its job is to decide if the Knowledge Base info can actually respond to the questions.
+
+ - **For Context session**: Select the `Knowledge Retrieval{x} result Array [Object]` from Knowledge Retrieval
+ - **System Prompt**:
+
+ ```text
+ Based on the context, determine if it contains enough information to answer `Iteration/(x) item`. If the information is insufficient, you MUST reply with: "Information not found in knowledge base."
+ ```
+
+
+
+
+
+Here's what it looks like on the canvas.
+
+
+
+
+
+**Step 2: Setting the Crossroads**
+1. Add If/Else Node
+ After LLM node, let’s add If/Else node. Set the rule: If LLM Output **Contains ** **Information not found in knowledge base**.
+ This means, when we can’t respond with the information in knowledge base.
+
+
+
+
+2. Add Tool for Searching
+ Let's connect a search tool after the IF branch. This indicates that when the knowledge base cannot find relevant answer information, we use web search to find the answers. After the IF node, click plus(+) icon and select Tool. In the search box, type Google. Hover over Google, click Install on the right, and then click Install again in the pop-up window.
+
+
+
+3. Install Google Search
+ Click Google Search in Google.
+
+
+
+
+Using Google Search for the first time requires authorization—it’s like needing a Wi-Fi password.
+
+#### Getting Your Password (API Key)
+
+
+
+1. Click API Key Authorization Configuration, then click Get your SerpApi API key from SerpApi. Sign in to get your private API key.
+ Tip: Your API Key is your passport to the outside world. Keep it safe and avoid sharing it with others.
+
+
+
+
+2. Copy and paste the API key in SerpApi API key. Click save.
+
+3. Once the API key is successfully authorized, the settings panel shows up immediately. Head to Query string field, and select `Iteration/{x} item`.
+
+
+
+
+Now, we need to different ways to answer depending on which path we’re looking at.
+
+* The Search Answer Path
+ Add a new LLM node to answer the question based on the search results. Connect it to the Google Search node.
+ Prompt: You are a Web Research Specialist. Based on the search results `(x) GoogleSearch / (x)text`, concisely answer the user's question `Iteration/{x}item`. Please do not mention the knowledge base in your response.
+
+
+
+
+
+* The Knowledge Searching Path
+ After the Else node, add a new LLM node to handle answers based on the knowledge base.
+ Prompt: You are a professional Dify Customer Service Manager. Strictly follow the context to reply to `Iteration/{x}item`.
+
+
+
+
+CRITICAL STEP: Combine the Information
+In the sub-process (inside the Iteration box), add a Variable Aggregator node that connects both LLM 2 and LLM 3 at the very end.
+
+In the Variable Aggregator panel, select the variables `LLM 2/{x}text String` and `LLM 2/{x}text String` as the Assign Variables. In this way, we’re merging the two possible answers into a single path.
+
+
+
+
+This is how the current workflow looks.
+
+
+
+
+**Step 3: The Final Email Assembly**
+Now that our logic branches have finished processing, let's combine all the answers into a single, polished email.
+
+1. Configure Iteration Output
+ Click on the Iteration node, and set `{x}Variable Aggregator/{x}output String` as the output variables.
+
+
+
+
+2. **Connect the Summary LLM**
+
+ After the Iteration node, connect a new LLM node to summarize all outputs. Feel free to use the prompt below:
+
+ ```text
+ You are a professional Customer Service Manager.
+ Please answer each question from `Parameter Extractor /{x} question_list` based on the `Iteration /{x} output`, and organize a clear and complete email reply for `User Input / {x} customer_name`.
+ Do not include content where the knowledge base could not find relevant information.
+ Signature: Anne.
+ ```
+
+
+
+
+
+3. **Finalize with the Output Node**
+
+ After the LLM node, add an End node. Set the output variable as `LLM 4/{x}text String`.
+
+
+
+
+
+We have now completed the entire setup and configuration of the workflow. Our email assistant can now answer questions based on the Knowledge Base and use Google Search for supplementary answers when needed.
+
+
+
+
+
+Try sending an email with question that definitely isn't in the knowledge base. Let's see if the AI successfully uses Google to find the related answers.
+
+## Mini Challenge
+
+1. What are other conditions you can choose in If/Else node?
+2. Browse marketplace to see if you can add another tool for this workflow?
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-08.mdx b/en/use-dify/tutorials/workflow-101/lesson-08.mdx
new file mode 100644
index 000000000..aaa659122
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-08.mdx
@@ -0,0 +1,176 @@
+---
+title: "Lesson 8: The Agent Node"
+sidebarTitle: Lesson 8
+---
+
+Let's look back the upgrades we've made for our email assistants.
+
+- Learned to Read: It can search a Knowledge Base
+- Learned to Choose: It uses Conditions to make decisions
+- Learned to Multitask: It handles multiple questions via Iteration
+- Learned to Use Tools: It can access the Internet via Google Search
+
+You might have noticed that our workflow is no longer just a straight line (Step 1 → Step 2 → Step 3). It's becoming a system that analyzes, judges, and calls upon different abilities to solve problems. This advanced pattern is what we call an Agentic Workflow.
+
+**Agentic Workflow**
+
+An Agentic Workflow isn't just Input \> Process \> Output. It involves thinking, planning, using tools, and adjusting based on results. It transforms the AI from a simple Executor (who just follows orders) into an intelligent Agent (who solves problems autonomously).
+
+**Agent Strategies**
+
+To make Agents work smarter, researchers designed "Strategies"—think of these as different modes of thinking that guide the Agent.
+
+- ReAct (Reason + Act): The "Think, then Do" approach. The Agent thinks (What should I do?), acts (calls a tool), observes the result, and then thinks again. It loops until the job is done.
+
+- Plan-and-Execute: Make a full plan first, then do it step-by-step.
+
+- Chain of Thought (CoT): Writing out the reasoning steps before giving an answer to improve accuracy.
+
+- Self-Correction: Checking its own work and fixing mistakes.
+
+- Memory: Equipping the Agent with short-term or long-term memory allows it to recall previous conversations or key details, enabling more coherent and personalized responses.
+
+
+In Lesson 7, we manually built a Brain using Knowledge Retrieval -\> LLM to Decide-\> If/Else -\> Search. It worked, but it was complicated to build. Is there a simpler way? Yes, and here it is.
+
+## Agent Node
+The Agent Node is a highly packaged intelligent unit. You just need to set a Goal for it through instructions and provide the Tools it might need. Then, it can autonomously think, plan, select, and call tools internally (using the selected Agent Strategy, such as ReAct, and the model's Function Calling capability) until it completes your set goal. In Dify, this greatly simplifies the process of building complex Agentic Workflows.
+
+## Hands-on 1: Build with Agent Node
+Our goal is to replace that complex manual logic inside our Iteration loop with a single, smart Agent Node.
+
+
+
+
+
+
+
+
+ **Why ReAct here?**
+
+ ReAct (Reason + Act) is a strategy that mimics human problem-solving using a Think → Do → Check loop.
+ 1. Reason: The Agent thinks, "What should I do next?" (e.g., Check the Knowledge Base).
+ 2. Act: It performs the action.
+ 3. Observe: It checks the result. If the answer isn't found, it repeats the cycle (e.g., "Okay, I need to search Google").
+
+ This thinking-while-doing approach is perfect for complex tasks where the next step depends on the previous result.
+
+
+
+
+ **Why Function Calling?**
+
+ One of the core capabilities of an Agent Node is to autonomously call tools. Function Calling is the key technology that allows the model to understand when and how to use the tools you provide (like Google Search). If the model doesn't support this feature, the Agent cannot effectively interact with tools and loses most of its autonomous decision-making capabilities.
+
+
+
+
+
+
+
+
+
+
+
+
+
+Click **Test Run**. Ask a mix of questions (some about Dify's history, some about breaking news). Watch how the Agent Node autonomously decides when to use the context and when to use Google!
+
+## Mini Challenge
+
+1. Could we use an Agent Node to replace the entire Iteration loop? How would you design the prompt to handle a list of questions all at once?
+2. What other information could you feed into the Agent's "Context" field to help it make better decisions?
\ No newline at end of file
diff --git a/en/use-dify/tutorials/workflow-101/lesson-09.mdx b/en/use-dify/tutorials/workflow-101/lesson-09.mdx
new file mode 100644
index 000000000..0afc000df
--- /dev/null
+++ b/en/use-dify/tutorials/workflow-101/lesson-09.mdx
@@ -0,0 +1,83 @@
+---
+title: "Lesson 9: Layout Designer (Template)"
+sidebarTitle: Lesson 9
+---
+
+In Lesson 8, we successfully built a powerful Agent that can think and search. However, you might have noticed a tiny issue: even though we asked the final LLM to list the answers, sometimes the formatting can be a bit messy or inconsistent (e.g., mixing bullet points with paragraphs).
+
+To fix this, we need a dedicated format assistant to organize the answers into a beautiful, standardized format before the final LLM writes the email.
+
+## Template
+
+It takes the original data (like your list of answers), follows a strict design template/standards you provide, and generates a perfectly formatted block of text, ensuring consistency every single time.
+
+## Hands-On 1: Polish the Email Layout
+
+
+
+
+
+
+ 3. In the code box, we use a tool called **Jinja2**
+
+ **What is Jinja2?**
+
+ In simple terms, Jinja2 is a tool that allows you to format variables (like your list of answers) into a text template exactly how you want. It uses simple symbols to mark where variables go and perform basic logic. With it, we can turn a raw list of data into a neat, standardized text block.
+
+ You can copy and paste the code below into the code box. This code processes every item in your answers list one by one, adding a dash `-` in front of each, to create a clean bulleted list.
+
+ ```jinja2
+ {% for answer in answers %}
+ - {{ answer }}
+ {% endfor %}
+ ```
+
+
+
+
+
+Click **Test Run**. Ask multiple questions in one email. Notice how the middle section of the reply is now a perfectly formatted bulleted list in a professional tone.
+
+
+## Mini Challenge
+
+1. How would you change the Jinja2 code to make a numbered list (1. Answer, 2. Answer) instead of bullet points?
+
+
+
+
+2. Once published, the gray-out buttons turned clickable now.
+
+ 1. **Share Your App**
+
+ Dify automatically generates a WebApp for you. This is a ready-to-use chat interface for your Email Assistant.
+
+ You can send this URL to colleagues or friends. They don't need to log in to Dify to use the email assistant.
+
+
+
+
+
+ 2. **Batch Run App**
+
+ If you have 100 emails to reply, copying and pasting them one by one will drag you down.
+
+ In Dify, all you need to do is to prepare a CSV file with the 100 emails. Upload it to Dify's Batch Run feature. Dify processes all 100 emails automatically and gives you back a spreadsheet with all the generated replies.
+
+
+
+
+ 3. **Others**
+
+ - **Access API Reference**: If you know coding, you can get an API Key to integrate this workflow directly into your own website or mobile app
+ - **Open in Explore**: Pin this app to your workspace sidebar for quick access next time
+ - **Publish as a Tool**: Package your workflow as a plugin so other Agents can use your Email Assistant as a tool
+
+## Monitor Your App
+As the creator, you need to understand the status of this assistant. By monitoring and using logs, you can check the health, performance, and costs.
+
+### The Command Center: Monitoring
+Click **Monitoring** on the left sidebar to see how your app is performing.
+
+| Name | Explanation |
+| ---------------------- | ------------------------------------------------------------------------------------ |
+| Total Messages | How many times users interacted with the AI today. It shows how popular your app is. |
+| Active Users | The number of unique people engaging with the AI. |
+| Token Usage | How much tokens the AI used. Watch for sudden spikes to control costs. |
+| Avg. User Interactions | Do the users ask follow-up questions? |
+
+### The Magnifying Glass: Logs
+Logs record the details of every single run: time, input, duration, and output. To access detailed records, click Logs in the left sidebar.
+
+**Why Logs?**
+- **Debugging**: User says "It doesn’t “work? Check the logs to replay the "crime scene" and see exactly which node failed.
+- **Performance**: See how long each node took. Find the blocker that is slowing things down.
+- **Understand Users**: Read what users are actually asking. Use this real data to update your Knowledge Base or improve your Prompts.
+- **Cost Control**: Check exactly how many tokens a specific run cost.
+
+| Name | Explanation |
+| ------------------- | ----------------------------------------------------------- |
+| Start Time | The time when the workflow was triggered |
+| Status | Success or Failure. |
+| Run Time | How long the whole process took. |
+| Tokens | The tokens consumed by this run. |
+| End User or Account | The specific user ID or account that initiated the session. |
+| Triggered By | WebApp interface or called via API. |
+
+You can click on each log entry to view more details. For example, you can identify frequently asked user questions and use them to timely update and modify your Knowledge Base.
+
+
+Building AI app is a new starting point, and this is the core of **LLMOps** (Large language model operations).
+
+1. **Observe**: Look at the Logs. What are users asking? Are they happy with the answers?
+2. **Analyze**: Hallucination happens on certain questions or some tools run out often
+3. **Optimize**: Go back to the Canvas. Edit the Prompt, add a document to the Knowledge Base, or tweak the workflow logic
+4. **Publish**: Release the upgraded version
+
+By repeating this cycle, your Email Assistant gets smarter and faster.
+
+## Conclusion
+
+**Thank you for your time and you're now a Dify builder with a new way of thinking:**
+
+Break down the task → Choose Nodes and Tools → Connect them with the right logic → Monitor and upgrade
+
+Now, feel free to open a template in Dify explore. Break it down and analyze it. Start from the scratch, build a workflow that solves a task in your daily work.
+
+May your workload get lighter and your imagination goes higher. Happy building with Dify.
diff --git a/images/difyworkflow101-lesson01-explore.png b/images/difyworkflow101-lesson01-explore.png
new file mode 100644
index 0000000000000000000000000000000000000000..e25396dfb8a06076c422f4034739ef206d31158d
GIT binary patch
literal 474903
zcmeFYWmsI>vNlS9BuH=w1a|_#9U6BhxVzIpc}N{&BiiCI7ii^Rw$a zUGccldZPlh3LOA_rB1o!F;n*ix1~oIP1w`mnk)MPa8gy~fd7P41i_Ca5yGsaqGdS%C!+jgkQT^2eK{u>(ogLQ0{zJ`K M-VIDSKDMwK`{Tk{wl7FJ3!4i6Xi!tm? z6tVm7D#UiKbwY>uZz+zK+m)p|8HF5hiS+3%o_MwHCwBSt5z^@9AEEaES?;HIJP3No zfPH&{(4^+H#OgrKaro8GH#VOhzO`F%zVV#5GYWVZ<5*RKq(t*Ox A$>Y}z2^ zJKMEhP>Qw$C+I%wShkL2(wny~S6lS+*V_%8?L|Aak-XjwIe>O($KY$OlfmPK#fR-E zK|vT@_UOpyqVO)z3SxAyJWQ^P5=B-m9;TIi*h`~D6h>IPqFHwb2s^~iDl3y&PN*NR zKrjEtC$S3(Z0nXnV4zW{Hv75vB-J<9;Df6jg|wASkz{lx6~}o=s*>k$-an_FBSx=> z^XD^JCv$vH@!_l>G2}o7>1J7N53*XU^YEL?zX)34t9X!cJ6E(N>UcbJwt1EpP&4u| z*f$bU^OO@=ivwV%SeNSw>e_Ffmatglfcv<0qa~IMEsa~7k3TAKU?K+H#eq#iBZ9GY1#6n${N$l_qN)C_04iq^%e3g{k8<_|;In+n!JvI0~w69`*;e8aL-$ zo~v4|ld5VC+#-Q~(tie(e)Do&0Dae9$3YIO79(ZyUDMhEGyC~F73#><%USpMklm{E zS1*SV*b3fCkr#AD;5N0Qd~-|C< +b7HgBIL7r+WPM@7zVH(?S-j2OdlQxt zHD%=yKs _G;bVN|v#JBvCrEts@ZtaK z0QBDg(mx_&^q7ENs?Y HI@e$`vl-gon%eS0BpRr`cjGdb+Ve+>rc!Q3^_$Jk6&8n+dX3hNg zQI+JbLb}iM@-EeQOxmvdR bQen5xYrzsW9qa0YEx-V$*Ee=pp=SAz4B2K2DN KBSW2lihYjnv^_(9G7k)OE`R zQKNpq^U>T?`5@S4@_`Ly>5z)PZvI1Ez)ObLV(nnT^KH<8v-HN=os7@V_nZqmyCHRE zL+9Y13{U%g#uM`DWG;AsN}W3 8`7I)UE@t9lXNY(+_xNDBcV{jaXJ;0!Gbh0ke z6RrmhsjWF^V>h8`YVz84Mp~vk91(2iF*7d v%K1!E;vrtk=D!b>IRvtxdVKfHq$bP);*9w zHzae{1fZLVs%~z0V{~`3%N5i%$&sfh*6UL!|0`wH{!DkJ{mp62y`IyqR8S|?E#Dc# zOe->YbSDEaP A}3tPR#;e)@+y p+U%!azj zNI}I9Ol<5?$o0`RZUoS1MyDs>IPyfYG)py73=-vN!BA~dO3_lSNSe)~Q90Ft7KpI` zJboy6dPmn4{F)7pbuSZ!(@`@%a&KDxRggRoN2@zIJLPD2D$@{|pr@g6&`Lu?d$rIk z1Wo?a5!SZmx%j2M?0s#~&i?*rHNS*Ut;Ec=Z$@eW6eVV8RwRWosk6mGY|zdHW3`{e z(u64M0>jzyD*0RKvC6bCx|?IL@w*y>)qc~lxW}$l<7Bvv ^HlA}hVxFZA70@b8sc4&7e?^}T}f>FL&JrgLlxQ*H(2 zTPCSY{jzP{soFrZakdTjs}F4%7P?s#I@jy%p0yI{gYPKg*=Kxit+aC+RxfOI1Xd=- zKpf3_16{X=YV{b~uB{Ek>ps|9EBCiw?1TP1n(3EPY!U&d(QU=Q{XiH!4oj~yl}&Sd zX+nlZyVZb{$ov0peTBP6X043nVfGz8HNxnQk7My -*I@1*M}KpLq5q!?cxC zs2{HJwzV=~z7C}m!nWCIx+EpFzA1eTTV5SdDho6xDUj!Ea&Wg?^3)^RNCrFwh2^bx zbL5cc)tYGMAS7$89f*e{qD0M5dDg# B_XUuY66J@g>_Vo zkHHcz%JHppWxII!U>^cAo7J3>+L+FHn@_g}kJw9cuhLlL6Jc%$bV5XDu;1o}&NX4U z$ZpVT{cGFSAJ=}A6pUMuE*PY4RESLh(5L$1X%hHus1e&iMVrm^kHNY-a|;_x?#Qt5 z ^P*WK>Rs3+BcNrXc1LY^79Ev}!d~lzno3!Mxk9SKJ zf)pFu8&Y6xc@d(tlPh14Qo|ek;ro;avNZ5L-XiJs!J1MO*I`VZb7cAfAK3)M+l?rZ zBaIfl&y9Vw?=e1*9k8(wYW>>dw(&O%BDdTZ&ABNMGj;dJ9gtH)6 jlK< z-e72+401a{ke=5UvC0L}7P*{Zo{T-}gz>XVeeLaVM#56Qd~_#}Ti1KuAFRDxbMrpS zwsmWGyFmC~IW&FvzG%^d#?*)z@i%rHIbOm|Yd?1m*RgKv_q?Nfa@z?XpJHZb6u2#XV%Z0-3HYHB@jVOX|tEuGk3Zr^P0xY<9n#fX7d&v`Z5Cw#bm z`z0^delPhkH<~AJ_#u7TkCr7oA|fvn!G3>C%iQwYqLFPPn}ry(9W-a7$91HS1gggi zq>ZH!q1q)4dO;$~26{NQ36JKgqBUXli)_aBzAnlV*}wP2nQOqt1+90l3%7w4U%XdR zLN^wjr#f_4ZOyh5$4MTa&$cI3@UD|-HLu#yW>4CbesRqauC)&Nf*}&8y1dE&^Ll~` zA9b $G|x)S_W9F=F^$WeZR#20tD^bR$x9ajUe)=Eu=mgvr71H#oOtG@ zJv1zubZEs0*iw1c<&M7>lyXYK;DsOj^8|ChacTvvhSm`TH+`1%&v>iQ!C_MdSmx|o z7h{3d)1>+yLRDqiByk;$IelSX$W9s&VbUAysi8w~<0#ZE*52{9mbuJqlv4Qmok=5Z zw~J102pq0Lt(MfttlBptB_lVp>AbpLe2$Zny8FlkjqItwnDB_QqL%7M_QXtHm(e6) z@x4;OqeLivmAK!SuJRX#cD>HepvbvQt4EoqUqCm=lA7mC2$5Hf3Sx(z_cfhHy=nQU z)5(cDg?NMxwK8pr$qvTux_Zz4k#GK|W*Hu$eD_y~Mz8-aHbeL9yjT{&VEYiv|Gb6r zjdw#LO99UHP?M#3%85313>s9St>&1KgMle8a=ecRtR(zUCxES6eZBo?apId{kX$XX z?OqC!(QDhw^O=lsG{;Na1v0*wUe?s7)ra!Q5N;Lu#BAl!kLz~vEB?4TyF_y*ZRI=^ zi*A00p mqnstpc-0 zF+HCTW3g>tv~5d0g|5q0wR4U44pyaKm@H1nx+q!Nzg%3ws#UwpsM#m4oUHOaNiwKS znAo6oHTI4*wN)bRojN;zOjG76rQ5iLgtym%nI46R7nBub?WS)U)i!83B~Q^aL>fmY zR-{iec#Zo<<}R+UKGg`3eIg@?J7=RgejdyO#Wq-jH%Keiaj~M*+_H~2tco7UYf5YL z6BnXdMfmQ1D^b(Z#%y7Ff{NFE8m@@$tm1*5YH9VVM~He4`1y2i@S8(A$FW|wmSpI$ z*ELqBO^uO;QSCsaAO%E9j*X4&*$&y{E$-N$=qSQ+K`9>XKKK8tL?iG7$C>T$b(P?1 z^MXo3`;mZlvJTmgQ&%>@v 6i{9JN)}~!jQZmK`pO)0c z sC`rj<7zYc6|nnfA!#HAJ&>{bG&d%XMuTv|X_( z{5O~LflsE*tN831?6HOoDsUZ2Vr$UM#E^ 5oP;p#!S((4bnIlbeyn)>adV5Z!$?-g( zjZ9Ei`nX{v|0yX`_Gvnl>1n7zS2)3aY9XvW_U)TzvG!_`dsq%+93}pjky479RxxNZ zQojL8-=Q&8$X1vjsvTDrqM!LENf_gm{N!-+3MEa0nmiRl8hqyAXXB&O94zGChwR?# z0UWQV>trb`FS42ji9u%)EI(kAwJgD?5VL&}Pvlj(LQ6e 7&CD27`D%sQi!(&gF4QId||=IUhClP%0m4LFcVcgpT^Frol@*t$Rr{r1N9 zz;}WETRU>g28ZLI@%x)3yVGlaoHzJ7j@yy)R^WZcpA;4UXsfpBhkfkT)_lhq=gL5< zDaZ|cq)CSOtfg3!C#5fo$?*kJVWlFuI ~nnB{|xIw%L2DNFq*jYL? zjq^q5ekVArD-O}|K^|pb?2D{|(0u1 tjcfgXJlTcqD&n ko?JmgV{?iA~EaQ z^#UC8cE4bws+Qtpt-iE+xP3(3(ARl}_G;Y5@GbBhZlkKCLeTiqw_QUt7-gjLG?^>J z(g=)icQn{oBWGZOK%6qq+{xK-Qd5@c+B)H #Z3 7E#CXL9ZOLm8ns+# l z 44084xmXAb<;@Ih6V->{kof=*J;t7F9CVZx4N8K z5 gRr9(8 z)82azGhYV!(x-E$oLXRCC&*g Rn7c=$a?Fr zCgZp7UlF8KN<_LrK|n!37$H(3UD73;qel!-LP|=IE ^QFD*mmu_KIi* 3=W|d&2o`Sj>3L_SFR4`+_9!XosZwKw ziB%!v!#@EV?p(}99)ST+R9bAn`ALFu*-6(BuHhOy-Q?vgqv8RlJUm14S}Um!^i6GF zgV91)eMw{p(r0|h^L|vM(EWfjwA~_nkz?udS26#8O6C7m@N$cZhq7zm16y(g)D8}l z?HXD0kSZUL#K1O3wg6xu#g7c07`iudu@YeEeN%P!^`()vtLV+E6nIjM-x1y}Y_#nQ z{?u}dcZ0VW20EyAEBsORj^SuE`Or}Jmt@Z8JJT)>Izs`ImZyWcGJtsxH@bN8fy63> zy3qIjzp@KO+P@3eh<43K978lm|EA!ExtSm$u85|^24~*=nR1jDU;8Pivg^@k)a0t| z)#>I$v8Ce6anuSwYmrr8c~s~5hv9z|fWZ<`Tjgm%|HGd7DcgBhk#l>_@nqXmD&LKv z&s_Hb_{% _D)bKu^MgewBFaUO|GJESr7GZ}feiSI!Z1tiyRS5lGKyI1@^ zA3(ilNgO|8w{ZZp9Z9IE5t(qzV6qozS;^bFKBxa7dBM*AoP~AbTof_VL# oS2Gf|Wu}Zf*V;N{B zTE^=fFd6uEeTGzf(G$tFc-F_?!s5bIbiyRVxK!ERz8bvD09lC+S#F@~?lx(9vS2Q$ z4f|YXY|XTYcPHuRIlTAfEoRjtl5}f&LE8Ay&=kK@2=ODDJ 4a4#VH8lsqDpO)1 YvZeWE9QN@? zRD9R%q|^l8{?$qJcVc3#zUY-0K6Zu^{2m)+Aqv_Bu2CjmhX|ti2Yw5Po=)Kb^fKw8 zmGewq(Tdj`5yW0$@zT|=-fOcy@zvG^`}YiQXaB%N(?R`QuSsc>_S8&fz|O6s-v49) zq&NMZRTdVUIl G$s$^COqU`X9g-^%(X5taVjN(bP$xK=+@9|H z?tVEl+W2H%fdrjvm%Sc^kmi_tY|=0px0rjMKybU2&LDS 4mNQsxc#Qjrg(* o|!TZ9ACyxr4dqO}C%5pRM^*3w}N{Zn?I#cJIJmAfYH16Xz|F7dPG2&Q^6; zM#+mxN2~Fgu0)@(E7s=A-p6rLPrjjnN2cs%Ls97IbHc#~7cYL|l (o+4 zP&Y~AOS0RFe2I%a1>en(CKmKR3;EMtv)(Z0og3iYPiXniyeeZqclxW<`@77fJEBt& zyxtEBo JK=jR@ca`PCnyYK7E(juxtl&U4CNWOngT8{Tb|ob(rL zVZH&vt2)01y5H)i&}B4osV0Y?17-jGmlCbDpLakOgbinwx$2Wer%b9#-JcIEDJ%O4 zK>EHf0E-Nddhq(kEXf9X_rxvPENm8F@+Y<@p~?QpAe}IHsW$lOju<5WiS$P`acohN zpiP}A9#93Whedbb2Yr3eu+IyVx_cD_@ZH?qHcg;03z)R(yjUY0`B@6QlpV0;$)hoK z#h#9ZT&Q}l0;Mar-{tu1i9rlro*?y}zb^}zQ4i!`zlb0-@iEFjUYB@8iH{z9Fn- z0=KTtwBmoGjVF)X9Y7dAe>Fo7aoqUH>vD_=^zZi#F1%-xacuP!cf4eE&H+tiaPc>< zZ2KM6I~#&BZWuvocjsL~ryYa9oyQuHqC>K00js{YBqNNlVwm#B5bs5$9ux0xrF#M? z{6?&xWmN7^rsOQ{i!k?Jh>J@Mxj-yhyV0_ICA#J30kO1>e_oYNp$dhAFq_}%av0D2 zFONbtQnoRFM(AJe-7JqL6NbXcBu_(Cd{9|+y55V{ip@Ki9P74K9%oLQ|LwVaPeuN< zie5l&!#f!G>LgeLV6+OVg6?zSZx)eh`rhRL_iHk&BDtT4tJ2Z!Xw7NXTQFLuWD)jV zBJPHXd=l=48$HgrP^zTR-+ZNIHM5Uh1K9)wg7=7D($nkA<=(%aymJ+IdirVlmzPe= zXTo3L&>vg<1oeD6%lfaMzr^!zLh(7{eS4Iv&V%+$AfSt+^AqAATG}2l`V(ZE{1NS9 zB2w%nn>A3vW6 )7dKvn9jV+tECJB+^poq;mYq7`}(HQV(W<+m)PY{9rW(LT+9=FD$d!hEmL zcMLbcza#_EEKG{FDkMsB;W#+s+=TzZL(iXHjwv6#sDtG`Feds03|x)Y4P~oxk)4mK zw_WSqU5jb6Yg_GS?wUUk$I}D_^!)1gM!vD68}qx+ e6lABzRk+`so$n>F`|}2a&y6nwU^qUy z-hXgfpdhBM)}U^i(J$+6P;hABhqqu-cDpuMxk&_Bp;KY@`EqOy-yoAtFw69Ec&!Yb zx?P=kO%3Me&g=?2L#Pi5#`sXGG#z8|sRCIFF+2KqD;ooeXm)<7 a)W2grKMGrI z`+}no<%%X#7Iy{lt1inS0wF!*az8UE)8am+1$=h6l#`R)!O?7{$mktkoP(jA_a9v? z2ucf`qJpP#1kFYdT}lvYo2X TKYv@Mc= zOHp4GX%ndnsFulAZD62!s@k%O59JaR-QqGdA1G^Pz};Rc*QLkw2{pq{duolUxwv>| z=ZWSDnApIwa!$z&1^s9^=0bI`C($Ek%v)!$e1$%-a|*Ck#(XBlGmEK }0-*}BHapEosXsPqm)u{-wgDhbO1z+-1 zU4@%OA$hN<5^Z}x$NBo%s2kzaaMFQ4 WTVOq2TSQ6TOChy{=pY@Q@VHkKN<}X( z5T7ez1~`LEc|CMlVy${N&s7_H@A6a>$at!TV#4~qP|Mz4R7N5wgr1!Zyc@&ro=(Xs zZye++-$L`nu}{*ga}9fzTW92k>n{2adsZ*8ulQh={kNf6gQ%8%g8x?TRR1xhtr4|3 zOVcZAsbamCYQ$#Jc?Lw~5XV`LyA7m^{bc+mtiq`|_Q6&3dB7BM;+yY;v(2isbJ7SJ z|C=;8$(9ycx|DlR!mR!DQw&?+;9Ys*$RWG?am2Ocs$=~Kw|cY9UvrnFmyi>suuKo- zathBvv7CLqR`nb7$kdQ1u+o6}*JQ=;(o9cO(W$;;=%(U
;rTP0+&=m*M; z{<8kmr1uC08mETXi9Oe3ra8@=qYs2#`+dL4m^UH+z%-Ib zKy_i%K>Pt6BzXe+u{9~Yhn^P2YPvuy%Cdo~S=?`XK$v1%v!AwRU_NJN+)SE7&jggA zuyd5tuw>1Kca3yuG6@##Z4!LdegO?<7Tvy5M2fxA@ABe|9|qm_N~==O6Ry_RAxLIH z_>Y>kq%G5=097|1 MgeTo z{oIV4D4JKvDQ5M4ZL6IR`y+c9w-%SdH;^?vxM^VjyaGpTM?W)|YZQ9iQcW-JLo@HO zp>egHKf0s6<@8>6+dS@fYk##Oa}rB1$U6F&KmtzJH~d_wHWic$KF-ZjmClS`nzk<< z)c=@|?qX4V;`ndCFhF;p0^mKfl3!B0oBNIOY%2e;r+qy)IY>4sVBlq89|#d(JHpKX zT5@wg=`Jxl!xIvJb|hhzEmd3-aC5=s*U0NJi1+x1|6%>?fNf3y*Wp5aBIII0c|_{Q zX?=Fr=0k~e$;hN@(yB!Nq@8Sl|1)KIU$QIko{A)4 ~N%BK<)VN3cppogNO z*DcfMUk;jhCu7C5Igp;gz=)nn96Gz-bU%&j53~@=bDGC0{7*Gecegyw;iyv6IN`Ya zZe`FRV5ycHf2z${Jlwi9TWLVT60!+Dehw#-PIC~ym+)4N1KBv59T?8iGR(y{LDaWi z0Tq@%h-tYSw|g6eUF@V?)+shTUdX_vvRx<;oIM_Q{fSJHp=Ijyn{T4m?t;GvX`&go z%=UkI8y5KiB1>BQkqp~UoKQa6ywYgj4X={V84*VcN*jK5zx7-UAv{{M4Z`$qW5quo z7uiT8QxdOj2B4YjXH<1|IaV)vb9(ll&}KfTCR*D7VBLeFa_L4~S7~WrNB%o*>wrmm zrg{l%L+j*qpAO*_>imPc#z74IJ#xqpr!hyX0@|%+j(&4zky-e9?hu4sPAhzs^2&fe z1#{6-my-bE3i>nda#RH}=A3Rb=yl&`Mk-M_bq>9`y3ILyLz9+R;_&n@&AG>o#zIR| z5vWihwO#do>LYxrCku_YyTJc^md^a>%BE|ZfQ{a3^ZFnA buu4a*Cx^@?UIs;UcJuX>XgIHT(13hxMZtHNuZjj zj`b*E8tU@p@JUCjEw({w4<0$nH~~pS57ThRKan^Qr +eI{pJVxV0 z?3To73K@)(SS~~g3}M;^`W1j$oN!bs$pgq~@$25@6!bHPCUZ87*UQdDG@;l|z>`3o zUYJh<=A@%(Zt=YPY3aCh ?)09Et#P(uyq=N!FP z!!E w_PzgU(#h1eC@&a$3A*~zZt$)Ip z!J{Kg-|dFe7e;f-J3;?lCi+xZT)U39U#FF4 _f<))Sn9 z-BT%LDH9_hS-ph7qJm~f mi^181*&<$=yLWVyC^}c3WNWh {RZn)i*%Aj8vKC2<(XjD$h3^+K$+)ADFOb<;^eIiic7yH+Cc4k zJu_H@e$;H@Xq!Hw 9i)C`*;_IH`2M2a#Y-qWL1v zcm1KA+>qNYtz_KEsUy`gS4w%(zojeEO|)Nj7pH{qVM{50u@FyXt=FKuU&WIgrKxV; z+Vw!!BB$BLMqUx+O#cr$hvt6UkhqOIrl5h*4)mjM4CGJmQ}|FYE^%f`r;GV#&v(UO zo6L76^vr_xKM$Xx1f1&vQ;5fX-SPKVw6DizRb;p`$r>?s13G3-u@Z8qUgSMC3&Ie0 zFw8S;2@?+clR4?|1Njb5TjFGjv_jb?@(qL6+&3xFhNe~ zWDvM5vM080kN@@x9)1=XA+*GmVkCCo_!yg|fFg^6`0q_}$BpN5gflh8dG3wDxkHhR z+2X7Gc`d=;1JNe8Ey+!9cwSsE)y@)mboTv)i33;-C86xNGVfqgq5uD+#SDMCmj^^m z^ugQl?_VN;ElYCuL07lu{pf8h#!8y!-6_TR4g7{F1-6V%jodqQYCNM%fSMRKUHUh+ z%nydbgsDdAqqE~8`)|o^xp7rc;Wxqc&21d_-uBNuLI90ZFR8OtR7#2I0g?;@z`ft0 zE|tX @LOBabFe+@@Om-5|Ne}z zJl+&S@>e~lLd$S3yCKRWh{%PAQD SaT*ah!Kmst zz?k|Tp;boFN 8oj^5jyAcHiA zuM5e2-iyEN%odgLzX034?iX3rD9_jQj~ID>KH;UApPwwD#eruIg;d_Ql;3Pm$Mrj1 zL5=^+T6Q>NrqyI`f6y}AMWpB{STAH6qS#?JA%XV7A9w>LSng#W64TNzs9DZ*vVSrW zH@_R-O2A_eC-X8m-ReSbU~1LXBSsEs9)31H+v_BoSAXdEHj^h{shvt)Qh=O~9U`&H zclA5!>&=By+w%~?2-}km%jf7RMZ%P%r-NNeNP3Gh-XPx&xqv0)x4E~(7cg2-;^JE` zR-N83W{IEAX&xuA3>;1r=l__9j%wG@u@ZRQ@)6NqlVTb$NW%r31sRFmWeN?g^SO?1 zM{?&RRzlP4yE=Tz_J9In()z;demGDGKiH3G{KT-vv-$2h1^T0{4$~W_2$FZ5f+viv zW-P~Eal&D*8P*j# DMl! zk)rry=-=q<7&kJ;no`dxsvStfZi0DY+sW waO;zv8On@hE7C^FB8 ?s}eXZ-^Q4ToIb z-9F+@J@9rgC(XHybzyw}`pSzq?&Y#7b9HnfJ_}xkr67)vI{R=?B%J^J?)TGT&U5CF6Q?WF%*p)7>`Oik` WwD4yfkH@ z94Z(6fnsj|!eiwls{`a-^Tuh=3D7J?W0`}jetubPE&%^!PZ_t%?&*oq_sAb $kjl_x54qm%Z|@{k-S~*F1VBZ6X}+v*Xw9jE zlU?xt4Ef&OO&uX3W$*Bdq)EQ#(aX2JFNKwr>^wI32~IP<7VWdgh+I!>knH~cQb|Sj zBKg9(V?rU$ LB_ zek+gu3ixazyvOHy{Po3+#32KlTMh_J-@ILX;BqkNATexpR;f3**;#p3&FJ-K@(FK( zq<7S)o0`-gx$IfrzPkAa_%K;zV#s%z{u +GJ}x^ho-O4pk(Tpva`3ZGG0 z*qtb7IGr-ubYH%89OlAbon3~hVSQBzE8C6;@V8MZUGhP50^1MquPlQmJ_q{VI7mC7 zyGD72^ =Cu%{aj0~VCp$`N-pSq$PlN824#i+yf-W$~Q6j;gbq5>MjMM0 zJn+34q&kq0-LofOB#{a~_Xz1hZ?K3RCSxrbRIjKNTa0Lk&Nwv*zC4d>G+tMXm%(!9 z1guIA56{cL5gQeh@!4iljN+L!K5?8EBcFf1jmO`D5jX2Y$HOzFzM$KG?iQOEh$z=G za8{|XTS{YdY^kKEW=(t}@w=h(-i)FjmVAbR;MKPytg8=6K}UpZ1M+^FmB w7 z@OHp_P!43s+cKaxD`;H@Q8ntl6bNX1=_t%|El-!)o<({_ipQ&tLHnk`T&r_Xjsbow zBR4H)mdimz8>=q-SCh-=e(9rzn~r(cW-m$~OusFG=-Z}Hj~1V1hhVe!d_~X%LFC zf `lp0wSurUCvi};EH8e$a5mfJPJSHS6KcO~y7n))7J-d9 z;4C5Xn(?V8fJ=eqFMY%cL~}k2QuKr9$@Q2lnf;#&5~^|ftK%Rf1U+!l%PbJ_C^qzK zdKKTxm%<4h7G_%YpKlh_XDYIbWxnuoR=#E%H=KT8?G{7jln&^gt{Pr;XKzH0{86Hn z6sg}4v+Rt~_zEqg@?jUqaI=o0gcF$v@gM(I9GE55O7OH$RozYY)qb4EP!(RX)%Moc zFb4a64!E`<;IJ{4aJAKIh0_@QPFg<*c)lCtYXx(XEA?kR4YQ-uOkr{8j`YWj#nDQB zNo0gv2G?$UgdDF-V6UG~3yrkl>TWf6UtxAgZJ_oGZr^3tO1gBQjYd0+6@rKUync zX$dTsfpYn%rf8C#{rYc;qDR6GsTA6Xn}0BsWkT$gT-3@<3hXj6GhnNqZdl|z{J2~x zQB|_dB=DpeO5Wt(SWz<=yEs@*M?pu?dvZyNd0~q(=xS1U#LQONcF}MWbJEl+riNqW zU=YdgPu>OtQ|`;uQGwO Adus_Z{H(!O z#dHaMoGPD4PEiCj4GH7~d|4~>)~$y%AxlzNke^1~&B0|p*<^3L#BLnv_)^eWXTDA* zf_h85Ij#7{@vDKfhO~OG9l}`rW19J0!1YxM7irx5BN8Y@^WtBtY(<6^*h=sjd)#90 zec0syJ#>YBd=*DR>=rl*q 0=Jz|xLG;`!)idqr zPMzb&GVj>@NA>kfm2VTK)N+eceJ3k?utT-G_3kP+mg3KQv}O-F%34LWrw2u00xhvb zh`vwNiXi8ZiWV4VaB}ms0-MY(dG%R^J#c%_xA$4b;Spo!M16o RRH z8M_`fAf&o;aasM>V2ECl()NYhGx)LA^#hp;gT{(!05R*C!uA1xO>0D7!?EXhBV+UQ zy7%*oyRD>8hnDpiESR3tu~*7_A FXUuQ+}ed}i |J%{4DRM>i*J7U<^WaCW}PZ^s>O z)@J; p_Ifaiz9+&SL4t^%C@Jq8jhhO~x>E0WLC z2iKYhUp@^&uZF>>D6-DXV^pGc{$P#8^ncUNY?m|%r}9rjK}ShG?A=T}?zi9Iu6Iky zm4vFbhGr#erl5Rrp3K~!M#64*UuO(@oxk;cV5vIPojA`hv(Vfj0N-@XgR7r-ds$6v zcW&cA)g=ycmhy7DMosGEx!Lh!Ld32wE%zmMh26gv>LGD4feNT@9NaJb_VPc2cxjFM zY$WTuAflzO9-eB)w_aLj_7SZK$G7eB@)6yvc#0hU9L7ZHZ#-fRdg)yr^>eY>$sT`? zbnG?B6tv0Y?rIjHF`<`X&s=GJ16`*->mkPnx)M_~hkOBUq}Y2NIrf-l9!q-Ttci~V zYhVv|iJ~AD+GR47J$ub7gB5N4Ix-ox+e0+QKdcs7i1DQXxFMorwoih}MjmSPC#gW| z!d=;#|4N0k(-BCzxqRdB*LB_flnHs9CI#eb$Azr^Uo^&7eD|#PT(}V$qWRUCf^=y~ z$+^v9+%3Os$kY_EbKseqF`=-=1NH2{fj5D*;SBE#M+spsa#WNg%ns h;N;14S!^gD|JBoL N3y6!?$#wN zIDXn*6EMruB~;hd=s56{TF)KB{jhE=3dW<8_fqMKm+YN>0x0GlW^Adsd1-qzF7+M$ zrIOE&bdnp7S^A~mm7-LY#W3!Vxun-#V8rnpNo_qNu6Sml1EckIi6r|i#XF;a`zP0= zCHS@Ipk3sXhZB`oFmQ!gJ10}IxaEv-V%W}P#D@c|*ABy>qTI~~xFZ)E`-_Y3to& z?qkrvEM!U-yT@f3d?3vh^I|i6zfYFzc$oY*cWSU^wE*;Z8yi )zs@flnp>g z__hDCAlCHfmQ1ambesJJRq?apWm8-B>(q})#{ilQ*bkbRkuBgRLAi(S_UWd_Ub_(V z;l=|(i->;!M>%)7IR!t^Y3~*r#SBIF!r$fdyhP $Sp^3kS{a; k>O3%*i!k#5u og&mU(7&)?aw6A1<)2 z84vn4R-Rl(yY+es((79IVMg>U?NVvUCR$6&qmwHjz;YzjVTCD;Fq`W(ZU`%0e6bJ) zoCLm_{@1qns4~DZEh$cF*JZ5nkI8EK%KzkIP!g}OtQUqpmToN8V;S;ZJGklPjN;B{ zIpo`AR=>F%-o3C9I$NiuRt@_5#paI$!~lurDS_+k<%>qIB6mHB)hXSGgHJadDYxw_ zUNsq4h_05C$_2i2@JztQP}WuLbIP-#lBo0qy=*W*pOo!n!UN5n&s530b<(`EJvViW z-d8p*p;wy6(@HtdsZ=Iy=IMz;d}Cltm;Csj>0wy~=a(Bo0t4rbOD|p0meL17gBzz? zb3Og2!SjOseVx?Ej7;`#8MPsY0$Qv*E= {=HqK(Kg}Fz&~OszAAFPEw?jbR Hp6Y);`sjkYlS%W z{_XUHxI)kq#x~y1s<_8UgVA)MuM-@E03})AScV3)vee9bej-CuMK;2Wxk i?*W_;qSg#CS=Fy|%|dq28;P-> z?AN;1pCpR>E&gVw^=QBED>8SEzCb>VK+wt+lQ~_p$s0h{KFHD};|s@h2hx5fe~A&L z$+9-(W(@NAU{K*)#}`9rP*w_D)%cdp9?>6xOU=^erZx{}8(^F*)8VzmBVSvKnEtbZ z`Jki}Y3w;J&s8J(yqUh4B7y!IX1+3Q-l{hEpxP(=3F8mGypTK0wzQ}h`KxClFJP 4zq!!x6EJ00-%46<4_!_2PwbH9s{WuB_Ir{)hyC{nLw&3n=ChMb|XG4D+mElenCK zWn*=tra(t(uxwSV-sxrVV*eU)Yk^u _$Q&v zRA?SIdy>8GBc*TmP00eirU@TIeE-85Ql>%UWn#5UKng>3FIZkgDQYr9wqJkKVB~J9 z?g~p7ZL^yylD5*ogkB68cqCX;UOafh(@#toFVlK-AgzUux1BX%yhGQ}n_EW4riVGQ zK_CJx75c-rv2UH1SCo#!uKN<0v%M=67!gMK^pB^c9`!vR2fTYow8A>3uJ)V;^KSL* zU>>F7d2QADDW>fE3mM1rFO;ck6r7_FbMzah6Nu-_J}MgAP9QlrfjE5QX ebT>@gM)+h{XNz*9(j$DU^d iO8M)asP86AbKQ~81Q9;hR+55_VogKdk%r`^ zEo7hCfD0Qg?UU#a)P{=%<~p)IRcjX8zgwSV!^YpnHsm*eHMolktnq%Ujs@9{QulO` zc<=qhr#mi)>9H)3Irn6m`$i7#y2l#|545U~xbyz?=rBAowO-%w_Xh`*wmDU1!2@{x zNw&wP`C{mc_Dtw+Ccc=UL)ToH>Rb#z73vJlfq2EXH_yjqa{A?GrBL}lVyJMjwM?nM zh4GT)@qj~u>Rvx(1H}(QFUgVgO4`6Nr=*>9<`lehc+A)Bpyh?puG>O3YL({KvXBh; zjY@HVbSj_cPt(fW P&0BW03x9q}%q9Pw)}j>6D}OwWv#;`87?UcM29l88%W8 z8 h9<76YMHmOA+SK3Qd!+rvcd~pRsOu-_LGKl(oF-->mh0 z^5!LzzFZ9KTq+Irkp-TK^u3b5ImQp%XADYa&h~H+X-%9E!SZ`s%#E?~8zLhJ&d4hO z?G6w;d&-$ojZw0YV8$lQTN-8&&ng!^d&!Z@#fla%6M*b~TZ-Cefd&2Jl@6dwiwQ2& zB+4(?EF}lbAUNm8^GU7OS5x!1&O;=pbWqmOr|l22=d0y(c?X}CpV8ch$CF2qkXof4 zr8XW!Q*SW<`VS=nqWn&=bD8V*wqAW>iV*N9vG-=kI*||Rg7M?!>~TkwJsWh}+!!Xl zPDoSml9tm_^!}1Yhia(`xF=v-xamx1n_#yib)4Pmur;C4Qjh;iC}7r%iClt?wEvur zcN8 n%HB?fzI&$Cc8X|JrIUg+DMjDV8{N#S+i`UF>rE>Smo8M?#B?Fs zZpwSV6l9&jJFqtgtaCD7zy0sSy*SA?dB0`XlfprqLF%UQk%T{cIVAM1?YaTW_ssXy z`-2HAh>-c6_V-6jE8NzcP|sq>XZ-cf?@!9Mn<#fLZ#>U-EKXMyQLYPl_ZEvkFnj6j z1$#(+MVUhUQVAwDH>tU98US}(ArCL~6o0K-5ACc9g6DE=#Du+^>$ _XVx39XF$?;ULD+e)c3=6S{=xj{F;czCunz@C2-UHLb?L&`t&}qp^E^mJmZgo`^ z=VVSNO@aDq7Ob{n8h@>bq1f%S us03Vd0lG#E4>u))p`!?6<^P}IIj{cdr zQq6-8R71F#?vWLyQ*sn5VplrpwZEBGEZusl06F9~YY~H8&yLs8b&Zk&ZLe|K4tr!+ zTdkgHkWu5Ab)b_`LuGGn zq%T{7xoETNhTnXwC8R!Q`@%#wix;g^ce}ng@S{BB96%ZO9ZwEE+NR4%Dm816`Vf6< z|HJQbi|1s8)auf?GX0Z`_vyP*1F5mBqz_&TtD5RRmyh9glMBYMcodV=Y0hz#l7Cz$ zR~A4?fXVi7(FZ%h|6c2?n^xPmeulX0;|o?rKj=b0UoYx>a?soM9l19YDnsKwz_)!K z|3 >z-y~(e!-XadL(8`j7ci*9v$Sv zM-Kl9FT0@@gvu2wLl`qeJ6Ief2NWx9Kd?*u_x_1*9C&a6B`vl6Z1{y;Bt}zyf!rbI z_T0sNkv*YseCALIWk@gfLXj)ZE%EEtwES*uEdNjB{u7SCcXqP{d`XOdJi tam>xo~eq@o^-y?D*Q|Oz>m8DA}<+2L-SW4$H_LIKhII=1s@OsdS$rRCsbnT zsrZ6>PeDTLZE}t=RCok+#>W4QZ2jAEudC#KWDt}kPU6IA4zqZdVU3lF;1>@!Fo-c% z *Ggn($kqqFE0;;Q9_7D$9##+dqv(c>bH6a z?3mwQ8`^hiGpT4h<9-ZPXZZCUu3VvVTK%W)mC9ae-U03>ML5<45xG*Xbg1#{;K*HL zRQq`gS}N7KhSiE$+T{nlZkH2{IkZT;fNpV;LRa A!zBj`GrG+B5Z8()UDGZfa z2z%OW3r4@Yx@AO%WtXn1Ouy3!=#LsJJbEp2v1r?fKWsoE m>}j z9bZx(=Pq(^4I 5GqN(i<1WQhV~nw_$w?;1r5XFa43VaVJbqY gbg|H}Oi}^gAs5^GC&DYS+@ae9vL8rH{+x2HU-zQI8bU(w@DPEG(#blhrq-9Zmz5 zJp-Rl>lJh-IFEZQd>2an_NL8mhxh!|haD+Y8bmAhE-yMzvl3iDbzGqMk48^TZ4&s; zriHoqK$SMbu`Op!_K3q-5m_D#yxmy8|M)kmF4)88I$MNa5uR-++54v^?XYg%V=FxS z@A!-&bI=#2-GzYFZauoE;KI_B7|-orGxJQMHh-eI7;qVpdL`MCQN!Kv(4mKFE&JY8 zqL^zf-}Q3PW-|?z9odGq_^_LTMYXKBVae2Je9r9D=DboEWh>`Arf)`Dk@B!3D7VuR zQRlFx59%tXLE7f5uPUwbphf$+B0g_|@xM>Gp6#Q9!~F-dCpdQ*dz=LJ2hJD!*yn8f zYXCaw#8Qzq0bM%^%RGjM%pw6usF|tX73@D?VexkEnxCwlU8^H^o;>GW>#Fs+dC;_1 z<5Vp{yF}=wPtYHd=4_J2norY}!$i;&u#V#nBvQgjdSPNE8fw9=jVqE9l`m1QRCFqq zZH;N?f6A?wM6*%H jRktOrqJz`6 zvpI|0q9?miUCrNfU|ju1=$*IO4Y%TusC+S|iIhDyNP7TP*m4DC;#Z`zrC!ojsOd7* zV9r%N8?8t#)|f^_Sx3cG$9z!T?q8{|#{$sX0Bp0wQ8oW-u>cQe>-yK)cqdxBuWET! zVQj>70z$a)V0sAPgiL-No&=^c)z86yqS|XH999Q7 PTZYUSKPpi*xbQg0tdk%6@2BA6xMtyoYUVpB%ZD!n3leqX;3z(l6P046~ zr4{~!O!B(U;CVvKxW#xdDfVXg@0B8=)^l`ir_qsnS@)>AFk4if^|D8}NX$ yE 33t6(;3MH Goy0-lvXXO<#<1TTYd6deh z7X%>4 QyQ)I?4Ll^EzAiRQ(Rw$RmYv18
1-s6&p^tVRujGqY@ma@4< zz%sliYm1#!)@l7d1 Fl zA6~q$Ti}UxI%Cfo4)FFQY2N9ym5zu6X_?T)`l}5CwcF9kcY%D%u380_j#^8Poa{)a zlBjFr-x)TNdi_p`Y6iAmIe^luEomSWt)oNB!}%W?6~bn1joSkDas<93yK(1GWxa^Q z@mJ$VvD#eyA!O3l*JAtmVtBvbb_`Vx5y1}JVx2j>bKWcy4YIyt25_~^*Q`$|y`cQ= z29HTqPx+JM8PG5VpOTk{so52!B`|}LPirZMe2rQUD`0!7ZPkMIHzzOo9y5!`0sR<( zOilV^$QgA>R36h|jG&KZkk%+pAKpLT6VN}ihrCT$iK8{@Z*jc~iEAzT$9sb#oUL30 zgZVlfD`D)gw(Fj%AJIQh`U0kHQ=Fo^@7!9ee~X^vWCb-aG$Dq#rXB5Bxvv!hx`e2! z>>eR(E&!yxE5Gf%kG}kEE+8NHZNV4nF1}u!T@#`dJ1l$Oaecm#*Lr9r^~ZUew)Bli zo1fwrdPl`UBWmwCGRsbX_l9wG?t-3lLZ4CZ{b28mRQ5YR*e5SOaxzOU8%ej$A(zBF zd!@9fj$xm1;N< >q; z<%dT>MV-D8;Tt y&(O+ +@YCr{-uSN#g#Q|pSuWi^lIB)p>ZpZ&-Uq@1zwX?4pPxN$N6$n- zElA@wL@*Z%;@I$BWvl)aZ>gW9G_56X!Y7Z<_O0DFOijE-e)VxT!?4C&V#vh5;}V3v zR0?va+>M%}wjg!h67Ox4S9Wp*Sq?5wnxu7)Kq5$RBBNW?BSwkW W_+bPMR8_S5~%1f yI#v2yrU}@h8{Py!C6~eoK z>9L!D! Q>TKWui?E=_k&yZjNyBrNfJI0$muV&Ib)U&K8Z`Fgn{9^MjG#r*vV zEl2;8R~T@Q(m#rwX`vIy1F{9c4oI$~s;hM-rkm_&%ZW?srg%a5*LMPD{jslvE}5|N zksEhJNL(1K^Rm1X8E}fU QtsBVr-6WXYfy-+eU=XEcsdh8dqf@ImW zjeE{yg4?AYaOqDz3&Gsm?OGe1*l)ztq{UjYo_)JHv|yT3br~-l)WJw9KO?y2K12WR z&7R!%EVOOe{V`AfIyb|uZY&9C&lo`Dg1;IY*_yl}9t+^~;VTtQ`81#6`1i}^!{V3a@%oJ)aOMf4 zsPO&spa_?#@1 `>J3Xw(2$}_03 z+ew8afzLiXXdCms>U*3=ma$(Ub!T&+`1lehg0GHQ>(+HtgW`+kY-&>7+UJo9Y4X>w zGNuxfCQXQe`jSf~K=mE=w1j>`6`~P&EKr{K=|_gfZ)&xbEZ?2@Z+N3)`=TyCryXZ# z)#39Fbftb=stiD;UZ#Ll2LFk93+<-y#G^b9{k~|G>^c*ltx&|rIaSFZ?r; Tru vvRnbFUtqj5LBV`2r^7j$bTNYNT^ Pw?Dnpg|X){Wn*3BN8cDu4lf1HRcIUOLYc*9Lt%V$x9&2iPY_zie&KZ zo4aody<`_n)%mhU9$Wl =D<;&Jx)Oc(Tz6DfpRHHzyVAB#Gl9*3ISGII@Q zmX7su5pHG**N0?oBZ@1yFCR+tJ{3t;y-i)HzID9_mijHNuM}=9IrsU@F1omP-;nmr zzl)2Fkk)~`P2n0(>V+o?xnA5c0|~M=a%=g%dufYj_xS*_1vG5=4>$Xm02}>|%m%CP z(&vq6t{*X*(~#xP-Jral*)PNuHy-lLdqmX-?6{bmNm3>jB8uX_oIm%S8scy1lwI@e zJ4g5~JV~$L8WMV8-ZvxEv>j@iTsf{A*4}g?nCT`r@kwzQpFdQ0-_h!$^y2m+{|+mn z%?YwuYJKYd#eLc!Qgk}g 16a~O{<7w>uV>o#zeB0NtPFUudmQj zMm%KL(pOHi#BCO%Q?Dyc&L|gxcWli^+o0*dYsN=U9+>}kLg2UfuU85GA7f`76j!$H zZ6G+ogIfp$4esvl1PdD6Y24j|6Ck(;5AM>q6I>c^+})k8=giE#r_S74_p9nZc6D{_ zg1y(f)~nACaePq>HqZvKR?l7^$VUFquF$vXCy$lX>bm&QB#n36T%E_HSt51XA)r}! zNj|bc%>_u@^#f@NxD~!C7&KQ%>iaf|-mK7`1AO-SeU?^c`CMb|>?G5Cw*+PnZ*l~A zYK$0g8^1jr->dSh=fLP){g@9+I<(pbpQ;Ckx@HrPqW1Jkez33>J|*tL$H;mCcxZRs z@;TALMZU#!odRKl-Yhcakl8M@4;J9PR6*qI0Bfml=L1e4%tADUZtFph-7MTJYAG|H zI|or!Kb&s`DD;|@GN~NWuQ9G&?yCyqA0Bl9tZOa8rOcjNRm=o1bGrtf5@?HlmCU0O zq~7x{(I;c+o*8XE&ZBQ!vb=Xb^4$IgfXZH85Nfd>xE1gQ*x2RQG(oG&_5oBo-8#NH z@Q7(0m1wYbFMfW=t>=eCb_qI_uSw2wEkAH@Eev5#>BFlq&wRtCLj>Hw1zGh)S3U;_ zue@Xx*lWa!L>Mom+z!ITiX^)Bfq;zH>(kg4lT<+$M|^;+$-&k)!)$U=gTfD&hGGby zGGu7l;BCbDg^6! G& zz*7taihnrRjEL`WB*x4@#qBieS~vF*YD28@*H( KE9ZzX}RdU`fGi5sc-sS(%8nz zQZzcui6**FUuNil8nL$V5e7}Gf4TkA=ag!n3g2HVqf@-i_hb-)u1FppD+o+PN|SUM z6Wi ber4Zf$cvQ2s|X(>dZg`uxm=pp1>IJ&MC(4h~Ad+WGh8GDK6ONWPmXA Um(2AAk`_8ULC|Fm zEpiG6pSS4yU6O6pM2^Y1XTDdwX{_vPNJvGTPrJtxdKBWh_7Y;T%}0lfQ%33*Rfb*u z^ce-%ap)}O0XJiKMBk^~_CNvTK+vnB)*Wv*I@%5-o3|fET(%)Hul^1qZ%?|5*LLb3 z*PZw0KlI>r8ILSLh=2>G)WqvD@YyJzD51u|%kHhZ4*N=2?l0$A2vJ;)YQfa5xAz2G zW+oOWtHb6;{Ij}y=-3<=^9kcazyzV#J8L)DN5jui`E1@Xh2H 1E@|BYo6M<1&hEii|?_%7S0C>B$%ag@vdR)Q<%0EMiK69?lSb z!A{!^By63Xan*L&V*)M0H|bf_m&vn(O@=%*0&Q}62HL*c586I^De@f8B<{sC;rR$R z4S_$O-G=e_pD@%oWDKpl=Jj~eNvAk()(gChWimbYG$sgrUpI|B&I%l9XZys$jus_c z)7D%w5Pub8ny**VwLdJ#xYmQKUU)9fW`Wz$3rR50_rFW@esWh4%&_-}5kH-J)~Hpe zL*v1;X^75WE$eLer{Cwcx}n0I3}yqR{XpOQ1D&H5h>z)ysNaJ&dTO5m!>wvM3FCj6 z_yknI+HHOS)|b(TO$ngM!4N(6qP@}fkBIgJi7ll5r7olloD8?m&egVIEFNZA%$90d z#4p(N8Y{XQ^d0SPwYt8NS6u3)6|Y-vMBA0gw?Dp79Gm8s9`H7=zc5^2?%;@|l(xpR zb9js4 IlW^8oHHN-rHVq+CC-RNoI{2ug$nqm| z@Cb05TphEK1!5ojF|UIyA JKiD!%ja|w4AJUwT zrjanF(0~rxJDyj_wvzFlY4R10f5Mo4nsOtB1lX7Q1i7TUKF}O(=Ysixs(7I#)K>0C z*KaDudAhiIhY*|kx006(AEj*~NRD;Sfc~v@p)pN@d;Agk%ccif>krn9D$uTV!bGAV zxr#emn!^6wTPz@FSX>Dtk{suisJL^X+-pB6T#7~{Zr$k8dB8hJ%&o3^ZTA`sik*iv za|_;S^<5|ppFceBg%xG_$h &v&? zS#e$eREiJaq=2H%XZ)SnC>_#$pjGP?FQ*ziPc|5en%?asG*uwy8+dY<=_bUElI%e8 z&M|?<3UFQ|_e@ug<+l$849YQe7%m11p8T3toaiVhuYmpbGUj+DoteIL<;7Ue>i<(R z6!mbjc&(MONc=RQ*uDif@Pu{0Ecx0sgH=>wHDpTN&4uA$PGKOG!WvW&FA<3=XGl(b zJx8!YP-i~jx$Zq*Ww_JwX3W~is?vaopc2&ZqvNvrmtL*PMv&J?I6=b4xmniFD-8`L ztWGXW?HeOZv#BB>=NG7$K3~41R@YljQxUM5guk7;)mG%!tPcauVj6#oA_B>ILbM{t zM)m3FH7yr(uhB?>@-pwRl)8R0h_+&S8~9u&p++=)MoOQC4qD?`=($d>6}M~SYjH@a zuq(a#G3V5frs~&d`9bKx?!j&3cd8c>sls~I?(fu!{a+*_!z0nQznY|R9nH!osR&p7 zsGp}M{BCArhWMQFh^B_9%ovJgq| {4Vi59y7m4Zt;7KdEa;4Cm(PYvHjM7xVV4hSi tOs6>4e!x0gs(Ea_Qh@o zMpm*i @zunhXy!IS6kH#(-%l3@MB8z1ZsJ7_$i2I| z`*Nkuw>X!1#OH;c`(}6EaUGBIoEj|{-)5@gr_-O7X*RflUk7oLDoGra@xu@<5@LjS zuXdb=a6n~vX+V<*PYY4^&GOss<5~wa^xb2YPP~RkMX}elA%dk0@eV>xTyCp|ZoN#J zZn0X-B-jMW@P3xuSrekK16m~sAqF$0$)`;`PGFJ3j34MaQhId&*)B!pr4kLb-?olH z@DsS*f#cTOjeblCm$3}Y*jg_73`?yZIGxCtWAG=T(s8ae`9y&_3a7F5~4cMr-4{X zfWFEYL)T9ggU|G0O?8p2HXcu1k}Mlc?&Gv2H6Z2Z{ DyQVV z_w_X%sdd7c`yKn?v?mXr$MZeT;5%CpH`%*HTz2{Y!utsGQ9(`KT547*?U9RvPm6Z} zTOxPBTE;P1#sp<@Zl1@(6?uV-hpe8@Nu%P6^>o88$38lQ?6XDYx>+3yV~r|juGjqS z&IK +WRG>ZPit8 zvwGrpM0531dKf7bP>V>uP@ejzeysE}!HX4oG;40VYZwc0ehIu!xfDJ*^3i;3m8uep zl(RlKzpBI;dfibU)*;hOqjM9~|M2QwBJcV+c0J`3Se^y!&?3=8Nom*fEei*xFZ%sh z;)N;lKGbSft|V%Lik)M6I^-bWF)DsL*@0edJX6%-QgrEfIGkz!J3d!>sbIYY4wsrj zILC952X8P%h2rXT2q{+@D@%!--G#IbJlSzOem~jA>U%^JfM}chg8Ejee;>w9QkdQC z($+0Z;{8D|6iKVSp@@svb&o8nxbIUC+ZN2T7oo9K)25PN0)$P~8@>r)JZDznlic4u zw$fM{@=X!&as{w;c;)?8Ij?)P`MM5^J4oiz+eJXc-L|Xi-G#oz3Zx45zvWy_e}254 z%zT5ef1Rt;GmdppUA7e>B#1B>% X66u_jTj3_90q+?d1!uRKWjO@po$_p%v0d) zPVM{H@&=~Dn0$?JYr#_iIjfbtA@tVI4?!rA=Y=S2^Q&l~;AYcJBxn!a4SXt36bpVa z!tlm3Bp=mzohBlu?Vgk(&I83))92uH3YAu#Mly92l1?{%E+Wy}+Vr?Iojs^GRQQyW zJI~i!tsoUMcM5$(bH8rW%C~t40Mct^1RQS7dak3O={(v0)NdWAH^XDSUU0j4qUc?+ z&)QrCHSM6HuQuK2{NfY$%>$dhn8R>QS5E~0qpM~yuyaqP=jvg@9=OxQUN)MKS~nXX zcv?WDpX%q+lUcJARbsZwa;Duhs1L!76=KH-$ZM2s4sDMd=eg^?>F+@|mZX2|TQEIs z +MXgOVo mps}Op`FSAod5p>Sx8kcrbTC2jsy~V^6kU~|sy#^$L_S7iy3DgVkDzh%F zkLI0C>!V~6l8W$hO>ozbnc1mGCJ>M;Lj;QNj6SRK!8|K@0!u7~vpfGh+>Fl@Fxj}^ zX(8#_S&z- Va*&_1lQp2uEdNm`X7l)vei}M^`y}fb zz<`WX%2kr8-EaH(sYbuo20akqK6!twjyL3i_cXQq ;xtP=5OT7gCi)@ UWv6dpzN$d60$3>y z)Xk@8&;yCM^i%JyR;l=r8PyDI@e@G$U2sdyFB{d)J{NdqU&cg=FS>fCa0W)#qIuo) zer$I1^DI>xra#z9ti&ZeU9RYV7_E2Q*VEa0AbTg*p6*bBYL4w%@ibxvtfs5EjcL)I zRG*>XH_*2~q`L1J_bgpo+6lf69DHU48z-xw(n@bR|22e+)s?~p5=IJf$Q?i z5#Gp !i6CHOjy zNP659wyy_rX`&4n-_j?VgC{b@W{9|lTX}s`mt10|G~sp?P__IZ9SH(kTLu-$9&$$# ztWoIQM_cxHq;QU_NZ&}C6GqsbV;b!49hC0pOb<=ESk)7(JMrJMDxvitYz>zSS*D{n z4*6IDb}>-R79$-Bj|+_84R3K;pa`=hS2pb3=|kOTJzf+m+{X5)4+F3D5)!tnAUtbG zvBFH07j})OC2k2_=y~$C+ZtCotctK3fcLPs;ec42?AyNl@guPt*oE3D0U^spPZ)x~ z;-Xv&@aW1@iZ&-q{FdI4pt~O$i_xZ6(rTh-e?I%*7OCe9{djhkPHg{dx|k^aGdW}Y zGQ6|E)0Tc(|A6AKoUBLTM|MfmB13}|I;k@HMAHtpA|A5|oeh_76eAtCoUhX~Nv=$I zlus@T>zX>z>5^KOJNf)kLF;SzZ5uD7LCDb9++}JFrJek1C_?TI{0!eKLJ_rYZ13*$ zYZPxfnD3ZU?~G+JGtC%spq$l29g3a(KE_RL3N_nvk^bcFu{C6_rwXL7vwxQFsAOz^ z;#$AOJZh^L!}#7Kyz+c%e(*am09F|4l;jh9i<-bf>-aldo3%xI$4(b>-8YJ8sdq=z zOU}FC`yH+=*_HJv1{>Mi`(8JM3Q%i0utG5QAGx+P*fHK`SQq7U1CRBBSF?hJH@9Fh zv}Hi-ulcdUNxPOfpI4ubJkn|du2D4&jbZvqV8R4thFiCYWU0S(gL#%`+p^m$_H~{3 z!~)6Vwb*Rg)q@6(chBUW9a~|E+r^i{krMH}!MzetGuph{ty+(jrX>WcYO=Rxbnoq9 zrF2+WTU{z__?=!(P={&Tbe7fqD`0l=ooqd_ljkkn_m)K~m%Kc*kSl#f#Tev<>y{qR zS!V`=c3pv1z?}8I1gq5y&Gyu1D|HOgSZe|t3(!vKUaK1y!EMq$T~?iblY*d$#KQx~ zV#FQ%Nvld2*acu-?RmUDG;i~Szz`ZPD8bV4@4ZS?n6|7z8q!}p;y>McXZ|v1RMgm; zha9zDOy#+FP!JhahQI`}dWj_hKrMN-TR)L?5q#JCrCcmVsURo-?J?~U>!c@F{UM*Y zem056u`Fnu%S^LGb7on&w_(#2q7}h+4d5**>!{yvr^fYO=wXvIHp~XPqQim5JFX%! z%2spE;KI|%8Gp9g?-y;3{0<3rey)+nc}h?7T~6xL= DS>alQ2~p2jKQlIZ~T-1vJXoooP8DaZvg9i*{uX^ z(^ukMRrFz-V| $~@pTMoXJASxjQR|`m*>B9@?_m@1Xb0ETFvib zd;|+FaYggLeOzAFZB}ahp`b7CKaSe4A8NtR<3A0_(3>^f_(1qo(M9eZZ}|x_9jB_1 zvdo{JZm`f@8hH072|`hMIbm-z5n@-lgAmL+@TcT?y!@^30Pnrtvf?sU#_N#HroX10 zutQja90wmn#P)U bz13~;ic$Pf+V=)AmE5dvd83Hk@gpf*cnccm=98Z|#1 zhd6E)c-?h2ebQjLUsQ0#a-Z<9jux2aGbUoOZy1m}S^lNdXA^(k<5W-<(Xm@1Wk ^E;JuvoSs@rxmkYzqjrl6s>-PodFF-e96@ z%~bIadKs8SGa~#im1AKT1?sPOkrEy03YDqfzGGNXP)0VBKV*4c$WkCm5$qm6`dyYD zBuVIX2*R!%lYa%h!((h0Xz7HnT*h#J%$3uZ_jNI=egdNs$+N;vxD`vCsdXQ$_BnWL zfqb?Wy*NkYUgh4&7>}LTCbW*sRChtjU%ii)s;`{aym*O2APF142MMO;b4UiS_(b&k zCyP^kjN}9~hD5el*(1JEY8|I(@yh#Pn*PV4NUtFUbes4A16rj8+(jN0H%o`eL#($Z zcfAbnepfAMupq?WAQgEF<#*2+U!9KHz=wbKyInHa=LqgdS*f4$7$hwu4H@UTT(T6H zM nz~*NcUhDU}g9a}*%D|4wqC=yjX(b*NyN7489`a2X7YO_K zT&jdR!Q0~^n+YGV!AJ%|h )7I-4yV0Sk!7uxvbxfa^n{NhOd?caY^i8aVHpkw%7WQ0M za~xD#J%>j36HToJy!m~LFr1it=#u&Vt};k2sOq&QJDb|i>x`u~=i~h&CP=E|rCw~b z!kYnepw-p=2p{%)Wd~LEWB%Z@bxrbt*KT`<5S6`f!U6D7U61A()#vpmiq7T2?c>hC zB(86z-);KHs2hj~(1FKj=lJY@>-E&0`K#MLD(Ig gqVD${P9F#^Apca5N$YvO3pEhWWK**B zO@0}|=yn|~_V!@U4In-N#=M9lc5~p?Qu#~|Pm?4DIn2t+$#lA3ccG?Q8<$C|5bbTU z^zF&4r-DnBJlG+Sm!mkI;iHbpSO(9 zfQx8)8CULsT41e8dakb@icA^|Gxl1TuF0 zj`&prxV7eH56Op%IX<%Cj9AT*=}l1}6 Wezpsb1OYa7pehEGUJ zNQa=M^xhtqN50p{iV!O7(qq^Dhv3T?*NdG@Ag^|E?G*U?chy=w$$C4l --`P9 z!OTdjCmg%)97dOlcp8_LaOGM#N5;53Kq!ds8sGxVAD*5bjFJkk$d^pd^uu-wwKJ=K zE&q(Pz5+e`kgBFq2oh}e$ZNOpEQR2$_Hn6re3|d*5*)e>^V!glxxH@QN!AfZSqe8Z zlL@JCi+BY 7eD=2t=l|t`2K?x`C#NZ{2JxaamY$wqAs?6|w(JH~}n}Q<= z5g#mRyTR0e?~Wi!-cOM^e~eXp-Mjm+IZL!NLVp+qI*t`8`yqNA;d54@w{`d2B6} F{SwDMzk91wVh|S~ygT6ye_#)r zyE%%~vvaw3OSfl_;9;>{?pNZ-A;H;@0Cf%*)~d#n@L39v5Q7nEwL_O$9BV6+=##U+ z+tHkM2ZEd%7ti=}f0j=MpXm>sSx9##D4gSU(Q*13%{pBJh`5rp;w#3S&Kr|6rPeLH zzVlbg3Iax7@)!_-elEwOUo39|gqAX^YK-_pR1hhuE!<~I>kl0A)9uW8MMK{bPW)>A zq~C)K6!E9v@BZoKV~^=E#Cka71B=AtLiwd$Gj+FhawGrPST*>X<6MO7FUpd}8 z&RU6^8o1y)&Xs^!&()M>AB>|;0~I{W$+##Sd{8T)d*(1ZKhVN@XH{cE1-`CKE_MVI zz9I1K_QLE?pKpGrnP?x~u5_9;`T!i>F(+%C_HFkLxuLGe8h}qDYA28scKT00K28N@ zKNxH*iHheA3(2HaApB+w7(&f|+q;@Cg(^38FtJO-Wy{jS?A~#b3vwnx=HRGrY2DnY z8g$*1BwPoiV2GczJd&~ctrzVa-5H}LWV&V~>Qa{Np0r@FYc#>n;plX^b)FS<{8o*x zbE-<=_9t{okh&K2+(c*;Tyw@qD{}uOPo;=YW3b?oVb$w+y|_q7%TPXHZ4FdIToq^= z*V5A~AZ@`L-kZ#ynReqUQ6F8G8|N=-opnu$7YiMN!ExI?06!)jeDvOO-88wc8UI+( zeX4i6gn~+d4#tRA%HW<1ADHA@uKh$y8}D+^MFcv742D_phXR&WOR{c+;!Nd6u1Hfn z(LwE?120
Vv*8`{s-}U@ z$L% emS@ _CAQi-zNj6--2fD7p5_ToQkymmI^=dfCHbjv$ z6kRt(D;BYkF_}}9*oB5X(r#B pY)FMo>$n)4 zNQO=#y*CE6FcmTB*5gP*on1htICBAyu-Q8F2ETQ3=64NvCQaupj4kK9v1@xKGYHeB z|CN&v?tFnM> 1tNx5uCv>0B6&^4sn*g6Qi#%!t8t<=|S zgAk^@2YE(J-WYn-Y2bj-hym3C0VUylP{SX>a}qPP5QJ{?TM-SH_h$U=H9-)ZGh}Ra zL`<4?wkHiehH_>hW3g}k6zk_9oMG anCU?bayrugF1V`%olnS9bv@0yz*#zkY zU&6ZI4nSOzG%+ZUX7w3V?2k|z- 9rdkcyD7r1Bd9*=XLA zFHQCVCl-wwuFDQB?@CuOT9V!EbZ-RqggsuLZ?{&I%tlfij7^{J&RN}7`R~8J5JPH$ z#q#N#>X4jxVawy#I73_spL{$V$}SPpMi2s8Le@c5Zo2-+p@y!-6<@u}Y#K;?uB38v zxlK@&$lzmjDPcZ(M2VYY*|-eTP5)hI4ujav=^_Vf+D^px=L@f~49j1SmeK6Vai~m- z#~epLpeOz0n%TpU7)g7?U|?X=-~PE{eWCQvX2?V*Ku@I`t~b)5r z* zS$ChO^;6EFLM-EDPLf53XXf&BG%ZXH p(522tV|?n>J!W+vJ#P$~)D2NOH51+W@+!)^-8KHCzl zBiFIt>p7Ve>AA*d28PCQdR#z6$JmC6alFK)u(0Wa#zscskNcHo^o}`)Au~)2Y-UG= zMyFZY{X3NpH5xCE{f{-CE+vWTy#=Mbniq9s6Mfu8k*LwMLP7(~7RB-nm)d$~&q^+} ztGLjC2OZ#LU%M33AZY$9bH1-S(0FT@G(@>>4$C(68K_GO4d2??;vf%2xDc_)fFUy< zk^RF8vXN>a2bWo1fX4gmxzC%(+T$?Qj2bPe7~UUeOPY8^!fh{H=shU5BxIJbj_|!C z_pOZ!QLpjQBKzOe*-oUO3y2fNZj42cmh-Tcu)+mVbMce{s4eiGRbpMWy38dp=0#2n zvgng@pO5_owSHks*;3k@ph1cF>Au >FO3Hn)XPYskHrt=JDP6g5GTB> zcU$QpY0;*S)K$GS_Q=&4Bji~^YtrisjC@_{YnpKJ;e2Mr7C9Cj9MGEmG%D%8Yr||$ zI;kfzKur@0Usq=fnn&-HJhsC8{K1`bJ09bT-U8HJcTDJ&_SMRLS(iYqniL3pNfpc~ zPq{icv9ad+%UUVpMjdW z53fLMlEA=lVvQ5F#!RWcWM6RGIk~tf1Ef${JMV@|WHYkFZV5(_2&ghXo%7`4m2G)v zCH&ih{Np|R>r-a{gTc6Y-VKpRio|1*+uI9xTxtsz&%%dkJ#EQPEDk%xOG-zvp8MrA zdDa9LY#r%B`2BXAz)}zzG0QDYP &YyrV};114}i$HwtL{g~o2`;q4CA zSdj9oGPw#rZZav*bCA^Qlorr-p2e$}Lb;98T;o3J_~l{&zC?{&MembTX<6Av1k$qa zC$^mI%uyt77g_6C)>;`5mL`|lcMi(74$3O!d7>g2A0&pa zuAuEfvVQp3KLR ze5U{akOhNNNritL=bpZ$ocMwiMa-hs?l6;U=Kh&l>F8IFjoW4*Jf##h`z(jUKKQfA zIWqlRJ 23AlFcgnQzm9?TC+|OJI%EhM~`>z9L 6{&<&2FGEf`3k0PF&EmC9`OxqT*k25cubYEVTvuvvg71Kp}S7R zJ@I?Zmb~t)2%lF|Sgvt>R45|bi*JS(eDj0pV*|9%(y%^$Sb%k_OI3Nb^_)Ne=M33D zJ0IUSWa_bh6$u@+LeTX(nV)gR<|(r@o~boY=OAI-L?x`UJ*+(pCUp_CxkDu@4)oTH zmHLZXZs8B*%e1T{g98hGdz>cRD0=PVPj5+x+;RaDoM!s*O7MO~e!4&a%Yq2z>}FIL zrd$Gwt8R? ?)y|1|CLQ@ranjxVY{Dr }N)7@itu^A%AC;+JWtP#O5iC*%biCBKJsxRM@8PUI-o0H5tVOa@Eut2Q zz}ts?vxD)cb66t@g@Rhq{3L4ZH}V4uSkfR85!otJnI%v&M}^823nj5Ky4g4NpV1p6 z4;v=~^XB1J1%1`aY>LvhfV^s{LTr2AoDd9Gttc^vkt;m9VHYtY8vU6Fv=pvqGMdKQ z{90K#oC7UT;MehC!ES?jf3`JpYrCZAB*P>uxL?+U<|sX4a5Bcqc(`F^DDd6@vS#N- zzHbwm$jPKOOpDRcIY>$NtvXon<$j+;_|4;^YC-P UoM)z}H>@(cz*~#-| zB%`A7N2j5)ciI{nc5iW=kJEU1WPaRaW>Gf^E#4u={j@sXc;{pO$3Q^9Z>(?`P@DFb zN}cp5q7N &0&Pq4QoM`6Pq4 X=t40hEOxSDQ25i3kF&=}Eq zOtbh9T_0&QmqjEs(b}nKG7bPa)0gNi5irC`-?ik3&E*{@^GW0>I^%G=pYXtm3W$Mm zcmAA0gF^cGAx8)&rEoqQ_sMQ%KO~V3x&3psk#-Ta|7|;}E1GGRZQXQi=9@oxH-n@B zb}JFE= a~EewU!RU&P|<49PoCdYhTGf7^{J1=L6AinT}J}lluIsv^F z?*#9cZOME4ljQ!cuCw?clcPOo)rkV_KClDrr{9yA`?+N$D$fy~r*osHbo7V6^R)pz zzqHipA>yEM_12uy3iUrqRV1Q3Q7X$nGZaO9-3Z7pZPA`_d$xFR7~X;oWN8c&?sD^T z$7!fRhdA=hNw{emBrvt4eJcv Q*8pm~Wi6*7Pp7n;YqLlv|HWbH?}h-u$s| zntX?%BJ^l>QB5(R_=v+(a~YiS A2#ZlKGp zJdDA_&hC32SIFFaxdZkf)OurWv_*;K;GFEjan3I7%OzB8Vb{1{3X;c*R&!aKHd9wf zq$`s`(@Nr#j4uesyz*8HTMHL0){2ZreI_0I4g`Y2n#$Uj%$