From 1b3add1249e3cf4cd073c4d2a7deb90d26b71645 Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Fri, 11 Nov 2022 14:33:16 -0800 Subject: [PATCH 1/7] del 5.0 block, add 7.0 block --- .../debugging-with-visual-studio-code.md | 217 +----------------- .../library-with-visual-studio-code.md | 30 +-- .../publishing-with-visual-studio-code.md | 24 +- ...testing-library-with-visual-studio-code.md | 18 +- .../core/tutorials/with-visual-studio-code.md | 76 +++--- 5 files changed, 80 insertions(+), 285 deletions(-) diff --git a/docs/core/tutorials/debugging-with-visual-studio-code.md b/docs/core/tutorials/debugging-with-visual-studio-code.md index f9e0cd5a34e1f..cbb3f99294c3e 100644 --- a/docs/core/tutorials/debugging-with-visual-studio-code.md +++ b/docs/core/tutorials/debugging-with-visual-studio-code.md @@ -1,7 +1,7 @@ --- title: Debug a .NET console application using Visual Studio Code description: Learn how to debug a .NET console app using Visual Studio Code. -ms.date: 10/22/2021 +ms.date: 11/11/2022 zone_pivot_groups: dotnet-version recommendations: false --- @@ -216,219 +216,8 @@ In this tutorial, you used Visual Studio Code debugging tools. In the next tutor ::: zone-end -::: zone pivot="dotnet-5-0" +::: zone pivot="dotnet-core-3-1,dotnet-5-0" -This tutorial introduces the debugging tools available in Visual Studio Code for working with .NET apps. - -## Prerequisites - -- This tutorial works with the console app that you create in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md). - -## Use Debug build configuration - -*Debug* and *Release* are .NET Core's built-in build configurations. You use the Debug build configuration for debugging and the Release configuration for the final release distribution. - -In the Debug configuration, a program compiles with full symbolic debug information and no optimization. Optimization complicates debugging, because the relationship between source code and generated instructions is more complex. The release configuration of a program has no symbolic debug information and is fully optimized. - -By default, Visual Studio Code launch settings use the Debug build configuration, so you don't need to change it before debugging. - -1. Start Visual Studio Code. - -1. Open the folder of the project that you created in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md). - -## Set a breakpoint - -A *breakpoint* temporarily interrupts the execution of the application before the line with the breakpoint is executed. - -1. Open the *Program.cs* file. - -1. Set a *breakpoint* on the line that displays the name, date, and time, by clicking in the left margin of the code window. The left margin is to the left of the line numbers. Other ways to set a breakpoint are by pressing F9 or choosing **Run** > **Toggle Breakpoint** from the menu while the line of code is selected. - - Visual Studio Code indicates the line on which the breakpoint is set by displaying a red dot in the left margin. - - :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-set.png" alt-text="Breakpoint set"::: - -## Set up for terminal input - -The breakpoint is located after a `Console.ReadLine` method call. The **Debug Console** doesn't accept terminal input for a running program. To handle terminal input while debugging, you can use the integrated terminal (one of the Visual Studio Code windows) or an external terminal. For this tutorial, you use the integrated terminal. - -1. Open *.vscode/launch.json*. - -1. Change the `console` setting from `internalConsole` to `integratedTerminal`: - - ```json - "console": "integratedTerminal", - ``` - -1. Save your changes. - -## Start debugging - -1. Open the Debug view by selecting the Debugging icon on the left side menu. - - :::image type="content" source="media/debugging-with-visual-studio-code/select-debug-pane.png" alt-text="Open the Debug tab in Visual Studio Code"::: - -1. Select the green arrow at the top of the pane, next to **.NET Core Launch (console)**. Other ways to start the program in debugging mode are by pressing F5 or choosing **Run** > **Start Debugging** from the menu. - - :::image type="content" source="media/debugging-with-visual-studio-code/start-debugging.png" alt-text="Start debugging"::: - -1. Select the **Terminal** tab to see the "What is your name?" prompt that the program displays before waiting for a response. - - :::image type="content" source="media/debugging-with-visual-studio-code/select-terminal.png" alt-text="Select the Terminal tab"::: - -1. Enter a string in the **Terminal** window in response to the prompt for a name, and then press Enter. - - Program execution stops when it reaches the breakpoint and before the `Console.WriteLine` method executes. The **Locals** section of the **Variables** window displays the values of variables that are defined in the currently executing method. - - :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-hit.png" alt-text="Breakpoint hit, showing Locals"::: - -## Use the Debug Console - -The **Debug Console** window lets you interact with the application you're debugging. You can change the value of variables to see how it affects your program. - -1. Select the **Debug Console** tab. - -1. Enter `name = "Gracie"` at the prompt at the bottom of the **Debug Console** window and press the Enter key. - - :::image type="content" source="media/debugging-with-visual-studio-code/change-variable-values.png" alt-text="Change variable values"::: - -1. Enter `currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()` at the bottom of the **Debug Console** window and press the Enter key. - - The **Variables** window displays the new values of the `name` and `currentDate` variables. - -1. Continue program execution by selecting the **Continue** button in the toolbar. Another way to continue is by pressing F5. - - :::image type="content" source="media/debugging-with-visual-studio-code/continue-debugging.png" alt-text="Continue debugging"::: - -1. Select the **Terminal** tab again. - - The values displayed in the console window correspond to the changes you made in the **Debug Console**. - - :::image type="content" source="media/debugging-with-visual-studio-code/changed-variable-values.png" alt-text="Terminal showing the entered values"::: - -1. Press any key to exit the application and stop debugging. - -## Set a conditional breakpoint - -The program displays the string that the user enters. What happens if the user doesn't enter anything? You can test this with a useful debugging feature called a *conditional breakpoint*. - -1. Right-click (Ctrl-click on macOS) on the red dot that represents the breakpoint. In the context menu, select **Edit Breakpoint** to open a dialog that lets you enter a conditional expression. - - :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-context-menu.png" alt-text="Breakpoint context menu"::: - -1. Select `Expression` in the drop-down, enter the following conditional expression, and press Enter. - - ```csharp - String.IsNullOrEmpty(name) - ``` - - :::image type="content" source="media/debugging-with-visual-studio-code/conditional-expression.png" alt-text="Enter a conditional expression"::: - - Each time the breakpoint is hit, the debugger calls the `String.IsNullOrEmpty(name)` method, and it breaks on this line only if the method call returns `true`. - - Instead of a conditional expression, you can specify a *hit count*, which interrupts program execution before a statement is executed a specified number of times. Another option is to specify a *filter condition*, which interrupts program execution based on such attributes as a thread identifier, process name, or thread name. - -1. Start the program with debugging by pressing F5. - -1. In the **Terminal** tab, press the Enter key when prompted to enter your name. - - Because the condition you specified (`name` is either `null` or ) has been satisfied, program execution stops when it reaches the breakpoint and before the `Console.WriteLine` method executes. - - The **Variables** window shows that the value of the `name` variable is `""`, or . - -1. Confirm the value is an empty string by entering the following statement at the **Debug Console** prompt and pressing Enter. The result is `true`. - - ```csharp - name == String.Empty - ``` - - :::image type="content" source="media/debugging-with-visual-studio-code/expression-in-debug-console.png" alt-text="Debug Console returning a value of true after the statement is executed"::: - -1. Select the **Continue** button on the toolbar to continue program execution. - -1. Select the **Terminal** tab, and press any key to exit the program and stop debugging. - -1. Clear the breakpoint by clicking on the dot in the left margin of the code window. Other ways to clear a breakpoint are by pressing F9 or choosing **Run > Toggle Breakpoint** from the menu while the line of code is selected. - -1. If you get a warning that the breakpoint condition will be lost, select **Remove Breakpoint**. - -## Step through a program - -Visual Studio Code also allows you to step line by line through a program and monitor its execution. Ordinarily, you'd set a breakpoint and follow program flow through a small part of your program code. Since this program is small, you can step through the entire program. - -1. Set a breakpoint on the opening curly brace of the `Main` method. - -1. Press F5 to start debugging. - - Visual Studio Code highlights the breakpoint line. - - At this point, the **Variables** window shows that the `args` array is empty, and `name` and `currentDate` have default values. - -1. Select **Run** > **Step Into** or press F11. - - :::image type="content" source="media/debugging-with-visual-studio-code/step-into.png" alt-text="Step-Into button"::: - - Visual Studio Code highlights the next line. - -1. Select **Run** > **Step Into** or press F11. - - Visual Studio Code executes the `Console.WriteLine` for the name prompt and highlights the next line of execution. The next line is the `Console.ReadLine` for the `name`. The **Variables** window is unchanged, and the **Terminal** tab shows the "What is your name?" prompt. - -1. Select **Run** > **Step Into** or press F11. - - Visual Studio highlights the `name` variable assignment. The **Variables** window shows that `name` is still `null`. - -1. Respond to the prompt by entering a string in the Terminal tab and pressing Enter. - - The **Terminal** tab might not display the string you enter while you're entering it, but the method will capture your input. - -1. Select **Run** > **Step Into** or press F11. - - Visual Studio Code highlights the `currentDate` variable assignment. The **Variables** window shows the value returned by the call to the method. The **Terminal** tab displays the string you entered at the prompt. - -1. Select **Run** > **Step Into** or press F11. - - The **Variables** window shows the value of the `currentDate` variable after the assignment from the property. - -1. Select **Run** > **Step Into** or press F11. - - Visual Studio Code calls the method. The console window displays the formatted string. - -1. Select **Run** > **Step Out** or press Shift+F11. - - :::image type="content" source="media/debugging-with-visual-studio-code/step-out.png" alt-text="Step-Out button"::: - -1. Select the **Terminal** tab. - - The terminal displays "Press any key to exit..." - -1. Press any key to exit the program. - -## Use Release build configuration - -Once you've tested the Debug version of your application, you should also compile and test the Release version. The Release version incorporates compiler optimizations that can affect the behavior of an application. For example, compiler optimizations that are designed to improve performance can create race conditions in multithreaded applications. - -To build and test the Release version of your console application, open the **Terminal** and run the following command: - -```dotnetcli -dotnet run --configuration Release -``` - -## Additional resources - -* [Debugging in Visual Studio Code](https://code.visualstudio.com/docs/editor/debugging) - -## Next steps - -In this tutorial, you used Visual Studio Code debugging tools. In the next tutorial, you publish a deployable version of the app. - -> [!div class="nextstepaction"] -> [Publish a .NET console application using Visual Studio Code](publishing-with-visual-studio-code.md) - -::: zone-end - -::: zone pivot="dotnet-core-3-1" - -This tutorial is only available for .NET 5 and .NET 6. Select one of those options at the top of the page. +This tutorial is only available for .NET 6 and .NET 7. Select one of those options at the top of the page. ::: zone-end diff --git a/docs/core/tutorials/library-with-visual-studio-code.md b/docs/core/tutorials/library-with-visual-studio-code.md index eb843159a6acc..a97836d7a556f 100644 --- a/docs/core/tutorials/library-with-visual-studio-code.md +++ b/docs/core/tutorials/library-with-visual-studio-code.md @@ -1,13 +1,13 @@ --- title: Create a .NET class library using Visual Studio Code description: Learn how to create a .NET class library using Visual Studio Code. -ms.date: 10/25/2021 +ms.date: 11/11/2022 zone_pivot_groups: dotnet-version recommendations: false --- # Tutorial: Create a .NET class library using Visual Studio Code -::: zone pivot="dotnet-7-0,dotnet-6-0" +::: zone pivot="dotnet-7-0" In this tutorial, you create a simple utility library that contains a single string-handling method. @@ -222,18 +222,18 @@ In this tutorial, you created a solution, added a library project, and added a c ::: zone-end -::: zone pivot="dotnet-5-0" +::: zone pivot="dotnet-6-0" In this tutorial, you create a simple utility library that contains a single string-handling method. -A *class library* defines types and methods that are called by an application. If the library targets .NET Standard 2.0, it can be called by any .NET implementation (including .NET Framework) that supports .NET Standard 2.0. If the library targets .NET 5, it can be called by any application that targets .NET 5. This tutorial shows how to target .NET 5. +A *class library* defines types and methods that are called by an application. If the library targets .NET Standard 2.0, it can be called by any .NET implementation (including .NET Framework) that supports .NET Standard 2.0. If the library targets .NET 6, it can be called by any application that targets .NET 6. This tutorial shows how to target .NET 6. When you create a class library, you can distribute it as a third-party component or as a bundled component with one or more applications. ## Prerequisites -1. [Visual Studio Code](https://code.visualstudio.com/) with the [C# extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) installed. For information about how to install extensions on Visual Studio Code, see [VS Code Extension Marketplace](https://code.visualstudio.com/docs/editor/extension-gallery). -2. The [.NET 5.0 SDK or later](https://dotnet.microsoft.com/download) +* [Visual Studio Code](https://code.visualstudio.com/) with the [C# extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) installed. For information about how to install extensions on Visual Studio Code, see [VS Code Extension Marketplace](https://code.visualstudio.com/docs/editor/extension-gallery). +* The [.NET 6 SDK](https://dotnet.microsoft.com/download/dotnet/6.0). ## Create a solution @@ -296,15 +296,15 @@ Add a new .NET class library project named "StringLibrary" to the solution. Project `StringLibrary\StringLibrary.csproj` added to the solution. ``` -1. Check to make sure that the library targets .NET 5. In **Explorer**, open *StringLibrary/StringLibrary.csproj*. +1. Check to make sure that the library targets .NET 6. In **Explorer**, open *StringLibrary/StringLibrary.csproj*. - The `TargetFramework` element shows that the project targets .NET 5.0. + The `TargetFramework` element shows that the project targets .NET 6.0. ```xml - net5.0 + net6.0 @@ -312,11 +312,11 @@ Add a new .NET class library project named "StringLibrary" to the solution. 1. Open *Class1.cs* and replace the code with the following code. - :::code language="csharp" source="./snippets/library-with-visual-studio/csharp/StringLibrary/Class1.cs"::: + :::code language="csharp" source="./snippets/library-with-visual-studio-6-0/csharp/StringLibrary/Class1.cs"::: The class library, `UtilityLibraries.StringLibrary`, contains a method named `StartsWithUpper`. This method returns a value that indicates whether the current string instance begins with an uppercase character. The Unicode standard distinguishes uppercase characters from lowercase characters. The method returns `true` if a character is uppercase. - `StartsWithUpper` is implemented as an [extension method](../../csharp/programming-guide/classes-and-structs/extension-methods.md) so that you can call it as if it were a member of the class. The question mark (`?`) after `string` indicates that the string may be null. + `StartsWithUpper` is implemented as an [extension method](../../csharp/programming-guide/classes-and-structs/extension-methods.md) so that you can call it as if it were a member of the class. 1. Save the file. @@ -333,7 +333,7 @@ Add a new .NET class library project named "StringLibrary" to the solution. Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... All projects are up-to-date for restore. - StringLibrary -> C:\Projects\ClassLibraryProjects\StringLibrary\bin\Debug\net5.0\StringLibrary.dll + StringLibrary -> C:\Projects\ClassLibraryProjects\StringLibrary\bin\Debug\net6.0\StringLibrary.dll Build succeeded. 0 Warning(s) 0 Error(s) @@ -375,7 +375,7 @@ Add a console application that uses the class library. The app will prompt the u 1. Open *ShowCase/Program.cs* and replace all of the code with the following code. - :::code language="csharp" source="./snippets/library-with-visual-studio/csharp/ShowCase/Program.cs"::: + :::code language="csharp" source="./snippets/library-with-visual-studio-6-0/csharp/ShowCase/Program.cs"::: The code uses the `row` variable to maintain a count of the number of rows of data written to the console window. Whenever it's greater than or equal to 25, the code clears the console window and displays a message to the user. @@ -437,8 +437,8 @@ In this tutorial, you created a solution, added a library project, and added a c ::: zone-end -::: zone pivot="dotnet-core-3-1" +::: zone pivot="dotnet-core-3-1,dotnet-5-0" -This tutorial is only available for .NET 5 and .NET 6. Select one of those options at the top of the page. +This tutorial is only available for .NET 6 and .NET 7. Select one of those options at the top of the page. ::: zone-end diff --git a/docs/core/tutorials/publishing-with-visual-studio-code.md b/docs/core/tutorials/publishing-with-visual-studio-code.md index f9d93eb712b65..2b7e9c372ddad 100644 --- a/docs/core/tutorials/publishing-with-visual-studio-code.md +++ b/docs/core/tutorials/publishing-with-visual-studio-code.md @@ -1,13 +1,13 @@ --- title: Publish a .NET console application using Visual Studio Code description: Learn how to use Visual Studio Code and the .NET CLI to create the set of files that are needed to run a .NET application. -ms.date: 10/22/2021 +ms.date: 11/11/2022 zone_pivot_groups: dotnet-version recommendations: false --- # Tutorial: Publish a .NET console application using Visual Studio Code -::: zone pivot="dotnet-7-0,dotnet-6-0" +::: zone pivot="dotnet-7-0" This tutorial shows how to publish a console app so that other users can run it. Publishing creates the set of files that are needed to run an application. To deploy the files, copy them to the target machine. @@ -113,7 +113,7 @@ In this tutorial, you published a console app. In the next tutorial, you create ::: zone-end -::: zone pivot="dotnet-5-0" +::: zone pivot="dotnet-6-0" This tutorial shows how to publish a console app so that other users can run it. Publishing creates the set of files that are needed to run an application. To deploy the files, copy them to the target machine. @@ -148,8 +148,8 @@ The .NET CLI is used to publish the app, so you can follow this tutorial with a Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... All projects are up-to-date for restore. - HelloWorld -> C:\Projects\HelloWorld\bin\Release\net5.0\HelloWorld.dll - HelloWorld -> C:\Projects\HelloWorld\bin\Release\net5.0\publish\ + HelloWorld -> C:\Projects\HelloWorld\bin\Release\net6.0\HelloWorld.dll + HelloWorld -> C:\Projects\HelloWorld\bin\Release\net6.0\publish\ ``` ## Inspect the files @@ -160,19 +160,19 @@ In the following steps, you'll look at the files created by the publish process. 1. Select the **Explorer** in the left navigation bar. -1. Expand *bin/Release/net5.0/publish*. +1. Expand *bin/Release/net6.0/publish*. - :::image type="content" source="media/publishing-with-visual-studio-code/published-files-output.png" alt-text="Explorer showing published files"::: + :::image type="content" source="media/publishing-with-visual-studio-code/published-files-output-net6.png" alt-text="Explorer showing published files"::: As the image shows, the published output includes the following files: * *HelloWorld.deps.json* - This is the application's runtime dependencies file. It defines the .NET components and the libraries (including the dynamic link library that contains your application) needed to run the app. For more information, see [Runtime configuration files](https://github.com/dotnet/cli/blob/85ca206d84633d658d7363894c4ea9d59e515c1a/Documentation/specs/runtime-configuration-file.md). + This is the application's runtime dependencies file. It defines the .NET components and the libraries (including the dynamic link library that contains your application) needed to run the app. For more information, see [Runtime configuration files](https://github.com/dotnet/cli/blob/4af56f867f2f638b4562c3b8432d70f7b09577b3/Documentation/specs/runtime-configuration-file.md). * *HelloWorld.dll* - This is the [framework-dependent deployment](../deploying/deploy-with-cli.md#framework-dependent-deployment) version of the application. To execute this dynamic link library, enter `dotnet HelloWorld.dll` at a command prompt. This method of running the app works on any platform that has the .NET runtime installed. + This is the [framework-dependent deployment](../deploying/deploy-with-cli.md#framework-dependent-deployment) version of the application. To run this dynamic link library, enter `dotnet HelloWorld.dll` at a command prompt. This method of running the app works on any platform that has the .NET runtime installed. * *HelloWorld.exe* (*HelloWorld* on Linux, not created on macOS.) @@ -188,7 +188,7 @@ In the following steps, you'll look at the files created by the publish process. ## Run the published app -1. In **Explorer**, right-click the *publish* folder (Ctrl-click on macOS), and select **Open in Integrated Terminal**. +1. In **Explorer**, right-click the *publish* folder (Ctrl-click on macOS), and select **Open in Terminal**. :::image type="content" source="media/publishing-with-visual-studio-code/open-in-terminal.png" alt-text="Context menu showing Open in Terminal"::: @@ -219,8 +219,8 @@ In this tutorial, you published a console app. In the next tutorial, you create ::: zone-end -::: zone pivot="dotnet-core-3-1" +::: zone pivot="dotnet-core-3-1,dotnet-5-0" -This tutorial is only available for .NET 5 and .NET 6. Select one of those options at the top of the page. +This tutorial is only available for .NET 6 and .NET 7. Select one of those options at the top of the page. ::: zone-end diff --git a/docs/core/tutorials/testing-library-with-visual-studio-code.md b/docs/core/tutorials/testing-library-with-visual-studio-code.md index e29799ad82321..e29eef7c8d220 100644 --- a/docs/core/tutorials/testing-library-with-visual-studio-code.md +++ b/docs/core/tutorials/testing-library-with-visual-studio-code.md @@ -1,13 +1,13 @@ --- title: Test a .NET class library using Visual Studio Code description: Learn how to use Visual Studio Code and the .NET CLI to create and run a unit test project for a .NET class library. -ms.date: 10/22/2021 +ms.date: 11/11/2022 zone_pivot_groups: dotnet-version recommendations: false --- # Tutorial: Test a .NET class library using Visual Studio Code -::: zone pivot="dotnet-7-0,dotnet-6-0" +::: zone pivot="dotnet-7-0" This tutorial shows how to automate unit testing by adding a test project to a solution. @@ -191,7 +191,7 @@ A library doesn't have to be distributed as a package. It can be bundled with a ::: zone-end -::: zone pivot="dotnet-5-0" +::: zone pivot="dotnet-6-0" This tutorial shows how to automate unit testing by adding a test project to a solution. @@ -237,7 +237,7 @@ Unit tests provide automated software testing during your development and publis - It applies the attribute to the `UnitTest1` class. - It applies the attribute to define `TestMethod1`. - Each method tagged with [[TestMethod]](xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute) in a test class tagged with [[TestClass]](xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute) is executed automatically when the unit test is run. + Each method tagged with [[TestMethod]](xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestMethodAttribute) in a test class tagged with [[TestClass]](xref:Microsoft.VisualStudio.TestTools.UnitTesting.TestClassAttribute) is run automatically when the unit test is invoked. 1. Add the test project to the solution. @@ -257,7 +257,7 @@ For the test project to work with the `StringLibrary` class, add a reference in ## Add and run unit test methods -When Visual Studio runs a unit test, it executes each method that is marked with the attribute in a class that is marked with the attribute. A test method ends when the first failure is found or when all tests contained in the method have succeeded. +When Visual Studio invokes a unit test, it runs each method that is marked with the attribute in a class that is marked with the attribute. A test method ends when the first failure is found or when all tests contained in the method have succeeded. The most common tests call members of the class. Many assert methods include at least two parameters, one of which is the expected test result and the other of which is the actual test result. Some of the `Assert` class's most frequently called methods are shown in the following table: @@ -280,7 +280,7 @@ To create the test methods: 1. Open *StringLibraryTest/UnitTest1.cs* and replace all of the code with the following code. - :::code language="csharp" source="./snippets/library-with-visual-studio/csharp/StringLibraryTest/UnitTest1.cs"::: + :::code language="csharp" source="./snippets/library-with-visual-studio-6-0/csharp/StringLibraryTest/UnitTest1.cs"::: The test of uppercase characters in the `TestStartsWithUpper` method includes the Greek capital letter alpha (U+0391) and the Cyrillic capital letter EM (U+041C). The test of lowercase characters in the `TestDoesNotStartWithUpper` method includes the Greek small letter alpha (U+03B1) and the Cyrillic small letter Ghe (U+0433). @@ -298,7 +298,7 @@ To create the test methods: Starting test execution, please wait... A total of 1 test files matched the specified pattern. - Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net5.0) + Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net6.0) ``` ## Handle test failures @@ -375,8 +375,8 @@ A library doesn't have to be distributed as a package. It can be bundled with a ::: zone-end -::: zone pivot="dotnet-core-3-1" +::: zone pivot="dotnet-core-3-1,dotnet-5-0" -This tutorial is only available for .NET 5 and .NET 6. Select one of those options at the top of the page. +This tutorial is only available for .NET 6 and .NET 7. Select one of those options at the top of the page. ::: zone-end diff --git a/docs/core/tutorials/with-visual-studio-code.md b/docs/core/tutorials/with-visual-studio-code.md index 4d6db06f9c3dc..df49a76988f90 100644 --- a/docs/core/tutorials/with-visual-studio-code.md +++ b/docs/core/tutorials/with-visual-studio-code.md @@ -1,13 +1,13 @@ --- title: Create a .NET console application using Visual Studio Code description: Learn how to create a .NET console application using Visual Studio Code and the .NET CLI. -ms.date: 03/18/2022 +ms.date: 11/11/2022 zone_pivot_groups: dotnet-version recommendations: false --- # Tutorial: Create a .NET console application using Visual Studio Code -::: zone pivot="dotnet-7-0,dotnet-6-0" +::: zone pivot="dotnet-7-0" This tutorial shows how to create and run a .NET console application by using Visual Studio Code and the .NET CLI. Project tasks, such as creating, compiling, and running a project are done by using the .NET CLI. You can follow this tutorial with a different code editor and run commands in a terminal if you prefer. @@ -131,14 +131,14 @@ In this tutorial, you created a .NET console application. In the next tutorial, ::: zone-end -::: zone pivot="dotnet-5-0" +::: zone pivot="dotnet-6-0" This tutorial shows how to create and run a .NET console application by using Visual Studio Code and the .NET CLI. Project tasks, such as creating, compiling, and running a project are done by using the .NET CLI. You can follow this tutorial with a different code editor and run commands in a terminal if you prefer. ## Prerequisites -1. [Visual Studio Code](https://code.visualstudio.com/) with the [C# extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) installed. For information about how to install extensions on Visual Studio Code, see [VS Code Extension Marketplace](https://code.visualstudio.com/docs/editor/extension-gallery). -2. The [.NET 5 SDK](https://dotnet.microsoft.com/download). If you install the .NET 6 SDK, install the .NET 5 SDK also, or some of the tutorial instructions won't work. For more information, see [New C# templates generate top-level statements](top-level-templates.md). +* [Visual Studio Code](https://code.visualstudio.com/) with the [C# extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) installed. For information about how to install extensions on Visual Studio Code, see [VS Code Extension Marketplace](https://code.visualstudio.com/docs/editor/extension-gallery). +* The [.NET 6 SDK](https://dotnet.microsoft.com/download/dotnet/6.0). ## Create the app @@ -148,10 +148,12 @@ Create a .NET console app project named "HelloWorld". 1. Select **File** > **Open Folder** (**File** > **Open...** on macOS) from the main menu. -1. In the **Open Folder** dialog, create a *HelloWorld* folder and click **Select Folder** (**Open** on macOS). +1. In the **Open Folder** dialog, create a *HelloWorld* folder and select it. Then click **Select Folder** (**Open** on macOS). The folder name becomes the project name and the namespace name by default. You'll add code later in the tutorial that assumes the project namespace is `HelloWorld`. +1. In the **Do you trust the authors of the files in this folder?** dialog, select **Yes, I trust the authors**. + 1. Open the **Terminal** in Visual Studio Code by selecting **View** > **Terminal** from the main menu. The **Terminal** opens with the command prompt in the *HelloWorld* folder. @@ -159,29 +161,41 @@ Create a .NET console app project named "HelloWorld". 1. In the **Terminal**, enter the following command: ```dotnetcli - dotnet new console --framework net5.0 + dotnet new console --framework net6.0 ``` -The template creates a simple "Hello World" application. It calls the method to display ":::no-loc text="Hello World!":::" in the console window. + The project template creates a simple application that displays "Hello World" in the console window by calling the method in *Program.cs*. -The template code defines a class, `Program`, with a single method, `Main`, that takes a array as an argument: + ```csharp + Console.WriteLine("Hello, World!"); + ``` -```csharp -using System; +1. Replace the contents of *Program.cs* with the following code: -namespace HelloWorld -{ - class Program - { - static void Main(string[] args) - { - Console.WriteLine("Hello World!"); - } - } -} -``` + ```csharp + namespace HelloWorld + { + class Program + { + static void Main(string[] args) + { + Console.WriteLine("Hello World!"); + } + } + } + ``` + + The first time you edit a *.cs* file, Visual Studio Code prompts you to add the missing assets to build and debug your app. Select **Yes**, and Visual Studio Code creates a *.vscode* folder with *launch.json* and *tasks.json* files. + + > [!NOTE] + > If you don't get the prompt, or if you accidentally dismiss it without selecting **Yes**, do the following steps to create *launch.json* and *tasks.json*: + > + >* Select **Run** > **Add Configuration** from the menu. + >* Select **.NET 5+ and .NET Core** at the **Select environment** prompt. -`Main` is the application entry point, the method that's called automatically by the runtime when it launches the application. Any command-line arguments supplied when the application is launched are available in the *args* array. + The code defines a class, `Program`, with a single method, `Main`, that takes a array as an argument. `Main` is the application entry point, the method that's called automatically by the runtime when it launches the application. Any command-line arguments supplied when the application is launched are available in the *args* array. + + In the latest version of C#, a new feature named [top-level statements](../../csharp/fundamentals/program-structure/top-level-statements.md) lets you omit the `Program` class and the `Main` method. Most existing C# programs don't use top-level statements, so this tutorial doesn't use this new feature. But it's available in C# 10, and whether you use it in your programs is a matter of style preference. ## Run the app @@ -199,19 +213,11 @@ The program displays "Hello World!" and ends. Enhance the application to prompt the user for their name and display it along with the date and time. -1. Open *Program.cs* by clicking on it. - - The first time you open a C# file in Visual Studio Code, [OmniSharp](https://www.omnisharp.net/) loads in the editor. - - ![Open the Program.cs file](media/with-visual-studio-code/open-program-cs.png) - -1. Select **Yes** when Visual Studio Code prompts you to add the missing assets to build and debug your app. - - ![Prompt for missing assets](media/with-visual-studio-code/missing-assets.png) +1. Open *Program.cs*. 1. Replace the contents of the `Main` method in *Program.cs*, which is the line that calls `Console.WriteLine`, with the following code: - :::code language="csharp" source="./snippets/with-visual-studio-6-0/csharp/Program.cs" id="MainMethod"::: + :::code language="csharp" source="./snippets/with-visual-studio/csharp/Program.cs" id="MainMethod"::: This code displays a prompt in the console window and waits until the user enters a string followed by the Enter key. It stores this string in a variable named `name`. It also retrieves the value of the property, which contains the current local time, and assigns it to a variable named `currentDate`. And it displays these values in the console window. Finally, it displays a prompt in the console window and calls the method to wait for user input. @@ -249,8 +255,8 @@ In this tutorial, you created a .NET console application. In the next tutorial, ::: zone-end -::: zone pivot="dotnet-core-3-1" +::: zone pivot="dotnet-core-3-1,dotnet-5-0" -This tutorial is only available for .NET 5 and .NET 6. Select one of those options at the top of the page. +This tutorial is only available for .NET 6 and .NET 7. Select one of those options at the top of the page. ::: zone-end From e3224857c322402363cb5f8b6b63fa8c7eeed93d Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Fri, 11 Nov 2022 15:18:47 -0800 Subject: [PATCH 2/7] add zone for 7 --- .../debugging-with-visual-studio-code.md | 211 +++++++++++++++++- 1 file changed, 210 insertions(+), 1 deletion(-) diff --git a/docs/core/tutorials/debugging-with-visual-studio-code.md b/docs/core/tutorials/debugging-with-visual-studio-code.md index cbb3f99294c3e..3abe51018cdf9 100644 --- a/docs/core/tutorials/debugging-with-visual-studio-code.md +++ b/docs/core/tutorials/debugging-with-visual-studio-code.md @@ -7,7 +7,216 @@ recommendations: false --- # Tutorial: Debug a .NET console application using Visual Studio Code -::: zone pivot="dotnet-7-0,dotnet-6-0" +::: zone pivot="dotnet-7-0" + +This tutorial introduces the debugging tools available in Visual Studio Code for working with .NET apps. + +## Prerequisites + +- This tutorial works with the console app that you create in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md). + +## Use Debug build configuration + +*Debug* and *Release* are .NET's built-in build configurations. You use the Debug build configuration for debugging and the Release configuration for the final release distribution. + +In the Debug configuration, a program compiles with full symbolic debug information and no optimization. Optimization complicates debugging, because the relationship between source code and generated instructions is more complex. The release configuration of a program has no symbolic debug information and is fully optimized. + +By default, Visual Studio Code launch settings use the Debug build configuration, so you don't need to change it before debugging. + +1. Start Visual Studio Code. + +1. Open the folder of the project that you created in [Create a .NET console application using Visual Studio Code](with-visual-studio-code.md). + +## Set a breakpoint + +A *breakpoint* temporarily interrupts the execution of the application before the line with the breakpoint is run. + +1. Open the *Program.cs* file. + +1. Set a *breakpoint* on the line that displays the name, date, and time, by clicking in the left margin of the code window. The left margin is to the left of the line numbers. Other ways to set a breakpoint are by pressing F9 or choosing **Run** > **Toggle Breakpoint** from the menu while the line of code is selected. + + Visual Studio Code indicates the line on which the breakpoint is set by displaying a red dot in the left margin. + + :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-set-net6.png" alt-text="Breakpoint set"::: + +## Set up for terminal input + +The breakpoint is located after a `Console.ReadLine` method call. The **Debug Console** doesn't accept terminal input for a running program. To handle terminal input while debugging, you can use the integrated terminal (one of the Visual Studio Code windows) or an external terminal. For this tutorial, you use the integrated terminal. + +1. Open *.vscode/launch.json*. + +1. Change the `console` setting from `internalConsole` to `integratedTerminal`: + + ```json + "console": "integratedTerminal", + ``` + +1. Save your changes. + +## Start debugging + +1. Open the Debug view by selecting the Debugging icon on the left side menu. + + :::image type="content" source="media/debugging-with-visual-studio-code/select-debug-pane-net6.png" alt-text="Open the Debug tab in Visual Studio Code"::: + +1. Select the green arrow at the top of the pane, next to **.NET Core Launch (console)**. Other ways to start the program in debugging mode are by pressing F5 or choosing **Run** > **Start Debugging** from the menu. + + :::image type="content" source="media/debugging-with-visual-studio-code/start-debugging.png" alt-text="Start debugging"::: + +1. Select the **Terminal** tab to see the "What is your name?" prompt that the program displays before waiting for a response. + + :::image type="content" source="media/debugging-with-visual-studio-code/select-terminal-net6.png" alt-text="Select the Terminal tab"::: + +1. Enter a string in the **Terminal** window in response to the prompt for a name, and then press Enter. + + Program execution stops when it reaches the breakpoint and before the `Console.WriteLine` method runs. The **Locals** section of the **Variables** window displays the values of variables that are defined in the currently running method. + + :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-hit-net6.png" alt-text="Breakpoint hit, showing Locals"::: + +## Use the Debug Console + +The **Debug Console** window lets you interact with the application you're debugging. You can change the value of variables to see how it affects your program. + +1. Select the **Debug Console** tab. + +1. Enter `name = "Gracie"` at the prompt at the bottom of the **Debug Console** window and press the Enter key. + + :::image type="content" source="media/debugging-with-visual-studio-code/change-variable-values-net6.png" alt-text="Change variable values"::: + +1. Enter `currentDate = DateTime.Parse("2019-11-16T17:25:00Z").ToUniversalTime()` at the bottom of the **Debug Console** window and press the Enter key. + + The **Variables** window displays the new values of the `name` and `currentDate` variables. + +1. Continue program execution by selecting the **Continue** button in the toolbar. Another way to continue is by pressing F5. + + :::image type="content" source="media/debugging-with-visual-studio-code/continue-debugging.png" alt-text="Continue debugging"::: + +1. Select the **Terminal** tab again. + + The values displayed in the console window correspond to the changes you made in the **Debug Console**. + + :::image type="content" source="media/debugging-with-visual-studio-code/changed-variable-values.png" alt-text="Terminal showing the entered values"::: + +1. Press any key to exit the application and stop debugging. + +## Set a conditional breakpoint + +The program displays the string that the user enters. What happens if the user doesn't enter anything? You can test this with a useful debugging feature called a *conditional breakpoint*. + +1. Right-click (Ctrl-click on macOS) on the red dot that represents the breakpoint. In the context menu, select **Edit Breakpoint** to open a dialog that lets you enter a conditional expression. + + :::image type="content" source="media/debugging-with-visual-studio-code/breakpoint-context-menu-net6.png" alt-text="Breakpoint context menu"::: + +1. Select `Expression` in the drop-down, enter the following conditional expression, and press Enter. + + ```csharp + String.IsNullOrEmpty(name) + ``` + + :::image type="content" source="media/debugging-with-visual-studio-code/conditional-expression-net6.png" alt-text="Enter a conditional expression"::: + + Each time the breakpoint is hit, the debugger calls the `String.IsNullOrEmpty(name)` method, and it breaks on this line only if the method call returns `true`. + + Instead of a conditional expression, you can specify a *hit count*, which interrupts program execution before a statement is run a specified number of times. Another option is to specify a *filter condition*, which interrupts program execution based on such attributes as a thread identifier, process name, or thread name. + +1. Start the program with debugging by pressing F5. + +1. In the **Terminal** tab, press the Enter key when prompted to enter your name. + + Because the condition you specified (`name` is either `null` or ) has been satisfied, program execution stops when it reaches the breakpoint and before the `Console.WriteLine` method runs. + + The **Variables** window shows that the value of the `name` variable is `""`, or . + +1. Confirm the value is an empty string by entering the following statement at the **Debug Console** prompt and pressing Enter. The result is `true`. + + ```csharp + name == String.Empty + ``` + +1. Select the **Continue** button on the toolbar to continue program execution. + +1. Select the **Terminal** tab, and press any key to exit the program and stop debugging. + +1. Clear the breakpoint by clicking on the dot in the left margin of the code window. Other ways to clear a breakpoint are by pressing F9 or choosing **Run > Toggle Breakpoint** from the menu while the line of code is selected. + +1. If you get a warning that the breakpoint condition will be lost, select **Remove Breakpoint**. + +## Step through a program + +Visual Studio Code also allows you to step line by line through a program and monitor its execution. Ordinarily, you'd set a breakpoint and follow program flow through a small part of your program code. Since this program is small, you can step through the entire program. + +1. Set a breakpoint on the opening curly brace of the `Main` method. + +1. Press F5 to start debugging. + + Visual Studio Code highlights the breakpoint line. + + At this point, the **Variables** window shows that the `args` array is empty, and `name` and `currentDate` have default values. + +1. Select **Run** > **Step Into** or press F11. + + :::image type="content" source="media/debugging-with-visual-studio-code/step-into.png" alt-text="Step-Into button"::: + + Visual Studio Code highlights the next line. + +1. Select **Run** > **Step Into** or press F11. + + Visual Studio Code runs the `Console.WriteLine` for the name prompt and highlights the next line of execution. The next line is the `Console.ReadLine` for the `name`. The **Variables** window is unchanged, and the **Terminal** tab shows the "What is your name?" prompt. + +1. Select **Run** > **Step Into** or press F11. + + Visual Studio highlights the `name` variable assignment. The **Variables** window shows that `name` is still `null`. + +1. Respond to the prompt by entering a string in the Terminal tab and pressing Enter. + + The **Terminal** tab might not display the string you enter while you're entering it, but the method will capture your input. + +1. Select **Run** > **Step Into** or press F11. + + Visual Studio Code highlights the `currentDate` variable assignment. The **Variables** window shows the value returned by the call to the method. The **Terminal** tab displays the string you entered at the prompt. + +1. Select **Run** > **Step Into** or press F11. + + The **Variables** window shows the value of the `currentDate` variable after the assignment from the property. + +1. Select **Run** > **Step Into** or press F11. + + Visual Studio Code calls the method. The console window displays the formatted string. + +1. Select **Run** > **Step Out** or press Shift+F11. + + :::image type="content" source="media/debugging-with-visual-studio-code/step-out.png" alt-text="Step-Out button"::: + +1. Select the **Terminal** tab. + + The terminal displays "Press any key to exit..." + +1. Press any key to exit the program. + +## Use Release build configuration + +Once you've tested the Debug version of your application, you should also compile and test the Release version. The Release version incorporates compiler optimizations that can affect the behavior of an application. For example, compiler optimizations that are designed to improve performance can create race conditions in multithreaded applications. + +To build and test the Release version of your console application, open the **Terminal** and run the following command: + +```dotnetcli +dotnet run --configuration Release +``` + +## Additional resources + +* [Debugging in Visual Studio Code](https://code.visualstudio.com/docs/editor/debugging) + +## Next steps + +In this tutorial, you used Visual Studio Code debugging tools. In the next tutorial, you publish a deployable version of the app. + +> [!div class="nextstepaction"] +> [Publish a .NET console application using Visual Studio Code](publishing-with-visual-studio-code.md) + +::: zone-end + +::: zone pivot="dotnet-6-0" This tutorial introduces the debugging tools available in Visual Studio Code for working with .NET apps. From b6a94e72ec672e11e2d4b8b2f9676bcb0ea6dfd5 Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Fri, 11 Nov 2022 15:22:14 -0800 Subject: [PATCH 3/7] net6-->net7 --- docs/core/tutorials/with-visual-studio-code.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/core/tutorials/with-visual-studio-code.md b/docs/core/tutorials/with-visual-studio-code.md index df49a76988f90..7873f91c4d935 100644 --- a/docs/core/tutorials/with-visual-studio-code.md +++ b/docs/core/tutorials/with-visual-studio-code.md @@ -14,7 +14,7 @@ This tutorial shows how to create and run a .NET console application by using Vi ## Prerequisites * [Visual Studio Code](https://code.visualstudio.com/) with the [C# extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) installed. For information about how to install extensions on Visual Studio Code, see [VS Code Extension Marketplace](https://code.visualstudio.com/docs/editor/extension-gallery). -* The [.NET 6 SDK](https://dotnet.microsoft.com/download/dotnet/6.0). +* The [.NET 7 SDK](https://dotnet.microsoft.com/download/dotnet/7.0). ## Create the app @@ -37,7 +37,7 @@ Create a .NET console app project named "HelloWorld". 1. In the **Terminal**, enter the following command: ```dotnetcli - dotnet new console --framework net6.0 + dotnet new console --framework net7.0 ``` The project template creates a simple application that displays "Hello World" in the console window by calling the method in *Program.cs*. From be7aa0205242e849d0f6ced1371e2dcafc540813 Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Fri, 11 Nov 2022 15:52:38 -0800 Subject: [PATCH 4/7] net6-->net7 --- .../library-with-visual-studio-code.md | 14 +++++++------- .../published-files-output-net7.png | Bin 0 -> 70590 bytes .../publishing-with-visual-studio-code.md | 12 +++++++----- .../testing-library-with-visual-studio-code.md | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 docs/core/tutorials/media/publishing-with-visual-studio-code/published-files-output-net7.png diff --git a/docs/core/tutorials/library-with-visual-studio-code.md b/docs/core/tutorials/library-with-visual-studio-code.md index a97836d7a556f..532f9173ca799 100644 --- a/docs/core/tutorials/library-with-visual-studio-code.md +++ b/docs/core/tutorials/library-with-visual-studio-code.md @@ -11,14 +11,14 @@ recommendations: false In this tutorial, you create a simple utility library that contains a single string-handling method. -A *class library* defines types and methods that are called by an application. If the library targets .NET Standard 2.0, it can be called by any .NET implementation (including .NET Framework) that supports .NET Standard 2.0. If the library targets .NET 6, it can be called by any application that targets .NET 6. This tutorial shows how to target .NET 6. +A *class library* defines types and methods that are called by an application. If the library targets .NET Standard 2.0, it can be called by any .NET implementation (including .NET Framework) that supports .NET Standard 2.0. If the library targets .NET 7, it can be called by any application that targets .NET 7. This tutorial shows how to target .NET 7. When you create a class library, you can distribute it as a third-party component or as a bundled component with one or more applications. ## Prerequisites * [Visual Studio Code](https://code.visualstudio.com/) with the [C# extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) installed. For information about how to install extensions on Visual Studio Code, see [VS Code Extension Marketplace](https://code.visualstudio.com/docs/editor/extension-gallery). -* The [.NET 6 SDK](https://dotnet.microsoft.com/download/dotnet/6.0). +* The [.NET 7 SDK](https://dotnet.microsoft.com/download/dotnet/7.0). ## Create a solution @@ -81,15 +81,15 @@ Add a new .NET class library project named "StringLibrary" to the solution. Project `StringLibrary\StringLibrary.csproj` added to the solution. ``` -1. Check to make sure that the library targets .NET 6. In **Explorer**, open *StringLibrary/StringLibrary.csproj*. +1. Check to make sure that the library targets .NET 7. In **Explorer**, open *StringLibrary/StringLibrary.csproj*. - The `TargetFramework` element shows that the project targets .NET 6.0. + The `TargetFramework` element shows that the project targets .NET 7.0. ```xml - net6.0 + net7.0 @@ -114,11 +114,11 @@ Add a new .NET class library project named "StringLibrary" to the solution. The terminal output looks like the following example: ```output - Microsoft (R) Build Engine version 16.7.0+b89cb5fde for .NET + Microsoft (R) Build Engine version 16.7.4+b89cb5fde for .NET Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... All projects are up-to-date for restore. - StringLibrary -> C:\Projects\ClassLibraryProjects\StringLibrary\bin\Debug\net6.0\StringLibrary.dll + StringLibrary -> C:\Projects\ClassLibraryProjects\StringLibrary\bin\Debug\net7.0\StringLibrary.dll Build succeeded. 0 Warning(s) 0 Error(s) diff --git a/docs/core/tutorials/media/publishing-with-visual-studio-code/published-files-output-net7.png b/docs/core/tutorials/media/publishing-with-visual-studio-code/published-files-output-net7.png new file mode 100644 index 0000000000000000000000000000000000000000..c53081a1b55163e7d5854328f5eb76f1de12e7a2 GIT binary patch literal 70590 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
    )vW;M|QVEeW_=`z7`$24snss1KmjZ#awX( zXB<=@vXIik?&bgbAd&xR&;D;B?_T}q3T+7g51$D~UgC>vf_<}rfy8swcv`uk3gIbO z1F}5a_KRA)txP!8Qy$#tB_4lTkE-g-&mx;@DB-h<-yyTJcy;^7=#0DUMF)t3>b-$v zy=si%hGq<;;={sx2i`I@%lK91xP@BV#6EXH&|w8bY`)(4gR!dDwazT3#*z%|Rwcpp zVVZUWoVl~EVN5q4$;^PGOad@_t5tzomFKKKvHTV(^L<`(`Qfit4@O@>ca}@ye$KtoXhjl@4c@)1cXM zrv>|^N6KBEMmq}*5u*y*4Mn2%+#qfw3a)Sai8bIW@>v4etPQABzF4e>yOT2&dX!Gt(XP~PA`dS?R_Wpb`|ph2YW z|KtMn9qh=Xkaw}k_BhW{g^c3V9}(4O?E~Atljcu1G-C}~t}J)+D(2(Bn35bpm_iO+ z9*(H|xAH|5-+mdhcr+N2qw@ zZn+ial8BV&IE z@)4rCLSzFR8yr8u1=BMGeR|v9q$J)Sq2hv!2tj)VB=cFFmpdCwfZiV+rn+ABLaMrRL8j!89WZ1FMMb2oTz z=Iv*P_4}m+5Pw2OE9^JV3#9~QG(=j8wOEx7onqBAY3#36+KtX{5-vZoYgGNf?_IH2 zym7=Ujm8wx)Sz^BNGLwR8tA}lz~?6Z9DipsK-ARzDd@+LWzUaU%O#er5~NED9%0{1 zr8hiYHs(AIh|^Vs0u?^F+Zv8&1o_6TLp^v$c4kXIG1tu~d?g#Z@cDV49(b4)@Xn7p zE@+#Gak%IA^?xB(d7+CesSjw_WlSUmO{euG8R`q68ynK~s_lpgKs-$(I_`Y)|>mAn}9DqqO>bwn~ z!Y*4MaS~;D-a4qF>jq0zjdj@I1?E6#t7vXorkr0a`LGS9wzj$34<;@n1kvMFZ@~GW zq2Ms2ibPH%ms1h_EyvGGFv&#ucUJF^bTj6NJD`4xfLPs=%0q0?2(^Ne*Goi`AAe## zCcg}`>N9w>J~n)MfPZMvpd%r=Iq){^@=1^?EXSKh`E8n1-{LP4D>)*uov-rg&F!8H zhkVdwB1S^5O`dV9*=xe0H@F{Xm)qOq2GoS;d@X(a7@Fp(f2#WDup5{Ikc|^pkt7SR zJ`>E4vi?QqOGIW`9d^`~aMVn`K&w(|2rFwoFYwPUR?-+BF;>0AL{HN^Yoh_C$12oO zS@bX}nc>WPeiDA18OA{zZ@Bu1fSsm>mw|4Hmg_Kj=G&I>_|Utbn1>N>!uY>G{)Qja zaU1QiKtW5~W+=0s`W8@W5wa@|FjcGVfxftAJ`^&-==DTs?-WQi^yYrVaLM%y&%cVL z^Q)6?h`~OfyFC6Gh+{HHaBIZ&5P?*OIMD)p65TEsb{u;Eyz zbJ3uzls@@pY`K?CD@n=H^~s!k)87UCUJK5_v6f^He2#R zN#gdmWSG*TWkJtIxBU2;3s0+{bHjCSK;{t?X>=phT(q^cvT$;%EaWl9W`2(*&Ypw3 z(fmd{voNgdJN?J$@0jvcz5%H#la7^62w{)5^ruIJ{Ew+q7M7KrHl%mw`rj0{Z>~ld zPP79_a+5GS-lk<7m^gg|3eeH+O68oVKmL^n%cnFWnM8BR=KO-3k=4I#6d$`P+a#2X zva#$L@ehWqNj;qveNb!-9zT6R=pIg@>Wa(`lr+O?if$ZX_3o(g*--cNiTxgbk&iR} z#-1KExB`hp7nu|mPlo5MbJfWe1?gW)h|^?oEg+D@d1_S+apXSz+n*{uUwcL8X=|_6R0XLGg6!<%DScr%;vc45emP{Leb1yPL7S5aGC_*f!QXy!d#UI2H8AJS@q3MG_gOM- z7|n!)HXE+DxM6XD?2HLJWICPQqhB4zg$SD;+jJSx-&Ox{HzDZ{66w()o?3^kvRY-X zahwcyYl^t}2@_Qu+4pZQ7=2IE95I;k-6%=Hh;2s6Jp?LIRT*T`^emYsV(z_>ZQIpG z3yD%^&DXit9(}tCr&7eJpYv*ow8{IvOZ}v4yt8L<-9K3y(e7a!8XkpZbU601H8n|N zJ#szwm})QoKH?s;6%>t6A0_BPLfh1~gr=!^G84o2Y5RGtr1lqN37xc;QwI(8lw$JC z>UejNpB>X<41Jj=-$>-g3&XTcbn?MO!XS?Ao9T?|&f|s!HTQG;j29aIQ`5;5#``=) zj}jB#tUjfCrj0PHrz!C@1*YDjY#9c>oh;pKeWaqh<(Vnp%Zz!Jl#i@4Uq&78@Q|;2 z;m`d+#(l(JrS^|GGL!JpzxtI>vH0fD6)&8>89Gu_OkJw6dkQ*d{m)B6o{9(7WK5M=KaF{||I|6J)-77w#wcyrDPk+Ayr9 zYzIqoQ&th*&=0sJ>PbHfj+Wt0q8EODX1nRaL%lzxGZ^qozddV(dmw*@&f6?LIQP|L zjeY^1wbp+B=Xemro6IMl&dFJJJ4fDUC&=-9jWliN9rx#5V^@3hwHk4GXN};)lN1{c zlnLQ96GZc;J6N|u?*fA+r*&e?uO>;Se{cT6;7-aXcn!Nh<-w!Gzs^oONmOxOOD20? z%tG3DnL2X*z~i!-+%8-j)>XQNf6VuctYKgEnWTPU`fMst6jwMhev0{tl9d$(9+Ugi zpXSn{^=7hR`GA(+$Am-k-({G8C`q)FV3M)xGH5(^V`oqTd+af|6_LaLMMoCdKSwkMK&Yu+H#Ud=&z< zuBxHCv+Xm7=$y^Wu?Z4+pDc;^HJ8X)k$p3K_jkNk^@u4CLNl@hIt!}d(z2HEd3ilT zcqm7x=@yqVswsYQO$2NVaXB_u_hoeVCYr9nekN(Ch^g>}^N|Sh$&QSRBt+T-C+Tp~ zg$YygDv0U!y*S59Up*l{c#hTxYX6(M7oWL*HmvQeT5>UmB zAoLcHa~i|{DYR|$hZ9D^OVb$Abd9Em`eM&)K9!IT#1?`WVW;?ldHu89J>Sm4FcB7MtBK(cMax2F8Xk++x%pcfW^lzXJ zJ;k->wwP5G+b?~nd9Az;VOB^gG2HUT`A!9!G7OEn#I)9)eBKs<6VdrOZH{}eQJ>XKPzs; zW%4f~qDZX-_+IL^QJdo*SeAn`DQZKsS8{Jr@AKe_v`xA z1Io2%P^}CiW!Sjn<>$BkK7ZVoqbDk=3y{FEdI!Fxkg@d8X&fW7~>#@h`h*I)0Mow#; z{HmqIFIMB;9*|0wHlKp>0mMw@q-dlP(c_$c<8qQy;=R!t+WEp{N4_0Xh)Sq7{kDeJ zHKDnK^JM(2OqH}K;LukC9Qv*#Ap4Un37uofhDy2o7L_F{G^p~;m=(Ae5j{}#vxfMb z%7{tjHm3<=ta8P2^|kDr*Oo1RpnGFqj(&2XKaAG-%7QJjJL}y(e2Pb7GYl*$2l}Vt zGD20eNt<0{NK;lN7B6);{u=sg_=AtIR>*8M+PH@`%f(CatmI$d-F&r$*I-li<{1^V)yBG3uf~GQs^aP14rZA$+s_;>Gr*u8`$))fQFT^eG zKdbLi083m@dZMyLZbGU`V{eNoh-dRzAiHH6~n{u z9*+j@ow~pABigfluLX6`kE{i*6bGk)&x-R;3j|Y;9T<7FA-3u!gm*|$;Tjz$`kxwL32DEU5PI?kY zU)j4HUWsfEq=}0?ki1OCP(61cS(VoO!=PD^by9bE zYcZ4s`<5-~GrVH#cJ<3*d-nzv-({AVMAF9OK=Ng82CQA^ppt5|ET(>#Gv1_!W~O@w zL{ZJ|i|W{sDR-XJ?_10l(0Q&WPcGS|8#S~{jJ}@I3ymDLPwC!Et}iAM{#v>wJHzo3 z>>jn9CQ3}K$Hy1*?!N9(dt4ysEgXaOnKe6PENIC>TwGAgt_m$KoKEvv#arZjlJOL{ zm4UgK+Wvd%8dUFQa9pz_MHD0W!0^c?}`n1&IZH68!Pcn%Ntu;K)d`UBbN3eUv%ticqln0cIH`+>bZ@vPmJF(%icuiC>z z&rld@e@=R|Buw3jd`e)rcvmk(Rx_;v2tMx$8qz%3&$R6XUS)8!YlxS{2fan(t z83;XHvTQ5Kfx>3%Sfv)-wzL6L)J>?3X1Q5(n5~JJ0iQaeU#NNf$02ZX7jz07R zEv!I+pAbx*HPxX7TXd0aK=v*Y|(rk^6J z%-c~dLAi(T`Xfh_r8Pl*Xfg(qm>csr(s+`6A8j=Gx($8sLN~NexT4`UY@XLzZ^)jB z{aSKr3#mZWnQUjSJ)16y!dmx^@wL_G$eKTJjaT1h=T4ZMaXB>cd?jF6O~(#yBjAil zG)BxJHedxvYoBD)dWD^C#AI|BJ+qq=tzYKP$WptMJ@yvr_b}O8fZDX|ZTY8w0CX@> zp^GNcV>4K}o)AI4lQZm0t7XBi&_rRAIfAoL5+VEcE8Bv?&f3N5Z zsg7)4G3(Z_EfnBT4bAlV3XL^*5pvc2LObBp4(KM^^G(LTVdJkK`z3y?d*5_&d0n9; zs=%kz-OE*W%&Nqvt|piNKWYPf`P=He?)vdb;ZlESyi?97bZQUZoxTz(4%Pjt`<8!M zo0d-t7Vfh8a&ksVPW#(0QH9V-Ze>la`#Fwb=y{@t6h^i4&j@bYFOoYZLWQQrnxd9m z2}yRWdfd0GjSNrZm245hbIu(Bm%3HIcdN~@!}Ic5m%Fm;No;#bOmp#@5=;-K1|Ne$=dEnqg4z_>J zJ_FY|`kLri9T;^{Uj<+oJMAT@WGH@6t2uaO)nKY@OlsE%2rl3nj0XBgS#W&JrgF`b z5eaA*k$?|+cC!(-K=KZ7>0SPX2lNdl4Hc=exK(*>Zf>i!Jcw_N=(IiDqCn?Rtp2jW zV6CGOpM|=5$R&osD*{LbCYT_yzr)YT_U1$n@R?u?J|m$Jy};MN0{3>z=oQlCF!Awc zjWjHaL%~~_=n^KJt&|v5{tbs(^$QOu~cCSR>kWw^z7z6b^W?+8&om z4%`NAGqdFzNEjG2G&G21=y>3g!Oacr*#70#BMuHuaSdz|mwk_>vhna7se%^qCQt&V z0F3N!eZd4Q#Of^|TScLCo?Tn-4l2@qjL=%^Tv1t;e>Ts-Ibpw=OFpPnbv5njinY^nyYrt2slr86^++o*X>*Vyh z^_j%CU3a+`OvP{@`IY>h6xfnI#3lBIaw57>&c^+1jtsF*0Bh@){a& z-eF-8d9>BHXxub30i6MrW4jKt(GsGeQtScP8pT9Q*)#jM$6n71Mq9r#<4AJ>5ZsG{ zQRd8U0mX;Ic|C9iQ2iT8xJy`*r(>>iI%;On#$F#nKF&4>fL*Ls4-rb&1=kw#6rTW} z9xMz>;H{a)=LH0^q4X~0eNp3K(+aO=*kzY(lJlrpU`TMBMcti~me5mt^Q`Vn6sfh1 zi`|K=oX{<&)_XcY;CU>`?wsU?wao4P!GsBqhzKXA1PMQ|*x*E-;KbM%jA6t@_H%KQ zmk)QrG<9&O;);sv(RH{?iUAi5ZXV9*wzwA^CJxXM(;fZu{Sb%+oRxrS!DI6_>_AmV z{gMM*2?}X#6#xc#T{sHc4NE+0Bj}3=_*7yHLdo z1zyj1d}WwnNCDU9D$As`yvalNqOqfHv@29JbJw zRM*X2Ol5d3A^-CGV4Px<1l9TWbB4weMNN!39&ia<^njOTdUPmp@fvV@{s(Voth5jR z|7YIL|0mBUj9(ZW#G2B&H4=IZ{iAWQ+*oL;;cc!p2R^R@meTnGtDS{xJ2s5J<2=mh z>&<`OPW)ttqQB-b`LeM9pVKz{Cv;7ZF)zVTy;olRLqyp8(3r&loA(YEN^T*)(Olf z!M&9%oT8~ems79IPTx9zL4MyZ7>glibTYZ}CNkrN)|y}q8J+M-#meUit8%B)2bTD} z<_pD5qtoV`H@v>$#F0V=gT1#JqaS(8$1mcdq_m#!-sBdHs%(Wb@tlN+r>1; zPlT*5Z_r3nmzM`FCZIAHC$dx8ncHESU{pLx;@>BJ`7vgDa%k-A(!1HI1X~c38nxJ< zkM;foUjm)i`Yxnq92$yJf1sDC+BGO7}2{gtc+2~ zuSJ)|OS62a02f2qW!^9LSRW$J~*96nx6Em->J(BqXmgs zzpq>R%B`9iqdoKkM0Q|C%ROpOPyMpr0%3(g56L9O*F9P{^5f0SFq%3h%p1q%_0BfY zWfsG~N-QdVhu^pBoxU)*t(Eab|3tEK7kgW$SA-&7+)B|SI2170zwB2$QwQeS#mjrGxNvf=i8jLq2^H2j%|CiH~P^v?l_*DZMfag z8juEU1yeDBf<`_|+*pBzNNMZpA3`9hHJtS%NR=d!Chj#gt+H3xly1z@~W@y}na#*{o10zMxLy3;Ysif;xVB`tkP-8+AUcuQsO)%;H`z@cC9)umEen?7J( z-XgNcocAOqHoB8Q0RSB_>{Je$$?n|*%eLKuWi5fV{WhbA-G?za61SYEd}Com7{5d= z)ffG<4x|KR0YYv+4&Nv!N5g(7tQL0QB8!AbAl{_?hOKCQn~RHE&f@$bGuelRZdDf%;DV=IP$8?vB`cp*toU?pMD?CQ$bP7 zO%u>-Cl2B=ga{zQgiIg&4u_=GS>0OxwW;+c71JoHn7f@Ggrbw^eR??8`5RnhIN}v^ za-ICfxMAb@b76TWHOJW0~wFmnO zYQbXP@rhMC;Xa0JutyQdp4IB)q?wJ&yPIHeZK8Q2w(qG<3Q`q$-5fJ_0QTt}Z7sR5 z|3f<#d_Ik)to|Pw80qTQxZA0#Uu<6^a9Bt2lh)O{W+0P(G3X=saH&FD6sy@VIcmO* z-g4-~>tr7cr@{Sz&t*wy`+=|fp5uHYen8_QL05D{hVrZYpc6y!hVJF2rT^%cZ|fPq z0>dbbR8g7INux*>2F<;08Rl}fiDXVWO@op)^Ox!yN* z+N7lcnnq-ey;PBDHJx<>{|wSM=0(Pe_&&eY&sy%2q{Sq5GM~Fa%9pSm_XZFM#_?wuT#k7QO_K^Jw9Wu`8JKtnC9Ebr-w@FY1-lQTR{&9+MAQA$KGWG zCk|GH`<~Wd`7QDyVscUvAMZ^h74JG)E=(m>ssnTUW$xqKpzc7t zVKX_@eC7L{e9rhGSPg^E?hyn6i=6v@IqDL!TXw8s!qKvr<(&#&@%Mr{hVU+T0u@u1 z{Cb$8!NDQ<&qyw-&GC6&N6*ICrZe>f)ak^8y#iX^8@3hF_th>Yqrb@U-So}ggPOb+ z7vaWW+`Qe{l}Dd;$n=etp0?l@YR;k_=rA_Sz3BACbd+w!u@$ry zV>eMbh?yT8aXLh-Gqs$}u`J9s%C<}pFsJyqFlCV~tzXGgNVnKUx1-$j8r#-%Q6D?k zM)RjMO<*{u-imrh3n0#u8$Dv?wRDS?G+BLS#Hu zBoSRQ<@U^m%ftMF?s|6dV*UN7sll!bIW&-lJ5RnxgUOqOdtptVL-2FUZY1_{g?%MO z3aS=(zrlOryD%s80BU4O3&qMxb^l&%H%H@1oY1{Ly)@9R8Xl{+=jGmu6js#aLpS(> zkJa;Pak4d{KN7;KNf^rhEr5No5%DX8tHzrr6B&%TE;P!5jq&0Avi+}<)KJR3Ge*V7 z491IdhV(jgg{lGiV`ivE(d+V2p2CdJZ^prNEZ zUwstCayDb3?4gB)y)TZvbcQ5-Yl}B%;&uZ=rCmZ6sXlvm+FIm+54di&_E*2Yc$ z{@BWC&n|vH=a}mv6y8#GK8{2qm*~BGqom}`zcl(TM)Co>2f@i0mcx zH7 z3Z*^9PIj|62;3TxZQBW^iWPyKs%1{7d6;b2$@-KRVa_>+8$%}TZ$r#$a4aEu7QdCdO6g0ZjJvdp7MAP?kH)@=@ci5X54{b*ysJ zA2l6U;$UY+H>p$;chKY^h?anMS$kCSj7N}<_Kj+pKe%rtNnXKgLG{v!9QY!(^c+l5 z8feC!+*9^M)|1OE_u{~IC}2P4;Y9Z6G5~sDTU&D+Jov;=`LK6h>QBZ<1drDi&7JH+ zVs9M1H+*cl@Y7#7#y-B;oQavz8BG{mIH)y{1gle__q2HMdc^}~W9k}KV`QTjcMP^O z#D=)In%GdLd5+XvI)Y1?#&LO{-#atlo5Fsv|A#$!k>*q4s4ODJ|8yw;(PQ4_vHU^7E-q5nOqQZWg>esm=>#Y}@bd(`>+aqO#h z^5f$W>>S5V;q2PemN@xwhEp0fN^Blf_0r4HdEGMQrQsZi;cS>C%^t%w%-l2tkrs>uDVyfXJy(n?X_;sa`XqV@M8Y-~u z%S$;Ip>XujdRri*V@nWbds$n85|1!r77Y%i1ZM&z;fICx^IJ>h7 zQB$R#BI&=lzJTR*ar(EtD)u~yj88O1J3INC+mny0L< zgq>Io6qD@&-G~%wl6PEyBJaD-SEngne4FEbQnSH9gMADrN_dET=KFE31U4YlVAg1o ztoC*O229iCLY*kgZGwUn!F7IRO1?6M?#}rk>wzywV~@m{+2pTg4Jkq}bFOks5u(H6 z7uLC!*@um4AWjegFFnBsM+(< zVsW_~->u>a%h?|)%eaPuQd+@li_E7gbkL0phN+5g{r&qRw(qYKhmbh@uTe%&6!|Z> z4vHfAt55!fCGl5IhQt{6SFT26L~;Q-KA|wEc=~^Q0Q+u56h1-(XV=h4ggMCcA)tom0m3u5V-}eV?@f+P(D|}s+L*9q)P_dy)HTSMA_A6o3#@DraCE4C z&0@`io}0Zw9DWR}@+<(Z@z{RSw})DFHG83yhd@#UsfEj7cr{jT*c1VGwxI+Hvv!3! zl&|yoB0LaX#9i^3`pL4%^8&3JNLsG)`Sj8v5_;Qj%O zHoP%Y;SWqNn{bV9V2$q?_|jS@J7}l`Wj(k(g5__$tO}1YbEcV!E>gaMJT8jiF&_py zwH#b`6y+zOU+$HYsMD9I(a|0uuf&-G^M7&0>|hEb$eEl@DNEzQNXkqFB#vbo<@si2 z2H>^qoKoay7#h#PF_m4l>VqairUd9D@NZc$#w@ek3Fek{s$%SNt@?J`>(>RVnNdjO zEu$DU4_0>rs#cL%#H(?A+WBjLf~SfuO|)sHrkT7w1RH-`E;tsX#;4jlqD!rtoAQ5l zl!%PTeZD4du7De$7>woGdL~ zc2i$K7uYh ze-M5=_$6gp15U1B@EB;lhGhxtH&zMq7V zs)Y2Lg+Y~+z>({i@FNKmWmzqTTWAQ%}3 znhVJAag92)ZQp&^S|C&yX*ws3@;g*KA8FN3{F;*`N4|kAesCTHmxJJK6TUDl3tn!g z(-TnlscN59TK1H14J2`3F`wjY7U^Vie>_eLeHNm9Xra&R+I<5xotp zD8<;vj&sw>Au6Uh{F#N2NC+?znqE)j!~jkSI;<}WR#omMt~^+(Yw^WDG|BX#rtd$b z*viXWl+}3Gr$hJ@mQ%Pf6WsJFNu*ibvdTw$52CA@qCc#J#?w&g@ZaoH$3dm@7_Z7o zuBr8&B1NX)>@J&tVgsO`(Zmj;Ijx>!J=l05e-%2Nyv>08E7tY$a!m_qz zO4Cjea`9&R1(1E#(ldbV3O*2|k;G2G-Kyy~Jw28O!mX1cFvChf)_aTzg`uTvf_%G)rO+!&RMm@4>;NjP~?`p24EP zKde(fNIQ4XVO2)@QNpPXBj`Q1+%iB~%1x3|5!SNYY<-i}OAuIfaeogc*OY`(+zD^& zCHETOUymK|ikc;)Wif*VP|7}mzWp@0DmcG=;SDcB&_0^=)4~D=tmpT>be}d~cylh} zJt%AlYQYJ1mK9#cYaic>A>AHoV1p?mVT$Tb$nZrHYk2U1{v%AM(z8*zx-!Sq4G76n7flE=T*EO$ZFg5^HT(YPe=xo<~1Ar3v~n zZ~lP6w%GZ5!q4(8`VfK`;B+i}W9-NF=(^xeH$$u};- z+cvKDk%srku3Ru|t!$74AK!-ZwIwnl!feZ69P_dCtJhc1Lxp2Zax7_1h*&xW)Fw;) zji_d|qmr4hrV!X83POi)}A_vui)5V@|0wu*&M%z63 z7gE-b*MmRKEme=8&(B}zq%H}A&Zm2k5v${OQN85>-tSWb^mMV4*F=$=OTzMct4;wm z^GcKvLtIYC`$7eieP09d-{X$3h5EA@I`9;M{v(2~&UlzO&m)0|9+&*|>Za3>*l5w! zBnQylLr58yw>jT1y4-fNmWx|ra2UdOb1`cE;hu_yuf>|ME1eHG!>k1D9CF1h!B~Q(s0WVmtQGO zkS#K>W&=y(^lII!o^QH8Ym$d>T=)}Dg@@oU(ducJtkZp;_jO$k&aB5TM1%6Sy{EU_ z(JYG>8v7@E`xR+Y=l$g3Pnu9!=02VTA)pX%XeX_~30@bUX%G0XbLeKr45&`pt#KK# zWqVVZ8CMbp4Tu}So!aZd(OMQf2Ep46QWlHNW_Zx6@Zjo4U+)f~6IeozVto3RdiVyk zgwv&NAQ9JWF;Bdl$_t#D4`*-?0geX3=WA6m*d*|iO2dAO!wN7^y9nnG8bn-`<5^Wu z=~q-httw)&R^l6YX`oktZuAuy9+*Bh+~+Qn#p>z{D)(_~U%l-fob)&ZKi(Itw4Xo5 zC)T2U53UL~lTuZy^0MTbs;zkh%=>q8p>nb=wSBL#WG64Z#$DCfA@1}Zb2wcl;(d(l4Q&O+gfkJ1J>!nm1S37OeP#)xg8i?L{-q&!D`>4>* zoN0_G*T2K4bh9xao0^=9pac%np!ivWSWqU_z7UeS<>+Bn;bZ=~Je zPFZ&*Z8G+iri?yEp!-GyKmGfCGSez^%%T$YegowMcz^KA%MG>nxC@XmVszO51ZUWd z?HonX3eAgUrsr3;iSjP%65DJ(A~yUCmxH_guGBF%hhKtN)@COIcF3z4<3{H1(#}Np zCIEl01h4lM8i=@$&$odO*;!7#E7!!dNgMN4()km6@+w5`%9q_+zpoLImE{8*E(DKG z@1^sp@P9id^pqM56@b#3gl3oBEe5mj@tWp&e!MjbxxM-}V++=s(>ojuvJW3T@ZkGs zCHQLbhxhI--k^R`Ds5%S`#tm@W6V7gyb_ca-wgZ}V^kYk&c=PjD{=g)&7E#9Q2G|< zT9WkI8=u=_(YH*+m3+y^q%xebz{IR?Hm2!O^fKPZ84Xt*#WQ<9gPev z$4Z?7J{(u^?qAEm{*+--^%%*pm*1e-hMPw59WE>rGIZwLbvk`9rn*wqU{c zLWMY?J}6s^vm!S9kWB=D2zo$$6ycuq-q@)!bw8ir;y8pVDI{`5xmxEI=fSRueyP6I z<^IaTRP=@sJ9Blg&UAm@zWfwo`}h*V*B;kj=Gh@Jc(9Gy@rZ%okoiKmq-*kSx!?79*379%n>LAA(uX{4QaspFJ z=sJW%+AMV@8D?2p7KG`1m5iN^6oIOyC}&x0^vd+Ozesr77MQv-?iE2Azn#iz%|p8U zp=mvf0uBbkjhFi) zNw&{D@~H0fCye=vCtWAOD^U0<9u3vd(#17c#|V|T1e&sj%rW&jSbvOu!5Nvy*!(!% z7#AZe$qA+$!X5`NYxNcwa61>1)V5-10K1;vhe|6;z z4xO%1yN>er3x_VYQf>_~n1b);Cq>(HGkK*2@7#Mj)8snKZ7neDaLL;FgM8*2XbC}fv2^ooe+;R1(t5KV{}SOWpe)?V5I?a$N{q`Ko*tpG1><(e;eK&sL6>AO zCGPpd=OJ(6er$Ik2MdsW&8N@p<(~ zH72J4m{4AB9=F}lD=^jG?Vbdd0I%GLP>7>*Tj$h+wz(eaoQ%a*UIHiRHBJGS}+Mu*ClX|r@j>{sUZ0)0|eE}Jn(;DZ;64mod6PAf)8I%qMOLS}HI zZEmnWGIgy*J#AudnTMrhKpBawNU?JL1S~r-=?MmBZGGGn*f?z=7ZVslu>QyuH>yK)XJ+|EAL1xCVg?#)dQ+6_#>Gdw zQy&+WX=(2gzNCprMDBi|2_fG2x2|3_!;ic>-Tn!X3CCUvu zCMJ!JLbZBFWvMPgxJyj34#{+SbrT(=G-+WCBJLQZ%ZwC@P)na3-L`b7E?md@)4I^V zYt!Tub~46~FKa5p_2`e3iR#TBG3c7-?+u6W;*dVf&5Ud z<=#}1u?*^oIKdL{rq@dXoP()}34LsILWTw(gmK$F`O0`#u$*dj2*IB%V6QgV4g5o8 z+Ub^h!;!Dc&S%Qju41`N0E9pz+1v;rZ2q{5OeZNJs!glBPy01!{R|Y^!`}&Dk$e z&HB+2Vh|09th`>X#UyzC3w3Jk-0>NB99E}43wkZ*q1NhJ6tLo&j}Ul%jFKZj=50wx zS)Dy+>K&y`-as6d+260Fb3$51`SP5Az0H4ay|pSTK>jrU%Cm%Boxln2PB*#c);8PW`Ka-*kKwFK?02XJ!k>2374$#u zi^u0K3UdThd3w4V2HDmgDTC>Q+MXG5Z?_}|qb@oby}2NIOZy#cZ9s>E%NyQ@CoWhL za|?YnJujehPDHg`56l;FCq^miL*8YBo8})+?nm`nVV4tHuICG7L$fFW(el4ve{|xW z&XmGBY97n(dVh!Y*V#7_H=d0^japdrINNS7lrx@V$%P7^SZ7D9_S z^$DWk|CQXA8c?48JVa&^t+-u9p}(F>nb7G$y=|ByN~j1;O81(^()QK*#*(D;1ebzW zkR}J4IV3#aiK3DE)Rz&O%_0t+TgIaT-6A95xJluL<~Lg$A%mzBklN=;T9d9uNnch{ zU%2mk!m~9-XlLb7{h&|n;d0Z%eZ`l&rlVi-k?9dJu6Y@$ee8xG^-Z6omG^y+LuvWp z-#DJ&XV`CR>zd7TjFqRHQy!nFV|gs{H?|!ftV@eahqfl#w$xoZ!g2PBYqp1}ld4N^ ztWH_RBromc7z&H9#WrPu7g9e%d74{WCT#fM-Z8MII3w7pg%#JFqF#zv>jdI*EF<~c zN0hnYwbv+448XJWYdhiHF-&rMF@ElAmAiCPS`CSZE0_YRRwC=A3*M(KaEgV_`-oga zD2Gb*{#=9XzU`+o^TA7GP?6BgIcG3`xTGLG9XSM~ORukEs-B@M4a;PPHx$03i%rBw zoNS~RkgLsmJEgDgIJ)Y=mf+?D5qUw)_ZjnL=(EPr9jNfkAGN-1Y){em&<58~)$e!v z(m@s`9fHhnq(8SlD2AV`v+U>JSYv?NKTHZ1Qx~gra`v^gX=E>&Nj8TowEn^Yg*4am zh801lz%+=KcC4`>P&557bj}}ceT?R5v0(rmg+jxbdh@6}sKLfe)Fy4Auq?R{^`I|A z6c`IqTko*dp74l2MvSA7;CucDsOT^uUlFeI?5cu3RsVnh>0MM1UZ$1&Di-uFEdVW^ zIJcIv&%xptl~)bq3mT;|5@*x`#PR0jP#Ey(C)#eh#Yh+2tM~g4gZ6oVmL>fU&NT2~ zo1D_M{x0X|zx&hLHOtuKpPZjq=ih6L!e^74eL{Fl{(XcRXRs?hVa=?7AfzSq-Fjl= zFw2$Q1p0a*AQXE9V9KhBwjJVSN5P&aO5>VC&TH|c2}}$E-QEI*W2YH zTc)qjUcLrTbDPj#KBD2uj!x~h*!CSJB0qPP zZfg})&;q5Z(gGZFLpdahSj~{ z4~fv2*X>h%m7YZ9*YcEkJ_?h;&FO2F=O562-a??EoUifyYQU|svxnROKZ(0i=3N)< zzjW_szXVuc`7U%e#+?z`+EC~B%3Ub7TfZ_9e~+A?>Zu6K|N}%Rh@&TU_A+F zTDksHbz_g-X7cpgE@pSfZe|Qf=UTcRMrlXhI6o?0`L!#ojpL>C;JY{u*j}Hsy+(bd zGllH8wAuBa^be7hb@Yg zmaXMAGRGcH*iOuj)Oed#TGGCyM=ahEU@~~%md|lZ+efw#!4$_pTJVFGgXxdHZG+8p zud%bfg22&mMyP#`FcyRM5A60C^WF$|N3JT7d5Buh#v4TwlfCEn4G{j=l!#4ib0|A+ z6X(w{ke$eIAnaI*Nj znTP=~lbHE;>6TkVZ#cd@UfA-E&RiHn?>jEL`m96k;uGTOQ9)4eHdkk-7fE`yW}o#_ zMsqXVc8n|L=#Aa|r8+(JW-UBvSJVFd+#Z0~ z5z_bZOkVEA95?&)&zsj$JII}x!5;$ z8Pr<7)EoEZeuHQ84`geuN+$5cf+DL^zpu#0B8F*-hNDSeB zdQLzn7(b3TR`}=S+(Q4j@2HZ`z>rvnVi-JAyW=wQuJ-f*(B!x8j>kvze?_1<%4&}| zh=-2jRu60u2_LPI#TUOc!aI-?t-S>ClS0-y@ zJUK8wq?3uQbrBTYp7DZBM_1!=Yyr#K;FiS`n5OCT2D7NCW26%kDf4L(U4om|Bbm`T z0}9RW2vu|5TW0h{v&(q9=uOYn8!<>9*VWx`hvZYY*B9XX$t)|4qV+wTfJ5ZzAk z)+af{9m(P6?j%GztpV1g7R8OPQRJ1SWwKa+aUx;+G~kQ0d_71l~wV zFi4(zgvEn@A`7B6%tHI^Ut;oGDa#^-Ayn3A5melc!o>;(p5PxJxguKG%kaB1Ct@Y} zF#=~dd?hoH1Mwlnf?<_K$HqeqZNdZ)l@l>G;1u3X;)MH1JovSImn3*2pSehP{W%{Y zni;XB#`x=dMUkE+B#q>N041Q?YdH)eL?@RihqW8qpVA`KKdbRQDFPbGf6MNC?`8KI z*Bp+MpwzK0YoY;g3pr1Cm{Sx4m#)^3agk_kR9Tpja*2p31`-AMYF1}$X?$bhLQvgC z6zv7S)+5BQ5hH^qn{g@(hHX$1`$=LZ#Wria0tdusu6>4qhp93oZNF25;^1Y|*RBZ% zwG-T-rs4NJqfvt@-HgPw@m;X5YU}ox=PuHe5ia8q(?WY_Z(teNlFsqK&&dXu%~t`3w<+UYmzi6VhFRUS zLHQST9WK>~(wX^t2L{6)z==uBz+#t z74v54?D!Yxe93fjtsI}Y19|4Ow0fxrM z6wY6i4Ewj(a1Bkw3t$dM?u{_~(h45r;_-`vvB^mvSj##gqZzX9H|+~()Fs|_V`}>8 z0;iB&ePLz^jO^~XSkGP{(=7AI%)2G03>zrOk5P{~1!=HD`qWcdAW*q|ffAWRd1wb} z^)OWvFbgLo!C{1bG1(FtYNJch695z!7#FuHG^TFJXS|qN=^LCRo2wVulHYVGViBcD zaRFLoohL#&LvGX{Lbpv>|DjiX0sN+(T(3d=>Xsca`X%*CUbO%qG)Y_UxuqwZ$z7&EiRN&(t~&0kcqy z%z4aR$qoA?PA?&?c%L@g(U$Y}#G6R$=S!O0bD4+!z?H7B42O-V^bA1HKaO`T?913u zcV$GA^7YmwOV|?v(%7jL7}Wef_d8H{_qzH`UNm+QxgX7 zMNS)rhAcO=y#oD7O7=#+;jQoKM9bWIoTFKp5yMT5cZ&+KqnE*{GV@CohLd#%YRIPg zYmIBBv{CqVw8@1ByvB=yBZd>PCbA|2_0&l=f#!xXC3bO7`!K9*ynfOwOW>93t<{ao z=dZZIZ4?(0)I8D!l|E4k3kPF>aq?}eyHafLE=JZ@;ND&Vzy9h^;p?Q*6m>bAbr6vW z#$yNw-Ny%TI^4}{k-@D75zwC{%|({m9t>7|PR`H6U&bLHT3W9ir9>0iIURz39-OOy zSpE;x49k-@g_)V6y0JtrzBPlO_4!LHDARLvTB+^2eJ_1b`wt*!1;^wzNQfQs)DC_91Kg$+Kk zMYfj-p`0sdEBP^}Yz|%+nQ1j@sW{_E`20o9x^eQ}(P(1t;Te71t#N0;E}xW)0eBYW zs9Tqf;t76h@l{L6==bDjLa$7*m{9CYpRb$UvY%8eO75GYB5ojCZy~!$nRXShpccL)k#(7t_MQOf+Q94pCF8Z?pBceE$ zF(%3KRUw+$TiMP-H3W>&92t%#jRO>!ZyYVD!sf%hV_4p6yB;AeLy-qo~ zu$%mpKvZ_@djg+-gF&0&_y)_4G&~+#y+W@RY2!7`vPq&6Y`q@S*@b-w_-NBMZX1hl z{gI-P@k1f|jp_5-sk_TxwwP;!mnwE2#jj3EtK9AnG==J654`a09kn3vKjfLomm<0( z(yiTm0kW#7A7uwzI7(Y50_^qRGBP<&iXQE*rdYLX_>19df;2uMMIn&kTS$NAGfb%B zX}hOLF?u+HlqtPK=-2Z2Y+*Lv9&xq%NS!Pww&B#XZ_Q!hiUQ79kb5j|A_AXp!Kp^vz3EU38}SOY|Bdr?w0Z7At6UFM zJnN|PrjnX=td&mhuM9Vl4lkva6wkGr7BZ^e&twk;nhAYELIzP7oN-RS7I&+~FDIwX zI!28Wl`7vNj>{~;diZe$Fau5u+2yJ8@(zmNYJOY$shOzu^IHES_x$EMWq`Kq2z z6GCr!Om zzn?14WR!!AN)G54pJ=FTTw{VWV&vDk5+)Z6j+p!7Hj_t@1Beii^NBR>TIzgl(00x; z{jQrj{O6=wc)lIF&oTmu$L{Bn>z4tM;YK*gMt_$c+^pt#&{pkO`={D^a6+BRnq4a^ zn>Y}SMN^Z^;lf7wW5Xj9OayEeC)tG#0}x#gU1$<()3K`LWgY%7UksH zW!s-+>FvFQ-NLn!slU;jICMm22>%x@tH!jR9#n>x;T-*^EeM zdI|u<@&2zDH<$0T45t9$XB#nVGVi$5IbWV3ko@Zlnw&=7Td#cjv;^zZd?OmWT`m!s zy~&Takl8-10dJMfMDg&;hH8xcf{%|F5|p&p>ayix-U9-_ zt0T=Zce_)X{6i0_ScP90#x(Ik+N8Lt=H0l3ft=~CSe5fYxJI=sG9K1oV;q`<<2!BH z@|%hp_0>+&?&y{3Kl1GQ|6U}tMw*v~BD>7V9Ylj>)3}4G-$92k zdc5bx3B0o6nGh6G3C8halciewHD`cwP&-V$Y{u(Ja2;(V9)*<26uHj5{gi2^R4upL z0tefM=#kVsAYEe+1@`?y^LcUk$#J^}Lqc(xL*6S$gP+9=4h4Rr5zQmZv4{KBO&2%q z5*M8>4b4udk#+gk@E^Y2FLfl4qsM%ggMET9-bvGk#HhH-x*L#-U&O;`$-_hS_PRCV z;INgy-;jIT6F8jO#qNI3qdSQ7^+WQ5!hMnrb;8Q!@}-G9;=%DrH9+AZD1--T_Rtz* zTpV*UPZo8(gLV@SR#?U(%msh$HQhn6seqj79&@4&5GUfQps5&?I0PO&YL-5_`zuy? z%mhs`xN=1W7-X5Z+o*WUG5DtfGB}+J7anJJ6ZQ-A#15PDM)=p*>4rGfZUcX1R7&W=$zZ{%p0P;(+%b z4w&UlR$1ZPjQ23KIF5PoiHOIQ zKWf~GjFCQl)woc$5F_%lXd0`P#n{Sy5EJkhpK6}z+7c#7Oh*ZCU|B3;?bv=Q3QFg` z5=^j=TwmR7>Z5g;Vva(}QBJ-*t@`?Qfhe_6L~tap5NNmzlwEAO2I;e8%?dqF04=x2 z^C+X8ANBqLqI`EsQ?mO)ht3w)X&#pZj%>>fj8O?(D*FjgRu3>DgRNifCd)rAsb33P z=xQx|c=46L#^uQy6nX$MnJYLOGspXwz*Q-#HJd)S=H}jHVu{FWc^;~F?P*Dw;|#eM zZjYJZ<1 zBBC#=Dt;G-B!_bvb78Xt+aX zV`3zq2$bLc;oA02dUo_bj9+|$C9WWzrG;%&O=(vH0r{YP5g^rt8M}7ila{9}i=(;Q z$F$C0SiwtaoF6(>+91&meKy~bpY}_e*R}be;d{eo;XAJCzFu!H)2AkBTRVkU|F@)r zy}4$dwg}#FT?!B(DHsL|kpA1-`F~vDe?jpqe8yl%y11CGmhjtYs8tVTagj>msI!DK zHcYabXHRXI|1LD$e(`mnl5{CsixqsdZ79U7)XNsoWcG0Z5QGZTKjds zmKLrk{iKE~)rOI=&kAJCLm}mvGs6Rmom9PEuw&)2WiSJWHa-g_(*gbXOUCyt`vYSr zxOu4Wtk1_s>a?WK8W15l7Nthi6n&CR$ya)=(33*V>-C!{27P8VdPQJeyztIMLV5h9 zO7ieCD2VN78{CNqmn*qZ8lZ{Oh(LnhpO7T-1%v6!IE#HBE5Gf;wA0ac^IoT*scmm}7#u-Rk8 zXpr^6_5opVD`912L}htY&^t^N_^?LcyY!hU)puDq3SuVf z78`Yi9QWAA89qG{+jl7gWN3&-Ei@F*!`88W{FcEz5+-SHw-HVG$YWs5fE)iGVs&4Z z|2?ekv2MQeSFbI=8wIXv^5VjY5_%vX3Jy=3(Y8j$HgpK8Na5q*Ta-TU5U;%yFbN^? z2t2HvJaJ71}mYF|drQ4aa>G zRdxo!XBWo;C}mEjZP9e`tT*OZ9DDrGY8f zROnrsm`p-MD)Qe4$lJhXNXC8BuGwj3*uM?Gmm|%hF8UB-h^>buAL)F9Xne2|lA52C zN?yMPwyoE?pV9puL1K}BRgJ?h7vaz^)|*GNn4~8Gj#OafY&0SBYwGc7Hut9y@jA8NntoqV5dRU~+#>3laU4u%^?Mddj777=GUH3$ zen53Yf#oq26%hEALgO)`?5J05dMgSfglci8LV?}kqo zXHZWWP;I7qI(zI9^Lx|lcittvxv3#vbUVADpCRa9BHec691&pj32XvA5nh-UqOs)^;VnDNMDt*iTqa7hXo zanscI4`Wg%hM9_#UV~U0Jtjfbgu^$d3}UE34q2z9J8Sl$GZgeE zBwN4Nb(J~}roHxb$7Ty~n)#^jLL#FvmX^vS^3l_-`vWid#)Cx$*r>hH;gleE(4v>8 zTKj(;x9IqP;vs|BVUcqpQZ6yG28hu_d^jw@yxwV2yDdLi_OJ#8%TFL*PPPJ5GX2$H z<(Za;)1DXOD}J7zB&=OV4Kh~z5VewQojd-?p4S@~@F<=^n=iQl_ieZ^MX|*`0lN&b zX4w`P_6{xz;N}dYRs2Ed!V1<|GaTjaBWxhDL0F%Rg#Gk}2(Xi}D0Mt4H7lZY!Iw6K z)1G#&J7)p0CLiK%y1DJJnG1RGCs|kNp3pnUXo>D4PX1{)%>WM|r?DShOytfwJRnIY z1sM>Wc;7Ggbw28=hZ>F}_mY~~WQ*j&x#(wxIvNtb&d*off>yIP`~*bNWKpe#R;lqw zJ8+0O|F1B?e>V<9uNBuPy8C7bc{K-S6oUB9p7Ep%qKdnI{nQs+xk2}=$~|?nk}^A# z9dytOmXMg=Z|cpPG4bu>^lO^^UbV4(hiNaJl2zVbe!YM|X=%^xqzyuS9nVvFOiepu zW?PXugN*pV$KM-8hgV)Y6HDSYIXa00S;_xC^h=4V{ShmvcO6)<9o1*x--R)sQBW<`v4=Vv>+xArFRR>A*3$Ske7no{ZPs zLFxgF{kOopy&tYM@7n$UtNyS5MX~6A;y~*dj7l^zwKY%>oF+U9kTEi?CaHYNI}}z$ zxAuxYo-OT0lLN`x7ppHWKUmI(fcndw*r~fhfAvVp=1uBvca!}&|2Zjp&*&0NX!p8L5%NOqy3BhS`okvmx~0K=ys;03LxlYmi*v9` z$no8%ez{ZP?X(DCHGpgrR_{A=nq>&eOJFBB&}&rU$rQH|-d%k4-xwYc>k6+|ZpK+C z8!iwNklzzLY}CgMxps*MXd#5+kyp|AT|q7kDw5f}AIH#?mS+$*M&s7B;L=EENa&Kj zkp3(SbpUQE4+a7i1Ng#WrIsAn0Woe)K4$c4jlzH+@3~|tZKPFc&>~v?Xv#H6MFXR5l ziQ;xv2q5Llsy5>l$Y+7rausc z@CGY_&82aRgz%u4n@b+EHb}y*+?O5JvGIn9F8C?=M!%AxnE^q)0OeBhs&cnEq&Uu zknfhQ-1xFo*it1rmj!`Wq*;4z6HZ$VFt==T88V#zrap5O`Rv|SCjWR?8^spS?TeOH zjK2}Q<>HkO0&sEfSXaD`|L} zXva8gp#ZDtU-7hZ6*4Pt^PKH#zo>11;lr*K^#fJ{7%IkANq8?ZS|Az)m^eKX$@6=M zg8cllv%WVzZO);!SYvrp)^rBrfR$S3B+ek29r^;Z?8g~|>mpy8bE|Och6XpYnCokO3Zo@kJ% zWYfYxZh@?^D!TPHRiI-6GRsM5FPs0eV{)1mluGJBCN|?%9<(JI}>I{hMc5 z3Y#qa39d)4L>W-$l-!RRWTUEjD|R2sFyTj3c9r4;V=j}OQP^-YaQ^U_41cbzt_I5~ z!1nBrYoAGNAl=kKEipHa3Ho^u+^e>)XQU!^g9`$o7%iAgmLLYOcAf=)!4tZ)h?n1N zt>!0RgA6vIjetrtqnvPafId~`y4mJQhd(=vOi6K~+V#8bRp2O|X?{&^5s7jQp@!cX z;oJg|qlwC{Hf`!K3xik2NxzcL^!T!lwV25&YaMKX+k9Ai6cF+}j!VI(JcXC(Ug|W&;KX z@ERH2rpqvvka)H?VZ!qNL_iR;&avILFhpskRs=Dazs!jY>kL2xe#sPFKHhT@`{~#W zICq@|o~A&Sp_%3J-qL4#1cGby&h(#{{4ROxfSQ(0*>lQ7p`BJ^a`UcGLNlw3(RF#! zt7g^D_*l^FUbTYv_9NZONoQH_vnK#(F#7C;KHU*XYH~sQIr?)gf zWZwR!@-RAU7nZH6lot&_i~;?s@LF{N*^C@qu8&JpLNB;rr1FgBDuuZy?zf!T$5#9t zygJ<}T(>YiIR<_uyv`7R7`!Mz*8VRvZGtJxWL`Rg63DVz)9*2JQvm=h2u_;hE!=hN zqCaflME0K5+&);v{Syh{R{M|$7w%sbH1d|Lk}8Vh`x2RUavJSL`Dlo)I)0+bMJA}ML0+>^?c zx^okJ!0b%QiqUFYL`GVbJtK`Zr*xY5XtmUWtB6GM7X$A2GYcf1F|Ee%?AK#ch}VkO zP!cGo0kM5#%wwCR^6xrY_vhw4nDTqoL}CXGO5=N3sW8m5_7#IENYQ18>A&>)6ZIi^ zgmdPR55avg;e%(axX_se8??8X+Q|=p(=$-fWv{8ouaw)#K=3%F5%-o%#Oh(vJMMMZ zcqoh6%imi=hk)y94|@{gDgLCeyX(a4D6JLfB&77!8Oxe~HjB?hzc2tb zCbt2-9p#$-CaIdid*G`fH&m(_!_Vhq_t_Zl;P{p7f|+JtFkQ&Yx*r%WM)q4) z#E&=VxOJJBbitD~E?k_Arvn9F*2Zxttbdm*=nhxN;Ac?jY>~Rcv*hl>*bgW}A69ab z6D;t5%b}$ram5abInJ*KH(Thpyvi#6rT(k;6g#VQ?zaw2p~I~xH&F1^+7*F?{KysOj?ive$SAsA^9W)^JvD!JJi{>wu{(AsBYC*9v-F_nUh~V6%qTqxqFu zs9ir`v1{q!sl7D@EQN;)!cVE#=!T52?;hjqET`FH=%3DoB+>t*w&EbcGKi!66w7Rw z<(4x3rxxTi1?9vNj3(irS840LK0nmg*GH**0x_LI;y)QAxQnDyd!8Sz9;UNjgNn>4 zB8X_-I|KHyd_4#kv#_9CfBwV9fc@WS`^vDmwk=x-?(P;KKnU(GL4!j`aCZ*`cXtc! z?(Xg$LU4C?E!=sVb57sB-S6Jk_x|yHP@Af?Ypp$p%rV0sPaHcSbQWq&4S<2PJeaRl z_B++j7?JAV+Tws&y*iAzw_7oCz^vRiYbDxGAH;H^DmpKAHyx z^Ae@KysY`6c$qYWj^k=(y8_W)xQGy*Ew68xw7pe~5449X!fm-wJ7SrfZ?oPF^)}hU zPT-ng^|s$65Qx_l3Swd|4jzc5R{S|K(r>_gHRl0bcw|*kQPK4%h20WgF<%;QxbpRK zOk!emAjXtow~Lh3qZm7r^!v^+RxA_Im?k;{llu-2D!M zcJijYMm0^V?yu`}dyXIX#~Zh4IBXsPVm`h1oFZ11X_wuBh}Z=0{MRdRvTOtg&Rd)~ zGF77R--2n*g5Rce+@*jI0gJ{5o&HA%(9pMDjL2u~Hp?F|@C4XPh`syf{qb-A)Py zJqH`x*Y*L?cSidTzlLtA`CH6m%#XEx4K*k-Iw*v{#W@T`k$<-H&| z$~nCA2gvKyfqG&08y@17!Tu&A{8i^@aV^-(`HZ?9Q6*!1xONwk6m2P?P9azj1tVaz z1a2raVa<43T~1GtVgdTeccvt1x2qEEV~rQ#u=F947mi)4)Z{Y|i8gMZPXAn#P9pEL zSaT0lpbM3xlE!2XolX2ceJLdD&BCcP3pnWkG8GlTNZ&H!M)m4v+Th~QYwV3LjDMW9 zk022kX=uMH^UEJz0ltopqc4wgyPRlD+#|6T+v8Qp8y~WsJ_wp*A*m;0!0@}&n!dN1 zP!#+&&9r1df#Ae9;z1u!c<^wI1H^XCU`2v(EfD(yNj&CG`DG?=kH2}Q$TKs|;i5A! zhcztqOYd@QJTCRq1>barp{TK4;egi=DXWcYh73etrO69JBC-=AxVBwe@hD}2QY)0D zfRq)D#q!2J{hi-QPbUw5ZYcb-E6>{=5~rJG$Get}hnA0{Z2J9({I_eqjdbtz41R0X zH)Svp)1`j+Wvu>nLOA3zU+HsJplT5%A_f?r&~0o2A5R-(phBwY3G z_d*`(z_mb6dkoQO1!KFd%vNrqgdI_-gaP#IF%!wWtl~ zq;f5QRN}P|^vKsEzXig+z&9h0rM6{F#J$ZGvCFFpH3X#hjiDP zPD1mR>l;pG#nPeQfIMRrcz^B6Gb?@8YG>}sDZ}Lb5gN`Ir#@Q^%-hoVsPlAz$!*){ zx%1H>O`@`~*6rk_9!a=Y&ZZ(z%Z9eg#={Y6F{jiJj=Ezyr+snt?I%W!o}pBY(jppS64eCv1NhC>CP`<^t5q*H@& z2;^cdSVZe%$w8MbYNgTO*=_Dm^FxGR+BiQE`J-F!wYM0tRny(S2zvy^A>_}ub z{FTX~35>Ys{J!<`#}JNh%U>X-i|`+UnB^1CI#ULI#rwcz+v!Qzi6cb|U}Cs-mNjcN1(S_SkjahDjYZHY z*VM=fZl7h(8$X{oFsGC6nW$O$*`;y~Ka|=KR+n8tg|hL$?2m?f|CK8gwT#rJYmZ+M z@*oElYeIV}v{YcM1I-}-?C+;t9;^UrAyvb&B z$`h;H#MkM;fy2E>UR_ag&d!hiHMG=emT11!NnwJ1k&y$QQ+M?2)$j!I`<N6oq#9wTovsN}*(`&sF>F0eA)1GCLEg`DRbd}$Wl^htZ! zMrr-wwW})GubFlH9`nb(9qr@+2whJ4tjQ*(P}0~&;E4qjr*)H;9%@SHG(1%;RDQT9 z0dY=CZWqID=Yv#FCmqp#g0uF|7XmLa-#ji-AnFUPh9F3ak*MN!P$z|KAp^Wd3FAj2tK}Bus)YBTj9&?9GBm8v4A{_&qXMBqS-((M{J`bPh6-=ae_vHa3K! zuseI{Y%xvt9vU6;RJXR*inl3|i-+1NJK~?J5L$oP>mtjHg2xqRU2Ii?mps6$Sp)F&CrF?706IFmt#bQY` zoy-Sy!H}E<3OwpU=Csxi18B%_71wEdB63wtc)Wv(I+KN8C_zKz6%nmyZSn@tyWO&` z-!&CpC`WA`v*if=35(KpR3e$k@xPL=uO}G+xCrbO7x{9mq2vtPM<-hj_yly+o4W6 z6jTOxIvMKrksZ^XFN-ibIx#E^lx&{v!Q^qc{o^j>L_68h`maQpylZB?w|3hkSpBhI zM{aUJr>%b<_A$CE*F)s0X7{VWHJ0pm&uW~37BzudGkE-3;+t+b@tA9Fnyc^D3p4HwWeKT`Opto> z$NO8qiWFUN!L#sMP&;f008^36sJW%K_OoQ*PBM>gKC?JdsE!C}%|-PE*M#rQs$2hd z&}+pMJ7ij#>^n$Mie{tsbG(3-D)lI_ImN$>OPai%b5Pvpbq(-`|IgiaQ&W-wpjqr{d>#V@e~5M#~s{)Kou?P7wCE|+O1~_`l+U-La@I>Ms>w@ zwXI8YOyTtnlCrbAo7T8v1bUMuEoOq#HId`zPt#k&4V!iY(cpYSjn{9nT4)OKt}kZA z$8#)cwUs+t@npYG=xwKe*fg#~1`@nicw<)VggR)mJ*-F(p80X|^u6mh+i*+}6z?}J zH9T^ExEhr-Vi#5&D)p5UaffQxYkr&uYN|f_8spLD3l$ify4%Z10KKe-5Y>3rUEDa^ zk0*)N7#o9GAADId#oADtY5Kk|019Iz46z|wS^a2p)wltG``5DlQ|!NoLa(YRpfi|8 zH%A1bZhWZmgbteXHRkbiuE z_7YJro#bb%rFrcx5uRsdyGOoj*-qOGa29P;?gg={CMI|wps+U~9T?tPdXqfYbX+m0 zZjI4|5XN~=2*T1pup)ExPU^O#w&=KNW(r~kmugVdYEQVD*G$nczX2ZWX+Bk-to=DF`f=c-S^wp)}hD1x0Z3!P^8hlcWC-ZKbvD&Bmc zeHN&Y*SaSwse$pd7h+bbuDJwzIgPnf5ik5i8X$xoX}+RexhG2w?e(+Z%h4mm3jctc zENDdzR_qy3y3=7-yI(>U{l`yV>;3CJlBK*JuCAYIt=m|?hO~7zyKf(eP)>7OAHjG? zB0SluXIeiw-_cm8GKYMOpyKFT37loz?J0Txv$ETnByJkKn@*7_;!>1J)?fn`hq_n( zlkyPTDR)>*b_ZMAVs{sYXN2pQz2i~p^k?z(w2IE$Lq-aw?yB$aa4F^LqE4*4NVO~4 z00b}$rjp-MiT-xUyn|&J(yx#wHPxwu_q*!Vq-Y^Y9O&nW)ofi>7*%{ixTcCeeN5`& z@YvBVj=+k{Zk+Qbzohs%t9a<`ZVtI>CaN$w9dUMy&3UKh`=S_qXEUB!3exndd;k`} z%1@-as{_M>_Ng-)4ymu#c1Ueu(6`cTgeXpg8lZq9+>TqD|h_Ql8V1$~YXGNT*KEcni zvWRPzGH3-~L?@8&YR&9w$h|a#VuhxvU}f?Noei5b&3J0eTDFMYF3-+iSXA8jM-KvF zw!c$!Bl@Sy$8WosemTU-PnL*&SaBu)ULLKPG6ajbujMek>-|K>>-NGo?h3aT_4eC| zOF)R=(+*((Zkr#qJAs0sX z%29XHPOmq^wa)h+R!oBCM5jbh@;_BC2>p{NO^`P$kjHMha4l60mg6P5@{gsLo4qH9 znZP+U#!?a@$L(SoKKRx&mGQ|lI~e=}xj!*B4Y$sveMuxQe1!*h>kbmh{kdUI7q zdOlZ0szBiG3peH~h!LjD>bA8<=)a%|cC3Up`jR~_n zbC-!&6ni=6(gRIju`5(%w!Eo|a(C^SG~wl)nGsn*#5!TNTvK@jsvTniSu6p;Dpo*R zt&6MB4Pf``Q)iDZ5ZX*K`@m2udU(XD&t^}=f`5fQODVxyZdfm|wZewy?~uH5=SSs< z=BZ;Ec*a1lSgJ8_-sBnVG7Ag10B?Mi~RVJFg}{{~6$PhAN$jWo6`#77$A-kCw2gyHa7qV-i+Iu06v{ueL6KN6W> z88iQ_#6%hG^jWd z8MY%D2@6)=Xrry(9r5=k?{AN|wLE?X+j{$sWm)o83DoD1b;ohop_by z_ix23!G1|4y0Dj(J=Rp$Bt3uOMW2L`qispk zp)mX!s=WTddZR;FLTa^%%onYvDShLV*pB*jE8zWU)OV8CK$azQ_UpgMTv@vP2hxvA z|0;4l=)lE;cJPp_z6>T!R*et1lI%0i10vTr-5(m4&p=KNN2{^$UT?EL*dOT7cYM?? zy@l|-2&bmPOo95Rk`@0`UfeHKe8$UWek)fjiGPEJZ`Vb#K}#vhiFRNnkjOV-!aSI7 zOMP{t;kG41tT>l1CNIaquF8O&JaFx}nAL_yl%QX&1JfxyatyCgnpN9ujO2?2j?bji z#&&Pw=x&aUO*Zw|nvv_PyE3!`7Wd$)fz@i}IGKpvwl>lg_GVzMlg1GKLeU&nRv&Bd<06$#3LBc%X-5l%V?4U1@%m!{ z@14s-rCbThrG#Tqnud6ToCP}u2N<+C|MoTrXQVpUu3i-Jml5+DG=6^Km%)v{)6Ree zavROc9;xca%bqkzc}hJoG33$^zilxycKrQj8lF{w#C1&OzW_MlR>{Ki$39&)aiEu< zw3P+ND|H&^Vh69}wb$nBRP?_0DTmm*l>S<`mq_7DIwPtZB8wwubD`11$4@R=j zfn-gmA7IbG;9qp$ZlZ|5%{a|_S;9=yC)9DOD?=itEJe}5d$a*ME!?tN8fwjdONHDa z+ehlTTi1qvK-Z5V!7I{zS+An}TU#UW4fz=ymrc|SO%Yt*>MZjfm^Y0br=Uqxh)W3p z#c&WgRIQr!Y=+Fghp4Mq;hy8;7;T-+9@{s1x6WG$J}X@5?;`rGmQ~4Z=wh;wo^HsM z)y}3f&N?g7Xtk099|%5hNzF!Wa!G&|$dZuh#Zuo9zfrVEE`8qbl*{;J&cg^UjZwZg zdH6#_?G`cdzJT&N?ow0HzVPpmD$ewuA{_}!cALbqzi45R!-)++WhMr!U4^^F_0W>t zvx9`+)F3LH9U`m$zamwBrVrzC3oeOcpp^&c*$M1p=+Bdx#g5r5^IqP)&p7ih z-rBuN^UxabJIwOb6?LG5qS5@qci8gbb&-K>Je=ZXD0$fszvB&)5J2`MS4YHV?B+-B z-F0Hr><7s_pq z$@^TR#i~rS;$!@bbv}i_fM8YUyUTK)4K06j{JpG6LOe0|2*@66*|;T{=fyH(yS|)jeF}`Fg(+yT_HKz2x$6z5h5$iD0!Fk@ znLeX-!Tn#^z3SRPHX_hwneQ(P@7VE4)>5Wnzg8)hLC8saPUciMZGF?8b;MCu0(@ll z>IuSiO74l7Dgu+G78*c(`YRu@r|t;-@rdg&c|aKl{8;0dX=!JdWBHJdW7n=lNiET| z#-t2KKR0^k#V!x&IE{FiwBU2DZt)p$O0?A^X8zOziE?RvJ`f1pa5CF0J@CpcyM#6G z?8V9yWciC>TH%VdDv**5ciQ2oE8!M$s4=CxMQi3%hc$@xJxdx{p085P{3*qX( zbfoPwSBh=Vz4z{M7qZACiQG?Px-15wCPeyjL~q4FT9ij+=*3HmAn8%V$rC#>SqJH? zk?tA7d^Gijtscp)7~nVNSw^G6n0;;i#4`dJzUN)0k6G9{uaH}19F{Or#^sOwizLAd z`K@hHNH!U*M_VrMEI8QdGgmALjITPx?)Y0qD&B1XGSFV`@@-_2NRgyMr#Tp#Bh1LA7+f=2G zZ}}}QwS077oiURG(#3r|UF@IW?0Z_hI8GAL$of9)f$z~V*fcj^@B~Wi&u)d4&z^Ds z*pfuu%$Z71{x>QSFIgc6aQv6F~wA z^;Y`)hjJ*hqbK#hFgsFJE2=%t!q0sVOES`8kE+Ox2JR2GY*XrCIJ3j)e6DNPSLQzp zGT0;SVU>>(pGwj?MoS)Gz2<9Jz&P!TU)JyQn=l4Dq`J&3a$Is|%xyB@oK9GDW)|VT z9HzE1!g~WGM{0H0uGUDO%g7Ll2XAbg)IfrhCrsZousOCpG(=CiSmW)sCgqEYI>PhxJHD9W7VLWoIB}M>!aD`@)d#oq<6+Hxj)5->03VB zQ)|v}l4xA!Ra<%c^`*gQg4|u5S*@LM!+Lik$bIsp zooXncsFOhe*z>F29ziNj!V#_+f>=rxZaV=esM@y zqz8zGFeuYM!}9-?cqosz5sQZbVwr5%VzB>6+W*g4i=UvE}t+lA%u|5!6@YtcWc z*N4I%y@REq)&Q;%X`nR3nd^!6G|OoE=B&UYl0^o;r&aN)@;;E*C@+~&8tf8wT~X`$ z=n|b!%qG8SNaf5|dQw9gYXn}E$ zRJLQ`XDm{=iQ{il?Ol)2V|GLnjWZZMbxgul)voiFG!>aDaQI{HC{(WnLgk;Lf2GL^SDUkgA-Hled#rh}9&9S7@Oq7O~x={?oEOzA}t@wjLHLBHAb zzXEWm3Z0j80?|4v0`U9HrD$?argEO4x%YB?YQW8`i@1q+^M0$;Iigz{gEbJO3}f<0 z7*HS%Pd!jScP8o0!SLI(J8(J04qemJ4b0>a`=Zws1QNvLeZ8fl3#s!v(4bz!gx9y&F!1A*kST< zH@h(&K?(%#HG=67IvF0Y6XYynezuu2!ymJ@UBJmbZ;V0^6F>JEhQt98P&W(;r}s2! zBkV{tp#Qe63CiJd3F~+tLBTn4THdLuiK#i1`!^un3G?Iltvfoahf26u;tl_Y-u)nl z0Z4o=R-9tIOP#me!tehwXs(O|T7H2GaU~MaTz}_iN?c)CzIQ#w!UXCevT!ATrh1m0 z2Z+reMF$ByXLW~a6(UZMbs24^=>#0nLO;es3)!NhKC$|oER|;b1`-C@m#r1+Glal%jB{9#^iicU-)zr zEX?xZ2R~do=6-!%xc>$U)MeusU2;okQgAYH++F zy2PX19A?2^DvV|+(9emy;h)g0j#FjHQ74q8ftP`d6c+%wj0TJa+Yf++ECxWq!sMi3 z{nt>i&X4%F92Z}p=Bb^cy znD%;owTBp+%Ld0jaz>7|8W5$YSczaW!6Q1&(P3lwa?=Egb%8KRtZZR%J%Y>FyW)qt zhh+zk2~$CjkcG9O$nDeTH8m;FQ})B2e0TmW!^?6;#HsD&Bz{R%(ylG?BIA7P@VJM+ zYz450qH8~MNiCQGrdn4gcZ5Hb$Sd;KGh>HsnktE zCXBSY_`~lS!aV?Q93-1#d2QRA6Sr+mw0>Hgw#RLMG^$fin}`Ze+-8hj3+EqjMcvh??wQaH0qI5( zIJAZH=U7#rCcOp7#MKtP;dGKaY0)k98v$6$4*^WF40fk*pZ!8qET0R-Xfs3zg@4cg zLxUPSGuZluiF_etN>jxz*=(1%0UUwbTkvLKz^LQ5%WBewbdVEza8HQK`Kjczi+F>dcgw_lR z-IB6>5Ql@q@0QF6J#|;|Q^Do<%irKGlgihegC0so6&pj9k0@w+S8GUr4|iR>oaLsn zboG?9_}fY{|CDC;Sj7VrGWHINjZRu;Wg-v$K)X6?aeXvJEnv9@3Tr3MOqk-NO%dr8 z$hSfwe_&a~$Xm=KM`xF^? z47MAen1s#WvWK(pl#xlMjVdIr>q=E&ycC^Gn#zphvCE-YN?OBMb|fS>(F}gaKJSj8 zl})u2iIhQOdj+|;!E1U~QZ$3fnB6VT5P3-Wc`GrE#J_r*Hk{Lk!n79m>KG^HGC$t< zPnzAxE0larj2ep96F25-ToGzs4&c)07kDXsNET}Wyk|e6H7tcjz9ZZtYr}@Kjj2X7(bhUMk z!`ZsrDL7$?ZR%CRPAkO#0!}q;2G(Io`+=s4%`x@U`X4byy=SwE)NXoYfano>#kt`E zpV5d%0Cwyr`^Z!@30wCkoIR8J&*1ES+y4^Iy3ppcvGRuyTk796zu6hK{x^u$7txzn ztv9D^$jQxgwr(1z0AH$uk}JxLzeZxIvlXW=3#waGRhPT$iM&=G3lFla8xJ;YzcxdE zs-mjfX_=Eb>9eFVr1^AXGh#=&rowu!63KGDhT%&W`L`H9Wi$W}5>X>+4)y zHAkIxM|X>8IDs*6h&wd;L|(X>t4k{V2ekU#0~xORXp!xyYhCk)PIshKQztv##_pg< z)mO=oT`2HmJNOAMkm&>VH)nrdtTzv*`ioiZufnpyrUpy+DeoXT1LXbDsM-Zt2}?Mn zc3b3d1qCUPV1OG4l##pio{y`kEjDJ|1DXA{Z_L|*1+SLpCK$oO|0N98D2P>y>>o$A-s+&6yyl2aG%TLnqjxV<=2he!O zed+olXpr6@X|`ZS647vH1;7@Y^;Ds1ovsksHW1N_IgQMgPyo$xfcU+^G&20Zb#%&L z>bmVF|CC^gIZ@K_RG#efNn%HI37V{6XEyXLk#h{&bs&IdrN8A_koZ>+7qFM_koFTw z;M;R6?6(HV#+ehtuVUmY!~CTv^!-W2oz4sbPP|jvme$K1$-D_6qQO?de>ys~!U!~J zUlfQhj1m22L`v5GLfV|q;pzX_+y_=>-|C1dNNPN6i)oac$raYYEx5U> zQ)?JyuTBY-QqN+42rcPqAWz9may@o=NJi{Lj#{GKnnVtmIvW%db%ibyNtKMOlCRdy!T5K|iWavCt1AH06u_@5)0L&Wb0CHp0R z4JlJP)yDb2e6K>w|9+@;ZO@-d16%5uE@X^+Gs^q3oCOX$A%65}wO%*qmfFKkJQ9S{ zR|Pq6w~WPE5_$$PHG^t4(wn3=0CfviO_VF=(~nXz4tud8?$1fI+^j#LQD`*g3*HL$ z3N%==GH$A`K-E@stQ7B0>>urbwvasM*7~Mw^*4rk8-YA?*J7*l%zOqF*>A~Z=P3-g zEawOH?ANBc>Z-wj&tqpoAa`^cVzCvm@RVV3c5dVgyyLr1=kLVz{{~ zuYSzvVg_tLJ;jJ|sa$IU$ZMe#*h)sjkgIssoMrD>ZSI}yE(89ZadLbF{=eJ(^#?Ra z+e&zF6?G``DHf!MXxD%xjTQuUvekdBqif$H6gPI*0Funjjn`v0?C)yz!%wtRTuPk6 zcKDVx8IweVBkSDVt6zCq^sx(-GK23`9EYa}5XbQI%h^}(*#23azRbT@!XyJU#frCL z7959mjWYP5=E%GrH2=MptiF%6SiP0*H71d;``*@42? zmX4%jH0d1$23&CM86M-6oXimoNXy11>l1>`Mm!fh>!rI!%V%0ajP(;uj{mC?#*Uvm zN@&`DJdTDfiXlbcQ@h#xrD3l;nK-r7J0$KYGw zeB`j5r;K;kUyG9x@GwUbeM!&t`jZQfxdurQ&`70 zp!fddYh%7QG4F7c?o@%k{WPH6DBerkD-Q*3WS%WXd_<3wJfPpok{!zK)Lh_-p}Id8 z`cCx621tM108{Gi{g-&YVIW+C?7pAp|DltRvm4@{cU?JVFroat&?18#abKjp(;KB1 zFe7MzZ~0qYG?qIfhq0$8UXSWoak*eJIh(~Iop>R34SB(Xfz4JqdYg93pGY;8b1}%H z4QjxGs$WW%wRAbcq3S*_&Oio!eYw?p0y_Njse}fK;f4l?chpdO-S(!)*$ zfqz)?#Q`?HASQ=pz~TMEJM&S4j{m9Fx%7|p{rqCs18e5%w3V z05-exFR(`)k(Pn?CyufGKKvgs=C$ zXG124V%I4Z_WP9zwZ7KTlNB>`B047g4D=e$s@n>F#(mg+Xvch7d z0U@V0SI6JW4yA&dT-p`!sDKnAO!|6mxX$l*0LO}T@%s$RuM#NKlK)SMZT@AZ^hHbD zvBtGi6DkF3H)E)wQwKdZyzG<(dorBI*1HR`*5wcDYAp$0@xq-r9xC}8agB@L?6y6w zf#f~wy6j)f&NV(@Q#4ad$PXWWqi|x1m5#5V(OE%c`30Hzik0+ZkKbpBLBxt$+%@oi z;S=2Nk=r2edoGzYVV@#nSJ_tsWOXUK5UN6nWbHc<{nFMR?w`f7B&b zrA%8Z8MUJ%;xd0d8vSP03Jy$wo>Qe%Tf(h!XZX#U$jTB2SPn^8(jUG0OAogKzupsX z+rG!6p=QudS{r{6aJ?Z}?scbfd65YY;z2HZTQ?JW5Gu`V_ATGS(AK6AHvOlme)W4k zsF48HDz0^L^9itF2slzw!3IHCf#~~a!RAK!)X?yT5mTY`P*v;tDs_46-*8ItL5pfg z*!I2KYU*SCQ3p;NTX(|Mbc@w=1hl?)ts|hW-(l?+cOzk}B<`MJ!sTA{2XG_$0-a*CCn1WIbm~ykEb5Oo zyu(sbmRod*qXYyW^w8gv>+>&->@>KH#P93ve21^zjMeG?##-!xCU~ zdM6=X4Mp*VVX5n0mFss(1Hlc!nm}Vlaff=K?SUIS^HOZ|=th$1-U@tuJK71l)STw; z5KFc+duKrZFCQg09wFqkeJ=|{*^l!`@QO87cyeUS$Dn7(K6tLu?3CR=*Q2z7Sf_W( zFVO{&os+9BUhrh|Wmz*_&Gdlz6pYga2h^4GjEi277$_G{Tq=m%D~=9VgqQntn`iSH z@x~=vvJf{CV9Kmjj4^C@8pa=Mk`!R&9hsS3a?VpD16k{Gc*JZ}7{U3!VS$afvSRv7 zDaBsxVZ+ZJb=$var51-ff04&m6j*&Y@i>g(SzeHu|M+1A#3)sF1u~;*a-_B{3YbVP zhv`vY&oYh2yC6E=k58CzpPrl9je01InPGBPIs05yS5rs*c@%6K#=N;+(3$2;<5v%1 zN-Hq>)(5Em*C}OEhF4LxxQH!%Kk>e)J7U;B<|3Xc2i(3tExkSt6}0j``_@SB2d|FM z_J4W%Q=Dqkaio!+t%?vKU!rsHXZ1DEXk!#mBa%PP-cn>P=MXWo=_!A_7m<{g>I&VrA^~gmmjX&V*M|clHufumi^d%WCY*43G8}@L z#LD{G{@3Dv6`>|!QjrNa({HAy>Pn~x;j>}_z|+RIITssli=NT~b(Xr{xLIS_z>`|Z z0!N#5R^;=~`PT{+F5ngt_eRz0i6Tx}GnE1NO_-Z|@|$qJZ?o5S7^s~ji}o1&(ocO{ zg&3v0Ym7QV1DnB5E5vC}%zQE5h7p)`X(9R2MxPqbgOM?YRcf-T#fSWac8=lqJlv>S zDh{;^zXnzrO(7PZr0<2X>10+g5tG^xAqJp+rJ#8FBR0UJ1FDs63ZH0;w>oucVZ??x zONr=nKkB_D+(X5OePB4U?0JKlSmPkV?8U^W=gRKruMRmqL1WEZdf%=CohX;9zPreo z^#L!J)9>HotZ1g)h!aZ%Gt)6N`@{T-o*BWQS*|Tu_V{_1iL*{@9^i5qb@Q<>blr@( z2aLa@7gL2rmEPUiRrqYEM7WdfwR1-xW%CcTdb|y9A+Z_D;|>v9cgGLl*VgQV;U}7~ zeQ#|ifV*5Y{;{3E*hBSqI>(aVz`}c#@upRMWA{H}14`b~5tA-~qNR$yF6w5o&E#};1FrUsKBMXvT2mZqO{Lh|M(=*~Yr?8(kNWWL<%($6e0C%5 zGQ4eDlDLYa{D(@}mqC~0lRAA#82YIjY4nH|Qxy|oDLG$kIRF?jAZm&z~jM3$3A&?g?xJkc~ z2x5k+f1|`{Hm`(1`RGFZRdHs$7VBKD#kPoVSrAsI6i;SYMBu4M_vL{{D2O2P9k3v$ z9J?0}>&V$D*250zmf^er)#)H&m1hY!cQDdd(=x5Rww+N*4JY%2ut#fhWJg15g=+mx z?-h|c=xOpltY8d|G@ohK>*KHTht~r(H2m{%008R)3t)^?xB|k=A}KX^Zd0;|Fk#Mw z0cCKB^qqwK^lgUj6CIB!8;9|l|2Z5K|Dc5@Admz4y}8q_eL|-{S&u43GE9Cb%j3Kn z6fi^Bsrn=3MSS=smX(^ zRAN3t-4~>68VOiZF_|Rh?a+1P4Hpn-V7Q0K=d}esd+?v71N@iUSpEma@N2WpKPtyJ z?(1|AwzpkXS!!&f+^=5S)#Vx86f}h$W-v)|-ON4oQbyg9-M3-p8y5I$U)$9YwwHl+ zb$&loy-X{-6R_T~d(WA;DrPFS_2bbFwm_;Iibl}yf_WfKWaP+b5Lx-r65ArntsZJM zO5EvMuv-@~xQRepza2guBC`7K)9BSgNLp!1y4YmP=tVD0I`N^cQroXzMMX~9p0P;Z z-u=NJdcPj&Pcg6nF!^q;zRFXzVF%w{nGS&M1z8#A$ z>H%nH3ZAT7Ab8T=Pw#*e)v?|HLk`&ybvF3y8}F@=dZoeKnDuy`jIhm*BxIM+h;;`R zuFe#j8QVc|d(J=j!=C_u2%B(!^^I}gyrEz9f?B!Nb1O%FLKvTa9Uq^bt14H$%Gj%* z$~JDJR!?kT7FXmeok`95@Z3q_Ls_DC{zbVJ9Vx&BLj#>VXjZ?vk=nvQupli3{*;m! z;?I5u2HTOT1~QC#xJY{+A5Xtl8yi!se8enBm6-^haL=MSk!{}R9)`RO>(X6ulTHzUsS@$ozOg`0%xJr4q- z9MbAS87imo;dO0n1w2K#hl4iSQLF6lz6clkwpB9nYeEz#0-J|r>~lC32JM=Cxgzn9 z1m;c`$B@XqK6J68?CTy^R9{xB0v?mbnO$C6!n?sy2CgsTw5YderGb`kzdZ@y!<{@1 zl0Ql*KK5=t-sJ{jWbIsZyHH{KILUn-A44oUKs=f}SM_Z19$+Wbd)tP0;6qoMVc9i? z-s^e*i8QS9X|nNQ@q=@TR&VVtb^Wx69B)^ zX0tvkvkbIJ(XQ_%7<^NSR<3n1TJlq)IWMa_d{I2%_jaZ@pDT6T22;8`O{;FP{Bmpb zTT3*lm2;6poNo>xLMI1wm_`KS46Zgr-`W@bYLlOcICkNA&9(B!;)gZ{1Ly47yEd55Royb6gvVrT8d9`uSi7qD z8Zp&n(5$>z>TZ(@^rRZ}U^Kv3*q9YF_j~ZWZ|~Md{pV^EPZAM%%<%WLP~yN?5)>Jy zgFLdLWkzHBYR6(TIn#IY^4QO@fA5APVKKqQMlq3C8DFUL84uYp*>XY6+x()Z)_?9# z`~4LtE-+cyK7p$1fYe;bD{-EAr;2bcDb`|b(520h8gl#;9zfzvz!Te0?WL4;6H z3Sj*rUz+Vm89kDCWgRQS zEvxrivJKat9e#v3^8Ws82}hKWKWWGp5qOg@?PNS6KAafh1Jka5xIO1z^khi%Z0ei{ zqgGGxxt`SpNHKmbvN%i^ES^2yj)F`GL^jY04Lv2kje;s2WO!-CtRN88Uj6YTsfLoL zCZT%?eTndpcY6kp>S>3cF@~yik|9&WXwBtlr%a7Fr3?TfGNt+2VAq828D=`-BvG{( z4|WU{Fzq|0fU7-DWdt`2Fd})v^@xz0PIBMCDVr1@cku7nz}K?&GPIPv%r*>Ij}v?g z6Z4Ws&|!^&`oSKd6{)FmnrBE+RgJ;p3fzjQ*IVIAK`?L4xl$T`D@1~%%gE&8S(-gF zD}~surKCY4&Ud?0Sm?+p&-{6Og4C^l+PTIe<0(38{ap~-GMKlEMz}lH0tpe{xDl9U z$33=hdvt6(>c_Xy$o1JT+Y1Q*LC^-oa`+**Uy6@Vz6M7z_EL2=j=ni!C~7^}aO*)U>NzBrn3zm2#&!`EO+F1xp$PXpX6q)^#e|ybZ_77 zWFSt?F43ev87Ynr=$>Z&rYv}~$usY+`65)t9mbYpBxrvlVq6Li5gZO;RKw(4Id(EI zk;X;1rw||(G=~GH{EeLX5Tn8JS)n}p^|S%$2SA$A4S0$)~mr(6?a)aNb5{F6r^Vz6MRY_f+EqZp@2psi(D^+(yg zPI@Mf`wxNYPp*OKkMeKnukz10JwJ*~faFSgwhA{ypX)j})Af*(J?OqxK=bNEoG{j^ zWZ&XWo)!Ld5?z|NGg{N@Iz^8+4QkDe6$XP_%kir;(PSkzb~Z6}a8V#r^YPjcwouRt zAR~2$KiqR9*%=Gy^G4reO%JEfE~_Lg{CwEgs=YA>L8^H(CDML~uMLf*r;&6E6VwMH z##B@V7RA<2ln40~30Tr*!p@r_e6?_b( z;tpp&I3|;{WcZwTY@lC-bmLkzX&N4-N~R9OPSL1&D@ai{nGmHn3W(g zht{xz2e#ChbCnLBn1#t>MMv98)(6vWbgH{gm9KZp|9?{92}7A6OkNh?duS?2e{EHY zyN*u)9RnTDCE4YqBr+_S9AX9I4l`Z{L~>~NU6MPi=6yRsln^ecFG<2*j>@6MV!uxvPv@;%s5`iFOZBmR6js0JjU`j zB+jm^lEKpsfaa@m0xDbJtv zn@`^W|L@>+-a0Zc@z4*I186mQB|xKC|9vUniGhUWmDP@J{D5%+vQs_Z7d;`>O0EKF9$DJ*zf@i#pXXpk~e%~zYWV- zTqMcWR6M?YP+AORFEtlU>gj)ipS6`*B*~oV_-T{&j+OE{^CLSyZ!88324$o9^eD!y+8*MM%9Jf%6_(RLu5izOn z-bSI+L8+6GG$H`4mFDIr{lJwx!|iJ}D`u6B07vm#9_3yEe6A9$yw*oH_7Q^ax8l)@ zIkW3Bzw7mY=b%yJT6S^2uK;VrRFs?iR%$3D(9#^l5;7J0^PBgLFd_Gq=u(;6shcDy zx1)Mf3+l6&uC$(C&vxSMsN1wqzEL1~xt00w9915;PO`y37>wut>Fuqf+KSpeVJIyW zr&w_*#oawnw8e`QcN*N?DNeECR@^D>PH}gaV!<7P>m2&dy>s8WGBa!D`}ikWE3B+! z=j?r+=VwpdMJ)=&YWAav-Fl1dM#X(DZ-F-xBqWu!x27V@_-!1ju3D!RU4wJ(hpH4^ z!MclOMtN3Y#}pGNt6{fE)$eLNM6gpgQs3Yit5DTt~g`1NmaaqPkKu%HpOJ5Xo8G+gkhBJ~F|} zHH0*V+vU!qSbF0w-^+jw@qUuMJlJv4rcqKqcYtL-k_qja#?9N6r>0rd5wWbpEp(Zc zIPt(~;)-3vA8R-$9*u@0|H9x!X2%38xU+duYN_nga=;p9>@zEqe%vN7bEp{{81x{WmS40e4FzNY;~QVhoCV~@ zla5~X@^5E&SyM_I_Y&y}24C%1aS@$6Sj5b^^PHM1X|(~J)F(Cxc5f%T%McjdRiPDU z1gYVhw)LMmzq`s#s&Yw{JU5ig2x6X9)yVs)YOmJ?Rm4TvbBfr@GrPLV27=kTCBdGhIK(Gl)E#d0rX2vQBmz zTKHSn`mlg>g~aoD)h~vX?`u?CSPWBeX`RKT1mll25YvjXid<2)Eci8?K!d8+uIq6? zP)T=taspBXe&_Y*l+C-b@A@LR>{QzocII@8UX@LTfZ^HPuOexVA#bNX@59eQP0ksi zuM($?1$>LG)^QELzF>we7Z^r{o>m4GO?r|2Mi4dwM%y!~^(N2bq7bwGOW%RTvjW!) z#&mfie!Su}nJnHI3M`_iV0Mbmrn5PHi6a;tp_7$z#Xcic&_Rhl-Fv^26P=VQp4?z> zG%vi|`Q|}4W&M^ir1zu2C-UR83YzLSE>}V>kE*8#@wL#WJ*4gd8eG{Ywmm^zat9`s zf-ceB>%5fL?60KH%2)HvCe1FLJu*~R)uC(wwOY9Hpsvy?Kr#_Ex_-xi=WF#neQEhC z;D|nlo4H(7wBQtvN*Pbm@EBIA$knV6-AH+o2_M2Xxh)T5@d91jlXEdn5JOB~vK3M~II!7|A;surNl%Y)d;?$GL0qUhk<|t<0 z{=FDvLrU8&3z|_UFnq>=|N5Y#1`1K-6_#{P8vf!GiwvkMQNsf6WQ|$x`g**R{fZXG zZ6L4*gGlB0o%L7u@3+9pA{QOR#p!XK&8|(hZLmhnhBpV-vl2n=KL;JyiROo}4p|ky zdH)&2Hu(Y`@+$&HZfk`NgDw*syzY*ptS;S96QY}L#gVG+@NWe(%&FS1R`^Mh^X4n$ zQs5-f9FNR(&}Oht8t8$Ly`S9T-9G6>+iAw$y}ODm5yxeZEzLpS#7bptAEH@FC_>5t zikwCL@nsjz%PQ=wR#NEg+Xk|Bb$f*A(`K2KE|*uGesQPe?Ww8UlggLx_xuCdpPlXU z*n#yg1gXd;atzgWU0JpYA%uSDy&EY_ngP8sMKC3}6& z;=YmMbZ1`Jp#~K$YcC$7dI`_UWF5Cv1=;An^rH;DAy!dLw64+{YnghWI{o#F78_nh zZQGo6Rwi+E^CLc-H@c*bkkM=&o*i&kj^?QSTtWY_FHz)CJG;Ut{2RCXu~q+|;ye2z zW{)ALbuFq}oty58!&|lfNrTo3^{^#)yz1u|Vj-Tv*yVBDapq7~oY!aL{nw=arP8tt zy}qWHHf)u}e~A$s$7K8w%p@R-IIpxNZu6h}#g_4KfDK^u+JkU$2AN(<<53YLAC49L zix%Kh%1ncNy@-|79_?LXAopzb8&|Gqn(wIX$`V)Pg+R5*3Ri)}C}gzqrcRz_JpD{^c3jvvok zP?cu5G6b`{K)3ADf_b%h`2+rugk->62}SUefR%xpc{Tl(bhZLnAzbC(p7pJ_cEJkl z3)S5MgcTy33p4~N2|5iv|IvCr;Pm3;(6Te=AG5*iO1AP57A*Zm@RXHJ?dIe7us7Ph z3hg8GU1kN0*LjIY#pbpQFzNQdpvRVyg!W^7oo-e4;DnI>tL6P%ty#+=;JlZ#oO%+x$-lgP9H?#Nb1_l z@p9GJ^wBK_V4YvZh#FEhOkfEpQxE^tc7%dP`k;kJ@ zheCICUUgRx-HDBPIua3zc}BQC2opF9t?#&XetzzsOZRN2R6*mgSn=}}l=M8u6*@5> z+isHv_}ugS@8}+UIok@WJN$cw)D(uec4zKs`A(v)Ojs)JGxB(FUwS*NSn+H@$&=QK zJQ?O-pX0W^(~1nnq{w(s`G;KM8oU)p8;g@a5B1Ejw1rU>N`7wWp@d0*d6LIc%M?CL z?;ea4(eK^uc^PW;u%(yefh@;(YjF{uwjUJnUotZ;`_lieHOCqKPg?V3wf_Y(qenoI z4Xyj%U}h|hH<{z3V%D?mIyI#3c9DwiQ&SMC3r!-Mhmf6rX0-CMeVqiq9{2CC^b6+h zkSxbfG%|)L!l4#|73GCSOCb-fHW(esLcp!C*YI?)cwt0kACe~X3AWsc(t7)FmpVTbLnvBFh|5N?3G;J^_~=r zl(yn)ZxFm77^&pokuf_2v*K;7de%-9UR=n9(wM;Agi6OLR2lHL)tKDDj$3FM|4IAq z_hec0FPB38N#WP;CL`I&4hqAYkKu1faJiWPvO1$~1wASy>ie2?&*$p{JUUXuiHmX3 zI>qaQ*>ae%z~d?1UE}C&PMp&Dk*boYpjUcho+WuaC|PnQ)#$r}D9y^!|F>P&#;5K%Vi#y|LCcUoC!-eG-jO?x^L~09Jqii+DFkI$Wo1 z`e31y-8nrseHQ&78Gr6>RMye+$4}E9SadqeS%u?X5W5DmPdr&`GNxBeei6izyWpz4 zUjG@#kXkuB<&KIJvLZRcD8+}Ivu>

    &aQ>g0<@xClP>fy(!`3<-mN2?elJZAPQ}q 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 literal 0 HcmV?d00001 diff --git a/docs/core/tutorials/publishing-with-visual-studio-code.md b/docs/core/tutorials/publishing-with-visual-studio-code.md index 2b7e9c372ddad..1a75f8632cb22 100644 --- a/docs/core/tutorials/publishing-with-visual-studio-code.md +++ b/docs/core/tutorials/publishing-with-visual-studio-code.md @@ -38,12 +38,12 @@ The .NET CLI is used to publish the app, so you can follow this tutorial with a The command output is similar to the following example: ```output - Microsoft (R) Build Engine version 16.7.0+b89cb5fde for .NET + Microsoft (R) Build Engine version 16.7.4+b89cb5fde for .NET Copyright (C) Microsoft Corporation. All rights reserved. Determining projects to restore... All projects are up-to-date for restore. - HelloWorld -> C:\Projects\HelloWorld\bin\Release\net6.0\HelloWorld.dll - HelloWorld -> C:\Projects\HelloWorld\bin\Release\net6.0\publish\ + HelloWorld -> C:\Projects\HelloWorld\bin\Release\net7.0\HelloWorld.dll + HelloWorld -> C:\Projects\HelloWorld\bin\Release\net7.0\publish\ ``` ## Inspect the files @@ -54,9 +54,11 @@ In the following steps, you'll look at the files created by the publish process. 1. Select the **Explorer** in the left navigation bar. -1. Expand *bin/Release/net6.0/publish*. +1. Expand *bin/Release/net7.0/publish*. - :::image type="content" source="media/publishing-with-visual-studio-code/published-files-output-net6.png" alt-text="Explorer showing published files"::: + net7.0 + + :::image type="content" source="media/publishing-with-visual-studio-code/published-files-output-net7.png" alt-text="Explorer showing published files"::: As the image shows, the published output includes the following files: diff --git a/docs/core/tutorials/testing-library-with-visual-studio-code.md b/docs/core/tutorials/testing-library-with-visual-studio-code.md index e29eef7c8d220..f41b2be9d48d9 100644 --- a/docs/core/tutorials/testing-library-with-visual-studio-code.md +++ b/docs/core/tutorials/testing-library-with-visual-studio-code.md @@ -114,7 +114,7 @@ To create the test methods: Starting test execution, please wait... A total of 1 test files matched the specified pattern. - Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net6.0) + Passed! - Failed: 0, Passed: 3, Skipped: 0, Total: 3, Duration: 3 ms - StringLibraryTest.dll (net7.0) ``` ## Handle test failures From b6e1fe7710dc68cd895c47093f0ed8fcd00f16b3 Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Fri, 11 Nov 2022 16:06:13 -0800 Subject: [PATCH 5/7] remove extraneous text --- docs/core/tutorials/publishing-with-visual-studio-code.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/core/tutorials/publishing-with-visual-studio-code.md b/docs/core/tutorials/publishing-with-visual-studio-code.md index 1a75f8632cb22..9109c37388ed3 100644 --- a/docs/core/tutorials/publishing-with-visual-studio-code.md +++ b/docs/core/tutorials/publishing-with-visual-studio-code.md @@ -56,8 +56,6 @@ In the following steps, you'll look at the files created by the publish process. 1. Expand *bin/Release/net7.0/publish*. - net7.0 - :::image type="content" source="media/publishing-with-visual-studio-code/published-files-output-net7.png" alt-text="Explorer showing published files"::: As the image shows, the published output includes the following files: From 21edb57ce68890dcf625ed46c1e0d6d35ed2c0af Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Fri, 11 Nov 2022 16:21:11 -0800 Subject: [PATCH 6/7] add --use-program-main --- docs/core/tutorials/with-visual-studio-code.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/tutorials/with-visual-studio-code.md b/docs/core/tutorials/with-visual-studio-code.md index 7873f91c4d935..faf6cb0d205d7 100644 --- a/docs/core/tutorials/with-visual-studio-code.md +++ b/docs/core/tutorials/with-visual-studio-code.md @@ -161,7 +161,7 @@ Create a .NET console app project named "HelloWorld". 1. In the **Terminal**, enter the following command: ```dotnetcli - dotnet new console --framework net6.0 + dotnet new console --framework net6.0 --use-program-main ``` The project template creates a simple application that displays "Hello World" in the console window by calling the method in *Program.cs*. From 93c75833c656e9135b0cedadaecf880a9298a849 Mon Sep 17 00:00:00 2001 From: Tom Dykstra Date: Fri, 11 Nov 2022 16:29:46 -0800 Subject: [PATCH 7/7] explanatory text --- docs/core/tutorials/with-visual-studio-code.md | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/docs/core/tutorials/with-visual-studio-code.md b/docs/core/tutorials/with-visual-studio-code.md index faf6cb0d205d7..cd6f32c528ec8 100644 --- a/docs/core/tutorials/with-visual-studio-code.md +++ b/docs/core/tutorials/with-visual-studio-code.md @@ -167,20 +167,13 @@ Create a .NET console app project named "HelloWorld". The project template creates a simple application that displays "Hello World" in the console window by calling the method in *Program.cs*. ```csharp - Console.WriteLine("Hello, World!"); - ``` - -1. Replace the contents of *Program.cs* with the following code: + namespace HelloWorld; - ```csharp - namespace HelloWorld + class Program { - class Program + static void Main(string[] args) { - static void Main(string[] args) - { - Console.WriteLine("Hello World!"); - } + Console.WriteLine("Hello World!"); } } ``` @@ -195,7 +188,7 @@ Create a .NET console app project named "HelloWorld". The code defines a class, `Program`, with a single method, `Main`, that takes a array as an argument. `Main` is the application entry point, the method that's called automatically by the runtime when it launches the application. Any command-line arguments supplied when the application is launched are available in the *args* array. - In the latest version of C#, a new feature named [top-level statements](../../csharp/fundamentals/program-structure/top-level-statements.md) lets you omit the `Program` class and the `Main` method. Most existing C# programs don't use top-level statements, so this tutorial doesn't use this new feature. But it's available in C# 10, and whether you use it in your programs is a matter of style preference. + In the latest version of C#, a new feature named [top-level statements](../../csharp/fundamentals/program-structure/top-level-statements.md) lets you omit the `Program` class and the `Main` method. Most existing C# programs don't use top-level statements, so this tutorial doesn't use this new feature. But it's available in C# 10, and whether you use it in your programs is a matter of style preference. In the `dotnet new` command that you used to create the project, the `--use-program-main` option prevented top-level statements from being used. ## Run the app