From 183c01ce7c7a1382330a2790006a8aac93bcaebd Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Tue, 23 Sep 2025 14:42:54 +0530 Subject: [PATCH 01/14] Updated Getting started Balzor md files --- .../NET/Create-Word-document-in-Blazor.md | 512 ++++++++++-------- 1 file changed, 280 insertions(+), 232 deletions(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index 101e2d396..e1b9630f7 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -1,20 +1,21 @@ --- +layout: post title: Create Word document in Blazor | DocIO | Syncfusion -description: Create Word document without Microsoft Word or interop dependencies in Blazor application using Syncfusion® .NET Word (DocIO) library. +description: Create Word documents without Microsoft Word or interop dependencies in Blazor applications using Syncfusion® .NET Word (DocIO) library. platform: document-processing control: DocIO documentation: UG --- -# Create Word document in Blazor +# Create Word Document in Blazor Syncfusion® Essential® DocIO is a [.NET Core Word library](https://www.syncfusion.com/document-processing/word-framework/net-core/word-library) used to create, read, and edit **Word** documents programmatically without **Microsoft Word** or interop dependencies. Using this library, you can **create a Word document in Blazor**. -To quickly get started with creating a Word document in Blazor, check this video: +To quickly get started with creating a Word document in Blazor, watch this video: {% youtube "https://www.youtube.com/watch?v=yVfDlpewbpU" %} -## Server app +## Server Application {% tabcontents %} @@ -22,20 +23,23 @@ To quickly get started with creating a Word document in Blazor, check this video **Prerequisites:** -* Visual Studio 2022. -* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. +* Visual Studio 2022. +* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. -Step 1: Create a new C# Blazor Server app project. Select Blazor Server App from the template and click the Next button. +Step 1: Create a new C# Blazor Server app project. +Select "Blazor Server App" from the template and click **Next**. ![Create Blazor Server application in Visual Studio](Blazor_Images/Blazor_Create.png) -Step 2: To **create a Word document in Blazor Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) to the Blazor project. +Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. +To **create a Word document in a Blazor Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. ![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) -N> Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, you also have to add "Syncfusion.Licensing" assembly reference and include a license key in your projects. Please refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in your application to use our components. +N> Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) for details on registering Syncfusion® license key in your application to use our components. -Step 3: Create a razor file with name as **DocIO** under **Pages** folder and include the following namespaces in the file. +Step 3: Create a Razor file named `DocIO` in the `Pages` folder. +Include the following namespaces in the file: {% tabs %} {% highlight c# tabtitle="C#" %} @@ -47,24 +51,26 @@ Step 3: Create a razor file with name as **DocIO** under **Pages** folder and in {% endhighlight %} {% endtabs %} -Step 4: Add the following code in **DocIO.razor** file to create a new button. +Step 4: Add a button to `DocIO.razor`. +Include the following code to create a new button that triggers document creation: {% tabs %} {% highlight CSHTML %} -

Syncfusion DocIO library (Essential DocIO)

-

Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in your applications without Microsoft Office dependencies.

+

Syncfusion DocIO Library (Essential DocIO)

+

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in your applications without Microsoft Office dependencies.

{% endhighlight %} {% endtabs %} -Step 5: Add the following code in **DocIO.razor** file to create and download the **Word document**. +Step 5: Implement `CreateWord` method in `DocIO.razor`. +Add the following code to create and download the Word document: {% tabs %} {% highlight c# tabtitle="C#" %} @code { MemoryStream documentStream; /// - /// Create and download the Word document + /// Creates and downloads the Word document. /// protected async void CreateWord() { @@ -75,7 +81,8 @@ Step 5: Add the following code in **DocIO.razor** file to create and download th {% endhighlight %} {% endtabs %} -Step 6: Create a new cs file with name as **WordService** under Data folder and include the following namespaces in the file. +Step 6: Create `WordService.cs` in the `Data` folder. +Include the following namespaces in the file: {% tabs %} @@ -87,7 +94,8 @@ using System.IO; {% endtabs %} -Step 7: Create a new MemoryStream method with name as **CreateWord** in **WordService** class and include the following code snippet to **create a simple Word document in Blazor** Server app. +Step 7: Implement the `CreateWord` method in `WordService.cs`. +Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Server app: {% tabs %} @@ -95,16 +103,16 @@ Step 7: Create a new MemoryStream method with name as **CreateWord** in **WordSe public MemoryStream CreateWord() { - //Creating a new document + // Creating a new Word document WordDocument document = new WordDocument(); - //Adding a new section to the document + // Adding a new section to the document WSection section = document.AddSection() as WSection; - //Set Margin of the section + // Set Margin of the section section.PageSetup.Margins.All = 72; - //Set page size of the section + // Set page size of the section section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); - //Create Paragraph styles + // Create Paragraph styles WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; style.CharacterFormat.FontName = "Calibri"; style.CharacterFormat.FontSize = 11f; @@ -131,7 +139,7 @@ public MemoryStream CreateWord() textRange.CharacterFormat.FontName = "Calibri"; textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - //Appends paragraph + // Appends paragraph paragraph = section.AddParagraph(); paragraph.ApplyStyle("Heading 1"); paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; @@ -139,24 +147,24 @@ public MemoryStream CreateWord() textRange.CharacterFormat.FontSize = 18f; textRange.CharacterFormat.FontName = "Calibri"; - //Appends paragraph + // Appends paragraph paragraph = section.AddParagraph(); paragraph.ParagraphFormat.FirstLineIndent = 36; paragraph.BreakCharacterFormat.FontSize = 12f; textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; textRange.CharacterFormat.FontSize = 12f; - //Appends paragraph + // Appends paragraph paragraph = section.AddParagraph(); paragraph.ParagraphFormat.FirstLineIndent = 36; paragraph.BreakCharacterFormat.FontSize = 12f; textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; textRange.CharacterFormat.FontSize = 12f; - //Saves the Word document to MemoryStream + // Saves the Word document to MemoryStream MemoryStream stream = new MemoryStream(); document.Save(stream, FormatType.Docx); - //Closes the Word document + // Closes the Word document document.Close(); stream.Position = 0; return stream; @@ -165,7 +173,8 @@ public MemoryStream CreateWord() {% endtabs %} -Step 8: Add the following line to the Program.cs file to register the WordService as a scoped service in your Blazor application. +Step 8: Register `WordService` in `Program.cs`. +Add the following line to the `Program.cs` file to register `WordService` as a scoped service in your Blazor application. {% tabs %} {% highlight c# tabtitle="C#" %} @@ -176,7 +185,8 @@ builder.Services.AddSingleton(); {% endtabs %} -Step 9: Create a new class file in the project, with name as FileUtils and add the following code to invoke the JavaScript action to download the file in the browser. +Step 9: Create `FileUtils.cs` for JavaScript interoperability. +Create a new class file named `FileUtils` in the project and add the following code to invoke the JavaScript action for file download in the browser. {% tabs %} @@ -194,7 +204,8 @@ public static class FileUtils {% endtabs %} -Step 10: Add the following JavaScript function in the _Host.cshtml in the Pages folder. +Step 10: Add JavaScript function to `_Host.cshtml`. +Add the following JavaScript function in the `_Host.cshtml` file located in the `Pages` folder. {% tabs %} @@ -203,7 +214,7 @@ Step 10: Add the following JavaScript function in the _Host.cshtml in the Pages + +{% endhighlight %} + +{% endtabs %} + +Step 11: Add navigation link. +Add the following code snippet to the Navigation menu's Razor file in the `Shared` folder. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 12: Build the project. + +Click on **Build** → **Build Solution** or press Ctrl+Shift+B to build the project. + +Step 13: Run the project. + +Click the Start button (green arrow) or press F5 to run the application. + +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Server-app). + +Upon executing the program, the **Word document** will be generated as follows: + +![Blazor Web app output Word document](Blazor_Images/Blazor_Output.png) + +Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. + ## Server Application {% tabcontents %} @@ -80,7 +341,7 @@ Add the following code to create and download the Word document: {% endhighlight %} {% endtabs %} -Step 6: Create `WordService.cs` in the `Data` folder. +Step 6: Create a new cs file `WordService.cs` in the `Data` folder. Include the following namespaces in the file: {% tabs %} @@ -342,7 +603,7 @@ Add the following code to create and download the Word document: {% endhighlight %} {% endtabs %} -Step 6: Create `WordService.cs` in the `Data` folder. +Step 6: Create a new cs file `WordService.cs` in the `Data` folder. Include the following namespaces in the file: {% tabs %} @@ -617,7 +878,7 @@ Add the following code to create and download the Word document: {% endhighlight %} {% endtabs %} -Step 6: Create `WordService.cs` in the `Data` folder. +Step 6: Create a new cs file `WordService.cs` in the `Data` folder. Include the following namespaces in the file: {% tabs %} From ddbd5ad8921ef08516407c067bbf68585f3eaadf Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Thu, 25 Sep 2025 21:03:38 +0530 Subject: [PATCH 04/14] Remove server app content --- .../NET/Create-Word-document-in-Blazor.md | 803 +----------------- 1 file changed, 3 insertions(+), 800 deletions(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index af1658006..e6dda23b2 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -14,7 +14,7 @@ To quickly get started with creating a Word document in Blazor, watch this video {% youtube "https://www.youtube.com/watch?v=yVfDlpewbpU" %} -## Web application +## Web Server Application **Prerequisites:** @@ -35,7 +35,7 @@ Step 1: Create a new C# Blazor Web app project. ![Select the framework in Blazor Web Server Side app in Visual Studio](Blazor_Images/Blazor_image_Server_Web_Additional_Information.png) Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor Web app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. +To **create a Word document in a Blazor Web Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. ![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) @@ -271,807 +271,10 @@ A complete working sample is available on [GitHub](https://github.com/Syncfusion Upon executing the program, the **Word document** will be generated as follows: -![Blazor Web app output Word document](Blazor_Images/Blazor_Output.png) +![Blazor Web Server app output Word document](Blazor_Images/Blazor_Output.png) Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. -## Server Application - -{% tabcontents %} - -{% tabcontent Visual Studio %} - -**Prerequisites:** - -* Visual Studio 2022. -* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. - -Step 1: Create a new C# Blazor Server app project. -Select "Blazor Server App" from the template and click **Next**. - -![Create Blazor Server application in Visual Studio](Blazor_Images/Blazor_Create.png) - -Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. - -![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) - -N> Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) for details on registering Syncfusion® license key in your application to use our components. - -Step 3: Create a Razor file named `DocIO` in the `Pages` folder. -Include the following namespaces in the file: - -{% tabs %} -{% highlight c# tabtitle="C#" %} -@page "/DocIO" -@using System.IO; -@using ServerSideApplication; -@inject ServerSideApplication.Data.WordService service -@inject Microsoft.JSInterop.IJSRuntime JS -{% endhighlight %} -{% endtabs %} - -Step 4: Add a button to `DocIO.razor`. -Include the following code to create a new button that triggers document creation: - -{% tabs %} -{% highlight CSHTML %} -

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in your applications without Microsoft Office dependencies.

- -{% endhighlight %} -{% endtabs %} - -Step 5: Implement `CreateWord` method in `DocIO.razor`. -Add the following code to create and download the Word document: - -{% tabs %} -{% highlight c# tabtitle="C#" %} -@code { - MemoryStream documentStream; - /// - /// Creates and downloads the Word document. - /// - protected async void CreateWord() - { - documentStream = service.CreateWord(); - await JS.SaveAs("Sample.docx", documentStream.ToArray()); - } -} -{% endhighlight %} -{% endtabs %} - -Step 6: Create a new cs file `WordService.cs` in the `Data` folder. -Include the following namespaces in the file: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.IO; -{% endhighlight %} - -{% endtabs %} - -Step 7: Implement the `CreateWord` method in `WordService.cs`. -Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Server app: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public MemoryStream CreateWord() -{ - // Creating a new Word document - WordDocument document = new WordDocument(); - // Adding a new section to the document - WSection section = document.AddSection() as WSection; - // Set Margin of the section - section.PageSetup.Margins.All = 72; - // Set page size of the section - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); - - // Create Paragraph styles - WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; - style.CharacterFormat.FontName = "Calibri"; - style.CharacterFormat.FontSize = 11f; - style.ParagraphFormat.BeforeSpacing = 0; - style.ParagraphFormat.AfterSpacing = 8; - style.ParagraphFormat.LineSpacing = 13.8f; - - style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; - style.ApplyBaseStyle("Normal"); - style.CharacterFormat.FontName = "Calibri Light"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - style.ParagraphFormat.BeforeSpacing = 12; - style.ParagraphFormat.AfterSpacing = 0; - style.ParagraphFormat.Keep = true; - style.ParagraphFormat.KeepFollow = true; - style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - - IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); - paragraph.ApplyStyle("Normal"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; - WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 18f; - textRange.CharacterFormat.FontName = "Calibri"; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Saves the Word document to MemoryStream - MemoryStream stream = new MemoryStream(); - document.Save(stream, FormatType.Docx); - // Closes the Word document - document.Close(); - stream.Position = 0; - return stream; -} -{% endhighlight %} - -{% endtabs %} - -Step 8: Register `WordService` in `Program.cs`. -Add the following line to the `Program.cs` file to register `WordService` as a scoped service in your Blazor application. - -{% tabs %} -{% highlight c# tabtitle="C#" %} - -builder.Services.AddSingleton(); - -{% endhighlight %} -{% endtabs %} - - -Step 9: Create `FileUtils.cs` for JavaScript interoperability. -Create a new class file named `FileUtils` in the project and add the following code to invoke the JavaScript action for file download in the browser. - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public static class FileUtils -{ - public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) - => js.InvokeAsync( - "saveAsFile", - filename, - Convert.ToBase64String(data)); -} -{% endhighlight %} - -{% endtabs %} - -Step 10: Add JavaScript function to `_Host.cshtml`. -Add the following JavaScript function in the `_Host.cshtml` file located in the `Pages` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 11: Add navigation link. -Add the following code snippet to the Navigation menu's Razor file in the `Shared` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 12: Build the project. - -Click on **Build** → **Build Solution** or press Ctrl+Shift+B to build the project. - -Step 13: Run the project. - -Click the Start button (green arrow) or press F5 to run the application. - -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Server-app). - -Upon executing the program, the **Word document** will be generated as follows: - -![Blazor Server app output Word document](Blazor_Images/Blazor_Output.png) - -{% endtabcontent %} - -{% tabcontent Visual Studio Code %} - -**Prerequisites:** - -* Visual Studio Code. -* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. -* Open Visual Studio Code and install the [C# for Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) from the Extensions Marketplace. - - -Step 1: Create a new C# Blazor Server app project. -* Open the command palette by pressing Ctrl+Shift+P and type **.NET:New Project**. -* Choose the **Blazor Server App** template. - -![Choose Blazor Server app from template](Blazor_Images/Blazor-server-app-template.png) - -* Select the project location, type the project name, and press Enter. -* Then choose **Create project**. - -Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. -* Press Ctrl + ` (back-tick) to open the integrated terminal in Visual Studio Code. -* Ensure you are in the project root directory where your `.csproj` file is located. -* Run the command `dotnet add package Syncfusion.DocIO.Net.Core` to install the NuGet package. - -![Add Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Command-to-add-NuGet-package-for-Server.png) - - -N> Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) for details on registering Syncfusion® license key in your application to use our components. - -Step 3: Create a Razor file named `DocIO` in the `Pages` folder. -Include the following namespaces in the file. - -{% tabs %} -{% highlight c# tabtitle="C#" %} -@page "/DocIO" -@using System.IO; -@using ServerSideApplication; -@inject ServerSideApplication.Data.WordService service -@inject Microsoft.JSInterop.IJSRuntime JS -{% endhighlight %} -{% endtabs %} - -Step 4: Add a button to `DocIO.razor`. -Include the following code to create a new button that triggers document creation: - -{% tabs %} -{% highlight CSHTML %} -

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in your applications without Microsoft Office dependencies.

- -{% endhighlight %} -{% endtabs %} - -Step 5: Implement `CreateWord` method in `DocIO.razor`. -Add the following code to create and download the Word document: - -{% tabs %} -{% highlight c# tabtitle="C#" %} -@code { - MemoryStream documentStream; - /// - /// Creates and downloads the Word document. - /// - protected async void CreateWord() - { - documentStream = service.CreateWord(); - await JS.SaveAs("Sample.docx", documentStream.ToArray()); - } -} -{% endhighlight %} -{% endtabs %} - -Step 6: Create a new cs file `WordService.cs` in the `Data` folder. -Include the following namespaces in the file: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.IO; -{% endhighlight %} - -{% endtabs %} - -Step 7: Implement the `CreateWord` method in `WordService.cs`. -Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Server app: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public MemoryStream CreateWord() -{ - // Creating a new Word document - WordDocument document = new WordDocument(); - // Adding a new section to the document - WSection section = document.AddSection() as WSection; - // Set Margin of the section - section.PageSetup.Margins.All = 72; - // Set page size of the section - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); - - // Create Paragraph styles - WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; - style.CharacterFormat.FontName = "Calibri"; - style.CharacterFormat.FontSize = 11f; - style.ParagraphFormat.BeforeSpacing = 0; - style.ParagraphFormat.AfterSpacing = 8; - style.ParagraphFormat.LineSpacing = 13.8f; - - style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; - style.ApplyBaseStyle("Normal"); - style.CharacterFormat.FontName = "Calibri Light"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - style.ParagraphFormat.BeforeSpacing = 12; - style.ParagraphFormat.AfterSpacing = 0; - style.ParagraphFormat.Keep = true; - style.ParagraphFormat.KeepFollow = true; - style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - - IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); - paragraph.ApplyStyle("Normal"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; - WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 18f; - textRange.CharacterFormat.FontName = "Calibri"; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Saves the Word document to MemoryStream - MemoryStream stream = new MemoryStream(); - document.Save(stream, FormatType.Docx); - // Closes the Word document - document.Close(); - stream.Position = 0; - return stream; -} -{% endhighlight %} - -{% endtabs %} - -Step 8: Register `WordService` in `Program.cs`. -Add the following line to the `Program.cs` file to register `WordService` as a scoped service in your Blazor application. - -{% tabs %} -{% highlight c# tabtitle="C#" %} - -builder.Services.AddSingleton(); - -{% endhighlight %} -{% endtabs %} - - -Step 9: Create `FileUtils.cs` for JavaScript interoperability. -Create a new class file named `FileUtils` in the project and add the following code to invoke the JavaScript action for file download in the browser. - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public static class FileUtils -{ - public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) - => js.InvokeAsync( - "saveAsFile", - filename, - Convert.ToBase64String(data)); -} -{% endhighlight %} - -{% endtabs %} - -Step 10: Add JavaScript function to `_Host.cshtml`. -Add the following JavaScript function in the `_Host.cshtml` file located in the `Pages` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 11: Add navigation link. -Add the following code snippet to the Navigation menu's Razor file in the `Shared` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 12: Build the project. - -Run the following command in the terminal to build the project: - -``` -dotnet build -``` - -Step 13: Run the project. - -Run the following command in the terminal to run the project: - -``` -dotnet run -``` - -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Server-app). - -Upon executing the program, the **Word document** will be generated as follows: - -![Blazor Server app output Word document](Blazor_Images/Blazor_Output.png) - -{% endtabcontent %} - -{% tabcontent JetBrains Rider %} - -**Prerequisites:** - -* JetBrains Rider. -* Install .NET 8 SDK or later. - -Step 1: Open JetBrains Rider and create a new Blazor Server app project. -* Launch JetBrains Rider. -* Click **New Solution** on the welcome screen. - -![Launch JetBrains Rider](Blazor_Images/Launch-JetBrains-Rider.png) - -* In the New Solution dialog, select **Web** as the Project Type. -* Select the target framework (e.g., .NET 8.0, .NET 9.0). -* Choose the **Blazor Web App** template. -* Enter a project name and specify the location. -* Click **Create**. - -![Creating a new .NET Core console application in JetBrains Rider](Blazor_Images/Create-Blazor-Server-application.png) - -Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package from [NuGet.org](https://www.nuget.org/). -* Click the NuGet icon in the Rider toolbar and type [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) in the search bar. -* Ensure that "nuget.org" is selected as the package source. -* Select the latest `Syncfusion.DocIO.Net.Core` NuGet package from the list. -* Click the **+ (Add)** button to add the package. - -![Select the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Select-Syncfusion.DocIO.Net.Core-NuGet.png) - -* Click the **Install** button to complete the installation. - -![Install the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Install-Syncfusion.DocIO.Net.Core-NuGet.png) - -N> Starting with v16.2.0.x, if you reference Syncfusion assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion license key in your application to use our components. - -Step 3: Create a Razor file named `DocIO` in the `Pages` folder. -Include the following namespaces in the file: - -{% tabs %} -{% highlight c# tabtitle="C#" %} -@page "/DocIO" -@using System.IO; -@using ServerSideApplication; -@inject ServerSideApplication.Data.WordService service -@inject Microsoft.JSInterop.IJSRuntime JS -{% endhighlight %} -{% endtabs %} - -Step 4: Add a button to `DocIO.razor`. -Include the following code to create a new button that triggers document creation: - -{% tabs %} -{% highlight CSHTML %} -

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in your applications without Microsoft Office dependencies.

- -{% endhighlight %} -{% endtabs %} -Step 5: Implement `CreateWord` method in `DocIO.razor`. -Add the following code to create and download the Word document: - -{% tabs %} -{% highlight c# tabtitle="C#" %} -@code { - MemoryStream documentStream; - /// - /// Create and download the Word document. - /// - protected async void CreateWord() - { - documentStream = service.CreateWord(); - await JS.SaveAs("Sample.docx", documentStream.ToArray()); - } -} -{% endhighlight %} -{% endtabs %} - -Step 6: Create a new cs file `WordService.cs` in the `Data` folder. -Include the following namespaces in the file: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.IO; -{% endhighlight %} - -{% endtabs %} - -Step 7: Implement the `CreateWord` method in `WordService.cs`. -Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Server app: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public MemoryStream CreateWord() -{ - // Creating a new Word document - WordDocument document = new WordDocument(); - // Adding a new section to the document - WSection section = document.AddSection() as WSection; - // Set Margin of the section - section.PageSetup.Margins.All = 72; - // Set page size of the section - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); - - // Create Paragraph styles - WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; - style.CharacterFormat.FontName = "Calibri"; - style.CharacterFormat.FontSize = 11f; - style.ParagraphFormat.BeforeSpacing = 0; - style.ParagraphFormat.AfterSpacing = 8; - style.ParagraphFormat.LineSpacing = 13.8f; - - style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; - style.ApplyBaseStyle("Normal"); - style.CharacterFormat.FontName = "Calibri Light"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - style.ParagraphFormat.BeforeSpacing = 12; - style.ParagraphFormat.AfterSpacing = 0; - style.ParagraphFormat.Keep = true; - style.ParagraphFormat.KeepFollow = true; - style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - - IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); - paragraph.ApplyStyle("Normal"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; - WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 18f; - textRange.CharacterFormat.FontName = "Calibri"; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Saves the Word document to MemoryStream - MemoryStream stream = new MemoryStream(); - document.Save(stream, FormatType.Docx); - // Closes the Word document - document.Close(); - stream.Position = 0; - return stream; -} -{% endhighlight %} - -{% endtabs %} - -Step 8: Register `WordService` in `Program.cs`. -Add the following line to the `Program.cs` file to register `WordService` as a scoped service in your Blazor application. - -{% tabs %} -{% highlight c# tabtitle="C#" %} - -builder.Services.AddSingleton(); - -{% endhighlight %} -{% endtabs %} - - -Step 9: Create `FileUtils.cs` for JavaScript interoperability. -Create a new class file named `FileUtils` in the project and add the following code to invoke the JavaScript action for file download in the browser. - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public static class FileUtils -{ - public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) - => js.InvokeAsync( - "saveAsFile", - filename, - Convert.ToBase64String(data)); -} -{% endhighlight %} - -{% endtabs %} - -Step 10: Add JavaScript function to `_Host.cshtml`. -Add the following JavaScript function in the `_Host.cshtml` file located in the `Pages` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 11: Add navigation link. -Add the following code snippet to the Navigation menu's Razor file in the `Shared` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 12: Build the project. - -Click the **Build** button in the toolbar or press Ctrl+Shift+B to build the project. - -Step 13: Run the project. - -Click the **Run** button (green arrow) in the toolbar or press F5 to run the application. - -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Server-app). - -Upon executing the program, the **Word document** will be generated as follows: - -![Blazor Server app output Word document](Blazor_Images/Blazor_Output.png) - -{% endtabcontent %} - -{% endtabcontents %} - -Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion Word library (DocIO) features. - ## WASM Application {% tabcontents %} From 9171a900102b59c12d686e35e0233b6585aa6d74 Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Fri, 26 Sep 2025 14:38:59 +0530 Subject: [PATCH 05/14] Update Blazor Content --- .../Blazor_Images/Blazor_WASM_Standalone.png | Bin 0 -> 96244 bytes .../NET/Create-Word-document-in-Blazor.md | 524 +----------------- 2 files changed, 22 insertions(+), 502 deletions(-) create mode 100644 Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor_WASM_Standalone.png diff --git a/Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor_WASM_Standalone.png b/Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor_WASM_Standalone.png new file mode 100644 index 0000000000000000000000000000000000000000..244de2a1b70c8e8d3d512ec4da9bb048102664e4 GIT binary patch literal 96244 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 y|2Qrvc%@&U~VfUNx=Yy21T6 zx*RZ&ULfFEvV;q`VbvUF9uN;~JWFyBPCZGSFG`uvIe!0rutaw8fdd$Eg)a3QGpD?qFf_mPu9 zf%bGX*d>||gD`%;`hMz%mL@N2^E+{QiKoS9-yC#W&T7%oycxLQX4m5Whnm~-D;r5~ zez@QHGts_g%WINAW@1C_@OkexOOTn$&A*t2HiR12~0>DP}-6n$8h1_#yz1op3Am&nKf+2FS zaw)JCx!&v?5J?xG9d8apyELX2| zF~?NohY%NgZs_x$X zh6xh;>P`ua6k@y_E%tXdZQY#`D1JaJtzQES6VgCH3?+BA#kq)E3Rd*sBsi>c$0*

*Ls}SzMV0|wG$dd#+4h3!;bXIuS<#bnu)*K%)N!F{7O1~@TZC&Y2)iCCw%e={&xOJnsa9DqN)i!n1Wm+4!U_lA(CZzvzc|L=ew$72?Vf;*v$+J97 zGBcalgEwDfF?80yP^5W<^z?|=pqtwS$^@z)p$_Rl%mP!3VUg!x*QR%q3ox`$a6vIY zd8T!sn_N6YsMd`zo?qw|nFNE$T8zpI!1(1Ij2(fX{+wRxxV{QgZ87BHI^OwSit$O~ zVi|ntqn7JocO%3P>(?qB-nynQxlQMNs#6|z&kQ+qlPnsvhIR|Ds#)~Dy(6w-X~CmZ zUJF6jhT2X)Z~(36n+yw|DSsa90T2dJu-*1mfHpLkNpo&S-yZl0b#Mja8kTN?Za!Y2 z%{660WH_)uRx5!`v{{9oA4&csb_$q!pJRvxBU5lxr(nY4`gaI!ZBeAoOek`bIdVel zY(kgdAv>#9*prd6b*40D13ow>nA{JeOZM~aJPv)F!1qT$@Z-IyD})Jn+~MsdzY3k@ zd(Oe#7by`pZ$WjSg_YzGMDe!5@z3MCs9mkPxB)UK$7L%xgHLnq1S!)PoRtq%g~I1V z2(#9?@qh%34MAaaFCI{?m9Xcx(DWM1$X#M>esm1o!kI19p3pN}LugAdG#E%=s*flr zTOPUaSPT~)y}MR50o?jbN~WHMkD}GbR+l2m)8kw`8a3~dCa6Qf8&7$^cK-PQA8WQg zRFpvq`AX?SP7VwsdEf2jz}4C*>}DT5dS^Sv)Iv(uNYXvgf@$qxIF>8EeDs zw|9SVGPt=iYNl4#yhfL*Ena{oD2)8<^z`Y-?xZ%FW~>jZ#o>ncQnw4`#^Q0ii$e`W z=TLLhkPKrSftc{uN({(TpMHL!%XW6dGcJKzAwPW*hxXlUH3o}U2@+r4O;am>u+u3# z*4UQqFlI}TZ@S|tfx9oVyQV;h!V$od%yw7&LcV`oDUrgz-dABqrg;te6VUf&1DfvO z6C8^LvlNb`)TTvYd}@Q?+J&+ZUYW5f$?-xn@ivDYnn)GhN1`YsGmKI?ONoS+@;jGK z@$Th*lCR&;Qk#tJR7Y9JnW^hcs-$IBdOx_q&u zQJGaCU-rxjt2SgW585wB^FG zWdmBApy;@*yx!Qh4F<^c8}x;42q5R5B~4bG-ssZx8Zqk&W^0=w`=LwPrAOjvc>l$5DK7cUL60*orhwZ!?e zZoB!T0TS+6c^ZI^l`j*ggw$#N@sUyKm$v6ZaW2asf(C8P{MEi*0Ctw1Q>lmnU`{e) zFgv8@QrIeIUO)Cs4tU3n`Nlwse5{v=6gPd_OnWHg^%lh^htH~qZGLD{@g6t;8}9Vf zDjK`~-Mh&#kpwpx0+u- z%Y(4@#a3*De$)iw+bZ6ueuI%+`q9ieFHA#l;pLZh#;C${q3hUs_ZdRuo?*|idWI}U zDi(A33cycplZ_H)Mp*C&mS-2UcehKlC%`XQT567T(?};~vtKa%WR*|PCz_8v`&<^p z*=yo$FEAK0bk{@!(FW<0OA|+YpDw&mQV~6Xk`J9c?kuitk;RT1Y*|Y+29`ryYuq=k zz#hI4T#t09QiEQ_y6k1XomDPARKWaF_7DlfKiwq0Dv#pPngp8Ssm6e|T6d zIta7uxVyL{Y_n!-5-}myp2hU(^S!>FoHQRAzuoE7(RL7Ljle}9nJJ)1zlf?`?UfwX zS{`n_-M7lC5)z`MPCf>gtE5h^8;FH{$qk&CjL2%Gec0QfvZxgbICk+_f4zs^QxO`Eo zn-d5|EZeC!4x=@BMy6Wfz3fz4*GH6@P^8cejd5wsBnoQrWtf8g+3IY;$+Q%MxmL4+ zyVEY|%J;LPt>!aUn_yfyWk61Z@r2-f_MkhQQd#MYs}J0YH(iKCUGfADzlBTK0j92w zndG$PR|fr5^=1*N%lDNX%@TL2!j>S-;-Xh$h&OJw+P}La%UA&OpkE0@GL%(LDN0hYn z(ilr;E>HQORCTf>KJgSrb1zixlj=%yE_tzpr6x>-+M@g%t^%_Kn=^R)oN_z3`9}Ag z!;;f+p^Y)WV0!^tTie&%L1zjf0h%`bJKnKIZFm{gg*+-hfBmfW4%IJX|BcvZr_)t7 zavW@{3JyENELIx$Qs|iod5qrH6s4aZ9TNRLgMpJZqr~$vLVNZ^@S7Q)JUIvr^*yPM5&E1atIg#e|(5VbU&6XvuoEU=SBD5jP&WwO`JD&VNJ3D=@*o zZ7H&T#aY65t(8(9JOJ1xRWmHx9Kn?b=--6 zqHqv!7SY(ah6FZTc=mDke3Vc(k*nL=U-I6k1x2*c8L~3cw zrE~5!f6f6ebFc1uCNAcYM%Ibfl_}323THK(cSkF{%_7ZSRNTOQj0$}k%L}fN-c<7a z^lEVZhb{NGV$7lJqAwSVpS`h&y}jxMsrO&-D>%I)xs|Ci zwbZ`1xMRPWuMW(SKIcvy>IIj%y*#-cHQcHu;pG{966oI2{=vbnEz4Sr<1v$Wy z|C-W`n}&6~mt33~ObuOjnXX1_#4}7ja)TQDj4%E;s+_p!l@;EUyw|q3(2}3`wGsuS zMM(92f6emakeyic0i^oI*8u@c-IGx2Ni!?R92t=)c=_g)>Mn&fB~o;jPvA^5XprHuiZy$d z-!8s?ZT&~P!ousEe9ft|Tu;t;#ETan5(7)$EbrvCG@6AMomdL0M>!<&+6-e6(S@Dw z(^s*@5?KX#!o>qbYy}3XR&en34@EZ|BoYP!=o+ZZ;UpR8qU(aGxE!;y z1Mu2Q65$@rIp5XcsUC9U};jPQY?G%~xceW-fc6QI7+(Dt1vj!?}vNlEWQMSkb< zR4NNe{1%>FOfU|Kofm9NyUDzVZ8d()KH*-p%rtAN;_W?)a35B8%!GK4{v1M`VKqOv z?+HlH>p;PK7I%NcQDsg4zCxwMHZ^0?@}_zIjVX`U%*FAqkD&I<+DVldz3AOiJ8sd^ z#pN&O+q@_ygis7tlL=Ic4;|>bD;yMdQZ8!aSQh*92_}#S1Uu*`wD7VQOby^6;D@aP z;8d60#>#5?SCxKDG^%RoI?`6bOhh_B@X=s#1b-Rx^xz#ly4-uf=}RSU7C7e(q9AHx zeP<*|WkoG&*|^y%tT!mCs5aIND@ig?_pSd9h)AbxQ?BslY`*v!*EFH6a~Bj3bAY~r zijS8aGIJ^>!r1mG!?wz{(1dI66)htqA5S2E9(5jN2fUhkjwjE-00n$h;)s}5CGJ}+ z%@+i-4jR`$nxr!y1jH!BX!zC2lCQ;$7P#1*tbOyY(kydb^j(ick?BU{Bq?C@2{)-n zT+FE;Dy04~(biBD?|^H|F6svSN?XveVB-|5fL4ter}n}$3?-%F--bZ^0OfXZ>p17@ zqh6kjai548eI%u43PF0w?$Y5p!}W<>=BTOuBhQE{GkmK$> zZSWhr?5>QdCOPLD%fD>MtSVrZomP*^7_F$^a;ddxY(OPE?6mb8JHfIi>1IV)6eVU2J(u!G+;@mWFKMBjjo~s$fjUa;WpE(xpjG9lu{n4|fk&9CgkX2Kuu1 z)7?3OvJ0e6LGHtLsV(C{ef8krad`UP%0#;2oHuXVnt^lRBQ0jh!PAeeHp4V*N%~$% zU+1<9<|h4%Jv5v*m#?50RopoGFH~I+Q3r^Z7_dx3bb9Yz`kntNyX@&RO+=ng`chca z#R1%Zm%03V(KQK+qRv4RIamW7@)#t02zG3?28a#bgBFR^hxTBsk5~2YmI=V2tFZp09j%A`hZ#5R&LOoN>Mfg&wonoUCI*}wkd_*`Wr)lohrq$Q#ZZ(A!lfO*?CIAlm~Ey>VO9zlY{v2UeF`lS+_q(M^r zf~-o68_avLM!*{y=3@WrUzqZfS9y!kHRs0+H*h8>;k(9rd2GP;0KoyUq%K+pb|_-D zZ8~TWDykPF*1OdmG8kJ_y0q&2QQnl0P>A;|Oo{Hxd|G#U!~?3v4jJQEyNbfDc}QAp z4iNm{S?yV6?U_HttR!vOkMScQPj7VkLh_VovGhsNIORTzrlTa8yi4VvZ3jVG6WCvY~lTituNjakt} z?(ewG-`&sgq`3Z8jnA|)r)M>Se=Y^Ln`eE@s@mcwRHdcGHLC3N>my5mXhF@eG=o7$ zkt2OH?D&=fc~?lNsj6sE#gkeSBJ49El<2k41*#i|-PFq#L}^=2xBF6m)+&s8Ge#E} zEp&{paid1usbgX-k2aEouR~&5&L6_nBsrx15A;Q72TvLOw#x`3>u*i|2ewrfZC(RZ*upeYW zSG>y_=Ya(1l<(!S=f+CxZpF(!U%#tYGmF&g#xI*Rt@)$sK5cF{Xux)L%@RLWd~HYI z%u^ZP0d`(M%Y9fM&Yd9(*=JIhoag&w?(eo5ypfCIJ+_J--h|LF>#ecsDEgSX()0gE311K4q7dMuiOP`((B0CK8k# z)?R@Uh7LK17%`)myNVfg%Sl!Hp?AisgW{vcF5`3_0G7!9|F%<3h!XVg^n>?CRyK`r zt6gY)q+}9;>mX2=1Plu2wz=OuXDfGpdr4E-;^`=Ky@chw27+b*9Q(&XSeZCwJ2^l6 zD>FD1MOX3Nqq>Z?RgsUIo-2GnFa+04DYMx43G0HO1a+XcWxsDkr|Ph>f*Iy>`%>4E z!#3qO1LYe#T7q_vn7S**tWsEVstTBb8s}7$7las?j=ZRKyg~NCXlngnAJZ!EWvtdc z4Sv5orbO3cpl8mK$J3PMGWG87p3q`;iVJU4W7j{_0zF#99HuJU40h2aeecS}VMV4b zYqD9P(=sgY5v2;Pk|cGBF(-R!8?Ge)TAZ>4S?GG|w$9WMJ9!!9`9F570Y5S)ob}0x z#QBf9h?%Kf!D?&N?@oXiqn@($1^WD2SN%T>j13A2IBB`qWrxAh>b^~vw1X>;B@xi~ ztN6%>7LW3Gl*ZAOEcMHi&;8F*GYj4&8Fcx6b@f9d8XUwSvFh~*K=}4NW}94v*8t^I zA@&%x8#jJhb70Ds4WsJ%s)UgW={@PuwvfhwHWq*tk$51~2S1B_wNL{j@ zFTvx!EuMT=6_ZBX2w|19LuMKNC^w)1Jglq@8l#=Hn~i4M_zchPix&w?cqRYkH#pe% zwPTqT;6?3}1m10f*WHg#!Iah}Ja*|PlO)QuEJ=E)ry?}U-&d%f75S1)o*PVNt=VoMz+LI zLCo!Zl`ER^I)?ZJsKbFo8Ole_$;*m>JZehXmpe4y@6JAcgl2Uvg0po7C+_c-rA~2( zxG4^ugLtWcDok_vm`A6C zTJN!Q@R*%f+^PswZ412C9x@xfy@L#=L$?lCdIS_G-vXm;Oc<^S#y$^5` zW#49vS>M2~yxYEZ%YF%b!%EBXPIcUgqt(ql^DSZ1^N|Q`JX9j8T6HsgF2qP<-Y4-w@8`< z3ugsK8xWw`$4j*XKv+CS#UUdZmO9PaK{A=jD{r1~Zb zztZlbs!dyI5hkKg6tV$POee*T)M=~EYT(E}08E{|x>x>Yi36hX-Uu5sEobQf1#u?-MxZ|u}jv?>Ls&mcttob}M@7#aTKmh@i_Wz>Z zvE%H;Ub>gkPXboY4N~<>chP9ogJ+dd=K-_ z5~aSx6fC?cGcckU`nvZ&7Fn|KIu#yOOTyf<2fA;0*0C0^a|6;dBi22RtiNj$_}zEZ ze=tX}W@s=NLye=hYLMv>o4zFdtIT0*e`1XbvIDbDx!(gii^-6cPX_5>stuFH8C8-4 zNdk2qRuyH_V&`DLdluU*W2QH%o~>SiYsw!p$VHrnv(mg}w8ZYl`{{$F^OVuGAe<-m zO~s9Url~?nmf>V^5C4(Eig-##IJ_Rg*$*0)KKv{-Db3y;8JGmOH+#}FeE}5; zj}kOTi{vpP=T2+(^(Cu3zQ5}6d{*p}th9p~Y@jfoHa%;8U2G)Zh$A}~)NutoIW6cU zc{(e?R)e~pqy*WUt<(;V>sqTMshAOVBz#Q^B(OMTr6R&0)~8v%csP-KfxQd_!BF}>ODpypt#41OjT-epci-y@ zV>*@=DjG(b2@MO@F;?c@%kXs6^?iStG5q1JS7^9Ty|OKJF3*b7mhDe|dOZ&{yi1N^ zcp5$cc~NhQp9tQ2V()#@YJS1Dia5Nh*2gY=qq3FPZy&TcPV)CD;GM07D`(&H>ij!< zq;8JC$gY6gE44f#KJ`Nj4Sjbw@KkiIL8zj5EyxaI=|Wy#>$pNR6}jjja&%0GWS}i@ zWM9QGzs(4`5Nfr$CFg;syJz5D}BIqWXyE3^A%Qpo2(=kmkX*2ZIXb#7fL#13K1vyYP0b0G)}Nd;8S?bLv?Jp^!eN{#wcV%gNmEu}E|B=(dcFu2*Iz zu=!r64YzQpL0_vA%@@a79R4T?ePGQW&Oq=|B%_Y@rt}tHji}W5G-|*#lvaP(u=0AI z3e&F9QVzdu@z_Jpulr+Yt5OW*x!BZ<)(7Dq3lB<;KLcK%>2BqDMbTaX$NhC+jYWB) zgqWYtK5V>6>E{>jI?Z%6{Q{A%Fx$M{()5^gw?Icu7;&LuSlMawIZDel>U+v$$C^M| z2PiFVgn6_7@5j^NAy|PzPGLcK?O_)!!+^hTpT)IkoS%QzKSDg4YD4a*`C^%60kaM z(NMnLGU`7p-7^~O7qiKu-`n%5E%rh}YXujy>QT7;L0q%%+7eZQ08WGpndY7xGW zUq>_;VXs9dz}OQL>7Uyw9)q-C8hS!kFcVdY^URSZK7DZMewgm)E))cw>+vwsPy|1( zBQrpK2L8b~<@4rkKux2}q?~K8{|^U0+53ln+az5_BP}^>DBPgYS{O=tGp6PJUiLyb zs@e>6+T)^|XWyr${r%6uLux3dD9HGoX>OQz|Ksd=gQuA-s@IhvgB}yS#T{=e)Fvm2f2psq5jKxDF}b#>ZvE3hl;Jq@%`a=WN&4uU-B#+CFU2=F|B8IuQTD_vD#Gss za{g2`tYbd>(jX`1UU@^A$qd5cK?&|ciQmeZaU&={q#?MBOVMrR^Uu1l-g)_aE8ON$ zz^)xwS;hSUfX2XIv{v}Hn$J@)17Wk#2wJ~e>80?^;#mpa*-54FZUfLS&w4dDrJ_0q zR8EsF(aQ0u==~Fon(G0vY3Ls2Ty+(iRVMaW%2Nxn(I@s@DWWJS?Y5pnu;+}ez033- zc@Jc4_2uQ^Tj7+jzQvp~qL2Oc4ESrK7SOOqRY-2zK#5Q&bM~m`&{0l5GK|00$#P`# zmOYuFWufLEq^WjN7d?RC#iHynMpFJ-Lch?P3vFI4TxjsgmpMCdKkLJXpI?V0`}Tj8 zi&h;Ai~5td%T0 zS%qE_)-?58Vs#L(yxz_%_;f`@I!_Sf8$d$unf&JD)AAPs6$BK|EFhUie-G;qnydZe z$Cw&{;QKQ(MFm?e1nb0K62cj zh!^UKLBYA~P}AGHzYKhhuzoKi=`?n&>&fnk6qce`6_O=6))@bs z^I}wvE|j7;A$We)eY3gtGvVw&lmX3c0MljCPu3YBCcQ-+Yx>5+yvVXRFLU@O9`sF^ z+|?{`=a#UAl2>xL1!r`%?d@99&bQ=>pSX^PMdPN4Vm}nC9l&Xyfo1)yoBxy0!uhX& zS2y?gDQw`^r2zCjiaEZ<*~Jjx^yYCzX=|5N@e;xOpoYb11=zciiVGsOW#(5r1n?EY z>-mjBzTELbFe$}N#rB>`rh#4Wh~AjKqoo>Q&XnJKZ`sZxbp_S&s)z4aD!dA8vv+Pj z_dM~k72e>7Q!Jrh;sHxY@x8OiSh*XlmdO8gui>75+!&#Ad|tCxRsZ5I(i$I#R4e{4 z^in2Z6T&!Ah6yDOGprLz57Hl$D0lbenY}*#V)>nhKz&Nn_@m^dl1p!4>1Qkt0dA#& z=$OW@?#YybUy&oB)kXM_!5!h7rn%~2wW$xfef2Zf=JJ9>BO)8*vj@@bJj=!(+G@&U zjrY!e<;gf<1&2yo4IUklf5Rpbb`SlKvCYz_ZP|^v@Fi09N^OM*{OCM`o*!AN>~yts zKlt@BGro{JG2nl>+ax4bhIv|y8)G!lB<;d-SPMNMG%UdV+1fC|F)qK>A+Ri~=t}mS z2aZR{l~M&Yz*yJ#Fg6|Yn{&(P&fyhi=3tjdj_Z6l&6N#q)e2j7Ohk?UjkayQeONW% zb+w14>TqOhaAiwe&U`-%Tr*`cF2(pX>flePEQO1xezT_@^-C`mF3-IhS+_FeU^(1x zP_nn|pxW3R(Y=-k&0Q$B6t(qlyS+UVXrz`8A;<2D)0iG_b~xL&2&$FYkhu5A-Y9Sm zeZ@qY?zyt9xA^JN)&tbi(*p~AGly*Z$|2eFIo*N>3Ml7as9y_FsdS<8iAr4-`aEm+Y+y_39$$_nGDpg;@c$= zF|iX+$0{-um`#Q@gVi#Se7fM_Dn3=Pba~<~wC>wAl0h-RLK6k~>wPvV@&tkSUpY+- zdaOJC9M&9jB@cHk8PrBaiXyIx%f~GRC#N@nSBOI_@+UXNMTf8hn8*1I{U-7$sI*=H z(Fe*I-|bth)q~PNTVOvMnpr{D8Z(Vf(1F`ls>k0W4Db*%l|p-6s-(PI3B3g z=p5|=aXGF!qHN;U%&Fon3iL2nxjLFV$;<$V|Im}%zTr-tm{ym1S4x4XqC+Wgj2L4N z7U#hN3zef(Eg`8xe-LZzT@L4XHX>4e{?_H^MJDI~!ewoS{KuT$4{MgI5xrEk4VQO$?jjS;Q3O;Qn+4Xz0ceJP0q}2Up8@#Lw z-Qxu=-g3~R7;p2LgyO`yu143ZwefxPLk_{MEv}oV8x6>q6IY6Sa?tRKBVELSvFdtY z!wmdTjLbQ>-H%4|>I-0doUEQMhstl0w!{_p>DZ)tBoHfEFMO0=21MbIzHBfq<=&PkPFf9!?&<#Pl4yI3yl2o{3f&x!O8(*@;5 zxkg`Z81cu~)Ocv%Z6S7t%S`RmwnyNMAV9eRe!ANVAix0YcZbGe^l8p749{P>;;REE)p`V?uuS*n6C?jAp&zP_Lpx>^C9YkV3r zu$o2GBqv=h$=gdI{?!WqLIeqK_KymgtV9RQx6C?KxN-+|{uMg4-Tj+AV(ArOy$9i% zhe!+v*Pt2Z*;wQd=);4E2KAkeLq)+JbaG9mcXORx^7vAk_A6f1Oz#CJJ786-)vC&q z)xRy}uPvh@hs^1tSDnE}DyD-Hzle)L8PkXPch|j0-3qY>I;rtnmR0w$`_8X)GQ@AT z@9r6tnYqg}_*(_K>Z6`h$mDA#bLBamy^z~WYEtK|+}1L=-ykP%;@=2cIEn*@_|t|% zL^Y(s%~TTx|AFhy{bsVn9=uJ)I;LtC}3 zXmbSvMR`))=bRGgv~TS7f6jP>m~0f1{_m zk}O{b$|ZJgDxcO6S1fi@dVS+@;fp!&ri5>!%TKfL>+1UfZzauOof3 zTlv0v)mET-=CrM|S+x0Ti|__ZJBX^;CQ&1i zOS5p|w$e39pu3ryFi_~vqhY8Ytu%PIKKJ}u&-)IMi+A2)FYn?nJo3vRuB@pmnZaP}cLv~#y#e|WZVVeA z9Q4Ig)P?8(WE0enFKO|Cw*@ulY)b*d3a1+OHtNU%LXG7gi1^w_N$A#QyC=@Mp4e~J z6jWopd#{PqhuIg5MoX!^!UDUxx`!Sp`n>h2uN12!1Zk73n|8hiVH<~Y+ zQHo_Zm(yIu>J1P&D+xU2h$5T()z&E+i#H~s0$r?U*8&z^)PUdln9ZvHx1l%@R~MoZ zVg)@ce)PzF4Gn>zxjaUc&AzJY@V{nx^KKFMjrs?&E#JLOWG9~lKtY4+Vy8%@n-|B| z-%jmg??UGG+w?!SX4>7>Uj>=Dj9B|<2sGptl^MucvgB3Yaix1h3v)}VbB4DN52dgc zB^%!31j!5wvo_^p4RNfx=sFKeB+%);7C_uBwwIS%j*Dp(=XsK3Rtr}l= zk$Ls(>45$xTt-!O_OIlysF)v$QH<|ytKG)~R@XHn`_#P$9#&^>ENJ*}UMz{O_H>K& zK}^&eX*vIggQL^hcmJwdY|e2hU`9#`q{tC!iwrl##ngi zb6!5Ea&JK+`YJT7?k@zQ5!-m&0ZeYe%rkCMA}<7@N?haS{Rb*bV?u&ppneSbylM^pT&$V#WK!8YU<}0q^4WF{@A{13jN*l3u4oz#aibJ zZRUe!*B7goedD@G48708Qr2Ot!9>)E_VGn6#Q9qSRo6;md~Eh);9}yNeMT?2j#rmg zM(Ob1_<{RVY_s%+w1mJW}B6eoE^kUvre$y4{8>9RsRt>(B)2EF6`nDGG zqh@LxSY#^6N7X91CDFDXq6&6uu=aS$g;xLy9ND((8WjQ84vXQEc^kx;rezFH@`61D znH3a?Dmnf_>@IPP6tEZ=-QZr&b44c$cOrbA|}#r?1SP4hoW z0us2;51YXU$yv`l5l_pMT3hXA>g=!EQk9KtQ!Cc03kF;Ey9 z{dZMEo>Yz;`k?og+vb;$U`EvRiw)j9efaQM0OZK{e(tH%GM_?L5`N;?3cJbrWb(3^ zOJH+d_*(L?OC|Ce1wfsHmfCxiQzK>{&3}_Gvmf?h01kwW(3r0+$FFTLNcb}0wXmAa zM;TSrI&l{_U|2*edb2;9x2(af^~^akXGuKp)oI7&cW>?*?4}RYJ`qwJDWoFc11kcX zaM?w+F~9a$VZ9=_+`JWB4&2ZVuJk-IPLrwd=t}C#(!eB9`dc^*TFqOyBbkg_`z)LP z&KcMxv6adFXLLL404lj+$J?DIs+g?BQ)K`I>yN!T-x5)9pRyh{d#HDy9Ad5d7M64O z45dP7IJ%sa=ksXAa6O$&B8&rWi|TO zu3+$B`aK%je;qQbjzrUJ?9*l({l6)gFh%X`SL{X^1GnW{`t4(Q7r;(fYf<9j@Do){ zn|erC?l>YPNy97o>ym1&57C>gUZ)oJlABT2$Yax{c=$@Q%foeECO#D2hf!1z#YsSG z^<{m~f}%fkjZuA6%HRqDrvhfnE}r&iliPG-LjBg}@jVo)<^JTYjAq@JRZ)=NxE9!5+u ziw4KAF>SQ@l0}@`zLn(~M-B3yqcI*FDLlx@<>BDXnnBn40tc@oe1jA^eyJfRH@H=& zIqGbhD{9T@c=Z=oEE|SklRuNL403M4@AF-k_mK=UVREmGviLEEP2Jyx7rEz;M`pV_ zM=TDsY3y^$8FZD0sV8p6tn$w|l2p=gV@oxU+JBtB zp|5{FE}q!6;iVkkY++b=O_JErQ&qQ#9X(#rIuf0k#2HgeQM>p#U1zNI&l?gRm#Pw8K zufT0`LvT3JDvf01_>}X)VbQVdqehk4=7ElfnYmA=h4?hcBdCt+UBZ02TAVDSeuRV5 zpXRP(NTFx+s|p)Kl*QWFkC?@pA*nqe5bnduHIt>~c7*f2?^6kM$h`AacM+}r{j=D@ zyyJgHZ|$Q(SFXbB>)JSpG3PRt?*tHITB5sk=LWVVJlUID3Daq48ChO>Vm(*or&Iqj#= zFB&X^t$7Y`6;(XuFMEx+1H4W+FYT0LqXVVye}I2HQQco+Fa(r6YxgmN`A50CHp*s|kijk5}}J7Yg~e1TtJGwYZha=BJf zzL}13fT18pv&^eNK9V;fSI3}_V4;ZU*B)K3_1U*I7WY|5`pKjP!(#-iBuYs3^q#9G z<0c=IEDSVAZ&kQ5R+Q9glgjDm_!eZ%Yd5%(>|g^Ie5^VAMQ-pSNM>}k(6}_Wx*Bfk znwK&*d+eOOW!)lGhM;O}uYTOG)u!iY`X`QU(+Udnb6hkNR%q2|hh#KHqykK5qUIR- z86hZsSbmI47e0sc>{Cp1i2kBDu$Jr#PW=>yRAY5pIc`z{3z@=c^U)H<&1y!N4P@~$ zw!b_53)D_VCvM@wrnlK@iy201qmXi0X0+w>V)#8cv`0EeVo>(5-stn7iq53$Viv_h zQM`QXGX2=w`ee>LzOv$aRd&-%5{~%;j$wZUL8-OJ=QWDFL>C;dp=oyfAiOOiCJeCV zP4|;(idNWa1ThQD@K5`-q0uarn`z$YH=z*5H^(b~sihTp(s#e+o~`d9a3ux{kpkCv zXHuh$>fWbD>#jOD@mk%{0#0oL4r7r6BkGVBUArt{4zwMD5l)!JIl!nvWnI*x94PZEj|vN^#k7|!30X8s&B}T zs+fe}rd$$iNWDq*N`~0hDP!hFL@L;A(V=I2+@d4!D^ee|lw;%#!nVEJVd zH8_nt*VnpOh3#Y%J(Xb~WJ|>gH1oe%WF7G@WpxeP18|J&yMTle9}}54WT*C<(WkY? z&9AgkBz?39Pfe3A=cdXIK7|8`g}Pki*;U^r?v2rm)+1*}+~lD<6`Y#|ZjZ%m?!(x0 z^b8$`x5f|ejfqD&zU1O-?f3GJb)@=^dKk}WtOMIxk|<-f`OKc>Ns`Jon#M#$hVc`$ z2GK`uU~aL_Cah&mU`E`MyVwcPG$V1A{S;3TG#I8ukKjD))*Ks?S}>8sYGZnrkzB~F zLZZ^|naz|LH!5UGS)7l?2Lx*p1NuFSNk^#jzz%6DuDX@dj`hy-^FkRed-Ff1N{9~4YKY;N|Z^20e;k@;odAvgB<7tw)vK3^@@0GMrJ_tfqD;?9y@Wm_I=B{LN5p>fu^&!*X8shF)zZxtW2B5=!4MABA^%|?|e#KNU4vhxixt7M&G@4D!S{7>V!qm{C) z?qb6yWXarBKUQuJDsvIxA)yOKf-#ChP}Yn5HQ|~8UN?a(zA?eT zC55`8Lar{cvJ7MfSEYx%U3skAWDkjK4`aj8qLS~pBpZTJD#)aH3P=BpGOR1i_%njC zG3ZibM9(o2CuBVwLcI13TXr?X31 z5}UyDAbBQQ??hta{K{fO>sPdUkP7Q|4^NUP8c$m)bxxEfsgJ23QdrKojp@3m_9-11 z*SrcNOz(@e@53=pUqNydFU8)l=h7(wQ(3;FX@1F`j;9v*4_8%nbq5eZc@fjkyOvSx zu4D272t`M+4Zt=emUz(vBB6_-nBJBjNIFl~TJk>)!{BOFgjZrlX-2=B!Bq5Z@95CM zV&lFhOEVqe_MN1@JoKS#+a?t2w3L-1=+=`EQ_daaTQX{Ut@W zDoStKO~2?`mZOdH#}8}CSvfnjv}qqTZX#XEfL;)RWmlvtlh8)Rlw%cHB}bcEi{jJs z!dtkj4(fqFa_m{Ab?m*I8}K!1s7qGF9j^8>84{XRY{k-Nn>25v3057xF~mah4j-+S zXz%GFyJfE#xB9L-G{t{&j>*h)3Bc~PWsbu!l-7QIZ18b#vhT*4nT&qZkv1s*^wZyP z;!7FU-`})fk)IZvA$xNc5I#jnfk!O9)acuu3DGZ~Uk1+?=*7KRX$}cQwh|J<@^U@= zIQ>gHZnE#jwZBA$)d{?^6CjJz`JWqgwfEGcQvH;x;>3cPNDn%H{KT;R>+?{*8f$4} zjhQsE+m*yJ%3QOjyYe6c4lM)HRy9ToCPIn=&a815tc;h^-t)1lDtchjVrX1;@Sawp zi$s9OqDGVs80!WPpdyt@R$?y37r!=bkr|E2FmjwK@$(xI4t707j~Z3)WS6&Yj-bNy zsJ>4JSvl_8(~~Yg8X$C{>P!48-6&B1d3438jcetDrNZf^n$CHhnrgrmL8CjvU&PC{ zFQR*X?V+1wn7~2I{QP)Ep^GO^v6N=-NJVNnLg6#TV zdv>`0!o`Nx$HEiu@7_^R_~*7Tm>!F-?6O&k*-*X+r4E`iYya+t8^9s+jG6%8FE5pTKMVow*0ud_8d;VH{%eN0|NWe9XFkf9zA6Av ztS`~FOAezKnt%SaW;=Z|ZyFQeA8FqXsfR4F$!3=+#mU<2PmXK#U`+p%j%@bxvE<(Y z9_6356U<>70ljo8-rgPs>~ z&KhlwKwp4fmc9E$=kiKl!;b6{ zAHRrM0E=j9SC0|8Td&eQ1!^6v)yE03OgScJ|s zn+=F`pn&r)gH~h@QGD7?{(Q0bqRa8EUgn=r&oKJ+HDty7MT@N4fQeFyu zIlMO#xI~=P9Qzg5k^+qI#9N&|eEimXvJ?;snNJ!Rd`ViE{#~WKfg&+Yh=Ltazug~e zG-#U?K|E`hBV)B!5eyUE>sT?K$7dI|RQK#d7pEz$moFZg6U-;LwAK4d!p%yjWXeg}QTPHrz;zhj_Z!k*SA z$)V`Z7!pn2u|VMp9(=!EVMZzOA)b>f{@EXu1@hHrY>hZUzSTnhrEC zuvpu7NJLiNE-&*bACL+SD7ydFJDF&8Xm97k{&AFhPNE9x<};S^z>b2f8on=AOAfs2 zI97cm{&{F#i60Pf^<&g`&}PLbD>Oq2h+WFCDD>KoxvkR1bGKGBjN;K`^B+v^x#tm| zS(c$X*0}W}I|{CBznNt_{Lxb?3EbwNQb6CSesuMEJ;*lzNis2Yd9zN!epYWE+C@Onmg zk}~p)=DvdkB+tCd&eu8Y+yG{Mp%?*B!ryMe&jYKTCKfa2w?oqyBe7BXgGgKO?(H z=?&tVT{%30kSLm(c<{)~ZIfc3@1<$eU_H;C9{#A(qSNuWvK+u7RfmwIi=QxL^v``p z^aq0brgulf^|Eeu_YiD z1a>NX%{efp()o|bAT|Mz^u`8M+%DdFnY28ja3(HjMD{U0{k+duSwjMriF zkAf&rZTb!1y_cdIvAnWk3*?>2)eHxs?dv$Q;b?!n4K6AS2;;ow=;+u-8$6HDD83Vp zfGPP_eJPAKDKvXd&Lv6ZhHX7Wb(2_hG6g-n{mS0Gzgq~Y*wFwc&$OhjOh-7z=rN)P zz&fCDfa0L;_E5H{nfCHI1;_hbP_2}}0>!JH3kvs74jtYyRdR~dgWXEMl_OsojAc!+ zt~Y|bxYO^}9yd>e-D1f5o_h9Jj)fU@FkCl1zuLXN&dJozInkhrHq@BkN^fif`Ny^( zsZxp2)LTa*rhj&4JbP~U)MkOfwAc&Ia6|+Ukx`q=SuZY&oe9{>RXa zHf^m;+nw8IhFM^{m6t?^t>FCs()A=3@K-y|3vZu`TmJ@5$!#Ib*!!$sQ^{2~iwqu{ z08-Z!t?Pm0$&Lh7kIqB0zn*{SK2~wn&b%ri;}rFF^ch#3OYx_z3A~M29m54#I|G`0 z4CIYizQ07>%K01Io`>kynr7lVbijZek~$(HpW$=L7VQ=HM+F=_QyH`U>Iz2DCgzG z%#;?9wvK)by{&#zum3*x6t`RweN0NG{IuL7KhO0RwH34rH zmq*x31TXQoV2<7zTYasTQQF!PZ(8kW2ft-!hcI_-Y$m46Pmj+EygX^5_-=fcG^Hsl zBw4QSVU24+2Y;b{b|I?Saa7^g6k-v0=PH41Oi6U?x=zrBys;M!*lp3Q?YY4zHOrX^ z0!;?H!Sd^9Gr9)wduoGKNS*laDpGuTKKN8JlBh#<@;=I+i|wad4{( zn4$zAN&Qo;!rji2Yvz`cVJ|w867lhc!7XUbG!3eb3zYb)m7s^{$$n zlg?_rZZ)xC3Z37z42K`9_D~sHA7Hy*fB8jgju{P$UWo3{VH06GPC9iHL0%h_EydAv z!GC9Q!m(KQSw7!Bg?D${Ldh2V??!y3oe{om1*Y|^y7z5u`y_6i{0V=daM$B+rQoG{ z+Uay79U!n<4cRi4m|ZQWcMS1@uvhIE9y(JY{Eqd|sf0>~1QoMZ+R4Gqv8jBy@O;Ph zK>do%TUBxBD(>HpTw0%>j(sjDU9SO5Oy|RONb5Snv6-dZ7UPfyS6E_*wd&JOnpMtb zJ@#DGb6#6Ju2?`j;2O-oOw!tNyUr;6+i*od3v?qw>J+G8GSRzEaX{YcYZ2U$3r4=z z^YSDP>Tqj7OYJmS425MlFFe*Lc+O}t5w)@}2L1+cP075$gL@|)a;4wte0unjV5c?> z=c|Cd^y4`q!v;!w^Q-;!jw*ij(31>SNkc03R~5SdY%e{} zs`n8k4VM$Vd9$^4YIYXMtt~>Qkp<6SISmYEn)}_)u4KsOiF%&L0=mR+XXo<|?7EE6 z@gtqP^n~`Kj#id@=gZn)uC4t^4vu6ms%jE=6K&WscrN^qkV74K3__kkzug>DX^XOv zw$p)4^eQ^(s0jJ8*y*wJMEqEsUH$~r>ZO_N;!;w= z@Ho(u9gqI8-SN=_!BWWz`+ww14(8EkqmkgE)Mh4-PwtA2ya?yvxLXW=flLp7UWDH- zLm8)+?YpE1M+n{+@k4bsd&k07=TCY@w~g-=I&;ZY2T2^$4sHdn?J{5u!CDfZpr|!C zuHfJHLYqugq5U^hV;9Vb3wWJh53I4UK(=jgD>{F3{cTG3Of`o*@-Wj?#I+SJx4~=( zqeA($B8Qa8li&nmj9`ijB4QC4vowE_7Tw)WixbpST66!Y^;t-V|7R2#h>&1w zZXM?3a{pC`y27!(6pMlKbIBx^s)%`f)oe|NUCRHPE1^%@`Z~SrzdCqZg9H@MKmIw7 zD{ZT06fzub%dee>tg&U|Fx?8I25D0971GwiEx+~eA&-md;LM^k&b?No%ij^RLSl(J zr%<-u11)CGQY++v zzq1tFzQzwq%gdVp>Zg?#-BO{`tB(3q`T(SmZs4o8> z-d6h4?IHe+b;PER3d4cwfTC-gR#Tv`CH(zw`M)O@{qHNm?{59Cg6IEw|6Bk0zk|&D zPik{_KdTyxn(um0y{SGPNh!FOnN3ftZi4;{f3`iKa=HI);4{K4ArwW;RYvRO`H!!2 zPcS;aFds%%G7t%m#pW ziP!}vE97!Go%1n{9(cHIFJ)^h0YzHIMbB{tK(==1mSC1)>rp<-du7i!m$`{RKE_85PBbxjj= z*fMQqv=8HUnenyCq6VL|QI~&aCeu0SCa^J3p;W7Ila#W&sP554BoPvL7a4*Jl?3rr z3aJA{PwR_w>}x{#371ne?DSvzZ{swU>)RKR5@!C|W!lP`ntK0BO404Z_)3@6ezH?o zWmSxC4jl?(M@6fIq+!bzTmU{4!zpmfeHBu4y%h*#wn!9@nE3kx5%Oa53RyTo_zxc7 zu!>%~^5!7o7WD_;B^-P7{`;N#u8_YhjMfhwn=`f781Ss4{9YTn)7$V>#-N4H46UOp z<~|{SP+7A#vCal(Fc9KVWsfM;67f8ziR$0rtfSwCbjOHHIS1qL2fmCNjVxdMm(O{I zNRU_JcXe`h3F%d3WY)?fng?B~uAaBX{@zxxUw$86u{Zn}KN8v0rw@Fj195v*-@Ffe zsqCbN>Q8b+hGNIEQ7yMhFYy2>Tn%Tjbv)V@vz09}_g?2I^MWBlTwr@StkON$rp)YA z;NPB`sP49ulCewTI8JUHs@te(nm;dlH-H*3B;p*!TaBAO zlqv6|A!FxQgjYR>&Gzh*nVwy=g7p5BbL4N{JBry0 z^*$$G)fBSe69U7hegiYc>V`^8gninJb$;0kDa1wq99NAtbLT(`CQ@O-x9ziIy|?<% z9_ODU{ru9Uy@GNr>#MpN-qsR?GKT0ArJa#;QJ z>@;;+RH3Z(*1(`~F}#g^{TPA*Jd6eV{m!=vnEHs{roO;xG}XQ!ye#PJ^4aeb{%HUK ztUKwCl&u@ESz^v(!=9QAZ8r(?@$%kQM(A3mSa7>1>Skdl3o0c!bm{zkfTr7bqDdTp zP4ve0+wzM;X`Q=1^D5#%XHFrGWIok7%zvH~Dc&OmAWRN1LaV41_+d#tpSXq7usqhG z@o(R5t=T%%-b#_SBIpkqqbSGy#s_b0ThA?F`>oi55@bLYN+mp}W#exBN)tmIh#}C+ ztQR-g3UWTtr5P?bH`NdmWInH4~vT5;(NC>(06Z7hGHkfN7^r z&F4=N4M=;}djyROy%Mv`CFu;~;%JkQZNOHyZ<_BL8qf- zprqn^LxK4Hx%I5s2e`Ev88F4F^XBLuqD#JdE&2wq(r$ws5!lNC{u5E07kn{vG@lav zmFdrY*|-jax1Anc4x^KahtT);m5E&d!A{}Mrqo3p18;BjTIlxCbHjtj$zhIuGwWk( zgZ=%+F{)_$oo=`GQ<4ZEoF})aNGk@V zq;f~t`-p+U>kOw?m$Ov{2C~P>2OW0eBbuAH*Z=Y$EBSm9Bv64WS7ltfHA6Ot?X#f# zxa{ST|d=553C6h#4Y%{-|{@35_aSW{4Ml4UlndtWj@Q&-rvfzt-l8l7$!z1tn%} zZ(i&Zk9e=%Z}Ks7BE(9|4&yHB5Q{g+j)FfJ3%Lt&_n&o82hI7B7hdDyP2EnLc1c?k zjDYF2kfi4%{i9aV?e;&!Ka@PEMDi*zAS(diIg#oeGmmHmB_GopY5v;cX2IWUkVPOC1o$AdHX{-Zw@`W>lT!Y6%Thqr+wz2|r0;T;7V;PDoUi^<__ zPRiSAxB6>Cu1<(%Gi-W>trf2K#r{~-&!OJz&D(j{ZL-u3Bb{w>P`8q5^imT*DQZm7p%uLr&2TAeN?NpWV~RY< zKP%cx!fU=+nH+uHYSJSF#@9S_(U=)#v$-#EDB@Vk?w0Kqjc9FWW2r>tYL=`o1`}Xo z{UN2&K_Qm(cL2?%-0v{{({mjsi~&T|$FrLIcydDkh9|lO-fT1HxdOR^whGnoH##FY z$aY&+WtN~xb&+K&hXA$y;rnatb~po7RdCAmRb{ojPP2O3D)TVF;t!%=)kIQ$1ZE3j z14s-)h+ZiwFk?t7ox}Da8m4o10`3NbC z8iaW3xHUj7@goy99G;$A?u3Up4^sQ6{g7vR)R=pPMb$=-5>i zwpL!FC4#@}cHJHqrHT)*yrvq^8Q=Xx1)Nu{mE*0xuHaN_E77}Qi+yFW9WuYe@2~CI z=RNUR6HE95Dy7x;Bh# zUUn$JZWasOHea#-;I@xzJ-RML^UU)yV{o==M$A{%w19lBlui|47h335qHrLZ%M|sg z@UH%~xd0wfF{viu?=QQ)!P+jiHX4%~ly3dQWvbZrOAdbTx=vP|MKib73F*i1&Dn9a z`)lc*ZG45w-0)GL{?Y zgZq@#{MOgVZ-_oF!wyiDXJSUxDYj++#|DeILoT{)Cx`pBxr#oQ5|UI?C8ApCw`Cu` ztB8V}Cm8>bC2nlL+;>yDH>YXUM746#1?sOpCZ1j3#K;=~7y$qkvR#5NKq_D@Fq6K= zdCG5C+63BAc}l}C%iDrfkkJEq2TctJvPP?$L_!ykU7_C}3pXJkigs%Uj?275bSF*w z{XguzcT`i`w=b@qqa3lIho*Rdb3~;Z0RgGeFHJ>2q=SHhh@mPFVt^!eL zuN2oJ21NgqYFA2(-h%HoqD*f{Fj*@K&MkI%J4I$1&N75T<4DZ`UYA0=HnJVlQ36}>s3yTyy@TiM_)2#a zj|o9xjDwU&jFj$8Mq-F^d6b)+rr4pRfK)_Z`LQ8{}_r>^@KvpyQI26XSo|KAz1J6qy1Hkif zds){Fm&}m|eoJEB6Bl6%=pX10@Sk!bR-*8GtAA#{3%|_bVH_}SK9h~O`QA*R#M|}b zW34#D^>4qh?K<8wj_*po^q+Oti(k?Tp(dRs#5zPVGT2fM9X_7DKPG}n!Xk_91%ESI zUiD>*a93YN_{XefjXjaZuT4IwHUPD^uyhk0Q^FqO2sDpsUG8fCfO^Q6B-1)g`h8Eha}E>zt@lpOWV zi3&wLJ?WY$YNf9>!=C|#Lx^%?MQ$y#opGS1&=0KTVlViZBzJ1j8u2YZQvJZu!|t2pS8KZVG9QrNu28t9HMFJX*il#$C*8Oz7`q}*49p+V z9@LB-1zoGqJv|t>32{N#AVkbz*<=Ko_q|yFhlI0VRc&Nbh7%0*)!HILVFE-I-*k3bii?eFZXN5Py(#*JqOh@acL^|HS;eBkO&X|n3y zEcaOz9PVl=PBTVN%@as%F&mwQWhs`>9&cE&wIsY;ddqdC9-Xo}ET5Xr-fXV=#q5Zn<7@%GqsiCXCD z*-95tK?6n)Mh|*YPpa#%j3As{C>Gyv=Cx^2n7boK9w5)OwOo8F@{#q|xCF2*S$-%x zMmw;ZVGjHqi9;Nz7y0%9B-9-2x54K!%(E!olrhPFO)ay?j|2yv-^xhIsTNratr+R7 zGvhpxrKLTDOZBY2I1zB4MRK1eNuJW$TM3ITJYL~&(tqAt?m-jlfK1NSaRXLI6v6Go z`QIBXKTuDI(TEREGUFV*Ko;S~9)xauDC>DDYVnqN|KcL~wz~qHpqk-GzM6!X@$$OD zYO?LX3up)Qfti3D{e5R>}B+dz5BE2DeJtG z;}N2j!EioFZ-kxUNKj0;=I*e|>*=-=uY2;jgSK^OD0GW*{fQ4P+{bpSI1zrj?qG97 zluW~hPz=9S*7K|t-|M*>^1HkRm*8xH(&4DjCgU;$GZ!+k31{SJCNFPMj{~ad&3m;_Z-zta}>FJNXV$!4^ zGcsMCNjS_0RrwjLlkK+#wUa{v-N?8Um1K}@jIsI2+1G*BiszUC$kif)lhwBpQezR9 zD7?L`)w=t7ZV^;dLXvyBe=i3gBL(K$GWI`%w)A+%M&II9m-p zfJ3gKinoX2?x8CW@W+g~*ed}(cex)s48?Npf80-(&;ghpQ<7J-OpbB$Nt8ZHWI zM)0v8IN=x`^cAxu{+gaV5q5RROfG6T(A;JE9^t}(u8H}Oxwd0fNK<5?hLv7j6Q-6d z%HZ{TJ{AVK1F^T}q}RsX5|uol!ac{;hmA`n3AnlXoCKJwsw@a)L#!F&rp7F3ur!?C zpRqr2IsUE3UI!x)fxb7{xv>V1V&c{2*Yh zE$q@B*X0(5@eJH_tEWIW;Fu@^`-%Dk*WF15+o351n5M6T1AAI?G>1OrA}MHy3UfW~ zT;=0zXs*DB7CJwYY{VWNPt_DoR&Ah=!rYtITa(^y!@HY6cAMrEphJUi^j8knP>*Ig zs~+X6hnqX4He&$}4VD&P;^?l@kf z`)HKuQ`2A096bB0=&cuH8AmkkB)mI)IB&px_(Iny4bQI|kR#F>?@nz9hF`~?zin#q z5RdgrS;d!yBz))0X$6|E~;5EM<7r9*pH;dyOtR<~@`Hl9@x zJVwD{ixe|c@_7D;^c4kVUN!1FAwmdqmpCl6d!&Udfj6v^e->c6+d`q zLAf7M^Oa@(oY>pyNAbE9;*K}q?r zAe3Y}WSj2p?w4J2N7|jDQIY6-b*s}>F)nb3vXUTe(^vRLq01#N5~yxs>k?Z`o+mFy z5?y5SLG8p$38CUopQ#PJVq}FUt=2!ah6b{ocXsld4nSJAr@%AL(egsL{%}8?=KhAHMV>0 zJh2{HR zH|HEes-Y^Fh^!{3bi{&eFhrRmb1if zlG`~an%w+Y*$-zEW|^-fujSw^_)btyDKA!x_ta5v?(jG`MbqPSwC?_4NIvSE?*Mo% zx~R5kF2OuucIlX^)L)6Ptk{7Dp64dx58?W9jSnk#P{%P$Co~Ge6?3h%@#?+?|H|)< zW7&0@TK#Zt5Ca*$`&@&LeA(~tA2QU+-8i)?bT^%PF^TcUk-o@cT*fHdbemGC+?558=+ zPf4p2GipVZe5pl>sBsWog5&v+a0@pVh4Lkams7=I+p{-@&){4=FeLwMd?iYBzK8xi zjTH~|lP)WB*v0gt|KP#jdupWKjN5LyX{7-b2^w~y#J^k?9I1!YoKLoQ zwei|*vgW|iO3sk5FsTQ?#w`0?yUrp6C2xDU0ppFTpX4hc}e3X^j~@|uhgAhuawAo{Q-!6 zl$Ld+Qjh4aU2F9_{k{|7ApF)XQ*ihTg3H2z8w%utb@VhU+pc38>953<6Z+cK!_fc7 zhjjxFJNTmPNzFC)gFyRiKkKTGl$Lrm=&4t(+7j&L^Y}B@wGK7+wdEdf*FD~@4~_m0 z&4Hw?H2zVhUY zv#>2sTmjHIzwLy5mGTbb&&1|_Wq;`K@sZir`{(F>nxA6#9kuR!WYUAI+e-38V_bKV zJP^rwxo!Plk3SPST>8|`Tt)W;Rr|l~qZ;ylpmg3&#cW&Sd~*)sS=XO)|9xwK#t%nt zKN$G6bqw#k=BsDUdb|7the;Jt0WjgA;XRj}0Z4{D5b`9P=4!_emaIi4&DXc`0N&AA zID_I4O%tsmB-qOsCP%Y|bjos9e?;g4oDJnvYz=F*Tx*`-gefc}NFrs}!ZV1f)lz<5U zGb*CO2%qNO(37;%Up9sTph0}1m0?43QM!lj1@ONWts z*iE(uC1X&s0aHy4E8eE9U{t>zqp9E!r-HXYskh=n1jv!3ro+U3T|flKc7)m>?^~hn z?`^sHx`nu7P#Hr2C1^D@4JEk7&@1dCDc)f2xEJl`FjMU7i1J}2o3lQFps<1H2^_(V zd|g3Ub3xFJul)k}3YrnoiI~^O zaT0rP8-~kC_O*7~r12ZVOZUS^mY;6c0!Z?MGCSBXk&^rYM!~gw|BL`D=@_ZUVI=?h z(+phIy{pr1HSx9(bmjaOS~M?~UO`87veo~VuP20o|o>b}0^*n}?MA-A&E<)3Jo>dsi-~NPE z!zMS7qI;<9i;t|MhN8TnL5(Yv<%Q#grA0=!(-)-b3>iR2gyBjw9fQ^izr?%AGnzpG+-!^E3OymeiyPkA9*yhQzf*?z0S*Qf#vLX+!22Sr=u#d zWWb&XPKa{gS&QG}SM!k2+01K<`%h7OT zR(Zcwun<;?mVIyA?1Q~~&8>U0!a1P%OF6OkPksfUn4iXMuSj2iS)8z^+?IhFm#?vnCK zKQrL~rMMGx3o~;|ZoVca5))K;r!ci{(kr*85I%{*#~jfd}O@+GeipChK?%rHc%pCU5 z=22xHE4ayToXp$)6zaLn?GM=r9RMHl(AGQH`s)qpDXkS_>FnE)UWui%ZfF)1DpRhn za@jxHkc)0o0+EX1@yH`q=nlgZy`n}y%N?S@oZ?iEZm;X5NZx`wZXN4N79CCAvzK>@ zwJ}50ikn%U;SHHrlLx3_^!m`0&hCk9hF4A$|2OmI6a-Rhsv9hY3l*rjRT=R^XAML*27pGWL_ovn)Gk!npp z*pVxjG_2wFZ!O6)LbM17WrS;4RX?#7>_W4K(rw(B8p}yGmRAfr=L&~%?0O0%;nFGp zX$3S!4@!-{iT{(o7M?LUpev>MqZ=GP&_OMFX#H2d2dQoBbZ$h3*^VN_N@PzefU{(T?Z76xEJ;P;J>#u3l8} z%RgH?YoY+rZ^_elzCKhJIn+fA!PPZGrmIf?bEk@e^z$|)QwgnfxtOcNVGDEVCEjnl z=rc+lo+kFo*`Lw9K5Gz-y63g`OTBC*d&zSp9<;mnuYw<2RDJJd(_K3bPm5 zY%Q@-KF}N4z&rlhnY<>$x9dGRUd`cB^DRPLGd%($BARSDn#>B zBR^HwxeU+MUn~rI^Ez5FupwS%IxvVRYS(C67DKci#yM zBlh<7H8wOfu!v+&bZJ?trJhLm|7=gLwf-mLblCczFyg_Cf44LL83@fC6Yc*$+x6e} z1h%)ozkd23+~mj(VCT*4ON5`Ahju&fbeiq+ZAJ0o$zCVQ{QTjjKww6f-{UQPT=~`< zK9N1CA;glquoF#x6tHb@zrTKcm)8E8vzywIzdEb_Y@97U&USErNHhpx41e4m{j_f9 z!553SW#rbkjeOUfhYyLoZ(Q!-*Uv`EpJ1%?)yV;y?s^mcsM;Q0519UdB%5Q&0-Z?X ztrdf5mio)>CefoCQ>)o*6(_>4S5tEW5Ohh&oA)pMQ(fr%&VFo79Q?lQkrX)7 zaB{TLC6UabVqmhH--IRs{^-{!;x&n{*brZxg@VKcs0EDC%szvGO+4s){15iQVg~^b zQ~a$&_4j?QLu0==AizroFgjG*t+@?oL1-hFp5c5UbVhO}p4TdDMbCIJ-3+bAZxFAr z$Bc#oLPMtv-a)$!Ha=gQ(e%gyywX?xW&u1HUkpTMue$ix2&&68(XDnmb84-Kg};km z=~kZHpycEv)lTg|)6O5--jJS8krlK1+b)MPPnj4V&LUMKbkl>@t0Rjh@)dh{Fvf#v zE~@}fD{`e5ff)Bu8{j%TW1@x>69c3REs8qzmOGcvosh1#Yz*8SIm?a{z-kbu>)#@Y zv)!XXJ{XH=%>%K%GO>9l+Vol?z#KK+vt9<)#b;Y4V3Kg1cJ&8bkn+Y zMlSwuu7N6P2wrYG zt_`M4#CN{Nd;g(5lO5(qoDAZfWw%POxGe26lWW5tcKxKg1_v;*HwLHWGff|x>=j-$ zMf<$+RMql->v(ZB852RyQ+z(nonki*S?cv7ei+GKty6wkvJlTh(3@8KPVXL2u6p+B$T1Qc1*kesHu0@hdw}g*zUS2Z`B|h zf$Hx4qJl1ZcsFdy!m1YsPR{?cBBstZ*JgL8zVI0Fo}KkK^@I0bnI3JIW^yDatQ)Z`YSqvx$aJO8aEmAA`g90V zkOsMIHF|8sJl~5+Ovyy2TbT~|q!aaWBHS+Y?j~iYJ*b~NzrdeIF+xP9YWpqdY36%s z_=b1;3!Z#HTimYrmK{?!ocGOb;HCNAOT3E#QhR+h^G5b0OT0h$ODbzzuczg$q0?xye0UJh`m*D+%F3l3+ywXY$#8rQ>vhtcR!D?R|pls z#m#qc;q$ffhgJIFAFi?!94eq-=oIle&3AIu(w(ODht9mIDM|h;WMnbLr8cyJS1JXO z1F8PlAcIgk@Z@lMLoqJ^9HVlmm@9tbiqyVvTCld90nM@SG*#C`?AFK+hr;Qc#&<)j z&&7U>e4aV?wj3&PP-_}s0FoFi^Alcw)b1dPF3N9fgIw#o-jqpC5sL=ZoQZk*J7`>H zPB6Uzbd#*r$~*_7n@}g?JFmUN3*Z>;G^(Z-!57K7@b=!T*;f2*AQru>>>ggiZP1pU zcU!@XzB3w4jq8q$t(*A#F|a#0IJj$2)k4qDhJCksSD~BuBPK-G6GimM@7KkE5ty;_ zoz)?|_rttSq?cdx0V0S+cO;~XZ`I^v2lRO--Q6437W{J5>D<`8VT@qBdsy=Etq$JO7f0{4OhGDk@5YO^)MXpLnaPiS%I9dO`R~{BamD4s*3g*>ExK0UO2lDCQOi(jLTt z^~o$+FJHV)^ZP`jk=djoFowwQS(*X78BaQuuyntE>YXzC!gL&OPKv!qkpAxWvj!(E zba&tn;akezG9_>Qo7f%9*)jIMwgE1^N7;b&YE`r!xj1kf){nNKFGm(nws)t55A-<5 zUm9Udwsaz>FSeEywhkdEU})98u~yLg7abZndH>c%gLc5>7GL|_iQ( zC#Je|U<6wDGdURaa1)W3m$CX^7 znTn?2z||rH{&N)S;qOQ6FQ)wC!hHYJgW~~o%)x`1Cmn|l2ZnomiiyEZJdn3~Cr$F6 z@D%BPw}4pf3i$+vPdURr-}a=>V`w2L&WFy)L#US7_d%=fv>-Mju)ES(Z*f%CFymLp z#NdD&i#;`wvO0_Q6-;u6M8qy za2)xiXmcUjp;G2SzaiX2y(W})`@nw3_X<0yPk`^{{^a(b`wft8N;6 zzk7FnaxJ8$8}e=O_KD7k7K7k`Aj-|(n_}KPqEBQ6`yM_H^_*R}G&(SlqPOTYOP5E5 zR+84gJkVCF6L5Dj7VLVYw6jLbozghQi0e9o8L|oPdPx}IJ++_Q1U{p#_sj>PCe<`y z0NWz2Y&M}3^UNQYP#SG!$`ZOI{$)hLW$y!0?J3ZMvG{yCFmz<(QUxx+qvP}Ag`|H_ zqyP4XKN@d;tTYHYb^LUBd?iUH2deCVn^?qgQC{fmY}hm&QBS%*_fBu7LG%DO?(_$T z7^Gb;t7P`mq(+WG_OBsv`l0$8bf>)#g0$A6)*ot%XJCD2D8E%YzWcQ5-bifT)T9EE z{b}N|Iph{`YeoQv?T$A_%4oNJjL!(RLnH!~;{qE?b7_4bu>EKgPMOr^2c?phhhKA- z9V)hB$RE%g&+^HrewP`y=8Yq;DNrS>A2Hy=Ui-+Z1v##728uu_0uqyMhcReJuY4S# zleDcG{o~G}SJ%G;6B=s!!0poEgT}wV_DcE(%3P+!0r=$tHjx4J$D`QS#6Q}kGcq&H zpS+1Pyg-&|gngn-7-mNFQ-j^!Dy1XWqawX0Sn_u#w#-3Fom2h%*Q2nNRfh%}H|(H+ zpwj^_YUPrC&3_Z-K1~j2K&HCjk?qp3L1EZLu>Glg2xBvHlKx468!}k=hTXDT`WjeY zt=TI%PN^!L=%$aAH+8ZLE^Wor@h+lNr_C4qpzh8m{W`+>l zfh_`u>Du+%xOUU*eb~D7EL}D*JA{B-hSbB@SuVKHcJz8vGQEAs{+*GCEY#Dp^3=<4 z!K4kHk1v{t_1B>5fE&A|5u5K^8hlReA2s~RQ-t-y*p2B68+W$Gb_Tij+KvvepJMdx z4z+)5wANM!(!Ji<|9QuO@&1~H1#TL;Gm?$=CfDs{!XIL|qwb6#7ei)JW_kw9Taam# zzzDO;T2sy;(dqm?xBBqTtV}f8sz}$ZHsDk`-SM%5MPQamXPgCgV#X{M@2M4or=VN9 zo7aKaI;+ts@~bDCVRrE!V6xB-D&NyqJSmxh2p{Av%j(Y~*WY7ZnnT;0Inc<)oXvFT zm2b>);B|FKSfKjz>K0fivI=qi)#%G2yMTs)>Xb~!fuIvPYV&TKG8}y`$b}ZGfA{46 zB_HA0qqMEW0>Dx5k2zX$Qo+|o2+SK!;<9=Z>8q&qXPFb4lvw?+kIi%9<&%3Q1Mi22 z_BW7P)zVei5ioak{|6~hs@bGQZ03D=eb`3>ikU;BjoZ8Kn7H}`$ZOfgz;1)pcMsT` zsg~A?_(F_NG$Z*t+bR)aHujeHP-YO<#H3 zpKT&|^Ro>F%|%&d*;jhvM|H({eYZC>ywT9n#}Us+bNRBo5d z64K$lngo@GqUE8KGqk3stlCf=aU9i6Ke+9D>Et0||IajUOYpIz2$kZW>6t8jx4xBw z49q#ijkTLH=X;z)AY}iFiRkRM=6l+0J5emD{O=Ox|Rk7U)RP8i+ZXirJ)Q&c0D zH7VpEJ8S8X84*og8(XViy)xhI2jkZ_#+&mf4?xe@4nz$giEpnt|J#G>=Sy9^dHPEo z!N<()#FMMJYcVj6a&r)y@eKJuO%C%O%DM# zp_I}S)}7=n-z8?Z4x%@o*a@Xr^t&vK%BW{t3*2lIDw+UKHRR;VTwqnvaU8bMOhVF#2@FYA?-d zSL286qQ)VWW$`rcMpEHqSe1S(xYZt1*4T1DZHjviD}tYsK1g46P@F>s(kysJol%oPS~k=TPBDjBdUsDKdv; z*)6AHgRkO$oLD@oA}hGr_~MBWJU?h1hOh}Y4SoR3-L9K_6~y0|qz zr;Oq{T3ccXygP8E;1(=aVk9aVGX~Wi@1)e9s8&Dg6O5jsv|!b%DPa$#l`(lCKIQSL%znOMptx5j_XXzEr*k}vxXAZ(LZDkiPL_weB0iwdfYtI;b|j3|kn z<{5jXd!RL?`y(jlXRrj?<`ql1J90l2h)~@0a&^{;Lf0lD{$+>#%eDSX|6E@1S+k6a zicMCUgL`#9DUT9n*FTG;c&8ON1+Da$ZECq{Nt-ZF&*-f3rH|NXJF#!sXTGcici~e8 z&+u_LK@cA)wm1i0BA|#oYujuS$U#iHU4Tjd>RT0F#QaF282QaT{M<-kL1CZ{3Hlma zlbRPCxu6;>^4Cr}rgQhj6h_q5)e`{yhwVmlqp6crB=7B<-fa<5$*rf#-~;Qn|@)= zsG9ER57|qc&MN*)z6lVKe94ou5`3#it&zZAUi1GdLfMXoay#Eh=aYdP`z}FQR-Gjp zA6W$OWge;|k}}LR7F-x^>5dzX6gVbT04OTO#(BNzjlMg0zLbmL@8OWwp|AUn&np*w ziI8G?k|pWW7Q`6-Uw&lqY`LQBkDNnZBQaNeW#ItoM}M%Ss)9az=}nl1ZqAAi;d47QlibS z#+57AFZ7c#Did|p_+y6JdTeY>vo7&{tgXe+`KSR!342Ny*?E4k2CDN8d*FToYL%FJBMqqBwA&paSo6R&HXan zry+wZUl07x!a^Of)$L(aT6`0W{ea@)6hYov5_qPX-{_c~W*YG1i8WHpM=%O@E4Hc4^(^50oCmPIC@3*pH z@foK82`>x|U1jW&mJJq>Adl3MN8AT+Ar*Ztl>QHCEXEMuE4#CrZC1~|cbR~r)IC87 z)5*z3ZurtNi#dN#Sx?hiM~RZiq(XQA$zcP_zPE2X5OnVkU~Khq?-$m`O7!mVfIa53 z{VG|$2@P$y|WQ=7vZgZ$;WIOl5Aofq733YI#q#_74ujjWU4nxXwc zt8v38O$g_2^9z5-{;lREaf1?BcvxyHnTBLk%(ElS&XKOg z6muI}H$WEU*?t)nTHcF31e2PyGH4m}&$Z&q0wQd;ZAl^D=rMtnK3U(7IbwTQWtGIGT+kTnhxZOx*V^)zNj zq3izYK|PE)cL?%|NDeA0Eolj8N#gc0=nIU&ZQqi?TD50_C+X$jJ z7~}+xscaqd)tq7H|2>$-*4Of)$K}=8XvOerUA%s`k%Z9B)MXbah&XM@CkUZd_Qgos zqrWo5Zuy`wV#m!EzZqYl)d-F7Yp(=He3a%b0gi&U?1#iMlb#|Qhch-ZvhcN6b9iqv zGt&ux0{{Cn*Vv;q9)cfifprPngOu@}A5R0>?eiE~`=0UFh}i|4-9d0~oeGSomz>J7 z?2)rCMjx>&=;4PMC?5iFxI!uSo?Vg_%lhg*Ssr|CVcDs1^E9Rx^2(5GwpP~PQbRc~ zGHG8nJdB+O6l53eNHI&(2z5fv@{1hTxhW&k`pIf<=kj%TD=xw z+gWb_q9%-PxN7#awyHR|ep;MwgeJRU2JaA7CCf2m6#saooKC1>W~>`-QoXDU3|V2A zHChr^$84efp)M4nJ9Ho<1&mtgFc|;UZpx@cW@iD*cv4cQ@XqIw9jaLs`E$gyjaXg> z65>52FvhSZ)C!|Ndw?=I6Uch^QFn4i#o?>mtk9d*#doFA+0d+^Bt;E;%k=mrkhl^z zU08mS=0thh4}nuwLRdP3tP2AS7BFT8eR|+OhM~5Z?4#9F9j2sEB8=zB^H9`{(leEiQ8hc$vmw`JvzqY`clHrwSHjzp4 zAZaI3_e8B-fwfl(Oct6T#PuWL<6#Izq8nh(UKc7XU(z_zvqPof#P0QOGx^Bwxgt0> z1ZMFdzs8I@MP8KPC1YD%QR8K?BPyK8l%kXxYqd{BE*6Q<*A|({b*>vLLxmAy%WTEQ zyV~6;>0{trX2xjLO(;>XwD`OlbT--okZ}cb$aS+vU|iu~d6@Ezq^gsRMJqV~N_jLT zNyy!fSsL^k)p97IW7I`Tx)_ql3keBsxo(YapNK??lQ*p zQKUtHWHr3jciupx?3zQynF2tzKMgMXbZ(hst>-L8b$mZW>Fc`X`>9MqLS&Lnv^S#O zwW=nUD~y6aAXY_8z@Pcs^_q1l!sbMeg_ z*U198@|MBAQULAynY)pmT$C67Rni6JRaM9Xa>m6EuzqgB`#lS*ho(`G$7k|k1aUxwVQ?WFlMz=r4>8hZ_ zCh{@=Ly?JKT{%OGnP7hQN^GqsHVa5J($KkZ3{3)m5(MPk$Mbjlz-wBQMmZIh(bz3y zd8xWrk^Vgt*^Ij=J2pbc3WoPxlUyin^={M^2Px?FaZT(W zsLkao{2?*dww1Czc|jI3^GBUw@;)e^)9Dg<)2*32kQ4#AlwsNL?Ljr>icQ9;ao4-+ zKIoEgd!MP$G9=F0Z&^E~u4!XUQB{g{fyC9^GGIn~IeQZC9F{hg^3Q6FcY(+jIFNjrNo*liVDhpYqE9s6VCtg7aUTaDgaAx88jwuSf zpV_pU1OeF%;M#Iry@rn3xXs&04sMl}doq;sO1?J+2@Iaj-BA8|Alzge(1576ee^|<>8qh?xWQ zEq4Y9;M0byhS7jY>|`qooz$LzzHn_#F&htY7|G7q+`KMh;$?#)w6Jh=AkT$N8CVQ( z0bUerdwq88Iur^p!|SGZU(~UPK;DFo*wMGPzo@e8J+;D@x8mj&L;nGvqOPVkfYhEi z@AVx>x;@OFn{Wa=E4NPlZAx25w@WqOL6dbY<-!A6HtxcJ+CTEtEhmFKX?i&pb}FYs zmUgG}C7M0nkF4WQh1{)OUg~&%F@!U{x>F)u9oWfJ#gp1zq#$SX z20`t%fumH9o7E;ZlBQO9EyUj--?qhs5M4QKnGIJXA1$M{oNXkWx(0I_-+-R1?w>g) z4WxA($V1TdO_(R)UKyz`(!wpU)0Op8jV1n0oVLcH7A1Le&#|-7ix!)#Ek|OAkB?6o zuS#zxFFU}z@POVb&v!wuBE1`*h&UIUaMz`0^J3|+mQ{3DD72(Je`BQw1it^e4nkpDdX4MziW#tGrjL0+Rxjh4%h#yAS@VJJ*l1s*w9;%}FNY ztWAh?;R3MX(|hZ>`#12rqc{Hi&~3@(GG|gT5@>A|v%Tsn=r^fNbEmu1OdlVz&TUt? zP|Q13bge3|f7K^baaJkY}bT!;;R z;W0=b;v*^Vs=V`aJgP9?UeodyRQ*pmrR1qAWb%)t7@~WoBwfuQ!u85DuLWIXuCYqL zVNBRs53!i3bo~)g4Nuf1dVJCGWK~nwnPg=bndFXsX^Wb zbG?q;$hF-)1hAQG7^}psSnk&YJBT(Zr%0Ts7)02@<)h^~Hr~hyO+2GtbPqLfPaepO zbetSzfv@IOih?Z$m_xc$-Yypf%)#!W)|Y*ie?IG*5jy#*%5y=4TD){m4R85ShP#w% z}ZdG?K-r#RAOVTPXI8Xgoci{c)vi${U8)JS z(A&t5HMU=E<&;e@$glRVsvPQ&r|VvO0z+u8SIsu@2Vq4Aa zoB*R3Tf1{c8_Qm<@}MIGWhuMjqi?Qe?m3Z{n`!79X6?`RB3IhQpKgOY%)|2ByZ;n}(sjLRrCdcN5b>S`jq&}*D`MpkP zG8octG>H=aKHt??H0T_%6`pxJvAzG;CB9mG%{H>ybOJ&&o9+bi2D9*ekPN#6|B5m_ zuz(j{bu4alV@f}M6EK(!$oy<^^$(60Ir);j7bceHTh&m+g9tWWSIxSci&ZE$#`?Ez zuJk1K=dCKxyzaP~QB=#=fA+ zf|gPvXM<;Kdlfy0YvIF42Un=winIL)yAfChh99^Sx&p2K^Q=HE9ocsa+W(wgGv$kJ z3D&k4&=g?W2M9-AQJyY^ZeE!^6c^#dTF^+*6RKN+*gHhUDNKe=26W(lE76zB(@V-=KAh% zivYvs(tj$+@l|MNwgHy{$G?Gc|6iT`Z)oFNMa9LF6BAo;GwAAS4_g^lJ`yA+Cl?SB zG8_{Vb2>+Fq+CD5b8OXppO+n|8wPNes&6aBDXnfLepLD230juR{}8l-BXsmWSLVC? zL(sDPxkbRHDXQgA9V0}L_x_=!+sU%l&WJEJx1Cu3ryLdZL)~%nw z@qfp{dOnztB2#Dsx6ZIWgnOJ9dJ>2;)o*dKN@>OrTbE@Bm^KY~S07k(34*StZ$L2} zTl^~@8)U;eEw3*Ka^u9(oXi&+?}n||{L@$4&HQS#I5q_UAW1CF0nULTb|0xEi^=Z`$g6fYgK%y zR|yT9f?v^NJDqUIWC5+QI-%5$;YNd69+o^Abn4dk6mpVh{|UVOk#h8_-(ZN`@PS( z?|+`_damEI{}b8lwbx#ItV!YF2IebJ9s$>P75^@jkZmC? zEZkQ-B~Fd7bnAA95s)Qx>n}%YHNTanyq5j7bjYAwXOAJxRudN z@Sjk>{<5U&^3pe#wI0H**qMG`r`ya1JV8bKHiHVJo?A^kC^Fu(0}OZD>%^r!?j)hx z+zUEmFYsqf6vD}+&PegquX(*iv1#_{7}P1)z&*DAo4>XwDf`Vw_4 z#zr>c6~Z`oFLJZ21ryj;zB+KZd;BON(+_#x!pXD_8f@KcA-TOvs}nGTw6*p#^KN+# zs8P}V!TPPXppw1GJyV8By$_3o^50fqpcEg_mlEqWn{*X^?fuo=0*!cVx8_iicV%)IU`CY{MqXd%^iq1lwRE})#XRJpuqxQp&lrOx1ZbLrqJsA4+0$57yUMWt@w zyC?L;hEBjed{MYO)$}D6x_oZx3+2Tpz0Sbi#wz)gd1?^u$Pq?dT;sEy(r~-AIS?qURN-pH&)+nu>%Zk^ z@Wg42yi!-8{k*!gSw;>QV|nWiqOf_sWTfA@uoM-9$CY3=n&NCuZc_qJ${^D00WB_+ zb9U#=jdYtvv%7?PefW#kr_VU?4U@3q z!v*hJy8NA#uG~J%%j+bCYIrS2Y@NUat+=osn*I4A=a-!{e4@V`;wo)<;8Vfgl%&hs zV7YSnhi>GTJ&XlHUQkl`;WebrCZBUFFrp(BMFSOt7fCjh#p3&TnRN8Gr#pJXx$hTkA)%5A zUHn<0_f3`zxu;L=MLs+o+kl2$ft-DUCjh-)Dz(^2hJZ#$I}&R@KR~@veOkKr!CEzK zne?Z_@h3A7=NE#aHkIlA2*{Iq;9=SmNWVV}#Ga;5r^+mrf9P@1tSzX+KjX##hVr}ZCU!+%0b|1sR&@6rLz z{bcLn;sPi(SM%rqA4ra$!=7V`TSfW-;g#RGpOP++kh{`c@tPw=nyK$JC3Cnu!Yb;j zefV&1s~;x4_%Lb_1neUGb6D5RaRPozEa&_(Le^DfjrvF8e{xjOKUkNlet^FBj^Z~X`D;Sbm7Jwn`zWzTL(x=Tu zQCV|-_qf)c{ni10@(&irII7EN$-Qw_IpbHd8c>}4H%|W70v`qPhob3eu(7Erb7EqG z2FXl@eX8&^Va>B)D$V-;j5Op|ek1zA>Z-=7BGeG}VpTIGb*H%eAGYd05ip=$faCxF z*z+IFX2?vg3%An41EuL72>%!)@Cp4X^h)_j%}5IBsP;4Pmi+Pm>aUl#zw1xBRb35X z%}`!Lh)LX>!z;y+(*Dz3(zD;|JWXt>=@DXz`?DjNRNRo0k{A2K8>^wMOq6N(=#g9h zqvH%w2fn`PK~zHsjHnFzA!EB{-G6Vw6!~DZE^=LrNWUv{8c=IjkVNw7WfW) zubB^c_d~R`X32LTaF6*H3I-Mug6KB;Cd9K-3F1-#d&EI~a{CmN;90P)Q9}nu zFBeZRP~sO<7EM2O{WZg?Yn~RuY-%$>L`T|WSO}M?LnUGX5;oGzXR@lg=D2mfthPmW z_XZ2)a1w>n)FK|=!UOylan#w81(V`45lQvT%^NrF^P=}$ANsDL&io5{|Gd9BZN=6$ zuWV)T$MxqJ)#@TekGGx-QZu&eP*;c|6sgQcjeTjWFT!Y)uZc}6X*xr*+dGv&lWwl(&{SgjWT8iHBJ9iJrY$@DbUKFZ98 z6mB4zABfKaG){gQ`4Irq)fxrc`4f@|_^I!#dKT2AMj^Fqj;~i3hID?($npEZ>5<_z z=d{&!3E!d3o;IK33oOD_e=Mjrjx6zIh5`X4T_hdUGK6and?LjGD1vDt6}&}nG;y;- zOL8kSp6w?BCrgy4ln#I+;(hfOSa$_ye+|+6R`}U*_`bFD3B#@$kf)Bq+vvev7!Ly! zD+eKLc#=2OG7{-o>vKyDlswBRn2vk1cOX#wbxfu@#j0SVYGWuwkZL=u^SBcH5N2K= zRkaqI4-t25Mqc~eEau;FZ}#ICq3vckKN}9S4b;bh2 z+KD1_%TBa#gX%H8LG3!w4D0P-oBgije6)496UIHHr93Emb9g~wq#|`<(@IYr^vsRe zWT*pxMOH~M%AmD14$D_NWBFqEYoBOQEL&MTfruRESWK8B`P<8gAiu#;5ud`4Knsjv zMp#IjGC)T3WdR~^ogtnWoZK=CwYciu%5&oN`5%$7`mmd2VOodWS5!O4}j*{`L7>&0ovTr>ym~LdzeT1H+G=aXjfR-u-+m7Z2{ykH&0`mz5Qa zkjfSoV{0#X)rao<)#XK(+-YyxvQx6`ymqV=hg=ND%`;69z5uXY+_l(Xu(XC;AAP?g zc>~cNvsAeN4)^UZ>aE75Dm>f#u3lLh4pmLs>$*F!S0y8rJC)FMPY(y0DAFkw{aM4( zEZ#!wJ0htZDgD*X!)eDlAA;M+hKk?I=hzRdc})<)i!Na|0sbj=bj+byLlt$cz+X4= z!|TPsYgjYzsr`G<2gX$`fV)dhG6Qa*hxfWz|KqMU6i~>Z9ZTLEt!?wI+Bd(>Qz4JL?(#*nQ0mF;>Zk*brD4G}TjTS2*>2SCl2{gPH$G^Z z@b9#mKP;zd~d!HYW_@;yrY!Cjs za3c|U^bb$OxS0}ziS)k%pRS-ZyFz-AU9Ncxw>X@zBV?Hp?e6@rM9^26D1Z5+T9=nv z&&mxi6{rh);I1w&zugjWY!q_xJ+8cce*2;9?WF@w38 z!%NOB?WVeMG2knR4up!iwNz2vR_VE0a%3eH7@qpf7Le<=JS2MzX*B~^mta$u~-Vl(Wv zM}>V@gC*llZD16RAD)QQIyCFRQmRe{d22l6Zg>98N$ofm?MqxA$9m@ZikyW@)u?#3 zd^`hhB@eAlUD6>xx;XRV%1VwdDaX4%Ig~4XO)$ugUts{Qx{KE_0{;lb`(pssATqG+ zG73($&K>n#oH;d=4J%;3hvY_xzq_kmB`hon7)Zq2DYj6&D8pvtaA3&gSJp$rj5)S7 z@*+ym&r=@l7DqBud$0jjp2lB{_B2`SH8o3Z4Ywq3Q3QEI)@b6jrI=(*$Dfc~(ys5pzH#3Y`ORe?(`O;>?H(s=59sB$&UlH^>fZO}`$NBLIX=Uh8$nSY zhz<%xmM$KX*fr^vS>_v$3vQiDx6#C~zSdlKhU<6caCbgjx%n$XEs#Fz!`r?K8b5ou zRUewECO$u^;o?wJzm6ip40gsZUZ*! zL2fraPU@S+b4yMHP@*5$cx!OEspE>n-zN4QDy1Ii3>^qLJGq+$PBTt_fGZQh?0o4D zF0gv5%ea(dAPs71J}9G%Fc5L+;>@ATs*;yosxt_%T+84DNaB#=0H?>!jlWDscPj0= z2E@f)HjayJ$iXr5Z%nzS4&}NKa+wYTBV63d&f4zQ2q84;ZlDBf`yXk`A9t%fzVm87 zt}J#gA6z+`pyb`B6n&5`=K{;mArpcgvbGq$&rbCN`_#7T-wYfyRHCuX_MqeTco^VpkB$9kC`q*2u8zl3{H-@GRfb{D4 zbwIH-91Cq9AxV$i@_7V$75Tjh8bZ`SUnjfFNr;*uaTvdc?Ws{6 z-XLUc;UO{f@ymfU4bQw3ti_@WgfVH(y(^%JhjJ_7qeN<>t@*c2yte>%07s18y5ysh z^ji3GGIyL(sT4+!=x$<}PBM-Y^d);Xz%u{()r4X4o=w-qdemgmc^d0RF!Cxd&Y}i@ zsf?Ix;c(l&y*ewB&w=gkjm)Az<_L`cSau#Rz@BPXAu~*|pQd0dhfcuPe5lp0>FMW1( zCfK;ipJKK!^=fM)08yCme!OvE;|L7aB0Cp?(TyOX;6nphVb-b^J-(?ct=$0?St{|v zYvE0shVadQ&JV+rfA+531%BIgBHm+>qpF>9F`mdb39+Rp1|T>IROOpZHnxYBG+bLx+2>7ZfB|7e7jF z0H`||Dk~2J4Eu47cG}QP~|JUfJXIV*laScf-yV$ zjE;{SW>riu|6F+nQc|no-n|D8oEoATulyVuERK!4RfC&OZ86<>Q`nvp*`)SpSESyJ zL2YA|^&ZHt?e0y$zT&i3RfZ{Re+3PK@@_!%p>EK$jZKem5I4l(aMnrL_2?+}@9c34 z_gcTiE(_2n84K7mOR7+4oto8`M#iju<)@aH;rgN@B8Hu0i zgobdZJpptt^s1tG!YcBs{#Zx-8$Iz;7<)trycI9vcyQjwM%Ae4-MkF(jY3I>3nP3- zCwmCSw0Nu>4Ia7_Q~*IPr$ZPd0_$qzhox)A4UZqitDT#`X8-qj=1>=sC;kco`Ug1@iRc)|kkuSS^$ z0CHaPLto_$HyIE5xmBy!RDYL53tJe6MvIFTyKDT1S>}zaja4f83R&Nl@ILq$2;@4a z?7q4}gble<8(#@-N&;qrF3FrQRWZw&!3!A~bHgZK<17Pe_u|Rw>we2`w*w=0MB~$^ z{7d0XK!V$-h>yY2fykV^mxhwKk__Y8V|g52Bfe#F$i|}f@YB~f`e)+8%#FrGqe`hZ zdDK0^*$q6GNlcgo&P&}|D=3~ABByqP*iR$pmLpcC3{szVu4*%IK&cAU=Ga+kR!>r1 zcvr`~jvcR~Glphc;ok=#3=E!kKh6&^$q2OI-fdZ6w$QAP8XFB?*D>t>{#snT*ws>o zPe4}nr?q=6m)(bb1OiAJej@)AqeIUF6_d=GeGS90o<*9fV+;OlU3qp=K@U%E=;Wd# zD@{|!r0sdLkfs#MefYb$c=eI(6|fOLB_wi=8lgV2LBJG$*Ng8f4v{7@^TsRKXP zQQDtG@)$*kjEx$<%j-4-Uhfw2RYSv&k#Fpcao_k=1mxLm9*p_c^p5%Wz;Z}sK-ceT z>|Lbns{q0LJDU*0_GGKMqd(h=-I+t(C4mfpR+$dLUkkhrjk{=V?Tx*A2|1ResBVji z{ZY$nau@f7(a`r2xS}Gx7(l4Np91`GPafc@<1`4Z&<#wyJM_8Vl;=WK4q;ey_m5x) zuRpyq0RumpMPY1bJ-K-KS;w|ibZwMU+2?ljPcHMR)Qku4ZRM2=t{8TC;a@wHU&0B!!ZtE;Pt z0avVUfe-5{L+B_O)kfneyugor^jn+zu&|9dMdXz%k9^*vtqN$AJ$j2SqMkO z6#_B|Syg+TlU~m)tu=Fh&dzlMj9w($u2?xt9BcEpWtlwf0glY6Ln z9}p^*((#b)*zW|hY0=j^$t@Tm3Cey2Uu;T6T!L-ObCoha2f(POhG>BQ0R=fc*0xxr z!I;!T4#fh|RG4@<5>`iomb&v` zL{%!h`~fMMB0-QNym+7LS_l48*Sj604H(J0`L9328? z!5gT-$9N9n$Ob{Ls@b@?5UmoX8cUL6v?B!K`ws@!R=nngc5WgFVsveK8wp3TlEqB95vezrtAB2{dw#IU+ z!Qith(3WaIJMAA6k%%15Cm6_)COIQuS}cv@j+ib<-g`Ya;D>I<$yu;a zY4N@=dw*(w1xn+9s`8lMsrGn2Z@j2tlW;sHqZRUFd`b_IT~SKPkMZ&pP-iZwq8CXm z$*@XPJEpz0UI9g(%6efppB-+rk`r&0&$t%>WdtsZwNDY=a?M$X+^+@0C#elwi> zfaEhTvqtt)upd)%GdU$9DQoG#(y>%mqo{z4Or!Knz?!ch46G{7GSKI5^--%-Y`N@O zJ459LUZiC_+BJcWQXle*N@-;#m_z&sdmdKrw+wJp7mh~Q)^$K+EU8XUX}J3ErSR%z z1oD$;RG&ryG@nVWkmB^`1P3Qk<+-{=Di+q(8uoq`(Ek))i5h^hVl^yIoucVg9ub?o zCsim|ByEG6_3)u1^|hPl@*#9Y#&9L`9R-7I?N(HoWELJz#1$2hegvqpm3-ffTpmA9 z@4Y+Stz*ifcZ40ai(dr65gu*Oo@>v43Wk>I(FncrKRljAb{PwoLUpwx^E&>u{IW0h zYsWETvoT<9>faIhx=p|hY(_VKek`Q(J~m0FWWZa{!f2=-8E*q#(u52`%eBlFq1djO zGg3pvdg=1!LQRK!7A$lusHuA)`a^8tv zySvyA*1L!-x-F65SqIx9WX#M_Q>%pHj!nsP(^-V3QN1m*VzkAL@mt6bwm0m391H-X zR98g3IaId%CkGfRW~-{x7vvx?=jB((rLJ}DQ_n86NwBfJ2kCx|NMo?^k}XsR^KFm* z!VXHPW<`jdm*9gfTw^@N3Kjq>$xEB*nu_VH@EQB!hyQv4AJAdzzKIbk>s)4D`_*SG zAh7kz%T*e%oOwhYtq(nZSvA!i6Sd&s>aC@nYT!BT9QX`3$WOa>paz!V{>$%4&at1{ zsw5V`7>o6v4BnYEINfwpe&QVNaK~Rhntn0+7q~a9K(=N2;`_p&!~bbUx~kB?nszTJ_2a&UffdII5;-MKtlF~^Jl)>a!BCvI1ZMhxy? z>IZlPcpK<&L8QxslKu$d-HwI{lRzu5O3ji zw@_XqNjE5W;Y`kPax8ZV#C9JJy9*cDy0^SZ-W?WyWhY=-(V&pAwc#@3KHy+--*lnf zt!WO)Kg2UdAEyZk-jBinyCuLSAw}oO-0ZL^QzbT-Vuptdcl94RVf5Ty8AegU^Gu^_ zr&OmAzuAayxSzKX|7vKGDb9Sq6kjiv3#u8b^(eXTBy|S0hN4x(5?O@9%vj{4e8@v? zXjI+xZ>D$V&1Vli)H;G*Tp;SPo;}a1SA0-a@&a+n5|&Ca2UrN3s6wa7Y?O7u;=H05 zz=g?q(L}OMbGWjA7zLw!h5cqTYuK0Z`g&!#xqt6(%{_gKa^N^-fzsr+@}S>~BoDfNp$1$h)J+QBSWGs$^17B> zVGfCv@9e`Arn@AnrxgYHSupf@P&=R}v|vs;e_S9^Y@BwbfsmVQ(IZq=(bE@e z!%-o~;h>ptaa(WQpW|$5Tz8;LWqaBMWvKqdGkrnfiVpg%Ha#N&p)$encAkjtbnqxa z!21FTb^xzc1L(y4=J<@!gP59E_LiO<++Zj!KP!tQl167JBslOkB+{PAqYiY z%NGn}I$R|P%KRA|;dgzu8WPbe;81hFB6z9ozy$2;X-^_4yG8R3lw;@V zEY+{Bn$5*F0-c%sEj3w(H%{vjbT`Wm10rR3?%{khg>6o{{LPeHUhd$McCU2uPZ{3H?8;~Z7&iS6;KerY zKUq5OfiIlKbuY8bTNGgk-7^U&7mgvcM!6zZS2+M3ccB^9osT}^8IZcN7~D?+Gl;tx zYS9bpWEc;tMk=pA>?y2GJIsS#p(U}7BT(Ot z1E66^YhcCrn>MBwNmd$?=8HN-?TKJ1df)r0h4tt6@r6sWg9!a`C#z}PGnc>&(ZC4b zj<#^cCky@JKte9wlB(lP*rxR3kyf&YC+qF7B2M@$n&?~%J&Sr&8Qq~n&Np~F49PzM zzG5~Bu(r7Pfb|CQtLw8FZQc>okjxk!GZnB~LbXgX+O#H%11A8W@R?-loD2J+9r^Kl z#ZWfZzeB&SZZ3q=cB~=nIt4m%Y%+I9pQA!&4?XILGA3MYYxWGhCrl2@8hZSElyraeX(wC!-himt{{`upxpp) z(}^Uo&t8oXRKjEEmGFx#Vad=icD%#X-16(CW4sTkbsdxK3V`$Bd@DRSK8zmO)xv-q z&P0ftGVX{*E1Y1X7U!|uCMLCaNACC|rT2&eT51R;TkhEZXHu3W8NAlaZ>4{*P<<}h zwO}pU2qjZ1xwf|VF%Ja@qASR_Jlqa@hPrEi;1zR!+Ks_LYfo3IO|JdzU7aPlbu)=| zCz>(kCbk7B7STA!cheV!w=I!7@|tV9g#+-$Qgb3O#nH~W8heFi;)IJWf8$=@Q;+tA z_v{L(?bLH{>Fllcn`qPhyMR6SWB@0#l68TWa0%6J9>_QaHpuo>qs+%EE!y=SvAtzu zW_+d3=gKZhkAi>qt~v(~Kk!9jfqQunQ5|O%u{4`hH4+l;t>QXFB^H&3@94K3hFv88 z7KX7IPzfg$naRP#eB|d0b!K+?Sib+Q;#HrRw&y8zE=RgqgC*ygqO$vu?A$QZ2##Fa zOdW386dXADEC&;o`(?*ce1(brvete8Y_zskfPEIw7u;XYTq5No(`GPB(7S0h({3xN zTU!51>Xuh|?$V4uT}vcv-F6q_wt;#{U8ns5%htqLO}padwa&P2^>N{oQX@A*Y&-8@ z%9ji*`HA2$)Q}9S58~uydaQ)jE?HY=B|s)Zat)@m9-sSsyR6O@LuzD1<=WA_kvc)r9|u-lYn#=1p>>s>Hu-5A%Of3 z={=gasWTXeKxWO)qBgefg3vFI_j;gv~VJv&v=w#@W{QsY2236`ROY$;z*# zD%nlnd@1lMawNML=vUSfj4W~7nsWp_Db&wr(=hakdSI!YV6tXjZtyV$oFiI$G{Gdj zZ)-mCuizewd%!Y#EKhLIRsuUtVUp(_k@Za)kcnb5htUY(ouS*CX9}Io>&+{|_CnG5 zkce`-r)68}3EYC%{$uj?W3KKiq-hi^Rb7vT%CPoaR9uRPWvpus$;b*XaDY2_$Q7d>%f;CbgD5xdt4aO8?t7r@LQ?81roH;Rl+NIxY zr}LoZh}ZmZN%U{X*kLm;cjn0Aq@CN~*K|+2l~>}SNkG31s{fdG!(pgS70dYffqoSr zkRukG4f#=B`0vgUwgZy_BViONFNCcKRiwMk*Xbp!@BraUv(C}N$#{G)Uaxpl!ptj0 zy28corwtBI1#bVr0{Cl?h5?Af?J2jE*;ai@o-}HpFClxPz?xwgFn;E>++%I1$l$Hl zyf1Use3QJ73!zSe0YpDHJa%mG@j=Oo=X}M32OA^+jTYo}9TG~MN7pWI9Hx~1^80EVnJ)8`s zFBzI07FVCJSaC6y+O$`?%>bKP{Ji(9tEbD!H82;MM37;zrAxAKVMJsL*OA(DiL?=9 zVK1X2bwCa%OO90sMc>(tg{|J&c*5tO{AAy)f8~K$SyQ}IEti&92WJt^v^XUVjO>uI>(^Ms;{-Clr=E3Dq zAq{NooS)jZ;lGrRF(E16&h@Lym=A-NJ~SPJ9XIx0|JVxD)s@r;tGG;qJT%mm`%m>@ z>fcF$STx$|pds;@l2QWaMd;=KQtYOGoM1gX6(l%yDyaE12)wJ}!G9@TzzUi1KUzhv zDt?;?acbAye;^L}osu=|DZQ1O_}Pf^tX6MHMetU`e3XI#blJxQvvqXuExpZE-VK2F zbIZX&f>v5a{k$fsGod#zxODRl?DhwPflYWJE7Sq1ai)Ow&_Mte1NI<~AZJ9GcRD{} z;JR(!<_J;`Tp*dd|J2j#4ghhCQUMu_58D|DRDlj?S4@BvLnfOc)+&~ecQ<^ z@piE6hYp`ehUMen53S#mLhWutRRsg>G{_g;a$!&>w;EE zI+{yR9T3{~%#(ZHn7wbMro(~Hp~S!ITq3B5)2UbzQ+7LV!riHs~x z{9)qP=(FZY7|E;w-+ocH*(>keZB4LC+G2KZ@#kdp2q$LJlzjxv|CoOwrPEsA>3jB< z;?m6z2rL=|1I3tq(DNgJ%7&M(Z=|0aP!Tc>`U5h3G7{75Q~S5PS@2qh>sBoPg%*y% zK~dV#?~6N#{#kkipPfMF7cZsR^bqz*?|R*@p*)i08J^c#i4RZ6mCn&PKkN&jMw_Pr zOO^eRtEpNJ?&0^#?Xbg5pGr?Yl$Bz6%Q|U?+ldq7#ZEq>r9HmR--z6RS7H6>=8%0A zXa~^tU_rS(G_68Y>Z^lOrN2Mzfof0>Ok&on0S?+N{j1?&hXeQvd8g@hYacwJ-aCsB z&Et2wvNsalsWo{yR_RNEcr}^ygRFw^@)*{h@;B-=%?(RDYmflYZi9AJSwd}K{ybpN z+$Hv%!e+rWcBHl+rx{~5FM18a4}Byt{lrV_1P^FWp)RJqLLkAC)Ly04KI8e0tIj12 zYh!0N@vJ`;9x-04m~tC(RF>qe^|h%JVS!W$H_f@wP%5mKO$oZwf3j&7#&T8KcHM$tC5~;kptYy&GA)1&eR%dQt#T|&81~_oO7~n z@Rh&X6SNN>>UF3zL|adKi~X_jv~_Dph{BgiYXfjU&XS&IMdY(CJS}AnlnxfJw>glc zy)Nl5EC;aQ!AfIIz;qL%s%5*Lh?<*EZrcY3oaC5xsgr;ZSb{veoKTa5IEH zygoyLfUvxk7qaeykx$*Y#WKQ$VUdmK$5kvZbL2p_Id~q?m`JV^>aa5NqTKi&)*#q zM%ht8I3f6kG8Pdk@R>W_92+3;X;YtkuJk5Xd|0z0+NsUfNj+h+OVrzyk^2qwzeEP zaIfrm=idVcJJO?OK7TR(p5yi6z%e8%^x}UR`2WQej@*>Ax`%db}&r1VIfy8RpTT0 zr3K!~BfI1Jz$KBG|8oE3A0#BmJ@Vf|>y>f;li|wH0sOc0P2T!|r~jVa@c-Bm1o#!n z@qg*O|3HjoR)2oeqkm5Zx%%1vt!w_DdZ4U>AP{XrAX}Q`m{MM;%bgxoZWaIY847rS z``$>3{we*zg9kto%UOmgGo%Gv0-u*5vkb32GKm;MAt+uA*ZVyVn^11oxS}QS4RE{( z_;<<#3uLt!Sq4=2d?NZP9i0WmJg7sAl?sX?uY?EYwzT0d6LJ*0c}=pU)q1))>g?*6 zu`*%#v~zclm(fjalZlkHo)^jH9xVRq6>i%9w4sI~i1$kOlUj{6>}WM$+w@@|sY>H^ zhvPjAI0w%%l!;v;143t|SW4SyzCY_YI03oEZx{<2{=SlKrLbp7DWvhaaC&dmTyhWK z#;ga9qL`o`$x#=)JR;i;PqPd{P3!~GHT066w>C@KGC-fKLco2q5-gNJY>1k>45U4z zSQ0mAJo{`u|6ES_M`i4?uwIw6K=m6zG-Tb5C_zPd0cvT55BRZ1rq}N@yMCL?uSa~l zqiVPL$CtejIaiPF)gM2fwFoEl zJePX2Y*qFiFx|2JyofGZ?`3d|{2mfb-N>*G%DLCAoa;xGE0J9! z?+CHAP43?H3mS`UYYm& z_L#^VK!YcrL_0+d8a7|+J~p{;k_Wz9Yk|T_Gj+|Jjm&6%)S9rVWqsuO-@K{%;KbEL z7dJ1gX1|Ladj&6M7$RG{p!}~cG71GeMf{IyOQNg$!QqgE?&o2;8cGkccz6^oL~V1$ zZfL1gi8%Iobl1k1duzP$m@tzI7NnKLC{FL9(n6$vOIrK*!e^H>2WeU1&3bd4#%Xdy z(W{c<0_tfX-I}hbX~(`TL|-&^Skr?;jVo$@l#)LmgtR~}T1x>wjV9_z`hu0_bLivh z-eTwwU=s>RnMOo?$55vxz3gSn!C#9l&Kxd$nUQ4B#|08pG~tU(O)%1G3)%87T%na0xfX=ThTgZHy5P37gG)eWt-6vfA8qkZXYc}11lpuzeV2W{nF zF=`E-II8WJKYPx8cM*h43|=}HYw!Q+l=S3*Dey^C`elG-&RuK?mQQ+dHaksbx!$e#J!Znah3T$RGTJaH7TYnPazhxgP@N9oYKb55Q7YvW@e zXNXrHFOK$WU!_x`?C#+3G7GLt0>$&ZlR*~?FhdtEmfSH|V3n2R(nNizdIPUKit5Qd zzw9^s!{`~#<4Qev=PZ^4OPa0MN=&c5I&*OYQ6KVGXhvmBQGc=?u6nbut_EP77XlJa?8K$3Rj zjNV=L-<4{){Sc2w+1&$Z+`v>_x6%Zu_*ivnb;aImUTv?h*Uz`t#_-7(y?riexlp&I zz7Ls`1RYW@^H%HGipK3I$vEKZ{RmRnA$v~yMSx2O?Tbuv^9417y5e~}kOnEWryi`P zgtey|Y@?V%9(qd;A3y=QcEIhE8|ErgaH>n6;%VNBgc5SC9C7fhN{fps94sWr!DsmQrq;c9fpe8tbD5rH~Ib(ANWU4eUsYMZu zrBt0WqyU#?-`;r8BV%h5Y_&g@`q>42+6i1H;oSU}mM7GDr<$7Oo;trD0+%Q5d0S-N zf}<~k#&Zn!hmlwNS*cB{4iG_!z!)_*H&@*sjJ42RMdX1hA(oZr&7KxW)@-JlT5tYT zNPfcneF5v|VjDAJ>0%D<24~olCuhtG2h95MFRJl9!1UB%KL#+2oi;KHwd4*1^3S^x zT!oHaY~jG+4713CxfdsZoE%M6BaEC@B*WWyAI5w$#f&>}Epo||In@FzhqzNaexE7M1=q_FK_6i)-TF-g9K(N3iE+|K<*1|{uWPU z6R$g#Rkixx6P(rIcx0zC1UsS&0~D-`1$PU4(BKjS&#JN=NBtBTmTp^#e&>^b{1~_= z=gYglKS5%PS0>BAFO|Cg8{xW=3EC%8w0tDFrJ_1UJBq;9ReD1G!`nRSs+ig~eg7-I zY$+xHaB1V5@wMQlB=5uEx!;qKLyT}TD1?}y%Q9SOS(>R}D7Jlz`zpNd8+mL#|2Xl* zeC&LIDy&@veg)1#lxN1PA_jb}ckGuj_cr5)&l*zCr9RW>l9;7^-qY3!$pJho0#(qF zq#*kLde~nkgvK(x+2s}0CRY=C_kt(=?9a6KSgW#p1vIM4k8^=7WrF46YPhM65I1~W zFi5h8s*WN&p$8oLNweP&%(HfkjHV0}hAgPp29wYxbPSg@k_saO>9kH&5jbsvjQS%; zWJSRMcPewz-`5m-yrc%_fjgId{#fs`2tB~b%rb%2+*|XEWntw6zYhv6iApHTIZSes zdU-x4J3E-b+@cmB3I2B<|MB@w2UEx!L4JA2SwIvtAi?_f=;)y*6 znXL`vUd+q9+wNYWM8Mw$UCHzG{2?g2)0U{-Kxm%9r2;osegwOp(7j?U2Q{_&NXj=! zYhp`mqx<$2(89e;$%J0T#Tt^_Fl<#|iCD?Pw+5=%)o9+dr1s?6KLl4G&k@2g-moJkk zb79+E9Zh@dW>@?tfl37Zw5qyg)!sT^qz76n4OR>IQ}$44fmednE${~Gv8g&Mvw?^) z)q;1o<==O+HYR^Jjo&|1&73*DV)*{ZziJ~!&4jJYxna#UA1cvAdGa?F6@e}iHD-V1 zHShy+)BW%>&)!#8xSKk7+281lDHzgxc|jo-nP75YX^K8m}I{S3Sw9ec+na zbc6qLbZ>rGppS6^t+;bQHKmd#n*n~?pn8bR$6~O7C^{yr$QImNfi5RtjBOm=V zb)f21Fmh1G9M>PiTzEVpIM1TcLU@h8YNLY3UW{#9~lUA#&uKQY~lVSCYuO^$B zy4Iw8BYN#`o@)l}fhX`btqK?l1z$TLMAv%a0Q?|^wKUV#5bMVCEKt|I8gOe<(k6HF zv<&;VID$5NPCIwBhN|s6VXoU8%B9s|N<%;zyc16+i;Fk7?OK|z`!k>{qNo`cHtn?y z&f%ZUSTa9Tz>`gjqq;ZgIOb?9`c|E>i*mc>5Pk;wp}WeGw5C5ve5F&s*Kb8HlT|ancI|xZPS6ifnj6xd8v=G*3A=UFY?ISK4h$%esbn=j=1LHfpK-j(P0)3_ z-k+SIeHTTG<|N)H#L6zrhsB?sNpU2lVLE+DqrU!_>)4=Gq7uKAfHOr(%_@9M^MxGikGSJiw zeiLw~u7-tqC^&u~et)W*z#nX(oj~sXGQF z8t^=u32>W(qYK#KHU}fy241kI{U93-BBDc^UY;vJGz;HZxZfZYGBElUsR_LWLQ^d`04c2wlkbm8FlWSAkig}* za#&y8dpdfHN$r=pcaD?ECa}KgU_fuR^UQYpBbk(Ig(U3n4m;UKJ^^dCD8 z{c3$WK#MFYZzPd(o%F{8JJ0D@&BkhbLJt?4Mdqi%^FHc(M!64a-zW+57&ZwA$e#=9 ziK=4H4~JSJ#$~; z{7;pjvDLkE?_O+CBdC2UCe}egk11>1VDZr|U&mb+w%dn#6xo|Z7IlV$zuq^=@8>r^ zGgz{IrSIfBe+={#KJh$W1sL+qF<`!Nh|~V4UK3udCu%Yu?yc5%@y?R#@j6pH$<%29 zdyzvfr(JSlWZPG}FYZjT>lfv_BMZw#M=e>WZ)u|%lw?(=2aDdJ^9QUhRiL!;s8!mz z$!#GsF~>L?1cMXFPYg05kY&tBls3&SeLTa+xlhrB5Eale#AQ>p4+Q2&OKmb<)w?97 zSG<>`QH#XHlD8IRWa{lH@IR&F{>Ux5ZRd<;@BOueb&kOFCeT?y44>QwF}U3^GlV07 z+vQ>R+at0vdu&X|X&~<&5pGy@mlv!g0x;ZeUhGdf2*Y`O4rtQk$QlfsMpZ^X!Uyhn zd0NL<+VEjpLeJX_pfPwXA{GL$8_V)Vb={$8|K6Pi)y%1*(zVr16WKt(UGGb;>qe(n z8!(R7fhY@Hc36kWLCmrV-c138nKH*h0# zX?g@Zgl?xietB~KU0>*6Efx^3Rs7i_+@0a{6y4!$J-ANl@x4`$$zQT2Rc%qGX02=~ zGRU%GRvytxFbNd0c0-@PJfQ&Ft99r?K{K!so~h2eUpYv+CNjK6P7mZ)f|z z`i)snYPP69h!c+2T-Su7Bb^aI7ay(u<00F{f0A4=qE6;MkFD*rzqQv#Z&?(~;;5#= z%u*xdb|`OmZZ_ z7DUq-ubi}Ro=#Rj+SfPZw1SV+q_ORhfxk}gLA2PXx)TD3Mw}*Bc^~6eKhS`PxNN6D zbYJQ4f3`)p3Lw8Xy3ezuyZ*&G+sXn^fm?0q|Hs~&hBcLK?V?dj-IkV?S~f^$DT+uZ zs35(T3L;IU5eSfgVCVxS5HLW3mX?YLl+w3RdZdZcgd#wKB}!+Aw1Gs33L!uU5keA3 zNOD%t+TZ@pbIv}`z4zSn-5+=U@d>W1%r)1Tb9C=`2k%n8-K^SBVehj-jftPK-rtCN zv=>>$QZDn243+JdnbiHonY~$OTCp3l@?NB$pPOHN(hf%J2liu!hMn>K;mX50c|_d6 zswhP5A=C?T5La~KC^WxwHp}&XQ3*NYMMRU+-pJ19EPdf4bFtHTpscjo#>Ct%WHbm{ z7^~-pHH9FIfS3rU_IYg0rF?4NgF5kib68&!qSXONL%6-#NbmSFILZsn#fwajUw|XdPJC48UQkchHM7LW!z_ z(yX@LlG@Y9aa9IRE~5+u+hwJ}e*{+Ex#A#sn^p}ps2p109Z8EK9VjWw1q3)6*!O4U zAO?wjoICXhHJ{df z`LJsVY!iatCW9M#hrXgWf0oYoK_)_kk@%eY?l(lOD{LJ2@bK0n(*dqI#c9 zg>vnL{4VQF4}79lV040M*6|;s@7*D^daVNmtY7Qc_B8lW8V5F1bZ{`CtYYbcQ$Nx; zNrg~GxO)FN1&i53{_7IN`^#tq#3@hT@h7{#xZ7-Q029c0`uuV2e-~!of8lSM$~B)4 z{gt!utN-^mEz^J1r*Z($W5mG7!_Se|eS8Wf+x_H?*?|h4(NTz@1u2dc-sld{<>-I5 zw6Yo-8F5=|a%$~9k8`*Oq<8LI`;q+^KT0ZZzL_=zw2;rcrlU@~)cRb@3pBm&D+Se8 z)2U`>n%Sj%1F?V;93O7YB8NwP1fbV2|B0=c=q|ezL;( z&kin$4k|b9HRS~y=07itTlbU!G>L<+@tQyVWf)bItfbvDhVoUmB;buNFYUNr8#s+r ziAmD;e5kLm?T%Z@ovgBJ=f>U?RqZV@{k$#0=!b~$%=3GgTS2eCk}+P{X%}{M_G!R+ zoBJi2mII6LgVR0%U>NWH?J>m&f$pr13cO)IbEkh+PlACX&c1se=$^v21k`L=z-O-n zw#f^h)2ILa#E&}>LEqw*pgn;;{&$Vj>)Q*@!!^2p1xP(lZ1XYeHxTbb?n|k4f3*1E z6049#sA{IrdGA%D=Wjf7)TbkO2OZ&!(!n z^_q+41Q~bgL)pXCK-bqA8$sBC61zZG5uqfaB>kLL$+^HjRDWcw^tl{X;^i!JkNd>B z_I?Mv@KotoqI(%auY0NpON(-GPdBe_JfhjECtmukfow{HQ6r3}SQqy^TznAs`a>_0 z66`_aZs_)<#Z>dKx$uIbo@dEob8g%xUfnd!&Kv%djteUW%de|sXmA6OIMe%_FwZ>^=aMvU&R;srzxVLARQnMFZzV_1=CcmL>FZso@=UN(9txoct=b&2vqwuG8S_|d3g3u=lkhk<1zNV zK)ie?f4%rm_DwbNf3R;JO*$|b0AfEH3_jy?A+VukWY^+1woLKNP3U1$7d8UwrXt1o zhy%A!7^gC!Q4oEf<4IoI-K#d7@Wj1QEy-|ofiUT668ED7*iDP+mQVaSV|OjdlZ@@L zr}1_+12lZeRg|OE5)kFijoYrVAFfOrhCun9b;n0lx0Hv*U9Ky*4Nxy$253gFc`UKr zR`KOWiY18{*rj1)S`C#XtI)Fegf4j_8=b=md8La^E6eoUUxan* zUtlC?mI>nq0MPN@{()Dx8eq{ZlbE(oQWzNmo_S^K@01&@!bVM~%Vye?*JjWavo$*a zP#P0&xLMXkh#Z=2KH3W)&i;UC9Ls2FocWmZOVPTjI!9dKVe6kRxe&B1Fq`v?@2zSm zoj!1;_-P(upYjBFN5!pt#;eIhqj&(flEhdyl~S-6c)+yhKJ9K2p*HYKeR+O4V)RmV zR_*sajax*|Y*$aw3Xzt=J2FTl%+4q{@)6W(hT8hM$HvN{9+7|=4{SzyRuZd1axWvx z2@5l$nS0NWgNk)c6?b!NgeS~l^p&>wA^XKE zFKV}I{Q9&{VV8#sX2sy5MOp&Z(xbljnAz+f4dS61gfMYgX!$4UddchFp(Xs-7TFF* zXRe(R!XFucgyRC&HB}ir_pPP*sQb)s^m-?~mTMdQI*PH(&gm}LP#AkPaVXpJPa5TD zMf3Qk>ikOO_Eq!u6rY~g^Qk}q#zl(k4+M{%O9K!1gStM;LXx{YhPhAdp0e)KNXN+E z|M5_@>S_!a;Od=3=h(-)>I8)ad3*&7xn+xm)ozM>>N?Q#^H<~@PJxa1v0}rK6l2%H zYnArKTLsg&VLnkq`N%M&bUWN*@}XwUC0Jtlgw=}X=jfYnfi8Li#KV?k2vc1v7;DTQ zS{J|^vR*N8u*ghc{9Gx1vx9c|rZO@u=x#yRWh;vY1oPQ6s*H0D#^2_w-e5UjJcP!r zAcKpnfNmvyBX~DwjANwkT^}JO==J5yS*!RH#S^)1R%6H3-n=hH^&i+UOLl*$3{jZ1 z_yBEwAMtZ#TwKt3jDp9DYQ|lQ+!8F$Z{^BZu-fya{f!oa_c2UdDuaaX_JH`%Ywkf-&l^?JY2;9IY!MiRPIz zm$sU`96IN$W_lE?&I&u!urWT!MB5zUie5gfQEUt0=VFfShSKLZZ-oBE&D}=#?Ynfq zi&W1kWaR_UA{vjJto^<7(r-i6OwH=L*7Bsc4^~hP0%N#<68!pdt};$RIdc5md+XL8 zB1|$z7@PY`AymQ$3x<1>VfBuZZC@Y@QpYF+JLHHG=5h5{vZTOJakP@q81*dHL++!P zTwUT3%Ud--HLS$>(`K*Jb%t*Dmmnmp7OpQrl!Nt@jiRa;3Cb8RkIr6hW^S_U7h^4~eJ>;Uax7IGRw%1ki!L7KJRqkge^3=s`1D%7G^O%0n6be>MtVF0~Uscz=Fik>st zy{RtummaI}iHl8(6{vj0cm#(6W zg$CYp-NnEwAHC$PtfLYB@3AwW_dk7&E2=o$e<0ljRaTQmB69XpjJ;3&(l!pT6DD;9 zJC&bwP__$Posm2osZYv~wS2ti04d*1O?D`IB7?dU?R!ZdR+na4X%{hl32RcX}Hc^4zF$c2-sZNilRQ$)k~Rnv!!mn8sZ^ZS>7DYzH~`js`hR7VV!o2>pMCu(IoV(lH=ADLW=H<_zCd@HE@<1yuX^<2+qZ9@kamS# zR!=S|dUt86l=+N$>@~nW`|894{w4aH*C5oiJ4mnlaPNuC-H2jX{=a^AP~+uS{@3_x zICjthz1HNEl+4Tb1&Ci%V(eB*x9xK>2P~?xTGjd(XXAiei8a%1?2Uu;Smm9x&D}*= ziw0H9;-!Ae*&_X!`nYx8Sqon&DGtOdv}Q?bF>4fLk?pj}UFcd(G0({(vXe?=UOQR%VRFHFqZJ12(is`VFvyA{`_|2$KaoEZ) zYd;3$igkcI_*Yb1(zBh_@D1gKzADxVKZvLA3>AFCX-$8(<_ezbpK1(w;J)}SHsY^h z4dWjYO&ufvoPG6UWyFlXa&pu z5X=;BvxAwep}wA8{stg|#>|v(qE`&U#^>;%V}t;sPj`2JxDVi}Heef4NLW0xNh)H~ zxqF=svg-%zgX7)bt#69{aKkF}O5^t!SlaLo09RG9&P(Y!=NUE+@TJx=!QjnfC{}(2 z$Ciz>&CjUIU&DfYBXaJG1spTA=>c*8(OzTv`9c32TpUxA6Kw-UG1KQ)c@*&a(ioEG zPq&6oa*PQtL*Pnu=S^v_gw;5AL2H&G>^( z`!;^w^K^)4Z26b*)`6c<@T`*Zd=Dd5zR5SfwXei{SL$4ei|N*1tk>l+OaBShTJH^6 z2if>p>!9E5Q`H{Z3CX|thQ$oz(t4}Z>!iZ_lo-WIYlBC6xw9q2X^8+`^0Bl!& z_J789eZT(rbcWRoerH;txA*?#pO{Xs^eqlnQ@+0-s)q)C(V$3A_uoar6XSI@CcLht z`d1r%A0sXl#hv zeVXC6r*G4)9mD5$9^ zKSMWurH7+E)`!yGU*U?jFFN>SWA~$Rs)G0TysBF+eaFtnKX=<0K2V+~d0Mz};jfRS zXaR2@4_Ycuzx3eC=U!Ljyk4?~#b}Lvx`A>!n_C!e+gwvaojI+&znbvH>iNU*V49Cf zqoBdqNwGdMXyMN5T~7DRp@-L|I>%qr0k0F*;_@O(*jd3{Cs%^2=grPS_`qKTt*hTf z_w)xCZ%q4Xn}_`YW`I*w&~djle3->Q{BCQ~{eC)Ic^;T#iAG+p!F47(1va-QY1tWo zg&C}`Kb}8)-qy%(rgVN!+VH~H8s_Ig{@=eBX(dU0){Wbz1p=90U^sv6c(UoQEtLFU zaWR}{iSj1$ed9DGpb^Eb$fkhFg7r{?^{0c?u)jqffF9V?CWmbmf^uYIPc6@#ws=3B z^iQnVKTZ?$^A=q~2K~Qc#X{>VQ0Y3Y_g=NXP(nlogv8V?rn^`iEmh)0hT9c6lmyva zyXDSuJ^^FB2>iXSX7_QAdoMYjKD|(ZNItc{`S;2n{AP6knYr(R;}!d&jhQAVDre&M zEG?3(2Fgxp1_T`5gm(A8eNkK$G3pP5zHKR)sZ+z79fHW$zri3*A{cO{B@!nFfSz=v zk6#EN11-mwug?sw1?Rz8{z>(c_xH^Q0kX*6YVXY7{AsS|&c)N9TZc8;rm+LV>=xs3 zM(IK1*nm{M)cJ25QCT z7`y+){Z-rP9-P+Hp4a^Dn{-tIQQM|fuTr2}&aK;Py_l%^VX)>gw6qBPCkOlvPi-HF z?hNYoVNh|SpK3^=89~`ixzaOi@hys7kt@Ahy&5lSp5|LXPvn4K#cjOBTVM4JXDOop zAHbfK?_E=%pj%&$C0`)6s~z5#2mq1>EZ@9cw4z`>alzKG+s4Pd%Vx4q=Oc#G-UaBa zDTlxF@o&qIA2YGA;JO0|`2oi@B?ySui@fLGcPG~aaeRPjvS(}O8s{U>0_bbdS1y3S z7<}**B;62Nri%|u6wc=(Wxo#C3#ac4Y-Q6F&0L`?&WnVZ!Sv7po{Jinyrs3|)wMTaY zlX$B4Tx35QhCwuoSDAmmBpY!7L?-s_aU)RK-Kbnf}%p|X` zz3Oy81#;;d9PG-*wY3N+CWno_xL!dE_gp(7fy$|4->#6~-GqmL7u$D6)hckB3CU{fX&%x@g2 zt*qHCn~y9r`R-o~Au};ppyj zZ6V;2^`5;?_h2_XbG#DNW?_Hn!sAcON6r_?-}Udxb7(vF^!)T6OC%DjU?MpNmza0X&$8#j5>T?=mY!rSrs zQZSLGjj&C2J5)^1z}&+$xkr%De(-=-=Cv2-?CQ%TuKrSM^r+8(4kb#`;?}?&od9~l zPKnq!RoyX8hDYd3i!L0U3^{#1Ue&-CBGOSj8OCsT7S9(mOx8v1vW5VLbsK;Y954k^ z5=uW1{Zt;R2}V>XvEw{T>${wr#+ugDZOKt9l_XK+!iO$A8}I9iP!mD@FRzpiB8Njq`vbXEkiSog@=fj=e)X=nqaOdeG3ljB9`4zg=Yt6 zll-lxC&#Z^%wSj4QYogqcgQWwwA11YwJTy8^ktPWdk?Aq-avA;GZu2=7^|isB`}lJ zYDOia{3JS0kQ_d9`4CG-JXx2f&7=24)6v!Fd24DuGM~s9BEn{&c=GYsdWu8$RohB{ zVa)b;e03=4SjS`?x;Kzx0ye4*qjK|0#^JLMp<-jBFum$+pryldM&PX(uM+i-K{lOa zuS>Fia!j;>m96w?zFoWkw7*+?KBVQ}jhcOxjhY+^w6YAIgRfcT9G@s*Uf4ZptV`_j>AzhV|}rl|0HWgcg`1Id$NLDt|Nf z1*5t!4G+e0{RGWGMf}*j^AuGW#)47pYCX36u?^50$1a1vW#7 z!dOzYa|SBK^bb;ZKloiiezv#aZcow z;Faygj6G=LKwWpL=LU5`3_UEM=oJG5w=uHi}{Um^6_|aUK4C-#k|U$ zVfR@ZcsDFjLm-tCkzXUo*(+AUE~j(Q^K}EZm0nm(%VVrls*gbhngw9S7$*J=9mN=B zbT_Cid+1BYC$=4hpJPAZ9&>cbcBDe{ zXIfbeT99257Du~*$la4#6P3Mp!d!3m@Rr}g3ruIS)h!+lzJ%UukIcE4UTKOnuCA_a z#T+PR2R=cStR|cTHdI7DL3PL=Mt8KF(5rBwM(mtPLk3`vH-+7Lm1d=UwmBT+Z6H4YGv3~zoM~v{ zZV)7AihA^RV5Tc3N}A0AUa{DRH-so?b$i1fuLy2k%dDa9>ow`DgCKu7>{JaU*3`m3 z;*Z@q#gTM}yP9_Etz-(3M%~_5M`4>D7#x?;NO>lAJ|obxG(fhd62Qt-yt&>?P^Pt> zj^CT|l$!7|SV<^{5RKkU+v`x{X}Fn9Qjfp~R*HE7p4LK!ax^R7c-Mht(m* zhgcCIyVk=!h>F%{CSe)KCOS&xBU9l>{)F~_%> zd8xwNNGkQ6acPL2DwSis^-vnKv%c>Y1z&G1<_9-BDAV=R_wP_H3cS-kpjGP$2btbU z_0RyfPX?x5g4TY37sPh4EMzMSAAFbzS%KCc%{dOAb8m(N|H2*zzp`E?)XoG~$woI(j?7DTa>uDcgp`3&Tl@eoWE-4rszf*%;iD*@OaI_0# zUm!XL7Vcs0NrVE+rv8FP-z_9~qG#PUr7w=Ar?H)=sEI!OC>a&Sy z`o*$g+zxxx?g5BjdS$1;bf=?$`=r>@M~`EAzLW8*4OHE1OS-DY*ghLAb+g~; zt~B+9Y(MwdH0}jjGrpWi+SwEe+eg2OyNE7ZQz7{5#pnj>ZbxjGi$dAh?t4KzK=<3B zx`jvBPv*Ks5b&>dnh{=gpY?m5$5Fal)t%7QyC#-MgdYesV^X8K$L1znJ;j9ARg2LG zFny4jGt?NKJXiNU+K~U8y_ct!B!;Pr-eShZbM=gDb@|4-=iJC$+jNAQRP?S~2)q+h zhheSvPFmY~zLWy9iKd~nR|VTd*FP3&vum}%XSFU%OJX-Y)Bnd44IDK0=!Q6r^MbL? zv-X>GQ{Nq<_I!L-<$44L6ps{5bn9h5d5{z3ncUUH_MIi|86GcKSGbD@LB7LifRnq- z6$aTcNDnL_R80k;m;lZU)SJ=Qev9_0A0__8v`z|_#2JQ&u(>YTv^#jk ztDETR4Lnof6D=yv^Ih6X726n-6P3>^Mu;wFLO2ehi<{!u5gGi%SuyW&tpAJV$}y*c zi*aQ|dA<%30(jKGLuxI2Y!07`0PlZJcA6529nI@7IppyU5gtl^j-fbav{xo09ekj; zFkzW3ha}FfCDZ*4!{1qcK2f>K;V{L!&|;TluiuHe5;j&Z0lH#jKyIOGh}zA&0lMYU zEP)BHUPM0L^CN*4y^}dTpfVuhN42l_R;NWwc0L}$0EoC-h{kxCbV14F>ZafIztoPt z;^~|(h&?Py^B?VQaeAP6-p0plOTLJo)YEIWWq8{t1$`fMD==Bb%(#HA1eQCU^rJYV zp46?(A@m%~I-^8)|BwEctUISPj@|l;dkEC#A~&8vc+XwGG8+O=NO#of1I<SP`|IsZ2D31?Y zB`2`}C+NI@%djXY`V%M(&H>`fl}!LFC)c+FKkqtk7ArU<$C%VbbI1J{M061|iB@AA zVyI`Doi(@35p zu)|taVffJJtuKQ1rl;}cpf$Ir`ZrT==h=Fg-E`XYD4eq`Z8BbIO8a#b^;&bnr>^$v z{v!#TKXY(Lqm5lp+x4ZI3#&g=5i=V8{iID7Hja?j ze9UthH%=V7b2(e2|1@0x-z*&O?SK3ZsoaYnf0eX*_QhEHm+L;YC+FIu1`S;^@oaF_ z@a_~$R7Bp=PSCwW|M?w{_>op}NuwWxM4_3U84&qb4r}rl9*g6V$ymuKHc8-RpyAP7 zu!wN!9oln;=y)&f2y3Qxl&4GU@schgIoOI}*!T}FKOfcbrAF(qYpYXG?3b6(v5pWY zVwLVd@uFbV-z1G_WQX5@#Ln}0K0Ez}9?wKYSWu$P=>&}GCFSN}e<+%f$1*4ExwkwH zHt`Zmjo7rFr|sot=?0Y5Vl1>$2gwZ*4>pZ4Y#8Gqw&5T2$4-K#!Eyn|J8ZgMLln(U z$!C)=lZlzhv_H_EaNlC}6WPviY%mWk7@auXGeHi+L_`31HN*JTj(Ag89U3!z9~1CX zM|<$qRT@r0OAr8#aeaby=G9p`r#9mP`LOCr=Wb5UOktvqaiF(x4^r%pg)6?prp0Be zYn;TPFtBeBx$DN4#Uz=yM5(Q5_Iah{ zhVYf^5&CW&F+Q~-*y`tfDZ8#Tfd?@H|M;kSb9#|lNiDH+Rewwv&IsMnwoeYmv!d^- z=2EueGcm-7c-4_)u36>J3_2J+>%^8iT$DQe<*UNWN)_1(QXgy_8C#P!#p@rBZpg3@ zMpziaB5HxsmOvHZpB+g8a-4Zxi!JzvslZ$M`?D#6-G?=TD{Qi9vj}dyOxzJnom}=T zLWc}zA~`n)#TNl@Uc3r`*yANsE3hrHV&adAZ6G|=|2ft%cWH7460&3RgGP_jvOQv8Eoyiz(mr8#JUD z3EQkpKku9XQvB$bp#T+wPbq#5VBEcEOR(?e=dny#?Ucuk^AP4k2>J|tHX;oPr2^p~ zu2Yk08q>A`vJlwlf#*(PR7Rr#kYr`Z;e~SXrIp_L2Jw~0OzT-+8WZADV$R`SEfx7k zv=VDPK4&fu(laj-Db{Vn9ARU;xRFd}NCmqYE0@rz0V-nA1KDL9el?4R#h2C`_c`(2oInm-#>q)cU5qi-A*#qA413&Mn5 zHRhf~Lp}k1b$-KRZcu5zAL_4$)sTnJ=!h~tZ|ROXX-8Epap4#v6=LD#RmC{W?(SEmR#iFKd%)e*NM&_e9seW#jw zu=LfHWUsddv_~j_^i0SD9=)C$c5xWlDveg)Cs;AW5zV@`55d~#^5h%V`05-1Wy+07 zNRKJz@YI4(J}s-hDOF&J!J=4PB^@jy!DHujR|=+@GZss5Lmj2tO;!rFztH;oa5{YF zU|qqZu3MKj%^bR8%30UK$oJj zVqTdd=wq?ov{1ACWr653aLo=@(sm=R{foy@bh5-$BsG7}&*4|GV;S^N^aOC}JIi_5 zj5_ks$r9U2H3qH*3lzyTE?y6#5tkC<8td}-qeO=~%s6E>%=#8f`h@E~|4GA@c97YP zKg70~i|#j5_RhWp7;S9^U7B?LwlQh0n*vDV&OwE<8Zw$WVN*n-&8EAvx62OoD7djt z{^68dz4;|Q9#>tRM@sfc1}_qnu}OLH%_UXP8%cxB4v zhEbEj@};Qf{*s9jaA#lh8;Z;sYYR~=Y2k7=pqN3sa*(91xZ#Ers9)V@hgmZ=>s^ab z77{FMy?ScKpZA=qO~RFV)pLJu3Ol-v&{y`#23zjyBx~UgFv7#E6`m|p2({+yZnS?H zV_;pz@81;SgGsMK|69cvs0S?3b(8nv-Lu&w05)%l?KyNOK_Ot)ku)Bbu}FLCC=2XL zI`p#hV5rg2JD2&4{^y9vRgY>Nuc-lD+GUGl;-T)do&|Hq={*FLPlIigqpkjxT=tNx zt+12em^>I!z+E}M#3}s1-Nkksw}teI^v~u|2=;*_Q-mvCH&;IkD)OP%n;)o%g)-WU zdaAJd>S|IsB^3Yn=wT@W3P{K0@RGd4TW*Dq3-~VNs%6`t#(w+eYOGL#KFIGuSI!$| zgF{@ps%~DuVoxeI$r{D5(yRI$`NCAk#k1AHhr33|(xOC&1=pY7SW}z6Qmc(km7j&Z z1%RQgq)6ESYP&bbAjO+DHY>}YGKqlv?au5R|R{iI5)UV=|kY z*pQBPqx02W*a=n^%|`a3&KDxUNZg}r76arMj0)rqz^!#hvWGC?n_Lpiw}C*p>T7}E zT7ODGUwwDfFKd=zI8=#~95}>^@~)^{boA7`<$cq)OV-mUsJ~y5t|70(0HGQf}2Zqxf8`H+ky}O zho!B5?1tQ@U`0u{iaiZ+J9}6FVT-Y=Q7u=0@LF@pxX+)k*`JSA>b_(IaVvD(DwmA@f4A) z8iu+-jx>1D1~oeL-_LF*upCDcMY*+d$1TKN>aQgC$)a*D9)Y+1%^3E-&#U`?!BPA# zy`@0OD136{rV0pTa9t*qkhwA`HziZPg5EC+WUH(c7Jj&|$f_eESDpcBD?RenAp+_@ zpVY3&p#0MRu><^H`do5txHkS*ZuEQw@Oh_rXZ5l|Gzf*e-jCDX$NS_x~D$Ax+^4NG1-~!+l`;2 z>TnPBW>45C&})gU+8xXT7twJE{9?90v5Jx=d6?(x64KnA%BHfq!qG_rDTI2p^fOpG z3AR_;6fr*7kXIStRir%Oo?wk|QSco$=kPMJtOVqRixpO*>Q2q?j7md#Fh;~m&&Pn` zHT6r6b+k4<2tWml2v>MPX{%x86s&(dJXW8mQ?hbrV~K+7$a z`trzzdh$vVV>zkMJO%X*U_Y<@kkRh5%VzU-CAUVfhSf_T@HYk5jfLrqv(% z%{hi(M+10QYCbYMA}MN{s$|;Akm?mLxk--s=Yu3rb!CgXDL%^u!WRD)_%dcE^aema z6lHrDf%^3OzU1VvunnLn-L)v=tvwFv<-I^kd}{a5wwz)ZzpyV} zFNflvQ4}VIn^QF|D>T=$ooW{3frSgo`bSjwM!`r$zJ@OYfQN>~i|JN~MXUHFt0Lr^ z_mV@j8@Xj4kdTMREU$4^_6tyzLt+0i>SrYSAcj1pz;3b z0%P07@;O&91gqve)iaRCLC;pGRm~zf;gdk79ir1Q$&0{>J^dlGi+%?_=W#S}+oWIa zTbN#chharySOH@xl9808-e`7pV=_JyT?V!20b>?Zt-y2)Ko+HJ7Zx|6NPSZa4vGJ` z8RH$9{El_9C!6vT%I|T`d{#hl?sm&yS3t4hNsiJOkrYsq$c~JP&>|r6?vVmGp~EGJ zSqZ+-tA4@&+{CU;)1X%Nw2W>6jVOHEZ5ONsgNueIcxl&KIly6AH0iJ_N&c$N1B7pV z;kzzdYuP#Na%qS%x*Yzzd^bF``^k6i=;WV!M>DSb7KE>MTABBoN@l>S)h65)UJhxs zhosb6+lZ;XLF3yf@uIB~De+Ps+hb2jX*#CF^y27v2^4Eh%_{wS zzMMC@m>UsYM=~E3z-okyhZu)mhj&i%1g$p!w`NPG@*f?)OAM6Q^K zL%ls&(6=fGlL-Q1^KQIVC_-BBoh(kf>%fEr>S+tffQ1>%-9{eRcG;(U%@tQW)h0BqRd!OK1mtPm~dpY&nAH5J_kT|g;>+zXdj4eGv+!`jkA~? zF_m?wLy&;*NmbA1L6#7t_K#3*4E1J3AcpCRVHV?$)A-quNu~=X)?=3F?vX~7k`PpS z_%Kx*c9HbJIFy&s%$cpksT|2#2MSV`4a*IIHpk0873>5O%Usw*zP(}d@R0(Y=DFIb zBf6-rX?_d5n|(uM#BMbKGNgIuXA0j$z zv}n%-TS4Be1^GFeI|ZCP(;ca`iM-xuV%>^-Tfy8@k(GsMvMw+toR?~`k~+~4GW=Ya zr~~*+w>S;u>hL39Qxm{9tsM7eWdb(}(Z%V0C0GTyt&{s!-UFt9IVs5te;BX2;~fj| zhYnEIf#|PN|4zYZp8cQaWk!A<=NWqKx1;||ZI#BOQ7w^+`oS3*IvO2S(kJMeu^DuHWs)n*C29h8Yqbf^1^3Nb0bWOcKQQO=22{dA0VjNZ4R|!`i5npQ(%C zBu^d2N*br&tb#tz1(|tBOH{hGI9x$be{FI^M?mD=1iKR)~4-@>fJPy0b^h&Mkar~qFtj^gE|>yNN~csJ?uY=j0hym#Q<=F`CT@;bMoY_NH)VaS zcu70y6a)QboZPV^zG0;w5&dXb((bD|_(4_>Y>m$)E%T=~7}hB79u*`|&<#y9TfJ0q zfjM=mH&gmnr2I~0vMPGf>uqrEln2Zl53<7)gozUXCY2(y{Y&m_3q>2MObi1Y*XU3#Y&^v~1l$Ury`6&=;GDKWI z(Lb~a%FNj#gCLZVW8tf>Rd2fU;={yK*2o8e{H(n_fy}(0=#A1hEE9?YK)i~e8P?F5 zf4|#L(|tt~O=NjK&wBtk8lPg}m%B03r7{zdDR)ksWR6==_1b@AOebz>LykBfGaDeL zEpAAOAHNYN-Uki=2#AQ|AA~Am`*$*OwU;8tbrtvrv3*=t-zVs7O7+yDb~i<=M(5w) z_A>DyvUmH!EN)2hWT{v&Z90!h-~^|kF^giUB*2I!zHZcOA|@8`ER%uThF3T6N-r85XnL&lLu4c?1YpgRsd#cSU*elZl2eAWmGxz85Zw=Vz6;-F~|NJjQNb*>(DY?@6yxD~m~(I^I8K?tBWCtr(r}rh{YV*MBIemC#iqQ+Bi7 ztvD6rHO>tX-pRM=e%Q(%%S&cipN-nR-2U1j8bITRV) za5!pzj|M?H&q|WT(F0_*GRYU$VNNQ0I9{`%^+N`SL+vUJu`bwyG;(|!0&WV1=pY|P z<@ek`AwxA{OX>4}Mnp<=_{btkgE*5r|L1jjvB9*ynKYGd?BqJSOGY5or$_vR_BE=` zz`Cg8{Z3}%oc{Trw@ry9ZbXWVKy0Rnd3}Ae$bV6bo z-@$jnirsk~SZP14dm`L6xf(9sM~ta&nr>D(lT#2mjF!)Ks-mZ`^}}#OtB%JYvoj7K zU6B$@ZBlaWhJtrAQEo55*bQt3i-zu@)(DFY0&@4rqFPUS)a0uBHFsx(4@yd^^NOZ- z_du8-9R{<@7sLb(fv;i3_;Wod#8Ma*56lrX7hqjGw1w0nXy}dg!%Lh$x9*rjU?xpS z4X8FVFv6Tyf=d}@W+{2ZaTJ5W?ge7ic@x;cDKFAQFH$^782W78gMiZM@XDUY;eN5* zj+*cuK>!uie`8>fnq*F$_aN59_Thw{6wqyfcc0NG}+7^DsGaJO{l|?=2+GJX6P(6 zmnVMNM2`99oOq$O*h-vFj1S|b(}7g*VhP;}>}0;YEK=JgqwXV`(+t7K%vWy<_qXm9 zz7oPrj#7J#NX+_%N!Qq>>R_>KrMu5z^m5@BLD+c1{DB>RQY(tWKP<-&XNsQ*O%U~F zG-R?;bVq(iPVQSKWvOj~eKfrqDr>I;q<_wd8cSJ_9c?(L9WO+>td=z(KWEp%jgZ|& z{ouuDSFSN$&F)J z)!m&PhZ$?y6%dR6TM&tViM_-o1A(Xz`5Tgtw%<_ybHxw*|Nqlp``?A}_?HLxue@bF ztMl>Uj<>wEwF8B`492xanRXmE21w*PBF1_ptpgnqRfUSMU+LcKk|kpny&0p5bF3k|G^krw4> zhVIv`WrqHF2qF3~_5Ah3o^%Jg*A2LM&)|wFWl`dJ60W<+obf5LirCd+?KmFzo37E5#0k3~O>&}pq|`uNt+AX9g4 zOThPQjyJGm26K6J+ml(zCaWf79@|wZ+H~hA=7(@$Dn1x@5~u+18o2pmv}Qil^Tu>G zIqCkm-pP43ePN!ef~&^S5g#&KJxPLxlQs?y#JB;5 zCirp{=N{anSuq^+?t!{0il}Op=RtdPg7T=TXSa>Jn`?F zWGl5(dBRqH`v8tzqMSR`Pj%r$%qLnVjK~aPOa(WaNe1y@XTbERxn`TcL0Ru98(ovJ zzmb=SQ&o-mtKZX*xCU}%P@vA!^xj;F!@5A!jsl|oh2h`Z9G2GLdQqAXg#jomm z75>|5*ZrP-c=rtOcoQ&*%>MB9?97w9W&h_vRQYKdk!Z z{Xe_dcix3PA9f1I%{_gs(yRFB!gMopxhnU~?;>Bwy}cpxZ|<{Cf9BrI{v`D{JoEHp zge#+Gt=6kgE`H4Fzxv<0oT+Q1RiCXYzttC)Is5v(eaj^OzPxC$?|i7b*fp6wJ5B{p?P*(+e;pD9p6r+XchSx-u4i{nj%%)Yd{%wGSY+r2dC~!?cI|Zce|?g44boZ@02Rh3V(>_VqT`-`=@zT?;H}cRgg? o-V3Q8K~4g$A{-iXBbQD7+pqq)=0?LpXYis(Pgg&ebxsLQ0PWHwfdBvi literal 0 HcmV?d00001 diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index e6dda23b2..d905a8d01 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -8,7 +8,7 @@ documentation: UG # Create Word Document in Blazor -Syncfusion® Essential® DocIO is a [.NET Core Word library](https://www.syncfusion.com/document-processing/word-framework/net-core/word-library) used to create, read, and edit **Word** documents programmatically without **Microsoft Word** or interop dependencies. Using this library, you can **create a Word document in Blazor**. +Syncfusion® Essential® DocIO is a [.NET Core Word library](https://www.syncfusion.com/document-processing/word-framework/net-core/word-library) used to create, read, and edit **Word** documents programmatically without **Microsoft Word** or interop dependencies. Using this library, a **create a Word document in Blazor**. To quickly get started with creating a Word document in Blazor, watch this video: @@ -35,11 +35,11 @@ Step 1: Create a new C# Blazor Web app project. ![Select the framework in Blazor Web Server Side app in Visual Studio](Blazor_Images/Blazor_image_Server_Web_Additional_Information.png) Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor Web Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. +To **create a Word document in a Blazor Web Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. ![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) -N> Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) for details on registering Syncfusion® license key in your application to use our components. +N> Starting with v16.2.0.x, if Syncfusion® assemblies are referenced from trial setup or from the NuGet feed, the "Syncfusion.Licensing" assembly reference must also be added and a license key included in projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in an application to use Syncfusion components. Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder, which is located inside the `Components` folder. Include the following namespaces in the file: @@ -61,7 +61,7 @@ Include the following code to create a new button that triggers document creatio {% tabs %} {% highlight CSHTML %}

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in your applications without Microsoft Office dependencies.

+

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in applications without Microsoft Office dependencies.

{% endhighlight %} {% endtabs %} @@ -99,7 +99,7 @@ using System.IO; {% endtabs %} Step 7: Implement the `CreateWord` method in `WordService.cs`. -Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web app: +Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web Server app: {% tabs %} @@ -178,7 +178,7 @@ public MemoryStream CreateWord() {% endtabs %} Step 8: Add the service in `Program.cs`. -Add the following line to the `Program.cs` file to register `WordService` as a scoped service in your Blazor application. +Add the following line to the `Program.cs` file to register `WordService` as a scoped service in the Blazor application. {% tabs %} {% highlight c# tabtitle="C#" %} @@ -267,19 +267,15 @@ Step 13: Run the project. Click the Start button (green arrow) or press F5 to run the application. -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Server-app). +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Web-Server-app). Upon executing the program, the **Word document** will be generated as follows: -![Blazor Web Server app output Word document](Blazor_Images/Blazor_Output.png) +![Blazor Web Server App output Word document](Blazor_Images/Blazor_Output.png) Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. -## WASM Application - -{% tabcontents %} - -{% tabcontent Visual Studio %} +## WASM Standalone Application **Prerequisites:** @@ -287,18 +283,18 @@ Click [here](https://www.syncfusion.com/document-processing/word-framework/blazo * Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. Step 1: Create a new C# Blazor WASM app project. -Select "Blazor WebAssembly App" from the template and click **Next**. +Select "Blazor WebAssembly Standalone App" from the template and click **Next**. -![Create Blazor WebAssembly application in Visual Studio](Blazor_Images/Blazor_WASM.png) +![Create Blazor WebAssembly Standalone application in Visual Studio](Blazor_Images/Blazor_WASM.png) Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a WASM app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. +To **create a Word document in a Blazor WASM Standalone app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. ![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) -N> Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion license key in your application to use our components. +N> Starting with v16.2.0.x, if Syncfusion® assemblies are referenced from trial setup or from the NuGet feed, the "Syncfusion.Licensing" assembly reference must also be added and a license key included in projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in an application to use Syncfusion components. -Step 3: Create a Razor file named `DocIO` in the `Pages` folder. +Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder. Add the following namespaces: {% tabs %} @@ -321,15 +317,15 @@ Add the following code to create a new button that triggers document creation: {% highlight CSHTML %}

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in your applications without Microsoft Office dependencies.

+

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in applications without Microsoft Office dependencies.

{% endhighlight %} {% endtabs %} -Step 5:Implement `CreateWord` method in `DocIO.razor`. -Create a new `async` method named `CreateWord` and include the following code snippet to **create a Word document in the Blazor** WASM app. +Step 5: Implement `CreateWord` method in `DocIO.razor`. +Create a new `async` method named `CreateWord` and include the following code snippet to **create a Word document in the Blazor** WASM Standalone app. {% tabs %} @@ -471,11 +467,11 @@ Add the following code snippet to the Navigation menu's Razor file in the `Share {% highlight HTML %} - + {% endhighlight %} @@ -490,489 +486,13 @@ Step 10: Run the project. Click the Start button (green arrow) or press F5 to run the application. -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-app). - -Upon executing the program, the **Word document** will be generated as follows: - -![Blazor WASM output Word document](Blazor_Images/Blazor_Output.png) - -N> While the Word library functions in WASM, server-side deployment is recommended. WASM deployment increases the application payload size. - -{% endtabcontent %} - - -{% tabcontent Visual Studio Code %} - -**Prerequisites:** - -* Visual Studio Code. -* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. -* Open Visual Studio Code and install the [C# for Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) from the Extensions Marketplace. - -Step 1: Create a new C# Blazor WASM app project. -* Open the command palette by pressing Ctrl+Shift+P and type **.NET:New Project** and Enter. -* Choose the **Blazor WebAssembly App** template. - -![Choose Blazor Web app from template](Blazor_Images/Blazor-WASM-app-template.png) - -* Select the project location, type the project name, and press Enter. -* Then choose **Create project**. - -Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor WASM app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into your Blazor project. -* Press Ctrl + ` (back-tick) to open the integrated terminal in Visual Studio Code. -* Ensure you are in the project root directory where your `.csproj` file is located. -* Run the command `dotnet add package Syncfusion.DocIO.Net.Core` to install the NuGet package. - -![Add Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Command-to-add-NuGet-package-for-WASM.png) - -N> Starting with v16.2.0.x, if you reference Syncfusion® assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion license key in your application to use our components. - -Step 3: Create a Razor file named `DocIO` in the `Pages` folder. -Add the following namespaces: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} -@page "/DocIO" -@inject Microsoft.JSInterop.IJSRuntime JS -@using Syncfusion.DocIO -@using Syncfusion.DocIO.DLS -@using System.IO -{% endhighlight %} - -{% endtabs %} - -Step 4: Add a button to `DocIO.razor`. -Add the following code to create a new button that triggers document creation: - -{% tabs %} - -{% highlight CSHTML %} - -

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in your applications without Microsoft Office dependencies.

- - -{% endhighlight %} - -{% endtabs %} - -Step 5: Implement `CreateWord` method in `DocIO.razor`. -Create a new `async` method named `CreateWord` and include the following code snippet to **create a Word document in the Blazor** WASM app. - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -@functions { - async void CreateWord() - { - // Creating a new Word document - WordDocument document = new WordDocument(); - // Adding a new section to the document - WSection section = document.AddSection() as WSection; - // Set Margin of the section - section.PageSetup.Margins.All = 72; - // Set page size of the section - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); - - // Create Paragraph styles - WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; - style.CharacterFormat.FontName = "Calibri"; - style.CharacterFormat.FontSize = 11f; - style.ParagraphFormat.BeforeSpacing = 0; - style.ParagraphFormat.AfterSpacing = 8; - style.ParagraphFormat.LineSpacing = 13.8f; - - style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; - style.ApplyBaseStyle("Normal"); - style.CharacterFormat.FontName = "Calibri Light"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - style.ParagraphFormat.BeforeSpacing = 12; - style.ParagraphFormat.AfterSpacing = 0; - style.ParagraphFormat.Keep = true; - style.ParagraphFormat.KeepFollow = true; - style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - - IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); - paragraph.ApplyStyle("Normal"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; - WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 18f; - textRange.CharacterFormat.FontName = "Calibri"; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Saves the Word document to MemoryStream - MemoryStream stream = new MemoryStream(); - document.Save(stream, FormatType.Docx); - // Closes the Word document - document.Close(); - stream.Position = 0; - // Download the Word document in the browser - JS.SaveAs("Sample.docx", stream.ToArray()); - } -} -{% endhighlight %} - -{% endtabs %} - -Step 6: Create `FileUtils.cs` for JavaScript interoperability. -Create a class file named `FileUtils` and add the following code to invoke the JavaScript action for file download in the browser. - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public static class FileUtils -{ - public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) - => js.InvokeAsync( - "saveAsFile", - filename, - Convert.ToBase64String(data)); -} - -{% endhighlight %} - -{% endtabs %} - -Step 7: Add JavaScript function to `index.html`. -Add the following JavaScript function in the `index.html` file present under `wwwroot`. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 8: Add navigation link. -Add the following code snippet to the Navigation menu's Razor file in the `Shared` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 9: Build the project. - -Run the following command in the terminal to build the project: - -``` -dotnet build -``` - -Step 10: Run the project. - -Run the following command in the terminal to run the project: -``` -dotnet run -``` - -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-app). +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-Standalone-app). Upon executing the program, the **Word document** will be generated as follows: -![Blazor WASM output Word document](Blazor_Images/Blazor_Output.png) - -N> While the Word library functions in WASM, server-side deployment is recommended. WASM deployment increases the application payload size. - -{% endtabcontent %} - -{% tabcontent JetBrains Rider %} - -**Prerequisites:** - -* JetBrains Rider. -* Install .NET 8 SDK or later. - -Step 1: Open JetBrains Rider and create a new Blazor WASM app project. -* Launch JetBrains Rider. -* Click **New solution** on the welcome screen. - -![Launch JetBrains Rider](Blazor_Images/Launch-JetBrains-Rider.png) - -* In the New Solution dialog, select **Web** as the Project Type. -* Select the target framework (e.g., .NET 8.0, .NET 9.0). -* Choose the **Blazor WebAssembly Standalone App** template. -* Enter a project name and specify the location. -* Click **Create**. - -![Creating a new .NET Core console application in JetBrains Rider](Blazor_Images/Create-Blazor-WASM-application.png) - -Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package from [NuGet.org](https://www.nuget.org/). -* Click the NuGet icon in the Rider toolbar and type [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) in the search bar. -* Ensure that "nuget.org" is selected as the package source. -* Select the latest `Syncfusion.DocIO.Net.Core` NuGet package from the list. -* Click the **+ (Add)** button to add the package. - -![Select the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Select-Syncfusion.DocIO.Net.Core-NuGet.png) - -* Click the **Install** button to complete the installation. - -![Install the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Install-Syncfusion.DocIO.Net.Core-NuGet.png) - -N> Starting with v16.2.0.x, if you reference Syncfusion assemblies from trial setup or from the NuGet feed, you must also add the "Syncfusion.Licensing" assembly reference and include a license key in your projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion license key in your application to use our components. - -Step 3: Create a Razor file named `DocIO` in the `Pages` folder. -Add the following namespaces: - -{% tabs %} - -{% highlight c# tabtitle="C#" %} -@page "/DocIO" -@inject Microsoft.JSInterop.IJSRuntime JS -@using Syncfusion.DocIO -@using Syncfusion.DocIO.DLS -@using System.IO -{% endhighlight %} - -{% endtabs %} - -Step 4: Add a button to `DocIO.razor`. -Add the following code to create a new button that triggers document creation: - -{% tabs %} - -{% highlight CSHTML %} - -

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in your applications without Microsoft Office dependencies.

- - -{% endhighlight %} - -{% endtabs %} - -Step 5: Implement `CreateWord` method in `DocIO.razor`. -Create a new `async` method named `CreateWord` and include the following code snippet to create a Word document in the Blazor WASM app. - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -@functions { - async void CreateWord() - { - // Creating a new Word document - WordDocument document = new WordDocument(); - // Adding a new section to the document - WSection section = document.AddSection() as WSection; - // Set Margin of the section - section.PageSetup.Margins.All = 72; - // Set page size of the section - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); - - // Create Paragraph styles - WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; - style.CharacterFormat.FontName = "Calibri"; - style.CharacterFormat.FontSize = 11f; - style.ParagraphFormat.BeforeSpacing = 0; - style.ParagraphFormat.AfterSpacing = 8; - style.ParagraphFormat.LineSpacing = 13.8f; - - style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; - style.ApplyBaseStyle("Normal"); - style.CharacterFormat.FontName = "Calibri Light"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - style.ParagraphFormat.BeforeSpacing = 12; - style.ParagraphFormat.AfterSpacing = 0; - style.ParagraphFormat.Keep = true; - style.ParagraphFormat.KeepFollow = true; - style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - - IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); - paragraph.ApplyStyle("Normal"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; - WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 18f; - textRange.CharacterFormat.FontName = "Calibri"; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - // Saves the Word document to MemoryStream - MemoryStream stream = new MemoryStream(); - document.Save(stream, FormatType.Docx); - // Closes the Word document - document.Close(); - stream.Position = 0; - // Download the Word document in the browser - JS.SaveAs("Sample.docx", stream.ToArray()); - } -} -{% endhighlight %} - -{% endtabs %} - -Step 6: Create `FileUtils.cs` for JavaScript interoperability. -Create a class file named `FileUtils` and add the following code to invoke the JavaScript action for file download in the browser. - -{% tabs %} - -{% highlight c# tabtitle="C#" %} - -public static class FileUtils -{ - public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) - => js.InvokeAsync( - "saveAsFile", - filename, - Convert.ToBase64String(data)); -} - -{% endhighlight %} - -{% endtabs %} - -Step 7: Add JavaScript function to `index.html`. -Add the following JavaScript function in the `index.html` file present under `wwwroot`. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 8: Add navigation link. -Add the following code snippet to the Navigation menu's Razor file in the `Shared` folder. - -{% tabs %} - -{% highlight HTML %} - - - -{% endhighlight %} - -{% endtabs %} - -Step 9: Build the project. - -Click the **Build** button in the toolbar or press Ctrl+Shift+B to build the project. - -Step 10: Run the project. - -Click the **Run** button (green arrow) in the toolbar or press F5 to run the app. - -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-app). - -Upon executing the program, the **Word document** will be generated as follows: - -![Blazor WASM output Word document](Blazor_Images/Blazor_Output.png) - -N> While the Word library functions in WASM, server-side deployment is recommended. WASM deployment increases the application payload size. - -{% endtabcontent %} +![Blazor WASM Standalone output Word document](Blazor_Images/Blazor_Output.png) -{% endtabcontents %} +N> While the Word library functions in WASM Standalone, server-side deployment is recommended. WASM Standalone deployment increases the application payload size. Kindly explore the [supported and unsupported features of the Word library in Blazor](https://help.syncfusion.com/document-processing/word/word-library/net/supported-and-unsupported-features#blazor-supported-features). From 8f001fe572259912c8a9af205dc006b508cbd2af Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Fri, 26 Sep 2025 14:41:57 +0530 Subject: [PATCH 06/14] Add images --- .../Word/Word-Library/NET/Create-Word-document-in-Blazor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index d905a8d01..3b640a98e 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -285,7 +285,7 @@ Click [here](https://www.syncfusion.com/document-processing/word-framework/blazo Step 1: Create a new C# Blazor WASM app project. Select "Blazor WebAssembly Standalone App" from the template and click **Next**. -![Create Blazor WebAssembly Standalone application in Visual Studio](Blazor_Images/Blazor_WASM.png) +![Create Blazor WebAssembly Standalone application in Visual Studio](Blazor_Images/Blazor_WASM_Standalone.png) Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. To **create a Word document in a Blazor WASM Standalone app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. From e740dccac4507171631dd351774a62262c5408fb Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Fri, 26 Sep 2025 16:24:29 +0530 Subject: [PATCH 07/14] Addressed the feedback --- .../Word-Library/NET/Create-Word-document-in-Blazor.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index 3b640a98e..4d8f9ad16 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -14,7 +14,7 @@ To quickly get started with creating a Word document in Blazor, watch this video {% youtube "https://www.youtube.com/watch?v=yVfDlpewbpU" %} -## Web Server Application +## Web Application Server **Prerequisites:** @@ -32,10 +32,10 @@ Step 1: Create a new C# Blazor Web app project. * Select the framework and click **Create** button. -![Select the framework in Blazor Web Server Side app in Visual Studio](Blazor_Images/Blazor_image_Server_Web_Additional_Information.png) +![Select the framework in Blazor Web App Server Side app in Visual Studio](Blazor_Images/Blazor_image_Server_Web_Additional_Information.png) Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor Web Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. +To **create a Word document in a Blazor Web App Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. ![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) @@ -99,7 +99,7 @@ using System.IO; {% endtabs %} Step 7: Implement the `CreateWord` method in `WordService.cs`. -Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web Server app: +Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web App Server app: {% tabs %} @@ -271,7 +271,7 @@ A complete working sample is available on [GitHub](https://github.com/Syncfusion Upon executing the program, the **Word document** will be generated as follows: -![Blazor Web Server App output Word document](Blazor_Images/Blazor_Output.png) +![Blazor Web App Server App output Word document](Blazor_Images/Blazor_Output.png) Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. From 9792ef8341aee3c8025414f23dc461e323be7321 Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Fri, 26 Sep 2025 16:26:19 +0530 Subject: [PATCH 08/14] Addressed the feedback --- .../Word/Word-Library/NET/Create-Word-document-in-Blazor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index 4d8f9ad16..cc5eba8c7 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -14,7 +14,7 @@ To quickly get started with creating a Word document in Blazor, watch this video {% youtube "https://www.youtube.com/watch?v=yVfDlpewbpU" %} -## Web Application Server +## Blazor Web App Server Application **Prerequisites:** From 19433e043bff679c523f20b8072bfa919301f68c Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Fri, 26 Sep 2025 16:29:16 +0530 Subject: [PATCH 09/14] Committed the changes --- .../Word-Library/NET/Create-Word-document-in-Blazor.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index cc5eba8c7..625bbd2e3 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -32,10 +32,10 @@ Step 1: Create a new C# Blazor Web app project. * Select the framework and click **Create** button. -![Select the framework in Blazor Web App Server Side app in Visual Studio](Blazor_Images/Blazor_image_Server_Web_Additional_Information.png) +![Select the framework in Blazor Web App Server in Visual Studio](Blazor_Images/Blazor_image_Server_Web_Additional_Information.png) Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor Web App Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. +To **create a Word document in a Blazor Web App Server**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. ![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) @@ -99,7 +99,7 @@ using System.IO; {% endtabs %} Step 7: Implement the `CreateWord` method in `WordService.cs`. -Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web App Server app: +Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web App Server: {% tabs %} @@ -271,7 +271,7 @@ A complete working sample is available on [GitHub](https://github.com/Syncfusion Upon executing the program, the **Word document** will be generated as follows: -![Blazor Web App Server App output Word document](Blazor_Images/Blazor_Output.png) +![Blazor Web App Server output Word document](Blazor_Images/Blazor_Output.png) Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. From 059b822f16732840ddb49d92968e9f8c99b84e1a Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Tue, 30 Sep 2025 10:52:08 +0530 Subject: [PATCH 10/14] Updated the md documents --- .../Word/Word-Library/NET/Create-Word-document-in-Blazor.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index 625bbd2e3..115fe6304 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -243,7 +243,7 @@ Add the following JavaScript function in the `App.razor` file located in the `Pa {% endtabs %} Step 11: Add navigation link. -Add the following code snippet to the Navigation menu's Razor file in the `Shared` folder. +Add the following code snippet to the Navigation menu's Razor file in the `Layout` folder. {% tabs %} @@ -282,7 +282,7 @@ Click [here](https://www.syncfusion.com/document-processing/word-framework/blazo * Visual Studio 2022. * Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. -Step 1: Create a new C# Blazor WASM app project. +Step 1: Create a new C# Blazor WASM Standalone app project. Select "Blazor WebAssembly Standalone App" from the template and click **Next**. ![Create Blazor WebAssembly Standalone application in Visual Studio](Blazor_Images/Blazor_WASM_Standalone.png) @@ -461,7 +461,7 @@ Add the following JavaScript function in the `index.html` file present under `ww {% endtabs %} Step 8: Add navigation link. -Add the following code snippet to the Navigation menu's Razor file in the `Shared`folder. +Add the following code snippet to the Navigation menu's Razor file in the `Layout` folder. {% tabs %} From eef669f160c4477ee3ad2171578d5f3363211b58 Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Wed, 8 Oct 2025 23:11:28 +0530 Subject: [PATCH 11/14] Added Visual Studio and JetBrain instruction --- .../NET/Create-Word-document-in-Blazor.md | 1225 +++++++++++++++-- 1 file changed, 1125 insertions(+), 100 deletions(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index 115fe6304..d633238e4 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -16,6 +16,10 @@ To quickly get started with creating a Word document in Blazor, watch this video ## Blazor Web App Server Application +{% tabcontents %} + +{% tabcontent Visual Studio %} + **Prerequisites:** * Visual Studio 2022. @@ -273,141 +277,185 @@ Upon executing the program, the **Word document** will be generated as follows: ![Blazor Web App Server output Word document](Blazor_Images/Blazor_Output.png) -Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. - -## WASM Standalone Application +{% endtabcontent %} + +{% tabcontent Visual Studio Code %} **Prerequisites:** -* Visual Studio 2022. -* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. +* Visual Studio Code. +* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. +* Open Visual Studio Code and install the [C# for Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) from the Extensions Marketplace. -Step 1: Create a new C# Blazor WASM Standalone app project. -Select "Blazor WebAssembly Standalone App" from the template and click **Next**. -![Create Blazor WebAssembly Standalone application in Visual Studio](Blazor_Images/Blazor_WASM_Standalone.png) +Step 1: Create a new C# Blazor Server app project. +* Open the command palette by pressing Ctrl+Shift+P and type **.NET:New Project** and enter. +* Choose the **Blazor Server App** template. -Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. -To **create a Word document in a Blazor WASM Standalone app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. +![Choose Blazor Server app from template](Blazor_Images/Blazor-server-app-template.png) -![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) +* Select the project location, type the project name and press enter. +* Then choose **Create project**. + +Step 2: To **create a Word document in Blazor Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) to the Blazor project. +* Press Ctrl + ` (backtick) to open the integrated terminal in Visual Studio Code. +* Ensure you're in the project root directory where your .csproj file is located. +* Run the command `dotnet add package Syncfusion.DocIO.Net.Core` to install the NuGet package. + +![Add Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Command-to-add-NuGet-package-for-Server.png) N> Starting with v16.2.0.x, if Syncfusion® assemblies are referenced from trial setup or from the NuGet feed, the "Syncfusion.Licensing" assembly reference must also be added and a license key included in projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in an application to use Syncfusion components. -Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder. -Add the following namespaces: +Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder, which is located inside the `Components` folder. +Include the following namespaces in the file: {% tabs %} - {% highlight c# tabtitle="C#" %} +@rendermode InteractiveServer @page "/DocIO" +@using System.IO; +@using Create_Word_document; +@inject Create_Word_document.Data.WordService service @inject Microsoft.JSInterop.IJSRuntime JS -@using Syncfusion.DocIO -@using Syncfusion.DocIO.DLS -@using System.IO {% endhighlight %} - {% endtabs %} Step 4: Add a button to `DocIO.razor`. -Add the following code to create a new button that triggers document creation: +Include the following code to create a new button that triggers document creation: {% tabs %} - {% highlight CSHTML %} -

Syncfusion DocIO Library (Essential DocIO)

-

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in applications without Microsoft Office dependencies.

+

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in applications without Microsoft Office dependencies.

+{% endhighlight %} +{% endtabs %} + +Step 5: Implement `CreateWord` method in `DocIO.razor`. +Add the following code to create and download the Word document: + +{% tabs %} +{% highlight c# tabtitle="C#" %} +@code { + MemoryStream documentStream; + /// + /// Creates and downloads the Word document. + /// + protected async void CreateWord() + { + documentStream = service.CreateWord(); + await JS.SaveAs("Sample.docx", documentStream.ToArray()); + } +} +{% endhighlight %} +{% endtabs %} + +Step 6: Create a new cs file `WordService.cs` in the `Data` folder. +Include the following namespaces in the file: + +{% tabs %} +{% highlight c# tabtitle="C#" %} +using Syncfusion.DocIO; +using Syncfusion.DocIO.DLS; +using System.IO; {% endhighlight %} {% endtabs %} -Step 5: Implement `CreateWord` method in `DocIO.razor`. -Create a new `async` method named `CreateWord` and include the following code snippet to **create a Word document in the Blazor** WASM Standalone app. +Step 7: Implement the `CreateWord` method in `WordService.cs`. +Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web App Server: {% tabs %} {% highlight c# tabtitle="C#" %} -@functions { - async void CreateWord() - { - // Creating a new Word document - WordDocument document = new WordDocument(); - // Adding a new section to the document - WSection section = document.AddSection() as WSection; - // Set Margin of the section - section.PageSetup.Margins.All = 72; - // Set page size of the section - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); +public MemoryStream CreateWord() +{ + // Creating a new Word document + WordDocument document = new WordDocument(); + // Adding a new section to the document + WSection section = document.AddSection() as WSection; + // Set Margin of the section + section.PageSetup.Margins.All = 72; + // Set page size of the section + section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); - // Create Paragraph styles - WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; - style.CharacterFormat.FontName = "Calibri"; - style.CharacterFormat.FontSize = 11f; - style.ParagraphFormat.BeforeSpacing = 0; - style.ParagraphFormat.AfterSpacing = 8; - style.ParagraphFormat.LineSpacing = 13.8f; + // Create Paragraph styles + WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; + style.CharacterFormat.FontName = "Calibri"; + style.CharacterFormat.FontSize = 11f; + style.ParagraphFormat.BeforeSpacing = 0; + style.ParagraphFormat.AfterSpacing = 8; + style.ParagraphFormat.LineSpacing = 13.8f; - style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; - style.ApplyBaseStyle("Normal"); - style.CharacterFormat.FontName = "Calibri Light"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - style.ParagraphFormat.BeforeSpacing = 12; - style.ParagraphFormat.AfterSpacing = 0; - style.ParagraphFormat.Keep = true; - style.ParagraphFormat.KeepFollow = true; - style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; + style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; + style.ApplyBaseStyle("Normal"); + style.CharacterFormat.FontName = "Calibri Light"; + style.CharacterFormat.FontSize = 16f; + style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); + style.ParagraphFormat.BeforeSpacing = 12; + style.ParagraphFormat.AfterSpacing = 0; + style.ParagraphFormat.Keep = true; + style.ParagraphFormat.KeepFollow = true; + style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); - paragraph.ApplyStyle("Normal"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; - WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; + IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); + paragraph.ApplyStyle("Normal"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; + WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + textRange.CharacterFormat.FontName = "Calibri"; + textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 18f; - textRange.CharacterFormat.FontName = "Calibri"; + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ApplyStyle("Heading 1"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; + textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 18f; + textRange.CharacterFormat.FontName = "Calibri"; - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; - // Appends paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; - // Saves the Word document to MemoryStream - MemoryStream stream = new MemoryStream(); - document.Save(stream, FormatType.Docx); - // Closes the Word document - document.Close(); - stream.Position = 0; - // Download the Word document in the browser - JS.SaveAs("Sample.docx", stream.ToArray()); - } + // Saves the Word document to MemoryStream + MemoryStream stream = new MemoryStream(); + document.Save(stream, FormatType.Docx); + // Closes the Word document + document.Close(); + stream.Position = 0; + return stream; } {% endhighlight %} {% endtabs %} -Step 6: Create `FileUtils.cs` for JavaScript interoperability. -Create a class file named `FileUtils` and add the following code to invoke the JavaScript action for file download in the browser. +Step 8: Add the service in `Program.cs`. +Add the following line to the `Program.cs` file to register `WordService` as a scoped service in the Blazor application. + +{% tabs %} +{% highlight c# tabtitle="C#" %} + +builder.Services.AddScoped(); + +{% endhighlight %} +{% endtabs %} + + +Step 9: Create `FileUtils.cs` for JavaScript interoperability. +Create a new class file named `FileUtils` in the project and add the following code to invoke the JavaScript action for file download in the browser. {% tabs %} @@ -421,13 +469,12 @@ public static class FileUtils filename, Convert.ToBase64String(data)); } - {% endhighlight %} {% endtabs %} -Step 7: Add JavaScript function to `index.html`. -Add the following JavaScript function in the `index.html` file present under `wwwroot`. +Step 10: Add JavaScript function to `App.razor`. +Add the following JavaScript function in the `App.razor` file located in the `Pages` folder. {% tabs %} @@ -460,7 +507,7 @@ Add the following JavaScript function in the `index.html` file present under `ww {% endtabs %} -Step 8: Add navigation link. +Step 11: Add navigation link. Add the following code snippet to the Navigation menu's Razor file in the `Layout` folder. {% tabs %} @@ -477,22 +524,1000 @@ Add the following code snippet to the Navigation menu's Razor file in the `Layou {% endtabs %} -Step 9: Build the project. +Step 12: Build the project. -Click on **Build** → **Build Solution** or press Ctrl+Shift+B to build the project. +Run the following command in terminal to build the project. +``` +dotnet build +``` -Step 10: Run the project. +Step 13: Run the project. -Click the Start button (green arrow) or press F5 to run the application. +Run the following command in terminal to run the project. -A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-Standalone-app). +``` +dotnet run +``` + +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Web-Server-app). Upon executing the program, the **Word document** will be generated as follows: -![Blazor WASM Standalone output Word document](Blazor_Images/Blazor_Output.png) +![Blazor Web App Server output Word document](Blazor_Images/Blazor_Output.png) -N> While the Word library functions in WASM Standalone, server-side deployment is recommended. WASM Standalone deployment increases the application payload size. +{% endtabcontent %} + +{% tabcontent JetBrains Rider %} + +**Prerequisites:** + +* JetBrains Rider. +* Install .NET 8 SDK or later. + +Step 1. Open JetBrains Rider and create a new Blazor Server app project. +* Launch JetBrains Rider. +* Click new solution on the welcome screen. + +![Launch JetBrains Rider](Blazor_Images/Launch-JetBrains-Rider.png) + +* In the new Solution dialog, select Project Type as Web. +* Select the target framework (e.g., .NET 8.0, .NET 9.0). +* Choose template as **Blazor Web App**. +* Enter a project name and specify the location. +* Click create. + +![Creating a new .NET Core console application in JetBrains Rider](Blazor_Images/Create-Blazor-Server-application.png) + +Step 2: Install the NuGet package from [NuGet.org](https://www.nuget.org/). +* Click the NuGet icon in the Rider toolbar and type [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) in the search bar. +* Ensure that "nuget.org" is selected as the package source. +* Select the latest Syncfusion.DocIO.Net.Core NuGet package from the list. +* Click the + (Add) button to add the package. + +![Select the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Select-Syncfusion.DocIO.Net.Core-NuGet.png) + +* Click the Install button to complete the installation. + +![Install the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Install-Syncfusion.DocIO.Net.Core-NuGet.png) + +N> Starting with v16.2.0.x, if Syncfusion® assemblies are referenced from trial setup or from the NuGet feed, the "Syncfusion.Licensing" assembly reference must also be added and a license key included in projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in an application to use Syncfusion components. + +Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder, which is located inside the `Components` folder. +Include the following namespaces in the file: + +{% tabs %} +{% highlight c# tabtitle="C#" %} +@rendermode InteractiveServer +@page "/DocIO" +@using System.IO; +@using Create_Word_document; +@inject Create_Word_document.Data.WordService service +@inject Microsoft.JSInterop.IJSRuntime JS +{% endhighlight %} +{% endtabs %} + +Step 4: Add a button to `DocIO.razor`. +Include the following code to create a new button that triggers document creation: + +{% tabs %} +{% highlight CSHTML %} +

Syncfusion DocIO Library (Essential DocIO)

+

The Syncfusion DocIO library (Essential DocIO) is a Blazor DocIO library used to create, read, edit, and convert Word files in applications without Microsoft Office dependencies.

+ +{% endhighlight %} +{% endtabs %} + +Step 5: Implement `CreateWord` method in `DocIO.razor`. +Add the following code to create and download the Word document: + +{% tabs %} +{% highlight c# tabtitle="C#" %} +@code { + MemoryStream documentStream; + /// + /// Creates and downloads the Word document. + /// + protected async void CreateWord() + { + documentStream = service.CreateWord(); + await JS.SaveAs("Sample.docx", documentStream.ToArray()); + } +} +{% endhighlight %} +{% endtabs %} + +Step 6: Create a new cs file `WordService.cs` in the `Data` folder. +Include the following namespaces in the file: + +{% tabs %} + +{% highlight c# tabtitle="C#" %} +using Syncfusion.DocIO; +using Syncfusion.DocIO.DLS; +using System.IO; +{% endhighlight %} + +{% endtabs %} + +Step 7: Implement the `CreateWord` method in `WordService.cs`. +Create a new `MemoryStream` method named `CreateWord` in the `WordService` class, and include the following code snippet to **create a simple Word document in Blazor** Web App Server: + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +public MemoryStream CreateWord() +{ + // Creating a new Word document + WordDocument document = new WordDocument(); + // Adding a new section to the document + WSection section = document.AddSection() as WSection; + // Set Margin of the section + section.PageSetup.Margins.All = 72; + // Set page size of the section + section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); + + // Create Paragraph styles + WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; + style.CharacterFormat.FontName = "Calibri"; + style.CharacterFormat.FontSize = 11f; + style.ParagraphFormat.BeforeSpacing = 0; + style.ParagraphFormat.AfterSpacing = 8; + style.ParagraphFormat.LineSpacing = 13.8f; + + style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; + style.ApplyBaseStyle("Normal"); + style.CharacterFormat.FontName = "Calibri Light"; + style.CharacterFormat.FontSize = 16f; + style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); + style.ParagraphFormat.BeforeSpacing = 12; + style.ParagraphFormat.AfterSpacing = 0; + style.ParagraphFormat.Keep = true; + style.ParagraphFormat.KeepFollow = true; + style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; + + IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); + paragraph.ApplyStyle("Normal"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; + WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + textRange.CharacterFormat.FontName = "Calibri"; + textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ApplyStyle("Heading 1"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; + textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 18f; + textRange.CharacterFormat.FontName = "Calibri"; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Saves the Word document to MemoryStream + MemoryStream stream = new MemoryStream(); + document.Save(stream, FormatType.Docx); + // Closes the Word document + document.Close(); + stream.Position = 0; + return stream; +} +{% endhighlight %} + +{% endtabs %} + +Step 8: Add the service in `Program.cs`. +Add the following line to the `Program.cs` file to register `WordService` as a scoped service in the Blazor application. + +{% tabs %} +{% highlight c# tabtitle="C#" %} + +builder.Services.AddScoped(); + +{% endhighlight %} +{% endtabs %} + + +Step 9: Create `FileUtils.cs` for JavaScript interoperability. +Create a new class file named `FileUtils` in the project and add the following code to invoke the JavaScript action for file download in the browser. + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +public static class FileUtils +{ + public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) + => js.InvokeAsync( + "saveAsFile", + filename, + Convert.ToBase64String(data)); +} +{% endhighlight %} + +{% endtabs %} + +Step 10: Add JavaScript function to `App.razor`. +Add the following JavaScript function in the `App.razor` file located in the `Pages` folder. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 11: Add navigation link. +Add the following code snippet to the Navigation menu's Razor file in the `Layout` folder. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 12: Build the project. + +Click the **Build** button in the toolbar or press Ctrl+Shift+B to build the project. + +Step 13: Run the project. + +Click the **Run** button (green arrow) in the toolbar or press F5 to run the app. + +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-Web-Server-app). + +Upon executing the program, the **Word document** will be generated as follows: + +![Blazor Web App Server output Word document](Blazor_Images/Blazor_Output.png) + +{% endtabcontent %} + +{% endtabcontents %} + +Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. + +## WASM Standalone Application + +{% tabcontents %} + +{% tabcontent Visual Studio %} + +**Prerequisites:** + +* Visual Studio 2022. +* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. + +Step 1: Create a new C# Blazor WASM Standalone app project. +Select "Blazor WebAssembly Standalone App" from the template and click **Next**. + +![Create Blazor WebAssembly Standalone application in Visual Studio](Blazor_Images/Blazor_WASM_Standalone.png) + +Step 2: Install the `Syncfusion.DocIO.Net.Core` NuGet package. +To **create a Word document in a Blazor WASM Standalone app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) into the Blazor project. + +![Install DocIO.NET Core NuGet Package](Blazor_Images/Install_Nuget.png) + +N> Starting with v16.2.0.x, if Syncfusion® assemblies are referenced from trial setup or from the NuGet feed, the "Syncfusion.Licensing" assembly reference must also be added and a license key included in projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in an application to use Syncfusion components. + +Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder. +Add the following namespaces: + +{% tabs %} + +{% highlight c# tabtitle="C#" %} +@page "/DocIO" +@inject Microsoft.JSInterop.IJSRuntime JS +@using Syncfusion.DocIO +@using Syncfusion.DocIO.DLS +@using System.IO +{% endhighlight %} + +{% endtabs %} + +Step 4: Add a button to `DocIO.razor`. +Add the following code to create a new button that triggers document creation: + +{% tabs %} + +{% highlight CSHTML %} + +

Syncfusion DocIO Library (Essential DocIO)

+

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in applications without Microsoft Office dependencies.

+ + +{% endhighlight %} + +{% endtabs %} + +Step 5: Implement `CreateWord` method in `DocIO.razor`. +Create a new `async` method named `CreateWord` and include the following code snippet to **create a Word document in the Blazor** WASM Standalone app. + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +@functions { + async void CreateWord() + { + // Creating a new Word document + WordDocument document = new WordDocument(); + // Adding a new section to the document + WSection section = document.AddSection() as WSection; + // Set Margin of the section + section.PageSetup.Margins.All = 72; + // Set page size of the section + section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); + + // Create Paragraph styles + WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; + style.CharacterFormat.FontName = "Calibri"; + style.CharacterFormat.FontSize = 11f; + style.ParagraphFormat.BeforeSpacing = 0; + style.ParagraphFormat.AfterSpacing = 8; + style.ParagraphFormat.LineSpacing = 13.8f; + + style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; + style.ApplyBaseStyle("Normal"); + style.CharacterFormat.FontName = "Calibri Light"; + style.CharacterFormat.FontSize = 16f; + style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); + style.ParagraphFormat.BeforeSpacing = 12; + style.ParagraphFormat.AfterSpacing = 0; + style.ParagraphFormat.Keep = true; + style.ParagraphFormat.KeepFollow = true; + style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; + + IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); + paragraph.ApplyStyle("Normal"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; + WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + textRange.CharacterFormat.FontName = "Calibri"; + textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ApplyStyle("Heading 1"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; + textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 18f; + textRange.CharacterFormat.FontName = "Calibri"; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Saves the Word document to MemoryStream + MemoryStream stream = new MemoryStream(); + document.Save(stream, FormatType.Docx); + // Closes the Word document + document.Close(); + stream.Position = 0; + // Download the Word document in the browser + JS.SaveAs("Sample.docx", stream.ToArray()); + } +} +{% endhighlight %} + +{% endtabs %} + +Step 6: Create `FileUtils.cs` for JavaScript interoperability. +Create a class file named `FileUtils` and add the following code to invoke the JavaScript action for file download in the browser. + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +public static class FileUtils +{ + public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) + => js.InvokeAsync( + "saveAsFile", + filename, + Convert.ToBase64String(data)); +} + +{% endhighlight %} + +{% endtabs %} + +Step 7: Add JavaScript function to `index.html`. +Add the following JavaScript function in the `index.html` file present under `wwwroot`. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 8: Add navigation link. +Add the following code snippet to the Navigation menu's Razor file in the `Layout` folder. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 9: Build the project. + +Click on **Build** → **Build Solution** or press Ctrl+Shift+B to build the project. + + +Step 10: Run the project. + +Click the Start button (green arrow) or press F5 to run the application. + +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-Standalone-app). + +Upon executing the program, the **Word document** will be generated as follows: + +![Blazor WASM Standalone output Word document](Blazor_Images/Blazor_Output.png) + +N> While the Word library functions in WASM Standalone, server-side deployment is recommended. WASM Standalone deployment increases the application payload size. + +{% endtabcontent %} + + +{% tabcontent Visual Studio Code %} + +**Prerequisites:** + +* Visual Studio Code. +* Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. +* Open Visual Studio Code and install the [C# for Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) from the Extensions Marketplace. + +Step 1: Create a new C# Blazor WASM app project. +* Open the command palette by pressing Ctrl+Shift+P and type **.NET:New Project** and enter. +* Choose the **Blazor WebAssembly App** template. + +![Choose Blazor Web app from template](Blazor_Images/Blazor-WASM-app-template.png) + +* Select the project location, type the project name and press enter. +* Then choose **Create project**. + +Step 2: To **create a Word document in Blazor WASM app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) to the Blazor project. +* Press Ctrl + ` (backtick) to open the integrated terminal in Visual Studio Code. +* Ensure you're in the project root directory where your .csproj file is located. +* Run the command `dotnet add package Syncfusion.DocIO.Net.Core` to install the NuGet package. + +![Add Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Command-to-add-NuGet-package-for-WASM.png) + +N> Starting with v16.2.0.x, if Syncfusion® assemblies are referenced from trial setup or from the NuGet feed, the "Syncfusion.Licensing" assembly reference must also be added and a license key included in projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in an application to use Syncfusion components. + +Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder. +Add the following namespaces: + +{% tabs %} + +{% highlight c# tabtitle="C#" %} +@page "/DocIO" +@inject Microsoft.JSInterop.IJSRuntime JS +@using Syncfusion.DocIO +@using Syncfusion.DocIO.DLS +@using System.IO +{% endhighlight %} + +{% endtabs %} + +Step 4: Add a button to `DocIO.razor`. +Add the following code to create a new button that triggers document creation: + +{% tabs %} + +{% highlight CSHTML %} + +

Syncfusion DocIO Library (Essential DocIO)

+

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in applications without Microsoft Office dependencies.

+ + +{% endhighlight %} + +{% endtabs %} + +Step 5: Implement `CreateWord` method in `DocIO.razor`. +Create a new `async` method named `CreateWord` and include the following code snippet to **create a Word document in the Blazor** WASM Standalone app. + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +@functions { + async void CreateWord() + { + // Creating a new Word document + WordDocument document = new WordDocument(); + // Adding a new section to the document + WSection section = document.AddSection() as WSection; + // Set Margin of the section + section.PageSetup.Margins.All = 72; + // Set page size of the section + section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); + + // Create Paragraph styles + WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; + style.CharacterFormat.FontName = "Calibri"; + style.CharacterFormat.FontSize = 11f; + style.ParagraphFormat.BeforeSpacing = 0; + style.ParagraphFormat.AfterSpacing = 8; + style.ParagraphFormat.LineSpacing = 13.8f; + + style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; + style.ApplyBaseStyle("Normal"); + style.CharacterFormat.FontName = "Calibri Light"; + style.CharacterFormat.FontSize = 16f; + style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); + style.ParagraphFormat.BeforeSpacing = 12; + style.ParagraphFormat.AfterSpacing = 0; + style.ParagraphFormat.Keep = true; + style.ParagraphFormat.KeepFollow = true; + style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; + + IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); + paragraph.ApplyStyle("Normal"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; + WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + textRange.CharacterFormat.FontName = "Calibri"; + textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ApplyStyle("Heading 1"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; + textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 18f; + textRange.CharacterFormat.FontName = "Calibri"; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Saves the Word document to MemoryStream + MemoryStream stream = new MemoryStream(); + document.Save(stream, FormatType.Docx); + // Closes the Word document + document.Close(); + stream.Position = 0; + // Download the Word document in the browser + JS.SaveAs("Sample.docx", stream.ToArray()); + } +} +{% endhighlight %} + +{% endtabs %} + +Step 6: Create `FileUtils.cs` for JavaScript interoperability. +Create a class file named `FileUtils` and add the following code to invoke the JavaScript action for file download in the browser. + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +public static class FileUtils +{ + public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) + => js.InvokeAsync( + "saveAsFile", + filename, + Convert.ToBase64String(data)); +} + +{% endhighlight %} + +{% endtabs %} + +Step 7: Add JavaScript function to `index.html`. +Add the following JavaScript function in the `index.html` file present under `wwwroot`. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 8: Add navigation link. +Add the following code snippet to the Navigation menu's Razor file in the `Layout` folder. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 9: Build the project. + +Run the following command in terminal to build the project. + +``` +dotnet build +``` + +Step 10: Run the project. + +Run the following command in terminal to run the project. +``` +dotnet run +``` + +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-Standalone-app). + +Upon executing the program, the **Word document** will be generated as follows: + +![Blazor WASM Standalone output Word document](Blazor_Images/Blazor_Output.png) + +N> While the Word library functions in WASM Standalone, server-side deployment is recommended. WASM Standalone deployment increases the application payload size. + +{% endtabcontent %} + +{% tabcontent JetBrains Rider %} + +**Prerequisites:** + +* JetBrains Rider. +* Install .NET 8 SDK or later. + +Step 1. Open JetBrains Rider and create a new Blazor WASM app project. +* Launch JetBrains Rider. +* Click new solution on the welcome screen. + +![Launch JetBrains Rider](Blazor_Images/Launch-JetBrains-Rider.png) + +* In the new Solution dialog, select Project Type as Web. +* Select the target framework (e.g., .NET 8.0, .NET 9.0). +* Choose template as **Blazor WebAssembly Standalone App**. +* Enter a project name and specify the location. +* Click create. + +![Creating a new .NET Core console application in JetBrains Rider](Blazor_Images/Create-Blazor-WASM-application.png) + +Step 2: Install the NuGet package from [NuGet.org](https://www.nuget.org/). +* Click the NuGet icon in the Rider toolbar and type [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) in the search bar. +* Ensure that "nuget.org" is selected as the package source. +* Select the latest Syncfusion.DocIO.Net.Core NuGet package from the list. +* Click the + (Add) button to add the package. + +![Select the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Select-Syncfusion.DocIO.Net.Core-NuGet.png) + +* Click the Install button to complete the installation. + +![Install the Syncfusion.DocIO.Net.Core NuGet package](Blazor_Images/Install-Syncfusion.DocIO.Net.Core-NuGet.png) + +N> Starting with v16.2.0.x, if Syncfusion® assemblies are referenced from trial setup or from the NuGet feed, the "Syncfusion.Licensing" assembly reference must also be added and a license key included in projects. Refer to this [link](https://help.syncfusion.com/common/essential-studio/licensing/overview) to know about registering Syncfusion® license key in an application to use Syncfusion components. + +Step 3: Create a Razor file named `DocIO.razor` in the `Pages` folder. +Add the following namespaces: + +{% tabs %} + +{% highlight c# tabtitle="C#" %} +@page "/DocIO" +@inject Microsoft.JSInterop.IJSRuntime JS +@using Syncfusion.DocIO +@using Syncfusion.DocIO.DLS +@using System.IO +{% endhighlight %} + +{% endtabs %} + +Step 4: Add a button to `DocIO.razor`. +Add the following code to create a new button that triggers document creation: + +{% tabs %} + +{% highlight CSHTML %} + +

Syncfusion DocIO Library (Essential DocIO)

+

The Syncfusion Blazor DocIO library (Essential DocIO) is used to create, read, edit, and convert DocIO files in applications without Microsoft Office dependencies.

+ + +{% endhighlight %} + +{% endtabs %} + +Step 5: Implement `CreateWord` method in `DocIO.razor`. +Create a new `async` method named `CreateWord` and include the following code snippet to **create a Word document in the Blazor** WASM Standalone app. + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +@functions { + async void CreateWord() + { + // Creating a new Word document + WordDocument document = new WordDocument(); + // Adding a new section to the document + WSection section = document.AddSection() as WSection; + // Set Margin of the section + section.PageSetup.Margins.All = 72; + // Set page size of the section + section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(612, 792); + + // Create Paragraph styles + WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; + style.CharacterFormat.FontName = "Calibri"; + style.CharacterFormat.FontSize = 11f; + style.ParagraphFormat.BeforeSpacing = 0; + style.ParagraphFormat.AfterSpacing = 8; + style.ParagraphFormat.LineSpacing = 13.8f; + + style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; + style.ApplyBaseStyle("Normal"); + style.CharacterFormat.FontName = "Calibri Light"; + style.CharacterFormat.FontSize = 16f; + style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); + style.ParagraphFormat.BeforeSpacing = 12; + style.ParagraphFormat.AfterSpacing = 0; + style.ParagraphFormat.Keep = true; + style.ParagraphFormat.KeepFollow = true; + style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; + + IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); + paragraph.ApplyStyle("Normal"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Left; + WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + textRange.CharacterFormat.FontName = "Calibri"; + textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ApplyStyle("Heading 1"); + paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; + textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; + textRange.CharacterFormat.FontSize = 18f; + textRange.CharacterFormat.FontName = "Calibri"; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Appends paragraph + paragraph = section.AddParagraph(); + paragraph.ParagraphFormat.FirstLineIndent = 36; + paragraph.BreakCharacterFormat.FontSize = 12f; + textRange = paragraph.AppendText("In 2000, AdventureWorks Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the AdventureWorks Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; + textRange.CharacterFormat.FontSize = 12f; + + // Saves the Word document to MemoryStream + MemoryStream stream = new MemoryStream(); + document.Save(stream, FormatType.Docx); + // Closes the Word document + document.Close(); + stream.Position = 0; + // Download the Word document in the browser + JS.SaveAs("Sample.docx", stream.ToArray()); + } +} +{% endhighlight %} + +{% endtabs %} + +Step 6: Create `FileUtils.cs` for JavaScript interoperability. +Create a class file named `FileUtils` and add the following code to invoke the JavaScript action for file download in the browser. + +{% tabs %} + +{% highlight c# tabtitle="C#" %} + +public static class FileUtils +{ + public static ValueTask SaveAs(this IJSRuntime js, string filename, byte[] data) + => js.InvokeAsync( + "saveAsFile", + filename, + Convert.ToBase64String(data)); +} + +{% endhighlight %} + +{% endtabs %} + +Step 7: Add JavaScript function to `index.html`. +Add the following JavaScript function in the `index.html` file present under `wwwroot`. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 8: Add navigation link. +Add the following code snippet to the Navigation menu's Razor file in the `Layout` folder. + +{% tabs %} + +{% highlight HTML %} + + + +{% endhighlight %} + +{% endtabs %} + +Step 9: Build the project. + +Click the **Build** button in the toolbar or press Ctrl+Shift+B to build the project. + +Step 10: Run the project. + +Click the **Run** button (green arrow) in the toolbar or press F5 to run the app. + +A complete working sample is available on [GitHub](https://github.com/SyncfusionExamples/DocIO-Examples/tree/main/Getting-Started/Blazor/Blazor-WASM-Standalone-app). + +Upon executing the program, the **Word document** will be generated as follows: + +![Blazor WASM Standalone output Word document](Blazor_Images/Blazor_Output.png) + +N> While the Word library functions in WASM Standalone, server-side deployment is recommended. WASM Standalone deployment increases the application payload size. + +{% endtabcontent %} + +{% endtabcontents %} Kindly explore the [supported and unsupported features of the Word library in Blazor](https://help.syncfusion.com/document-processing/word/word-library/net/supported-and-unsupported-features#blazor-supported-features). From 26760e5b42138012a6e74d9de600febdb6c77e5f Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Thu, 9 Oct 2025 08:53:43 +0530 Subject: [PATCH 12/14] Updated the changes --- .../Blazor-WASM-Standalone-app-template.png | Bin 0 -> 11690 bytes .../Blazor_Images/Blazor-Web-app-template.png | Bin 0 -> 15007 bytes .../NET/Create-Word-document-in-Blazor.md | 18 +++++++++--------- 3 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor-WASM-Standalone-app-template.png create mode 100644 Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor-Web-app-template.png diff --git a/Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor-WASM-Standalone-app-template.png b/Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor-WASM-Standalone-app-template.png new file mode 100644 index 0000000000000000000000000000000000000000..104bb4eadbd4d8fa72f530a04f6ef971c00fed4d GIT binary patch literal 11690 zcmZX)2{hE-8$UiNErY0Rk=>_ciOQ0g85(OPJ0T>=ItYUXW2clQYuWeRjAhK&#)L|; z8%vo%D(e`#8N2`J`#H zqz2=E*4fjH@8nMnCXAmG-bUK@0I0qz3yj1mM|C}Q0H7wGW#5jOkv`|CW8n<|obNdP zoapo@eGUM~Ky)?KP5f=B6XzPPIN;~jl*F%*bRW?`3CtITPn?oh7tjC1^`GRE)6p4? z{hv&=JfYf|%;J;;@Usj4XQv443`;CdBRt}@_(t&JCt!IGRy>Q z64b*_YodXP#GzDYU-&tVk#>&hvy2R0|Dbc~RopQyg0CebbEMn8aU?LLA>-woFC>|B z%+6~@YxKhnZ?G=ZAHdK_?8kN0rNTQ)dI3cOaIr-u#Kf`yq?sU zipetkc13`2xqMY!9T5`6#y@(C?YNueFOAHCKp=Pe@`U?bU)D?OY;NRGu|jh?b3W#m zSQkg(TwL6FC5P{vNq5!cQL03qb4xg=QDJufdp4 z;=|6;wK*2KzK;Ba30h6MN+2I|Mpkc7+{5!E#2k25W8rA7|m3nHStCjjFk7-u3m z#oT7$24R2Q2?)T%nN@C_(aXBKl}nR!;|vf0N248k(`TaCg_e&_ha9f=`Lz6t%2<*82z%BzaKW76d-mSg_B5!h7>sgsq}-&kbeB($*b1+5171cVx%s$`TE?vyY3iWB*nY zT%d=WJJ)goYp0Hk^+5_qTdz{fq9BaxQ@0=H;|6m0qcD~mo_-T>^WyBwR&y)CM*#!~ zeZtSS1?1dWDG1WQvh{=a+ydVvcIGP0X*SYP*3DR_Z#MPz+1SZ|75o@}r`Lm)GbRt>JY_Op{wpQv z(cLbdUy8vSv%T&=YaNiSqib0!ft}IfTtir!nlSQYi9xPsZhmW~eVp=Fo-xbA2e!M3 zImLFtDW%om!|gv4W34oWBe1n`K|*0rlFMG{r`+i%?EZUg!G)%#rkLWgEH3OYg~$(N z0>(|#Hm@-!?QG0-?p48bRZe$p+}q$9$_`j=+{WKU&Sm*!v**p2sLVQ3g7()sC*lND z0=EZij5&sCuCbm_gI#zHz(_~Fhmo+F!KSqDQfST~t0NkYFmdJz%guZnwn$dylRJa) zNRv%L=Ci#*D!y*=MajUaoAzI~DQP`WcFLHG1s1g8xEp=h0 zf!gxOq=C^Ys{->^P2nFA7b?$=LGb_q0fE7buXfF*X3d-ad>lk*#|u)yhimbjE5^y%OHU>e9SG{j+T(>QX-tL(4Qcg25*4SRb^_~2kp$D>C=p>LqdWlV3LR4ni zr!lzV*RXNtk}NZfo~1`4bug>1eL8sYW;upxVM@{-q`CaaT=sck*M{mIl6Q^v8txlG z?F`lo4JZp#NJG!KszaF-$b&!N4@VHqKCvlL+mS0Ho)A4^i@ZhLt8oNmyN!LtJW&u2=ED;kM=H#lv$F+p&$}+tTj}_I!b-%YN2^L#2UJ0`JsINNG$c;o>$oeR*bwsuxN5KE@d+or`%6`?2p4)$5MiK+GLc{mS-*2up z-R`^7AzRUI!L#P)>)Qm`pJqSwPBd{6Ld@r_VP9kQ_HyYiStB$H#cObokjL@n?{~1ZRzLX2Meo(ydakN zwA7DE9@$p)E~a0o7hvHCGN+u6xmuMziTBXJ&7+S+ApUrykV60M*iikB_dA;`*>p6$ z;@Tr9C!7VIrB8M{p%y%#=d(E_ z=-gZ&o@1B~P`hLxY)L={83JlQU1~j6wflAq7ecTjo*)f$Yz_r0y&FLhye*r~#1QAE zYI)ese1)vTl>ECl29u4bL(pN*P^Ul5N4SjD?@)L0Vsrj=h9bblnX+_yVz$f!p0vC# z%g|)~$S=HjS@a*+*(yL}T(Efc|Mti6KFoM9GE5g3KOtC6#;%s=-Y^|C&&4qC)&KR@ z|9@php#iL=B1cy6;m&f#)PAuQqhI8UK$$PUUPcnO$T7wGIm@l
g=vUvIQL=+b( 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 T?^(ta2Iy)&(m>sN8utGHk5KLF literal 0 HcmV?d00001 diff --git a/Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor-Web-app-template.png b/Document-Processing/Word/Word-Library/NET/Blazor_Images/Blazor-Web-app-template.png new file mode 100644 index 0000000000000000000000000000000000000000..23d65753b33844e8f7bc5f2dee10dab594112077 GIT binary patch literal 15007 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 XLarj$Lrp=%DRCtrl+Shift+P and type **.NET:New Project** and enter. -* Choose the **Blazor Server App** template. +* Choose the **Blazor Web App** template. -![Choose Blazor Server app from template](Blazor_Images/Blazor-server-app-template.png) +![Choose Blazor Web App Server from template](Blazor_Images/Blazor-Web-app-template.png) * Select the project location, type the project name and press enter. * Then choose **Create project**. -Step 2: To **create a Word document in Blazor Server app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) to the Blazor project. +Step 2: To **create a Word document in Blazor Web app Server**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) to the Blazor project. * Press Ctrl + ` (backtick) to open the integrated terminal in Visual Studio Code. * Ensure you're in the project root directory where your .csproj file is located. * Run the command `dotnet add package Syncfusion.DocIO.Net.Core` to install the NuGet package. @@ -555,7 +555,7 @@ Upon executing the program, the **Word document** will be generated as follows: * JetBrains Rider. * Install .NET 8 SDK or later. -Step 1. Open JetBrains Rider and create a new Blazor Server app project. +Step 1. Open JetBrains Rider and create a new Blazor Web app project. * Launch JetBrains Rider. * Click new solution on the welcome screen. @@ -1055,16 +1055,16 @@ N> While the Word library functions in WASM Standalone, server-side deployment i * Install [.NET 8 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/8.0) or later. * Open Visual Studio Code and install the [C# for Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) from the Extensions Marketplace. -Step 1: Create a new C# Blazor WASM app project. +Step 1: Create a new C# Blazor WASM Standalone app project. * Open the command palette by pressing Ctrl+Shift+P and type **.NET:New Project** and enter. -* Choose the **Blazor WebAssembly App** template. +* Choose the **Blazor WebAssembly Standalone App** template. ![Choose Blazor Web app from template](Blazor_Images/Blazor-WASM-app-template.png) * Select the project location, type the project name and press enter. * Then choose **Create project**. -Step 2: To **create a Word document in Blazor WASM app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) to the Blazor project. +Step 2: To **create a Word document in Blazor WASM Standalone app**, install [Syncfusion.DocIO.Net.Core](https://www.nuget.org/packages/Syncfusion.DocIO.Net.Core) to the Blazor project. * Press Ctrl + ` (backtick) to open the integrated terminal in Visual Studio Code. * Ensure you're in the project root directory where your .csproj file is located. * Run the command `dotnet add package Syncfusion.DocIO.Net.Core` to install the NuGet package. @@ -1288,7 +1288,7 @@ N> While the Word library functions in WASM Standalone, server-side deployment i * JetBrains Rider. * Install .NET 8 SDK or later. -Step 1. Open JetBrains Rider and create a new Blazor WASM app project. +Step 1. Open JetBrains Rider and create a new Blazor WASM Standalone app project. * Launch JetBrains Rider. * Click new solution on the welcome screen. From 76495234265547d7d80676fc427f2cf059d73c74 Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Thu, 9 Oct 2025 08:59:45 +0530 Subject: [PATCH 13/14] Updated Image name --- .../Word/Word-Library/NET/Create-Word-document-in-Blazor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index 087d1d50d..98d5d51eb 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -1059,7 +1059,7 @@ Step 1: Create a new C# Blazor WASM Standalone app project. * Open the command palette by pressing Ctrl+Shift+P and type **.NET:New Project** and enter. * Choose the **Blazor WebAssembly Standalone App** template. -![Choose Blazor Web app from template](Blazor_Images/Blazor-WASM-app-template.png) +![Choose Blazor Web app from template](Blazor_Images/Blazor-WASM-Standalone-app-template.png) * Select the project location, type the project name and press enter. * Then choose **Create project**. From c9c1fc9be97760b1b29555d42419e70d259c1447 Mon Sep 17 00:00:00 2001 From: Karan-SF4772 Date: Fri, 10 Oct 2025 09:52:38 +0530 Subject: [PATCH 14/14] Added online sample link --- .../Word/Word-Library/NET/Create-Word-document-in-Blazor.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md index 98d5d51eb..2b5e3712a 100644 --- a/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md +++ b/Document-Processing/Word/Word-Library/NET/Create-Word-document-in-Blazor.md @@ -821,6 +821,8 @@ Upon executing the program, the **Word document** will be generated as follows: Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. +An online sample link to [create a Word document](https://document.syncfusion.com/demos/word/helloworld#/tailwind) in ASP.NET Core. + ## WASM Standalone Application {% tabcontents %} @@ -1523,3 +1525,5 @@ Kindly explore the [supported and unsupported features of the Word library in Bl Click [here](https://www.syncfusion.com/document-processing/word-framework/blazor) to explore the rich set of Syncfusion® Word library (DocIO) features. +An online sample link to [create a Word document](https://document.syncfusion.com/demos/word/helloworld#/tailwind) in ASP.NET Core. +