diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..fa1385d9 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* -text diff --git a/.nojekyll b/.nojekyll new file mode 100644 index 00000000..e69de29b diff --git a/404.html b/404.html new file mode 100644 index 00000000..1878da38 --- /dev/null +++ b/404.html @@ -0,0 +1,1420 @@ + + + + + Awesome Blazor Browser + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
Loading...
+ + + +
+
+  + +
+ Awesome Blazor Browser +
+
+ This is a browser for + "Awesome Blazor".
+ Special thanks to contributor's great works! +
+ +
Loading...
+
+ +

Theme

+
+
+
+ +
+ Awesome Blazor Awesome

+
+

A collection of awesome Blazor resources.

+
+

Blazor is a .NET web framework using C#/Razor and HTML that runs in the browser with WebAssembly.

+

Contributions are always welcome! Please take a look at the contribution guidelines pages first. Thanks to all contributors, you're awesome and wouldn't be possible without you!

+

If you need to search on this list you can try this great website: Awesome Blazor Browser. +Thanks @jsakamoto for this! Source code stars last commit.

+ Introduction
+ What is Blazor?

Blazor is a .NET web framework to build client web apps with C#.

+

Blazor lets you build interactive web UIs using C# instead of JavaScript. Blazor apps are composed of reusable web UI components implemented using C#, HTML, and CSS. Both client and server code is written in C#, allowing you to share code and libraries. +More information on the official Blazor website.

+ Get started

To get started with Blazor, follow the instructions in the Blazor Get Started documentation.

+

Doing the Build a web app with Blazor learning session on Microsoft Learn can also be a good idea. Another great resource to start is the beginner serie by Jeff Fritz on Channel9 or YouTube.

+ General
+
+
Archives of the ASP.NET blog about Blazor.
+
+
Official website of Blazor, from Microsoft.
+
+
Blazor courses on Microsoft Learn.
+
+
Daily builds of the 'dev' branch of Blazor.
+
+
Curated extensions for Microsoft ASP.Net Core Blazor.
+
+
Unofficial documentation website.
+
+
Official basic demo website.
+
+
Official documentation, by Microsoft.
+
GitHub StarsLast Commit
+
Migration of a traditional ASP.NET Web Forms app to Blazor, sample by Microsoft Architecture.
+
+
FAQ.
+
GitHub StarsLast Commit
+
The official Blazor repository (which is the ASP.NET Core repository).
+
+
'Hello World' sample.
+
+
Introduction to ASP.NET Core.
+
GitHub StarsLast Commit
+
Build a complete Blazor app and learn about the various Blazor framework features along the way.
+
+
ASP.NET Core Blazor WebAssembly performance best practices, by Pranav Krishnamoorthy and Steve Sanderson.
+
+
.NET 6 planning process.
+ Templates
+
GitHub StarsLast Commit
+
    +
  • Solution templates using .Net MAUI and Blazor with out-of-the-box best practices enabling fast and high-quality cross-platform development for web, android, iOS, and Windows with native beautiful Blazor components. The projects created by these templates contain everything required for developing real-world applications, including (but not limited to) CI/CD pipelines, Infra as Code for Azure, localization, multi-mode development (Blazor Server/WASM/Hybrid), builtin bullet proof exception handling, etc. Read more.
  • +
+
GitHub StarsLast Commit
+
    +
  • Clean Architecture Solution Template for Blazor WebAssembly built with MudBlazor Components. This project will make your Blazor Learning Process much easier than you anticipate. Blazor Hero is meant to be an Enterprise Level Boilerplate, which comes free of cost, completely open sourced. Read the Quick Start Guide here.
  • +
+
GitHub StarsLast Commit
+
    +
  • This template can be used to create a Blazor WASM application hosted in an ASP.NET Core Web app using Azure AD and Microsoft.Identity.Web to authenticate using the BFF security architecture. (server authentication) This removes the tokens form the browser and uses cookies with each HTTP request, response. The template also adds the required security headers as best it can for a Blazor application. Read the Quick Start Guide here.
  • +
+
GitHub StarsLast Commit
+
    +
  • This template can be used to create a Blazor WASM application hosted in an ASP.NET Core Web app using Azure B2C and Microsoft.Identity.Web to authenticate using the BFF security architecture. (server authentication) This removes the tokens form the browser and uses cookies with each HTTP request, response. The template also adds the required security headers as best it can for a Blazor application. Read the Quick Start Guide here.
  • +
+
GitHub StarsLast Commit
+
Serie of videos on YouTube who explain how to build your own IDE from scratch with Blazor and .NET. Starting point repo . Blazor Studio repo .
+
+
This is a simple template for the .NET CLI which allows to create a Blazor project ready to be deployed in an Azure Static Web Apps. It allows to create an Azure Function project as backend.
+ Sample Projects
+ AI
+
GitHub StarsLast Commit
+
.NET 7 SDK for OpenAI with a Blazor Server playground.
+
Last Commit
+
Interactive Face Detection & Recognition tutorial with hands-on code samples. State-of-the-art local face AI showcase. Blazor Server & Hybrid.
+ Authentication
+
GitHub StarsLast Commit
+
Real World Admin Dashboard / Starter kit with IdentityServer4 Material Design. Demo.
+
GitHub StarsLast Commit
+
OpenID/Connect server base on IdentityServer4.
+
GitHub StarsLast Commit
+
A sample project showcasing a Blazor app using EF Core with Identity authentication.
+
GitHub StarsLast Commit
+
The right way to use OpenID Connect on Blazor.
+
Last Commit
+
Blazor WASM, Azure AD, REST & gRPC.
+
Last Commit
+
Blazor WebAssembly application using OpenID Connect (OIDC) authentication with Microsoft Identity and Keycloak.
+
Last Commit
+
This repository contains a Blazor WebAssembly application implementing a simple Quiz manager secured by Auth0. The implementation details are described in the following article: Securing Blazor WebAssembly Apps.
+ CMS
+
GitHub StarsLast Commit
+
.NET 5 ASP.NET Core Blogging application with Blazor Admin Dashboard. Demo.
+
GitHub StarsLast Commit
+
Migration of a traditional ASP.NET Web Forms app to Blazor.
+
GitHub StarsLast Commit
+
JHipster is a well-known platform for generating modern application in java world. JHipster provides a blueprints system that allows to override the default behavior of the generator. JHipster.NET is a blueprint that overrides the back-end part, originally generated in spring boot, by back-end in asp.net core. For the front-end all the common language can be used (angular, react), including Blazor.
+
GitHub StarsLast Commit
+
A code-first, extensible Blazor app that generates a CMS for your own database.
+
GitHub StarsLast Commit
+
Simple shop application built with Blazor WebAssembly.
+
Last Commit
+
A simple starter site for Umbraco v9, making use of Blazor WebAssembly with Tailwind CSS/UI. A project that I use to play around and experiment with Umbraco 9, Blazor WebAssembly, TailwindCSS, the Block List Editor, and several other concepts.
+ Games
+
GitHub StarsLast Commit
+
2D game built with .NET and C# on a Twitch stream. Trains is available to play online at wengier.com/Trains.NET.
+
GitHub StarsLast Commit
+
Collection of .NET 8 C# applications consuming a single .NET Standard project running in: Blazor Client (WebAssembly), Blazor Server, Electron (via Blazor Server), WPF, WinForms, Xamarin, MAUI. Demo.
+
GitHub StarsLast Commit
+
Blazor port of DiabloWeb, making it a double WebAssembly app: a WebAssembly (C#) PWA hosting a WebAssembly (C++) game. Demo.
+
GitHub StarsLast Commit
+
Fusion + Blazor sample and a fully functional web app allowing you to play real-time multiplayer board games. Demo.
+
GitHub StarsLast Commit
+
Wolfenstein 3D ported to modern C# and Blazor. Article.
+
Last Commit
+
ZX Spectrum emulator running on Blazor WebAssembly. Demo.
+
Last Commit
+
Simple clone of popular Wordle game in Blazor. Demo.
+ Hybrid
+
+
Host Razor Components inside an Electron shell. This allows for modern, high-performance cross-platform desktop apps built with .NET and web technologies.
+
GitHub StarsLast Commit
+
Build native, cross-platform desktop apps that are lighter than light. Photino is a lightweight open-source framework for building native, cross-platform desktop applications with Web UI technology.
+
Last Commit
+
Example of using Umbraco Heartcore with Blazor.
+
+
With some tweaks and limitations you can run Blazor Wasm on Net Framework 4.x or in another environment. Explanation on Medium.
+
Last Commit
+
RemoteBlazorWebView enables you to interact with the user interface of a program developed with either the BlazorWebView WPF control or WinForms control using a web browser.
+
Last Commit
+
Demonstrates how an existing Angular app can be migrated to Blazor gradually by integrating Blazor components, including calling Angular service methods. Demo.
+ IDE
+
GitHub StarsLast Commit
+
IDE for .NET solutions written using a Photino host, Blazor UI, and C#.
+
Last Commit
+
IDE for the Picat logic programming language based on the Monaco Editor. Demo.
+ IoT
+
GitHub StarsLast Commit
+
PresenceLight is a solution to broadcast your various statuses to a Phillips Hue or LIFX light bulb. Some statuses you can broadcast are: your availability in Microsoft Teams, your current Windows 10 theme, and a theme or color of your choosing. Blog post. Demo video.
+
Last Commit
+
In this sample, a Meadow microcontroller polls data from a LM35 temperature sensor. That data is sent via HTTP request to an API controller endpoint and stored in a database where it can be visualized in a chart using a Blazor web app.
+ Machine Learning
+
GitHub StarsLast Commit
+
A sample ables to make sentiment analysis prediction/detection of what the user is writing in a very UI interactive app (Blazor based) in the client side and running an ML.NET model (Sentiment analysis based on binary-classification) in the server side.
+
GitHub StarsLast Commit
+
A "server-less" general purpose optimization suite for algorithm parameters. Also provides offline optimization of Quantconnect Lean trading algorithms. Demo (https://optimizer.ml).
+
GitHub StarsLast Commit
+
A web application that showcases performing what-if analysis using in-memory Machine Learning models. Live demo.
+
Last Commit
+
ML5 Machine Learning for Blazor with JSInterop mechanism.
+ Mobile
+
+
Experimental Mobile Blazor Bindings - Build native mobile apps with Blazor.
+ Rapid Development Framework
+
GitHub StarsLast Commit
+
A development framework based on .NET Core and EF. It supports Blazor, Vue, React and LayUI with one click code generation for CRUD, Import/Export, etc. Website.
+ ToDos
+
GitHub StarsLast Commit
+
Todo application by David Fowler in .NET 7 that features an ASP.NET Core hosted Blazor WASM front end application and an ASP.NET Core REST API backend using minimal APIs.
+
GitHub StarsLast Commit
+
A TodoMVC clone using Bolero.
+
GitHub StarsLast Commit
+
The procrastination friendly habit tracker. ake notes, manage tasks, track habits. Demo.
+ Others
+
GitHub StarsLast Commit
+
Clean Architecture Template for Blazor WebAssembly Built with MudBlazor Components.
+
GitHub StarsLast Commit
+
Server-side rendering (SSR) with Blazor components, by Steve Sanderson.
+
GitHub StarsLast Commit
+
Modular Application Framework for Blazor.
+
GitHub StarsLast Commit
+
Flight Finder.
+
GitHub StarsLast Commit
+
LINQ Provider for the Twitter API (Twitter Library).
+
GitHub StarsLast Commit
+
Read-only File streams in Blazor. Demo.
+
GitHub StarsLast Commit
+
Migration of a traditional ASP.NET Web Forms app to Blazor.
+
GitHub StarsLast Commit
+
Blazor chat demo using SignalR JS client with interop.
+
GitHub StarsLast Commit
+
A basic HTML SVG Editor written in Blazor WASM.
+
GitHub StarsLast Commit
+
A netflix-like portal application with pilets. This sample demonstrates the use of piral to build a dynamic app consisting of various micro frontends. Demo.
+
GitHub StarsLast Commit
+
This is a sample using Blazor server and SignalR to do command and control. Agents connect to the blazor server application which is hosting a SignalR Hub and we can issue various commands against the connected agents (this feature uses client results).
+
GitHub StarsLast Commit
+
Sample line of business application that illustrates key features of Blazor. Demo.
+
GitHub StarsLast Commit
+
A money manager implemented using CQRS+ES. Demo.
+
GitHub StarsLast Commit
+
A Blazor Weather sample app that shows the current weather for your current location and a collection of pinned locations. Demonstrated at .NET Conf 2019 by Daniel Roth. Demo.
+
GitHub StarsLast Commit
+
A basic HTML SVG Editor written in Blazor WASM. Demo.
+
GitHub StarsLast Commit
+
Ethereum blockchain explorer and simple wallet.
+
GitHub StarsLast Commit
+
FFmpegBlazor provides ability to utilize ffmpeg.wasm from Blazor Wasm C#. ffmpeg.wasm is a pure Webassembly / Javascript port of FFmpeg. It enables video & audio record, convert and stream right inside browsers.
+
GitHub StarsLast Commit
+
A free and open source IDE written using .NET - a Photino host, Blazor UI, and C#.
+
GitHub StarsLast Commit
+
A Blazor wrapper for the Media Capture and Streams browser API. The API standardizes ways to request access to local multimedia devices, such as microphones or video cameras. This also includes the MediaStream API, which provides the means to control where multimedia stream data is consumed, and provides some information and configuration options for the devices that produce the media. This project implements a wrapper around the API for Blazor so that we can easily and safely interact with the media streams of the browser. Demo.
+
Last Commit
+
– An app to play Planning Poker for distributed teams. The app is implemented using Blazor and shows how to switch between client-side and server-side mode with a configuration change. Demo.
+
Last Commit
+
Online tool for verify .Net regex syntax. (Demo).
+
Last Commit
+
Online tool for verify .Net regex syntax, see splits list, table etc. (Demo).
+
+
Blazor Tour of Heroes, using Blazor-State(State Management architecture utilizing the MediatR pipeline) for the Redux style state.
+
Last Commit
+
Blazor.Text.Editor is a Text Editor component library using the Blazor UI Framework for .NET. Demo.
+
Last Commit
+
Wake-on-LAN app for local networks. Blazor Server + EF Core + DI + CI.
+
Last Commit
+
A Blazor app that wraps Waffle Generator. The generator outputs readable gibberish that can be used in place of Lorum Ipsum. Demo.
+
Last Commit
+
Compile and run Nethereum snippets on the browser. You can run it here: http://playground.nethereum.com/.
+
Last Commit
+
A sample project that demonstrates the usage of Typin framework with a Blazor SPA application (Xterm.js and custom web workers implementation in C# to emulate terminal experience in browser). Live demo.
+
Last Commit
+
Unofficial Blazor WebAssembly client for eShopOnContainers.
+
GitHub StarsLast Commit
+
    +
  • Blazor Server integrating with Up bank (an Australian digital bank), to assist users with budgeting and to gain powerful future insights. Uses Clean Architecture and Marten DB.
  • +
+
Last Commit
+
An application for learning foreign words using flashcards and spaced repetition.
+
GitHub StarsLast Commit
+
Sample project, guide and tips for setting up TailwindCSS in Blazor.
+
Last Commit
+
Source code of a presentation by Ed Charbeneau about Blazor and CSS.
+
Last Commit
+
A sample of generating Graphviz DOT language files and visualising tree data structures. Demo.
+
Last Commit
+
Simple Blazor Server app which uses image recognition to identify and extract text printed in an image file uploaded by the user. Demo.
+
Last Commit
+
Simple Football Blazor Server web app displaying fixtures & results, group standings, teams & players and has a player search. Demo.
+
GitHub StarsLast Commit
+
    +
  • An automation framework to create Blazor component by RenderTreeBuilder.
  • +
+
Last Commit
+
MobX-style dependency tracking in Blazor (proof-of-concept level maturity)
+ Tutorials
+
GitHub Stars
+
Blazor app building workshop by .NET Foundation, Blazzing Pizza.
+
GitHub StarsLast Commit
+
June 2021 - Display sensor data using Chart.js in a Blazor application. Source code .
+
GitHub StarsLast Commit
+
Build "NextTechEvent", a site that will help speakers, organizers, and attendees find their next tech event. Source code .
+ Libraries & Extensions

Reusable components like buttons, inputs, grids and more. See also the Blazor component bundles feature comparison chart.

+ Component bundles
+
GitHub StarsLast Commit
+
GitHub licence FAST is a collection of technologies built on Web Components and modern Web Standards, designed to help you efficiently tackle some of the most common challenges in website and application design and development. FAST & Blazor documentation.
+
GitHub StarsLast Commit
+
A set of enterprise-class UI components based on Ant Design and Blazor. (Docs as Demo).
+
GitHub StarsLast Commit
+
MudBlazor is an ambitious Material Design component framework for Blazor with an emphasis on ease of use and clear structure. It is perfect for .NET developers who want to rapidly build web applications without having to struggle with CSS and Javascript. MudBlazor, being written entirely in C#, empowers them to adapt, fix or extend the framework and the multitude of examples in the documentation makes learning MudBlazor very easy. Documentation. Demo.
+
GitHub StarsLast Commit
+
Components for Blazor with support for Bootstrap, Bulma, AntDesign and Material CSS. (Bootstrap Demo), (Bulma Demo), (AntDesign Demo), (Material Demo).
+
GitHub StarsLast Commit
+
A set of enterprise-class UI components based on Material Design and Blazor. It's an almost perfect copy of Vuetify, and Long-term roadmaps have been mapped out. It is powered by the MASA team and remains free and open source. Documentation. Pro Demo.
+
GitHub StarsLast Commit
+
Native UI components for Blazor. DataGrid, DataList, Tabs, Dialog and more. (Demo).
+
GitHub StarsLast Commit
+
Material Design components for Blazor. Bootstrap 4 components for Blazor (Demo).
+
GitHub StarsLast Commit
+
Reusable bootstrap components for Blazor. (Docs as Demo).
+
GitHub StarsLast Commit
+
High-performance, lightweight, and responsive blazor bootstrap components in a single package from the developers for the developers. (Docs as Demo).
+
GitHub StarsLast Commit
+
A lightweight wrapper around Microsoft's official FluentUI Web Components for use with .NET 6.0 Razor views & Blazor. (Samples & demo).
+
GitHub StarsLast Commit
+
A blazor component library using Element UI. API imitates Element, CSS directly uses Element's style, HTML structure directly uses Element's HTML structure. Blazor WebAssembly Version demo. Blazor WebAssembly Version PWA Mode demo.
+
GitHub StarsLast Commit
+
Simple port of FluenUI/Office Fabric React components and style to Blazor. Client-side demo (WebAssembly). Server-side demo (SignalR).
+
+
External link. A fast datagrid, listview, input and other native Blazor components for server and client-side apps.
+
GitHub StarsLast Commit
+
A set of native UI Blazor components (including a Data Grid, Pivot Grid, Scheduler, and Charts) for both Blazor server-side and Blazor client-side platforms.
+
GitHub StarsLast Commit
+
The most comprehensive native Blazor component library including Data Grid, Charts, Scheduler, Diagram and Document Editor components. (Demo).
+
GitHub StarsLast Commit
+
ADMINLTE for Blazor is a collection of reusable components, with which you can easily develop digital services as a designer or developer. Think of buttons, form elements and page templates. This project adapts ADMINLTE 3 so the components can be used from dotnet core Blazor.
+
GitHub StarsLast Commit
+
Blazor component library based on the Clarity UI design. 30+ components including Datagrid and Tree-view (Docs & Demos).
+
GitHub StarsLast Commit
+
Lightweight, customizable, and performance oriented component library for Blazor and .NET MAUI Hybrid. Built with TailwindCSS. Demo.
+
GitHub StarsLast Commit
+
An alternative Material Theme Razor Component Library. Material.Blazor focuses sharply on giving you pure markup from Google's material-components-web - we don't try to sit between you and your use of Google's CSS and SASS because they do it better than we ever could. We also have some cool "plus" components. See our demo and comprehensive documentation.
+
GitHub StarsLast Commit
+
Majorsoft Majorsoft Blazor Components is a set of UI Components and other useful Extensions for Blazor applications. All components are free and available on NuGet. The main goal of this project is to provide an easy to use, feature reach set of customizable components with other useful extensions. NuGet Demo app Docs.
+
GitHub StarsLast Commit
+
Open Source MIT Blazor Components: Grid, Select, Wizard etc.
+
GitHub StarsLast Commit
+
An open source library of Blazor components including Table, Tree, ToolBar and FileExplorer. Demo.
+
GitHub StarsLast Commit
+
Bootstrap 5 components + additional components built on top of Bootstrap 5 (grid, autosuggest, message-boxes, atc.). Enterprise project template with gRPC code-first client/server communication, localization and more. Interactive documentation & Demos.
+
GitHub StarsLast Commit
+
Blazor component library based on the Clarity UI design. 30+ components including Datagrid and Tree-view (Docs & Demos).
+
+
External link (telerik.com). A native set of UI components for Blazor, including grid, charting, and calendar components.
+
+
A Blazor starter template built using your choice of Blazorise or MudBlazor, with more UI library integration coming. It offers a myriad of features such as user registration, login, password reset, two factor; user management, roles, permissioning; background workers, logging, caching, email templates, localization and many more.
+
Last Commit
+
Component library for Blazor including Grid, Kanban, Gantt, Chart, Docking, Pivot and more. Website.
+
GitHub StarsLast Commit
+
Blazor Admin theme built on top of Tabler UI. Minimal javascript. Demo.
+
GitHub StarsLast Commit
+
Ionic framework integration for Blazor.
+
+
Complete toolset for implementing commercial business applications. It includes the equivalent of all Bootstrap JavaScript components, all html5 input types with widgets fallbacks, advanced editable components like DataGrid, TreeView, DetailView, ModalDetail, DetailList. All components have default customizable templates, and support virtualizazion and Drag & Drop. Component rendering is meta-data driven, so component configuration is in part automatic, and in part can be driven with data annotations. The toolset includes also query tools, to issue complex local or remote queries, changes-tracking tools to send only the changed records to the server, advanced validation attributes, globalization tools, "Behaviors" that modify existing components, state management and save, and more.
+
GitHub StarsLast Commit
+
ASP.NET Web Forms System.Web.UI.WebControls Razor Components For Blazor WebAssembly. Demo.
+
Last Commit
+
Github Octicons created as a .razor components and available via the NuGet package. The project website is an example using the generated components.
+
GitHub StarsLast Commit
+
ABP Framework is a complete infrastructure to create modern web applications by following the best practices and conventions of software development.
+
+
Paid External link Diagram, Chart, Text Editor, Gauge, Barcode, and User Interface components for Blazor. Demo.
+
GitHub StarsLast Commit
+
Useful third party extension components for MudBlazor, from the contributors. +20 components includes Stepper, SpeedDial, Wheel, Splitter, Animate, Popup, Material 3 Switch, Gallery, CodeInput and more. Documentation.
+ Individual components
+ 2D/3D Rendering engines
+
GitHub StarsLast Commit
+
This library packages the well-known 3D library Babylon.js into a Razor component that can be used in a C# Blazor project. The library is intended to use for creation of molecules visualization and used limited API of Babylon library. Demo application which is showing different parts of library Pubchem Viewer. Show chemical information from pubchem.ncbi.nlm.nih.gov.
+ API
+
GitHub StarsLast Commit
+
<Title> and <Meta> components for changing the document titile and meta elements, with server-side prerendering support for SEO/OGP. (Demo).
+
GitHub StarsLast Commit
+
Wrapper library around the HTML canvas API written in C# (no JS dependency) (Demo).
+
Last Commit
+
This is a wrapper around the Intersection Observer API.
+ Charts
+
GitHub StarsLast Commit
+
Brings ChartJs charts to Blazor.
+
GitHub StarsLast Commit
+
SVG charts for Blazor.
+
Last Commit
+
Interactive and flexible charts for Blazor Web Apps. Taking its inspiration from the highly popular ggpplot2 R package, GG.Net provides natively rich features for your Data Analysis Workflow. Build publication quality charts with just a few lines of code. Website.
+
Last Commit
+
Sparkline Charts for Blazor using Fonts.
+
GitHub StarsLast Commit
+
Blazor wrapper for ApexCharts. Demo.
+
GitHub StarsLast Commit
+
Brings the charting library plotly.js with over 40 chart types to Blazor (Demo).
+
GitHub StarsLast Commit
+
Interactive and flexible charts for Blazor Web Apps. Taking its inspiration from the highly popular ggpplot2 R package, GG.Net provides natively rich features for your Data Analysis Workflow. Build publication quality charts with just a few lines of code. Website.
+
GitHub StarsLast Commit
+
This is a NuGet package for Blazor to use ChartJs, constantly updated with new features.
+
Last Commit
+
Blazor wrapper for Chartist.js bundled with Chartist.js plugins.
+ CSS
+
GitHub StarsLast Commit
+
BlazorSize is a JavaScript interop library for Blazor that is used to detect the Browser's current size, change in size, and test media queries.
+
GitHub StarsLast Commit
+
A Blazor component based on animate.css to easly animate your content. Demo.
+
+
A small utility library to allow in-component styling without duplicate <style> tags. Also supports programmatically triggered animations.
+ Database
+
GitHub StarsLast Commit
+
DexieNET aims to be a feature complete .NET wrapper for Dexie.js the famous Javascript IndexedDB wrapper from David Fahlander. It's designed for Blazor and includes an easy to use Razor component. Now with support for DexieCloud in preview.
+
GitHub StarsLast Commit
+
EfCoreNexus helps integrating the entity framework core into your blazor app. Via reflection it adds your entitiy classes automatically and provides you with basic crud functionality.
+ Datagrids / tables
+
GitHub StarsLast Commit
+
Grid component with CRUD forms for Blazor and ASP.NET MVC, supporting filtering, sorting, searching, paging, subgrids and others (Demo).
+
GitHub StarsLast Commit
+
Virtualized data grid component with lean markup, focused on displaying remote data. (Demo & documentation).
+ Date & time
+
GitHub StarsLast Commit
+
A date range picker component library for Blazor. Demo.
+
Last Commit
+
A fully featured calendar UI component for viewing and creating events, tasks, and milestones. Month, week, and daily views. Blazor Calendar wraps the fully featured Toast UI Calendar JS library. MIT License. Sample project.
+ Diagrams
+
GitHub StarsLast Commit
+
Z.Blazor.Diagrams is a fully customizable and extensible all-purpose diagrams library for Blazor (both Server Side and WASM). It was first inspired by the popular React library react-diagrams, but then evolved into something much bigger. ZBD can be used to make advanced diagrams with a custom design. Even the behavior of the library is "hackable" and can be changed to suit your needs.
+
GitHub StarsLast Commit
+
Interactive diagram component (flowcharts, UML, BPMN, ...), customizable and extensible according to user needs (node types, styles). Demo.
+ Maps
+
GitHub StarsLast Commit
+
Blazor interop for GoogleMap library.
+
Last Commit
+
Blazor wrapper over vector drawing/mapping library. Jquery Mapael.
+ Modal, Toast & Notifications
+
GitHub StarsLast Commit
+
A JavaScript free modal library for Blazor and Razor Components applications.
+
GitHub StarsLast Commit
+
A JavaScript free toast library for Blazor and Razor Component applications.
+
GitHub StarsLast Commit
+
A powerful and customizable Sidepanel implementation for Blazor applications.
+ Tabs
+
Last Commit
+
An extended tabs component library providing various tab features for Blazor.
+ Testing
+
GitHub StarsLast Commit
+
A testing library for Blazor Components. You can easily define components under test in C# or Razor syntax and verify outcome using semantic HTML diffing/comparison logic. You can easily interact with and inspect components, trigger event handlers, provide cascading values, inject services, mock IJsRuntime, and perform snapshot testing.
+
GitHub StarsLast Commit
+
A snapshot testing library for Blazor Components. Supports rendering Blazor Components to a snapshot file via bunit or via raw Blazor rendering.
+ Others
+
GitHub StarsLast Commit
+
.NET Core and Blazor library that attempts to dramatically improve the way we implement real-time and high-load services by introducing a novel kind of "computed observables" - immutable, thread-safe, and most importantly, almost invisible for developers. Samples. Overview.
+
GitHub StarsLast Commit
+
A context menu component for Blazor (Demo).
+
GitHub StarsLast Commit
+
Auto-complete textbox with local and remote data source, for both Client-side and Server-Side Blazor.
+
GitHub StarsLast Commit
+
Easy-to-use Drag and Drop library for Blazor.
+
GitHub StarsLast Commit
+
Blazor download files to the browser from c# without any JavaScript library or dependency. BlazorDownloadFile is the solution to saving files on the client-side, and is perfect for web apps that generates files on the client. However if the file is coming from the server we recommend you to first try to use Content-Disposition attachment response header as it has more cross-browser compatibility.
+
GitHub StarsLast Commit
+
A Blazor wrapper for the browser API File System Access. The API makes it possible to read and write to your local file system from the browser both files and directories. [Demo](The API makes it possible to read and write to your local file system from the browser both files and directories.).
+
GitHub StarsLast Commit
+
Blazor wrappers for PatternFly. To view the latest develop branch in action, visit the demo app.
+
GitHub StarsLast Commit
+
Provide "Update Now" UI and feature to your Blazor PWA that appears when the next version of one is available.
+
GitHub StarsLast Commit
+
Allows current and previous route to exist enabling transition animations of UI/UX design systems.
+
Last Commit
+
Blazor component implementing the popular SweetAlert2 JavaScript Library.
+
Last Commit
+
Blazor component for Microsoft's Monaco Editor which powers Visual Studio Code. (Demo).
+
Last Commit
+
Component library for CSS grids with extra features, such as moving and resizing interactively. Create your own dashboard with ease. (Demo).
+
Last Commit
+
Component library for tree views. (Demo).
+
Last Commit
+
GitHub Emoji for Blazor (Demo).
+
Last Commit
+
hCaptcha Component for Server-Side Blazor.
+
GitHub StarsLast Commit
+
The default project template localized using XLocalizer with online translation and auto resource creating.
+
Last Commit
+
An app to help keep track of speed cubing averages on the fly using Blazor WebAssembly. Demo.
+
Last Commit
+
Create multiple panels separated by sliding splitters.
+
Last Commit
+
A Blazor component to create panes separated by a slidable splitter bar.
+
GitHub StarsLast Commit
+
Responsive, vertical timeline component.
+
Last Commit
+
A typewriter effect for Blazor.
+
Last Commit
+
An implementation of Blazor diff and merge component based on Mergely with server side support.
+
Last Commit
+
A library that provides an easy helper to use MetaMask with Blazor WebAssembly.
+
Last Commit
+
Surround an "input type=file" element by this Blazor component to making a zone that accepts drag and drops files (Demo).
+
Last Commit
+
Knob Control for Blazor.
+
Last Commit
+
Device detection for blazor using current-device.js.
+
Last Commit
+
A textarea with style. This component essentially remains and works as a textarea but can have any of the text styled based on your application needs. Its simplicity is purposefully designed to avoid the complexities and issues that come with rich text editors.
+
Last Commit
+
A simple to use blazor component to draw custom signatures. Demo.
+
Last Commit
+
A simple to use blazor component for both Blazor Server and WebAssembly which adds a basic tag editor to your app. Demo.
+
Last Commit
+
An implementation of Bootstrap tooltips for both Blazor Server and WebAssembly. Demo.
+
GitHub StarsLast Commit
+
Barcode Scanner component for Blazor using zxing-js Interop. Demo.
+
GitHub StarsLast Commit
+
A library performing animations when a Blazor component enters or leaves the DOM inspired by react-transition-group.
+ Tools & Utilities

Libraries and extensions for state management, cookies, local storage and other specific tools.

+
GitHub StarsLast Commit
+
Zero boilerplate Flux/Redux library for DotNet.
+
GitHub StarsLast Commit
+
A library to provide access to local storage in Blazor applications.
+
GitHub StarsLast Commit
+
Manage client side state in Blazor using MediatR pipeline.
+
GitHub StarsLast Commit
+
A testing library for Blazor Components. You can easily define components under test in C# or Razor syntax and verify outcome using semantic HTML diffing/comparison logic. You can easily interact with and inspect components, trigger event handlers, provide cascading values, inject services, mock IJsRuntime, and perform snapshot testing.
+
GitHub StarsLast Commit
+
Cropper.Blazor is a component that wraps around Cropper.js for cropping images in Blazor. Support Blazor Server, Blazor WebAssembly, Blazor Server Hybrid with MVC and MAUI Blazor Hybrid. Demo.
+
GitHub StarsLast Commit
+
A cross platform package to copy text to and from the clipboard. Supports Blazor via the Clipboard Browser API.
+
GitHub StarsLast Commit
+
CssBuilder is a Builder pattern for CSS classes to be used with Razor Components.
+
GitHub StarsLast Commit
+
A Blazor wrapper for the browser File System Access API.
+
GitHub StarsLast Commit
+
Polyfills for Blazor (for Internet Explorer 11 support and some other browsers).
+
GitHub StarsLast Commit
+
Localizing contents text in Blazor (Demo).
+
GitHub StarsLast Commit
+
Blazor interop for GoogleMap library.
+
GitHub StarsLast Commit
+
Library for creating DotNet Web Worker threads/multithreading in Blazor. Live demo.
+
GitHub StarsLast Commit
+
BlazorMVVM is a small framework for building Blazor and BlazorServerside apps. With it's simple to use MVVM pattern you can boost up your development speed while minimizing the hazzle to just make it work.
+
GitHub StarsLast Commit
+
Develop browser extensions/addons with Blazor WebAssembly. Tested with Google Chrome, Mozilla Firefox and MS Edge.
+
+
Blazor extensions for Analytics.
+
GitHub StarsLast Commit
+
Generate de PDF document with iTextSharp from a Blazor Server App.
+
GitHub StarsLast Commit
+
BlazorRouter is an awesome router inspired by react-router, providing declarative routing for Blazor.
+
GitHub StarsLast Commit
+
Wrapper for Steve Sanderson's BlazorFileInput component.
+
+
Blazor Code Component for documentation sites. Demo.
+
+
Lightweight Event Aggregator for Blazor (Razor Components).
+
+
Provides gamepad API access for Blazor.
+
GitHub StarsLast Commit
+
A library to provide configuration-centric keyboard shortcuts for Blazor.
+
+
Redux state management for Blazor.
+
+
Open files in your browser and load into Blazor.
+
Last Commit
+
A library to provide Speech Synthesis API access for Blazor.
+
+
– A barcode library for Blazor using barcode fonts.
+
Last Commit
+
Develop Blazor apps with Redux.
+
Last Commit
+
A Blazor JSInterop wrapper for Howler.js, an audio library.
+
Last Commit
+
A Blazor JSInterop wrapper for jsMind, a MindMapping tool.
+
Last Commit
+
A port of the popular Highcharts library. Demo.
+
Last Commit
+
Lazy loading for CSS style sheets.
+
GitHub StarsLast Commit
+
Smart script tags in Blazor components, ideal for lazy loading of javascript files.
+
Last Commit
+
Blazor Library for IndexedDB DOM API.
+
Last Commit
+
BlazorIndexedDbJs is a wrapper arround IndexedDB DOM API, supports Blazor WASM and Server.
+
Last Commit
+
Opens a palette with the Material colors for Blazor application.
+
Last Commit
+
A Blazor library for connecting to devices using Bluetooth.
+
Last Commit
+
Blazor service for the experimental WebBluetooth functions. Based on Blazm.Bluetooth.
+
Last Commit
+
Application Insights for Blazor web applications.
+
Last Commit
+
Print and save PDF documents with a native print dialog in a Blazor Server or client Application.
+
Last Commit
+
Use .razor components to render HTML strings for email content.
+
Last Commit
+
A Blazor JSInterop wrapper for Media Session API. The Media Session API provides a way to customize media notifications. (Demo).
+
GitHub StarsLast Commit
+
Antivirus protection for Blazor Wasm projects. This package attempts to guard against false positives from antiviruses that flag Blazor Wasm as malware, until Microsoft gives us an official solution.
+
GitHub StarsLast Commit
+
An unopinionated Blazor state management library that utilizes INotifyPropertyChanged and INotifyCollectionChanged .NET interfaces to automatically detect state changes in components.
+
GitHub StarsLast Commit
+
An open-source utility package for GoogleApis in Blazor. Written from scratch and aims easiest of use.
+
GitHub StarsLast Commit
+
A simple client-side state management container for Blazor/.NET includes redo/undo and ReduxDevTools support.
+
GitHub StarsLast Commit
+
RxBlazorLight is a simple reactive wrapper around Blazor components. For now only MudBlazor components are supported. Build the RxMudBlazorLightSample and enjoy the reactive Components.
+ Others
+
GitHub Stars
+
Home for Blazor Extensions.
+
GitHub StarsLast Commit
+
Blazor for F# with hot reloaded templates, type-safe endpoints and routing, remoting, and much more.
+
GitHub StarsLast Commit
+
Blazor port of Microsoft UI Fabric with fluent design. (Demo).
+
GitHub StarsLast Commit
+
Blazor WebView control for WPF, Android, macOS, iOS. Run Blazor on .NET Core and Mono natively inside a Webview. Documentation.
+
GitHub StarsLast Commit
+
Production ready lazy loading implementation. Full lazy loading support for WASM and Server (pages, components, dlls) with abstractions to implement modularization if you wish (custom endpoints, custom manifests, etc).
+
GitHub StarsLast Commit
+
This is a project to make F# developer to write blazor easier - Use F# for Blazor, Computation expression (CE) style DSL for internal and third party blazor libraries, Dependency injection, Adaptive and Elmish models, Giraffe style routing, Type safe style.
+
GitHub StarsLast Commit
+
Fast download of files to the browser from Blazor without any javascript library reference or dependency. (Demo).
+
GitHub StarsLast Commit
+
A high-level Spotify API library for Blazor WebAssembly projects that enables Spotify playback in the browser, manages OAuth 2.0 authorization, provides easy access to the Spotify Web API and uses IndexedDB caching.
+
GitHub StarsLast Commit
+
Execute dynamic object expressions as Javascript in Blazor client-side apps.
+
+
An Ionic CLI clone for Blazor projects.
+
Last Commit
+
This project takes in a TypeScript type definition file and creates a .NET Core project that will work with the provided Interop abstraction project.
+
Last Commit
+
Generators.Blazor is a source generator for improving performance in Blazor. The project also contains analyzers to detect common issues in Blazor apps.
+
GitHub StarsLast Commit
+
    +
  • Manage k8s using balzor with AI,like kubernetes dashboard.
  • +
+ Source generators
+
GitHub StarsLast Commit
+
Github Octicons created as a .razor components using source generator. The generated components are available via the NuGet package, the generator itself is available as a separate NuGet package. The project website is an example using the generated components.
+
GitHub StarsLast Commit
+
Github Octicons Generates Blazor -> Javascript strongly typed interop methods, by parsing the Javascript it self and generating extension methods for IJSRuntime.
+
GitHub StarsLast Commit
+
Generates methods with parameters for Razor and Blazor pages, so you can navigate without having to guess URLs or parameters.
+ Real-World applications
+
GitHub StarsLast Commit
+
Try .NET provides developers and content authors with tools to create interactive experiences.
+ Videos
+
+
July 9, 2024 - duration Let's dive into why GraphQL is a compelling choice for API queries and how to integrate it with Blazor. In this session, we'll enhance a Blazor app by incorporating GraphQL and using QuickGrid to present the data.
+
+
duration July 2, 2024 - In this episode Eduardo joins Frank to showcase FairPlayTube: The Next Generation of Video Sharing portals, a tool for content creators and entrepreneurs, powered by AI to create thumbnails, digital marketing strategies, passive income ideas, posts for social networks and more.
+
+
duration June 28, 2024 - Looking to build mobile, desktop, and web apps all with nearly 100% shared web UI? New Blazor Hybrid templates in .NET 9 give you a single click automatically configured project with .NET MAUI, Blazor, and a razor class library all setup.
+
+
June 18, 2024 - Join Jeff Fritz as he shows how he built Aspireify.net with .NET 8, Blazor, Microsoft Azure and .NET Aspire. Community links.
+
+
June 17, 2024 - Join this session of Orchard Core Pair Programming by Lombiq! In these, we do an hour of pair programming with an Orchard Core community member about a project of theirs. We learn together a lot, share best practices, and write some good code. All this is live, and you can join us with your questions!
+
+
duration June 13, 2024 - This talk presents how you can use Akka.NET and Blazor to build scalable, streaming web applications without JavaScript or any fuss. Pure C# end to end.
+
+
duration June 11, 2024 - Learn about some of the static web asset improvements coming in .NET 9.
+
+
duration June 10, 2024 - In this talk, Dan Roth dived into all that's new in Blazor in .NET 8 like the advanced render modes, built-in authentication support, and scaffolding, and also looked at the future of Blazor in .NET 9 and how that can make web development even better.
+
+
June 3, 2024 - Are you using audio in your Blazor applications? This week, Kristoffer Stube joins us to talk about Blazor.WebAudio, a Blazor library for playing, generating, and analyzing sound! This library and the libraries surrounding it enable developers to make rich interactive applications in a safe fashion.
+
+
duration May 22, 2024 - Dive into the latest advancements in ASP.NET Core and Blazor for building dynamic, responsive full-stack web applications. Learn how these powerful frameworks simplify the development process, from server to client, enabling you to create rich interactive web UIs with C# instead of JavaScript.
+
+
duration May 22, 2024 - We've heard a lot about how using .NET to build our UI applications lets us share code across our whole stack, but finding the best way to do this isn't straightforward. UI code and API code can sometimes seem at cross-purposes and it's not always obvious how using .NET code across your whole stack provides any advantages over using different technologies for your UI and API. It's easy to fall into the trap of underutilizing the right code-sharing techniques. Or, at the other extreme, butchering your architecture for the sake of sharing code. In this talk, Matt Goldman (author of .NET MAUI in Action) will look at extending Clean Architecture to incorporate UIs built with .NET MAUI and Blazor. See sensible ways to write clean, testable, re-usable code that can be shared across the different layers of your solution, and across different solutions in your enterprise, to optimize efficiency and minimize duplication. We'll also see how to avoid the common pitfalls of over-engineering or under-sharing. You will walk away knowing how to make full-stack code shared with .NET a reality.
+
+
duration May 22, 2024 - Learn how to build an AI-powered content composer using GPT-3.5 Turbo and Syncfusion Blazor components. Effortlessly create content on any topic and automatically adjust its tone, format, and length—all in one place.
+
+
duration May 1, 2024 - Fritz wraps up the series on Blazor with .NET 8 by enabling the pizza website as a progressive web app (PWA) and publishes it to Microsoft Azure.
+
+
duration April 29, 2024 - Are you using a front-end framework with Blazor? In this week's episode, community MVP Egin Hansen shows us how to supercharge Blazor static server-side rendering (SSR) with the htmx front-end library. Adding htmx gives you access to another level of interactivity while still retaining all the advantages of Blazor SSR stateless nature.
+
+
duration April 23, 2024 - The Fluent UI Blazor library provides a set of Blazor components which are used to build applications that have a Fluent design (i.e. have the look and feel or modern Microsoft applications). Join Vincent and Denis to learn the fundamentals and building blocks of the library and demonstrate how to quickly incorporate it into your Blazor projects. Learn the basics of setting up the environment, use the interactive components, and change the styling of your application with Fluent UI design tokens.
+
+
duration April 23, 2024 - Talk by Steve Sanderson at the NDC London 2024. It’s 2024, and the web continues to dominate the software landscape. Innovation proceeds in all directions, with new frameworks, build systems, and architectural patterns emerging at pace. But where are we all heading? Is there a pattern? What’s the next big phase? In this demo-centric talk we’ll look at the common trends across web frameworks: disruptive new features that are showing up across technologies and changing how web apps are built. We’ll dig into live code examples in Next.js (React), SvelteKit, Blazor, Astro, and more. We’ll see how these and others are setting a similar path for the next phase of web technology – and how you could implement the same features yourself without any framework. Finally, we’ll catch up on the state of WebAssembly and try out WASI preview 2 – the upcoming reinvention of WASI. Will it achieve the dream of seamless interop across all languages, operating systems, and CPU architectures? Will it become the standard for server-side cloud programming? Let’s build something with it.
+
+
duration April 9, 2024 - Learn how improvements coming to .NET 9 will make it easier to integrate Blazor Web and Blazor Hybrid.
+
+
duration March 19, 2024 - Add genuinely useful AI-powered features to your web app, just by dropping in pre-built Smart Components that upgrade your existing pages and forms in minutes. Steve Sanderson shows how SmartPaste, SmartTextArea, and SmartComboBox can all delight your users and make them more productive. This is a new experiment from the .NET team, and they want feedbacks.
+
+
duration February 13, 2024 - See how to connect a Blazor app to Microsoft Entra using OIDC and the BFF pattern.
+
+
duration January 25, 2024 - Live with the lead Blazor Product Manager, Daniel Roth, we will learn about basic web development with .NET Blazor! Then, build an interactive web-based game application with Blazor. Come to learn something new and leave with something that we all built, together, live with experts.
+
+
January 24, 2024 - In the last episode, we dug deep into the underpinnings of optimistic concurrency handling in EF Core. In this episode, we continue that journey to cover disconnected scenarios. That is, where the entity travels to a client and then back to the server before being updated in the database. We’ll look at the different patterns for doing updates like this in ASP.NET Core and Blazor apps and see how concurrency tokens work with each of these. We’ll also look at how ExecuteUpdate can be used with concurrency tokens, and take a look at ETag concurrency in Azure Cosmos DB.
+
+
duration December 12, 2023 - In this session, we will show you some experimental ideas for Blazor and .NET+WASI and answer your questions about the .NET eShop Blazor App. Community links.
+
+
duration November 18, 2023 - ASP.NET's RazorComponent model is intuitive and brings productivity to web development. In this session we'll learn how RazorComponents aren't just for Blazor apps and how we can integrate the best part of Blazor with existing ASP.NET applications using: Razor Pages, MVC, and even other front-end technologies.
+
+
duration November 18, 2023 - Tailwind CSS has been growing in popularity for some time. It’s fast becoming one of the top frameworks to use when styling applications. It offers a different approach to the traditional frameworks like Bootstrap—utility based styling. Rather than using prebuilt components—which result in your application looking like a lot of others on the web—you can tailor your design by applying small focused CSS classes resulting in a unique style for your app. In this code focused talk, you will learn how to bring the power of Tailwind CSS to your Blazor applications. We’ll start off with a brief introduction to Tailwind. Then we’ll get into some code and see how we can integrate Tailwind with Blazor. For the rest of the time, we’ll explore the various features of Tailwind and see just how beautiful we can make our Blazor app.
+
+
duration November 18, 2023 - The Blazor Puzzle podcast team of Carl Franklin and Jeff Fritz have a collection of puzzles and brain-teasers for you in this code-focused session about the latest features of the Blazor framework. We'll fix bugs, build cool features, and even write a unit test or two.
+
+
duration November 18, 2023 - Discuss and showcase the different Blazor testing strategies, libraries, and tools available to us, so whether you are building a website, web app, or a reusable Blazor component library, you can pick the ones that yield the most bang for the buck. Specifically, this session covers end-2-end testing, component testing, unit testing, Playwright, bUnit, snapshot testing, semantic markup comparison, emulating user interactions, and how and when to use test doubles (e.g., mocks).
+
+
duration November 15, 2023 - In .NET 8 you can deliver the best web app experiences entirely in Blazor using Blazor's convenient component model. You can build your entire web app in Blazor without the needed for writing JavaScript or mixing web frameworks. In this session you'll see how you can use Blazor's new server-side rendering support to power your web apps from the server for maximum performance and scalability. You'll see how you can easily add advanced capabilities like streaming rendering and enhanced navigation & form handling to further optimize the user experience. Then add rich client-side interactivity wherever it is needed using Blazor Server or Blazor WebAssembly.
+
+
duration October 10, 2023 - About what Blazor has to offer in .NET 8 RC2. Community links.
+
+
duration October 10, 2023 - 10 reasons why the new enhancements and new features about Blazor released with .NET 8 are an absolute game changer.
+
+
duration September 12, 2023 - Discover how full stack Blazor apps work and how they differ from traditional Blazor Server and WebAssembly apps. We'll also explore some of the new full stack UI features that Blazor offers in .NET 8 RC1. Community links.
+
+
duration September 8, 2023 - Carl Franklin and Jeff Fritz offer Blazor-based problems to be solved and give away prizes to lucky winners. Source code.
+
+
duration September 7, 2023 - This short video is about how to create a new Blazor Server application and authenticate it using Azure AD.
+
+
duration August 25, 2023 - We're going to update the API to use the Cosmos client and maybe do some updates on the Edit form. And Burke shows off the signature move that won him the "Pop 'n' Lock" championship.
+
+
duration August 22, 2023 - Becky is joined by Sam Basu from Progress showing off the latest controls for Blazor and Blazor Hybrid apps with Telerik UI.
+
+
duration August 14, 2023 - In this video we'll explore how to integrate the new Blazor Server Side rendering capabilities in .NET 8.0 with the traditional Blazor WebAssembly and Blazor Server (SignalR) hosting models for a rich client-side experience. We'll explore the differences between these different options, how to seamlessly implement each option where it makes sense, and discuss different architecture approaches with Blazor in ASP.NET Core 8.0.
+
+
duration August 4, 2023 - Come find out about the future of Blazor in .NET 8! We'll explore all the upcoming features and improvements, including our effort to create a unified full stack web UI programming model that combines the strengths of client and server. We hope to see you there.
+
+
duration July 27, 2023 - Should I learn a JavaScript framework or concentrate on mastering Blazor? What is the future of Blazor? Is Microsoft invested in making Blazor great? We will answer these questions in today's Dev Questions episode.
+
+
duration July 7, 2023 - Finishing the API and starting the UI. Community links.
+
+
duration July 4, 2023 - In this episode, we discuss and implement progress indicators to enhance user experience. Plus, we integrate a Map component from Progress Telerik, adding a visually striking and functional element to the platform. Source code.
+
+
duration June 30 - Last week we got the API started - let's finish it up and start on the UI. Url list.
+
+
duration June 28, 2023 - Let's take a deep dive into a .NET 8 Preview feature, sections. What are SectionOutlet, and SectionContent? How do we use them to build an extensive layout system for Blazor applications?
+
+
duration June 21, 2023 - Learn how to utilize the Blazor Spark framework by building a Twitter clone.
+
+
duration June 15, 2021 - This summer, Burke and Jon are porting theurlist.com to Blazor - a real world JavaScript application written in Vue.js. Join them each week as they use Visual Studio, Visual Studio Code and GitHub Copilot to rebuild this app and try to tackle every frontend issue you might encounter along the way. Community links.
+
+
duration June 14, 2023 - Chat about Blazor Studio, this month's featured Blazor community project. Community links.
+
+
duration May 26, 2023 - Join this session to explore new features in .NET 8 for web frontends, backends, and future development. Discover how .NET 8 enhances web app development with better performance, new APIs, and modern development support. Get guidance on leveraging these tools for scalable, efficient cloud apps. Suitable for both experienced and new .NET developers, this session offers valuable insights into the latest developments in .NET 8 for web development.
+
+
duration May 26, 2023 - By Isaac Levin at the NDC Oslo 2023. With the introduction of WebAssembly-based Blazor, .NET developers can now build solutions that can run on all sorts of new hosting platforms, even ones without servers. Building applications that can run nearly anywhere, all written in C# is an amazing experience for web developers, far and wide. Write code in the programming language you love, without having to learn the newest Javascript framework (though you can interop if you want to!) is the reason why Blazor is one of the most exciting things in the current .NET landscape. In this session, we will go over the technology of Blazor WebAssembly and showcase deploying a .NET app that can run in places we never thought we could.
+
+
duration May 24, 2023 - Since we started using Blazor in 2019, it's been an excellent tool for our team of C# developers. Even when Blazor was brand new, we used it in our latest project, which really helped us. Seeing other people in our field, I can say that Blazor was a key to our project's success. Our journey with Blazor has mostly been easy, but we have still learned a lot along the way. In this video, I will share some tips and lessons we have picked up. I will also discuss how to make smart choices and avoid problems when you're changing your existing project to use Blazor.
+
+
duration May 24, 2023 - Learn how ASP.NET Blazor in .NET 8 allows you to use a single powerful component model to handle all of your web UI needs, including server-side rendering, client-side rendering, streaming rendering, progressive enhancement, and much more.
+
+
duration May 24, 2023 - In this session, we demonstrate how to leverage DevExpress Blazor/.NET MAUI UI components to deliver intuitive mobile solutions that amaze. We show you how Blazor Hybrid apps reduce time to market and how our adaptive Blazor Data Grid can be used alongside our rich collection of FREE .NET MAUI UI components to address a variety of usage scenarios.
+
+
duration May 23, 2023 - .NET Build session: How to Create a PDF Document in Blazor Using the .NET PDF Library. PDFs are an ideal format for sharing and archiving documents, but creating a viewer from scratch requires a deep understanding of PDF specifications and programming languages. What benefit does a PDF viewer provide for your business? It makes it easy to send a report to stakeholders, send an invoice to a customer, or generate a receipt in a retail shop. In this demo, we’ll show how you can easily add a PDF viewer to your app with text, images, and a table in the PDF document.
+
+
duration May 23, 2023 - Microsoft Build session: Blazor + .NET MAUI – the perfect “hybrid”. In this session, we demonstrate how to leverage DevExpress Blazor/.NET MAUI UI components to deliver intuitive mobile solutions that amaze. We show you how Blazor Hybrid apps reduce time to market and how our adaptive Blazor Data Grid can be used alongside our rich collection of FREE .NET MAUI UI components to address a variety of usage scenarios.
    +
  • This Will Skyrocket Your Blazor Development Productivity - duration May 23, 2023 - Developing Blazor is fun. However, there are a lot of different things that take quite some time when added together. For instance creating isolated CSS files, creating isolated JS files, creating code behind files and others. However, Jimmy Engstrom has created a Visual Extension that solves exactly this problems. Using this extension, your productivity will get a substantial boost. In this video, I'll show you everything you need to know to use this extension in your day to day Blazor development.
  • +
+
GitHub StarsLast Commit
+
duration May 22, 2023 - Have you ever considered writing microservices in Blazor? In this week's episode, community MVP Florian Rappl joins us to talk about micro frontends. He'll show us how to break a Blazor UI into modules for maintainability and development by decoupled teams. Sample repo. Demo.
+
+
duration May 19, 2023 - We have been running Blazor in production for over two years now. Everyone in our team is a C# developer, so when we went into our latest project Blazor was a natural choice, even though Blazor was only a week old. Looking at my peers working in the same space, I am convinced that it saved our project by switching to Blazor. Even though it has been mostly smooth sailing we have learned a lot during the years. In this session, Jimmy Engström will give you some of the tips, tricks, and learnings we have collected over the years, when to choose what, and how to avoid pitfalls converting your exiting project to Blazor.
+
+
duration May 10, 2023 - Come check out some of the progress the Blazor team has made for .NET 8. Community links.
+
GitHub StarsLast Commit
+
duration May 9, 2023 - Part 16 of our new project, "NextTechEvent", a site that will help speakers, organizers, and attendees find their next tech event. In this stream, we made the attendee page look better, and with our close personal friend Chat GPT, we did a better-looking temperature view. Source code .
+
+
duration May 1, 2023 - Learn C#, F#, and .NET with free self-guided learning from Microsoft Learn. Connect4 lesson on Microsoft Learn.
+
+
duration April 11, 2023 - Learn about Data API Builder and how it can be used in Blazor app development. Community links.
+
+
duration February 23, 2023 - March 14, 2023 - Learn how to use Playwright to implement end-to-end testing for your Blazor application. Community links.
+
+
duration February 23, 2023 - Carl talks to Steve Sanderson, creator of Blazor, to answer questions about Blazor United, coming in .NET 8.
+
+
duration February 23, 2023 - Chat with Michael Washington about how .NET developers can leverage OpenAI GPT-3 in their Blazor applications.
+
+
duration February 14, 2023 - The Blazor team shares early thoughts on Blazor United in .NET 8, an effort to create a single unified model for all your web UI scenarios that combines the best of Razor Pages, Blazor Server, and Blazor WebAssembly. Community links.
+
+
duration February 7, 2023 - Do you need to display mapping data in your Blazor apps? In this week's episode, community member Tim Purdum joins the panel to show us GeoBlazor, a versatile web mapping API that you can implement without having to write a single line of JavaScript.
+
+
duration January 24, 2023 - A quick look at some of the experiments we're considering for Blazor in .NET 8.
+
+
duration January 10, 2023 - It show what it's like to build a .NET 7 Blazor app using both new and currently experimental features. Featuring: Daniel Roth, Jon Galloway, Mackinnon Buck. Community links.
+
+
duration December 21, 2022 - Are you tired of slow and clunky web applications? Look no further than Blazor running in React! Blazor is a powerful framework for building interactive client-side web apps with C#, and when combined with the speed and flexibility of React, you get a winning combination for stunning, high-performance web experiences. In this video, we will use the new Custom Elements feature to run Blazor in React, and demonstrate some of the other exciting features and benefits of this dynamic duo. Don't miss out on the future of web development.
+
+
duration December 13, 2022 - Find out our early plans for Blazor in .NET 8. Community links.
+
+
duration November 18, 2022 - Use the IDE to make a Fluxor CRUD Application.
+
+
duration November 10, 2022 - Blazor in .NET 7 is loaded with many new improvements to make building beautiful interactive web UI easier and more productive. In this session we'll take a look at the new support for custom elements, improved data binding, handling location changing events, showing loading progress, dynamic authentication requests, and more.
+
+
duration November 10, 2022 - So you’ve heard about new features in .NET 7, but how does it all fit together when you build an app? Join Steve as he quickly builds an end-to-end audio manager app with Blazor WebAssembly using features old and new. This is a moderately advanced talk (it assumes existing Blazor knowledge) full of hints and tips including: cleaner ways to organize JS interop, directly accessing files on an end user’s filesystem, dynamically generating SVGs, creating an elegant “loading” experience, and the performance impact of AOT compilation. Full source code is provided!
+
+
duration November 10, 2022 - .NET 7 introduces powerful new capabilities for running .NET code on WebAssembly. In this session we’ll show how you can run .NET from any JavaScript code using the new and improved JavaScript interop support. We’ll look at debugging and hot reload improvements for .NET on WebAssembly and show how the .NET WebAssembly build tools in .NET 7 take advantage of the latest WebAssembly features like SIMD and Exception Handling to improve performance. We’ll also check out some upcoming and experimental .NET WebAssembly capabilities like support for multithreading.
+
+
duration November 10, 2022 - Testing is hard, testing takes time to learn and to write, and time is money. As developers we want to test. We know we should but we don't have time. So how can we get more developers to do testing? We can create better tools. Let me introduce you to Playwright - Reliable end-to-end cross browser testing for modern web apps, by Microsoft and fully open source. Playwright's codegen generates tests for you so now you really have no excuses. It's time to play your tests wright.
+
+
duration November 10, 2022 - Are you a web developer and need to target iOS, Android, macOS, and Windows? Ship directly to the store and build world class apps with native API access with .NET MAUI and Blazor Hybrid.
+
+
duration November 10, 2022 - Desktop is not dead and there are a lot of applications written in WPF and Windows Forms that need to be ported to Web, or reuse ready components written by the web team. Blazor can be the answer for both the requirements thanks to Blazor Hybrid. Let’s see how you can use it.
+
+
duration November 10, 2022 - Does your CSS code remind you of an episode of Hoarders? In this session we’ll explore a variety of CSS related architecture decisions that Blazor developers face. Attendees will learn how and when to use plain CSS, Sass or CSS Isolation with Blazor. Modern CSS techniques like custom CSS properties will be discussed. We’ll explore techniques to build modular and intelligent CSS by leveraging CSS principals and incorporating helper libraries. This session aims to break the dependency on CSS systems like Bootstrap and Tailwind.
+
+
duration November 10, 2022 - Are you a .NET developer who wants to quickly build and deploy full-stack .NET serverless applications? Then this talk is for you! In this session, we will learn how to use Azure Static Web Apps with Blazor and .NET. First, we will explore Azure Static Web Apps. Then take a look at getting started with Blazor WebAssembly paired with the serverless power of .NET Azure Functions or Azure Container Apps. We will continue on to explore other .NET API options now available. And finally, we will discover how to automatically build and deploy to Azure directly from our code repository.
+
+
duration November 3, 2022 - Carl shows how to easily support multiple languages in a Blazor WebAssembly application.
+
GitHub StarsLast Commit
+
duration November 2, 2022 - Part 12 of the project "NextTechEvent", a site that will help speakers, organizers, and attendees find their next tech event. In this stream, we add search functionality using RavenDB by adding an index. A way for organizers to filter conferences by name, country, location, city, and tags or a combination of them. This way we can see how many conferences are happening in "Stockholm" or all the conferences named "NDC". Source code.
+
+
duration October 20, 2022 - Adding guests and links, and playlist functionality.
+
+
duration October 11, 2022 - Learn more about the latest multithreading and MSAL developments for Blazor in .NET 7. Community links.
+
+
duration September 22, 2022 - Carl shows how to use MSAL and Azure AD B2C to authenticate users and call a secure API.
+
+
duration September 13, 2022 - Learn more about the exciting runtime changes in Blazor for .NET 7. Community links. Part 1.
+
+
duration September 8, 2022 - Make a Text Editor in Blazor from scratch, Blazor Text Editor Part 1.
+
+
duration September 8, 2022 - Roslyn Syntax Highlighting | Blazor Text Editor Part 2.
+
+
duration September 8, 2022 - Make a Text Editor in Blazor from scratch | Blazor Text Editor Part 1.
+
GitHub StarsLast Commit
+
September 2, 2022 - In this video, Daniel will show you how to create a project for .NET MAUI and Blazor and how to structure the code so it can be shared between the app and the web. Source code.
+
+
duration September 1, 2022 - Short presentation of Blazor. Blazor is a framework that can build frontend web applications with HTML, CSS, and C#. It leverages web assembly to eliminate JavaScript from the usual client-side tech stack.
+
+
duration August 28, 2022 - In this tutorial we'll learn how to create a todo list with Blazor and improve the page using Bootstrap.
+
+
duration August 23, 2022 - Overview of Blazor in .NET 7 with Daniel Roth, Jon Galloway, Mackinnon Buck and Tanay Parikh. Learn more about the great new features coming to Blazor in .NET 7.
+
+
duration August 22, 2022 - In this tutorial you will learn the basics of building a website with Blazor and how the default Blazor project template works. If you have any problems feel free to leave a comment and I will try and get back to you. I've also added some notes below that you might find useful.
+
+
duration July 18, 2022 - In this session, Josh and I are back again to continue building a decentralizaed social media platform in the open-source space. This session in particular we will be discussing, designing and implementing a main page header in Blazor using SharpStyles.
+
+
duration July 12, 2022 - ASP.NET Community Standup - Blazor: Flavors of State Management with Blazor WebAssembly. Working with Blazor WebAssembly applications we often overlook the importance of appropriate state management. Without a good understanding and the right strategy, our applications can end up polluted with components that behave badly and we end up regretting the bad choices.- This session covers the simple state management flavours and then progress towards something more tasty like the Redux pattern. We will see what there is to like and dislike about each flavour. Next, we will take a step back and determine the appropriate seasoning of state management to pair with our application. You will leave this session having sampled all the wonderful flavours and be able to make great decisions to have the best development experience. Community links.
+
+
duration July 11, 2022 - This video shows how to secure your Blazor application and a Web API using Azure Active Directory (AAD).
+
+
duration July 7, 2022 - What’s next for Blazor, and .NET on WASI, talk by Steve Sanderson at the NDC Porto. In this demo-centric talk, Microsoft developer/architect Steve will show the current state-of-the-art in Blazor for building rich web-based UI for browsers and native apps. This will include powerful new features shipped in .NET 6, as well as upcoming enhancements under development for .NET 7 and .NET MAUI. We’ll also look at more experimental future possibilities, including running .NET Core on WASI (WebAssembly on the server) which creates entirely new cloud and edge hosting options and lets you bring .NET code to places it’s never been before.
+
+
duration June 29, 2022 - Grace Taylor from the Visual Studio team joins James to talk about a new experiment that they are running to improve tutorial inside of Visual Studio! Their first experiment is going to help developers get started learning and building web apps with Blazor. Install Visual Studio, and you may have the opportunity to test out this new experimental feature from the team.
+
+
duration June 20, 2022 - This video is about test-driving CSS styles in Blazor.
+
+
duration June 16, 2022 - Should I learn Blazor in more depth or should I better understand ASP.NET Core? Which one is the better one to learn well first? Should I bounce back and forth or specialize in one?
+
+
June 3, 2022 - Carl uses a client-side repository based on IndexedDB to persist data even without an Internet connection.
+
+
duration May 27, 2022 - Carl shows you how to use TypeScript when creating a Blazor component.
+
+
duration May 25, 2022 - See how you can quickly and iteratively build modern, native and hybrid web apps for any device with Visual Studio and .NET Multi-platform App UI (.NET MAUI). We’ll take you on a tour of the tools and frameworks that can speed up your development time to create powerful, native desktop and mobile apps for Windows, macOS, iOS, and Android from a single codebase with .NET MAUI. We’ll also show you how to enhance your Blazor web apps with native device capabilities.
+
+
duration May 25, 2022 - Blazor uses the latest open web standards to enable full stack web development with .NET. But what if you need to build a native client app? Blazor is expanding beyond the web to enable support for building native client apps using a hybrid of web technologies and .NET. In this session we’ll look at the new Blazor Hybrid support in .NET MAUI for building cross platform native client apps for mobile and desktop as well as Blazor Hybrid support for modernizing WPF and Windows Forms apps.
+
+
duration May 25, 2022 - WebAssembly is moving beyond the browser and is pitched to become a foundational element of modern cloud-native architecture. It lets any language compile to universal binaries that run on any OS or processor, robustly sandboxed and with great performance. This session covers a new approach to running .NET in WASI environments. You’ll see how your existing .NET code could be built into WASI-compliant modules, plus the opportunities this opens. This is experimental, not yet a committed product.
+
+
May 23, 2022 - Let's start our journey together to build beautiful native cross-platform apps for iOS, Android, macOS, and Windows with .NET MAUI, C#, and Visual Studio! In this full workshop, I will walk you through everything you need to know about .NET MAUI and building your very first app. You will learn the basics including how to build user interfaces with XAML, how MVVM and data binding simplify development, how to navigate between pages, access platform features like geolocation, optimize data collections, and theme your app for light theme and dark theme. This course has everything you need to learn the basics and set you up for success when building apps with .NET MAUI.
+
+
duration May 20, 2022 - In the last video, we created a custom report using the Bold Reports Designer. We could use the provided Bold Reports Viewer to display the reports, but that does not always fit with what you want to accomplish. That is why today we will implement a report viewer in a Blazor Server application. That way, we can show our custom report to our clients directly inside of our site instead of sending them to a separate application.
+
+
duration May 19, 2022 - Many developers still consider WebAssembly to be a leading-edge, niche technology tied to low-level systems programming languages. However, C# and .NET have run on WebAssembly since 2017. Blazor WebAssembly brought .NET into the browser on open standards, and is now one of the fastest-growing parts of .NET across enterprises, startups, and hobbyists. Next, with WASI we could let you run .NET in even more places, introducing cloud-native tools and techniques to a wider segment of the global developer community. This is a technical talk showing how we bring .NET to WebAssembly. Steve will demonstrate how it runs both interpreted and AOT-compiled, how an IDE debugger can attach, performance tradeoffs, and how a move from Emscripten to WASI SDK lets it run in Wasmtime/Wasmer or higher-level runtimes like wasmCloud. Secondly, you'll hear lessons learned from Blazor as an open-source project - challenges and misconceptions faced bringing WebAssembly beyond early adopters.
+
+
duration May 19, 2022 - In this video we use the ServiceStack Blazor WASM template to show how the combination of typed end-to-end services and Blazor is great for building line of business applications. The template provides a clean separation of concerns, typed end-to-end safety and rapid iteration thanks to shared C# language, Visual Studio Hot Reload and ServiceStack message centric design.
+
+
duration May 17, 2022 - Showcasing migrating a Blazor WASM PWA to .NET MAUI and Blazor Hybrid. Community links.
+
+
duration May 13, 2022 - Talk by Steve Sanderson at the NDC London 2022. Real-world software projects often involve combining many technologies. So, is modern Blazor powerful and flexible enough for your team's needs? In this demo-heavy talk, Steve will show how Blazor WebAssembly/Server can seamlessly embed libraries and logic written in other languages such as Rust or C/C++, how Blazor WebAssembly/Server components can be used inside other SPA frameworks such as React or Angular (or vice-versa) and how Blazor components can be used not only for web projects, but also shared with native apps for macOS, iOS, Android, and Windows (including WPF and WinForms) These capabilities should equip your team to take on the most ambitious projects with confidence. We'll then look further into the future and consider how WebAssembly is moving beyond the browser and is pitched to become a foundational element of cloud-native server apps. You'll be among the first to see an experimental new approach to compiling .NET applications into WASI-compliant universal binaries that can run on any OS or processor, robustly sandboxed and with great performance.
+
+
duration May 13, 2022 - Creating office files in C# has always been a popular solution. You can generate reports in formats that users are comfortable with. With the Syncfusion file controls, you can not only create Excel files, you can also create Microsoft Word documents, PowerPoint presentations, and PDF documents. In this video, we will look at the office file controls in Syncfusion and how to use them.
+
+
duration May 11, 2022 - John Miller joins James on this week's On .NET to chat about how .NET developers can build Microsoft Teams apps and bots completely with C#, .NET, and Blazor! John walks us through everything we need to know to get started and how to even publish apps for Teams.
+
+
duration May 11, 2022 - The Blazor controls in Syncfusion are pretty impressive. In this video, we will look at the DataGrid, charts, a Kanban-style board, a dashboard, autocomplete textboxes, context menus, signature pads, menu bars, toast messages, and more. There are so many controls to look at, in fact, that we are going to purposefully ignore the office file creation and display controls, as well as reporting. That way, we can spend more time on the other controls today and then focus on the office files in another video. The reporting will actually have two different videos dedicated to it.
+
+
duration May 10, 2022 - Modern web development means that more and more application code is running in the browser. Traditionally this has been JavaScript but more recently there has been the trend to use C#/WASM with Blazor. These modern applications typically also need authentication and single-sign-on as well as token-based security for calling APIs – in other words OpenID Connect and OAuth 2. There are different patterns for securing such applications and this session covers some of the pitfalls of the various approaches, especially given the ever-changing browser landscape. We will conclude with the “backend for frontend” (or BFF) pattern which has become the most secure and stable of these approaches.
+
+
duration May 5, 2022 - App walkthrough, Create a static web app with an Azure DevOps pipeline, Add Azure DevOps environments and configure approvals, Configure a multi-stage pipeline, Static Web Apps named preview environments, Playwright tests, Manual approval before production deployment, Secure staging environments with a password. Source code.
+
+
duration May 2, 2022 - In this week's episode, Kristoffer Strube joins the panel to show us a Blazor WASM wrapper for the browser File System Access API. He's bringing demos and code to share, so this is an episode you won't want to miss.
+
+
duration April 29, 2022 - Securing SPAs and Blazor Applications using the BFF (Backend for Frontend) Pattern at the NDC Porto, by Dominick Baier.
+
+
duration April 29, 2022 - State management in Blazor, at the NDC Porto 2022. When developing a Single Page Application, a very important aspect is state management. Since Blazer is a component-based UI framework, how do we manage to update the UI when the state of the application changes.
+
+
duration April 29, 2022 - Streaming three ways with Blazor: REST, gRPC, and SignalR, by Carl Franklin at the NDC Porto 2022. Learn how to stream data from server to client to improve perceived performance and increase scalability. Carl shows how streaming works in general, and then how to implement using each of these three transports.
+
+
duration April 25, 2022 - SignalR is an excellent way to connect two or more clients together for real-time communication. The best part is that this library is just a wrapper around web-standard technologies such as Web Sockets and Long-Polling. It just makes them easier to use. That means we can even use SignalR with other clients such as Java or JavaScript. In this video, we are going to learn how to set up SignalR and how to connect to it using web clients and desktop clients. Throughout the video, we will cover best practices, as well as how to use this in the real world.
+
+
duration April 21, 2022 - Carl revisits the topic of MVVM with Blazor, clarifying your options.
+
+
duration April 14, 2022 - Build a generic repository that the client can query.
+
+
duration April 12, 2022 - David Pine introduces Blazorators, Blazor C# Source Generators on this month's Blazor Community Standup. Community links.
+
+
duration April 1, 2022 - Blazor enables building client-side web UI with .NET, but sometimes you need more than what the web platform offers. Sometimes you need full access to the native capabilities of the device. You can now host Blazor components in .NET MAUI apps to build cross-platform native apps using web UI. The components run natively in the .NET process and render web UI to an embedded web view control using a local interop channel. This hybrid approach gives you the best of native and the web. Your components can access native functionality through the .NET platform, and they render standard web UI. .NET MAUI Blazor apps can run anywhere .NET MAUI can (Windows, Mac, iOS, and Android).
+
+
duration March 31, 2022 - pp State Management using Fluxor, a Flux/Redux library for Blazor.
+
+
duration Mars 14, 2022 - Fritz shows you how to connect authentication and authorization to your Blazor app. We'll focus on how to connect a properly configured Microsoft Identity application to your Blazor framework.
+
+
duration Mars 8, 2022 - Join this Blazor Community Standup to learn more about using Blazor Hybrid to create cross-platform native client apps for Windows, iOS, Android & Mac. Community links.
+
+
duration Mars 2, 2022 - Tailwind CSS has been growing in popularity for some time. It’s fast becoming one of the top frameworks to use when styling applications. It offers a different approach to the traditional frameworks like Bootstrap—utility based styling. Rather than using prebuilt components—which result in your application looking like a lot of others on the web—you can tailor your design by applying small focused CSS classes resulting in a unique style for your app. In this talk, you will learn how to bring the power of Tailwind CSS to your Blazor applications. We’ll start off with an introduction to Tailwind and how it differs from other CSS frameworks. Then we’ll get into some code and see how we can integrate Tailwind with Blazor. For the rest of the time, we’ll explore the various features of Tailwind and see how just how beautiful we can make our Blazor app. By Chris Sainty, at the NDC Oslo 2021.
+
+
duration Mars 1, 2022 - Why create tests of UI components? Isn’t UI tests inherently brittle, run slowly, and hard to maintain? By Egil Hansen, at the NDC Oslo 2021.
+
+
duration February 28, 2022 - You've built your Blazor application, now where do you run it? In this demo filled session, Fritz will talk through Progressive Web Apps, packaging with Docker, and deploying your Blazor application to Azure. Community links.
+
+
duration February 21, 2022 - Talk by Steve Sanderson at the NDC Oslo 2021. .NET 6 is a huge release for Blazor, adding a ton of powerful new features for .NET web developers. This talk will be full of demos to get you up-to-speed on this hot framework.
+
+
duration duration February 14, 2022 - Blazor is a free and open-source web framework that enables developers to create web apps using C# and HTML. Being a .NET developer as well as a big fan of classic point-and-click adventure games, I’ve ported my Game-a-Tron 4000 adventure game engine to Blazor.
+
+
duration February 8, 2022 - Find out what's being planned for Blazor in .NET 7. Community links.
+
+
duration January 24, 2022 - The first day of the conference kicks off with a keynote session by Scott Hunter. Day one is focused on front-end technologies (Blazor). Conference website.
+
+
duration January 11, 2022 - Join Blazor creator Steve Sanderson for a special look at Blazor WebAssembly on .NET 6. Community links.
+ Articles
+
+
July 9, 2024 - This release focuses on quality-of-life enhancements for all developers and workloads. When you use Visual Studio, you want to feel empowered and productive. That's why quality-of-life features are so important: they make coding a smooth and enjoyable experience, free of unnecessary hassles and headaches. We hope you'll love this update.
+
+
June 12, 2024 - This article is about the new Blazor render modes in .NET 8, including ServerInteractivity, WebAssemblyInteractivity, AutoInteractivity and static server-side rendering (SSR).
+
+
June 11, 2024 - How to use Blazor.Diagrams.
+
+
June 4, 2024 - .NET 9 is shaping up ahead of its November 2024 release. Here are the highlights for Blazor so far.
+
+
May 29, 2024 - Avoiding interactivity with Blazor.
+
+
May 21, 2024 - .NET Announcements & Updates from Microsoft Build 2024.
+
+
November 28, 2023 - Per-User Blazor 8 State.
+
+
October 12, 2023 - Blazor 8 State Management.
+
+
October 10, 2023 - This is the last release candidate that we plan to share before the final .NET 8 release later this year. Most of the planned features and changes for .NET 8 are part of this release candidate and are ready for you to try out.
+
+
September 12, 2023 - This release includes a new AOT mode for both Android and WASM, System.Text.Json improvements, and Azure Managed Identity support for containers. Now is great time to pick up and test .NET 8 if you haven’t yet.
+
+
September 5, 2023 - This article introduces .NET Blazor, a powerful framework that unifies client-side and server-side development paradigms and offers enhanced performance and improved tooling.
+
+
July 13, 2023 - Userware is using vestiges of the long-gone and sorely missed Microsoft Silverlight web-dev platform to power its new "XAML for Blazor" offering, which lets .NET developers use markup language within client-side Blazor applications.
+
+
July 12, 2023 - New components and features added in the Syncfusion Essential Studio 2023 Volume 2 release for the Blazor platform.
+
+
July 11, 2023 - .NET 8 Preview 6 is now available and includes many great new improvements to ASP.NET Core. Here’s a summary of what’s new in this preview release: Form model binding & validation with server-side rendering, Enhanced page navigation & form handling, Preserve existing DOM elements with streaming rendering, Interactive rendering with Blazor WebAssembly and more.
+
+
July 11, 2023 - This is the first in a number of posts where we’ll explore the changes coming for Blazor in .NET 8.
+
+
July 10, 2023 - Today, we are thrilled to announce the release of “XAML for Blazor”, a new Blazor extension by Userware that brings the power of XAML to Blazor WebAssembly applications. It combines the familiarity and capabilities of XAML with the versatility of Blazor, empowering .NET developers to create cutting-edge web applications with even greater ease and flexibility.
+
+
June 13, 2023 - .NET 8 Preview 5 is now available and includes many great new improvements to ASP.NET Core. New Blazor Web App project template, Blazor router integration with endpoint routing, Blazor Content Security Policy (CSP) compatibility and more.
+
+
May 25, 2023 - List of available free and open-source user interface libraries for Blazor development.
+
+
May 23, 2023 - Components, done “right” carry tremendous potential to speed up your web development, and make ongoing maintenance (and development) of your apps much easier. But, like any tool, it all depends how you use it.
+
+
May 16, 2023 - .NET 8 Preview 4 is now available and includes many great new improvements to ASP.NET Core. Streaming rendering with Blazor components, Handling form posts with Blazor SSR, Route to named elements in Blazor, Webcil packaging for Blazor WebAssembly apps and more.
+
+
May 16, 2023 - .NET 8 is shaping up to be a significant release for Blazor, and there’s one big reason why.
+
+
April 24, 2023 - Are you ready for Build 2023? Microsoft’s premier developer conference is just around the corner, and there are several exciting .NET sessions that you won’t want to miss.
+
+
April 12, 2023 - Sooner or later, as you build out your Blazor UI, you’re going to hit a situation where your component isn’t re-rendering when you expect it to.
+
+
April 11, 2023 - ASP.NET Core updates in .NET 8 Preview 3. Here’s a summary of what’s new in this preview release: Server-side rendering with Blazor, Render Razor components outside of ASP.NET Core, Sections support in Blazor, Monitor Blazor Server circuit activity, SIMD enabled by default for Blazor WebAssembly apps and more. See the ASP.NET Core roadmap for .NET 8.
+
+
April 3, 2023 - Microsoft even offers a Build reusable components with Blazor learning module that shows how to build a Razor class library that contains Blazor components, package a Razor class library for use in other Blazor applications, and reference a Razor class library in a Blazor application and use its components. Author: Jeffrey T. Fritz.
+
+
February 23, 2023 - There are some big changes coming for Blazor in .NET 8 and they look very, very promising.
+
+
February 23, 2023 - The NavigationManager is a service that enables developers to programmatically navigate the user to different pages or external URIs. In ASP.NET Core 7, there were added new features that enable us to parse simple state between pages and listen to and intercept navigation. In this post, we will look at the basic capabilities of the NavigationManager, present what new features were added in ASP.NET Core 7, discuss how it fits into the Blazor/.NET ecosystem, and in the end present a scenario that is now possible with relative ease using new additions from ASP.NET Core 7.
+
+
February 21, 2023 - The first preview of .NET 8 is ready to download. This blog post covers the major themes and goals that drive the prioritization and selection of enhancements to develop. .NET 8 preview and release candidate builds will be delivered monthly. As usual, the final release will be delivered sometime in November at .NET Conf.
+
GitHub StarsLast Commit
+
February 19, 2023 - This blog is set in two parts. The first describes the process of setting up an Azure Active Directory multitenant on Azure, and the 2nd part describes how to integrate with a Blazor WASM application. Source code .
+
+
February 14, 2023 - See the setup and customization of the newest Progress Telerik Reporting viewer, implemented with Telerik UI for Blazor controls with both Blazor Wasm and Blazor Server.
+
+
February 1, 2023 - Release of Blazorise v1.2, which brings a number of new features, improvements, and bug fixes to the framework.
+
+
January 30, 2023 - This articles looks at the current state of WebAssembly (wasm). It starts by revisiting 2022 developments then he tries to predict where I think things will go in 2023.
+
+
January 30, 2023 - Second edition of the eBook "Blazor WebAssembly Succinctly" by Michael Washington.
+
+
January 28, 2023 - You can play dynamic audio in a Blazor Server application and have full control over the user interface. YouTube video about this article.
+
+
January 27, 2023 - Both Blazor and .NET MAUI are great and Powerful frameworks. Using .NET MAUI, you can build fully native cross-platform apps and build web apps completely in C# with Blazor. But when you combine them with the MAUI Blazor template, you need to know that it should feel like a mobile app, not a web page. This articles explains some tips and tricks.
+
+
January 26, 2023 - We've started some experiments to combine the advantages of Razor Pages, Blazor Server and Blazor WebAssembly all into one thing.
+
+
January 23, 2023 - Blazor WebAssembly allows to run a .NET web application in a browser. Starting with .NET 7, you can easily run any .NET method from JavaScript without needing the whole Blazor framework. Let's see how to run a .NET method from JavaScript.
+
+
January 21, 2023 - You can do a lot of things with Blazor: PWA, SSR, SPA, Hybrid app... the process of how the user sees the first page is different for each of these modes.
+
+
January 16, 2023 - Reducing Blazor WASM size by providing custom ICU data.
+
+
December 22, 2022 - Since version 7.0 of .NET, Microsoft has enhanced and integrated the ability to create HTML Custom Elements. These custom elements offer developers a way to create their own full-featured DOM elements. In Blazor, this allows publishing these components to other SPA Frameworks, such as Angular or React. More info in the Microsoft documentation.
+
+
December 19, 2022 - The .NET Podcast app was first introduced at .NET Conf 2021 and recently updated to highlight new features in .NET 7 at the .NET Conf 2022 keynote. The podcast app is ready to use sample application that showcases .NET, ASP.NET Core, Blazor, .NET MAUI, Azure Container Apps, Orleans, Power Platform, Playwright, and more. This post explains all the new features and show how we upgraded the .NET Podcast app to take advantage of them.
+
+
December 15, 2022 - This post is about the benefits of using WASM outside the browser and its potential as a transformative technology on the server.
+
GitHub StarsLast Commit
+
December 8, 2022 - Learn how to integrate with Keycloak from Blazor WASM. Create a public client and use built-in capabilities of Microsoft.AspNetCore.Components.WebAssembly.Authentication that integrates with OpenId Connect compliant providers. Source code Brings ChartJs.
+
+
December 5, 2022 - What’s new in the Microsoft Fluent UI library for Blazor version 2.0.
+
+
November 29, 2022 - In this post, we're going to reuse the concepts we have learned to build a better experience: a web application, that we can use to manage our custom learning provider and its contents. We'll focus on how to implement in a real application some of the peculiar features we have learned about these APIs, like the fact that a different set of permissions is required based on the type of content you're working with.
+
+
November 24, 2022 - This new Blazorise 1.1.4 is a hotfix release to solve this and a few other minor issues that were fixed in the meantime. Blazorise 1.1.4 is a recommended upgrade for all Blazorise 1.1 and Blazorise 1.1.3 users.
+
+
November 17, 2022 - If you are working with Blazor, gRPC is a big issue for transferring data from APIs to clients. One issue of developing with gRPC-Web is debugging the transmitted data because the data is in an efficient binary message format. This article shows you how to solve this problem with the help of my NuGet.
+
+
November 8, 2022 - This Blazorise version was supposed to be just a minor maintenance release. Instead, we got a few relatively large features and announcements, with .NET 7 support.
+
+
November 2, 2022 - Microsoft is exploring built-in container support for client-side Blazor WebAssembly apps. Article on Visual Studio Magazine.
+
+
October 31, 2022 - Resize images before uploading in Blazor Web Assembly.
+
+
October 31, 2022 - On October 24th, Docker announced the support of WASM and WASI in a new technical preview release. This articles tries it out and sees how it works with .NET 7.
+
+
October 29, 2022 - One of the cool features of Blazor is code reusability. Using Razor Class Library, we can use our Razor component in all blazor type project like Blazor Server, WASM and MAUI Hybrid.
+
+
October 29, 2022 - This post will show you how to run .NET 7 on a Raspberry PI Zero 2 W using WASM and WASI.
+
+
October 24, 2022 - The Technical Preview of Docker+Wasm is now available! Wasm has been producing a lot of buzz recently, and this feature will make it easier for you to quickly build applications targeting Wasm runtimes.
+
+
October 12, 2022 - This series describes the implementation of a User Interface driven by an Elsa workflow engine.
+
+
October 11, 2022 - .NET 7 Release Candidate 2 (RC2) is now available and includes many great new improvements to ASP.NET Core and Blazor: improved diagnostics for authentication in Blazor WebAssembly and WebAssembly multithreading (experimental).
+
+
October 11, 2022 - Multithreading support for client-side Blazor WebAssembly apps is planned for .NET 8 in November 2023, but developers can try it out now for .NET apps thanks to experimental functionality in the brand-new .NET 7 Release Candidate 2.
+
+
October 5, 2022 - Using .NET 7's Blazor Custom Elements to render dynamic content, by Jon Hilton.
+
+
October 4, 2022 - This article shows off a Blazor component that can display an object recursively in a tree view. The component was made as part as a project, FHIR Watch, a tool for comparing FHIR data from two different data sources: FHIR API Service and Dataverse. As such, it is particularly useful for displaying FHIR data.
+
+
September 30, 2022 - This post shows how to install the new template, create and run a new app using the template, and then I’ll share some recommended resources.
+
+
September 20, 2022 - WebAssembly, the open source tech that makes client-side Blazor work, was the star of the ASP.NET Core show in the new ASP.NET Core updates in .NET 7 Release Candidate 1.
+
GitHub StarsLast Commit
+
September 20, 2022 - Part 7 of the articles explaining how port the game Wolfenstein 3D on C# and Blazor. Source code .
    +
  • C# / Blazor Wolfenstein - Part 6 - The Basic Raycaster - September 18, 2022 - Part 6 of the articles explaining how port the game Wolfenstein 3D on C# and Blazor. Source code stars last commit.
  • +
+
+
September 14, 2022 - .NET 7 Release Candidate 1 (RC1) is now available and includes many great new improvements to ASP.NET Core.
+
+
September 7, 2022 - Please imagine the case that you have a Blazor WebAssembly PWA site that supports offline mode, and you've been opening that PWA by a web browser. If you published a new version of that PWA, you might want to verify it, I guess. In this case, you will reload the page on that web browser. However, you might never see the contents of the new version unexpectedly even though you hard-reload it.
+
+
September 2, 2022 - OpenAPI is a language-agnostic specification for documenting RESTful APIs. It allows both humans and computers to understand the capabilities of a service without accessing code, docs, or using other methods. Hosted Blazor WebAssembly apps include an ASP.NET Core backend for file and API access, and so implementing support for OpenAPI provides numerous benefits.
+
+
August 30, 2022 - Troubleshooting .NET Blazor WASM Debugging.
+
+
July 27, 2022 - The 3.1.4 release is primarily focused on stabilization. This includes a variety of performance optimizations, user experience improvements, and localization enhancements.
+
+
July 23, 2022 - This serie of article compares the approaches of XAML vs Blazor. The same application will be create using XAML and Blazor to discover the pros and cons. The part 1 focuses on XAML.
+
+
July 22, 2022 - Azure Static Web Apps is a great place to host Blazor WebAssembly apps. Among Static Web Apps' many features, it has built-in support for authentication using social logins. In this article, we'll look at how we can take advantage of Static Web Apps Authentication in our Blazor WebAssembly apps. By Anthony Chu, from Microsoft.
+
+
July 19, 2022 - Share Blazor components using dependency injection.
+
+
July 18, 2022 - Using IAsyncEnumerable in a Razor component.
+
+
July 15, 2022 - Try the new Blazor Guide in Visual Studio. Read on to learn about how to give it a try and for a chance to receive a sticker.
+
+
July 12, 2022 - .NET 7 Preview 6 is now available and includes many great new improvements to ASP.NET Core. Blazor custom elements no longer experimental, experimental QuickGrid component for Blazor, System.Security.Cryptography support on WebAssembly, empty Blazor project templates and more. For more details on the ASP.NET Core work planned for .NET 7 see the full ASP.NET Core roadmap for .NET 7 on GitHub.
+
+
June 29, 2022 - Uno Platform Does WebAssembly Threading Months Ahead of .NET 7, by David Ramel for Visual Studio Magazine.
+
+
June 29, 2022 - 3 reasons why I've created yet another library for the downloading on Blazor apps.
+
+
June 24, 2022 - Blazor Posts Biggest Gain in WebAssembly Usage: Report, by David Ramel for Visual Studio Magazine.
+
+
June 21, 2022 - Implementing RavenDB time series in a Blazor project.
+
+
June 9, 2022 - The FAST team and friends have been hard at work not only on Microsoft’s core Web Components platform, but also on Fluent UI integrations for Blazor. This post will give you an overview of what’s new and changed in versions 1.3 and 1.4 of the Microsoft Fluent UI Blazor library.
+
+
June 8, 2022 - A Full-Stack Web App Using Blazor WebAssembly and GraphQL: Part 3. Part 1.
+
+
May 31, 2022 - The dependency injection system is a big part of how modern ASP.NET Core works internally: It provides a flexible solution for developers to structure their projects, decouple their dependencies, and control the lifetimes of the components within an application. In Blazor - a new part of ASP.NET Core - however, the DI system feels a bit odd, and things seem to work a bit differently than expected. This article will explain why this is not only a feeling but indeed the case in the first place and how to handle the differences in order to not run into problems later on.
+
+
May 10, 2022 - .NET 7 Preview 4 is now available and includes many great new improvements to ASP.NET Core. Article by Dan Roth from Microsoft.
+
+
May 9, 2022 - Q&A: Deep Dive on Blazor, on Visual Studio Magazine.
+
+
May 6, 2022 - Syncfusion Essential Studio Release Enhances .NET MAUI, WinUI, Blazor and More, on Visual Studio Magazine.
+
+
April 28, 2022 - Use the Query String to pass an array of selected values between Blazor Pages.
+
+
April 26, 2022 - Guide on containerizing a complex system composed from multiple Blazor WASM apps, ASPNET Core Web Api, NGINX & Let's Encrypt SSL certificates.
+
+
April 12, 2022 - Sneak Preview how to use SQLite and EF Core in the browser with Blazor WebAssembly.
+
+
March 31, 2022 - Mastering Blazor - Part 1: DOM Integration.
+
+
March 24, 2022 - Conditional Blazor Styles (without the if statements).
+
+
March 18, 2022 - Securing a Blazor WebAssembly Hosted Apps with Azure Active Directory. Part 2.
+
+
February 17, 2022 - This article shows how to create a full-stack web application using Blazor WebAssembly and GraphQL with SQL Server as our database.
+
+
February 10, 2022 - What's Coming for Blazor Hybrid in .NET 7, Visual Studio Magazine.
+
+
January 19, 2022 - Use Tailwind's new JIT mode when developing Blazor applications.
+ Podcasts
+
+
June 20, 2024 - What's up with MAUI and Blazor? Carl and Richard chat with Beth Massi about the latest MAUI, including the new webview available on GitHub that lets you embed an existing web page into your MAUI app. Beth talks about making apps the way you want to - with a mobile, web, or desktop focus - or making them all! Mixing Blazor and MAUI means you can steer clear of XAML if you prefer. There's no right way to build your clients, and MAUI gives you many choices. Duration: 45 minutes.
+
+
March 27, 2023 - Chris is a Microsoft MVP, author, and software engineer with over 17 years of experience with ASP.NET. Passionate about sharing his knowledge with the community, he regularly writes both for his own blog as well as others — such as Visual Studio magazine, Progress Telerik, and StackOverflow. This passion for blogging led to his first book, Blazor in Action, a practical guide to building Blazor applications. He also maintains several popular open-source projects under the GitHub organization, Blazored. When not tapping on a keyboard, Chris is a keen speaker, having delivered talks at both user groups and conferences all over the world. Duration: 41 minutes.
+
+
March 23, 2023 - What if you didn't have to choose between client-side and server-side Blazor? Carl and Richard talk to Javier Nelson and Steve Sanderson about Blazor United in its early stages of development, providing flexibility at the web component level for client- and server-side rendering. At the simplest level, Blazor United offers server-side rendering when a site is first hit so that you can load the larger client-side components over time. But deeper is the idea that some elements on your web page benefit from being client-side, and some from being server-side, and why should you have to choose only one? Duration: 53 minutes.
+
+
July 17, 2022 - At NDC London we sat down with Steve Sanderson and talked about the origin story of Blazor, some of the upcoming things in .NET 7, and what Steve is working on right now. Duration: 35 minutes.
+
+
July 7, 2022 - WebAssembly is awesome - what else can you do with it? While at NDC London, Carl and Richard talked to Steve Sanderson about his work with WebAssembly, including Blazor. Steve talks about how WebAssembly continues to evolve adding WebAssembly System Integration. This opens the door to the idea that code in the WebAssembly can be run anywhere - any operating system, any language, using whatever compute is available. That gives an option to run code on the client, the server, and anywhere in between. Duration: 55 minutes.
+
+
June 2, 2022 - How do you find a great video clip after the fact? Carl and Richard talk to Jeff Fritz about his work building KlipTok, a tool for making Twitch video clips more discoverable and shareable. Jeff digs into the tricky bits of KlipTok, which is all about fast indexing and searching to get to the right clip. The conversation digs into various data storage techniques and using the cloud in a way that doesn't break the bank. Jeff may be a Microsoft employee, but that doesn't mean he uses only Microsoft tools for his projects. Duration: 57 minutes.
+
+
May 27, 2022 - Jon Galloway talks to David Ortinau about .NET MAUI. Duration: 41 minutes. YouTube video.
+
+
May 25, 2022 - Microsoft have just had their annual Build conference - which comes with a whole host of exciting announcements and discussions about hot programming topics in the Microsoft developer space. And each year, I long for a podcast episode to come out straight after Build, overviewing them! Well, this year - this podcast aims to do just that! In this episode, I was joined by both Scott Hunter and Gaurav Seth to chat about various topics. Check out the links below for a guide to what we discussed. Duration: 71 minutes.
+
+
May 10, 2022 - The Unhandled Exception Podcast with Andrew Lock (andrewlock.net). He’s the author of the Manning ebook, ASP.NET Core in Action, Second Edition. This episode covers a lot - from the different flavours of ASP.NET, to Kubernetes, Blazor, gRPC, testing, Minimal API, MediatR and more.
+
+
May 4, 2022 - In this episode we talked with Poornima Nayar about Umbraco Heartcore and where you might use it, Blazor, a little on GraphQL and how it fits very well with mobile apps which communicate with remote APIs. Duration: 59 minutes.
+
+
February 12, 2022 - Steve Sanderson talks about his journey into tech, his life, education, career and everything else in between. Duration: 73 minutes.
+ Presentations slides
+
+
January 28, 2021 - Using .NET 5 with the Raspberry Pi, on Slideshare.
+ Tooling
+
GitHub StarsLast Commit
+
Update .razor files and see the updates instantly without reloading the page. Your application state is preserved because there is no need to reload anything. livesharp.net.
+
+
Blazor .Net Developer Playground and Code Editor in the Browser.
+
GitHub StarsLast Commit
+
A project templates package of Blazor apps without JavaScript and CSS libraries.
+
GitHub StarsLast Commit
+
Write, compile, execute and share Blazor components entirely in the browser - https://blazorrepl.com.
+
+
A Visual Studio Code extension that offers Blazor and Razor snippets.
+
Last Commit
+
When you publish your Blazor WebAssembly app, this package pre-renders and saves the app as static HTML files in your public folder.
+
Last Commit
+
Add this NuGet package to your Blazor WebAssembly project to easily publish it to GitHub Pages.
+
GitHub StarsLast Commit
+
A dotnet global tool for compilation, minification, and compression of scss, css and js.
+
+
.NET Core.
+
+
A Visual Studio Code extension that offers improved Razor support.
+
GitHub StarsLast Commit
+
Tracetool viewer, client Api for Dotnet, Java, Javasvript, C++ , Python, Delphi.
+
+
Latest preview of Visual Studio.
+
+
Visual Studio Code, free, open source and cross-platform code editor.
+ Books
+
+
Build Single-Page Apps with WebAssembly and C# (By David Pine via O'Reilly Early Release February 3rd, 2022).
+
+
A practical and hands-on approach to learning Blazor using .NET 6. (3rd ed. edition (December 8, 2021).
+
+
Blazor WebAssembly by Example: A project-based guide to building web apps with .NET, Blazor WebAssembly, and C# (1st edition published the July 9th, 2021).
+
+
An example-driven guide to building reusable UI components and web frontends—all with Blazor, C#, and .NET. (Manning Early Access Program began October 2020).
+
+
Microsoft Blazor: Building Web Applications in .NET (Second edition published in May 2020).
+
+
Blazor Revealed, Building Web Applications in .NET (Published February, 2019).
+
+
Blazor Quick Start Guide: Build web applications using Blazor, EF Core, and SQL Server (Published October 31, 2018).
+ E-Books
+
+
August 31, 2020 - Blazor is a framework for creating SPA webpages with either client-side or server-side architectures, using Razor technology written with the C# language. Because client-side Blazor with WebAssembly executes entirely on a user's browser, it’s very fast for many applications. In Blazor WebAssembly Succinctly, Michael Washington will take readers through the core elements of Blazor and then explore additional features by building a sample application. Free e-book.
+
+
April 16, 2020 - A free e-book for starting with the Blazor framework.
+
+
March 18, 2020 - A free e-book for getting started with the Blazor framework. Examples source code.
+
+
Blazor for ASP.NET Web Forms developers, a free e-book from Microsoft.
+
+
This book covers the new Blazor UI framework, including how to create server-side and client-side WebAssembly projects, how to implement authentication and authorization, and how to use data binding. It then covers how CSLA .NET supports Blazor, including walking through a complete sample app.
+
+
August 24, 2019 - An Introduction to Building Applications with Blazor: How to get started creating applications using this exciting easy to use Microsoft C# framework
+ Courses
+
+
Build a web app with Blazor WebAssembly and Visual Studio Code, on Microsoft Learn.
+
+
June 2020 - DevOps and Docker Support for .NET Core Blazor Applications, on Udemy. This Docker Support Course with DevOps concepts using ASP.NET Core Blazor will teach you Dockerisation of Blazor Apps.
+
+
Create interactive web applications with C#, on Udemy.
+
+
December, 2019 - Building a Blazor app is building components. This course is essential for gaining a good understanding of components. On Pluralsight.
+
+
December, 2019 - Learn how to secure your Blazor application using a variety of best practice techniques for authentication and authorization. On Pluralsight.
+
+
December, 2019 - Learn how to build your first application in a hands-on way using Blazor, Microsoft's solution to use C# to write interactive web UIs without JavaScript. On Pluralsight.
+
+
December 2019 - Blazor In-Depth Workshop (Blaze Invaders), on C# Academy. Learn serious Blazor concepts while building a working browser based game.
+
+
October 2019 - Learn how to use a framework that allows you to run your compiled code directly in the browser on top of WebAssembly, a course on Udemy.
+
+
October 2019 - Blazor on ASP.NET Core 3.0, a course on SkillShare.
+
GitHub Stars
+
Blazor First Look on LinkedIn Learning. Source code .
+
GitHub Stars
+
DevExpress Blazor free training course Source code .
+
+
June 2021 - Discover the Core Concepts of Blazor and learn to create web applications with ease.
+ Community
+
+
This repository's Twitter feed.
+
+
Blazor channel on the DotNetEvolution discord server.
+
+
Blazor discussion on Gitter.
+
GitHub StarsLast Commit
+
    +
  • This is a .NET knowledge sharing platform with live demos crafted by developers for developers with love using .NET Blazor. ilovedotnet.org.
  • +
+
+
Community documentation on Blazor.
+
+
Blogs and code samples primarily covering server-side Blazor.
+
+
Practical samples of Blazor.
+
+
Practical samples of Blazor Server-Side.
+
+
Blazor subreddit.
+
+
Blazor questions feed on Stack Overflow.
+
+
Hashtag on Twitter.
+
+
Man page for Blazor and WebAssembly.
+ Other Languages
+
+
[Portuguese] Blog about Blazor.
+
+
[Russian] Old official documentation website translated in Russian.
+
+
[French] DevApps.be's podcast #44: "Blazor et WebAssembly vont-ils tuer JavaScript ?".
+
+
[French] DevApps.be's podcast #47: "Actualités : TypeScript, Uno, Angular, DocFX, Database".
+
+
[Italian] Video about Blazor.
+
+
[Italian] Italian Blazor community website with useful articles and events.
+
+
[Spanish] Series of videos about Blazor.
+
+
[German] Blog about Blazor.
+ +
+ + + +
+ +
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + diff --git a/404.html.br b/404.html.br new file mode 100644 index 00000000..850f2fea Binary files /dev/null and b/404.html.br differ diff --git a/404.html.gz b/404.html.gz new file mode 100644 index 00000000..c4125544 Binary files /dev/null and b/404.html.gz differ diff --git a/AwesomeBlazorBrowser.styles.css b/AwesomeBlazorBrowser.styles.css new file mode 100644 index 00000000..9bb57242 --- /dev/null +++ b/AwesomeBlazorBrowser.styles.css @@ -0,0 +1,2 @@ +@import '_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css'; + diff --git a/AwesomeBlazorBrowser.styles.css.br b/AwesomeBlazorBrowser.styles.css.br new file mode 100644 index 00000000..c062b36b Binary files /dev/null and b/AwesomeBlazorBrowser.styles.css.br differ diff --git a/AwesomeBlazorBrowser.styles.css.gz b/AwesomeBlazorBrowser.styles.css.gz new file mode 100644 index 00000000..b0237aa4 Binary files /dev/null and b/AwesomeBlazorBrowser.styles.css.gz differ diff --git a/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js b/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js new file mode 100755 index 00000000..7199b8c6 --- /dev/null +++ b/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js @@ -0,0 +1 @@ +export const afterStarted=()=>{typeof WorkerGlobalScope=="undefined"&&((n,t,i,r,u)=>{for(r=n.createNodeIterator(n.head,128);r.nextNode();)if(u=r.referenceNode,t(u)){do i=u.nextSibling,i.remove();while(!t(i));u.remove();break}Array.from(n.querySelectorAll("script")).pop()?.remove()})(document,n=>/^%%-PRERENDERING-HEADOUTLET-(BEGIN|END)-%%$/.test(n.textContent.trim()))}; \ No newline at end of file diff --git a/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js.br b/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js.br new file mode 100644 index 00000000..968e0274 Binary files /dev/null and b/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js.br differ diff --git a/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js.gz b/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js.gz new file mode 100644 index 00000000..2cf0d775 Binary files /dev/null and b/_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js.gz differ diff --git a/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css b/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css new file mode 100755 index 00000000..45264d78 --- /dev/null +++ b/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css @@ -0,0 +1,10 @@ +/* _content/Toolbelt.Blazor.GradatedText/GradatedText.razor.rz.scp.css */ +.gradated-text[b-wc7soxp7qy] { + display: inline-block; + background: linear-gradient(128.87deg,#9780e5 14.05%,#e666cc 89.3%); + background: -webkit-linear-gradient(38.87deg,#9780e5 14.05%,#e666cc 89.3%); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + text-fill-color: transparent; +} diff --git a/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css.br b/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css.br new file mode 100644 index 00000000..e5a569ef Binary files /dev/null and b/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css.br differ diff --git a/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css.gz b/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css.gz new file mode 100644 index 00000000..d765024c Binary files /dev/null and b/_content/Toolbelt.Blazor.GradatedText/Toolbelt.Blazor.GradatedText.bundle.scp.css.gz differ diff --git a/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm b/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm new file mode 100644 index 00000000..5885ae62 Binary files /dev/null and b/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm differ diff --git a/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm.br b/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm.br new file mode 100644 index 00000000..c1303710 Binary files /dev/null and b/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm.br differ diff --git a/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm.gz b/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm.gz new file mode 100644 index 00000000..1252211b Binary files /dev/null and b/_framework/AwesomeBlazor.Models.7m16qs3gvd.wasm.gz differ diff --git a/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm b/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm new file mode 100644 index 00000000..89cbc323 Binary files /dev/null and b/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm differ diff --git a/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm.br b/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm.br new file mode 100644 index 00000000..39fbd2b4 Binary files /dev/null and b/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm.br differ diff --git a/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm.gz b/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm.gz new file mode 100644 index 00000000..6ccfbdfa Binary files /dev/null and b/_framework/AwesomeBlazorBrowser.9oxndz9zbe.wasm.gz differ diff --git a/_framework/Markdig.earcieyyzk.wasm b/_framework/Markdig.earcieyyzk.wasm new file mode 100644 index 00000000..99cca591 Binary files /dev/null and b/_framework/Markdig.earcieyyzk.wasm differ diff --git a/_framework/Markdig.earcieyyzk.wasm.br b/_framework/Markdig.earcieyyzk.wasm.br new file mode 100644 index 00000000..9f9b3eb6 Binary files /dev/null and b/_framework/Markdig.earcieyyzk.wasm.br differ diff --git a/_framework/Markdig.earcieyyzk.wasm.gz b/_framework/Markdig.earcieyyzk.wasm.gz new file mode 100644 index 00000000..85cfc63e Binary files /dev/null and b/_framework/Markdig.earcieyyzk.wasm.gz differ diff --git a/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm b/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm new file mode 100644 index 00000000..5721e1c0 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm differ diff --git a/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm.br b/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm.br new file mode 100644 index 00000000..389e14cb Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm.br differ diff --git a/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm.gz b/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm.gz new file mode 100644 index 00000000..6ead6c54 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm.gz differ diff --git a/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm b/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm new file mode 100644 index 00000000..2042c76e Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm differ diff --git a/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm.br b/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm.br new file mode 100644 index 00000000..9cd680c8 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm.br differ diff --git a/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm.gz b/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm.gz new file mode 100644 index 00000000..981e9aae Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm.gz differ diff --git a/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm b/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm new file mode 100644 index 00000000..464868e1 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm differ diff --git a/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm.br b/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm.br new file mode 100644 index 00000000..4ed69048 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm.br differ diff --git a/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm.gz b/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm.gz new file mode 100644 index 00000000..3e55ca27 Binary files /dev/null and b/_framework/Microsoft.AspNetCore.Components.buhpw5efhp.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm b/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm new file mode 100644 index 00000000..bbb5c5ad Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm differ diff --git a/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm.br b/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm.br new file mode 100644 index 00000000..eefc95b7 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm.br differ diff --git a/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm.gz b/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm.gz new file mode 100644 index 00000000..26df78d8 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.8uk3noxgmv.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm b/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm new file mode 100644 index 00000000..e15f7cf8 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm differ diff --git a/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm.br b/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm.br new file mode 100644 index 00000000..9bc1bcfe Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm.br differ diff --git a/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm.gz b/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm.gz new file mode 100644 index 00000000..3a056a1f Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm b/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm new file mode 100644 index 00000000..9e6affc2 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm differ diff --git a/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm.br b/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm.br new file mode 100644 index 00000000..0dcbb967 Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm.br differ diff --git a/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm.gz b/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm.gz new file mode 100644 index 00000000..7a73162d Binary files /dev/null and b/_framework/Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm new file mode 100644 index 00000000..0c14d2ec Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm.br b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm.br new file mode 100644 index 00000000..9895e2a8 Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm.br differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm.gz b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm.gz new file mode 100644 index 00000000..c3dc15cf Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm b/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm new file mode 100644 index 00000000..bd945052 Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm.br b/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm.br new file mode 100644 index 00000000..d552b589 Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm.br differ diff --git a/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm.gz b/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm.gz new file mode 100644 index 00000000..5c786cff Binary files /dev/null and b/_framework/Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm b/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm new file mode 100644 index 00000000..28c39733 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm differ diff --git a/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm.br b/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm.br new file mode 100644 index 00000000..8dcd78c8 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm.br differ diff --git a/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm.gz b/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm.gz new file mode 100644 index 00000000..78db9226 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm b/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm new file mode 100644 index 00000000..ba13a582 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm differ diff --git a/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm.br b/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm.br new file mode 100644 index 00000000..8ea28769 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm.br differ diff --git a/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm.gz b/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm.gz new file mode 100644 index 00000000..84a96139 Binary files /dev/null and b/_framework/Microsoft.Extensions.Logging.a38f1ed6u5.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm b/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm new file mode 100644 index 00000000..c9142b6a Binary files /dev/null and b/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm differ diff --git a/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm.br b/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm.br new file mode 100644 index 00000000..190e5ca6 Binary files /dev/null and b/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm.br differ diff --git a/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm.gz b/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm.gz new file mode 100644 index 00000000..8d085bc3 Binary files /dev/null and b/_framework/Microsoft.Extensions.Options.0l1wscbvap.wasm.gz differ diff --git a/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm b/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm new file mode 100644 index 00000000..12a540bc Binary files /dev/null and b/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm differ diff --git a/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm.br b/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm.br new file mode 100644 index 00000000..bd6d7519 Binary files /dev/null and b/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm.br differ diff --git a/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm.gz b/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm.gz new file mode 100644 index 00000000..4b103ffc Binary files /dev/null and b/_framework/Microsoft.Extensions.Primitives.jo6l1avrrg.wasm.gz differ diff --git a/_framework/Microsoft.JSInterop.5f7abvou5d.wasm b/_framework/Microsoft.JSInterop.5f7abvou5d.wasm new file mode 100644 index 00000000..8f4d9e88 Binary files /dev/null and b/_framework/Microsoft.JSInterop.5f7abvou5d.wasm differ diff --git a/_framework/Microsoft.JSInterop.5f7abvou5d.wasm.br b/_framework/Microsoft.JSInterop.5f7abvou5d.wasm.br new file mode 100644 index 00000000..702e3beb Binary files /dev/null and b/_framework/Microsoft.JSInterop.5f7abvou5d.wasm.br differ diff --git a/_framework/Microsoft.JSInterop.5f7abvou5d.wasm.gz b/_framework/Microsoft.JSInterop.5f7abvou5d.wasm.gz new file mode 100644 index 00000000..25c553a9 Binary files /dev/null and b/_framework/Microsoft.JSInterop.5f7abvou5d.wasm.gz differ diff --git a/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm b/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm new file mode 100644 index 00000000..095ff14d Binary files /dev/null and b/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm differ diff --git a/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm.br b/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm.br new file mode 100644 index 00000000..759a11b3 Binary files /dev/null and b/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm.br differ diff --git a/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm.gz b/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm.gz new file mode 100644 index 00000000..0631c004 Binary files /dev/null and b/_framework/Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm.gz differ diff --git a/_framework/System.Collections.1gydz28hcd.wasm b/_framework/System.Collections.1gydz28hcd.wasm new file mode 100644 index 00000000..b43198d5 Binary files /dev/null and b/_framework/System.Collections.1gydz28hcd.wasm differ diff --git a/_framework/System.Collections.1gydz28hcd.wasm.br b/_framework/System.Collections.1gydz28hcd.wasm.br new file mode 100644 index 00000000..d5500d36 Binary files /dev/null and b/_framework/System.Collections.1gydz28hcd.wasm.br differ diff --git a/_framework/System.Collections.1gydz28hcd.wasm.gz b/_framework/System.Collections.1gydz28hcd.wasm.gz new file mode 100644 index 00000000..441551d1 Binary files /dev/null and b/_framework/System.Collections.1gydz28hcd.wasm.gz differ diff --git a/_framework/System.Collections.Concurrent.ynobywm94s.wasm b/_framework/System.Collections.Concurrent.ynobywm94s.wasm new file mode 100644 index 00000000..81eac047 Binary files /dev/null and b/_framework/System.Collections.Concurrent.ynobywm94s.wasm differ diff --git a/_framework/System.Collections.Concurrent.ynobywm94s.wasm.br b/_framework/System.Collections.Concurrent.ynobywm94s.wasm.br new file mode 100644 index 00000000..6c08ad4a Binary files /dev/null and b/_framework/System.Collections.Concurrent.ynobywm94s.wasm.br differ diff --git a/_framework/System.Collections.Concurrent.ynobywm94s.wasm.gz b/_framework/System.Collections.Concurrent.ynobywm94s.wasm.gz new file mode 100644 index 00000000..c0bc21c8 Binary files /dev/null and b/_framework/System.Collections.Concurrent.ynobywm94s.wasm.gz differ diff --git a/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm b/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm new file mode 100644 index 00000000..6ba17685 Binary files /dev/null and b/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm differ diff --git a/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm.br b/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm.br new file mode 100644 index 00000000..3951c483 Binary files /dev/null and b/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm.br differ diff --git a/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm.gz b/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm.gz new file mode 100644 index 00000000..9378bd52 Binary files /dev/null and b/_framework/System.Collections.Immutable.kwsmi5a5xj.wasm.gz differ diff --git a/_framework/System.Collections.Specialized.rlk4q23gs1.wasm b/_framework/System.Collections.Specialized.rlk4q23gs1.wasm new file mode 100644 index 00000000..402599fc Binary files /dev/null and b/_framework/System.Collections.Specialized.rlk4q23gs1.wasm differ diff --git a/_framework/System.Collections.Specialized.rlk4q23gs1.wasm.br b/_framework/System.Collections.Specialized.rlk4q23gs1.wasm.br new file mode 100644 index 00000000..3a92402d Binary files /dev/null and b/_framework/System.Collections.Specialized.rlk4q23gs1.wasm.br differ diff --git a/_framework/System.Collections.Specialized.rlk4q23gs1.wasm.gz b/_framework/System.Collections.Specialized.rlk4q23gs1.wasm.gz new file mode 100644 index 00000000..906eaef3 Binary files /dev/null and b/_framework/System.Collections.Specialized.rlk4q23gs1.wasm.gz differ diff --git a/_framework/System.ComponentModel.Primitives.7kutolriix.wasm b/_framework/System.ComponentModel.Primitives.7kutolriix.wasm new file mode 100644 index 00000000..439a1966 Binary files /dev/null and b/_framework/System.ComponentModel.Primitives.7kutolriix.wasm differ diff --git a/_framework/System.ComponentModel.Primitives.7kutolriix.wasm.br b/_framework/System.ComponentModel.Primitives.7kutolriix.wasm.br new file mode 100644 index 00000000..145cc61b Binary files /dev/null and b/_framework/System.ComponentModel.Primitives.7kutolriix.wasm.br differ diff --git a/_framework/System.ComponentModel.Primitives.7kutolriix.wasm.gz b/_framework/System.ComponentModel.Primitives.7kutolriix.wasm.gz new file mode 100644 index 00000000..e10ec360 Binary files /dev/null and b/_framework/System.ComponentModel.Primitives.7kutolriix.wasm.gz differ diff --git a/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm b/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm new file mode 100644 index 00000000..89b2f9b2 Binary files /dev/null and b/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm differ diff --git a/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm.br b/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm.br new file mode 100644 index 00000000..15c4cc1c Binary files /dev/null and b/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm.br differ diff --git a/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm.gz b/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm.gz new file mode 100644 index 00000000..3f83823a Binary files /dev/null and b/_framework/System.ComponentModel.TypeConverter.7lx3leh5re.wasm.gz differ diff --git a/_framework/System.ComponentModel.x3o7f6y5sp.wasm b/_framework/System.ComponentModel.x3o7f6y5sp.wasm new file mode 100644 index 00000000..64247843 Binary files /dev/null and b/_framework/System.ComponentModel.x3o7f6y5sp.wasm differ diff --git a/_framework/System.ComponentModel.x3o7f6y5sp.wasm.br b/_framework/System.ComponentModel.x3o7f6y5sp.wasm.br new file mode 100644 index 00000000..5aeb73a9 Binary files /dev/null and b/_framework/System.ComponentModel.x3o7f6y5sp.wasm.br differ diff --git a/_framework/System.ComponentModel.x3o7f6y5sp.wasm.gz b/_framework/System.ComponentModel.x3o7f6y5sp.wasm.gz new file mode 100644 index 00000000..67b612ed Binary files /dev/null and b/_framework/System.ComponentModel.x3o7f6y5sp.wasm.gz differ diff --git a/_framework/System.Console.bpuc957ibb.wasm b/_framework/System.Console.bpuc957ibb.wasm new file mode 100644 index 00000000..2d9bcdfe Binary files /dev/null and b/_framework/System.Console.bpuc957ibb.wasm differ diff --git a/_framework/System.Console.bpuc957ibb.wasm.br b/_framework/System.Console.bpuc957ibb.wasm.br new file mode 100644 index 00000000..f5ed2ed7 Binary files /dev/null and b/_framework/System.Console.bpuc957ibb.wasm.br differ diff --git a/_framework/System.Console.bpuc957ibb.wasm.gz b/_framework/System.Console.bpuc957ibb.wasm.gz new file mode 100644 index 00000000..93de863d Binary files /dev/null and b/_framework/System.Console.bpuc957ibb.wasm.gz differ diff --git a/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm b/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm new file mode 100644 index 00000000..7150d01c Binary files /dev/null and b/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm differ diff --git a/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm.br b/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm.br new file mode 100644 index 00000000..345393c9 Binary files /dev/null and b/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm.br differ diff --git a/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm.gz b/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm.gz new file mode 100644 index 00000000..954bb23f Binary files /dev/null and b/_framework/System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm.gz differ diff --git a/_framework/System.IO.Pipelines.o49ueulm8k.wasm b/_framework/System.IO.Pipelines.o49ueulm8k.wasm new file mode 100644 index 00000000..f8c3af77 Binary files /dev/null and b/_framework/System.IO.Pipelines.o49ueulm8k.wasm differ diff --git a/_framework/System.IO.Pipelines.o49ueulm8k.wasm.br b/_framework/System.IO.Pipelines.o49ueulm8k.wasm.br new file mode 100644 index 00000000..3c0aa649 Binary files /dev/null and b/_framework/System.IO.Pipelines.o49ueulm8k.wasm.br differ diff --git a/_framework/System.IO.Pipelines.o49ueulm8k.wasm.gz b/_framework/System.IO.Pipelines.o49ueulm8k.wasm.gz new file mode 100644 index 00000000..93165d7b Binary files /dev/null and b/_framework/System.IO.Pipelines.o49ueulm8k.wasm.gz differ diff --git a/_framework/System.Linq.reix466n3d.wasm b/_framework/System.Linq.reix466n3d.wasm new file mode 100644 index 00000000..4274a3e6 Binary files /dev/null and b/_framework/System.Linq.reix466n3d.wasm differ diff --git a/_framework/System.Linq.reix466n3d.wasm.br b/_framework/System.Linq.reix466n3d.wasm.br new file mode 100644 index 00000000..32cf6e06 Binary files /dev/null and b/_framework/System.Linq.reix466n3d.wasm.br differ diff --git a/_framework/System.Linq.reix466n3d.wasm.gz b/_framework/System.Linq.reix466n3d.wasm.gz new file mode 100644 index 00000000..ac8c894c Binary files /dev/null and b/_framework/System.Linq.reix466n3d.wasm.gz differ diff --git a/_framework/System.Memory.7g3ydoytjz.wasm b/_framework/System.Memory.7g3ydoytjz.wasm new file mode 100644 index 00000000..e996b22b Binary files /dev/null and b/_framework/System.Memory.7g3ydoytjz.wasm differ diff --git a/_framework/System.Memory.7g3ydoytjz.wasm.br b/_framework/System.Memory.7g3ydoytjz.wasm.br new file mode 100644 index 00000000..4336f0c8 Binary files /dev/null and b/_framework/System.Memory.7g3ydoytjz.wasm.br differ diff --git a/_framework/System.Memory.7g3ydoytjz.wasm.gz b/_framework/System.Memory.7g3ydoytjz.wasm.gz new file mode 100644 index 00000000..a52d9c62 Binary files /dev/null and b/_framework/System.Memory.7g3ydoytjz.wasm.gz differ diff --git a/_framework/System.Net.Http.wvb8q5wodz.wasm b/_framework/System.Net.Http.wvb8q5wodz.wasm new file mode 100644 index 00000000..30047b22 Binary files /dev/null and b/_framework/System.Net.Http.wvb8q5wodz.wasm differ diff --git a/_framework/System.Net.Http.wvb8q5wodz.wasm.br b/_framework/System.Net.Http.wvb8q5wodz.wasm.br new file mode 100644 index 00000000..3f124862 Binary files /dev/null and b/_framework/System.Net.Http.wvb8q5wodz.wasm.br differ diff --git a/_framework/System.Net.Http.wvb8q5wodz.wasm.gz b/_framework/System.Net.Http.wvb8q5wodz.wasm.gz new file mode 100644 index 00000000..982da670 Binary files /dev/null and b/_framework/System.Net.Http.wvb8q5wodz.wasm.gz differ diff --git a/_framework/System.Net.Primitives.62r4htcf3w.wasm b/_framework/System.Net.Primitives.62r4htcf3w.wasm new file mode 100644 index 00000000..d36596c1 Binary files /dev/null and b/_framework/System.Net.Primitives.62r4htcf3w.wasm differ diff --git a/_framework/System.Net.Primitives.62r4htcf3w.wasm.br b/_framework/System.Net.Primitives.62r4htcf3w.wasm.br new file mode 100644 index 00000000..e08bc229 Binary files /dev/null and b/_framework/System.Net.Primitives.62r4htcf3w.wasm.br differ diff --git a/_framework/System.Net.Primitives.62r4htcf3w.wasm.gz b/_framework/System.Net.Primitives.62r4htcf3w.wasm.gz new file mode 100644 index 00000000..23ce5db6 Binary files /dev/null and b/_framework/System.Net.Primitives.62r4htcf3w.wasm.gz differ diff --git a/_framework/System.ObjectModel.0z9z5wui7u.wasm b/_framework/System.ObjectModel.0z9z5wui7u.wasm new file mode 100644 index 00000000..ef8b4e8d Binary files /dev/null and b/_framework/System.ObjectModel.0z9z5wui7u.wasm differ diff --git a/_framework/System.ObjectModel.0z9z5wui7u.wasm.br b/_framework/System.ObjectModel.0z9z5wui7u.wasm.br new file mode 100644 index 00000000..8b4bb914 Binary files /dev/null and b/_framework/System.ObjectModel.0z9z5wui7u.wasm.br differ diff --git a/_framework/System.ObjectModel.0z9z5wui7u.wasm.gz b/_framework/System.ObjectModel.0z9z5wui7u.wasm.gz new file mode 100644 index 00000000..b3a513e5 Binary files /dev/null and b/_framework/System.ObjectModel.0z9z5wui7u.wasm.gz differ diff --git a/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm b/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm new file mode 100644 index 00000000..f70add7a Binary files /dev/null and b/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm differ diff --git a/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm.br b/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm.br new file mode 100644 index 00000000..df9a6dbc Binary files /dev/null and b/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm.br differ diff --git a/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm.gz b/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm.gz new file mode 100644 index 00000000..18776d75 Binary files /dev/null and b/_framework/System.Private.CoreLib.ic8cgzk5m1.wasm.gz differ diff --git a/_framework/System.Private.Uri.k6miwvt0ph.wasm b/_framework/System.Private.Uri.k6miwvt0ph.wasm new file mode 100644 index 00000000..28d03ad4 Binary files /dev/null and b/_framework/System.Private.Uri.k6miwvt0ph.wasm differ diff --git a/_framework/System.Private.Uri.k6miwvt0ph.wasm.br b/_framework/System.Private.Uri.k6miwvt0ph.wasm.br new file mode 100644 index 00000000..fed3c8b0 Binary files /dev/null and b/_framework/System.Private.Uri.k6miwvt0ph.wasm.br differ diff --git a/_framework/System.Private.Uri.k6miwvt0ph.wasm.gz b/_framework/System.Private.Uri.k6miwvt0ph.wasm.gz new file mode 100644 index 00000000..9401dd63 Binary files /dev/null and b/_framework/System.Private.Uri.k6miwvt0ph.wasm.gz differ diff --git a/_framework/System.Runtime.0r81renmcg.wasm b/_framework/System.Runtime.0r81renmcg.wasm new file mode 100644 index 00000000..0da0dfdf Binary files /dev/null and b/_framework/System.Runtime.0r81renmcg.wasm differ diff --git a/_framework/System.Runtime.0r81renmcg.wasm.br b/_framework/System.Runtime.0r81renmcg.wasm.br new file mode 100644 index 00000000..b83f4f9c Binary files /dev/null and b/_framework/System.Runtime.0r81renmcg.wasm.br differ diff --git a/_framework/System.Runtime.0r81renmcg.wasm.gz b/_framework/System.Runtime.0r81renmcg.wasm.gz new file mode 100644 index 00000000..a593066b Binary files /dev/null and b/_framework/System.Runtime.0r81renmcg.wasm.gz differ diff --git a/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm b/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm new file mode 100644 index 00000000..c66eb58a Binary files /dev/null and b/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm differ diff --git a/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm.br b/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm.br new file mode 100644 index 00000000..d4f4191d Binary files /dev/null and b/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm.br differ diff --git a/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm.gz b/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm.gz new file mode 100644 index 00000000..08b1581c Binary files /dev/null and b/_framework/System.Runtime.InteropServices.0oaau8dzb2.wasm.gz differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm b/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm new file mode 100644 index 00000000..b00a1f74 Binary files /dev/null and b/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm.br b/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm.br new file mode 100644 index 00000000..a7ab7c63 Binary files /dev/null and b/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm.br differ diff --git a/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm.gz b/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm.gz new file mode 100644 index 00000000..af2f48a7 Binary files /dev/null and b/_framework/System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm.gz differ diff --git a/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm b/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm new file mode 100644 index 00000000..2e344cb6 Binary files /dev/null and b/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm differ diff --git a/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm.br b/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm.br new file mode 100644 index 00000000..89cbe956 Binary files /dev/null and b/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm.br differ diff --git a/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm.gz b/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm.gz new file mode 100644 index 00000000..fc136a31 Binary files /dev/null and b/_framework/System.Text.Encodings.Web.ouyex9zmsy.wasm.gz differ diff --git a/_framework/System.Text.Json.c9sdl2elxl.wasm b/_framework/System.Text.Json.c9sdl2elxl.wasm new file mode 100644 index 00000000..9368d1d9 Binary files /dev/null and b/_framework/System.Text.Json.c9sdl2elxl.wasm differ diff --git a/_framework/System.Text.Json.c9sdl2elxl.wasm.br b/_framework/System.Text.Json.c9sdl2elxl.wasm.br new file mode 100644 index 00000000..9e0dbf49 Binary files /dev/null and b/_framework/System.Text.Json.c9sdl2elxl.wasm.br differ diff --git a/_framework/System.Text.Json.c9sdl2elxl.wasm.gz b/_framework/System.Text.Json.c9sdl2elxl.wasm.gz new file mode 100644 index 00000000..76c54a5e Binary files /dev/null and b/_framework/System.Text.Json.c9sdl2elxl.wasm.gz differ diff --git a/_framework/System.Text.RegularExpressions.h097c0ruat.wasm b/_framework/System.Text.RegularExpressions.h097c0ruat.wasm new file mode 100644 index 00000000..9abab945 Binary files /dev/null and b/_framework/System.Text.RegularExpressions.h097c0ruat.wasm differ diff --git a/_framework/System.Text.RegularExpressions.h097c0ruat.wasm.br b/_framework/System.Text.RegularExpressions.h097c0ruat.wasm.br new file mode 100644 index 00000000..d37c1ae1 Binary files /dev/null and b/_framework/System.Text.RegularExpressions.h097c0ruat.wasm.br differ diff --git a/_framework/System.Text.RegularExpressions.h097c0ruat.wasm.gz b/_framework/System.Text.RegularExpressions.h097c0ruat.wasm.gz new file mode 100644 index 00000000..e6686767 Binary files /dev/null and b/_framework/System.Text.RegularExpressions.h097c0ruat.wasm.gz differ diff --git a/_framework/System.Threading.c77esjincm.wasm b/_framework/System.Threading.c77esjincm.wasm new file mode 100644 index 00000000..159cd239 Binary files /dev/null and b/_framework/System.Threading.c77esjincm.wasm differ diff --git a/_framework/System.Threading.c77esjincm.wasm.br b/_framework/System.Threading.c77esjincm.wasm.br new file mode 100644 index 00000000..576c5438 Binary files /dev/null and b/_framework/System.Threading.c77esjincm.wasm.br differ diff --git a/_framework/System.Threading.c77esjincm.wasm.gz b/_framework/System.Threading.c77esjincm.wasm.gz new file mode 100644 index 00000000..63cbaa01 Binary files /dev/null and b/_framework/System.Threading.c77esjincm.wasm.gz differ diff --git a/_framework/System.Web.HttpUtility.il4jw89q8e.wasm b/_framework/System.Web.HttpUtility.il4jw89q8e.wasm new file mode 100644 index 00000000..58b8f11e Binary files /dev/null and b/_framework/System.Web.HttpUtility.il4jw89q8e.wasm differ diff --git a/_framework/System.Web.HttpUtility.il4jw89q8e.wasm.br b/_framework/System.Web.HttpUtility.il4jw89q8e.wasm.br new file mode 100644 index 00000000..1d5aed5a Binary files /dev/null and b/_framework/System.Web.HttpUtility.il4jw89q8e.wasm.br differ diff --git a/_framework/System.Web.HttpUtility.il4jw89q8e.wasm.gz b/_framework/System.Web.HttpUtility.il4jw89q8e.wasm.gz new file mode 100644 index 00000000..3b8526e0 Binary files /dev/null and b/_framework/System.Web.HttpUtility.il4jw89q8e.wasm.gz differ diff --git a/_framework/System.q2jl4ndpi3.wasm b/_framework/System.q2jl4ndpi3.wasm new file mode 100644 index 00000000..6b10735b Binary files /dev/null and b/_framework/System.q2jl4ndpi3.wasm differ diff --git a/_framework/System.q2jl4ndpi3.wasm.br b/_framework/System.q2jl4ndpi3.wasm.br new file mode 100644 index 00000000..a82be02c Binary files /dev/null and b/_framework/System.q2jl4ndpi3.wasm.br differ diff --git a/_framework/System.q2jl4ndpi3.wasm.gz b/_framework/System.q2jl4ndpi3.wasm.gz new file mode 100644 index 00000000..bb14ee69 Binary files /dev/null and b/_framework/System.q2jl4ndpi3.wasm.gz differ diff --git a/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm b/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm new file mode 100644 index 00000000..a3f62eda Binary files /dev/null and b/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm differ diff --git a/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm.br b/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm.br new file mode 100644 index 00000000..0fcdf6c7 Binary files /dev/null and b/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm.br differ diff --git a/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm.gz b/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm.gz new file mode 100644 index 00000000..89d2bf32 Binary files /dev/null and b/_framework/Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm.gz differ diff --git a/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm b/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm new file mode 100644 index 00000000..3c8ea919 Binary files /dev/null and b/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm differ diff --git a/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm.br b/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm.br new file mode 100644 index 00000000..8c4901c3 Binary files /dev/null and b/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm.br differ diff --git a/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm.gz b/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm.gz new file mode 100644 index 00000000..0b0695b1 Binary files /dev/null and b/_framework/Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm.gz differ diff --git a/_framework/blazor.boot.json b/_framework/blazor.boot.json new file mode 100644 index 00000000..ef48d28f --- /dev/null +++ b/_framework/blazor.boot.json @@ -0,0 +1,128 @@ +{ + "mainAssemblyName": "AwesomeBlazorBrowser", + "resources": { + "hash": "sha256-/zkyfVLJGmHfNtLn/6tThIUSFyN5yL2HarrMXzuaGMw=", + "fingerprinting": { + "AwesomeBlazor.Models.7m16qs3gvd.wasm": "AwesomeBlazor.Models.wasm", + "AwesomeBlazorBrowser.9oxndz9zbe.wasm": "AwesomeBlazorBrowser.wasm", + "Markdig.earcieyyzk.wasm": "Markdig.wasm", + "Microsoft.AspNetCore.Components.buhpw5efhp.wasm": "Microsoft.AspNetCore.Components.wasm", + "Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm": "Microsoft.AspNetCore.Components.Web.wasm", + "Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm": "Microsoft.AspNetCore.Components.WebAssembly.wasm", + "Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm": "Microsoft.Extensions.Configuration.Abstractions.wasm", + "Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm": "Microsoft.Extensions.Configuration.Json.wasm", + "Microsoft.Extensions.Configuration.8uk3noxgmv.wasm": "Microsoft.Extensions.Configuration.wasm", + "Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm": "Microsoft.Extensions.DependencyInjection.Abstractions.wasm", + "Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm": "Microsoft.Extensions.DependencyInjection.wasm", + "Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm": "Microsoft.Extensions.Logging.Abstractions.wasm", + "Microsoft.Extensions.Logging.a38f1ed6u5.wasm": "Microsoft.Extensions.Logging.wasm", + "Microsoft.Extensions.Options.0l1wscbvap.wasm": "Microsoft.Extensions.Options.wasm", + "Microsoft.Extensions.Primitives.jo6l1avrrg.wasm": "Microsoft.Extensions.Primitives.wasm", + "Microsoft.JSInterop.5f7abvou5d.wasm": "Microsoft.JSInterop.wasm", + "Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm": "Microsoft.JSInterop.WebAssembly.wasm", + "System.Collections.Concurrent.ynobywm94s.wasm": "System.Collections.Concurrent.wasm", + "System.Collections.Immutable.kwsmi5a5xj.wasm": "System.Collections.Immutable.wasm", + "System.Collections.Specialized.rlk4q23gs1.wasm": "System.Collections.Specialized.wasm", + "System.Collections.1gydz28hcd.wasm": "System.Collections.wasm", + "System.ComponentModel.Primitives.7kutolriix.wasm": "System.ComponentModel.Primitives.wasm", + "System.ComponentModel.TypeConverter.7lx3leh5re.wasm": "System.ComponentModel.TypeConverter.wasm", + "System.ComponentModel.x3o7f6y5sp.wasm": "System.ComponentModel.wasm", + "System.Console.bpuc957ibb.wasm": "System.Console.wasm", + "System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm": "System.Diagnostics.DiagnosticSource.wasm", + "System.IO.Pipelines.o49ueulm8k.wasm": "System.IO.Pipelines.wasm", + "System.Linq.reix466n3d.wasm": "System.Linq.wasm", + "System.Memory.7g3ydoytjz.wasm": "System.Memory.wasm", + "System.Net.Http.wvb8q5wodz.wasm": "System.Net.Http.wasm", + "System.Net.Primitives.62r4htcf3w.wasm": "System.Net.Primitives.wasm", + "System.ObjectModel.0z9z5wui7u.wasm": "System.ObjectModel.wasm", + "System.Private.CoreLib.ic8cgzk5m1.wasm": "System.Private.CoreLib.wasm", + "System.Private.Uri.k6miwvt0ph.wasm": "System.Private.Uri.wasm", + "System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm": "System.Runtime.InteropServices.JavaScript.wasm", + "System.Runtime.InteropServices.0oaau8dzb2.wasm": "System.Runtime.InteropServices.wasm", + "System.Runtime.0r81renmcg.wasm": "System.Runtime.wasm", + "System.Text.Encodings.Web.ouyex9zmsy.wasm": "System.Text.Encodings.Web.wasm", + "System.Text.Json.c9sdl2elxl.wasm": "System.Text.Json.wasm", + "System.Text.RegularExpressions.h097c0ruat.wasm": "System.Text.RegularExpressions.wasm", + "System.Threading.c77esjincm.wasm": "System.Threading.wasm", + "System.q2jl4ndpi3.wasm": "System.wasm", + "System.Web.HttpUtility.il4jw89q8e.wasm": "System.Web.HttpUtility.wasm", + "Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm": "Toolbelt.Blazor.GradatedText.wasm", + "Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm": "Toolbelt.Web.CssClassInlineBuilder.wasm", + "dotnet.native.gfgmczja9o.js": "dotnet.native.js", + "dotnet.native.yaj7q15i8q.wasm": "dotnet.native.wasm", + "dotnet.js": "dotnet.js", + "dotnet.runtime.ju77aherdp.js": "dotnet.runtime.js" + }, + "jsModuleNative": { + "dotnet.native.gfgmczja9o.js": "sha256-VFsij8B0PTOGS9e9OOlXE2MGbLrMxQCSlBjCIFaRgbI=" + }, + "jsModuleRuntime": { + "dotnet.runtime.ju77aherdp.js": "sha256-e/Ee0XzTQHVzg6pZms6FR5P6yEpTgaACDSAZCGD1PUo=" + }, + "wasmNative": { + "dotnet.native.yaj7q15i8q.wasm": "sha256-eisGGA4ofscSsUoanbp+Bo6ybgBHdOlwVLxvwywzbsI=" + }, + "coreAssembly": { + "System.Private.CoreLib.ic8cgzk5m1.wasm": "sha256-QrHl/4mt2YJQy/+J9ZdSWhHSi1spNr4CSvFbPlgZ9sg=", + "System.Runtime.InteropServices.JavaScript.gr73skhjil.wasm": "sha256-DIZZQ6VsUec1Pfplu09jx3HbOcNosppsi7Hn8cKN5Mg=" + }, + "assembly": { + "AwesomeBlazor.Models.7m16qs3gvd.wasm": "sha256-r8es607Wxv1zasc7gnXAYC+bk7VaujoBebEciAn67lY=", + "AwesomeBlazorBrowser.9oxndz9zbe.wasm": "sha256-OfNf9Q5itpkFbr5HlIv0la3EP8TZ9wHY0kp3vBYUaIk=", + "Markdig.earcieyyzk.wasm": "sha256-Jv9S5coLP28fMUd+sd72uOfd5e3pWx+IFMRNtR/lykc=", + "Microsoft.AspNetCore.Components.buhpw5efhp.wasm": "sha256-kxoZZysKfGBn/iVp3uQqT2Q8lByNntUSBuhWU4yM4Rc=", + "Microsoft.AspNetCore.Components.Web.ht9p1g9df0.wasm": "sha256-C1F6JVxd70jyPm7f2RsyPAMA0VqfSf6Xxdx5+vq5s/E=", + "Microsoft.AspNetCore.Components.WebAssembly.e8wfers6ot.wasm": "sha256-ElWXvmovkw3Wm36ohWsENZHN6n5UN3GlpN7tTFgaHBg=", + "Microsoft.Extensions.Configuration.Abstractions.wq6jn0bf20.wasm": "sha256-GHD3PoxF3n+Cmylqax0M1LwXK1HAWlJhMom7gTRF0cg=", + "Microsoft.Extensions.Configuration.Json.l4cyqta4uk.wasm": "sha256-5f/kRCFVRpFyWz4ZM53EWNQiMJvCGloKw/OIk5qah0o=", + "Microsoft.Extensions.Configuration.8uk3noxgmv.wasm": "sha256-QHOGfLmuGdFztkOfOwQ1oMcFwLrwa8d+4sWJJIGwV6k=", + "Microsoft.Extensions.DependencyInjection.Abstractions.r8x1ar8fga.wasm": "sha256-dcsIa6otOP2A9lSP8OO+DwgxA2smEyZpenYYcxyiByw=", + "Microsoft.Extensions.DependencyInjection.b2xekeldhw.wasm": "sha256-HUVppHa4oLmbWsH+gCdOLhiDRJBDrQIH5HMNYZzl5ro=", + "Microsoft.Extensions.Logging.Abstractions.3coizrb10r.wasm": "sha256-TXWiQJhpP0SNiMYUziD92TRzp0IG+9Ldyo2XsI7DzJc=", + "Microsoft.Extensions.Logging.a38f1ed6u5.wasm": "sha256-tr+EhgDuiQZYi+a9YAUpaaPf4jwAcqPul/opRE8eZd0=", + "Microsoft.Extensions.Options.0l1wscbvap.wasm": "sha256-BIyB5S9IXQ46HOy97CWVBbPpoL/zrM67w0Ck0R6WK9g=", + "Microsoft.Extensions.Primitives.jo6l1avrrg.wasm": "sha256-E87hZGhaK5YP56Lo3f80aITj+8StUfs/6TNkmz1b3qQ=", + "Microsoft.JSInterop.5f7abvou5d.wasm": "sha256-EQu5oG3a1tIkdpGt/6cl2njPmUccKjx0W7JJA+bIbwk=", + "Microsoft.JSInterop.WebAssembly.vi5zotpb9r.wasm": "sha256-Sf3QTJxcAA7QrjQ6wlTsh6j0qw1vUl9mPVhO1Dvv7es=", + "System.Collections.Concurrent.ynobywm94s.wasm": "sha256-Yiyc4gBsXUCEp9plNfH+JhPtDoYaTkfLQIrkISnRtcA=", + "System.Collections.Immutable.kwsmi5a5xj.wasm": "sha256-1KH9UZgNMM8VUeH4mfQGOlPtNGVBKGVwkDlEVvMwmOc=", + "System.Collections.Specialized.rlk4q23gs1.wasm": "sha256-sex7loRl+O2CJkwv7wFgI7H0AAxMFMvwiWV+Egz+wYI=", + "System.Collections.1gydz28hcd.wasm": "sha256-ofqqsS0XGPY5c+t3wP6JVtx5FaOclUS+0SJE15NB9J4=", + "System.ComponentModel.Primitives.7kutolriix.wasm": "sha256-CQT36J5bHhriaqFHcs+voFpEdnJ+GER+2/L8NZi8LWQ=", + "System.ComponentModel.TypeConverter.7lx3leh5re.wasm": "sha256-y0msZ9YWKlx2hWwafXVMthC6uu9iQjMTdCd+Pr9GBPs=", + "System.ComponentModel.x3o7f6y5sp.wasm": "sha256-M+OiIE+Oyx/oKWxWqI26UnvKE3VJ2nAKycb2WJAt3wY=", + "System.Console.bpuc957ibb.wasm": "sha256-kQzqC7MvTrGav1NqOxbLAz9SR1VeUs8ezhOZJfGvBxU=", + "System.Diagnostics.DiagnosticSource.7v2e3ow1qb.wasm": "sha256-A4lslxid/lpSUA7o7hnV+pKX2OCw9sNQb2M3RnQ1CLw=", + "System.IO.Pipelines.o49ueulm8k.wasm": "sha256-uF8ZFtMT3UcQ+rksd+djr/mp2VMOw/EUpnBxgOW0QlQ=", + "System.Linq.reix466n3d.wasm": "sha256-c1eHzQCDtScrpMWKvRNtyyf4lS3hS1J2msXbX/E4vLI=", + "System.Memory.7g3ydoytjz.wasm": "sha256-Cc2OHPYbaF/RUocHIBuwOEBZTxsJLIZNvMTmt+g4Wy4=", + "System.Net.Http.wvb8q5wodz.wasm": "sha256-LHw206+dCSJ57Jw3qPTl3BiDia+VLEv3XYCWmX7O28k=", + "System.Net.Primitives.62r4htcf3w.wasm": "sha256-/ibZFYay19wTAuQFIrtslwPcd3tsYm0IbvcP6PZwiog=", + "System.ObjectModel.0z9z5wui7u.wasm": "sha256-PCKhvqgb6DozBifhB0bThMxY3K7o/HMKuVh5F1HhVNc=", + "System.Private.Uri.k6miwvt0ph.wasm": "sha256-NPNi4bQ1++f3iA9FFY/txQaAAn4v3ia/z80AV/8Q7YM=", + "System.Runtime.InteropServices.0oaau8dzb2.wasm": "sha256-gOLWjyPgCrFzHt79+eyARs4ZuF7gPhIyUnA3xmKp0y0=", + "System.Runtime.0r81renmcg.wasm": "sha256-jMWpj3TTPGMRhkZ+qGQTE600Nyb8M8nccbnQrdASfew=", + "System.Text.Encodings.Web.ouyex9zmsy.wasm": "sha256-8NwU9VF4mPgJXLc643br1Ipk+O7DZ8YvCEadRXxnfeE=", + "System.Text.Json.c9sdl2elxl.wasm": "sha256-UG08PDO1DUR34XjZCZ/6eInV+VBng71E9bLV83uGaZc=", + "System.Text.RegularExpressions.h097c0ruat.wasm": "sha256-nxqnL/4TrP6PGwa5OGUKx8Pk+pvDHJz7bg8oUzNYm8E=", + "System.Threading.c77esjincm.wasm": "sha256-+MMcJes54d529I5x4GxAIjkzAoK9dlvgh2jFfeed14o=", + "System.q2jl4ndpi3.wasm": "sha256-0qOgpoD2uGs2O3FO4qCj5ly6boZmD5NYgxfjBa6mvII=", + "System.Web.HttpUtility.il4jw89q8e.wasm": "sha256-Bu6Q8dKGGPZ0pB53YJOraQVXmrX6Q0n/vHk3inoQQeI=", + "Toolbelt.Blazor.GradatedText.is1yiyqp3r.wasm": "sha256-bsjV1E/m2IDUU+6yarHATj/quBxMw1crIJLt38SEaIA=", + "Toolbelt.Web.CssClassInlineBuilder.nki82rmihf.wasm": "sha256-+YGuxsUqlAPp12h2oYcGcg9OIUiX9EW3TuY7kQhoDR4=" + }, + "libraryInitializers": { + "_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js": "sha256-Z094C6tvTOKvix221ZuSPsaaNvGOp0XKqThmB4vfuOA=" + }, + "modulesAfterConfigLoaded": { + "../_content/BlazorWasmPreRendering.Build/BlazorWasmPreRendering.Build.lib.module.js": "sha256-Z094C6tvTOKvix221ZuSPsaaNvGOp0XKqThmB4vfuOA=" + } + }, + "cacheBootResources": true, + "debugLevel": 0, + "linkerEnabled": true, + "globalizationMode": "invariant", + "extensions": { + "blazor": {} + } +} \ No newline at end of file diff --git a/_framework/blazor.boot.json.br b/_framework/blazor.boot.json.br new file mode 100644 index 00000000..0612e074 Binary files /dev/null and b/_framework/blazor.boot.json.br differ diff --git a/_framework/blazor.boot.json.gz b/_framework/blazor.boot.json.gz new file mode 100644 index 00000000..71222075 Binary files /dev/null and b/_framework/blazor.boot.json.gz differ diff --git a/_framework/blazor.webassembly.js b/_framework/blazor.webassembly.js new file mode 100755 index 00000000..931d70db --- /dev/null +++ b/_framework/blazor.webassembly.js @@ -0,0 +1 @@ +!function(){"use strict";var e;let t;var n,r;!function(e){const t=[],n="__jsObjectId",r="__dotNetObject",o="__byte[]",i="__dotNetStream",s="__jsStreamReferenceLength";let a,c;class l{constructor(e){this._jsObject=e,this._cachedFunctions=new Map}findFunction(e){const t=this._cachedFunctions.get(e);if(t)return t;let n,r=this._jsObject;if(e.split(".").forEach((t=>{if(!(t in r))throw new Error(`Could not find '${e}' ('${t}' was undefined).`);n=r,r=r[t]})),r instanceof Function)return r=r.bind(n),this._cachedFunctions.set(e,r),r;throw new Error(`The value '${e}' is not a function.`)}getWrappedObject(){return this._jsObject}}const u=0,d={[u]:new l(window)};d[0]._cachedFunctions.set("import",(e=>("string"==typeof e&&e.startsWith("./")&&(e=new URL(e.substr(2),document.baseURI).toString()),import(e))));let f,m=1;function h(e){t.push(e)}function p(e){if(e&&"object"==typeof e){d[m]=new l(e);const t={[n]:m};return m++,t}throw new Error(`Cannot create a JSObjectReference from the value '${e}'.`)}function g(e){let t=-1;if(e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Blob)t=e.size;else{if(!(e.buffer instanceof ArrayBuffer))throw new Error("Supplied value is not a typed array or blob.");if(void 0===e.byteLength)throw new Error(`Cannot create a JSStreamReference from the value '${e}' as it doesn't have a byteLength.`);t=e.byteLength}const r={[s]:t};try{const t=p(e);r[n]=t[n]}catch(t){throw new Error(`Cannot create a JSStreamReference from the value '${e}'.`)}return r}function b(e,n){c=e;const r=n?JSON.parse(n,((e,n)=>t.reduce(((t,n)=>n(e,t)),n))):null;return c=void 0,r}function y(){if(void 0===a)throw new Error("No call dispatcher has been set.");if(null===a)throw new Error("There are multiple .NET runtimes present, so a default dispatcher could not be resolved. Use DotNetObject to invoke .NET instance methods.");return a}e.attachDispatcher=function(e){const t=new v(e);return void 0===a?a=t:a&&(a=null),t},e.attachReviver=h,e.invokeMethod=function(e,t,...n){return y().invokeDotNetStaticMethod(e,t,...n)},e.invokeMethodAsync=function(e,t,...n){return y().invokeDotNetStaticMethodAsync(e,t,...n)},e.createJSObjectReference=p,e.createJSStreamReference=g,e.disposeJSObjectReference=function(e){const t=e&&e[n];"number"==typeof t&&S(t)},function(e){e[e.Default=0]="Default",e[e.JSObjectReference=1]="JSObjectReference",e[e.JSStreamReference=2]="JSStreamReference",e[e.JSVoidResult=3]="JSVoidResult"}(f=e.JSCallResultType||(e.JSCallResultType={}));class v{constructor(e){this._dotNetCallDispatcher=e,this._byteArraysToBeRevived=new Map,this._pendingDotNetToJSStreams=new Map,this._pendingAsyncCalls={},this._nextAsyncCallId=1}getDotNetCallDispatcher(){return this._dotNetCallDispatcher}invokeJSFromDotNet(e,t,n,r){const o=b(this,t),i=N(E(e,r)(...o||[]),n);return null==i?null:k(this,i)}beginInvokeJSFromDotNet(e,t,n,r,o){const i=new Promise((e=>{const r=b(this,n);e(E(t,o)(...r||[]))}));e&&i.then((t=>k(this,[e,!0,N(t,r)]))).then((t=>this._dotNetCallDispatcher.endInvokeJSFromDotNet(e,!0,t)),(t=>this._dotNetCallDispatcher.endInvokeJSFromDotNet(e,!1,JSON.stringify([e,!1,w(t)]))))}endInvokeDotNetFromJS(e,t,n){const r=t?b(this,n):new Error(n);this.completePendingCall(parseInt(e,10),t,r)}invokeDotNetStaticMethod(e,t,...n){return this.invokeDotNetMethod(e,t,null,n)}invokeDotNetStaticMethodAsync(e,t,...n){return this.invokeDotNetMethodAsync(e,t,null,n)}invokeDotNetMethod(e,t,n,r){if(this._dotNetCallDispatcher.invokeDotNetFromJS){const o=k(this,r),i=this._dotNetCallDispatcher.invokeDotNetFromJS(e,t,n,o);return i?b(this,i):null}throw new Error("The current dispatcher does not support synchronous calls from JS to .NET. Use invokeDotNetMethodAsync instead.")}invokeDotNetMethodAsync(e,t,n,r){if(e&&n)throw new Error(`For instance method calls, assemblyName should be null. Received '${e}'.`);const o=this._nextAsyncCallId++,i=new Promise(((e,t)=>{this._pendingAsyncCalls[o]={resolve:e,reject:t}}));try{const i=k(this,r);this._dotNetCallDispatcher.beginInvokeDotNetFromJS(o,e,t,n,i)}catch(e){this.completePendingCall(o,!1,e)}return i}receiveByteArray(e,t){this._byteArraysToBeRevived.set(e,t)}processByteArray(e){const t=this._byteArraysToBeRevived.get(e);return t?(this._byteArraysToBeRevived.delete(e),t):null}supplyDotNetStream(e,t){if(this._pendingDotNetToJSStreams.has(e)){const n=this._pendingDotNetToJSStreams.get(e);this._pendingDotNetToJSStreams.delete(e),n.resolve(t)}else{const n=new I;n.resolve(t),this._pendingDotNetToJSStreams.set(e,n)}}getDotNetStreamPromise(e){let t;if(this._pendingDotNetToJSStreams.has(e))t=this._pendingDotNetToJSStreams.get(e).streamPromise,this._pendingDotNetToJSStreams.delete(e);else{const n=new I;this._pendingDotNetToJSStreams.set(e,n),t=n.streamPromise}return t}completePendingCall(e,t,n){if(!this._pendingAsyncCalls.hasOwnProperty(e))throw new Error(`There is no pending async call with ID ${e}.`);const r=this._pendingAsyncCalls[e];delete this._pendingAsyncCalls[e],t?r.resolve(n):r.reject(n)}}function w(e){return e instanceof Error?`${e.message}\n${e.stack}`:e?e.toString():"null"}function E(e,t){const n=d[t];if(n)return n.findFunction(e);throw new Error(`JS object instance with ID ${t} does not exist (has it been disposed?).`)}function S(e){delete d[e]}e.findJSFunction=E,e.disposeJSObjectReferenceById=S;class C{constructor(e,t){this._id=e,this._callDispatcher=t}invokeMethod(e,...t){return this._callDispatcher.invokeDotNetMethod(null,e,this._id,t)}invokeMethodAsync(e,...t){return this._callDispatcher.invokeDotNetMethodAsync(null,e,this._id,t)}dispose(){this._callDispatcher.invokeDotNetMethodAsync(null,"__Dispose",this._id,null).catch((e=>console.error(e)))}serializeAsArg(){return{[r]:this._id}}}e.DotNetObject=C,h((function(e,t){if(t&&"object"==typeof t){if(t.hasOwnProperty(r))return new C(t[r],c);if(t.hasOwnProperty(n)){const e=t[n],r=d[e];if(r)return r.getWrappedObject();throw new Error(`JS object instance with Id '${e}' does not exist. It may have been disposed.`)}if(t.hasOwnProperty(o)){const e=t[o],n=c.processByteArray(e);if(void 0===n)throw new Error(`Byte array index '${e}' does not exist.`);return n}if(t.hasOwnProperty(i)){const e=t[i],n=c.getDotNetStreamPromise(e);return new A(n)}}return t}));class A{constructor(e){this._streamPromise=e}stream(){return this._streamPromise}async arrayBuffer(){return new Response(await this.stream()).arrayBuffer()}}class I{constructor(){this.streamPromise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}}function N(e,t){switch(t){case f.Default:return e;case f.JSObjectReference:return p(e);case f.JSStreamReference:return g(e);case f.JSVoidResult:return null;default:throw new Error(`Invalid JS call result type '${t}'.`)}}let R=0;function k(e,t){R=0,c=e;const n=JSON.stringify(t,D);return c=void 0,n}function D(e,t){if(t instanceof C)return t.serializeAsArg();if(t instanceof Uint8Array){c.getDotNetCallDispatcher().sendByteArray(R,t);const e={[o]:R};return R++,e}return t}}(e||(e={})),function(e){e[e.prependFrame=1]="prependFrame",e[e.removeFrame=2]="removeFrame",e[e.setAttribute=3]="setAttribute",e[e.removeAttribute=4]="removeAttribute",e[e.updateText=5]="updateText",e[e.stepIn=6]="stepIn",e[e.stepOut=7]="stepOut",e[e.updateMarkup=8]="updateMarkup",e[e.permutationListEntry=9]="permutationListEntry",e[e.permutationListEnd=10]="permutationListEnd"}(n||(n={})),function(e){e[e.element=1]="element",e[e.text=2]="text",e[e.attribute=3]="attribute",e[e.component=4]="component",e[e.region=5]="region",e[e.elementReferenceCapture=6]="elementReferenceCapture",e[e.markup=8]="markup",e[e.namedEvent=10]="namedEvent"}(r||(r={}));class o{constructor(e,t){this.componentId=e,this.fieldValue=t}static fromEvent(e,t){const n=t.target;if(n instanceof Element){const t=function(e){return e instanceof HTMLInputElement?e.type&&"checkbox"===e.type.toLowerCase()?{value:e.checked}:{value:e.value}:e instanceof HTMLSelectElement||e instanceof HTMLTextAreaElement?{value:e.value}:null}(n);if(t)return new o(e,t.value)}return null}}const i=new Map,s=new Map,a=[];function c(e){return i.get(e)}function l(e){const t=i.get(e);return t?.browserEventName||e}function u(e,t){e.forEach((e=>i.set(e,t)))}function d(e){const t=[];for(let n=0;ne.selected)).map((e=>e.value))}}{const e=function(e){return!!e&&"INPUT"===e.tagName&&"checkbox"===e.getAttribute("type")}(t);return{value:e?!!t.checked:t.value}}}}),u(["copy","cut","paste"],{createEventArgs:e=>({type:e.type})}),u(["drag","dragend","dragenter","dragleave","dragover","dragstart","drop"],{createEventArgs:e=>{return{...f(t=e),dataTransfer:t.dataTransfer?{dropEffect:t.dataTransfer.dropEffect,effectAllowed:t.dataTransfer.effectAllowed,files:Array.from(t.dataTransfer.files).map((e=>e.name)),items:Array.from(t.dataTransfer.items).map((e=>({kind:e.kind,type:e.type}))),types:t.dataTransfer.types}:null};var t}}),u(["focus","blur","focusin","focusout"],{createEventArgs:e=>({type:e.type})}),u(["keydown","keyup","keypress"],{createEventArgs:e=>{return{key:(t=e).key,code:t.code,location:t.location,repeat:t.repeat,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,type:t.type,isComposing:t.isComposing};var t}}),u(["contextmenu","click","mouseover","mouseout","mousemove","mousedown","mouseup","mouseleave","mouseenter","dblclick"],{createEventArgs:e=>f(e)}),u(["error"],{createEventArgs:e=>{return{message:(t=e).message,filename:t.filename,lineno:t.lineno,colno:t.colno,type:t.type};var t}}),u(["loadstart","timeout","abort","load","loadend","progress"],{createEventArgs:e=>{return{lengthComputable:(t=e).lengthComputable,loaded:t.loaded,total:t.total,type:t.type};var t}}),u(["touchcancel","touchend","touchmove","touchenter","touchleave","touchstart"],{createEventArgs:e=>{return{detail:(t=e).detail,touches:d(t.touches),targetTouches:d(t.targetTouches),changedTouches:d(t.changedTouches),ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey,type:t.type};var t}}),u(["gotpointercapture","lostpointercapture","pointercancel","pointerdown","pointerenter","pointerleave","pointermove","pointerout","pointerover","pointerup"],{createEventArgs:e=>{return{...f(t=e),pointerId:t.pointerId,width:t.width,height:t.height,pressure:t.pressure,tiltX:t.tiltX,tiltY:t.tiltY,pointerType:t.pointerType,isPrimary:t.isPrimary};var t}}),u(["wheel","mousewheel"],{createEventArgs:e=>{return{...f(t=e),deltaX:t.deltaX,deltaY:t.deltaY,deltaZ:t.deltaZ,deltaMode:t.deltaMode};var t}}),u(["cancel","close","toggle"],{createEventArgs:()=>({})});const m=["date","datetime-local","month","time","week"],h=new Map;let p,g,b=0;const y={async add(e,t,n){if(!n)throw new Error("initialParameters must be an object, even if empty.");const r="__bl-dynamic-root:"+(++b).toString();h.set(r,e);const o=await E().invokeMethodAsync("AddRootComponent",t,r),i=new w(o,g[t]);return await i.setParameters(n),i}};class v{invoke(e){return this._callback(e)}setCallback(t){this._selfJSObjectReference||(this._selfJSObjectReference=e.createJSObjectReference(this)),this._callback=t}getJSObjectReference(){return this._selfJSObjectReference}dispose(){this._selfJSObjectReference&&e.disposeJSObjectReference(this._selfJSObjectReference)}}class w{constructor(e,t){this._jsEventCallbackWrappers=new Map,this._componentId=e;for(const e of t)"eventcallback"===e.type&&this._jsEventCallbackWrappers.set(e.name.toLowerCase(),new v)}setParameters(e){const t={},n=Object.entries(e||{}),r=n.length;for(const[e,r]of n){const n=this._jsEventCallbackWrappers.get(e.toLowerCase());n&&r?(n.setCallback(r),t[e]=n.getJSObjectReference()):t[e]=r}return E().invokeMethodAsync("SetRootComponentParameters",this._componentId,r,t)}async dispose(){if(null!==this._componentId){await E().invokeMethodAsync("RemoveRootComponent",this._componentId),this._componentId=null;for(const e of this._jsEventCallbackWrappers.values())e.dispose()}}}function E(){if(!p)throw new Error("Dynamic root components have not been enabled in this application.");return p}const S=new Map,C=[],A=new Map;function I(e,t,n){return R(e,t.eventHandlerId,(()=>N(e).invokeMethodAsync("DispatchEventAsync",t,n)))}function N(e){const t=S.get(e);if(!t)throw new Error(`No interop methods are registered for renderer ${e}`);return t}let R=(e,t,n)=>n();const k=O(["abort","blur","cancel","canplay","canplaythrough","change","close","cuechange","durationchange","emptied","ended","error","focus","load","loadeddata","loadedmetadata","loadend","loadstart","mouseenter","mouseleave","pointerenter","pointerleave","pause","play","playing","progress","ratechange","reset","scroll","seeked","seeking","stalled","submit","suspend","timeupdate","toggle","unload","volumechange","waiting","DOMNodeInsertedIntoDocument","DOMNodeRemovedFromDocument"]),D={submit:!0},_=O(["click","dblclick","mousedown","mousemove","mouseup"]);class T{static{this.nextEventDelegatorId=0}constructor(e){this.browserRendererId=e,this.afterClickCallbacks=[];const t=++T.nextEventDelegatorId;this.eventsCollectionKey=`_blazorEvents_${t}`,this.eventInfoStore=new F(this.onGlobalEvent.bind(this))}setListener(e,t,n,r){const o=this.getEventHandlerInfosForElement(e,!0),i=o.getHandler(t);if(i)this.eventInfoStore.update(i.eventHandlerId,n);else{const i={element:e,eventName:t,eventHandlerId:n,renderingComponentId:r};this.eventInfoStore.add(i),o.setHandler(t,i)}}getHandler(e){return this.eventInfoStore.get(e)}removeListener(e){const t=this.eventInfoStore.remove(e);if(t){const e=t.element,n=this.getEventHandlerInfosForElement(e,!1);n&&n.removeHandler(t.eventName)}}notifyAfterClick(e){this.afterClickCallbacks.push(e),this.eventInfoStore.addGlobalListener("click")}setStopPropagation(e,t,n){this.getEventHandlerInfosForElement(e,!0).stopPropagation(t,n)}setPreventDefault(e,t,n){this.getEventHandlerInfosForElement(e,!0).preventDefault(t,n)}onGlobalEvent(e){if(!(e.target instanceof Element))return;this.dispatchGlobalEventToAllElements(e.type,e);const t=(n=e.type,s.get(n));var n;t&&t.forEach((t=>this.dispatchGlobalEventToAllElements(t,e))),"click"===e.type&&this.afterClickCallbacks.forEach((t=>t(e)))}dispatchGlobalEventToAllElements(e,t){const n=t.composedPath();let r=n.shift(),i=null,s=!1;const a=Object.prototype.hasOwnProperty.call(k,e);let l=!1;for(;r;){const f=r,m=this.getEventHandlerInfosForElement(f,!1);if(m){const n=m.getHandler(e);if(n&&(u=f,d=t.type,!((u instanceof HTMLButtonElement||u instanceof HTMLInputElement||u instanceof HTMLTextAreaElement||u instanceof HTMLSelectElement)&&Object.prototype.hasOwnProperty.call(_,d)&&u.disabled))){if(!s){const n=c(e);i=n?.createEventArgs?n.createEventArgs(t):{},s=!0}Object.prototype.hasOwnProperty.call(D,t.type)&&t.preventDefault(),I(this.browserRendererId,{eventHandlerId:n.eventHandlerId,eventName:e,eventFieldInfo:o.fromEvent(n.renderingComponentId,t)},i)}m.stopPropagation(e)&&(l=!0),m.preventDefault(e)&&t.preventDefault()}r=a||l?void 0:n.shift()}var u,d}getEventHandlerInfosForElement(e,t){return Object.prototype.hasOwnProperty.call(e,this.eventsCollectionKey)?e[this.eventsCollectionKey]:t?e[this.eventsCollectionKey]=new L:null}}class F{constructor(e){this.globalListener=e,this.infosByEventHandlerId={},this.countByEventName={},a.push(this.handleEventNameAliasAdded.bind(this))}add(e){if(this.infosByEventHandlerId[e.eventHandlerId])throw new Error(`Event ${e.eventHandlerId} is already tracked`);this.infosByEventHandlerId[e.eventHandlerId]=e,this.addGlobalListener(e.eventName)}get(e){return this.infosByEventHandlerId[e]}addGlobalListener(e){if(e=l(e),Object.prototype.hasOwnProperty.call(this.countByEventName,e))this.countByEventName[e]++;else{this.countByEventName[e]=1;const t=Object.prototype.hasOwnProperty.call(k,e);document.addEventListener(e,this.globalListener,t)}}update(e,t){if(Object.prototype.hasOwnProperty.call(this.infosByEventHandlerId,t))throw new Error(`Event ${t} is already tracked`);const n=this.infosByEventHandlerId[e];delete this.infosByEventHandlerId[e],n.eventHandlerId=t,this.infosByEventHandlerId[t]=n}remove(e){const t=this.infosByEventHandlerId[e];if(t){delete this.infosByEventHandlerId[e];const n=l(t.eventName);0==--this.countByEventName[n]&&(delete this.countByEventName[n],document.removeEventListener(n,this.globalListener))}return t}handleEventNameAliasAdded(e,t){if(Object.prototype.hasOwnProperty.call(this.countByEventName,e)){const n=this.countByEventName[e];delete this.countByEventName[e],document.removeEventListener(e,this.globalListener),this.addGlobalListener(t),this.countByEventName[t]+=n-1}}}class L{constructor(){this.handlers={},this.preventDefaultFlags=null,this.stopPropagationFlags=null}getHandler(e){return Object.prototype.hasOwnProperty.call(this.handlers,e)?this.handlers[e]:null}setHandler(e,t){this.handlers[e]=t}removeHandler(e){delete this.handlers[e]}preventDefault(e,t){return void 0!==t&&(this.preventDefaultFlags=this.preventDefaultFlags||{},this.preventDefaultFlags[e]=t),!!this.preventDefaultFlags&&this.preventDefaultFlags[e]}stopPropagation(e,t){return void 0!==t&&(this.stopPropagationFlags=this.stopPropagationFlags||{},this.stopPropagationFlags[e]=t),!!this.stopPropagationFlags&&this.stopPropagationFlags[e]}}function O(e){const t={};return e.forEach((e=>{t[e]=!0})),t}const M=Symbol(),x=Symbol(),P=Symbol();function B(e,t){if(M in e)return e;const n=[];if(e.childNodes.length>0){if(!t)throw new Error("New logical elements must start empty, or allowExistingContents must be true");e.childNodes.forEach((t=>{const r=B(t,!0);r[x]=e,n.push(r)}))}return e[M]=n,e}function H(e){const t=K(e);for(;t.length;)z(e,0)}function j(e,t){const n=document.createComment("!");return J(n,e,t),n}function J(e,t,n){const r=e;let o=e;if(e instanceof Comment){const t=K(r);if(t?.length>0){const t=G(r),n=new Range;n.setStartBefore(e),n.setEndAfter(t),o=n.extractContents()}}const i=$(r);if(i){const e=K(i),t=Array.prototype.indexOf.call(e,r);e.splice(t,1),delete r[x]}const s=K(t);if(n0;)z(n,0)}const r=n;r.parentNode.removeChild(r)}function $(e){return e[x]||null}function W(e,t){return K(e)[t]}function U(e){const t=Y(e);return"http://www.w3.org/2000/svg"===t.namespaceURI&&"foreignObject"!==t.tagName}function K(e){return e[M]}function V(e){const t=K($(e));return t[Array.prototype.indexOf.call(t,e)+1]||null}function X(e,t){const n=K(e);t.forEach((e=>{e.moveRangeStart=n[e.fromSiblingIndex],e.moveRangeEnd=G(e.moveRangeStart)})),t.forEach((t=>{const r=document.createComment("marker");t.moveToBeforeMarker=r;const o=n[t.toSiblingIndex+1];o?o.parentNode.insertBefore(r,o):q(r,e)})),t.forEach((e=>{const t=e.moveToBeforeMarker,n=t.parentNode,r=e.moveRangeStart,o=e.moveRangeEnd;let i=r;for(;i;){const e=i.nextSibling;if(n.insertBefore(i,t),i===o)break;i=e}n.removeChild(t)})),t.forEach((e=>{n[e.toSiblingIndex]=e.moveRangeStart}))}function Y(e){if(e instanceof Element||e instanceof DocumentFragment)return e;if(e instanceof Comment)return e.parentNode;throw new Error("Not a valid logical element")}function q(e,t){if(t instanceof Element||t instanceof DocumentFragment)t.appendChild(e);else{if(!(t instanceof Comment))throw new Error(`Cannot append node because the parent is not a valid logical element. Parent: ${t}`);{const n=V(t);n?n.parentNode.insertBefore(e,n):q(e,$(t))}}}function G(e){if(e instanceof Element||e instanceof DocumentFragment)return e;const t=V(e);if(t)return t.previousSibling;{const t=$(e);return t instanceof Element||t instanceof DocumentFragment?t.lastChild:G(t)}}function Z(e){return`_bl_${e}`}const Q="__internalId";e.attachReviver(((e,t)=>t&&"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,Q)&&"string"==typeof t[Q]?function(e){const t=`[${Z(e)}]`;return document.querySelector(t)}(t[Q]):t));const ee="_blazorDeferredValue";function te(e){return"select-multiple"===e.type}function ne(e,t){e.value=t||""}function re(e,t){e instanceof HTMLSelectElement?te(e)?function(e,t){t||=[];for(let n=0;n{Ne()&&function(e,t){if(0!==e.button||function(e){return e.ctrlKey||e.shiftKey||e.altKey||e.metaKey}(e))return;if(e.defaultPrevented)return;const n=function(e){const t=e.composedPath&&e.composedPath();if(t)for(let e=0;e{const t=document.createElement("script");t.textContent=e.textContent,e.getAttributeNames().forEach((n=>{t.setAttribute(n,e.getAttribute(n))})),e.parentNode.replaceChild(t,e)})),ie.content));var s;let a=0;for(;i.firstChild;)J(i.firstChild,o,a++)}applyAttribute(e,t,n,r){const o=e.frameReader,i=o.attributeName(r),s=o.attributeEventHandlerId(r);if(s){const e=me(i);return void this.eventDelegator.setListener(n,e,s,t)}const a=o.attributeValue(r);this.setOrRemoveAttributeOrProperty(n,i,a)}insertFrameRange(e,t,n,r,o,i,s){const a=r;for(let a=i;a{Je(t,e)})},enableNavigationInterception:function(e){if(void 0!==pe&&pe!==e)throw new Error("Only one interactive runtime may enable navigation interception at a time.");pe=e},setHasLocationChangingListeners:function(e,t){const n=Te.get(e);if(!n)throw new Error(`Renderer with ID '${e}' is not listening for navigation events`);n.hasLocationChangingEventListeners=t},endLocationChanging:function(e,t){Le&&e===_e&&(Le(t),Le=null)},navigateTo:function(e,t){Me(e,t,!0)},refresh:function(e){!e&&Ce()?Ae(location.href,!0):location.reload()},getBaseURI:()=>document.baseURI,getLocationHref:()=>location.href,scrollToElement:Se};function Me(e,t,n=!1){const r=Ie(e);!t.forceLoad&&Ee(r)?We()?xe(r,!1,t.replaceHistoryEntry,t.historyEntryState,n):Ae(r,t.replaceHistoryEntry):function(e,t){if(location.href===e){const t=e+"?";history.replaceState(null,"",t),location.replace(e)}else t?location.replace(e):location.href=e}(e,t.replaceHistoryEntry)}async function xe(e,t,n,r=void 0,o=!1){if(He(),function(e){const t=new URL(e);return""!==t.hash&&location.origin===t.origin&&location.pathname===t.pathname&&location.search===t.search}(e))return Pe(e,n,r),void function(e){const t=e.indexOf("#");t!==e.length-1&&Se(e.substring(t+1))}(e);const i=$e();(o||!i?.hasLocationChangingEventListeners||await je(e,r,t,i))&&(ve=!0,Pe(e,n,r),await Je(t))}function Pe(e,t,n=void 0){t?history.replaceState({userState:n,_index:De},"",e):(De++,history.pushState({userState:n,_index:De},"",e))}function Be(e){return new Promise((t=>{const n=Fe;Fe=()=>{Fe=n,t()},history.go(e)}))}function He(){Le&&(Le(!1),Le=null)}function je(e,t,n,r){return new Promise((o=>{He(),_e++,Le=o,r.locationChanging(_e,e,t,n)}))}async function Je(e,t){const n=t??location.href;await Promise.all(Array.from(Te,(async([t,r])=>{var o;o=t,S.has(o)&&await r.locationChanged(n,history.state?.userState,e)})))}async function ze(e){Fe&&We()&&await Fe(e),De=history.state?._index??0}function $e(){const e=Re();if(void 0!==e)return Te.get(e)}function We(){return Ne()||!Ce()}const Ue={focus:function(e,t){if(e instanceof HTMLElement)e.focus({preventScroll:t});else{if(!(e instanceof SVGElement))throw new Error("Unable to focus an invalid element.");if(!e.hasAttribute("tabindex"))throw new Error("Unable to focus an SVG element that does not have a tabindex.");e.focus({preventScroll:t})}},focusBySelector:function(e){const t=document.querySelector(e);t&&(t.hasAttribute("tabindex")||(t.tabIndex=-1),t.focus({preventScroll:!0}))}},Ke={init:function(e,t,n,r=50){const o=Xe(t);(o||document.documentElement).style.overflowAnchor="none";const i=document.createRange();f(n.parentElement)&&(t.style.display="table-row",n.style.display="table-row");const s=new IntersectionObserver((function(r){r.forEach((r=>{if(!r.isIntersecting)return;i.setStartAfter(t),i.setEndBefore(n);const o=i.getBoundingClientRect().height,s=r.rootBounds?.height;r.target===t?e.invokeMethodAsync("OnSpacerBeforeVisible",r.intersectionRect.top-r.boundingClientRect.top,o,s):r.target===n&&n.offsetHeight>0&&e.invokeMethodAsync("OnSpacerAfterVisible",r.boundingClientRect.bottom-r.intersectionRect.bottom,o,s)}))}),{root:o,rootMargin:`${r}px`});s.observe(t),s.observe(n);const a=d(t),c=d(n),{observersByDotNetObjectId:l,id:u}=Ye(e);function d(e){const t={attributes:!0},n=new MutationObserver(((n,r)=>{f(e.parentElement)&&(r.disconnect(),e.style.display="table-row",r.observe(e,t)),s.unobserve(e),s.observe(e)}));return n.observe(e,t),n}function f(e){return null!==e&&(e instanceof HTMLTableElement&&""===e.style.display||"table"===e.style.display||e instanceof HTMLTableSectionElement&&""===e.style.display||"table-row-group"===e.style.display)}l[u]={intersectionObserver:s,mutationObserverBefore:a,mutationObserverAfter:c}},dispose:function(e){const{observersByDotNetObjectId:t,id:n}=Ye(e),r=t[n];r&&(r.intersectionObserver.disconnect(),r.mutationObserverBefore.disconnect(),r.mutationObserverAfter.disconnect(),e.dispose(),delete t[n])}},Ve=Symbol();function Xe(e){return e&&e!==document.body&&e!==document.documentElement?"visible"!==getComputedStyle(e).overflowY?e:Xe(e.parentElement):null}function Ye(e){const t=e._callDispatcher,n=e._id;return t[Ve]??={},{observersByDotNetObjectId:t[Ve],id:n}}const qe={getAndRemoveExistingTitle:function(){const e=document.head?document.head.getElementsByTagName("title"):[];if(0===e.length)return null;let t=null;for(let n=e.length-1;n>=0;n--){const r=e[n],o=r.previousSibling;o instanceof Comment&&null!==$(o)||(null===t&&(t=r.textContent),r.parentNode?.removeChild(r))}return t}},Ge={init:function(e,t){t._blazorInputFileNextFileId=0,t.addEventListener("click",(function(){t.value=""})),t.addEventListener("change",(function(){t._blazorFilesById={};const n=Array.prototype.map.call(t.files,(function(e){const n={id:++t._blazorInputFileNextFileId,lastModified:new Date(e.lastModified).toISOString(),name:e.name,size:e.size,contentType:e.type,readPromise:void 0,arrayBuffer:void 0,blob:e};return t._blazorFilesById[n.id]=n,n}));e.invokeMethodAsync("NotifyChange",n)}))},toImageFile:async function(e,t,n,r,o){const i=Ze(e,t),s=await new Promise((function(e){const t=new Image;t.onload=function(){URL.revokeObjectURL(t.src),e(t)},t.onerror=function(){t.onerror=null,URL.revokeObjectURL(t.src)},t.src=URL.createObjectURL(i.blob)})),a=await new Promise((function(e){const t=Math.min(1,r/s.width),i=Math.min(1,o/s.height),a=Math.min(t,i),c=document.createElement("canvas");c.width=Math.round(s.width*a),c.height=Math.round(s.height*a),c.getContext("2d")?.drawImage(s,0,0,c.width,c.height),c.toBlob(e,n)})),c={id:++e._blazorInputFileNextFileId,lastModified:i.lastModified,name:i.name,size:a?.size||0,contentType:n,blob:a||i.blob};return e._blazorFilesById[c.id]=c,c},readFileData:async function(e,t){return Ze(e,t).blob}};function Ze(e,t){const n=e._blazorFilesById[t];if(!n)throw new Error(`There is no file with ID ${t}. The file list may have changed. See https://aka.ms/aspnet/blazor-input-file-multiple-selections.`);return n}const Qe=new Set,et={enableNavigationPrompt:function(e){0===Qe.size&&window.addEventListener("beforeunload",tt),Qe.add(e)},disableNavigationPrompt:function(e){Qe.delete(e),0===Qe.size&&window.removeEventListener("beforeunload",tt)}};function tt(e){e.preventDefault(),e.returnValue=!0}const nt=new Map,rt={navigateTo:function(e,t,n=!1){Me(e,t instanceof Object?t:{forceLoad:t,replaceHistoryEntry:n})},registerCustomEventType:function(e,t){if(!t)throw new Error("The options parameter is required.");if(i.has(e))throw new Error(`The event '${e}' is already registered.`);if(t.browserEventName){const n=s.get(t.browserEventName);n?n.push(e):s.set(t.browserEventName,[e]),a.forEach((n=>n(e,t.browserEventName)))}i.set(e,t)},rootComponents:y,runtime:{},_internal:{navigationManager:Oe,domWrapper:Ue,Virtualize:Ke,PageTitle:qe,InputFile:Ge,NavigationLock:et,getJSDataStreamChunk:async function(e,t,n){return e instanceof Blob?await async function(e,t,n){const r=e.slice(t,t+n),o=await r.arrayBuffer();return new Uint8Array(o)}(e,t,n):function(e,t,n){return new Uint8Array(e.buffer,e.byteOffset+t,n)}(e,t,n)},attachWebRendererInterop:function(t,n,r,o){if(S.has(t))throw new Error(`Interop methods are already registered for renderer ${t}`);S.set(t,n),r&&o&&Object.keys(r).length>0&&function(t,n,r){if(p)throw new Error("Dynamic root components have already been enabled.");p=t,g=n;for(const[t,o]of Object.entries(r)){const r=e.findJSFunction(t,0);for(const e of o)r(e,n[e])}}(N(t),r,o),A.get(t)?.[0]?.(),function(e){for(const t of C)t(e)}(t)}}};window.Blazor=rt;const ot=navigator,it=ot.userAgentData&&ot.userAgentData.brands,st=it&&it.length>0?it.some((e=>"Google Chrome"===e.brand||"Microsoft Edge"===e.brand||"Chromium"===e.brand)):window.chrome,at=ot.userAgentData?.platform??navigator.platform;function ct(e){return 0!==e.debugLevel&&(st||navigator.userAgent.includes("Firefox"))}let lt=!1;function ut(){const e=document.querySelector("#blazor-error-ui");e&&(e.style.display="block"),lt||(lt=!0,document.querySelectorAll("#blazor-error-ui .reload").forEach((e=>{e.onclick=function(e){location.reload(),e.preventDefault()}})),document.querySelectorAll("#blazor-error-ui .dismiss").forEach((e=>{e.onclick=function(e){const t=document.querySelector("#blazor-error-ui");t&&(t.style.display="none"),e.preventDefault()}})))}var dt,ft;!function(e){e[e.Default=0]="Default",e[e.Server=1]="Server",e[e.WebAssembly=2]="WebAssembly",e[e.WebView=3]="WebView"}(dt||(dt={})),function(e){e[e.Trace=0]="Trace",e[e.Debug=1]="Debug",e[e.Information=2]="Information",e[e.Warning=3]="Warning",e[e.Error=4]="Error",e[e.Critical=5]="Critical",e[e.None=6]="None"}(ft||(ft={}));class mt{constructor(e=!0,t,n,r=0){this.singleRuntime=e,this.logger=t,this.webRendererId=r,this.afterStartedCallbacks=[],n&&this.afterStartedCallbacks.push(...n)}async importInitializersAsync(e,t){await Promise.all(e.map((e=>async function(e,n){const r=function(e){const t=document.baseURI;return t.endsWith("/")?`${t}${e}`:`${t}/${e}`}(n),o=await import(r);if(void 0!==o){if(e.singleRuntime){const{beforeStart:n,afterStarted:r,beforeWebAssemblyStart:s,afterWebAssemblyStarted:a,beforeServerStart:c,afterServerStarted:l}=o;let u=n;e.webRendererId===dt.Server&&c&&(u=c),e.webRendererId===dt.WebAssembly&&s&&(u=s);let d=r;return e.webRendererId===dt.Server&&l&&(d=l),e.webRendererId===dt.WebAssembly&&a&&(d=a),i(e,u,d,t)}return function(e,t,n){const o=n[0],{beforeStart:s,afterStarted:a,beforeWebStart:c,afterWebStarted:l,beforeWebAssemblyStart:u,afterWebAssemblyStarted:d,beforeServerStart:f,afterServerStarted:m}=t,h=!(c||l||u||d||f||m||!s&&!a),p=h&&o.enableClassicInitializers;if(h&&!o.enableClassicInitializers)e.logger?.log(ft.Warning,`Initializer '${r}' will be ignored because multiple runtimes are available. Use 'before(Web|WebAssembly|Server)Start' and 'after(Web|WebAssembly|Server)Started' instead.`);else if(p)return i(e,s,a,n);if(function(e){e.webAssembly?e.webAssembly.initializers||(e.webAssembly.initializers={beforeStart:[],afterStarted:[]}):e.webAssembly={initializers:{beforeStart:[],afterStarted:[]}},e.circuit?e.circuit.initializers||(e.circuit.initializers={beforeStart:[],afterStarted:[]}):e.circuit={initializers:{beforeStart:[],afterStarted:[]}}}(o),u&&o.webAssembly.initializers.beforeStart.push(u),d&&o.webAssembly.initializers.afterStarted.push(d),f&&o.circuit.initializers.beforeStart.push(f),m&&o.circuit.initializers.afterStarted.push(m),l&&e.afterStartedCallbacks.push(l),c)return c(o)}(e,o,t)}function i(e,t,n,r){if(n&&e.afterStartedCallbacks.push(n),t)return t(...r)}}(this,e))))}async invokeAfterStartedCallbacks(e){const t=(n=this.webRendererId,A.get(n)?.[1]);var n;t&&await t,await Promise.all(this.afterStartedCallbacks.map((t=>t(e))))}}let ht,pt,gt,bt,yt=null;const vt={load:function(e,t){return async function(e,t){const{dotnet:n}=await async function(e){if("undefined"==typeof WebAssembly||!WebAssembly.validate)throw new Error("This browser does not support WebAssembly.");let t="_framework/dotnet.js";if(e.loadBootResource){const n="dotnetjs",r=e.loadBootResource(n,"dotnet.js",t,"","js-module-dotnet");if("string"==typeof r)t=r;else if(r)throw new Error(`For a ${n} resource, custom loaders must supply a URI string.`)}const n=new URL(t,document.baseURI).toString();return await import(n)}(e),r=function(e,t){const n={maxParallelDownloads:1e6,enableDownloadRetry:!1,applicationEnvironment:e.environment},r={...window.Module||{},onConfigLoaded:async n=>{n.environmentVariables||(n.environmentVariables={}),"sharded"===n.globalizationMode&&(n.environmentVariables.__BLAZOR_SHARDED_ICU="1"),rt._internal.getApplicationEnvironment=()=>n.applicationEnvironment,t?.(n),bt=await async function(e,t){if(e.initializers)return await Promise.all(e.initializers.beforeStart.map((t=>t(e)))),new mt(!1,void 0,e.initializers.afterStarted,dt.WebAssembly);{const n=[e,t.resources?.extensions??{}],r=new mt(!0,void 0,void 0,dt.WebAssembly),o=Object.keys(t?.resources?.libraryInitializers||{});return await r.importInitializersAsync(o,n),r}}(e,n)},onDownloadResourceProgress:wt,config:n,out:St,err:Ct};return r}(e,t);e.applicationCulture&&n.withApplicationCulture(e.applicationCulture),e.environment&&n.withApplicationEnvironment(e.environment),e.loadBootResource&&n.withResourceLoader(e.loadBootResource),n.withModuleConfig(r),e.configureRuntime&&e.configureRuntime(n),gt=await n.create()}(e,t)},start:function(){return async function(){if(!gt)throw new Error("The runtime must be loaded it gets configured.");const{setModuleImports:t,INTERNAL:n,getConfig:r,invokeLibraryInitializers:o}=gt;pt=n,function(e){const t=at.match(/^Mac/i)?"Cmd":"Alt";ct(e)&&console.info(`Debugging hotkey: Shift+${t}+D (when application has focus)`),document.addEventListener("keydown",(t=>{t.shiftKey&&(t.metaKey||t.altKey)&&"KeyD"===t.code&&(ct(e)?navigator.userAgent.includes("Firefox")?async function(){const e=await fetch(`_framework/debug?url=${encodeURIComponent(location.href)}&isFirefox=true`);200!==e.status&&console.warn(await e.text())}():st?function(){const e=document.createElement("a");e.href=`_framework/debug?url=${encodeURIComponent(location.href)}`,e.target="_blank",e.rel="noopener noreferrer",e.click()}():console.error("Currently, only Microsoft Edge (80+), Google Chrome, or Chromium, are supported for debugging."):console.error("Cannot start debugging, because the application was not compiled with debugging enabled."))}))}(r()),rt.runtime=gt,rt._internal.dotNetCriticalError=Ct,t("blazor-internal",{Blazor:{_internal:rt._internal}});const i=await gt.getAssemblyExports("Microsoft.AspNetCore.Components.WebAssembly");return Object.assign(rt._internal,{dotNetExports:{...i.Microsoft.AspNetCore.Components.WebAssembly.Services.DefaultWebAssemblyJSRuntime}}),ht=e.attachDispatcher({beginInvokeDotNetFromJS:(e,t,n,r,o)=>{if(At(),!r&&!t)throw new Error("Either assemblyName or dotNetObjectId must have a non null value.");const i=r?r.toString():t;rt._internal.dotNetExports.BeginInvokeDotNet(e?e.toString():null,i,n,o)},endInvokeJSFromDotNet:(e,t,n)=>{rt._internal.dotNetExports.EndInvokeJS(n)},sendByteArray:(e,t)=>{rt._internal.dotNetExports.ReceiveByteArrayFromJS(e,t)},invokeDotNetFromJS:(e,t,n,r)=>(At(),rt._internal.dotNetExports.InvokeDotNet(e||null,t,n??0,r))}),{invokeLibraryInitializers:o}}()},callEntryPoint:async function(){try{await gt.runMain(gt.getConfig().mainAssemblyName,[])}catch(e){console.error(e),ut()}},getArrayEntryPtr:function(e,t,n){const r=function(e){return e+12}(e)+4+t*n;return r},getObjectFieldsBaseAddress:function(e){return e+8},readInt16Field:function(e,t){return gt.getHeapI16(e+(t||0))},readInt32Field:function(e,t){return gt.getHeapI32(e+(t||0))},readUint64Field:function(e,t){return gt.getHeapU52(e+(t||0))},readObjectField:function(e,t){return gt.getHeapU32(e+(t||0))},readStringField:function(e,t,n){const r=gt.getHeapU32(e+(t||0));if(0===r)return null;if(n){const e=pt.monoObjectAsBoolOrNullUnsafe(r);if("boolean"==typeof e)return e?"":null}return pt.monoStringToStringUnsafe(r)},readStructField:function(e,t){return e+(t||0)},beginHeapLock:function(){return At(),yt=It.create(),yt},invokeWhenHeapUnlocked:function(e){yt?yt.enqueuePostReleaseAction(e):e()}};function wt(e,t){const n=e/t*100;document.documentElement.style.setProperty("--blazor-load-percentage",`${n}%`),document.documentElement.style.setProperty("--blazor-load-percentage-text",`"${Math.floor(n)}%"`)}const Et=["DEBUGGING ENABLED"],St=e=>Et.indexOf(e)<0&&console.log(e),Ct=e=>{console.error(e||"(null)"),ut()};function At(){if(yt)throw new Error("Assertion failed - heap is currently locked")}class It{enqueuePostReleaseAction(e){this.postReleaseActions||(this.postReleaseActions=[]),this.postReleaseActions.push(e)}release(){if(yt!==this)throw new Error("Trying to release a lock which isn't current");for(pt.mono_wasm_gc_unlock(),yt=null;this.postReleaseActions?.length;)this.postReleaseActions.shift()(),At()}static create(){return pt.mono_wasm_gc_lock(),new It}}class Nt{constructor(e){this.batchAddress=e,this.arrayRangeReader=Rt,this.arrayBuilderSegmentReader=kt,this.diffReader=Dt,this.editReader=_t,this.frameReader=Tt}updatedComponents(){return t.readStructField(this.batchAddress,0)}referenceFrames(){return t.readStructField(this.batchAddress,Rt.structLength)}disposedComponentIds(){return t.readStructField(this.batchAddress,2*Rt.structLength)}disposedEventHandlerIds(){return t.readStructField(this.batchAddress,3*Rt.structLength)}updatedComponentsEntry(e,t){return Ft(e,t,Dt.structLength)}referenceFramesEntry(e,t){return Ft(e,t,Tt.structLength)}disposedComponentIdsEntry(e,n){const r=Ft(e,n,4);return t.readInt32Field(r)}disposedEventHandlerIdsEntry(e,n){const r=Ft(e,n,8);return t.readUint64Field(r)}}const Rt={structLength:8,values:e=>t.readObjectField(e,0),count:e=>t.readInt32Field(e,4)},kt={structLength:12,values:e=>{const n=t.readObjectField(e,0),r=t.getObjectFieldsBaseAddress(n);return t.readObjectField(r,0)},offset:e=>t.readInt32Field(e,4),count:e=>t.readInt32Field(e,8)},Dt={structLength:4+kt.structLength,componentId:e=>t.readInt32Field(e,0),edits:e=>t.readStructField(e,4),editsEntry:(e,t)=>Ft(e,t,_t.structLength)},_t={structLength:20,editType:e=>t.readInt32Field(e,0),siblingIndex:e=>t.readInt32Field(e,4),newTreeIndex:e=>t.readInt32Field(e,8),moveToSiblingIndex:e=>t.readInt32Field(e,8),removedAttributeName:e=>t.readStringField(e,16)},Tt={structLength:36,frameType:e=>t.readInt16Field(e,4),subtreeLength:e=>t.readInt32Field(e,8),elementReferenceCaptureId:e=>t.readStringField(e,16),componentId:e=>t.readInt32Field(e,12),elementName:e=>t.readStringField(e,16),textContent:e=>t.readStringField(e,16),markupContent:e=>t.readStringField(e,16),attributeName:e=>t.readStringField(e,16),attributeValue:e=>t.readStringField(e,24,!0),attributeEventHandlerId:e=>t.readUint64Field(e,8)};function Ft(e,n,r){return t.getArrayEntryPtr(e,n,r)}const Lt=/^\s*Blazor-WebAssembly-Component-State:(?[a-zA-Z0-9+/=]+)$/;function Ot(e){return Mt(e,Lt)}function Mt(e,t,n="state"){if(e.nodeType===Node.COMMENT_NODE){const r=e.textContent||"",o=t.exec(r),i=o&&o.groups&&o.groups[n];return i&&e.parentNode?.removeChild(e),i}if(!e.hasChildNodes())return;const r=e.childNodes;for(let e=0;e.*)$/);function Bt(e,t){const n=e.currentElement;var r,o,i;if(n&&n.nodeType===Node.COMMENT_NODE&&n.textContent){const s=Pt.exec(n.textContent),a=s&&s.groups&&s.groups.descriptor;if(!a)return;!function(e){if(e.parentNode instanceof Document)throw new Error("Root components cannot be marked as interactive. The element must be rendered statically so that scripts are not evaluated multiple times.")}(n);try{const s=function(e){const t=JSON.parse(e),{type:n}=t;if("server"!==n&&"webassembly"!==n&&"auto"!==n)throw new Error(`Invalid component type '${n}'.`);return t}(a),c=function(e,t,n){const{prerenderId:r}=e;if(r){for(;n.next()&&n.currentElement;){const e=n.currentElement;if(e.nodeType!==Node.COMMENT_NODE)continue;if(!e.textContent)continue;const t=Pt.exec(e.textContent),o=t&&t[1];if(o)return Kt(o,r),e}throw new Error(`Could not find an end component comment for '${t}'.`)}}(s,n,e);if(t!==s.type)return;switch(s.type){case"webassembly":return o=n,i=c,Ut(r=s),{...r,uniqueId:$t++,start:o,end:i};case"server":return function(e,t,n){return Wt(e),{...e,uniqueId:$t++,start:t,end:n}}(s,n,c);case"auto":return function(e,t,n){return Wt(e),Ut(e),{...e,uniqueId:$t++,start:t,end:n}}(s,n,c)}}catch(e){throw new Error(`Found malformed component comment at ${n.textContent}`)}}}let Ht,jt,Jt,zt,$t=0;function Wt(e){const{descriptor:t,sequence:n}=e;if(!t)throw new Error("descriptor must be defined when using a descriptor.");if(void 0===n)throw new Error("sequence must be defined when using a descriptor.");if(!Number.isInteger(n))throw new Error(`Error parsing the sequence '${n}' for component '${JSON.stringify(e)}'`)}function Ut(e){const{assembly:t,typeName:n}=e;if(!t)throw new Error("assembly must be defined when using a descriptor.");if(!n)throw new Error("typeName must be defined when using a descriptor.");e.parameterDefinitions=e.parameterDefinitions&&atob(e.parameterDefinitions),e.parameterValues=e.parameterValues&&atob(e.parameterValues)}function Kt(e,t){const n=JSON.parse(e);if(1!==Object.keys(n).length)throw new Error(`Invalid end of component comment: '${e}'`);const r=n.prerenderId;if(!r)throw new Error(`End of component comment must have a value for the prerendered property: '${e}'`);if(r!==t)throw new Error(`End of component comment prerendered property must match the start comment prerender id: '${t}', '${r}'`)}class Vt{constructor(e){this.childNodes=e,this.currentIndex=-1,this.length=e.length}next(){return this.currentIndex++,this.currentIndex{zt=e}));const Yt=new Promise((e=>{}));let qt;const Gt=new Promise((e=>{qt=e}));function Zt(e){if(Ht)throw new Error("WebAssembly options have already been configured.");!async function(e){const t=await e;Ht=t,qt()}(e)}function Qt(e){if(void 0!==Jt)throw new Error("Blazor WebAssembly has already started.");return Jt=new Promise(en.bind(null,e)),Jt}async function en(e,n,r){(function(){if(window.parent!==window&&!window.opener&&window.frameElement){const e=window.sessionStorage&&window.sessionStorage["Microsoft.AspNetCore.Components.WebAssembly.Authentication.CachedAuthSettings"],t=e&&JSON.parse(e);return t&&t.redirect_uri&&location.href.startsWith(t.redirect_uri)}return!1})()&&await new Promise((()=>{}));const o=tn();!function(e){const t=R;R=(e,n,r)=>{((e,t,n)=>{const r=function(e){return he[e]}(e);r?.eventDelegator.getHandler(t)&&vt.invokeWhenHeapUnlocked(n)})(e,n,(()=>t(e,n,r)))}}(),rt._internal.applyHotReload=(e,t,n,r,o)=>{ht.invokeDotNetStaticMethod("Microsoft.AspNetCore.Components.WebAssembly","ApplyHotReloadDelta",e,t,n,r,o??null)},rt._internal.getApplyUpdateCapabilities=()=>ht.invokeDotNetStaticMethod("Microsoft.AspNetCore.Components.WebAssembly","GetApplyUpdateCapabilities"),rt._internal.invokeJSJson=nn,rt._internal.endInvokeDotNetFromJS=rn,rt._internal.receiveWebAssemblyDotNetDataStream=on,rt._internal.receiveByteArray=sn;const i=(t=vt,t);rt.platform=i,rt._internal.renderBatch=(e,t)=>{const n=vt.beginHeapLock();try{!function(e,t){const n=he[e];if(!n)throw new Error(`There is no browser renderer with ID ${e}.`);const r=t.arrayRangeReader,o=t.updatedComponents(),i=r.values(o),s=r.count(o),a=t.referenceFrames(),c=r.values(a),l=t.diffReader;for(let e=0;e{await ht.invokeDotNetStaticMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChanged",e,t,n)}),(async(e,t,n,r)=>{const o=await ht.invokeDotNetStaticMethodAsync("Microsoft.AspNetCore.Components.WebAssembly","NotifyLocationChangingAsync",t,n,r);rt._internal.navigationManager.endLocationChanging(e,o)}));const s=new Xt(e);rt._internal.registeredComponents={getRegisteredComponentsCount:()=>s.getCount(),getAssembly:e=>s.getAssembly(e),getTypeName:e=>s.getTypeName(e),getParameterDefinitions:e=>s.getParameterDefinitions(e)||"",getParameterValues:e=>s.getParameterValues(e)||""},rt._internal.getPersistedState=()=>Ot(document)||"",rt._internal.getInitialComponentsUpdate=()=>Yt,rt._internal.updateRootComponents=e=>rt._internal.dotNetExports?.UpdateRootComponentsCore(e),rt._internal.endUpdateRootComponents=t=>e.onAfterUpdateRootComponents?.(t),rt._internal.attachRootComponentToElement=(e,t,n)=>{const r=s.resolveRegisteredElement(e);r?we(n,r,t,!1):function(e,t,n){const r="::before";let o=!1;if(e.endsWith("::after"))e=e.slice(0,-7),o=!0;else if(e.endsWith(r))throw new Error(`The '${r}' selector is not supported.`);const i=function(e){const t=h.get(e);if(t)return h.delete(e),t}(e)||document.querySelector(e);if(!i)throw new Error(`Could not find any element matching selector '${e}'.`);we(n,B(i,!0),t,o)}(e,t,n)};try{await o,await i.start()}catch(e){throw new Error(`Failed to start platform. Reason: ${e}`)}i.callEntryPoint(),bt.invokeAfterStartedCallbacks(rt),n()}function tn(){return jt??=(async()=>{await Gt;const e=Ht??{},t=Ht?.configureRuntime;e.configureRuntime=e=>{t?.(e)},await vt.load(e,zt)})(),jt}function nn(e,t,n,r,o){return 0!==o?(ht.beginInvokeJSFromDotNet(o,e,r,n,t),null):ht.invokeJSFromDotNet(e,r,n,t)}function rn(e,t,n){ht.endInvokeDotNetFromJS(e,t,n)}function on(e,t,n,r){!function(e,t,n,r,o){let i=nt.get(t);if(!i){const n=new ReadableStream({start(e){nt.set(t,e),i=e}});e.supplyDotNetStream(t,n)}o?(i.error(o),nt.delete(t)):0===r?(i.close(),nt.delete(t)):i.enqueue(n.length===r?n:n.subarray(0,r))}(ht,e,t,n,r)}function sn(e,t){ht.receiveByteArray(e,t)}class an{constructor(e){this.initialComponents=e}resolveRootComponent(e){return this.initialComponents[e]}}class cn{constructor(){this._eventListeners=new Map}static create(e){const t=new cn;return e.addEventListener=t.addEventListener.bind(t),e.removeEventListener=t.removeEventListener.bind(t),t}addEventListener(e,t){let n=this._eventListeners.get(e);n||(n=new Set,this._eventListeners.set(e,n)),n.add(t)}removeEventListener(e,t){this._eventListeners.get(e)?.delete(t)}dispatchEvent(e,t){const n=this._eventListeners.get(e);if(!n)return;const r={...t,type:e};for(const e of n)e(r)}}let ln=!1;async function un(e){if(ln)throw new Error("Blazor has already started.");ln=!0,Zt(Promise.resolve(e||{})),cn.create(rt);const t=xt(document,"webassembly"),n=new an(t);await Qt(n)}rt.start=un,window.DotNet=e,document&&document.currentScript&&"false"!==document.currentScript.getAttribute("autostart")&&un().catch(Ct)}(); diff --git a/_framework/blazor.webassembly.js.br b/_framework/blazor.webassembly.js.br new file mode 100644 index 00000000..ce5db9ad Binary files /dev/null and b/_framework/blazor.webassembly.js.br differ diff --git a/_framework/blazor.webassembly.js.gz b/_framework/blazor.webassembly.js.gz new file mode 100644 index 00000000..9590691e Binary files /dev/null and b/_framework/blazor.webassembly.js.gz differ diff --git a/_framework/dotnet.js b/_framework/dotnet.js new file mode 100755 index 00000000..8a483e39 --- /dev/null +++ b/_framework/dotnet.js @@ -0,0 +1,4 @@ +//! Licensed to the .NET Foundation under one or more agreements. +//! The .NET Foundation licenses this file to you under the MIT license. +var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11])),o=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),n=Symbol.for("wasm promise_control");function r(e,t){let o=null;const r=new Promise((function(n,r){o={isDone:!1,promise:null,resolve:t=>{o.isDone||(o.isDone=!0,n(t),e&&e())},reject:e=>{o.isDone||(o.isDone=!0,r(e),t&&t())}}}));o.promise=r;const i=r;return i[n]=o,{promise:i,promise_control:o}}function i(e){return e[n]}function s(e){e&&function(e){return void 0!==e[n]}(e)||Ke(!1,"Promise is not controllable")}const a="__mono_message__",l=["debug","log","trace","warn","info","error"],c="MONO_WASM: ";let u,d,f,m;function g(e){m=e}function h(e){if(qe.diagnosticTracing){const t="function"==typeof e?e():e;console.debug(c+t)}}function p(e,...t){console.info(c+e,...t)}function b(e,...t){console.info(e,...t)}function w(e,...t){console.warn(c+e,...t)}function y(e,...t){if(t&&t.length>0&&t[0]&&"object"==typeof t[0]){if(t[0].silent)return;if(t[0].toString)return void console.error(c+e,t[0].toString())}console.error(c+e,...t)}function v(e,t,o){return function(...n){try{let r=n[0];if(void 0===r)r="undefined";else if(null===r)r="null";else if("function"==typeof r)r=r.toString();else if("string"!=typeof r)try{r=JSON.stringify(r)}catch(e){r=r.toString()}t(o?JSON.stringify({method:e,payload:r,arguments:n.slice(1)}):[e+r,...n.slice(1)])}catch(e){f.error(`proxyConsole failed: ${e}`)}}}function _(e,t,o){d=t,m=e,f={...t};const n=`${o}/console`.replace("https://","wss://").replace("http://","ws://");u=new WebSocket(n),u.addEventListener("error",R),u.addEventListener("close",j),function(){for(const e of l)d[e]=v(`console.${e}`,T,!0)}()}function E(e){let t=30;const o=()=>{u?0==u.bufferedAmount||0==t?(e&&b(e),function(){for(const e of l)d[e]=v(`console.${e}`,f.log,!1)}(),u.removeEventListener("error",R),u.removeEventListener("close",j),u.close(1e3,e),u=void 0):(t--,globalThis.setTimeout(o,100)):e&&f&&f.log(e)};o()}function T(e){u&&u.readyState===WebSocket.OPEN?u.send(e):f.log(e)}function R(e){f.error(`[${m}] proxy console websocket error: ${e}`,e)}function j(e){f.debug(`[${m}] proxy console websocket closed: ${e}`,e)}(new Date).valueOf();const x={},A={},S={};let O,D,k;function C(){const e=Object.values(S),t=Object.values(A),o=L(e),n=L(t),r=o+n;if(0===r)return;const i=We?"%c":"",s=We?["background: purple; color: white; padding: 1px 3px; border-radius: 3px;","font-weight: bold;","font-weight: normal;"]:[],a=qe.config.linkerEnabled?"":"\nThis application was built with linking (tree shaking) disabled. \nPublished applications will be significantly smaller if you install wasm-tools workload. \nSee also https://aka.ms/dotnet-wasm-features";console.groupCollapsed(`${i}dotnet${i} Loaded ${U(r)} resources${i}${a}`,...s),e.length&&(console.groupCollapsed(`Loaded ${U(o)} resources from cache`),console.table(S),console.groupEnd()),t.length&&(console.groupCollapsed(`Loaded ${U(n)} resources from network`),console.table(A),console.groupEnd()),console.groupEnd()}async function I(){const e=O;if(e){const t=(await e.keys()).map((async t=>{t.url in x||await e.delete(t)}));await Promise.all(t)}}function M(e){return`${e.resolvedUrl}.${e.hash}`}async function P(){O=await async function(e){if(!qe.config.cacheBootResources||void 0===globalThis.caches||void 0===globalThis.document)return null;if(!1===globalThis.isSecureContext)return null;const t=`dotnet-resources-${globalThis.document.baseURI.substring(globalThis.document.location.origin.length)}`;try{return await caches.open(t)||null}catch(e){return null}}()}function L(e){return e.reduce(((e,t)=>e+(t.responseBytes||0)),0)}function U(e){return`${(e/1048576).toFixed(2)} MB`}function $(){qe.preferredIcuAsset=N(qe.config);let e="invariant"==qe.config.globalizationMode;if(!e)if(qe.preferredIcuAsset)qe.diagnosticTracing&&h("ICU data archive(s) available, disabling invariant mode");else{if("custom"===qe.config.globalizationMode||"all"===qe.config.globalizationMode||"sharded"===qe.config.globalizationMode){const e="invariant globalization mode is inactive and no ICU data archives are available";throw y(`ERROR: ${e}`),new Error(e)}qe.diagnosticTracing&&h("ICU data archive(s) not available, using invariant globalization mode"),e=!0,qe.preferredIcuAsset=null}const t="DOTNET_SYSTEM_GLOBALIZATION_INVARIANT",o="DOTNET_SYSTEM_GLOBALIZATION_HYBRID",n=qe.config.environmentVariables;if(void 0===n[o]&&"hybrid"===qe.config.globalizationMode?n[o]="1":void 0===n[t]&&e&&(n[t]="1"),void 0===n.TZ)try{const e=Intl.DateTimeFormat().resolvedOptions().timeZone||null;e&&(n.TZ=e)}catch(e){p("failed to detect timezone, will fallback to UTC")}}function N(e){var t;if((null===(t=e.resources)||void 0===t?void 0:t.icu)&&"invariant"!=e.globalizationMode){const t=e.applicationCulture||(We?globalThis.navigator&&globalThis.navigator.languages&&globalThis.navigator.languages[0]:Intl.DateTimeFormat().resolvedOptions().locale),o=Object.keys(e.resources.icu),n={};for(let t=0;t=1)return o[0]}else"hybrid"===e.globalizationMode?r="icudt_hybrid.dat":t&&"all"!==e.globalizationMode?"sharded"===e.globalizationMode&&(r=function(e){const t=e.split("-")[0];return"en"===t||["fr","fr-FR","it","it-IT","de","de-DE","es","es-ES"].includes(e)?"icudt_EFIGS.dat":["zh","ko","ja"].includes(t)?"icudt_CJK.dat":"icudt_no_CJK.dat"}(t)):r="icudt.dat";if(r&&n[r])return n[r]}return e.globalizationMode="invariant",null}const z=class{constructor(e){this.url=e}toString(){return this.url}};async function W(e,t){try{const o="function"==typeof globalThis.fetch;if(Ue){const n=e.startsWith("file://");if(!n&&o)return globalThis.fetch(e,t||{credentials:"same-origin"});D||(k=He.require("url"),D=He.require("fs")),n&&(e=k.fileURLToPath(e));const r=await D.promises.readFile(e);return{ok:!0,headers:{length:0,get:()=>null},url:e,arrayBuffer:()=>r,json:()=>JSON.parse(r),text:()=>{throw new Error("NotImplementedException")}}}if(o)return globalThis.fetch(e,t||{credentials:"same-origin"});if("function"==typeof read)return{ok:!0,url:e,headers:{length:0,get:()=>null},arrayBuffer:()=>new Uint8Array(read(e,"binary")),json:()=>JSON.parse(read(e,"utf8")),text:()=>read(e,"utf8")}}catch(t){return{ok:!1,url:e,status:500,headers:{length:0,get:()=>null},statusText:"ERR28: "+t,arrayBuffer:()=>{throw t},json:()=>{throw t},text:()=>{throw t}}}throw new Error("No fetch implementation available")}function B(e){return"string"!=typeof e&&Ke(!1,"url must be a string"),!q(e)&&0!==e.indexOf("./")&&0!==e.indexOf("../")&&globalThis.URL&&globalThis.document&&globalThis.document.baseURI&&(e=new URL(e,globalThis.document.baseURI).toString()),e}const F=/^[a-zA-Z][a-zA-Z\d+\-.]*?:\/\//,V=/[a-zA-Z]:[\\/]/;function q(e){return Ue||Be?e.startsWith("/")||e.startsWith("\\")||-1!==e.indexOf("///")||V.test(e):F.test(e)}let G,H=0;const J=[],Z=[],Q=new Map,Y={"js-module-threads":!0,"js-module-globalization":!0,"js-module-runtime":!0,"js-module-dotnet":!0,"js-module-native":!0},K={...Y,"js-module-library-initializer":!0},X={...Y,dotnetwasm:!0,heap:!0,manifest:!0},ee={...K,manifest:!0},te={...K,dotnetwasm:!0},oe={dotnetwasm:!0,symbols:!0,"segmentation-rules":!0},ne={...K,dotnetwasm:!0,symbols:!0,"segmentation-rules":!0},re={symbols:!0,"segmentation-rules":!0};function ie(e){return!("icu"==e.behavior&&e.name!=qe.preferredIcuAsset)}function se(e,t,o){const n=Object.keys(t||{});Ke(1==n.length,`Expect to have one ${o} asset in resources`);const r=n[0],i={name:r,hash:t[r],behavior:o};return ae(i),e.push(i),i}function ae(e){X[e.behavior]&&Q.set(e.behavior,e)}function le(e){const t=function(e){Ke(X[e],`Unknown single asset behavior ${e}`);const t=Q.get(e);return Ke(t,`Single asset for ${e} not found`),t}(e);if(!t.resolvedUrl)if(t.resolvedUrl=qe.locateFile(t.name),Y[t.behavior]){const e=Te(t);e?("string"!=typeof e&&Ke(!1,"loadBootResource response for 'dotnetjs' type should be a URL string"),t.resolvedUrl=e):t.resolvedUrl=we(t.resolvedUrl,t.behavior)}else if("dotnetwasm"!==t.behavior)throw new Error(`Unknown single asset behavior ${e}`);return t}let ce=!1;async function ue(){if(!ce){ce=!0,qe.diagnosticTracing&&h("mono_download_assets");try{const e=[],t=[],o=(e,t)=>{!ne[e.behavior]&&ie(e)&&qe.expected_instantiated_assets_count++,!te[e.behavior]&&ie(e)&&(qe.expected_downloaded_assets_count++,t.push(he(e)))};for(const t of J)o(t,e);for(const e of Z)o(e,t);qe.allDownloadsQueued.promise_control.resolve(),Promise.all([...e,...t]).then((()=>{qe.allDownloadsFinished.promise_control.resolve()})).catch((e=>{throw qe.err("Error in mono_download_assets: "+e),at(1,e),e})),await qe.runtimeModuleLoaded.promise;const n=async e=>{const t=await e;if(t.buffer){if(!ne[t.behavior]){t.buffer&&"object"==typeof t.buffer||Ke(!1,"asset buffer must be array-like or buffer-like or promise of these"),"string"!=typeof t.resolvedUrl&&Ke(!1,"resolvedUrl must be string");const e=t.resolvedUrl,o=await t.buffer,n=new Uint8Array(o);Re(t),await Fe.beforeOnRuntimeInitialized.promise,Fe.instantiate_asset(t,e,n)}}else oe[t.behavior]?("symbols"===t.behavior?(await Fe.instantiate_symbols_asset(t),Re(t)):"segmentation-rules"===t.behavior&&(await Fe.instantiate_segmentation_rules_asset(t),Re(t)),oe[t.behavior]&&++qe.actual_downloaded_assets_count):(t.isOptional||Ke(!1,"Expected asset to have the downloaded buffer"),!te[t.behavior]&&ie(t)&&qe.expected_downloaded_assets_count--,!ne[t.behavior]&&ie(t)&&qe.expected_instantiated_assets_count--)},r=[],i=[];for(const t of e)r.push(n(t));for(const e of t)i.push(n(e));Promise.all(r).then((()=>{ze||Fe.coreAssetsInMemory.promise_control.resolve()})).catch((e=>{throw qe.err("Error in mono_download_assets: "+e),at(1,e),e})),Promise.all(i).then((async()=>{ze||(await Fe.coreAssetsInMemory.promise,Fe.allAssetsInMemory.promise_control.resolve())})).catch((e=>{throw qe.err("Error in mono_download_assets: "+e),at(1,e),e}))}catch(e){throw qe.err("Error in mono_download_assets: "+e),e}}}let de=!1;function fe(){if(de)return;de=!0;const e=qe.config,t=[];if(e.assets)for(const t of e.assets)"object"!=typeof t&&Ke(!1,`asset must be object, it was ${typeof t} : ${t}`),"string"!=typeof t.behavior&&Ke(!1,"asset behavior must be known string"),"string"!=typeof t.name&&Ke(!1,"asset name must be string"),t.resolvedUrl&&"string"!=typeof t.resolvedUrl&&Ke(!1,"asset resolvedUrl could be string"),t.hash&&"string"!=typeof t.hash&&Ke(!1,"asset resolvedUrl could be string"),t.pendingDownload&&"object"!=typeof t.pendingDownload&&Ke(!1,"asset pendingDownload could be object"),t.isCore?J.push(t):Z.push(t),ae(t);else if(e.resources){const o=e.resources;o.wasmNative||Ke(!1,"resources.wasmNative must be defined"),o.jsModuleNative||Ke(!1,"resources.jsModuleNative must be defined"),o.jsModuleRuntime||Ke(!1,"resources.jsModuleRuntime must be defined"),se(Z,o.wasmNative,"dotnetwasm"),se(t,o.jsModuleNative,"js-module-native"),se(t,o.jsModuleRuntime,"js-module-runtime"),"hybrid"==e.globalizationMode&&se(t,o.jsModuleGlobalization,"js-module-globalization");const n=(e,t)=>{!o.fingerprinting||"assembly"!=e.behavior&&"pdb"!=e.behavior&&"resource"!=e.behavior||(e.virtualPath=me(e.name)),t?(e.isCore=!0,J.push(e)):Z.push(e)};if(o.coreAssembly)for(const e in o.coreAssembly)n({name:e,hash:o.coreAssembly[e],behavior:"assembly"},!0);if(o.assembly)for(const e in o.assembly)n({name:e,hash:o.assembly[e],behavior:"assembly"},!o.coreAssembly);if(0!=e.debugLevel){if(o.corePdb)for(const e in o.corePdb)n({name:e,hash:o.corePdb[e],behavior:"pdb"},!0);if(o.pdb)for(const e in o.pdb)n({name:e,hash:o.pdb[e],behavior:"pdb"},!o.corePdb)}if(e.loadAllSatelliteResources&&o.satelliteResources)for(const e in o.satelliteResources)for(const t in o.satelliteResources[e])Z.push({name:t,hash:o.satelliteResources[e][t],behavior:"resource",culture:e});if(o.coreVfs)for(const e in o.coreVfs)for(const t in o.coreVfs[e])n({name:t,hash:o.coreVfs[e][t],behavior:"vfs",virtualPath:e},!0);if(o.vfs)for(const e in o.vfs)for(const t in o.vfs[e])n({name:t,hash:o.vfs[e][t],behavior:"vfs",virtualPath:e},!o.coreVfs);const r=N(e);if(r&&o.icu)for(const e in o.icu)e===r?Z.push({name:e,hash:o.icu[e],behavior:"icu",loadRemote:!0}):e.startsWith("segmentation-rules")&&e.endsWith(".json")&&Z.push({name:e,hash:o.icu[e],behavior:"segmentation-rules"});if(o.wasmSymbols)for(const e in o.wasmSymbols)J.push({name:e,hash:o.wasmSymbols[e],behavior:"symbols"})}if(e.appsettings)for(let t=0;tglobalThis.setTimeout(e,100))),qe.diagnosticTracing&&h(`Retrying download (2) '${e.name}' after delay`),await pe(e)}}}async function pe(e){for(;G;)await G.promise;try{++H,H==qe.maxParallelDownloads&&(qe.diagnosticTracing&&h("Throttling further parallel downloads"),G=r());const t=await async function(e){if(e.pendingDownload&&(e.pendingDownloadInternal=e.pendingDownload),e.pendingDownloadInternal&&e.pendingDownloadInternal.response)return e.pendingDownloadInternal.response;if(e.buffer){const t=await e.buffer;return e.resolvedUrl||(e.resolvedUrl="undefined://"+e.name),e.pendingDownloadInternal={url:e.resolvedUrl,name:e.name,response:Promise.resolve({ok:!0,arrayBuffer:()=>t,json:()=>JSON.parse(new TextDecoder("utf-8").decode(t)),text:()=>{throw new Error("NotImplementedException")},headers:{get:()=>{}}})},e.pendingDownloadInternal.response}const t=e.loadRemote&&qe.config.remoteSources?qe.config.remoteSources:[""];let o;for(let n of t){n=n.trim(),"./"===n&&(n="");const t=be(e,n);e.name===t?qe.diagnosticTracing&&h(`Attempting to download '${t}'`):qe.diagnosticTracing&&h(`Attempting to download '${t}' for ${e.name}`);try{e.resolvedUrl=t;const n=_e(e);if(e.pendingDownloadInternal=n,o=await n.response,!o||!o.ok)continue;return o}catch(e){o||(o={ok:!1,url:t,status:0,statusText:""+e});continue}}const n=e.isOptional||e.name.match(/\.pdb$/)&&qe.config.ignorePdbLoadErrors;if(o||Ke(!1,`Response undefined ${e.name}`),!n){const t=new Error(`download '${o.url}' for ${e.name} failed ${o.status} ${o.statusText}`);throw t.status=o.status,t}p(`optional download '${o.url}' for ${e.name} failed ${o.status} ${o.statusText}`)}(e);return t?(oe[e.behavior]||(e.buffer=await t.arrayBuffer(),++qe.actual_downloaded_assets_count),e):e}finally{if(--H,G&&H==qe.maxParallelDownloads-1){qe.diagnosticTracing&&h("Resuming more parallel downloads");const e=G;G=void 0,e.promise_control.resolve()}}}function be(e,t){let o;return null==t&&Ke(!1,`sourcePrefix must be provided for ${e.name}`),e.resolvedUrl?o=e.resolvedUrl:(o=""===t?"assembly"===e.behavior||"pdb"===e.behavior?e.name:"resource"===e.behavior&&e.culture&&""!==e.culture?`${e.culture}/${e.name}`:e.name:t+e.name,o=we(qe.locateFile(o),e.behavior)),o&&"string"==typeof o||Ke(!1,"attemptUrl need to be path or url string"),o}function we(e,t){return qe.modulesUniqueQuery&&ee[t]&&(e+=qe.modulesUniqueQuery),e}let ye=0;const ve=new Set;function _e(e){try{e.resolvedUrl||Ke(!1,"Request's resolvedUrl must be set");const t=async function(e){let t=await async function(e){const t=O;if(!t||e.noCache||!e.hash||0===e.hash.length)return;const o=M(e);let n;x[o]=!0;try{n=await t.match(o)}catch(e){}if(!n)return;const r=parseInt(n.headers.get("content-length")||"0");return S[e.name]={responseBytes:r},n}(e);return t||(t=await function(e){let t=e.resolvedUrl;if(qe.loadBootResource){const o=Te(e);if(o instanceof Promise)return o;"string"==typeof o&&(t=o)}const o={};return qe.config.disableNoCacheFetch||(o.cache="no-cache"),e.useCredentials?o.credentials="include":!qe.config.disableIntegrityCheck&&e.hash&&(o.integrity=e.hash),qe.fetch_like(t,o)}(e),function(e,t){const o=O;if(!o||e.noCache||!e.hash||0===e.hash.length)return;const n=t.clone();setTimeout((()=>{const t=M(e);!async function(e,t,o,n){const r=await n.arrayBuffer(),i=function(e){if("undefined"!=typeof performance)return performance.getEntriesByName(e)[0]}(n.url),s=i&&i.encodedBodySize||void 0;A[t]={responseBytes:s};const a=new Response(r,{headers:{"content-type":n.headers.get("content-type")||"","content-length":(s||n.headers.get("content-length")||"").toString()}});try{await e.put(o,a)}catch(e){}}(o,e.name,t,n)}),0)}(e,t)),t}(e),o={name:e.name,url:e.resolvedUrl,response:t};return ve.add(e.name),o.response.then((()=>{"assembly"==e.behavior&&qe.loadedAssemblies.push(e.name),ye++,qe.onDownloadResourceProgress&&qe.onDownloadResourceProgress(ye,ve.size)})),o}catch(t){const o={ok:!1,url:e.resolvedUrl,status:500,statusText:"ERR29: "+t,arrayBuffer:()=>{throw t},json:()=>{throw t}};return{name:e.name,url:e.resolvedUrl,response:Promise.resolve(o)}}}const Ee={resource:"assembly",assembly:"assembly",pdb:"pdb",icu:"globalization",vfs:"configuration",manifest:"manifest",dotnetwasm:"dotnetwasm","js-module-dotnet":"dotnetjs","js-module-native":"dotnetjs","js-module-runtime":"dotnetjs","js-module-threads":"dotnetjs"};function Te(e){var t;if(qe.loadBootResource){const o=null!==(t=e.hash)&&void 0!==t?t:"",n=e.resolvedUrl,r=Ee[e.behavior];if(r){const t=qe.loadBootResource(r,e.name,n,o,e.behavior);return"string"==typeof t?B(t):t}}}function Re(e){e.pendingDownloadInternal=null,e.pendingDownload=null,e.buffer=null,e.moduleExports=null}function je(e){let t=e.lastIndexOf("/");return t>=0&&t++,e.substring(t)}async function xe(e){if(!e)return;const t=Object.keys(e);await Promise.all(t.map((e=>async function(e){try{const t=we(qe.locateFile(e),"js-module-library-initializer");qe.diagnosticTracing&&h(`Attempting to import '${t}' for ${e}`);const o=await import(/*! webpackIgnore: true */t);qe.libraryInitializers.push({scriptName:e,exports:o})}catch(t){w(`Failed to import library initializer '${e}': ${t}`)}}(e))))}async function Ae(e,t){if(!qe.libraryInitializers)return;const o=[];for(let n=0;nr.exports[e](...t))))}await Promise.all(o)}async function Se(e,t,o){try{await o()}catch(o){throw w(`Failed to invoke '${t}' on library initializer '${e}': ${o}`),at(1,o),o}}var Oe="Release";function De(e,t){if(e===t)return e;const o={...t};return void 0!==o.assets&&o.assets!==e.assets&&(o.assets=[...e.assets||[],...o.assets||[]]),void 0!==o.resources&&(o.resources=Ce(e.resources||{assembly:{},jsModuleNative:{},jsModuleRuntime:{},wasmNative:{}},o.resources)),void 0!==o.environmentVariables&&(o.environmentVariables={...e.environmentVariables||{},...o.environmentVariables||{}}),void 0!==o.runtimeOptions&&o.runtimeOptions!==e.runtimeOptions&&(o.runtimeOptions=[...e.runtimeOptions||[],...o.runtimeOptions||[]]),Object.assign(e,o)}function ke(e,t){if(e===t)return e;const o={...t};return o.config&&(e.config||(e.config={}),o.config=De(e.config,o.config)),Object.assign(e,o)}function Ce(e,t){if(e===t)return e;const o={...t};return void 0!==o.assembly&&(o.assembly={...e.assembly||{},...o.assembly||{}}),void 0!==o.lazyAssembly&&(o.lazyAssembly={...e.lazyAssembly||{},...o.lazyAssembly||{}}),void 0!==o.pdb&&(o.pdb={...e.pdb||{},...o.pdb||{}}),void 0!==o.jsModuleWorker&&(o.jsModuleWorker={...e.jsModuleWorker||{},...o.jsModuleWorker||{}}),void 0!==o.jsModuleNative&&(o.jsModuleNative={...e.jsModuleNative||{},...o.jsModuleNative||{}}),void 0!==o.jsModuleGlobalization&&(o.jsModuleGlobalization={...e.jsModuleGlobalization||{},...o.jsModuleGlobalization||{}}),void 0!==o.jsModuleRuntime&&(o.jsModuleRuntime={...e.jsModuleRuntime||{},...o.jsModuleRuntime||{}}),void 0!==o.wasmSymbols&&(o.wasmSymbols={...e.wasmSymbols||{},...o.wasmSymbols||{}}),void 0!==o.wasmNative&&(o.wasmNative={...e.wasmNative||{},...o.wasmNative||{}}),void 0!==o.icu&&(o.icu={...e.icu||{},...o.icu||{}}),void 0!==o.satelliteResources&&(o.satelliteResources=Ie(e.satelliteResources||{},o.satelliteResources||{})),void 0!==o.modulesAfterConfigLoaded&&(o.modulesAfterConfigLoaded={...e.modulesAfterConfigLoaded||{},...o.modulesAfterConfigLoaded||{}}),void 0!==o.modulesAfterRuntimeReady&&(o.modulesAfterRuntimeReady={...e.modulesAfterRuntimeReady||{},...o.modulesAfterRuntimeReady||{}}),void 0!==o.extensions&&(o.extensions={...e.extensions||{},...o.extensions||{}}),void 0!==o.vfs&&(o.vfs=Ie(e.vfs||{},o.vfs||{})),Object.assign(e,o)}function Ie(e,t){if(e===t)return e;for(const o in t)e[o]={...e[o],...t[o]};return e}function Me(){const e=qe.config;if(e.environmentVariables=e.environmentVariables||{},e.runtimeOptions=e.runtimeOptions||[],e.resources=e.resources||{assembly:{},jsModuleNative:{},jsModuleGlobalization:{},jsModuleWorker:{},jsModuleRuntime:{},wasmNative:{},vfs:{},satelliteResources:{}},e.assets){qe.diagnosticTracing&&h("config.assets is deprecated, use config.resources instead");for(const t of e.assets){const o={};o[t.name]=t.hash||"";const n={};switch(t.behavior){case"assembly":n.assembly=o;break;case"pdb":n.pdb=o;break;case"resource":n.satelliteResources={},n.satelliteResources[t.culture]=o;break;case"icu":n.icu=o;break;case"symbols":n.wasmSymbols=o;break;case"vfs":n.vfs={},n.vfs[t.virtualPath]=o;break;case"dotnetwasm":n.wasmNative=o;break;case"js-module-threads":n.jsModuleWorker=o;break;case"js-module-globalization":n.jsModuleGlobalization=o;break;case"js-module-runtime":n.jsModuleRuntime=o;break;case"js-module-native":n.jsModuleNative=o;break;case"js-module-dotnet":break;default:throw new Error(`Unexpected behavior ${t.behavior} of asset ${t.name}`)}Ce(e.resources,n)}}void 0===e.debugLevel&&"Debug"===Oe&&(e.debugLevel=-1),void 0===e.cachedResourcesPurgeDelay&&(e.cachedResourcesPurgeDelay=1e4),e.applicationCulture&&(e.environmentVariables.LANG=`${e.applicationCulture}.UTF-8`),Fe.diagnosticTracing=qe.diagnosticTracing=!!e.diagnosticTracing,Fe.waitForDebugger=e.waitForDebugger,Fe.enablePerfMeasure=!!e.browserProfilerOptions&&globalThis.performance&&"function"==typeof globalThis.performance.measure,qe.maxParallelDownloads=e.maxParallelDownloads||qe.maxParallelDownloads,qe.enableDownloadRetry=void 0!==e.enableDownloadRetry?e.enableDownloadRetry:qe.enableDownloadRetry}let Pe=!1;async function Le(e){var t;if(Pe)return void await qe.afterConfigLoaded.promise;let o;try{if(e.configSrc||qe.config&&0!==Object.keys(qe.config).length&&(qe.config.assets||qe.config.resources)||(e.configSrc="./blazor.boot.json"),o=e.configSrc,Pe=!0,o&&(qe.diagnosticTracing&&h("mono_wasm_load_config"),await async function(e){const t=qe.locateFile(e.configSrc),o=void 0!==qe.loadBootResource?qe.loadBootResource("manifest","blazor.boot.json",t,"","manifest"):i(t);let n;n=o?"string"==typeof o?await i(B(o)):await o:await i(we(t,"manifest"));const r=await async function(e){const t=qe.config,o=await e.json();t.applicationEnvironment||(o.applicationEnvironment=e.headers.get("Blazor-Environment")||e.headers.get("DotNet-Environment")||"Production"),o.environmentVariables||(o.environmentVariables={});const n=e.headers.get("DOTNET-MODIFIABLE-ASSEMBLIES");n&&(o.environmentVariables.DOTNET_MODIFIABLE_ASSEMBLIES=n);const r=e.headers.get("ASPNETCORE-BROWSER-TOOLS");return r&&(o.environmentVariables.__ASPNETCORE_BROWSER_TOOLS=r),o}(n);function i(e){return qe.fetch_like(e,{method:"GET",credentials:"include",cache:"no-cache"})}De(qe.config,r)}(e)),Me(),await xe(null===(t=qe.config.resources)||void 0===t?void 0:t.modulesAfterConfigLoaded),await Ae("onRuntimeConfigLoaded",[qe.config]),e.onConfigLoaded)try{await e.onConfigLoaded(qe.config,Ge),Me()}catch(e){throw y("onConfigLoaded() failed",e),e}Me(),qe.afterConfigLoaded.promise_control.resolve(qe.config)}catch(t){const n=`Failed to load config file ${o} ${t} ${null==t?void 0:t.stack}`;throw qe.config=e.config=Object.assign(qe.config,{message:n,error:t,isError:!0}),at(1,new Error(n)),t}}"function"!=typeof importScripts||globalThis.onmessage||(globalThis.dotnetSidecar=!0);const Ue="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,$e="function"==typeof importScripts,Ne=$e&&"undefined"!=typeof dotnetSidecar,ze=$e&&!Ne,We="object"==typeof window||$e&&!Ue,Be=!We&&!Ue;let Fe={},Ve={},qe={},Ge={},He={},Je=!1;const Ze={},Qe={config:Ze},Ye={mono:{},binding:{},internal:He,module:Qe,loaderHelpers:qe,runtimeHelpers:Fe,globalizationHelpers:Ve,api:Ge};function Ke(e,t){if(e)return;const o="Assert failed: "+("function"==typeof t?t():t),n=new Error(o);y(o,n),Fe.nativeAbort(n)}function Xe(){return void 0!==qe.exitCode}function et(){return Fe.runtimeReady&&!Xe()}function tt(){Xe()&&Ke(!1,`.NET runtime already exited with ${qe.exitCode} ${qe.exitReason}. You can use runtime.runMain() which doesn't exit the runtime.`),Fe.runtimeReady||Ke(!1,".NET runtime didn't start yet. Please call dotnet.create() first.")}function ot(){We&&(globalThis.addEventListener("unhandledrejection",ct),globalThis.addEventListener("error",ut))}let nt,rt;function it(e){rt&&rt(e),at(e,qe.exitReason)}function st(e){nt&&nt(e||qe.exitReason),at(1,e||qe.exitReason)}function at(t,o){var n,r;const i=o&&"object"==typeof o;t=i&&"number"==typeof o.status?o.status:void 0===t?-1:t;const s=i&&"string"==typeof o.message?o.message:""+o;(o=i?o:Fe.ExitStatus?function(e,t){const o=new Fe.ExitStatus(e);return o.message=t,o.toString=()=>t,o}(t,s):new Error("Exit with code "+t+" "+s)).status=t,o.message||(o.message=s);const a=""+(o.stack||(new Error).stack);try{Object.defineProperty(o,"stack",{get:()=>a})}catch(e){}const l=!!o.silent;if(o.silent=!0,Xe())qe.diagnosticTracing&&h("mono_exit called after exit");else{try{Qe.onAbort==st&&(Qe.onAbort=nt),Qe.onExit==it&&(Qe.onExit=rt),We&&(globalThis.removeEventListener("unhandledrejection",ct),globalThis.removeEventListener("error",ut)),Fe.runtimeReady?(Fe.jiterpreter_dump_stats&&Fe.jiterpreter_dump_stats(!1),0===t&&(null===(n=qe.config)||void 0===n?void 0:n.interopCleanupOnExit)&&Fe.forceDisposeProxies(!0,!0),e&&0!==t&&(null===(r=qe.config)||void 0===r||r.dumpThreadsOnNonZeroExit)):(qe.diagnosticTracing&&h(`abort_startup, reason: ${o}`),function(e){qe.allDownloadsQueued.promise_control.reject(e),qe.allDownloadsFinished.promise_control.reject(e),qe.afterConfigLoaded.promise_control.reject(e),qe.wasmCompilePromise.promise_control.reject(e),qe.runtimeModuleLoaded.promise_control.reject(e),Fe.dotnetReady&&(Fe.dotnetReady.promise_control.reject(e),Fe.afterInstantiateWasm.promise_control.reject(e),Fe.beforePreInit.promise_control.reject(e),Fe.afterPreInit.promise_control.reject(e),Fe.afterPreRun.promise_control.reject(e),Fe.beforeOnRuntimeInitialized.promise_control.reject(e),Fe.afterOnRuntimeInitialized.promise_control.reject(e),Fe.afterPostRun.promise_control.reject(e))}(o))}catch(e){w("mono_exit A failed",e)}try{l||(function(e,t){if(0!==e&&t){const e=Fe.ExitStatus&&t instanceof Fe.ExitStatus?h:y;"string"==typeof t?e(t):(void 0===t.stack&&(t.stack=(new Error).stack+""),t.message?e(Fe.stringify_as_error_with_stack?Fe.stringify_as_error_with_stack(t.message+"\n"+t.stack):t.message+"\n"+t.stack):e(JSON.stringify(t)))}!ze&&qe.config&&(qe.config.logExitCode?qe.config.forwardConsoleLogsToWS?E("WASM EXIT "+e):b("WASM EXIT "+e):qe.config.forwardConsoleLogsToWS&&E())}(t,o),function(e){if(We&&!ze&&qe.config&&qe.config.appendElementOnExit&&document){const t=document.createElement("label");t.id="tests_done",0!==e&&(t.style.background="red"),t.innerHTML=""+e,document.body.appendChild(t)}}(t))}catch(e){w("mono_exit B failed",e)}qe.exitCode=t,qe.exitReason||(qe.exitReason=o),!ze&&Fe.runtimeReady&&Qe.runtimeKeepalivePop()}if(qe.config&&qe.config.asyncFlushOnExit&&0===t)throw(async()=>{try{await async function(){try{const e=await import(/*! webpackIgnore: true */"process"),t=e=>new Promise(((t,o)=>{e.on("error",o),e.end("","utf8",t)})),o=t(e.stderr),n=t(e.stdout);let r;const i=new Promise((e=>{r=setTimeout((()=>e("timeout")),1e3)}));await Promise.race([Promise.all([n,o]),i]),clearTimeout(r)}catch(e){y(`flushing std* streams failed: ${e}`)}}()}finally{lt(t,o)}})(),o;lt(t,o)}function lt(e,t){if(Fe.runtimeReady&&Fe.nativeExit)try{Fe.nativeExit(e)}catch(e){!Fe.ExitStatus||e instanceof Fe.ExitStatus||w("set_exit_code_and_quit_now failed: "+e.toString())}if(0!==e||!We)throw Ue&&He.process?He.process.exit(e):Fe.quit&&Fe.quit(e,t),t}function ct(e){dt(e,e.reason,"rejection")}function ut(e){dt(e,e.error,"error")}function dt(e,t,o){e.preventDefault();try{t||(t=new Error("Unhandled "+o)),void 0===t.stack&&(t.stack=(new Error).stack),t.stack=t.stack+"",t.silent||(y("Unhandled error:",t),at(1,t))}catch(e){}}!function(e){if(Je)throw new Error("Loader module already loaded");Je=!0,Fe=e.runtimeHelpers,Ve=e.globalizationHelpers,qe=e.loaderHelpers,Ge=e.api,He=e.internal,Object.assign(Ge,{INTERNAL:He,invokeLibraryInitializers:Ae}),Object.assign(e.module,{config:De(Ze,{environmentVariables:{}})});const n={mono_wasm_bindings_is_ready:!1,config:e.module.config,diagnosticTracing:!1,nativeAbort:e=>{throw e||new Error("abort")},nativeExit:e=>{throw new Error("exit:"+e)}},a={gitHash:"990ebf52fc408ca45929fd176d2740675a67fab8",config:e.module.config,diagnosticTracing:!1,maxParallelDownloads:16,enableDownloadRetry:!0,_loaded_files:[],loadedFiles:[],loadedAssemblies:[],libraryInitializers:[],workerNextNumber:1,actual_downloaded_assets_count:0,actual_instantiated_assets_count:0,expected_downloaded_assets_count:0,expected_instantiated_assets_count:0,afterConfigLoaded:r(),allDownloadsQueued:r(),allDownloadsFinished:r(),wasmCompilePromise:r(),runtimeModuleLoaded:r(),loadingWorkers:r(),is_exited:Xe,is_runtime_running:et,assert_runtime_running:tt,mono_exit:at,createPromiseController:r,getPromiseController:i,assertIsControllablePromise:s,mono_download_assets:ue,resolve_single_asset_path:le,setup_proxy_console:_,set_thread_prefix:g,logDownloadStatsToConsole:C,purgeUnusedCacheEntriesAsync:I,installUnhandledErrorHandler:ot,retrieve_asset_download:ge,invokeLibraryInitializers:Ae,exceptions:t,simd:o};Object.assign(Fe,n),Object.assign(qe,a)}(Ye);let ft,mt,gt=!1,ht=!1;async function pt(e){if(!ht){if(ht=!0,We&&qe.config.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&_("main",globalThis.console,globalThis.location.origin),Qe||Ke(!1,"Null moduleConfig"),qe.config||Ke(!1,"Null moduleConfig.config"),"function"==typeof e){const t=e(Ye.api);if(t.ready)throw new Error("Module.ready couldn't be redefined.");Object.assign(Qe,t),ke(Qe,t)}else{if("object"!=typeof e)throw new Error("Can't use moduleFactory callback of createDotnetRuntime function.");ke(Qe,e)}await async function(e){if(Ue){const e=await import(/*! webpackIgnore: true */"process"),t=14;if(e.versions.node.split(".")[0]0&&(qe.modulesUniqueQuery=t.substring(o)),qe.scriptUrl=t.replace(/\\/g,"/").replace(/[?#].*/,""),qe.scriptDirectory=(n=qe.scriptUrl).slice(0,n.lastIndexOf("/"))+"/",qe.locateFile=e=>"URL"in globalThis&&globalThis.URL!==z?new URL(e,qe.scriptDirectory).toString():q(e)?e:qe.scriptDirectory+e,qe.fetch_like=W,qe.out=console.log,qe.err=console.error,qe.onDownloadResourceProgress=e.onDownloadResourceProgress,We&&globalThis.navigator){const e=globalThis.navigator,t=e.userAgentData&&e.userAgentData.brands;t&&t.length>0?qe.isChromium=t.some((e=>"Google Chrome"===e.brand||"Microsoft Edge"===e.brand||"Chromium"===e.brand)):e.userAgent&&(qe.isChromium=e.userAgent.includes("Chrome"),qe.isFirefox=e.userAgent.includes("Firefox"))}He.require=Ue?await import(/*! webpackIgnore: true */"module").then((e=>e.createRequire(/*! webpackIgnore: true */import.meta.url))):Promise.resolve((()=>{throw new Error("require not supported")})),void 0===globalThis.URL&&(globalThis.URL=z)}(Qe)}}async function bt(e){return await pt(e),nt=Qe.onAbort,rt=Qe.onExit,Qe.onAbort=st,Qe.onExit=it,Qe.ENVIRONMENT_IS_PTHREAD?async function(){(function(){const e=new MessageChannel,t=e.port1,o=e.port2;t.addEventListener("message",(e=>{var n,r;n=JSON.parse(e.data.config),r=JSON.parse(e.data.monoThreadInfo),gt?qe.diagnosticTracing&&h("mono config already received"):(De(qe.config,n),Fe.monoThreadInfo=r,Me(),qe.diagnosticTracing&&h("mono config received"),gt=!0,qe.afterConfigLoaded.promise_control.resolve(qe.config),We&&n.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&qe.setup_proxy_console("worker-idle",console,globalThis.location.origin)),t.close(),o.close()}),{once:!0}),t.start(),self.postMessage({[a]:{monoCmd:"preload",port:o}},[o])})(),await qe.afterConfigLoaded.promise,function(){const e=qe.config;e.assets||Ke(!1,"config.assets must be defined");for(const t of e.assets)ae(t),re[t.behavior]&&Z.push(t)}(),setTimeout((async()=>{try{await ue()}catch(e){at(1,e)}}),0);const e=wt(),t=await Promise.all(e);return await yt(t),Qe}():async function(){var e;await Le(Qe),fe();const t=wt();await P(),async function(){try{const e=le("dotnetwasm");await he(e),e&&e.pendingDownloadInternal&&e.pendingDownloadInternal.response||Ke(!1,"Can't load dotnet.native.wasm");const t=await e.pendingDownloadInternal.response,o=t.headers&&t.headers.get?t.headers.get("Content-Type"):void 0;let n;if("function"==typeof WebAssembly.compileStreaming&&"application/wasm"===o)n=await WebAssembly.compileStreaming(t);else{We&&"application/wasm"!==o&&w('WebAssembly resource does not have the expected content type "application/wasm", so falling back to slower ArrayBuffer instantiation.');const e=await t.arrayBuffer();qe.diagnosticTracing&&h("instantiate_wasm_module buffered"),n=Be?await Promise.resolve(new WebAssembly.Module(e)):await WebAssembly.compile(e)}e.pendingDownloadInternal=null,e.pendingDownload=null,e.buffer=null,e.moduleExports=null,qe.wasmCompilePromise.promise_control.resolve(n)}catch(e){qe.wasmCompilePromise.promise_control.reject(e)}}(),setTimeout((async()=>{try{$(),await ue()}catch(e){at(1,e)}}),0);const o=await Promise.all(t);return await yt(o),await Fe.dotnetReady.promise,await xe(null===(e=qe.config.resources)||void 0===e?void 0:e.modulesAfterRuntimeReady),await Ae("onRuntimeReady",[Ye.api]),Ge}()}function wt(){const e=le("js-module-runtime"),t=le("js-module-native");return ft&&mt||("object"==typeof e.moduleExports?ft=e.moduleExports:(qe.diagnosticTracing&&h(`Attempting to import '${e.resolvedUrl}' for ${e.name}`),ft=import(/*! webpackIgnore: true */e.resolvedUrl)),"object"==typeof t.moduleExports?mt=t.moduleExports:(qe.diagnosticTracing&&h(`Attempting to import '${t.resolvedUrl}' for ${t.name}`),mt=import(/*! webpackIgnore: true */t.resolvedUrl))),[ft,mt]}async function yt(e){const{initializeExports:t,initializeReplacements:o,configureRuntimeStartup:n,configureEmscriptenStartup:r,configureWorkerStartup:i,setRuntimeGlobals:s,passEmscriptenInternals:a}=e[0],{default:l}=e[1];if(s(Ye),t(Ye),"hybrid"===qe.config.globalizationMode){const e=await async function(){let e;const t=le("js-module-globalization");return"object"==typeof t.moduleExports?e=t.moduleExports:(h(`Attempting to import '${t.resolvedUrl}' for ${t.name}`),e=import(/*! webpackIgnore: true */t.resolvedUrl)),await e}(),{initHybrid:t}=e;t(Ve,Fe)}await n(Qe),qe.runtimeModuleLoaded.promise_control.resolve(),l((e=>(Object.assign(Qe,{ready:e.ready,__dotnet_runtime:{initializeReplacements:o,configureEmscriptenStartup:r,configureWorkerStartup:i,passEmscriptenInternals:a}}),Qe))).catch((e=>{if(e.message&&e.message.toLowerCase().includes("out of memory"))throw new Error(".NET runtime has failed to start, because too much memory was requested. Please decrease the memory by adjusting EmccMaximumHeapSize. See also https://aka.ms/dotnet-wasm-features");throw e}))}const vt=new class{withModuleConfig(e){try{return ke(Qe,e),this}catch(e){throw at(1,e),e}}withOnConfigLoaded(e){try{return ke(Qe,{onConfigLoaded:e}),this}catch(e){throw at(1,e),e}}withConsoleForwarding(){try{return De(Ze,{forwardConsoleLogsToWS:!0}),this}catch(e){throw at(1,e),e}}withExitOnUnhandledError(){try{return De(Ze,{exitOnUnhandledError:!0}),ot(),this}catch(e){throw at(1,e),e}}withAsyncFlushOnExit(){try{return De(Ze,{asyncFlushOnExit:!0}),this}catch(e){throw at(1,e),e}}withExitCodeLogging(){try{return De(Ze,{logExitCode:!0}),this}catch(e){throw at(1,e),e}}withElementOnExit(){try{return De(Ze,{appendElementOnExit:!0}),this}catch(e){throw at(1,e),e}}withInteropCleanupOnExit(){try{return De(Ze,{interopCleanupOnExit:!0}),this}catch(e){throw at(1,e),e}}withDumpThreadsOnNonZeroExit(){try{return De(Ze,{dumpThreadsOnNonZeroExit:!0}),this}catch(e){throw at(1,e),e}}withWaitingForDebugger(e){try{return De(Ze,{waitForDebugger:e}),this}catch(e){throw at(1,e),e}}withInterpreterPgo(e,t){try{return De(Ze,{interpreterPgo:e,interpreterPgoSaveDelay:t}),Ze.runtimeOptions?Ze.runtimeOptions.push("--interp-pgo-recording"):Ze.runtimeOptions=["--interp-pgo-recording"],this}catch(e){throw at(1,e),e}}withConfig(e){try{return De(Ze,e),this}catch(e){throw at(1,e),e}}withConfigSrc(e){try{return e&&"string"==typeof e||Ke(!1,"must be file path or URL"),ke(Qe,{configSrc:e}),this}catch(e){throw at(1,e),e}}withVirtualWorkingDirectory(e){try{return e&&"string"==typeof e||Ke(!1,"must be directory path"),De(Ze,{virtualWorkingDirectory:e}),this}catch(e){throw at(1,e),e}}withEnvironmentVariable(e,t){try{const o={};return o[e]=t,De(Ze,{environmentVariables:o}),this}catch(e){throw at(1,e),e}}withEnvironmentVariables(e){try{return e&&"object"==typeof e||Ke(!1,"must be dictionary object"),De(Ze,{environmentVariables:e}),this}catch(e){throw at(1,e),e}}withDiagnosticTracing(e){try{return"boolean"!=typeof e&&Ke(!1,"must be boolean"),De(Ze,{diagnosticTracing:e}),this}catch(e){throw at(1,e),e}}withDebugging(e){try{return null!=e&&"number"==typeof e||Ke(!1,"must be number"),De(Ze,{debugLevel:e}),this}catch(e){throw at(1,e),e}}withApplicationArguments(...e){try{return e&&Array.isArray(e)||Ke(!1,"must be array of strings"),De(Ze,{applicationArguments:e}),this}catch(e){throw at(1,e),e}}withRuntimeOptions(e){try{return e&&Array.isArray(e)||Ke(!1,"must be array of strings"),Ze.runtimeOptions?Ze.runtimeOptions.push(...e):Ze.runtimeOptions=e,this}catch(e){throw at(1,e),e}}withMainAssembly(e){try{return De(Ze,{mainAssemblyName:e}),this}catch(e){throw at(1,e),e}}withApplicationArgumentsFromQuery(){try{if(!globalThis.window)throw new Error("Missing window to the query parameters from");if(void 0===globalThis.URLSearchParams)throw new Error("URLSearchParams is supported");const e=new URLSearchParams(globalThis.window.location.search).getAll("arg");return this.withApplicationArguments(...e)}catch(e){throw at(1,e),e}}withApplicationEnvironment(e){try{return De(Ze,{applicationEnvironment:e}),this}catch(e){throw at(1,e),e}}withApplicationCulture(e){try{return De(Ze,{applicationCulture:e}),this}catch(e){throw at(1,e),e}}withResourceLoader(e){try{return qe.loadBootResource=e,this}catch(e){throw at(1,e),e}}async download(){try{await async function(){pt(Qe),await Le(Qe),fe(),await P(),$(),ue(),await qe.allDownloadsFinished.promise}()}catch(e){throw at(1,e),e}}async create(){try{return this.instance||(this.instance=await async function(){return await bt(Qe),Ye.api}()),this.instance}catch(e){throw at(1,e),e}}async run(){try{return Qe.config||Ke(!1,"Null moduleConfig.config"),this.instance||await this.create(),this.instance.runMainAndExit()}catch(e){throw at(1,e),e}}},_t=at,Et=bt;Be||"function"==typeof globalThis.URL||Ke(!1,"This browser/engine doesn't support URL API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"),"function"!=typeof globalThis.BigInt64Array&&Ke(!1,"This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features");export{Et as default,vt as dotnet,_t as exit}; +//# sourceMappingURL=dotnet.js.map diff --git a/_framework/dotnet.js.br b/_framework/dotnet.js.br new file mode 100644 index 00000000..507d6f13 Binary files /dev/null and b/_framework/dotnet.js.br differ diff --git a/_framework/dotnet.js.gz b/_framework/dotnet.js.gz new file mode 100644 index 00000000..c5a2983d Binary files /dev/null and b/_framework/dotnet.js.gz differ diff --git a/_framework/dotnet.native.gfgmczja9o.js b/_framework/dotnet.native.gfgmczja9o.js new file mode 100644 index 00000000..e0cd79dd --- /dev/null +++ b/_framework/dotnet.native.gfgmczja9o.js @@ -0,0 +1,16 @@ + +var createDotnetRuntime = (() => { + var _scriptDir = import.meta.url; + + return ( +async function(moduleArg = {}) { + +var Module=moduleArg;var readyPromiseResolve,readyPromiseReject;Module["ready"]=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});if(_nativeModuleLoaded)throw new Error("Native module already loaded");_nativeModuleLoaded=true;createDotnetRuntime=Module=moduleArg(Module);var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram="./this.program";var quit_=(status,toThrow)=>{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_NODE){const{createRequire:createRequire}=await import("module");var require=createRequire(import.meta.url);var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=require("url").fileURLToPath(new URL("./",import.meta.url))}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_SHELL){if(typeof read!="undefined"){read_=read}readBinary=f=>{if(typeof readbuffer=="function"){return new Uint8Array(readbuffer(f))}let data=read(f,"binary");assert(typeof data=="object");return data};readAsync=(f,onload,onerror)=>{setTimeout(()=>onload(readBinary(f)))};if(typeof clearTimeout=="undefined"){globalThis.clearTimeout=id=>{}}if(typeof setTimeout=="undefined"){globalThis.setTimeout=f=>typeof f=="function"?f():abort()}if(typeof scriptArgs!="undefined"){arguments_=scriptArgs}else if(typeof arguments!="undefined"){arguments_=arguments}if(typeof quit=="function"){quit_=(status,toThrow)=>{setTimeout(()=>{if(!(toThrow instanceof ExitStatus)){let toLog=toThrow;if(toThrow&&typeof toThrow=="object"&&toThrow.stack){toLog=[toThrow,toThrow.stack]}err(`exiting due to exception: ${toLog}`)}quit(status)});throw toThrow}}if(typeof print!="undefined"){if(typeof console=="undefined")console={};console.log=print;console.warn=console.error=typeof printErr!="undefined"?printErr:print}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptDir){scriptDirectory=_scriptDir}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(typeof atob=="undefined"){if(typeof global!="undefined"&&typeof globalThis=="undefined"){globalThis=global}globalThis.atob=function(input){var keyStr="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");do{enc1=keyStr.indexOf(input.charAt(i++));enc2=keyStr.indexOf(input.charAt(i++));enc3=keyStr.indexOf(input.charAt(i++));enc4=keyStr.indexOf(input.charAt(i++));chr1=enc1<<2|enc2>>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!==64){output=output+String.fromCharCode(chr2)}if(enc4!==64){output=output+String.fromCharCode(chr3)}}while(ifilename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");var wasmBinaryFile;if(Module["locateFile"]){wasmBinaryFile="dotnet.native.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}}else{if(ENVIRONMENT_IS_SHELL)wasmBinaryFile="dotnet.native.wasm";else wasmBinaryFile=new URL("dotnet.native.wasm",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw`failed to load wasm binary file at '${binaryFile}'`}return response["arrayBuffer"]()}).catch(()=>getBinarySync(binaryFile))}else if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;Module["wasmExports"]=wasmExports;wasmMemory=wasmExports["memory"];updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult).catch(readyPromiseReject);return{}}function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var getCppExceptionTag=()=>wasmExports["__cpp_exception"];var getCppExceptionThrownObjectFromWebAssemblyException=ex=>{var unwind_header=ex.getArg(getCppExceptionTag(),0);return ___thrown_object_from_unwind_exception(unwind_header)};var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):undefined;var UTF8ArrayToString=(heapOrArray,idx,maxBytesToRead)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var getExceptionMessageCommon=ptr=>withStackSave(()=>{var type_addr_addr=stackAlloc(4);var message_addr_addr=stackAlloc(4);___get_exception_message(ptr,type_addr_addr,message_addr_addr);var type_addr=HEAPU32[type_addr_addr>>2];var message_addr=HEAPU32[message_addr_addr>>2];var type=UTF8ToString(type_addr);_free(type_addr);var message;if(message_addr){message=UTF8ToString(message_addr);_free(message_addr)}return[type,message]});var getExceptionMessage=ex=>{var ptr=getCppExceptionThrownObjectFromWebAssemblyException(ex);return getExceptionMessageCommon(ptr)};Module["getExceptionMessage"]=getExceptionMessage;function getValue(ptr,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":return HEAP8[ptr];case"i8":return HEAP8[ptr];case"i16":return HEAP16[ptr>>1];case"i32":return HEAP32[ptr>>2];case"i64":return HEAP64[ptr>>3];case"float":return HEAPF32[ptr>>2];case"double":return HEAPF64[ptr>>3];case"*":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=Module["noExitRuntime"]||false;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;break;case"i8":HEAP8[ptr]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":HEAP64[ptr>>3]=BigInt(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var ___assert_fail=(condition,filename,line,func)=>{abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"])};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var zeroMemory=(address,size)=>{HEAPU8.fill(0,address,address+size);return address};var alignMemory=(size,alignment)=>Math.ceil(size/alignment)*alignment;var mmapAlloc=size=>{size=alignMemory(size,65536);var ptr=_emscripten_builtin_memalign(65536,size);if(!ptr)return 0;return zeroMemory(ptr,size)};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key of Object.keys(node.contents)){entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,arrayBuffer=>{onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:class{constructor(errno){this.name="ErrnoError";this.errno=errno}},genericErrors:{},filesystems:null,syncFSRequests:0,FSStream:class{constructor(){this.shared={}}get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev;this.readMode=292|73;this.writeMode=146}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;iFS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""});FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init(input,output,error){FS.init.initialized=true;Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;_fflush(0);for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){var stat=func(path);HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_faccessat(dirfd,path,amode,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(amode&~7){return-28}var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;if(!node){return-44}var perms="";if(amode&4)perms+="r";if(amode&2)perms+="w";if(amode&1)perms+="x";if(perms&&FS.nodePermissions(node,perms)){return-2}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var ___syscall_fadvise64=(fd,offset,len,advice)=>0;function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 12:{var arg=SYSCALLS.getp();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return SYSCALLS.doStat(FS.stat,stream.path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_statfs64(path,size,buf){try{path=SYSCALLS.getStr(path);HEAP32[buf+4>>2]=4096;HEAP32[buf+40>>2]=4096;HEAP32[buf+8>>2]=1e6;HEAP32[buf+12>>2]=5e5;HEAP32[buf+16>>2]=5e5;HEAP32[buf+20>>2]=FS.nextInode;HEAP32[buf+24>>2]=1e6;HEAP32[buf+28>>2]=42;HEAP32[buf+44>>2]=2;HEAP32[buf+36>>2]=255;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstatfs64(fd,size,buf){try{var stream=SYSCALLS.getStreamFromFD(fd);return ___syscall_statfs64(0,size,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var MAX_INT53=9007199254740992;var MIN_INT53=-9007199254740992;var bigintToI53Checked=num=>numMAX_INT53?NaN:Number(num);function ___syscall_ftruncate64(fd,length){length=bigintToI53Checked(length);try{if(isNaN(length))return 61;FS.ftruncate(fd,length);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);function ___syscall_getcwd(buf,size){try{if(size===0)return-28;var cwd=FS.cwd();var cwdLengthInBytes=lengthBytesUTF8(cwd)+1;if(size>3]=BigInt(id);HEAP64[dirp+pos+8>>3]=BigInt((idx+1)*struct_size);HEAP16[dirp+pos+16>>1]=280;HEAP8[dirp+pos+18]=type;stringToUTF8(name,dirp+pos+19,256);pos+=struct_size;idx+=1}FS.llseek(stream,idx*struct_size,0);return pos}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=SYSCALLS.getp();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=SYSCALLS.getp();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.getp();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=SYSCALLS.getp();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.lstat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.doStat(nofollow?FS.lstat:FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_readlinkat(dirfd,path,buf,bufsize){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(bufsize<=0)return-28;var ret=FS.readlink(path);var len=Math.min(bufsize,lengthBytesUTF8(ret));var endChar=HEAP8[buf+len];stringToUTF8(ret,buf,bufsize+1);HEAP8[buf+len]=endChar;return len}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){try{path=SYSCALLS.getStr(path);return SYSCALLS.doStat(FS.stat,path,buf)}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}function __mmap_js(len,prot,flags,fd,offset,allocated,addr){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);var res=FS.mmap(stream,len,offset,prot,flags);var ptr=res.ptr;HEAP32[allocated>>2]=res.allocated;HEAPU32[addr>>2]=ptr;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function __munmap_js(addr,len,prot,flags,fd,offset){offset=bigintToI53Checked(offset);try{var stream=SYSCALLS.getStreamFromFD(fd);if(prot&2){SYSCALLS.doMsync(addr,stream,len,flags,offset)}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);function extractZone(date){var match=date.toTimeString().match(/\(([A-Za-z ]+)\)$/);return match?match[1]:"GMT"}var winterName=extractZone(winter);var summerName=extractZone(summer);if(summerOffset{abort("")};var _emscripten_date_now=()=>Date.now();var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){Module["onExit"]?.(code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;if(!keepRuntimeAlive()){exitRuntime()}_proc_exit(status)};var _exit=exitJS;var __emscripten_runtime_keepalive_clear=()=>{noExitRuntime=false;runtimeKeepaliveCounter=0};var _emscripten_force_exit=status=>{__emscripten_runtime_keepalive_clear();_exit(status)};Module["_emscripten_force_exit"]=_emscripten_force_exit;var getHeapMax=()=>2147483648;var _emscripten_get_heap_max=()=>getHeapMax();var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var _emscripten_get_now_res=()=>{if(ENVIRONMENT_IS_NODE){return 1}return 1e3};var growMemory=size=>{var b=wasmMemory.buffer;var pages=(size-b.byteLength+65535)/65536;try{wasmMemory.grow(pages);updateMemoryViews();return 1}catch(e){}};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;var maxHeapSize=getHeapMax();if(requestedSize>maxHeapSize){return false}var alignUp=(x,multiple)=>x+(multiple-x%multiple)%multiple;for(var cutDown=1;cutDown<=4;cutDown*=2){var overGrownHeapSize=oldSize*(1+.2/cutDown);overGrownHeapSize=Math.min(overGrownHeapSize,requestedSize+100663296);var newSize=Math.min(maxHeapSize,alignUp(Math.max(requestedSize,overGrownHeapSize),65536));var replacement=growMemory(newSize);if(replacement){return true}}return false};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_read(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doReadv(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var DOTNET={setup:function setup(emscriptenBuildOptions){const modulePThread={};const ENVIRONMENT_IS_PTHREAD=false;const dotnet_replacements={fetch:globalThis.fetch,ENVIRONMENT_IS_WORKER:ENVIRONMENT_IS_WORKER,require:require,modulePThread:modulePThread,scriptDirectory:scriptDirectory};ENVIRONMENT_IS_WORKER=dotnet_replacements.ENVIRONMENT_IS_WORKER;Module.__dotnet_runtime.initializeReplacements(dotnet_replacements);noExitRuntime=dotnet_replacements.noExitRuntime;fetch=dotnet_replacements.fetch;require=dotnet_replacements.require;_scriptDir=__dirname=scriptDirectory=dotnet_replacements.scriptDirectory;Module.__dotnet_runtime.passEmscriptenInternals({isPThread:ENVIRONMENT_IS_PTHREAD,quit_:quit_,ExitStatus:ExitStatus,updateMemoryViews:updateMemoryViews,getMemory:()=>wasmMemory,getWasmIndirectFunctionTable:()=>wasmTable},emscriptenBuildOptions);Module.__dotnet_runtime.configureEmscriptenStartup(Module)}};function _mono_interp_flush_jitcall_queue(){return{runtime_idx:12}}function _mono_interp_invoke_wasm_jit_call_trampoline(){return{runtime_idx:11}}function _mono_interp_jit_wasm_entry_trampoline(){return{runtime_idx:9}}function _mono_interp_jit_wasm_jit_call_trampoline(){return{runtime_idx:10}}function _mono_interp_record_interp_entry(){return{runtime_idx:8}}function _mono_interp_tier_prepare_jiterpreter(){return{runtime_idx:7}}function _mono_jiterp_free_method_data_js(){return{runtime_idx:13}}function _mono_wasm_bind_js_import_ST(){return{runtime_idx:22}}function _mono_wasm_browser_entropy(){return{runtime_idx:19}}function _mono_wasm_cancel_promise(){return{runtime_idx:26}}function _mono_wasm_change_case(){return{runtime_idx:27}}function _mono_wasm_compare_string(){return{runtime_idx:28}}function _mono_wasm_console_clear(){return{runtime_idx:20}}function _mono_wasm_ends_with(){return{runtime_idx:30}}function _mono_wasm_get_calendar_info(){return{runtime_idx:32}}function _mono_wasm_get_culture_info(){return{runtime_idx:33}}function _mono_wasm_get_first_day_of_week(){return{runtime_idx:34}}function _mono_wasm_get_first_week_of_year(){return{runtime_idx:35}}function _mono_wasm_get_locale_info(){return{runtime_idx:36}}function _mono_wasm_index_of(){return{runtime_idx:31}}function _mono_wasm_invoke_js_function(){return{runtime_idx:23}}function _mono_wasm_invoke_jsimport_ST(){return{runtime_idx:24}}function _mono_wasm_release_cs_owned_object(){return{runtime_idx:21}}function _mono_wasm_resolve_or_reject_promise(){return{runtime_idx:25}}function _mono_wasm_schedule_timer(){return{runtime_idx:0}}function _mono_wasm_set_entrypoint_breakpoint(){return{runtime_idx:17}}function _mono_wasm_starts_with(){return{runtime_idx:29}}function _mono_wasm_trace_logger(){return{runtime_idx:16}}function _schedule_background_exec(){return{runtime_idx:6}}var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var addDays=(date,days)=>{var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var _strftime=(s,maxsize,format,tm)=>{var tm_zone=HEAPU32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":date=>WEEKDAYS[date.tm_wday].substring(0,3),"%A":date=>WEEKDAYS[date.tm_wday],"%b":date=>MONTHS[date.tm_mon].substring(0,3),"%B":date=>MONTHS[date.tm_mon],"%C":date=>{var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":date=>leadingNulls(date.tm_mday,2),"%e":date=>leadingSomething(date.tm_mday,2," "),"%g":date=>getWeekBasedYear(date).toString().substring(2),"%G":getWeekBasedYear,"%H":date=>leadingNulls(date.tm_hour,2),"%I":date=>{var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":date=>leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3),"%m":date=>leadingNulls(date.tm_mon+1,2),"%M":date=>leadingNulls(date.tm_min,2),"%n":()=>"\n","%p":date=>{if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":date=>leadingNulls(date.tm_sec,2),"%t":()=>"\t","%u":date=>date.tm_wday||7,"%U":date=>{var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":date=>{var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":date=>date.tm_wday,"%W":date=>{var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":date=>(date.tm_year+1900).toString().substring(2),"%Y":date=>date.tm_year+1900,"%z":date=>{var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":date=>date.tm_zone,"%%":()=>"%"};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1};var getCFunc=ident=>{var func=Module["_"+ident];return func};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={"string":str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},"array":arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType==="string"){return UTF8ToString(ret)}if(returnType==="boolean")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type==="number"||type==="boolean");var numericRet=returnType!=="string";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var uleb128Encode=(n,target)=>{if(n<128){target.push(n)}else{target.push(n%128|128,n>>7)}};var sigToWasmTypes=sig=>{var typeNames={"i":"i32","j":"i64","f":"f32","d":"f64","e":"externref","p":"i32"};var type={parameters:[],results:sig[0]=="v"?[]:[typeNames[sig[0]]]};for(var i=1;i{var sigRet=sig.slice(0,1);var sigParam=sig.slice(1);var typeCodes={"i":127,"p":127,"j":126,"f":125,"d":124,"e":111};target.push(96);uleb128Encode(sigParam.length,target);for(var i=0;i{if(typeof WebAssembly.Function=="function"){return new WebAssembly.Function(sigToWasmTypes(sig),func)}var typeSectionBody=[1];generateFuncType(sig,typeSectionBody);var bytes=[0,97,115,109,1,0,0,0,1];uleb128Encode(typeSectionBody.length,bytes);bytes.push(...typeSectionBody);bytes.push(2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0);var module=new WebAssembly.Module(new Uint8Array(bytes));var instance=new WebAssembly.Instance(module,{"e":{"f":func}});var wrappedFunc=instance.exports["f"];return wrappedFunc};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var updateTableMap=(offset,count)=>{if(functionsInTableMap){for(var i=offset;i{if(!functionsInTableMap){functionsInTableMap=new WeakMap;updateTableMap(0,wasmTable.length)}return functionsInTableMap.get(func)||0};var freeTableIndexes=[];var getEmptyTableSlot=()=>{if(freeTableIndexes.length){return freeTableIndexes.pop()}try{wasmTable.grow(1)}catch(err){if(!(err instanceof RangeError)){throw err}throw"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH."}return wasmTable.length-1};var setWasmTableEntry=(idx,func)=>{wasmTable.set(idx,func);wasmTableMirror[idx]=wasmTable.get(idx)};var addFunction=(func,sig)=>{var rtn=getFunctionAddress(func);if(rtn){return rtn}var ret=getEmptyTableSlot();try{setWasmTableEntry(ret,func)}catch(err){if(!(err instanceof TypeError)){throw err}var wrapped=convertJsFunctionToWasm(func,sig);setWasmTableEntry(ret,wrapped)}functionsInTableMap.set(func,ret);return ret};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(runtimeExited){return}if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(runtimeExited||ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};var safeSetTimeout=(func,timeout)=>{runtimeKeepalivePush();return setTimeout(()=>{runtimeKeepalivePop();callUserCallback(func)},timeout)};FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;DOTNET.setup({wasmEnableSIMD:true,wasmEnableEH:true,enableAotProfiler:false,enableBrowserProfiler:false,enableLogProfiler:false,runAOTCompilation:false,wasmEnableThreads:false,gitHash:"990ebf52fc408ca45929fd176d2740675a67fab8"});var wasmImports={__assert_fail:___assert_fail,__syscall_faccessat:___syscall_faccessat,__syscall_fadvise64:___syscall_fadvise64,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_fstatfs64:___syscall_fstatfs64,__syscall_ftruncate64:___syscall_ftruncate64,__syscall_getcwd:___syscall_getcwd,__syscall_getdents64:___syscall_getdents64,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_readlinkat:___syscall_readlinkat,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,_localtime_js:__localtime_js,_mmap_js:__mmap_js,_munmap_js:__munmap_js,_tzset_js:__tzset_js,abort:_abort,emscripten_date_now:_emscripten_date_now,emscripten_force_exit:_emscripten_force_exit,emscripten_get_heap_max:_emscripten_get_heap_max,emscripten_get_now:_emscripten_get_now,emscripten_get_now_res:_emscripten_get_now_res,emscripten_resize_heap:_emscripten_resize_heap,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_pread:_fd_pread,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,mono_interp_flush_jitcall_queue:_mono_interp_flush_jitcall_queue,mono_interp_invoke_wasm_jit_call_trampoline:_mono_interp_invoke_wasm_jit_call_trampoline,mono_interp_jit_wasm_entry_trampoline:_mono_interp_jit_wasm_entry_trampoline,mono_interp_jit_wasm_jit_call_trampoline:_mono_interp_jit_wasm_jit_call_trampoline,mono_interp_record_interp_entry:_mono_interp_record_interp_entry,mono_interp_tier_prepare_jiterpreter:_mono_interp_tier_prepare_jiterpreter,mono_jiterp_free_method_data_js:_mono_jiterp_free_method_data_js,mono_wasm_bind_js_import_ST:_mono_wasm_bind_js_import_ST,mono_wasm_browser_entropy:_mono_wasm_browser_entropy,mono_wasm_cancel_promise:_mono_wasm_cancel_promise,mono_wasm_change_case:_mono_wasm_change_case,mono_wasm_compare_string:_mono_wasm_compare_string,mono_wasm_console_clear:_mono_wasm_console_clear,mono_wasm_ends_with:_mono_wasm_ends_with,mono_wasm_get_calendar_info:_mono_wasm_get_calendar_info,mono_wasm_get_culture_info:_mono_wasm_get_culture_info,mono_wasm_get_first_day_of_week:_mono_wasm_get_first_day_of_week,mono_wasm_get_first_week_of_year:_mono_wasm_get_first_week_of_year,mono_wasm_get_locale_info:_mono_wasm_get_locale_info,mono_wasm_index_of:_mono_wasm_index_of,mono_wasm_invoke_js_function:_mono_wasm_invoke_js_function,mono_wasm_invoke_jsimport_ST:_mono_wasm_invoke_jsimport_ST,mono_wasm_release_cs_owned_object:_mono_wasm_release_cs_owned_object,mono_wasm_resolve_or_reject_promise:_mono_wasm_resolve_or_reject_promise,mono_wasm_schedule_timer:_mono_wasm_schedule_timer,mono_wasm_set_entrypoint_breakpoint:_mono_wasm_set_entrypoint_breakpoint,mono_wasm_starts_with:_mono_wasm_starts_with,mono_wasm_trace_logger:_mono_wasm_trace_logger,schedule_background_exec:_schedule_background_exec,strftime:_strftime};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["__wasm_call_ctors"])();var _mono_wasm_register_root=Module["_mono_wasm_register_root"]=(a0,a1,a2)=>(_mono_wasm_register_root=Module["_mono_wasm_register_root"]=wasmExports["mono_wasm_register_root"])(a0,a1,a2);var _mono_wasm_deregister_root=Module["_mono_wasm_deregister_root"]=a0=>(_mono_wasm_deregister_root=Module["_mono_wasm_deregister_root"]=wasmExports["mono_wasm_deregister_root"])(a0);var _mono_wasm_add_assembly=Module["_mono_wasm_add_assembly"]=(a0,a1,a2)=>(_mono_wasm_add_assembly=Module["_mono_wasm_add_assembly"]=wasmExports["mono_wasm_add_assembly"])(a0,a1,a2);var _mono_wasm_add_satellite_assembly=Module["_mono_wasm_add_satellite_assembly"]=(a0,a1,a2,a3)=>(_mono_wasm_add_satellite_assembly=Module["_mono_wasm_add_satellite_assembly"]=wasmExports["mono_wasm_add_satellite_assembly"])(a0,a1,a2,a3);var _malloc=Module["_malloc"]=a0=>(_malloc=Module["_malloc"]=wasmExports["malloc"])(a0);var _mono_wasm_setenv=Module["_mono_wasm_setenv"]=(a0,a1)=>(_mono_wasm_setenv=Module["_mono_wasm_setenv"]=wasmExports["mono_wasm_setenv"])(a0,a1);var _mono_wasm_getenv=Module["_mono_wasm_getenv"]=a0=>(_mono_wasm_getenv=Module["_mono_wasm_getenv"]=wasmExports["mono_wasm_getenv"])(a0);var _free=Module["_free"]=a0=>(_free=Module["_free"]=wasmExports["free"])(a0);var _mono_wasm_load_runtime=Module["_mono_wasm_load_runtime"]=a0=>(_mono_wasm_load_runtime=Module["_mono_wasm_load_runtime"]=wasmExports["mono_wasm_load_runtime"])(a0);var _mono_wasm_invoke_jsexport=Module["_mono_wasm_invoke_jsexport"]=(a0,a1)=>(_mono_wasm_invoke_jsexport=Module["_mono_wasm_invoke_jsexport"]=wasmExports["mono_wasm_invoke_jsexport"])(a0,a1);var _mono_wasm_string_from_utf16_ref=Module["_mono_wasm_string_from_utf16_ref"]=(a0,a1,a2)=>(_mono_wasm_string_from_utf16_ref=Module["_mono_wasm_string_from_utf16_ref"]=wasmExports["mono_wasm_string_from_utf16_ref"])(a0,a1,a2);var _mono_wasm_exec_regression=Module["_mono_wasm_exec_regression"]=(a0,a1)=>(_mono_wasm_exec_regression=Module["_mono_wasm_exec_regression"]=wasmExports["mono_wasm_exec_regression"])(a0,a1);var _mono_wasm_exit=Module["_mono_wasm_exit"]=a0=>(_mono_wasm_exit=Module["_mono_wasm_exit"]=wasmExports["mono_wasm_exit"])(a0);var _fflush=a0=>(_fflush=wasmExports["fflush"])(a0);var _mono_wasm_set_main_args=Module["_mono_wasm_set_main_args"]=(a0,a1)=>(_mono_wasm_set_main_args=Module["_mono_wasm_set_main_args"]=wasmExports["mono_wasm_set_main_args"])(a0,a1);var _mono_wasm_strdup=Module["_mono_wasm_strdup"]=a0=>(_mono_wasm_strdup=Module["_mono_wasm_strdup"]=wasmExports["mono_wasm_strdup"])(a0);var _mono_wasm_parse_runtime_options=Module["_mono_wasm_parse_runtime_options"]=(a0,a1)=>(_mono_wasm_parse_runtime_options=Module["_mono_wasm_parse_runtime_options"]=wasmExports["mono_wasm_parse_runtime_options"])(a0,a1);var _mono_wasm_intern_string_ref=Module["_mono_wasm_intern_string_ref"]=a0=>(_mono_wasm_intern_string_ref=Module["_mono_wasm_intern_string_ref"]=wasmExports["mono_wasm_intern_string_ref"])(a0);var _mono_wasm_string_get_data_ref=Module["_mono_wasm_string_get_data_ref"]=(a0,a1,a2,a3)=>(_mono_wasm_string_get_data_ref=Module["_mono_wasm_string_get_data_ref"]=wasmExports["mono_wasm_string_get_data_ref"])(a0,a1,a2,a3);var _mono_wasm_write_managed_pointer_unsafe=Module["_mono_wasm_write_managed_pointer_unsafe"]=(a0,a1)=>(_mono_wasm_write_managed_pointer_unsafe=Module["_mono_wasm_write_managed_pointer_unsafe"]=wasmExports["mono_wasm_write_managed_pointer_unsafe"])(a0,a1);var _mono_wasm_copy_managed_pointer=Module["_mono_wasm_copy_managed_pointer"]=(a0,a1)=>(_mono_wasm_copy_managed_pointer=Module["_mono_wasm_copy_managed_pointer"]=wasmExports["mono_wasm_copy_managed_pointer"])(a0,a1);var _mono_wasm_init_finalizer_thread=Module["_mono_wasm_init_finalizer_thread"]=()=>(_mono_wasm_init_finalizer_thread=Module["_mono_wasm_init_finalizer_thread"]=wasmExports["mono_wasm_init_finalizer_thread"])();var _mono_wasm_i52_to_f64=Module["_mono_wasm_i52_to_f64"]=(a0,a1)=>(_mono_wasm_i52_to_f64=Module["_mono_wasm_i52_to_f64"]=wasmExports["mono_wasm_i52_to_f64"])(a0,a1);var _mono_wasm_u52_to_f64=Module["_mono_wasm_u52_to_f64"]=(a0,a1)=>(_mono_wasm_u52_to_f64=Module["_mono_wasm_u52_to_f64"]=wasmExports["mono_wasm_u52_to_f64"])(a0,a1);var _mono_wasm_f64_to_u52=Module["_mono_wasm_f64_to_u52"]=(a0,a1)=>(_mono_wasm_f64_to_u52=Module["_mono_wasm_f64_to_u52"]=wasmExports["mono_wasm_f64_to_u52"])(a0,a1);var _mono_wasm_f64_to_i52=Module["_mono_wasm_f64_to_i52"]=(a0,a1)=>(_mono_wasm_f64_to_i52=Module["_mono_wasm_f64_to_i52"]=wasmExports["mono_wasm_f64_to_i52"])(a0,a1);var _mono_wasm_method_get_full_name=Module["_mono_wasm_method_get_full_name"]=a0=>(_mono_wasm_method_get_full_name=Module["_mono_wasm_method_get_full_name"]=wasmExports["mono_wasm_method_get_full_name"])(a0);var _mono_wasm_method_get_name=Module["_mono_wasm_method_get_name"]=a0=>(_mono_wasm_method_get_name=Module["_mono_wasm_method_get_name"]=wasmExports["mono_wasm_method_get_name"])(a0);var _mono_wasm_get_f32_unaligned=Module["_mono_wasm_get_f32_unaligned"]=a0=>(_mono_wasm_get_f32_unaligned=Module["_mono_wasm_get_f32_unaligned"]=wasmExports["mono_wasm_get_f32_unaligned"])(a0);var _mono_wasm_get_f64_unaligned=Module["_mono_wasm_get_f64_unaligned"]=a0=>(_mono_wasm_get_f64_unaligned=Module["_mono_wasm_get_f64_unaligned"]=wasmExports["mono_wasm_get_f64_unaligned"])(a0);var _mono_wasm_get_i32_unaligned=Module["_mono_wasm_get_i32_unaligned"]=a0=>(_mono_wasm_get_i32_unaligned=Module["_mono_wasm_get_i32_unaligned"]=wasmExports["mono_wasm_get_i32_unaligned"])(a0);var _mono_wasm_is_zero_page_reserved=Module["_mono_wasm_is_zero_page_reserved"]=()=>(_mono_wasm_is_zero_page_reserved=Module["_mono_wasm_is_zero_page_reserved"]=wasmExports["mono_wasm_is_zero_page_reserved"])();var _mono_wasm_read_as_bool_or_null_unsafe=Module["_mono_wasm_read_as_bool_or_null_unsafe"]=a0=>(_mono_wasm_read_as_bool_or_null_unsafe=Module["_mono_wasm_read_as_bool_or_null_unsafe"]=wasmExports["mono_wasm_read_as_bool_or_null_unsafe"])(a0);var _mono_wasm_assembly_load=Module["_mono_wasm_assembly_load"]=a0=>(_mono_wasm_assembly_load=Module["_mono_wasm_assembly_load"]=wasmExports["mono_wasm_assembly_load"])(a0);var _mono_wasm_assembly_find_class=Module["_mono_wasm_assembly_find_class"]=(a0,a1,a2)=>(_mono_wasm_assembly_find_class=Module["_mono_wasm_assembly_find_class"]=wasmExports["mono_wasm_assembly_find_class"])(a0,a1,a2);var _mono_wasm_assembly_find_method=Module["_mono_wasm_assembly_find_method"]=(a0,a1,a2)=>(_mono_wasm_assembly_find_method=Module["_mono_wasm_assembly_find_method"]=wasmExports["mono_wasm_assembly_find_method"])(a0,a1,a2);var _mono_wasm_send_dbg_command_with_parms=Module["_mono_wasm_send_dbg_command_with_parms"]=(a0,a1,a2,a3,a4,a5,a6)=>(_mono_wasm_send_dbg_command_with_parms=Module["_mono_wasm_send_dbg_command_with_parms"]=wasmExports["mono_wasm_send_dbg_command_with_parms"])(a0,a1,a2,a3,a4,a5,a6);var _mono_wasm_send_dbg_command=Module["_mono_wasm_send_dbg_command"]=(a0,a1,a2,a3,a4)=>(_mono_wasm_send_dbg_command=Module["_mono_wasm_send_dbg_command"]=wasmExports["mono_wasm_send_dbg_command"])(a0,a1,a2,a3,a4);var _mono_wasm_event_pipe_enable=Module["_mono_wasm_event_pipe_enable"]=(a0,a1,a2,a3,a4,a5)=>(_mono_wasm_event_pipe_enable=Module["_mono_wasm_event_pipe_enable"]=wasmExports["mono_wasm_event_pipe_enable"])(a0,a1,a2,a3,a4,a5);var _mono_wasm_event_pipe_session_start_streaming=Module["_mono_wasm_event_pipe_session_start_streaming"]=a0=>(_mono_wasm_event_pipe_session_start_streaming=Module["_mono_wasm_event_pipe_session_start_streaming"]=wasmExports["mono_wasm_event_pipe_session_start_streaming"])(a0);var _mono_wasm_event_pipe_session_disable=Module["_mono_wasm_event_pipe_session_disable"]=a0=>(_mono_wasm_event_pipe_session_disable=Module["_mono_wasm_event_pipe_session_disable"]=wasmExports["mono_wasm_event_pipe_session_disable"])(a0);var _mono_jiterp_register_jit_call_thunk=Module["_mono_jiterp_register_jit_call_thunk"]=(a0,a1)=>(_mono_jiterp_register_jit_call_thunk=Module["_mono_jiterp_register_jit_call_thunk"]=wasmExports["mono_jiterp_register_jit_call_thunk"])(a0,a1);var _mono_jiterp_stackval_to_data=Module["_mono_jiterp_stackval_to_data"]=(a0,a1,a2)=>(_mono_jiterp_stackval_to_data=Module["_mono_jiterp_stackval_to_data"]=wasmExports["mono_jiterp_stackval_to_data"])(a0,a1,a2);var _mono_jiterp_stackval_from_data=Module["_mono_jiterp_stackval_from_data"]=(a0,a1,a2)=>(_mono_jiterp_stackval_from_data=Module["_mono_jiterp_stackval_from_data"]=wasmExports["mono_jiterp_stackval_from_data"])(a0,a1,a2);var _mono_jiterp_get_arg_offset=Module["_mono_jiterp_get_arg_offset"]=(a0,a1,a2)=>(_mono_jiterp_get_arg_offset=Module["_mono_jiterp_get_arg_offset"]=wasmExports["mono_jiterp_get_arg_offset"])(a0,a1,a2);var _mono_jiterp_overflow_check_i4=Module["_mono_jiterp_overflow_check_i4"]=(a0,a1,a2)=>(_mono_jiterp_overflow_check_i4=Module["_mono_jiterp_overflow_check_i4"]=wasmExports["mono_jiterp_overflow_check_i4"])(a0,a1,a2);var _mono_jiterp_overflow_check_u4=Module["_mono_jiterp_overflow_check_u4"]=(a0,a1,a2)=>(_mono_jiterp_overflow_check_u4=Module["_mono_jiterp_overflow_check_u4"]=wasmExports["mono_jiterp_overflow_check_u4"])(a0,a1,a2);var _mono_jiterp_ld_delegate_method_ptr=Module["_mono_jiterp_ld_delegate_method_ptr"]=(a0,a1)=>(_mono_jiterp_ld_delegate_method_ptr=Module["_mono_jiterp_ld_delegate_method_ptr"]=wasmExports["mono_jiterp_ld_delegate_method_ptr"])(a0,a1);var _mono_jiterp_interp_entry=Module["_mono_jiterp_interp_entry"]=(a0,a1)=>(_mono_jiterp_interp_entry=Module["_mono_jiterp_interp_entry"]=wasmExports["mono_jiterp_interp_entry"])(a0,a1);var _memset=Module["_memset"]=(a0,a1,a2)=>(_memset=Module["_memset"]=wasmExports["memset"])(a0,a1,a2);var _fmodf=Module["_fmodf"]=(a0,a1)=>(_fmodf=Module["_fmodf"]=wasmExports["fmodf"])(a0,a1);var _fmod=Module["_fmod"]=(a0,a1)=>(_fmod=Module["_fmod"]=wasmExports["fmod"])(a0,a1);var _asin=Module["_asin"]=a0=>(_asin=Module["_asin"]=wasmExports["asin"])(a0);var _asinh=Module["_asinh"]=a0=>(_asinh=Module["_asinh"]=wasmExports["asinh"])(a0);var _acos=Module["_acos"]=a0=>(_acos=Module["_acos"]=wasmExports["acos"])(a0);var _acosh=Module["_acosh"]=a0=>(_acosh=Module["_acosh"]=wasmExports["acosh"])(a0);var _atan=Module["_atan"]=a0=>(_atan=Module["_atan"]=wasmExports["atan"])(a0);var _atanh=Module["_atanh"]=a0=>(_atanh=Module["_atanh"]=wasmExports["atanh"])(a0);var _cos=Module["_cos"]=a0=>(_cos=Module["_cos"]=wasmExports["cos"])(a0);var _cbrt=Module["_cbrt"]=a0=>(_cbrt=Module["_cbrt"]=wasmExports["cbrt"])(a0);var _cosh=Module["_cosh"]=a0=>(_cosh=Module["_cosh"]=wasmExports["cosh"])(a0);var _exp=Module["_exp"]=a0=>(_exp=Module["_exp"]=wasmExports["exp"])(a0);var _log=Module["_log"]=a0=>(_log=Module["_log"]=wasmExports["log"])(a0);var _log2=Module["_log2"]=a0=>(_log2=Module["_log2"]=wasmExports["log2"])(a0);var _log10=Module["_log10"]=a0=>(_log10=Module["_log10"]=wasmExports["log10"])(a0);var _sin=Module["_sin"]=a0=>(_sin=Module["_sin"]=wasmExports["sin"])(a0);var _sinh=Module["_sinh"]=a0=>(_sinh=Module["_sinh"]=wasmExports["sinh"])(a0);var _tan=Module["_tan"]=a0=>(_tan=Module["_tan"]=wasmExports["tan"])(a0);var _tanh=Module["_tanh"]=a0=>(_tanh=Module["_tanh"]=wasmExports["tanh"])(a0);var _atan2=Module["_atan2"]=(a0,a1)=>(_atan2=Module["_atan2"]=wasmExports["atan2"])(a0,a1);var _pow=Module["_pow"]=(a0,a1)=>(_pow=Module["_pow"]=wasmExports["pow"])(a0,a1);var _fma=Module["_fma"]=(a0,a1,a2)=>(_fma=Module["_fma"]=wasmExports["fma"])(a0,a1,a2);var _asinf=Module["_asinf"]=a0=>(_asinf=Module["_asinf"]=wasmExports["asinf"])(a0);var _asinhf=Module["_asinhf"]=a0=>(_asinhf=Module["_asinhf"]=wasmExports["asinhf"])(a0);var _acosf=Module["_acosf"]=a0=>(_acosf=Module["_acosf"]=wasmExports["acosf"])(a0);var _acoshf=Module["_acoshf"]=a0=>(_acoshf=Module["_acoshf"]=wasmExports["acoshf"])(a0);var _atanf=Module["_atanf"]=a0=>(_atanf=Module["_atanf"]=wasmExports["atanf"])(a0);var _atanhf=Module["_atanhf"]=a0=>(_atanhf=Module["_atanhf"]=wasmExports["atanhf"])(a0);var _cosf=Module["_cosf"]=a0=>(_cosf=Module["_cosf"]=wasmExports["cosf"])(a0);var _cbrtf=Module["_cbrtf"]=a0=>(_cbrtf=Module["_cbrtf"]=wasmExports["cbrtf"])(a0);var _coshf=Module["_coshf"]=a0=>(_coshf=Module["_coshf"]=wasmExports["coshf"])(a0);var _expf=Module["_expf"]=a0=>(_expf=Module["_expf"]=wasmExports["expf"])(a0);var _logf=Module["_logf"]=a0=>(_logf=Module["_logf"]=wasmExports["logf"])(a0);var _log2f=Module["_log2f"]=a0=>(_log2f=Module["_log2f"]=wasmExports["log2f"])(a0);var _log10f=Module["_log10f"]=a0=>(_log10f=Module["_log10f"]=wasmExports["log10f"])(a0);var _sinf=Module["_sinf"]=a0=>(_sinf=Module["_sinf"]=wasmExports["sinf"])(a0);var _sinhf=Module["_sinhf"]=a0=>(_sinhf=Module["_sinhf"]=wasmExports["sinhf"])(a0);var _tanf=Module["_tanf"]=a0=>(_tanf=Module["_tanf"]=wasmExports["tanf"])(a0);var _tanhf=Module["_tanhf"]=a0=>(_tanhf=Module["_tanhf"]=wasmExports["tanhf"])(a0);var _atan2f=Module["_atan2f"]=(a0,a1)=>(_atan2f=Module["_atan2f"]=wasmExports["atan2f"])(a0,a1);var _powf=Module["_powf"]=(a0,a1)=>(_powf=Module["_powf"]=wasmExports["powf"])(a0,a1);var _fmaf=Module["_fmaf"]=(a0,a1,a2)=>(_fmaf=Module["_fmaf"]=wasmExports["fmaf"])(a0,a1,a2);var _mono_jiterp_get_polling_required_address=Module["_mono_jiterp_get_polling_required_address"]=()=>(_mono_jiterp_get_polling_required_address=Module["_mono_jiterp_get_polling_required_address"]=wasmExports["mono_jiterp_get_polling_required_address"])();var _mono_jiterp_do_safepoint=Module["_mono_jiterp_do_safepoint"]=(a0,a1)=>(_mono_jiterp_do_safepoint=Module["_mono_jiterp_do_safepoint"]=wasmExports["mono_jiterp_do_safepoint"])(a0,a1);var _mono_jiterp_imethod_to_ftnptr=Module["_mono_jiterp_imethod_to_ftnptr"]=a0=>(_mono_jiterp_imethod_to_ftnptr=Module["_mono_jiterp_imethod_to_ftnptr"]=wasmExports["mono_jiterp_imethod_to_ftnptr"])(a0);var _mono_jiterp_enum_hasflag=Module["_mono_jiterp_enum_hasflag"]=(a0,a1,a2,a3)=>(_mono_jiterp_enum_hasflag=Module["_mono_jiterp_enum_hasflag"]=wasmExports["mono_jiterp_enum_hasflag"])(a0,a1,a2,a3);var _mono_jiterp_get_simd_intrinsic=Module["_mono_jiterp_get_simd_intrinsic"]=(a0,a1)=>(_mono_jiterp_get_simd_intrinsic=Module["_mono_jiterp_get_simd_intrinsic"]=wasmExports["mono_jiterp_get_simd_intrinsic"])(a0,a1);var _mono_jiterp_get_simd_opcode=Module["_mono_jiterp_get_simd_opcode"]=(a0,a1)=>(_mono_jiterp_get_simd_opcode=Module["_mono_jiterp_get_simd_opcode"]=wasmExports["mono_jiterp_get_simd_opcode"])(a0,a1);var _mono_jiterp_get_opcode_info=Module["_mono_jiterp_get_opcode_info"]=(a0,a1)=>(_mono_jiterp_get_opcode_info=Module["_mono_jiterp_get_opcode_info"]=wasmExports["mono_jiterp_get_opcode_info"])(a0,a1);var _mono_jiterp_placeholder_trace=Module["_mono_jiterp_placeholder_trace"]=(a0,a1,a2,a3)=>(_mono_jiterp_placeholder_trace=Module["_mono_jiterp_placeholder_trace"]=wasmExports["mono_jiterp_placeholder_trace"])(a0,a1,a2,a3);var _mono_jiterp_placeholder_jit_call=Module["_mono_jiterp_placeholder_jit_call"]=(a0,a1,a2,a3)=>(_mono_jiterp_placeholder_jit_call=Module["_mono_jiterp_placeholder_jit_call"]=wasmExports["mono_jiterp_placeholder_jit_call"])(a0,a1,a2,a3);var _mono_jiterp_get_interp_entry_func=Module["_mono_jiterp_get_interp_entry_func"]=a0=>(_mono_jiterp_get_interp_entry_func=Module["_mono_jiterp_get_interp_entry_func"]=wasmExports["mono_jiterp_get_interp_entry_func"])(a0);var _mono_jiterp_is_enabled=Module["_mono_jiterp_is_enabled"]=()=>(_mono_jiterp_is_enabled=Module["_mono_jiterp_is_enabled"]=wasmExports["mono_jiterp_is_enabled"])();var _mono_jiterp_encode_leb64_ref=Module["_mono_jiterp_encode_leb64_ref"]=(a0,a1,a2)=>(_mono_jiterp_encode_leb64_ref=Module["_mono_jiterp_encode_leb64_ref"]=wasmExports["mono_jiterp_encode_leb64_ref"])(a0,a1,a2);var _mono_jiterp_encode_leb52=Module["_mono_jiterp_encode_leb52"]=(a0,a1,a2)=>(_mono_jiterp_encode_leb52=Module["_mono_jiterp_encode_leb52"]=wasmExports["mono_jiterp_encode_leb52"])(a0,a1,a2);var _mono_jiterp_encode_leb_signed_boundary=Module["_mono_jiterp_encode_leb_signed_boundary"]=(a0,a1,a2)=>(_mono_jiterp_encode_leb_signed_boundary=Module["_mono_jiterp_encode_leb_signed_boundary"]=wasmExports["mono_jiterp_encode_leb_signed_boundary"])(a0,a1,a2);var _mono_jiterp_increase_entry_count=Module["_mono_jiterp_increase_entry_count"]=a0=>(_mono_jiterp_increase_entry_count=Module["_mono_jiterp_increase_entry_count"]=wasmExports["mono_jiterp_increase_entry_count"])(a0);var _mono_jiterp_object_unbox=Module["_mono_jiterp_object_unbox"]=a0=>(_mono_jiterp_object_unbox=Module["_mono_jiterp_object_unbox"]=wasmExports["mono_jiterp_object_unbox"])(a0);var _mono_jiterp_type_is_byref=Module["_mono_jiterp_type_is_byref"]=a0=>(_mono_jiterp_type_is_byref=Module["_mono_jiterp_type_is_byref"]=wasmExports["mono_jiterp_type_is_byref"])(a0);var _mono_jiterp_value_copy=Module["_mono_jiterp_value_copy"]=(a0,a1,a2)=>(_mono_jiterp_value_copy=Module["_mono_jiterp_value_copy"]=wasmExports["mono_jiterp_value_copy"])(a0,a1,a2);var _mono_jiterp_try_newobj_inlined=Module["_mono_jiterp_try_newobj_inlined"]=(a0,a1)=>(_mono_jiterp_try_newobj_inlined=Module["_mono_jiterp_try_newobj_inlined"]=wasmExports["mono_jiterp_try_newobj_inlined"])(a0,a1);var _mono_jiterp_try_newstr=Module["_mono_jiterp_try_newstr"]=(a0,a1)=>(_mono_jiterp_try_newstr=Module["_mono_jiterp_try_newstr"]=wasmExports["mono_jiterp_try_newstr"])(a0,a1);var _mono_jiterp_gettype_ref=Module["_mono_jiterp_gettype_ref"]=(a0,a1)=>(_mono_jiterp_gettype_ref=Module["_mono_jiterp_gettype_ref"]=wasmExports["mono_jiterp_gettype_ref"])(a0,a1);var _mono_jiterp_has_parent_fast=Module["_mono_jiterp_has_parent_fast"]=(a0,a1)=>(_mono_jiterp_has_parent_fast=Module["_mono_jiterp_has_parent_fast"]=wasmExports["mono_jiterp_has_parent_fast"])(a0,a1);var _mono_jiterp_implements_interface=Module["_mono_jiterp_implements_interface"]=(a0,a1)=>(_mono_jiterp_implements_interface=Module["_mono_jiterp_implements_interface"]=wasmExports["mono_jiterp_implements_interface"])(a0,a1);var _mono_jiterp_is_special_interface=Module["_mono_jiterp_is_special_interface"]=a0=>(_mono_jiterp_is_special_interface=Module["_mono_jiterp_is_special_interface"]=wasmExports["mono_jiterp_is_special_interface"])(a0);var _mono_jiterp_implements_special_interface=Module["_mono_jiterp_implements_special_interface"]=(a0,a1,a2)=>(_mono_jiterp_implements_special_interface=Module["_mono_jiterp_implements_special_interface"]=wasmExports["mono_jiterp_implements_special_interface"])(a0,a1,a2);var _mono_jiterp_cast_v2=Module["_mono_jiterp_cast_v2"]=(a0,a1,a2,a3)=>(_mono_jiterp_cast_v2=Module["_mono_jiterp_cast_v2"]=wasmExports["mono_jiterp_cast_v2"])(a0,a1,a2,a3);var _mono_jiterp_localloc=Module["_mono_jiterp_localloc"]=(a0,a1,a2)=>(_mono_jiterp_localloc=Module["_mono_jiterp_localloc"]=wasmExports["mono_jiterp_localloc"])(a0,a1,a2);var _mono_jiterp_ldtsflda=Module["_mono_jiterp_ldtsflda"]=(a0,a1)=>(_mono_jiterp_ldtsflda=Module["_mono_jiterp_ldtsflda"]=wasmExports["mono_jiterp_ldtsflda"])(a0,a1);var _mono_jiterp_box_ref=Module["_mono_jiterp_box_ref"]=(a0,a1,a2,a3)=>(_mono_jiterp_box_ref=Module["_mono_jiterp_box_ref"]=wasmExports["mono_jiterp_box_ref"])(a0,a1,a2,a3);var _mono_jiterp_conv=Module["_mono_jiterp_conv"]=(a0,a1,a2)=>(_mono_jiterp_conv=Module["_mono_jiterp_conv"]=wasmExports["mono_jiterp_conv"])(a0,a1,a2);var _mono_jiterp_relop_fp=Module["_mono_jiterp_relop_fp"]=(a0,a1,a2)=>(_mono_jiterp_relop_fp=Module["_mono_jiterp_relop_fp"]=wasmExports["mono_jiterp_relop_fp"])(a0,a1,a2);var _mono_jiterp_get_size_of_stackval=Module["_mono_jiterp_get_size_of_stackval"]=()=>(_mono_jiterp_get_size_of_stackval=Module["_mono_jiterp_get_size_of_stackval"]=wasmExports["mono_jiterp_get_size_of_stackval"])();var _mono_jiterp_type_get_raw_value_size=Module["_mono_jiterp_type_get_raw_value_size"]=a0=>(_mono_jiterp_type_get_raw_value_size=Module["_mono_jiterp_type_get_raw_value_size"]=wasmExports["mono_jiterp_type_get_raw_value_size"])(a0);var _mono_jiterp_trace_bailout=Module["_mono_jiterp_trace_bailout"]=a0=>(_mono_jiterp_trace_bailout=Module["_mono_jiterp_trace_bailout"]=wasmExports["mono_jiterp_trace_bailout"])(a0);var _mono_jiterp_get_trace_bailout_count=Module["_mono_jiterp_get_trace_bailout_count"]=a0=>(_mono_jiterp_get_trace_bailout_count=Module["_mono_jiterp_get_trace_bailout_count"]=wasmExports["mono_jiterp_get_trace_bailout_count"])(a0);var _mono_jiterp_adjust_abort_count=Module["_mono_jiterp_adjust_abort_count"]=(a0,a1)=>(_mono_jiterp_adjust_abort_count=Module["_mono_jiterp_adjust_abort_count"]=wasmExports["mono_jiterp_adjust_abort_count"])(a0,a1);var _mono_jiterp_interp_entry_prologue=Module["_mono_jiterp_interp_entry_prologue"]=(a0,a1)=>(_mono_jiterp_interp_entry_prologue=Module["_mono_jiterp_interp_entry_prologue"]=wasmExports["mono_jiterp_interp_entry_prologue"])(a0,a1);var _mono_jiterp_get_opcode_value_table_entry=Module["_mono_jiterp_get_opcode_value_table_entry"]=a0=>(_mono_jiterp_get_opcode_value_table_entry=Module["_mono_jiterp_get_opcode_value_table_entry"]=wasmExports["mono_jiterp_get_opcode_value_table_entry"])(a0);var _mono_jiterp_get_trace_hit_count=Module["_mono_jiterp_get_trace_hit_count"]=a0=>(_mono_jiterp_get_trace_hit_count=Module["_mono_jiterp_get_trace_hit_count"]=wasmExports["mono_jiterp_get_trace_hit_count"])(a0);var _mono_jiterp_parse_option=Module["_mono_jiterp_parse_option"]=a0=>(_mono_jiterp_parse_option=Module["_mono_jiterp_parse_option"]=wasmExports["mono_jiterp_parse_option"])(a0);var _mono_jiterp_get_options_version=Module["_mono_jiterp_get_options_version"]=()=>(_mono_jiterp_get_options_version=Module["_mono_jiterp_get_options_version"]=wasmExports["mono_jiterp_get_options_version"])();var _mono_jiterp_get_options_as_json=Module["_mono_jiterp_get_options_as_json"]=()=>(_mono_jiterp_get_options_as_json=Module["_mono_jiterp_get_options_as_json"]=wasmExports["mono_jiterp_get_options_as_json"])();var _mono_jiterp_get_option_as_int=Module["_mono_jiterp_get_option_as_int"]=a0=>(_mono_jiterp_get_option_as_int=Module["_mono_jiterp_get_option_as_int"]=wasmExports["mono_jiterp_get_option_as_int"])(a0);var _mono_jiterp_object_has_component_size=Module["_mono_jiterp_object_has_component_size"]=a0=>(_mono_jiterp_object_has_component_size=Module["_mono_jiterp_object_has_component_size"]=wasmExports["mono_jiterp_object_has_component_size"])(a0);var _mono_jiterp_get_hashcode=Module["_mono_jiterp_get_hashcode"]=a0=>(_mono_jiterp_get_hashcode=Module["_mono_jiterp_get_hashcode"]=wasmExports["mono_jiterp_get_hashcode"])(a0);var _mono_jiterp_try_get_hashcode=Module["_mono_jiterp_try_get_hashcode"]=a0=>(_mono_jiterp_try_get_hashcode=Module["_mono_jiterp_try_get_hashcode"]=wasmExports["mono_jiterp_try_get_hashcode"])(a0);var _mono_jiterp_get_signature_has_this=Module["_mono_jiterp_get_signature_has_this"]=a0=>(_mono_jiterp_get_signature_has_this=Module["_mono_jiterp_get_signature_has_this"]=wasmExports["mono_jiterp_get_signature_has_this"])(a0);var _mono_jiterp_get_signature_return_type=Module["_mono_jiterp_get_signature_return_type"]=a0=>(_mono_jiterp_get_signature_return_type=Module["_mono_jiterp_get_signature_return_type"]=wasmExports["mono_jiterp_get_signature_return_type"])(a0);var _mono_jiterp_get_signature_param_count=Module["_mono_jiterp_get_signature_param_count"]=a0=>(_mono_jiterp_get_signature_param_count=Module["_mono_jiterp_get_signature_param_count"]=wasmExports["mono_jiterp_get_signature_param_count"])(a0);var _mono_jiterp_get_signature_params=Module["_mono_jiterp_get_signature_params"]=a0=>(_mono_jiterp_get_signature_params=Module["_mono_jiterp_get_signature_params"]=wasmExports["mono_jiterp_get_signature_params"])(a0);var _mono_jiterp_type_to_ldind=Module["_mono_jiterp_type_to_ldind"]=a0=>(_mono_jiterp_type_to_ldind=Module["_mono_jiterp_type_to_ldind"]=wasmExports["mono_jiterp_type_to_ldind"])(a0);var _mono_jiterp_type_to_stind=Module["_mono_jiterp_type_to_stind"]=a0=>(_mono_jiterp_type_to_stind=Module["_mono_jiterp_type_to_stind"]=wasmExports["mono_jiterp_type_to_stind"])(a0);var _mono_jiterp_get_array_rank=Module["_mono_jiterp_get_array_rank"]=(a0,a1)=>(_mono_jiterp_get_array_rank=Module["_mono_jiterp_get_array_rank"]=wasmExports["mono_jiterp_get_array_rank"])(a0,a1);var _mono_jiterp_get_array_element_size=Module["_mono_jiterp_get_array_element_size"]=(a0,a1)=>(_mono_jiterp_get_array_element_size=Module["_mono_jiterp_get_array_element_size"]=wasmExports["mono_jiterp_get_array_element_size"])(a0,a1);var _mono_jiterp_set_object_field=Module["_mono_jiterp_set_object_field"]=(a0,a1,a2,a3)=>(_mono_jiterp_set_object_field=Module["_mono_jiterp_set_object_field"]=wasmExports["mono_jiterp_set_object_field"])(a0,a1,a2,a3);var _mono_jiterp_debug_count=Module["_mono_jiterp_debug_count"]=()=>(_mono_jiterp_debug_count=Module["_mono_jiterp_debug_count"]=wasmExports["mono_jiterp_debug_count"])();var _mono_jiterp_stelem_ref=Module["_mono_jiterp_stelem_ref"]=(a0,a1,a2)=>(_mono_jiterp_stelem_ref=Module["_mono_jiterp_stelem_ref"]=wasmExports["mono_jiterp_stelem_ref"])(a0,a1,a2);var _mono_jiterp_get_member_offset=Module["_mono_jiterp_get_member_offset"]=a0=>(_mono_jiterp_get_member_offset=Module["_mono_jiterp_get_member_offset"]=wasmExports["mono_jiterp_get_member_offset"])(a0);var _mono_jiterp_get_counter=Module["_mono_jiterp_get_counter"]=a0=>(_mono_jiterp_get_counter=Module["_mono_jiterp_get_counter"]=wasmExports["mono_jiterp_get_counter"])(a0);var _mono_jiterp_modify_counter=Module["_mono_jiterp_modify_counter"]=(a0,a1)=>(_mono_jiterp_modify_counter=Module["_mono_jiterp_modify_counter"]=wasmExports["mono_jiterp_modify_counter"])(a0,a1);var _mono_jiterp_write_number_unaligned=Module["_mono_jiterp_write_number_unaligned"]=(a0,a1,a2)=>(_mono_jiterp_write_number_unaligned=Module["_mono_jiterp_write_number_unaligned"]=wasmExports["mono_jiterp_write_number_unaligned"])(a0,a1,a2);var _mono_jiterp_get_rejected_trace_count=Module["_mono_jiterp_get_rejected_trace_count"]=()=>(_mono_jiterp_get_rejected_trace_count=Module["_mono_jiterp_get_rejected_trace_count"]=wasmExports["mono_jiterp_get_rejected_trace_count"])();var _mono_jiterp_boost_back_branch_target=Module["_mono_jiterp_boost_back_branch_target"]=a0=>(_mono_jiterp_boost_back_branch_target=Module["_mono_jiterp_boost_back_branch_target"]=wasmExports["mono_jiterp_boost_back_branch_target"])(a0);var _mono_jiterp_is_imethod_var_address_taken=Module["_mono_jiterp_is_imethod_var_address_taken"]=(a0,a1)=>(_mono_jiterp_is_imethod_var_address_taken=Module["_mono_jiterp_is_imethod_var_address_taken"]=wasmExports["mono_jiterp_is_imethod_var_address_taken"])(a0,a1);var _mono_jiterp_initialize_table=Module["_mono_jiterp_initialize_table"]=(a0,a1,a2)=>(_mono_jiterp_initialize_table=Module["_mono_jiterp_initialize_table"]=wasmExports["mono_jiterp_initialize_table"])(a0,a1,a2);var _mono_jiterp_allocate_table_entry=Module["_mono_jiterp_allocate_table_entry"]=a0=>(_mono_jiterp_allocate_table_entry=Module["_mono_jiterp_allocate_table_entry"]=wasmExports["mono_jiterp_allocate_table_entry"])(a0);var _mono_jiterp_tlqueue_next=Module["_mono_jiterp_tlqueue_next"]=a0=>(_mono_jiterp_tlqueue_next=Module["_mono_jiterp_tlqueue_next"]=wasmExports["mono_jiterp_tlqueue_next"])(a0);var _mono_jiterp_tlqueue_add=Module["_mono_jiterp_tlqueue_add"]=(a0,a1)=>(_mono_jiterp_tlqueue_add=Module["_mono_jiterp_tlqueue_add"]=wasmExports["mono_jiterp_tlqueue_add"])(a0,a1);var _mono_jiterp_tlqueue_clear=Module["_mono_jiterp_tlqueue_clear"]=a0=>(_mono_jiterp_tlqueue_clear=Module["_mono_jiterp_tlqueue_clear"]=wasmExports["mono_jiterp_tlqueue_clear"])(a0);var _mono_interp_pgo_load_table=Module["_mono_interp_pgo_load_table"]=(a0,a1)=>(_mono_interp_pgo_load_table=Module["_mono_interp_pgo_load_table"]=wasmExports["mono_interp_pgo_load_table"])(a0,a1);var _mono_interp_pgo_save_table=Module["_mono_interp_pgo_save_table"]=(a0,a1)=>(_mono_interp_pgo_save_table=Module["_mono_interp_pgo_save_table"]=wasmExports["mono_interp_pgo_save_table"])(a0,a1);var _mono_llvm_cpp_catch_exception=Module["_mono_llvm_cpp_catch_exception"]=(a0,a1,a2)=>(_mono_llvm_cpp_catch_exception=Module["_mono_llvm_cpp_catch_exception"]=wasmExports["mono_llvm_cpp_catch_exception"])(a0,a1,a2);var _mono_jiterp_begin_catch=Module["_mono_jiterp_begin_catch"]=a0=>(_mono_jiterp_begin_catch=Module["_mono_jiterp_begin_catch"]=wasmExports["mono_jiterp_begin_catch"])(a0);var _mono_jiterp_end_catch=Module["_mono_jiterp_end_catch"]=()=>(_mono_jiterp_end_catch=Module["_mono_jiterp_end_catch"]=wasmExports["mono_jiterp_end_catch"])();var _sbrk=Module["_sbrk"]=a0=>(_sbrk=Module["_sbrk"]=wasmExports["sbrk"])(a0);var _mono_background_exec=Module["_mono_background_exec"]=()=>(_mono_background_exec=Module["_mono_background_exec"]=wasmExports["mono_background_exec"])();var _mono_wasm_gc_lock=Module["_mono_wasm_gc_lock"]=()=>(_mono_wasm_gc_lock=Module["_mono_wasm_gc_lock"]=wasmExports["mono_wasm_gc_lock"])();var _mono_wasm_gc_unlock=Module["_mono_wasm_gc_unlock"]=()=>(_mono_wasm_gc_unlock=Module["_mono_wasm_gc_unlock"]=wasmExports["mono_wasm_gc_unlock"])();var _mono_print_method_from_ip=Module["_mono_print_method_from_ip"]=a0=>(_mono_print_method_from_ip=Module["_mono_print_method_from_ip"]=wasmExports["mono_print_method_from_ip"])(a0);var _mono_wasm_execute_timer=Module["_mono_wasm_execute_timer"]=()=>(_mono_wasm_execute_timer=Module["_mono_wasm_execute_timer"]=wasmExports["mono_wasm_execute_timer"])();var ___funcs_on_exit=()=>(___funcs_on_exit=wasmExports["__funcs_on_exit"])();var _htons=Module["_htons"]=a0=>(_htons=Module["_htons"]=wasmExports["htons"])(a0);var _emscripten_builtin_memalign=(a0,a1)=>(_emscripten_builtin_memalign=wasmExports["emscripten_builtin_memalign"])(a0,a1);var _ntohs=Module["_ntohs"]=a0=>(_ntohs=Module["_ntohs"]=wasmExports["ntohs"])(a0);var _memalign=Module["_memalign"]=(a0,a1)=>(_memalign=Module["_memalign"]=wasmExports["memalign"])(a0,a1);var ___trap=()=>(___trap=wasmExports["__trap"])();var stackSave=Module["stackSave"]=()=>(stackSave=Module["stackSave"]=wasmExports["stackSave"])();var stackRestore=Module["stackRestore"]=a0=>(stackRestore=Module["stackRestore"]=wasmExports["stackRestore"])(a0);var stackAlloc=Module["stackAlloc"]=a0=>(stackAlloc=Module["stackAlloc"]=wasmExports["stackAlloc"])(a0);var ___cxa_decrement_exception_refcount=a0=>(___cxa_decrement_exception_refcount=wasmExports["__cxa_decrement_exception_refcount"])(a0);var ___cxa_increment_exception_refcount=a0=>(___cxa_increment_exception_refcount=wasmExports["__cxa_increment_exception_refcount"])(a0);var ___thrown_object_from_unwind_exception=a0=>(___thrown_object_from_unwind_exception=wasmExports["__thrown_object_from_unwind_exception"])(a0);var ___get_exception_message=(a0,a1,a2)=>(___get_exception_message=wasmExports["__get_exception_message"])(a0,a1,a2);Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["out"]=out;Module["err"]=err;Module["abort"]=abort;Module["wasmExports"]=wasmExports;Module["runtimeKeepalivePush"]=runtimeKeepalivePush;Module["runtimeKeepalivePop"]=runtimeKeepalivePop;Module["maybeExit"]=maybeExit;Module["ccall"]=ccall;Module["cwrap"]=cwrap;Module["addFunction"]=addFunction;Module["setValue"]=setValue;Module["getValue"]=getValue;Module["UTF8ArrayToString"]=UTF8ArrayToString;Module["UTF8ToString"]=UTF8ToString;Module["stringToUTF8Array"]=stringToUTF8Array;Module["lengthBytesUTF8"]=lengthBytesUTF8;Module["safeSetTimeout"]=safeSetTimeout;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS"]=FS;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_unlink"]=FS.unlink;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function run(){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); + + + return moduleArg.ready +} +); +})(); +export default createDotnetRuntime; +var fetch = fetch || undefined; var require = require || undefined; var __dirname = __dirname || ''; var _nativeModuleLoaded = false; diff --git a/_framework/dotnet.native.gfgmczja9o.js.br b/_framework/dotnet.native.gfgmczja9o.js.br new file mode 100644 index 00000000..9ee29b9c Binary files /dev/null and b/_framework/dotnet.native.gfgmczja9o.js.br differ diff --git a/_framework/dotnet.native.gfgmczja9o.js.gz b/_framework/dotnet.native.gfgmczja9o.js.gz new file mode 100644 index 00000000..8808c972 Binary files /dev/null and b/_framework/dotnet.native.gfgmczja9o.js.gz differ diff --git a/_framework/dotnet.native.yaj7q15i8q.wasm b/_framework/dotnet.native.yaj7q15i8q.wasm new file mode 100755 index 00000000..c1439880 Binary files /dev/null and b/_framework/dotnet.native.yaj7q15i8q.wasm differ diff --git a/_framework/dotnet.native.yaj7q15i8q.wasm.br b/_framework/dotnet.native.yaj7q15i8q.wasm.br new file mode 100644 index 00000000..c0f8375c Binary files /dev/null and b/_framework/dotnet.native.yaj7q15i8q.wasm.br differ diff --git a/_framework/dotnet.native.yaj7q15i8q.wasm.gz b/_framework/dotnet.native.yaj7q15i8q.wasm.gz new file mode 100644 index 00000000..2efd2c19 Binary files /dev/null and b/_framework/dotnet.native.yaj7q15i8q.wasm.gz differ diff --git a/_framework/dotnet.runtime.ju77aherdp.js b/_framework/dotnet.runtime.ju77aherdp.js new file mode 100755 index 00000000..42f1bce7 --- /dev/null +++ b/_framework/dotnet.runtime.ju77aherdp.js @@ -0,0 +1,4 @@ +//! Licensed to the .NET Foundation under one or more agreements. +//! The .NET Foundation licenses this file to you under the MIT license. +var e="9.0.0-rc.2.24473.5",t="Release",n=!1;const r=[[!0,"mono_wasm_register_root","number",["number","number","string"]],[!0,"mono_wasm_deregister_root",null,["number"]],[!0,"mono_wasm_string_get_data_ref",null,["number","number","number","number"]],[!0,"mono_wasm_set_is_debugger_attached","void",["bool"]],[!0,"mono_wasm_send_dbg_command","bool",["number","number","number","number","number"]],[!0,"mono_wasm_send_dbg_command_with_parms","bool",["number","number","number","number","number","number","string"]],[!0,"mono_wasm_setenv",null,["string","string"]],[!0,"mono_wasm_parse_runtime_options",null,["number","number"]],[!0,"mono_wasm_strdup","number",["string"]],[!0,"mono_background_exec",null,[]],[!0,"mono_wasm_execute_timer",null,[]],[!0,"mono_wasm_load_icu_data","number",["number"]],[!1,"mono_wasm_add_assembly","number",["string","number","number"]],[!0,"mono_wasm_add_satellite_assembly","void",["string","string","number","number"]],[!1,"mono_wasm_load_runtime",null,["number"]],[!0,"mono_wasm_change_debugger_log_level","void",["number"]],[!0,"mono_wasm_assembly_load","number",["string"]],[!0,"mono_wasm_assembly_find_class","number",["number","string","string"]],[!0,"mono_wasm_assembly_find_method","number",["number","string","number"]],[!0,"mono_wasm_string_from_utf16_ref","void",["number","number","number"]],[!0,"mono_wasm_intern_string_ref","void",["number"]],[!1,"mono_wasm_exit","void",["number"]],[!0,"mono_wasm_getenv","number",["string"]],[!0,"mono_wasm_set_main_args","void",["number","number"]],[()=>!ot.emscriptenBuildOptions.enableAotProfiler,"mono_wasm_profiler_init_aot","void",["string"]],[()=>!ot.emscriptenBuildOptions.enableBrowserProfiler,"mono_wasm_profiler_init_browser","void",["string"]],[()=>!ot.emscriptenBuildOptions.enableLogProfiler,"mono_wasm_profiler_init_log","void",["string"]],[!0,"mono_wasm_profiler_init_browser","void",["number"]],[!1,"mono_wasm_exec_regression","number",["number","string"]],[!1,"mono_wasm_invoke_jsexport","void",["number","number"]],[!0,"mono_wasm_write_managed_pointer_unsafe","void",["number","number"]],[!0,"mono_wasm_copy_managed_pointer","void",["number","number"]],[!0,"mono_wasm_i52_to_f64","number",["number","number"]],[!0,"mono_wasm_u52_to_f64","number",["number","number"]],[!0,"mono_wasm_f64_to_i52","number",["number","number"]],[!0,"mono_wasm_f64_to_u52","number",["number","number"]],[!0,"mono_wasm_method_get_name","number",["number"]],[!0,"mono_wasm_method_get_full_name","number",["number"]],[!0,"mono_wasm_gc_lock","void",[]],[!0,"mono_wasm_gc_unlock","void",[]],[!0,"mono_wasm_get_i32_unaligned","number",["number"]],[!0,"mono_wasm_get_f32_unaligned","number",["number"]],[!0,"mono_wasm_get_f64_unaligned","number",["number"]],[!0,"mono_wasm_read_as_bool_or_null_unsafe","number",["number"]],[!0,"mono_jiterp_trace_bailout","void",["number"]],[!0,"mono_jiterp_get_trace_bailout_count","number",["number"]],[!0,"mono_jiterp_value_copy","void",["number","number","number"]],[!0,"mono_jiterp_get_member_offset","number",["number"]],[!0,"mono_jiterp_encode_leb52","number",["number","number","number"]],[!0,"mono_jiterp_encode_leb64_ref","number",["number","number","number"]],[!0,"mono_jiterp_encode_leb_signed_boundary","number",["number","number","number"]],[!0,"mono_jiterp_write_number_unaligned","void",["number","number","number"]],[!0,"mono_jiterp_type_is_byref","number",["number"]],[!0,"mono_jiterp_get_size_of_stackval","number",[]],[!0,"mono_jiterp_parse_option","number",["string"]],[!0,"mono_jiterp_get_options_as_json","number",[]],[!0,"mono_jiterp_get_option_as_int","number",["string"]],[!0,"mono_jiterp_get_options_version","number",[]],[!0,"mono_jiterp_adjust_abort_count","number",["number","number"]],[!0,"mono_jiterp_register_jit_call_thunk","void",["number","number"]],[!0,"mono_jiterp_type_get_raw_value_size","number",["number"]],[!0,"mono_jiterp_get_signature_has_this","number",["number"]],[!0,"mono_jiterp_get_signature_return_type","number",["number"]],[!0,"mono_jiterp_get_signature_param_count","number",["number"]],[!0,"mono_jiterp_get_signature_params","number",["number"]],[!0,"mono_jiterp_type_to_ldind","number",["number"]],[!0,"mono_jiterp_type_to_stind","number",["number"]],[!0,"mono_jiterp_imethod_to_ftnptr","number",["number"]],[!0,"mono_jiterp_debug_count","number",[]],[!0,"mono_jiterp_get_trace_hit_count","number",["number"]],[!0,"mono_jiterp_get_polling_required_address","number",[]],[!0,"mono_jiterp_get_rejected_trace_count","number",[]],[!0,"mono_jiterp_boost_back_branch_target","void",["number"]],[!0,"mono_jiterp_is_imethod_var_address_taken","number",["number","number"]],[!0,"mono_jiterp_get_opcode_value_table_entry","number",["number"]],[!0,"mono_jiterp_get_simd_intrinsic","number",["number","number"]],[!0,"mono_jiterp_get_simd_opcode","number",["number","number"]],[!0,"mono_jiterp_get_arg_offset","number",["number","number","number"]],[!0,"mono_jiterp_get_opcode_info","number",["number","number"]],[!0,"mono_wasm_is_zero_page_reserved","number",[]],[!0,"mono_jiterp_is_special_interface","number",["number"]],[!0,"mono_jiterp_initialize_table","void",["number","number","number"]],[!0,"mono_jiterp_allocate_table_entry","number",["number"]],[!0,"mono_jiterp_get_interp_entry_func","number",["number"]],[!0,"mono_jiterp_get_counter","number",["number"]],[!0,"mono_jiterp_modify_counter","number",["number","number"]],[!0,"mono_jiterp_tlqueue_next","number",["number"]],[!0,"mono_jiterp_tlqueue_add","number",["number","number"]],[!0,"mono_jiterp_tlqueue_clear","void",["number"]],[!0,"mono_jiterp_begin_catch","void",["number"]],[!0,"mono_jiterp_end_catch","void",[]],[!0,"mono_interp_pgo_load_table","number",["number","number"]],[!0,"mono_interp_pgo_save_table","number",["number","number"]]],o={},a=o,s=["void","number",null];function i(e,t,n,r){let o=void 0===r&&s.indexOf(t)>=0&&(!n||n.every((e=>s.indexOf(e)>=0)))&&Xe.wasmExports?Xe.wasmExports[e]:void 0;if(o&&n&&o.length!==n.length&&(Pe(`argument count mismatch for cwrap ${e}`),o=void 0),"function"!=typeof o&&(o=Xe.cwrap(e,t,n,r)),"function"!=typeof o)throw new Error(`cwrap ${e} not found or not a function`);return o}const c=0,l=0,p=0,u=BigInt("9223372036854775807"),d=BigInt("-9223372036854775808");function f(e,t,n){if(!Number.isSafeInteger(e))throw new Error(`Assert failed: Value is not an integer: ${e} (${typeof e})`);if(!(e>=t&&e<=n))throw new Error(`Assert failed: Overflow: value ${e} is out of ${t} ${n} range`)}function _(e,t){Y().fill(0,e,e+t)}function m(e,t){const n=!!t;"number"==typeof t&&f(t,0,1),Xe.HEAP32[e>>>2]=n?1:0}function h(e,t){const n=!!t;"number"==typeof t&&f(t,0,1),Xe.HEAPU8[e]=n?1:0}function g(e,t){f(t,0,255),Xe.HEAPU8[e]=t}function b(e,t){f(t,0,65535),Xe.HEAPU16[e>>>1]=t}function y(e,t,n){f(n,0,65535),e[t>>>1]=n}function w(e,t){f(t,0,4294967295),Xe.HEAPU32[e>>>2]=t}function k(e,t){f(t,-128,127),Xe.HEAP8[e]=t}function S(e,t){f(t,-32768,32767),Xe.HEAP16[e>>>1]=t}function v(e,t){f(t,-2147483648,2147483647),Xe.HEAP32[e>>>2]=t}function U(e){if(0!==e)switch(e){case 1:throw new Error("value was not an integer");case 2:throw new Error("value out of range");default:throw new Error("unknown internal error")}}function E(e,t){if(!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not a safe integer: ${t} (${typeof t})`);U(o.mono_wasm_f64_to_i52(e,t))}function T(e,t){if(!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not a safe integer: ${t} (${typeof t})`);if(!(t>=0))throw new Error("Assert failed: Can't convert negative Number into UInt64");U(o.mono_wasm_f64_to_u52(e,t))}function x(e,t){if("bigint"!=typeof t)throw new Error(`Assert failed: Value is not an bigint: ${t} (${typeof t})`);if(!(t>=d&&t<=u))throw new Error(`Assert failed: Overflow: value ${t} is out of ${d} ${u} range`);Xe.HEAP64[e>>>3]=t}function I(e,t){if("number"!=typeof t)throw new Error(`Assert failed: Value is not a Number: ${t} (${typeof t})`);Xe.HEAPF32[e>>>2]=t}function A(e,t){if("number"!=typeof t)throw new Error(`Assert failed: Value is not a Number: ${t} (${typeof t})`);Xe.HEAPF64[e>>>3]=t}let j=!0;function $(e){const t=Xe.HEAPU32[e>>>2];return t>1&&j&&(j=!1,Me(`getB32: value at ${e} is not a boolean, but a number: ${t}`)),!!t}function L(e){return!!Xe.HEAPU8[e]}function R(e){return Xe.HEAPU8[e]}function B(e){return Xe.HEAPU16[e>>>1]}function N(e){return Xe.HEAPU32[e>>>2]}function C(e,t){return e[t>>>2]}function O(e){return o.mono_wasm_get_i32_unaligned(e)}function D(e){return o.mono_wasm_get_i32_unaligned(e)>>>0}function F(e){return Xe.HEAP8[e]}function M(e){return Xe.HEAP16[e>>>1]}function P(e){return Xe.HEAP32[e>>>2]}function V(e){const t=o.mono_wasm_i52_to_f64(e,ot._i52_error_scratch_buffer);return U(P(ot._i52_error_scratch_buffer)),t}function z(e){const t=o.mono_wasm_u52_to_f64(e,ot._i52_error_scratch_buffer);return U(P(ot._i52_error_scratch_buffer)),t}function H(e){return Xe.HEAP64[e>>>3]}function W(e){return Xe.HEAPF32[e>>>2]}function q(e){return Xe.HEAPF64[e>>>3]}function G(){return Xe.HEAP8}function J(){return Xe.HEAP16}function X(){return Xe.HEAP32}function Q(){return Xe.HEAP64}function Y(){return Xe.HEAPU8}function Z(){return Xe.HEAPU16}function K(){return Xe.HEAPU32}function ee(){return Xe.HEAPF32}function te(){return Xe.HEAPF64}let ne=!1;function re(){if(ne)throw new Error("GC is already locked");ne=!0}function oe(){if(!ne)throw new Error("GC is not locked");ne=!1}const ae=8192;let se=null,ie=null,ce=0;const le=[],pe=[];function ue(e,t){if(e<=0)throw new Error("capacity >= 1");const n=4*(e|=0),r=Xe._malloc(n);if(r%4!=0)throw new Error("Malloc returned an unaligned offset");return _(r,n),new WasmRootBufferImpl(r,e,!0,t)}class WasmRootBufferImpl{constructor(e,t,n,r){const a=4*t;this.__offset=e,this.__offset32=e>>>2,this.__count=t,this.length=t,this.__handle=o.mono_wasm_register_root(e,a,r||"noname"),this.__ownsAllocation=n}_throw_index_out_of_range(){throw new Error("index out of range")}_check_in_range(e){(e>=this.__count||e<0)&&this._throw_index_out_of_range()}get_address(e){return this._check_in_range(e),this.__offset+4*e}get_address_32(e){return this._check_in_range(e),this.__offset32+e}get(e){this._check_in_range(e);const t=this.get_address_32(e);return K()[t]}set(e,t){const n=this.get_address(e);return o.mono_wasm_write_managed_pointer_unsafe(n,t),t}copy_value_from_address(e,t){const n=this.get_address(e);o.mono_wasm_copy_managed_pointer(n,t)}_unsafe_get(e){return K()[this.__offset32+e]}_unsafe_set(e,t){const n=this.__offset+e;o.mono_wasm_write_managed_pointer_unsafe(n,t)}clear(){this.__offset&&_(this.__offset,4*this.__count)}release(){this.__offset&&this.__ownsAllocation&&(o.mono_wasm_deregister_root(this.__offset),_(this.__offset,4*this.__count),Xe._free(this.__offset)),this.__handle=this.__offset=this.__count=this.__offset32=0}toString(){return`[root buffer @${this.get_address(0)}, size ${this.__count} ]`}}class de{constructor(e,t){this.__buffer=e,this.__index=t}get_address(){return this.__buffer.get_address(this.__index)}get_address_32(){return this.__buffer.get_address_32(this.__index)}get address(){return this.__buffer.get_address(this.__index)}get(){return this.__buffer._unsafe_get(this.__index)}set(e){const t=this.__buffer.get_address(this.__index);return o.mono_wasm_write_managed_pointer_unsafe(t,e),e}copy_from(e){const t=e.address,n=this.address;o.mono_wasm_copy_managed_pointer(n,t)}copy_to(e){const t=this.address,n=e.address;o.mono_wasm_copy_managed_pointer(n,t)}copy_from_address(e){const t=this.address;o.mono_wasm_copy_managed_pointer(t,e)}copy_to_address(e){const t=this.address;o.mono_wasm_copy_managed_pointer(e,t)}get value(){return this.get()}set value(e){this.set(e)}valueOf(){throw new Error("Implicit conversion of roots to pointers is no longer supported. Use .value or .address as appropriate")}clear(){const e=this.__buffer.get_address_32(this.__index);K()[e]=0}release(){if(!this.__buffer)throw new Error("No buffer");var e;le.length>128?(void 0!==(e=this.__index)&&(se.set(e,0),ie[ce]=e,ce++),this.__buffer=null,this.__index=0):(this.set(0),le.push(this))}toString(){return`[root @${this.address}]`}}class fe{constructor(e){this.__external_address=0,this.__external_address_32=0,this._set_address(e)}_set_address(e){this.__external_address=e,this.__external_address_32=e>>>2}get address(){return this.__external_address}get_address(){return this.__external_address}get_address_32(){return this.__external_address_32}get(){return K()[this.__external_address_32]}set(e){return o.mono_wasm_write_managed_pointer_unsafe(this.__external_address,e),e}copy_from(e){const t=e.address,n=this.__external_address;o.mono_wasm_copy_managed_pointer(n,t)}copy_to(e){const t=this.__external_address,n=e.address;o.mono_wasm_copy_managed_pointer(n,t)}copy_from_address(e){const t=this.__external_address;o.mono_wasm_copy_managed_pointer(t,e)}copy_to_address(e){const t=this.__external_address;o.mono_wasm_copy_managed_pointer(e,t)}get value(){return this.get()}set value(e){this.set(e)}valueOf(){throw new Error("Implicit conversion of roots to pointers is no longer supported. Use .value or .address as appropriate")}clear(){K()[this.__external_address>>>2]=0}release(){pe.length<128&&pe.push(this)}toString(){return`[external root @${this.address}]`}}const _e=new Map,me="";let he;const ge=new Map;let be,ye,we,ke,Se,ve=0,Ue=null,Ee=0;function Te(e){if(void 0===ke){const t=Xe.lengthBytesUTF8(e),n=new Uint8Array(t);return Xe.stringToUTF8Array(e,n,0,t),n}return ke.encode(e)}function xe(e){const t=Y();return function(e,t,n){const r=t+n;let o=t;for(;e[o]&&!(o>=r);)++o;if(o-t<=16)return Xe.UTF8ArrayToString(e,t,n);if(void 0===we)return Xe.UTF8ArrayToString(e,t,n);const a=Ne(e,t,o);return we.decode(a)}(t,e,t.length-e)}function Ie(e,t){if(be){const n=Ne(Y(),e,t);return be.decode(n)}return Ae(e,t)}function Ae(e,t){let n="";const r=Z();for(let o=e;o>>1];n+=String.fromCharCode(e)}return n}function je(e,t,n){const r=Z(),o=n.length;for(let a=0;a=t));a++);}function $e(e){const t=2*(e.length+1),n=Xe._malloc(t);return _(n,2*e.length),je(n,n+t,e),n}function Le(e){if(e.value===l)return null;const t=he+0,n=he+4,r=he+8;let a;o.mono_wasm_string_get_data_ref(e.address,t,n,r);const s=K(),i=C(s,n),c=C(s,t),p=C(s,r);if(p&&(a=ge.get(e.value)),void 0===a&&(i&&c?(a=Ie(c,c+i),p&&ge.set(e.value,a)):a=me),void 0===a)throw new Error(`internal error when decoding string at location ${e.value}`);return a}function Re(e,t){let n;if("symbol"==typeof e?(n=e.description,"string"!=typeof n&&(n=Symbol.keyFor(e)),"string"!=typeof n&&(n="")):"string"==typeof e&&(n=e),"string"!=typeof n)throw new Error(`Argument to stringToInternedMonoStringRoot must be a string but was ${e}`);if(0===n.length&&ve)return void t.set(ve);const r=_e.get(n);r?t.set(r):(Be(n,t),function(e,t,n){if(!t.value)throw new Error("null pointer passed to _store_string_in_intern_table");Ee>=8192&&(Ue=null),Ue||(Ue=ue(8192,"interned strings"),Ee=0);const r=Ue,a=Ee++;if(o.mono_wasm_intern_string_ref(t.address),!t.value)throw new Error("mono_wasm_intern_string_ref produced a null pointer");_e.set(e,t.value),ge.set(t.value,e),0!==e.length||ve||(ve=t.value),r.copy_value_from_address(a,t.address)}(n,t))}function Be(e,t){const n=2*(e.length+1),r=Xe._malloc(n);je(r,r+n,e),o.mono_wasm_string_from_utf16_ref(r,e.length,t.address),Xe._free(r)}function Ne(e,t,n){return e.buffer,e.subarray(t,n)}function Ce(e){if(e===l)return null;Se.value=e;const t=Le(Se);return Se.value=l,t}let Oe="MONO_WASM: ";function De(e){if(ot.diagnosticTracing){const t="function"==typeof e?e():e;console.debug(Oe+t)}}function Fe(e,...t){console.info(Oe+e,...t)}function Me(e,...t){console.warn(Oe+e,...t)}function Pe(e,...t){if(t&&t.length>0&&t[0]&&"object"==typeof t[0]){if(t[0].silent)return;if(t[0].toString)return void console.error(Oe+e,t[0].toString())}console.error(Oe+e,...t)}const Ve=new Map;let ze;const He=[];function We(e){try{if(Ge(),0==Ve.size)return e;const t=e;for(let n=0;n{const n=t.find((e=>"object"==typeof e&&void 0!==e.replaceSection));if(void 0===n)return e;const r=n.funcNum,o=n.replaceSection,a=Ve.get(Number(r));return void 0===a?e:e.replace(o,`${a} (${o})`)}));if(r!==t)return r}return t}catch(t){return console.debug(`failed to symbolicate: ${t}`),e}}function qe(e){let t;return t="string"==typeof e?e:null==e||void 0===e.stack?(new Error).stack+"":e.stack+"",We(t)}function Ge(){if(!ze)return;He.push(/at (?[^:()]+:wasm-function\[(?\d+)\]:0x[a-fA-F\d]+)((?![^)a-fA-F\d])|$)/),He.push(/(?:WASM \[[\da-zA-Z]+\], (?function #(?[\d]+) \(''\)))/),He.push(/(?[a-z]+:\/\/[^ )]*:wasm-function\[(?\d+)\]:0x[a-fA-F\d]+)/),He.push(/(?<[^ >]+>[.:]wasm-function\[(?[0-9]+)\])/);const e=ze;ze=void 0;try{e.split(/[\r\n]/).forEach((e=>{const t=e.split(/:/);t.length<2||(t[1]=t.splice(1).join(":"),Ve.set(Number(t[0]),t[1]))})),at.diagnosticTracing&&De(`Loaded ${Ve.size} symbols`)}catch(e){Me(`Failed to load symbol map: ${e}`)}}function Je(){return Ge(),[...Ve.values()]}let Xe,Qe;const Ye="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,Ze="function"==typeof importScripts,Ke=Ze&&"undefined"!=typeof dotnetSidecar,et=Ze&&!Ke,tt="object"==typeof window||Ze&&!Ye,nt=!tt&&!Ye;let rt=null,ot=null,at=null,st=null,it=!1;function ct(e,t){ot.emscriptenBuildOptions=t,e.isPThread,ot.quit=e.quit_,ot.ExitStatus=e.ExitStatus,ot.getMemory=e.getMemory,ot.getWasmIndirectFunctionTable=e.getWasmIndirectFunctionTable,ot.updateMemoryViews=e.updateMemoryViews}function lt(e){if(it)throw new Error("Runtime module already loaded");it=!0,Xe=e.module,Qe=e.internal,ot=e.runtimeHelpers,at=e.loaderHelpers,st=e.globalizationHelpers,rt=e.api;const t={gitHash:"990ebf52fc408ca45929fd176d2740675a67fab8",coreAssetsInMemory:pt(),allAssetsInMemory:pt(),dotnetReady:pt(),afterInstantiateWasm:pt(),beforePreInit:pt(),afterPreInit:pt(),afterPreRun:pt(),beforeOnRuntimeInitialized:pt(),afterMonoStarted:pt(),afterDeputyReady:pt(),afterIOStarted:pt(),afterOnRuntimeInitialized:pt(),afterPostRun:pt(),nativeAbort:e=>{throw e||new Error("abort")},nativeExit:e=>{throw new Error("exit:"+e)}};Object.assign(ot,t),Object.assign(e.module.config,{}),Object.assign(e.api,{Module:e.module,...e.module}),Object.assign(e.api,{INTERNAL:e.internal})}function pt(e,t){return at.createPromiseController(e,t)}function ut(e,t){if(e)return;const n="Assert failed: "+("function"==typeof t?t():t),r=new Error(n);Pe(n,r),ot.nativeAbort(r)}function dt(e,t,n){const r=function(e,t,n){let r,o=0;r=e.length-o;const a={read:function(){if(o>=r)return null;const t=e[o];return o+=1,t}};return Object.defineProperty(a,"eof",{get:function(){return o>=r},configurable:!0,enumerable:!0}),a}(e);let o="",a=0,s=0,i=0,c=0,l=0,p=0;for(;a=r.read(),s=r.read(),i=r.read(),null!==a;)null===s&&(s=0,l+=1),null===i&&(i=0,l+=1),p=a<<16|s<<8|i,c=(16777215&p)>>18,o+=ft[c],c=(262143&p)>>12,o+=ft[c],l<2&&(c=(4095&p)>>6,o+=ft[c]),2===l?o+="==":1===l?o+="=":(c=63&p,o+=ft[c]);return o}const ft=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9","+","/"],_t=new Map;_t.remove=function(e){const t=this.get(e);return this.delete(e),t};let mt,ht,gt,bt={},yt=0,wt=-1;function mono_wasm_fire_debugger_agent_message_with_data_to_pause(e){console.assert(!0,`mono_wasm_fire_debugger_agent_message_with_data ${e}`);debugger}function kt(e){e.length>wt&&(mt&&Xe._free(mt),wt=Math.max(e.length,wt,256),mt=Xe._malloc(wt));const t=atob(e),n=Y();for(let e=0;ee.value)),e;if(void 0===t.dimensionsDetails||1===t.dimensionsDetails.length)return e=t.items.map((e=>e.value)),e}const n={};return Object.keys(t).forEach((e=>{const r=t[e];void 0!==r.get?Object.defineProperty(n,r.name,{get:()=>vt(r.get.id,r.get.commandSet,r.get.command,r.get.buffer),set:function(e){return St(r.set.id,r.set.commandSet,r.set.command,r.set.buffer,r.set.length,r.set.valtype,e),!0}}):void 0!==r.set?Object.defineProperty(n,r.name,{get:()=>r.value,set:function(e){return St(r.set.id,r.set.commandSet,r.set.command,r.set.buffer,r.set.length,r.set.valtype,e),!0}}):n[r.name]=r.value})),n}(t,n);const o=null!=e.arguments?e.arguments.map((e=>JSON.stringify(e.value))):[],a=`const fn = ${e.functionDeclaration}; return fn.apply(proxy, [${o}]);`,s=new Function("proxy",a)(r);if(void 0===s)return{type:"undefined"};if(Object(s)!==s)return"object"==typeof s&&null==s?{type:typeof s,subtype:`${s}`,value:null}:{type:typeof s,description:`${s}`,value:`${s}`};if(e.returnByValue&&null==s.subtype)return{type:"object",value:s};if(Object.getPrototypeOf(s)==Array.prototype){const e=Lt(s);return{type:"object",subtype:"array",className:"Array",description:`Array(${s.length})`,objectId:e}}return void 0!==s.value||void 0!==s.subtype?s:s==r?{type:"object",className:"Object",description:"Object",objectId:t}:{type:"object",className:"Object",description:"Object",objectId:Lt(s)}}function $t(e,t={}){return function(e,t){if(!(e in bt))throw new Error(`Could not find any object with id ${e}`);const n=bt[e],r=Object.getOwnPropertyDescriptors(n);t.accessorPropertiesOnly&&Object.keys(r).forEach((e=>{void 0===r[e].get&&Reflect.deleteProperty(r,e)}));const o=[];return Object.keys(r).forEach((e=>{let t;const n=r[e];t="object"==typeof n.value?Object.assign({name:e},n):void 0!==n.value?{name:e,value:Object.assign({type:typeof n.value,description:""+n.value},n)}:void 0!==n.get?{name:e,get:{className:"Function",description:`get ${e} () {}`,type:"function"}}:{name:e,value:{type:"symbol",value:"",description:""}},o.push(t)})),{__value_as_json_string__:JSON.stringify(o)}}(`dotnet:cfo_res:${e}`,t)}function Lt(e){const t="dotnet:cfo_res:"+yt++;return bt[t]=e,t}function Rt(e){e in bt&&delete bt[e]}function Bt(){if(ot.enablePerfMeasure)return globalThis.performance.now()}function Nt(e,t,n){if(ot.enablePerfMeasure&&e){const r=tt?{start:e}:{startTime:e},o=n?`${t}${n} `:t;globalThis.performance.measure(o,r)}}const Ct=[],Ot=new Map;function Dt(e,t,n){if(0===t||1===t||2===t||26===t)return;let r,o,a,s;o=Yr(Rn(e)),a=Yr(Bn(e)),s=Yr(Nn(e));const i=Ln(e);r=Ft(i),19===t&&(t=i);const c=Ft(t),l=Rn(e),p=n*Un;return e=>c(e+p,l,r,o,a,s)}function Ft(e){if(0===e||1===e)return;const t=yn.get(e);return t&&"function"==typeof t||ut(!1,`ERR41: Unknown converter for type ${e}. ${Xr}`),t}function Mt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),L(e)}(e)}function Pt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),R(e)}(e)}function Vt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),B(e)}(e)}function zt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),M(e)}(e)}function Ht(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),P(e)}(e)}function Wt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),q(e)}(e)}function qt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),H(e)}(e)}function Gt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),W(e)}(e)}function Jt(e){return 0==Dn(e)?null:function(e){return e||ut(!1,"Null arg"),q(e)}(e)}function Xt(e){return 0==Dn(e)?null:Pn(e)}function Qt(){return null}function Yt(e){return 0===Dn(e)?null:function(e){e||ut(!1,"Null arg");const t=q(e);return new Date(t)}(e)}function Zt(e,t,n,r,o,a){if(0===Dn(e))return null;const s=Jn(e);let i=Vr(s);return null==i&&(i=(e,t,i)=>function(e,t,n,r,o,a,s,i){at.assert_runtime_running();const c=Xe.stackSave();try{const c=xn(6),l=In(c,2);if(Mn(l,14),Xn(l,e),a&&a(In(c,3),t),s&&s(In(c,4),n),i&&i(In(c,5),r),gn(mn.CallDelegate,c),o)return o(In(c,1))}finally{Xe.stackRestore(c)}}(s,e,t,i,n,r,o,a),i.dispose=()=>{i.isDisposed||(i.isDisposed=!0,Fr(i,s))},i.isDisposed=!1,Dr(i,s)),i}class Kt{constructor(e,t){this.promise=e,this.resolve_or_reject=t}}function en(e,t,n){const r=Dn(e);30==r&&ut(!1,"Unexpected Task type: TaskPreCreated");const o=rn(e,r,n);if(!1!==o)return o;const a=qn(e),s=on(n);return function(e,t){dr(),vr[0-t]=e,Object.isExtensible(e)&&(e[Rr]=t)}(s,a),s.promise}function tn(e,t,n){const r=on(n);return Gn(e,Cr(r)),Mn(e,30),r.promise}function nn(e,t,n){const r=In(e,1),o=Dn(r);if(30===o)return n;Or(Cr(n));const a=rn(r,o,t);return!1===a&&ut(!1,`Expected synchronous result, got: ${o}`),a}function rn(e,t,n){if(0===t)return null;if(29===t)return Promise.reject(sn(e));if(28===t){const t=Fn(e);if(1===t)return Promise.resolve();Mn(e,t),n||(n=yn.get(t)),n||ut(!1,`Unknown sub_converter for type ${t}. ${Xr}`);const r=n(e);return Promise.resolve(r)}return!1}function on(e){const{promise:t,promise_control:n}=at.createPromiseController();return new Kt(t,((t,r,o)=>{if(29===t){const e=sn(o);n.reject(e)}else if(28===t){const t=Dn(o);if(1===t)n.resolve(void 0);else{e||(e=yn.get(t)),e||ut(!1,`Unknown sub_converter for type ${t}. ${Xr}`);const r=e(o);n.resolve(r)}}else ut(!1,`Unexpected type ${t}`);Or(r)}))}function an(e){if(0==Dn(e))return null;{const t=Qn(e);try{return Le(t)}finally{t.release()}}}function sn(e){const t=Dn(e);if(0==t)return null;if(27==t)return Nr(qn(e));const n=Jn(e);let r=Vr(n);if(null==r){const t=an(e);r=new ManagedError(t),Dr(r,n)}return r}function cn(e){if(0==Dn(e))return null;const t=qn(e),n=Nr(t);return void 0===n&&ut(!1,`JS object JSHandle ${t} was not found`),n}function ln(e){const t=Dn(e);if(0==t)return null;if(13==t)return Nr(qn(e));if(21==t)return un(e,Fn(e));if(14==t){const t=Jn(e);if(t===p)return null;let n=Vr(t);return n||(n=new ManagedObject,Dr(n,t)),n}const n=yn.get(t);return n||ut(!1,`Unknown converter for type ${t}. ${Xr}`),n(e)}function pn(e,t){return t||ut(!1,"Expected valid element_type parameter"),un(e,t)}function un(e,t){if(0==Dn(e))return null;-1==Kn(t)&&ut(!1,`Element type ${t} not supported`);const n=Pn(e),r=Yn(e);let a=null;if(15==t){a=new Array(r);for(let e=0;e>2,(n>>2)+r).slice();else{if(10!=t)throw new Error(`NotImplementedException ${t}. ${Xr}`);a=te().subarray(n>>3,(n>>3)+r).slice()}return Xe._free(n),a}function dn(e,t){t||ut(!1,"Expected valid element_type parameter");const n=Pn(e),r=Yn(e);let o=null;if(4==t)o=new Span(n,r,0);else if(7==t)o=new Span(n,r,1);else{if(10!=t)throw new Error(`NotImplementedException ${t}. ${Xr}`);o=new Span(n,r,2)}return o}function fn(e,t){t||ut(!1,"Expected valid element_type parameter");const n=Pn(e),r=Yn(e);let o=null;if(4==t)o=new ArraySegment(n,r,0);else if(7==t)o=new ArraySegment(n,r,1);else{if(10!=t)throw new Error(`NotImplementedException ${t}. ${Xr}`);o=new ArraySegment(n,r,2)}return Dr(o,Jn(e)),o}const _n={pthreadId:0,reuseCount:0,updateCount:0,threadPrefix:" - ",threadName:"emscripten-loaded"},mn={};function hn(e,t,n,r){if(dr(),o.mono_wasm_invoke_jsexport(t,n),An(n))throw sn(In(n,0))}function gn(e,t){if(dr(),o.mono_wasm_invoke_jsexport(e,t),An(t))throw sn(In(t,0))}function bn(e){const t=o.mono_wasm_assembly_find_method(ot.runtime_interop_exports_class,e,-1);if(!t)throw"Can't find method "+ot.runtime_interop_namespace+"."+ot.runtime_interop_exports_classname+"."+e;return t}const yn=new Map,wn=new Map,kn=Symbol.for("wasm bound_cs_function"),Sn=Symbol.for("wasm bound_js_function"),vn=Symbol.for("wasm imported_js_function"),Un=32,En=32,Tn=32;function xn(e){const t=Un*e,n=Xe.stackAlloc(t);return _(n,t),n}function In(e,t){return e||ut(!1,"Null args"),e+t*Un}function An(e){return e||ut(!1,"Null args"),0!==Dn(e)}function jn(e,t){return e||ut(!1,"Null signatures"),e+t*En+Tn}function $n(e){return e||ut(!1,"Null sig"),R(e+0)}function Ln(e){return e||ut(!1,"Null sig"),R(e+16)}function Rn(e){return e||ut(!1,"Null sig"),R(e+20)}function Bn(e){return e||ut(!1,"Null sig"),R(e+24)}function Nn(e){return e||ut(!1,"Null sig"),R(e+28)}function Cn(e){return e||ut(!1,"Null signatures"),P(e+4)}function On(e){return e||ut(!1,"Null signatures"),P(e+0)}function Dn(e){return e||ut(!1,"Null arg"),R(e+12)}function Fn(e){return e||ut(!1,"Null arg"),R(e+13)}function Mn(e,t){e||ut(!1,"Null arg"),g(e+12,t)}function Pn(e){return e||ut(!1,"Null arg"),P(e)}function Vn(e,t){if(e||ut(!1,"Null arg"),"boolean"!=typeof t)throw new Error(`Assert failed: Value is not a Boolean: ${t} (${typeof t})`);h(e,t)}function zn(e,t){e||ut(!1,"Null arg"),v(e,t)}function Hn(e,t){e||ut(!1,"Null arg"),A(e,t.getTime())}function Wn(e,t){e||ut(!1,"Null arg"),A(e,t)}function qn(e){return e||ut(!1,"Null arg"),P(e+4)}function Gn(e,t){e||ut(!1,"Null arg"),v(e+4,t)}function Jn(e){return e||ut(!1,"Null arg"),P(e+4)}function Xn(e,t){e||ut(!1,"Null arg"),v(e+4,t)}function Qn(e){return e||ut(!1,"Null arg"),function(e){let t;if(!e)throw new Error("address must be a location in the native heap");return pe.length>0?(t=pe.pop(),t._set_address(e)):t=new fe(e),t}(e)}function Yn(e){return e||ut(!1,"Null arg"),P(e+8)}function Zn(e,t){e||ut(!1,"Null arg"),v(e+8,t)}class ManagedObject{dispose(){Fr(this,p)}get isDisposed(){return this[Lr]===p}toString(){return`CsObject(gc_handle: ${this[Lr]})`}}class ManagedError extends Error{constructor(e){super(e),this.superStack=Object.getOwnPropertyDescriptor(this,"stack"),Object.defineProperty(this,"stack",{get:this.getManageStack})}getSuperStack(){if(this.superStack){if(void 0!==this.superStack.value)return this.superStack.value;if(void 0!==this.superStack.get)return this.superStack.get.call(this)}return super.stack}getManageStack(){if(this.managed_stack)return this.managed_stack;if(!at.is_runtime_running())return this.managed_stack="... omitted managed stack trace.\n"+this.getSuperStack(),this.managed_stack;{const e=this[Lr];if(e!==p){const t=function(e){at.assert_runtime_running();const t=Xe.stackSave();try{const t=xn(3),n=In(t,2);return Mn(n,16),Xn(n,e),gn(mn.GetManagedStackTrace,t),an(In(t,1))}finally{Xe.stackRestore(t)}}(e);if(t)return this.managed_stack=t+"\n"+this.getSuperStack(),this.managed_stack}}return this.getSuperStack()}dispose(){Fr(this,p)}get isDisposed(){return this[Lr]===p}}function Kn(e){return 4==e?1:7==e?4:8==e||10==e?8:15==e||14==e||13==e?Un:-1}class er{constructor(e,t,n){this._pointer=e,this._length=t,this._viewType=n}_unsafe_create_view(){const e=0==this._viewType?new Uint8Array(Y().buffer,this._pointer,this._length):1==this._viewType?new Int32Array(X().buffer,this._pointer,this._length):2==this._viewType?new Float64Array(te().buffer,this._pointer,this._length):null;if(!e)throw new Error("NotImplementedException");return e}set(e,t){if(this.isDisposed)throw new Error("Assert failed: ObjectDisposedException");const n=this._unsafe_create_view();if(!e||!n||e.constructor!==n.constructor)throw new Error(`Assert failed: Expected ${n.constructor}`);n.set(e,t)}copyTo(e,t){if(this.isDisposed)throw new Error("Assert failed: ObjectDisposedException");const n=this._unsafe_create_view();if(!e||!n||e.constructor!==n.constructor)throw new Error(`Assert failed: Expected ${n.constructor}`);const r=n.subarray(t);e.set(r)}slice(e,t){if(this.isDisposed)throw new Error("Assert failed: ObjectDisposedException");return this._unsafe_create_view().slice(e,t)}get length(){if(this.isDisposed)throw new Error("Assert failed: ObjectDisposedException");return this._length}get byteLength(){if(this.isDisposed)throw new Error("Assert failed: ObjectDisposedException");return 0==this._viewType?this._length:1==this._viewType?this._length<<2:2==this._viewType?this._length<<3:0}}class Span extends er{constructor(e,t,n){super(e,t,n),this.is_disposed=!1}dispose(){this.is_disposed=!0}get isDisposed(){return this.is_disposed}}class ArraySegment extends er{constructor(e,t,n){super(e,t,n)}dispose(){Fr(this,p)}get isDisposed(){return this[Lr]===p}}const tr=[null];function nr(e){const t=e.args_count,r=e.arg_marshalers,o=e.res_converter,a=e.arg_cleanup,s=e.has_cleanup,i=e.fn,c=e.fqn;return e=null,function(l){const p=Bt();try{n&&e.isDisposed;const c=new Array(t);for(let e=0;e{const o=await n;return r&&(pr.set(e,o),at.diagnosticTracing&&De(`imported ES6 module '${e}' from '${t}'`)),o}))}function dr(){at.assert_runtime_running(),ot.mono_wasm_bindings_is_ready||ut(!1,"The runtime must be initialized.")}function fr(e){e()}const _r="function"==typeof globalThis.WeakRef;function mr(e){return _r?new WeakRef(e):function(e){return{deref:()=>e,dispose:()=>{e=null}}}(e)}function hr(e,t,n,r,o,a,s){const i=`[${t}] ${n}.${r}:${o}`,c=Bt();at.diagnosticTracing&&De(`Binding [JSExport] ${n}.${r}:${o} from ${t} assembly`);const l=On(s);2!==l&&ut(!1,`Signature version ${l} mismatch.`);const p=Cn(s),u=new Array(p);for(let e=0;e0}function $r(e){return e<-1}wr&&(kr=new globalThis.FinalizationRegistry(Pr));const Lr=Symbol.for("wasm js_owned_gc_handle"),Rr=Symbol.for("wasm cs_owned_js_handle"),Br=Symbol.for("wasm do_not_force_dispose");function Nr(e){return jr(e)?Sr[e]:Ar(e)?vr[0-e]:null}function Cr(e){if(dr(),e[Rr])return e[Rr];const t=Ur.length?Ur.pop():Er++;return Sr[t]=e,Object.isExtensible(e)&&(e[Rr]=t),t}function Or(e){let t;jr(e)?(t=Sr[e],Sr[e]=void 0,Ur.push(e)):Ar(e)&&(t=vr[0-e],vr[0-e]=void 0),null==t&&ut(!1,"ObjectDisposedException"),void 0!==t[Rr]&&(t[Rr]=void 0)}function Dr(e,t){dr(),e[Lr]=t,wr&&kr.register(e,t,e);const n=mr(e);Tr.set(t,n)}function Fr(e,t,r){var o;dr(),e&&(t=e[Lr],e[Lr]=p,wr&&kr.unregister(e)),t!==p&&Tr.delete(t)&&!r&&at.is_runtime_running()&&!zr&&function(e){e||ut(!1,"Must be valid gc_handle"),at.assert_runtime_running();const t=Xe.stackSave();try{const t=xn(3),r=In(t,2);Mn(r,14),Xn(r,e),n&&!$r(e)&&_n.isUI||gn(mn.ReleaseJSOwnedObjectByGCHandle,t)}finally{Xe.stackRestore(t)}}(t),$r(t)&&(o=t,xr.push(o))}function Mr(e){const t=e[Lr];if(t==p)throw new Error("Assert failed: ObjectDisposedException");return t}function Pr(e){at.is_runtime_running()&&Fr(null,e)}function Vr(e){if(!e)return null;const t=Tr.get(e);return t?t.deref():null}let zr=!1;function Hr(e,t){let n=!1,r=!1;zr=!0;let o=0,a=0,s=0,i=0;const c=[...Tr.keys()];for(const e of c){const r=Tr.get(e),o=r&&r.deref();if(wr&&o&&kr.unregister(o),o){const a="boolean"==typeof o[Br]&&o[Br];if(t&&Me(`Proxy of C# ${typeof o} with GCHandle ${e} was still alive. ${a?"keeping":"disposing"}.`),a)n=!0;else{const t=at.getPromiseController(o);t&&t.reject(new Error("WebWorker which is origin of the Task is being terminated.")),"function"==typeof o.dispose&&o.dispose(),o[Lr]===e&&(o[Lr]=p),!_r&&r&&r.dispose(),s++}}}n||(Tr.clear(),wr&&(kr=new globalThis.FinalizationRegistry(Pr)));const l=(e,n)=>{const o=n[e],a=o&&"boolean"==typeof o[Br]&&o[Br];if(a||(n[e]=void 0),o)if(t&&Me(`Proxy of JS ${typeof o} with JSHandle ${e} was still alive. ${a?"keeping":"disposing"}.`),a)r=!0;else{const t=at.getPromiseController(o);t&&t.reject(new Error("WebWorker which is origin of the Task is being terminated.")),"function"==typeof o.dispose&&o.dispose(),o[Rr]===e&&(o[Rr]=void 0),i++}};for(let e=0;en.resolve(e))).catch((e=>n.reject(e))),t}const Gr=Symbol.for("wasm promise_holder");class Jr extends ManagedObject{constructor(e,t,n,r){super(),this.promise=e,this.gc_handle=t,this.promiseHolderPtr=n,this.res_converter=r,this.isResolved=!1,this.isPosted=!1,this.isPostponed=!1,this.data=null,this.reason=void 0}setIsResolving(){return!0}resolve(e){at.is_runtime_running()?(this.isResolved&&ut(!1,"resolve could be called only once"),this.isDisposed&&ut(!1,"resolve is already disposed."),this.isResolved=!0,this.complete_task_wrapper(e,null)):at.diagnosticTracing&&De("This promise resolution can't be propagated to managed code, mono runtime already exited.")}reject(e){at.is_runtime_running()?(e||(e=new Error),this.isResolved&&ut(!1,"reject could be called only once"),this.isDisposed&&ut(!1,"resolve is already disposed."),e[Gr],this.isResolved=!0,this.complete_task_wrapper(null,e)):at.diagnosticTracing&&De("This promise rejection can't be propagated to managed code, mono runtime already exited.")}cancel(){if(at.is_runtime_running())if(this.isResolved&&ut(!1,"cancel could be called only once"),this.isDisposed&&ut(!1,"resolve is already disposed."),this.isPostponed)this.isResolved=!0,void 0!==this.reason?this.complete_task_wrapper(null,this.reason):this.complete_task_wrapper(this.data,null);else{const e=this.promise;at.assertIsControllablePromise(e);const t=at.getPromiseController(e),n=new Error("OperationCanceledException");n[Gr]=this,t.reject(n)}else at.diagnosticTracing&&De("This promise cancelation can't be propagated to managed code, mono runtime already exited.")}complete_task_wrapper(e,t){try{this.isPosted&&ut(!1,"Promise is already posted to managed."),this.isPosted=!0,Fr(this,this.gc_handle,!0),function(e,t,n,r){at.assert_runtime_running();const o=Xe.stackSave();try{const o=xn(5),a=In(o,2);Mn(a,14),Xn(a,e);const s=In(o,3);if(t)ho(s,t);else{Mn(s,0);const e=In(o,4);r||ut(!1,"res_converter missing"),r(e,n)}hn(ot.ioThreadTID,mn.CompleteTask,o)}finally{Xe.stackRestore(o)}}(this.gc_handle,t,e,this.res_converter||bo)}catch(e){try{at.mono_exit(1,e)}catch(e){}}}}const Xr="For more information see https://aka.ms/dotnet-wasm-jsinterop";function Qr(e,t,n){if(0===t||1===t||2===t||26===t)return;let r,o,a,s;o=Ft(Rn(e)),a=Ft(Bn(e)),s=Ft(Nn(e));const i=Ln(e);r=Yr(i),19===t&&(t=i);const c=Yr(t),l=Rn(e),p=n*Un;return(e,t)=>{c(e+p,t,l,r,o,a,s)}}function Yr(e){if(0===e||1===e)return;const t=wn.get(e);return t&&"function"==typeof t||ut(!1,`ERR30: Unknown converter for type ${e}`),t}function Zr(e,t){null==t?Mn(e,0):(Mn(e,3),Vn(e,t))}function Kr(e,t){null==t?Mn(e,0):(Mn(e,4),function(e,t){e||ut(!1,"Null arg"),g(e,t)}(e,t))}function eo(e,t){null==t?Mn(e,0):(Mn(e,5),function(e,t){e||ut(!1,"Null arg"),b(e,t)}(e,t))}function to(e,t){null==t?Mn(e,0):(Mn(e,6),function(e,t){e||ut(!1,"Null arg"),S(e,t)}(e,t))}function no(e,t){null==t?Mn(e,0):(Mn(e,7),function(e,t){e||ut(!1,"Null arg"),v(e,t)}(e,t))}function ro(e,t){null==t?Mn(e,0):(Mn(e,8),function(e,t){if(e||ut(!1,"Null arg"),!Number.isSafeInteger(t))throw new Error(`Assert failed: Value is not an integer: ${t} (${typeof t})`);A(e,t)}(e,t))}function oo(e,t){null==t?Mn(e,0):(Mn(e,9),function(e,t){e||ut(!1,"Null arg"),x(e,t)}(e,t))}function ao(e,t){null==t?Mn(e,0):(Mn(e,10),Wn(e,t))}function so(e,t){null==t?Mn(e,0):(Mn(e,11),function(e,t){e||ut(!1,"Null arg"),I(e,t)}(e,t))}function io(e,t){null==t?Mn(e,0):(Mn(e,12),zn(e,t))}function co(e,t){if(null==t)Mn(e,0);else{if(!(t instanceof Date))throw new Error("Assert failed: Value is not a Date");Mn(e,17),Hn(e,t)}}function lo(e,t){if(null==t)Mn(e,0);else{if(!(t instanceof Date))throw new Error("Assert failed: Value is not a Date");Mn(e,18),Hn(e,t)}}function po(e,t){if(null==t)Mn(e,0);else{if(Mn(e,15),"string"!=typeof t)throw new Error("Assert failed: Value is not a String");uo(e,t)}}function uo(e,t){{const n=Qn(e);try{!function(e,t){if(t.clear(),null!==e)if("symbol"==typeof e)Re(e,t);else{if("string"!=typeof e)throw new Error("Expected string argument, got "+typeof e);if(0===e.length)Re(e,t);else{if(e.length<=256){const n=_e.get(e);if(n)return void t.set(n)}Be(e,t)}}}(t,n)}finally{n.release()}}}function fo(e){Mn(e,0)}function _o(e,t,r,o,a,s,i){if(null==t)return void Mn(e,0);if(!(t&&t instanceof Function))throw new Error("Assert failed: Value is not a Function");const c=function(e){const r=In(e,0),l=In(e,1),p=In(e,2),u=In(e,3),d=In(e,4),f=ot.isPendingSynchronousCall;try{let e,r,f;n&&c.isDisposed,a&&(e=a(p)),s&&(r=s(u)),i&&(f=i(d)),ot.isPendingSynchronousCall=!0;const _=t(e,r,f);o&&o(l,_)}catch(e){ho(r,e)}finally{ot.isPendingSynchronousCall=f}};c[Sn]=!0,c.isDisposed=!1,c.dispose=()=>{c.isDisposed=!0},Gn(e,Cr(c)),Mn(e,25)}function mo(e,t,n,r){const o=30==Dn(e);if(null==t)return void Mn(e,0);if(!Wr(t))throw new Error("Assert failed: Value is not a Promise");const a=o?Jn(e):xr.length?xr.pop():Ir--;o||(Xn(e,a),Mn(e,20));const s=new Jr(t,a,0,r);Dr(s,a),t.then((e=>s.resolve(e)),(e=>s.reject(e)))}function ho(e,t){if(null==t)Mn(e,0);else if(t instanceof ManagedError)Mn(e,16),Xn(e,Mr(t));else{if("object"!=typeof t&&"string"!=typeof t)throw new Error("Assert failed: Value is not an Error "+typeof t);Mn(e,27),uo(e,t.toString());const n=t[Rr];Gn(e,n||Cr(t))}}function go(e,t){if(null==t)Mn(e,0);else{if(void 0!==t[Lr])throw new Error(`Assert failed: JSObject proxy of ManagedObject proxy is not supported. ${Xr}`);if("function"!=typeof t&&"object"!=typeof t)throw new Error(`Assert failed: JSObject proxy of ${typeof t} is not supported`);Mn(e,13),Gn(e,Cr(t))}}function bo(e,t){if(null==t)Mn(e,0);else{const n=t[Lr],r=typeof t;if(void 0===n)if("string"===r||"symbol"===r)Mn(e,15),uo(e,t);else if("number"===r)Mn(e,10),Wn(e,t);else{if("bigint"===r)throw new Error("NotImplementedException: bigint");if("boolean"===r)Mn(e,3),Vn(e,t);else if(t instanceof Date)Mn(e,17),Hn(e,t);else if(t instanceof Error)ho(e,t);else if(t instanceof Uint8Array)wo(e,t,4);else if(t instanceof Float64Array)wo(e,t,10);else if(t instanceof Int32Array)wo(e,t,7);else if(Array.isArray(t))wo(e,t,14);else{if(t instanceof Int16Array||t instanceof Int8Array||t instanceof Uint8ClampedArray||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Float32Array)throw new Error("NotImplementedException: TypedArray");if(Wr(t))mo(e,t);else{if(t instanceof Span)throw new Error("NotImplementedException: Span");if("object"!=r)throw new Error(`JSObject proxy is not supported for ${r} ${t}`);{const n=Cr(t);Mn(e,13),Gn(e,n)}}}}else{if(Mr(t),t instanceof ArraySegment)throw new Error("NotImplementedException: ArraySegment. "+Xr);if(t instanceof ManagedError)Mn(e,16),Xn(e,n);else{if(!(t instanceof ManagedObject))throw new Error("NotImplementedException "+r+". "+Xr);Mn(e,14),Xn(e,n)}}}}function yo(e,t,n){n||ut(!1,"Expected valid element_type parameter"),wo(e,t,n)}function wo(e,t,n){if(null==t)Mn(e,0);else{const r=Kn(n);-1==r&&ut(!1,`Element type ${n} not supported`);const a=t.length,s=r*a,i=Xe._malloc(s);if(15==n){if(!Array.isArray(t))throw new Error("Assert failed: Value is not an Array");_(i,s),o.mono_wasm_register_root(i,s,"marshal_array_to_cs");for(let e=0;e>2,(i>>2)+a).set(t)}else{if(10!=n)throw new Error("not implemented");if(!(Array.isArray(t)||t instanceof Float64Array))throw new Error("Assert failed: Value is not an Array or Float64Array");te().subarray(i>>3,(i>>3)+a).set(t)}zn(e,i),Mn(e,21),function(e,t){e||ut(!1,"Null arg"),g(e+13,t)}(e,n),Zn(e,t.length)}}function ko(e,t,n){if(n||ut(!1,"Expected valid element_type parameter"),t.isDisposed)throw new Error("Assert failed: ObjectDisposedException");vo(n,t._viewType),Mn(e,23),zn(e,t._pointer),Zn(e,t.length)}function So(e,t,n){n||ut(!1,"Expected valid element_type parameter");const r=Mr(t);r||ut(!1,"Only roundtrip of ArraySegment instance created by C#"),vo(n,t._viewType),Mn(e,22),zn(e,t._pointer),Zn(e,t.length),Xn(e,r)}function vo(e,t){if(4==e){if(0!=t)throw new Error("Assert failed: Expected MemoryViewType.Byte")}else if(7==e){if(1!=t)throw new Error("Assert failed: Expected MemoryViewType.Int32")}else{if(10!=e)throw new Error(`NotImplementedException ${e} `);if(2!=t)throw new Error("Assert failed: Expected MemoryViewType.Double")}}const Uo={now:function(){return Date.now()}};function Eo(e){void 0===globalThis.performance&&(globalThis.performance=Uo),e.require=Qe.require,e.scriptDirectory=at.scriptDirectory,Xe.locateFile===Xe.__locateFile&&(Xe.locateFile=at.locateFile),e.fetch=at.fetch_like,e.ENVIRONMENT_IS_WORKER=et}function To(){if("function"!=typeof globalThis.fetch||"function"!=typeof globalThis.AbortController)throw new Error(Ye?"Please install `node-fetch` and `node-abort-controller` npm packages to enable HTTP client support. See also https://aka.ms/dotnet-wasm-features":"This browser doesn't support fetch API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features")}let xo,Io;function Ao(){if(void 0!==xo)return xo;if("undefined"!=typeof Request&&"body"in Request.prototype&&"function"==typeof ReadableStream&&"function"==typeof TransformStream){let e=!1;const t=new Request("",{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");xo=e&&!t}else xo=!1;return xo}function jo(){return void 0!==Io||(Io="undefined"!=typeof Response&&"body"in Response.prototype&&"function"==typeof ReadableStream),Io}function $o(){return To(),dr(),{abortController:new AbortController}}function Lo(e){e.catch((e=>{e&&"AbortError"!==e&&"AbortError"!==e.name&&Xe.err("Unexpected error: "+e)}))}function Ro(e){try{e.isAborted||(e.streamWriter&&(Lo(e.streamWriter.abort()),e.isAborted=!0),e.streamReader&&(Lo(e.streamReader.cancel()),e.isAborted=!0)),e.isAborted||e.abortController.abort("AbortError")}catch(e){}}function Bo(e,t,n){n>0||ut(!1,"expected bufferLength > 0");const r=new Span(t,n,0).slice();return qr((async()=>{e.streamWriter||ut(!1,"expected streamWriter"),e.responsePromise||ut(!1,"expected fetch promise");try{await e.streamWriter.ready,await e.streamWriter.write(r)}catch(e){throw new Error("BrowserHttpWriteStream.Rejected")}}))}function No(e){return e||ut(!1,"expected controller"),qr((async()=>{e.streamWriter||ut(!1,"expected streamWriter"),e.responsePromise||ut(!1,"expected fetch promise");try{await e.streamWriter.ready,await e.streamWriter.close()}catch(e){throw new Error("BrowserHttpWriteStream.Rejected")}}))}function Co(e,t,n,r,o,a){const s=new TransformStream;return e.streamWriter=s.writable.getWriter(),Lo(e.streamWriter.closed),Lo(e.streamWriter.ready),Do(e,t,n,r,o,a,s.readable)}function Oo(e,t,n,r,o,a,s,i){return Do(e,t,n,r,o,a,new Span(s,i,0).slice())}function Do(e,t,n,r,o,a,s){To(),dr(),t&&"string"==typeof t||ut(!1,"expected url string"),n&&r&&Array.isArray(n)&&Array.isArray(r)&&n.length===r.length||ut(!1,"expected headerNames and headerValues arrays"),o&&a&&Array.isArray(o)&&Array.isArray(a)&&o.length===a.length||ut(!1,"expected headerNames and headerValues arrays");const i=new Headers;for(let e=0;eat.fetch_like(t,c))),e.responsePromise.then((t=>{if(e.response=t,e.responseHeaderNames=[],e.responseHeaderValues=[],t.headers&&t.headers.entries){const n=t.headers.entries();for(const t of n)e.responseHeaderNames.push(t[0]),e.responseHeaderValues.push(t[1])}})).catch((()=>{})),e.responsePromise}function Fo(e){var t;return null===(t=e.response)||void 0===t?void 0:t.type}function Mo(e){var t,n;return null!==(n=null===(t=e.response)||void 0===t?void 0:t.status)&&void 0!==n?n:0}function Po(e){return e.responseHeaderNames||ut(!1,"expected responseHeaderNames"),e.responseHeaderNames}function Vo(e){return e.responseHeaderValues||ut(!1,"expected responseHeaderValues"),e.responseHeaderValues}function zo(e){return qr((async()=>{const t=await e.response.arrayBuffer();return e.responseBuffer=t,e.currentBufferOffset=0,t.byteLength}))}function Ho(e,t){if(e||ut(!1,"expected controller"),e.responseBuffer||ut(!1,"expected resoved arrayBuffer"),null==e.currentBufferOffset&&ut(!1,"expected currentBufferOffset"),e.currentBufferOffset==e.responseBuffer.byteLength)return 0;const n=new Uint8Array(e.responseBuffer,e.currentBufferOffset);t.set(n,0);const r=Math.min(t.byteLength,n.byteLength);return e.currentBufferOffset+=r,r}function Wo(e,t,n){const r=new Span(t,n,0);return qr((async()=>{if(e.response||ut(!1,"expected response"),e.streamReader||(e.streamReader=e.response.body.getReader()),e.currentStreamReaderChunk&&void 0!==e.currentBufferOffset||(e.currentStreamReaderChunk=await e.streamReader.read(),e.currentBufferOffset=0),e.currentStreamReaderChunk.done){if(e.isAborted)throw new Error("OperationCanceledException");return 0}const t=e.currentStreamReaderChunk.value.byteLength-e.currentBufferOffset;t>0||ut(!1,"expected remaining_source to be greater than 0");const n=Math.min(t,r.byteLength),o=e.currentStreamReaderChunk.value.subarray(e.currentBufferOffset,e.currentBufferOffset+n);return r.set(o,0),e.currentBufferOffset+=n,t==n&&(e.currentStreamReaderChunk=void 0),n}))}let qo,Go=0,Jo=0;function Xo(){if(!at.isChromium)return;const e=(new Date).valueOf(),t=e+36e4;for(let n=Math.max(e+1e3,Go);n0;){if(--Jo,!at.is_runtime_running())return;o.mono_background_exec()}}catch(e){at.mono_exit(1,e)}}function mono_wasm_schedule_timer_tick(){if(Xe.maybeExit(),at.is_runtime_running()){qo=void 0;try{o.mono_wasm_execute_timer(),Jo++}catch(e){at.mono_exit(1,e)}}}class Zo{constructor(){this.queue=[],this.offset=0}getLength(){return this.queue.length-this.offset}isEmpty(){return 0==this.queue.length}enqueue(e){this.queue.push(e)}dequeue(){if(0===this.queue.length)return;const e=this.queue[this.offset];return this.queue[this.offset]=null,2*++this.offset>=this.queue.length&&(this.queue=this.queue.slice(this.offset),this.offset=0),e}peek(){return this.queue.length>0?this.queue[this.offset]:void 0}drain(e){for(;this.getLength();)e(this.dequeue())}}const Ko=Symbol.for("wasm ws_pending_send_buffer"),ea=Symbol.for("wasm ws_pending_send_buffer_offset"),ta=Symbol.for("wasm ws_pending_send_buffer_type"),na=Symbol.for("wasm ws_pending_receive_event_queue"),ra=Symbol.for("wasm ws_pending_receive_promise_queue"),oa=Symbol.for("wasm ws_pending_open_promise"),aa=Symbol.for("wasm wasm_ws_pending_open_promise_used"),sa=Symbol.for("wasm wasm_ws_pending_error"),ia=Symbol.for("wasm ws_pending_close_promises"),ca=Symbol.for("wasm ws_pending_send_promises"),la=Symbol.for("wasm ws_is_aborted"),pa=Symbol.for("wasm wasm_ws_close_sent"),ua=Symbol.for("wasm wasm_ws_close_received"),da=Symbol.for("wasm ws_receive_status_ptr"),fa=65536,_a=new Uint8Array;function ma(e){var t,n;return e.readyState!=WebSocket.CLOSED?null!==(t=e.readyState)&&void 0!==t?t:-1:0==e[na].getLength()?null!==(n=e.readyState)&&void 0!==n?n:-1:WebSocket.OPEN}function ha(e,t,n){let r;!function(){if(nt)throw new Error("WebSockets are not supported in shell JS engine.");if("function"!=typeof globalThis.WebSocket)throw new Error(Ye?"Please install `ws` npm package to enable networking support. See also https://aka.ms/dotnet-wasm-features":"This browser doesn't support WebSocket API. Please use a modern browser. See also https://aka.ms/dotnet-wasm-features")}(),dr(),e&&"string"==typeof e||ut(!1,"ERR12: Invalid uri "+typeof e);try{r=new globalThis.WebSocket(e,t||void 0)}catch(e){throw Me("WebSocket error in ws_wasm_create: "+e.toString()),e}const{promise_control:o}=pt();r[na]=new Zo,r[ra]=new Zo,r[oa]=o,r[ca]=[],r[ia]=[],r[da]=n,r.binaryType="arraybuffer";const a=()=>{try{if(r[la])return;if(!at.is_runtime_running())return;o.resolve(r),Xo()}catch(e){Me("failed to propagate WebSocket open event: "+e.toString())}},s=e=>{try{if(r[la])return;if(!at.is_runtime_running())return;!function(e,t){const n=e[na],r=e[ra];if("string"==typeof t.data)n.enqueue({type:0,data:Te(t.data),offset:0});else{if("ArrayBuffer"!==t.data.constructor.name)throw new Error("ERR19: WebSocket receive expected ArrayBuffer");n.enqueue({type:1,data:new Uint8Array(t.data),offset:0})}if(r.getLength()&&n.getLength()>1)throw new Error("ERR21: Invalid WS state");for(;r.getLength()&&n.getLength();){const t=r.dequeue();va(e,n,t.buffer_ptr,t.buffer_length),t.resolve()}Xo()}(r,e),Xo()}catch(e){Me("failed to propagate WebSocket message event: "+e.toString())}},i=e=>{try{if(r.removeEventListener("message",s),r[la])return;if(!at.is_runtime_running())return;r[ua]=!0,r.close_status=e.code,r.close_status_description=e.reason,r[aa]&&o.reject(new Error(e.reason));for(const e of r[ia])e.resolve();r[ra].drain((e=>{v(n,0),v(n+4,2),v(n+8,1),e.resolve()}))}catch(e){Me("failed to propagate WebSocket close event: "+e.toString())}},c=e=>{try{if(r[la])return;if(!at.is_runtime_running())return;r.removeEventListener("message",s);const t=e.message?"WebSocket error: "+e.message:"WebSocket error";Me(t),r[sa]=t,Sa(r,new Error(t))}catch(e){Me("failed to propagate WebSocket error event: "+e.toString())}};return r.addEventListener("message",s),r.addEventListener("open",a,{once:!0}),r.addEventListener("close",i,{once:!0}),r.addEventListener("error",c,{once:!0}),r.dispose=()=>{r.removeEventListener("message",s),r.removeEventListener("open",a),r.removeEventListener("close",i),r.removeEventListener("error",c),ka(r)},r}function ga(e){if(e||ut(!1,"ERR17: expected ws instance"),e[sa])return Ua(e[sa]);const t=e[oa];return e[aa]=!0,t.promise}function ba(e,t,n,r,o){if(e||ut(!1,"ERR17: expected ws instance"),e[sa])return Ua(e[sa]);if(e[la]||e[pa])return Ua("InvalidState: The WebSocket is not connected.");if(e.readyState==WebSocket.CLOSED)return null;const a=function(e,t,n,r){let o=e[Ko],a=0;const s=t.byteLength;if(o){if(a=e[ea],n=e[ta],0!==s){if(a+s>o.length){const n=new Uint8Array(1.5*(a+s+50));n.set(o,0),n.subarray(a).set(t),e[Ko]=o=n}else o.subarray(a).set(t);a+=s,e[ea]=a}}else r?0!==s&&(o=t,a=s):(0!==s&&(o=t.slice(),a=s,e[ea]=a,e[Ko]=o),e[ta]=n);return r?0==a||null==o?_a:0===n?function(e){return void 0===ye?Xe.UTF8ArrayToString(e,0,e.byteLength):ye.decode(e)}(Ne(o,0,a)):o.subarray(0,a):null}(e,new Uint8Array(Y().buffer,t,n),r,o);return o&&a?function(e,t){if(e.send(t),e[Ko]=null,e.bufferedAmount{try{if(0===e.bufferedAmount)r.resolve();else{const t=e.readyState;if(t!=WebSocket.OPEN&&t!=WebSocket.CLOSING)r.reject(new Error(`InvalidState: ${t} The WebSocket is not connected.`));else if(!r.isDone)return globalThis.setTimeout(s,a),void(a=Math.min(1.5*a,1e3))}const t=o.indexOf(r);t>-1&&o.splice(t,1)}catch(e){Me("WebSocket error in web_socket_send_and_wait: "+e.toString()),r.reject(e)}};return globalThis.setTimeout(s,0),n}(e,a):null}function ya(e,t,n){if(e||ut(!1,"ERR18: expected ws instance"),e[sa])return Ua(e[sa]);if(e[la]){const t=e[da];return v(t,0),v(t+4,2),v(t+8,1),null}const r=e[na],o=e[ra];if(r.getLength())return 0!=o.getLength()&&ut(!1,"ERR20: Invalid WS state"),va(e,r,t,n),null;if(e[ua]){const t=e[da];return v(t,0),v(t+4,2),v(t+8,1),null}const{promise:a,promise_control:s}=pt(),i=s;return i.buffer_ptr=t,i.buffer_length=n,o.enqueue(i),a}function wa(e,t,n,r){if(e||ut(!1,"ERR19: expected ws instance"),e[la]||e[pa]||e.readyState==WebSocket.CLOSED)return null;if(e[sa])return Ua(e[sa]);if(e[pa]=!0,r){const{promise:r,promise_control:o}=pt();return e[ia].push(o),"string"==typeof n?e.close(t,n):e.close(t),r}return"string"==typeof n?e.close(t,n):e.close(t),null}function ka(e){if(e||ut(!1,"ERR18: expected ws instance"),!e[la]&&!e[pa]){e[la]=!0,Sa(e,new Error("OperationCanceledException"));try{e.close(1e3,"Connection was aborted.")}catch(e){Me("WebSocket error in ws_wasm_abort: "+e.toString())}}}function Sa(e,t){const n=e[oa],r=e[aa];n&&r&&n.reject(t);for(const n of e[ia])n.reject(t);for(const n of e[ca])n.reject(t);e[ra].drain((e=>{e.reject(t)}))}function va(e,t,n,r){const o=t.peek(),a=Math.min(r,o.data.length-o.offset);if(a>0){const e=o.data.subarray(o.offset,o.offset+a);new Uint8Array(Y().buffer,n,r).set(e,0),o.offset+=a}const s=o.data.length===o.offset?1:0;s&&t.dequeue();const i=e[da];v(i,a),v(i+4,o.type),v(i+8,s)}function Ua(e){return function(e){const{promise:t,promise_control:n}=pt();return e.then((e=>n.resolve(e))).catch((e=>n.reject(e))),t}(Promise.reject(new Error(e)))}function Ea(e,t,n){at.diagnosticTracing&&De(`Loaded:${e.name} as ${e.behavior} size ${n.length} from ${t}`);const r=Bt(),a="string"==typeof e.virtualPath?e.virtualPath:e.name;let s=null;switch(e.behavior){case"dotnetwasm":case"js-module-threads":case"js-module-globalization":case"symbols":case"segmentation-rules":break;case"resource":case"assembly":case"pdb":at._loaded_files.push({url:t,file:a});case"heap":case"icu":s=function(e){const t=e.length+16;let n=Xe._sbrk(t);if(n<=0){if(n=Xe._sbrk(t),n<=0)throw Pe(`sbrk failed to allocate ${t} bytes, and failed upon retry.`),new Error("Out of memory");Me(`sbrk failed to allocate ${t} bytes, but succeeded upon retry!`)}return new Uint8Array(Y().buffer,n,e.length).set(e),n}(n);break;case"vfs":{const e=a.lastIndexOf("/");let t=e>0?a.substring(0,e):null,r=e>0?a.substring(e+1):a;r.startsWith("/")&&(r=r.substring(1)),t?(t.startsWith("/")||(t="/"+t),De(`Creating directory '${t}'`),Xe.FS_createPath("/",t,!0,!0)):t="/",at.diagnosticTracing&&De(`Creating file '${r}' in directory '${t}'`),Xe.FS_createDataFile(t,r,n,!0,!0,!0);break}default:throw new Error(`Unrecognized asset behavior:${e.behavior}, for asset ${e.name}`)}if("assembly"===e.behavior){if(!o.mono_wasm_add_assembly(a,s,n.length)){const e=at._loaded_files.findIndex((e=>e.file==a));at._loaded_files.splice(e,1)}}else"pdb"===e.behavior?o.mono_wasm_add_assembly(a,s,n.length):"icu"===e.behavior?function(e){if(!o.mono_wasm_load_icu_data(e))throw new Error("Failed to load ICU data")}(s):"resource"===e.behavior&&o.mono_wasm_add_satellite_assembly(a,e.culture||"",s,n.length);Nt(r,"mono.instantiateAsset:",e.name),++at.actual_instantiated_assets_count}async function Ta(e){try{const n=await e.pendingDownloadInternal.response;t=await n.text(),ze&&ut(!1,"Another symbol map was already loaded"),ze=t,at.diagnosticTracing&&De(`Deferred loading of ${t.length}ch symbol map`)}catch(t){Fe(`Error loading symbol file ${e.name}: ${JSON.stringify(t)}`)}var t}async function xa(e){try{const t=await e.pendingDownloadInternal.response,n=await t.json();st.setSegmentationRulesFromJson(n)}catch(t){Fe(`Error loading static json asset ${e.name}: ${JSON.stringify(t)}`)}}function Ia(){return at.loadedFiles}const Aa={};function ja(e){let t=Aa[e];if("string"!=typeof t){const n=o.mono_jiterp_get_opcode_info(e,0);Aa[e]=t=xe(n)}return t}const $a=2,La=64,Ra=64,Ba={};class Na{constructor(e){this.locals=new Map,this.permanentFunctionTypeCount=0,this.permanentFunctionTypes={},this.permanentFunctionTypesByShape={},this.permanentFunctionTypesByIndex={},this.functionTypesByIndex={},this.permanentImportedFunctionCount=0,this.permanentImportedFunctions={},this.nextImportIndex=0,this.functions=[],this.estimatedExportBytes=0,this.frame=0,this.traceBuf=[],this.branchTargets=new Set,this.constantSlots=[],this.backBranchOffsets=[],this.callHandlerReturnAddresses=[],this.nextConstantSlot=0,this.backBranchTraceLevel=0,this.compressImportNames=!1,this.lockImports=!1,this._assignParameterIndices=e=>{let t=0;for(const n in e)this.locals.set(n,t),t++;return t},this.stack=[new Ca],this.clear(e),this.cfg=new Oa(this),this.defineType("__cpp_exception",{ptr:127},64,!0)}clear(e){this.options=ps(),this.stackSize=1,this.inSection=!1,this.inFunction=!1,this.lockImports=!1,this.locals.clear(),this.functionTypeCount=this.permanentFunctionTypeCount,this.functionTypes=Object.create(this.permanentFunctionTypes),this.functionTypesByShape=Object.create(this.permanentFunctionTypesByShape),this.functionTypesByIndex=Object.create(this.permanentFunctionTypesByIndex),this.nextImportIndex=0,this.importedFunctionCount=0,this.importedFunctions=Object.create(this.permanentImportedFunctions);for(const e in this.importedFunctions)this.importedFunctions[e].index=void 0;this.functions.length=0,this.estimatedExportBytes=0,this.argumentCount=0,this.current.clear(),this.traceBuf.length=0,this.branchTargets.clear(),this.activeBlocks=0,this.nextConstantSlot=0,this.constantSlots.length=this.options.useConstants?e:0;for(let e=0;e=this.stack.length&&this.stack.push(new Ca),this.current.clear()}_pop(e){if(this.stackSize<=1)throw new Error("Stack empty");const t=this.current;return this.stackSize--,e?(this.appendULeb(t.size),t.copyTo(this.current),null):t.getArrayView(!1).slice(0,t.size)}setImportFunction(e,t){const n=this.importedFunctions[e];if(!n)throw new Error("No import named "+e);n.func=t}getExceptionTag(){const e=Xe.wasmExports.__cpp_exception;return void 0!==e&&(e instanceof WebAssembly.Tag||ut(!1,`expected __cpp_exception export from dotnet.wasm to be WebAssembly.Tag but was ${e}`)),e}getWasmImports(){const e=ot.getMemory();e instanceof WebAssembly.Memory||ut(!1,`expected heap import to be WebAssembly.Memory but was ${e}`);const t=this.getExceptionTag(),n={c:this.getConstants(),m:{h:e}};t&&(n.x={e:t});const r=this.getImportsToEmit();for(let e=0;e>>0||e>255)throw new Error(`Byte out of range: ${e}`);return this.current.appendU8(e)}appendSimd(e,t){return this.current.appendU8(253),0|e||0===e&&!0===t||ut(!1,"Expected non-v128_load simd opcode or allowLoad==true"),this.current.appendULeb(e)}appendAtomic(e,t){return this.current.appendU8(254),0|e||0===e&&!0===t||ut(!1,"Expected non-notify atomic opcode or allowNotify==true"),this.current.appendU8(e)}appendU32(e){return this.current.appendU32(e)}appendF32(e){return this.current.appendF32(e)}appendF64(e){return this.current.appendF64(e)}appendBoundaryValue(e,t){return this.current.appendBoundaryValue(e,t)}appendULeb(e){return this.current.appendULeb(e)}appendLeb(e){return this.current.appendLeb(e)}appendLebRef(e,t){return this.current.appendLebRef(e,t)}appendBytes(e){return this.current.appendBytes(e)}appendName(e){return this.current.appendName(e)}ret(e){this.ip_const(e),this.appendU8(15)}i32_const(e){this.appendU8(65),this.appendLeb(e)}ptr_const(e){let t=this.options.useConstants?this.constantSlots.indexOf(e):-1;this.options.useConstants&&t<0&&this.nextConstantSlot=0?(this.appendU8(35),this.appendLeb(t)):this.i32_const(e)}ip_const(e){this.appendU8(65),this.appendLeb(e-this.base)}i52_const(e){this.appendU8(66),this.appendLeb(e)}v128_const(e){if(0===e)this.local("v128_zero");else{if("object"!=typeof e)throw new Error("Expected v128_const arg to be 0 or a Uint8Array");{16!==e.byteLength&&ut(!1,"Expected v128_const arg to be 16 bytes in size");let t=!0;for(let n=0;n<16;n++)0!==e[n]&&(t=!1);t?this.local("v128_zero"):(this.appendSimd(12),this.appendBytes(e))}}}defineType(e,t,n,r){if(this.functionTypes[e])throw new Error(`Function type ${e} already defined`);if(r&&this.functionTypeCount>this.permanentFunctionTypeCount)throw new Error("New permanent function types cannot be defined after non-permanent ones");let o="";for(const e in t)o+=t[e]+",";o+=n;let a=this.functionTypesByShape[o];"number"!=typeof a&&(a=this.functionTypeCount++,r?(this.permanentFunctionTypeCount++,this.permanentFunctionTypesByShape[o]=a,this.permanentFunctionTypesByIndex[a]=[t,Object.values(t).length,n]):(this.functionTypesByShape[o]=a,this.functionTypesByIndex[a]=[t,Object.values(t).length,n]));const s=[a,t,n,`(${JSON.stringify(t)}) -> ${n}`,r];return r?this.permanentFunctionTypes[e]=s:this.functionTypes[e]=s,a}generateTypeSection(){this.beginSection(1),this.appendULeb(this.functionTypeCount);for(let e=0;ee.index-t.index)),e}_generateImportSection(e){const t=this.getImportsToEmit();if(this.lockImports=!0,!1!==e)throw new Error("function table imports are disabled");const n=void 0!==this.getExceptionTag();this.beginSection(2),this.appendULeb(1+(n?1:0)+t.length+this.constantSlots.length+(!1!==e?1:0));for(let e=0;e0)throw new Error("New permanent imports cannot be defined after any indexes have been assigned");const a=this.functionTypes[n];if(!a)throw new Error("No function type named "+n);if(r&&!a[4])throw new Error("A permanent import must have a permanent function type");const s=a[0],i=r?this.permanentImportedFunctions:this.importedFunctions;if("number"==typeof o&&(o=za().get(o)),"function"!=typeof o&&void 0!==o)throw new Error(`Value passed for imported function ${t} was not a function or valid function pointer or undefined`);return i[t]={index:void 0,typeIndex:s,module:e,name:t,func:o}}markImportAsUsed(e){const t=this.importedFunctions[e];if(!t)throw new Error("No imported function named "+e);"number"!=typeof t.index&&(t.index=this.importedFunctionCount++)}getTypeIndex(e){const t=this.functionTypes[e];if(!t)throw new Error("No type named "+e);return t[0]}defineFunction(e,t){const n={index:this.functions.length,name:e.name,typeName:e.type,typeIndex:this.getTypeIndex(e.type),export:e.export,locals:e.locals,generator:t,error:null,blob:null};return this.functions.push(n),n.export&&(this.estimatedExportBytes+=n.name.length+8),n}emitImportsAndFunctions(e){let t=0;for(let e=0;e0)throw new Error(`${this.activeBlocks} unclosed block(s) at end of function`);const t=this._pop(e);return this.inFunction=!1,t}block(e,t){const n=this.appendU8(t||2);return e?this.appendU8(e):this.appendU8(64),this.activeBlocks++,n}endBlock(){if(this.activeBlocks<=0)throw new Error("No blocks active");this.activeBlocks--,this.appendU8(11)}arg(e,t){const n="string"==typeof e?this.locals.has(e)?this.locals.get(e):void 0:e;if("number"!=typeof n)throw new Error("No local named "+e);t&&this.appendU8(t),this.appendULeb(n)}local(e,t){const n="string"==typeof e?this.locals.has(e)?this.locals.get(e):void 0:e+this.argumentCount;if("number"!=typeof n)throw new Error("No local named "+e);t?this.appendU8(t):this.appendU8(32),this.appendULeb(n)}appendMemarg(e,t){this.appendULeb(t),this.appendULeb(e)}lea(e,t){"string"==typeof e?this.local(e):this.i32_const(e),this.i32_const(t),this.appendU8(106)}getArrayView(e){if(this.stackSize>1)throw new Error("Jiterpreter block stack not empty");return this.stack[0].getArrayView(e)}getConstants(){const e={};for(let t=0;t=this.capacity)throw new Error("Buffer full");const t=this.size;return Y()[this.buffer+this.size++]=e,t}appendU32(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,0),this.size+=4,t}appendI32(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,1),this.size+=4,t}appendF32(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,2),this.size+=4,t}appendF64(e){const t=this.size;return o.mono_jiterp_write_number_unaligned(this.buffer+this.size,e,3),this.size+=8,t}appendBoundaryValue(e,t){if(this.size+8>=this.capacity)throw new Error("Buffer full");const n=o.mono_jiterp_encode_leb_signed_boundary(this.buffer+this.size,e,t);if(n<1)throw new Error(`Failed to encode ${e} bit boundary value with sign ${t}`);return this.size+=n,n}appendULeb(e){if("number"!=typeof e&&ut(!1,`appendULeb expected number but got ${e}`),e>=0||ut(!1,"cannot pass negative value to appendULeb"),e<127){if(this.size+1>=this.capacity)throw new Error("Buffer full");return this.appendU8(e),1}if(this.size+8>=this.capacity)throw new Error("Buffer full");const t=o.mono_jiterp_encode_leb52(this.buffer+this.size,e,0);if(t<1)throw new Error(`Failed to encode value '${e}' as unsigned leb`);return this.size+=t,t}appendLeb(e){if("number"!=typeof e&&ut(!1,`appendLeb expected number but got ${e}`),this.size+8>=this.capacity)throw new Error("Buffer full");const t=o.mono_jiterp_encode_leb52(this.buffer+this.size,e,1);if(t<1)throw new Error(`Failed to encode value '${e}' as signed leb`);return this.size+=t,t}appendLebRef(e,t){if(this.size+8>=this.capacity)throw new Error("Buffer full");const n=o.mono_jiterp_encode_leb64_ref(this.buffer+this.size,e,t?1:0);if(n<1)throw new Error("Failed to encode value as leb");return this.size+=n,n}copyTo(e,t){"number"!=typeof t&&(t=this.size),Y().copyWithin(e.buffer+e.size,this.buffer,this.buffer+t),e.size+=t}appendBytes(e,t){const n=this.size,r=Y();return e.buffer===r.buffer?("number"!=typeof t&&(t=e.length),r.copyWithin(this.buffer+n,e.byteOffset,e.byteOffset+t),this.size+=t):("number"==typeof t&&(e=new Uint8Array(e.buffer,e.byteOffset,t)),this.getArrayView(!0).set(e,this.size),this.size+=e.length),n}appendName(e){let t=e.length,n=1===e.length?e.charCodeAt(0):-1;if(n>127&&(n=-1),t&&n<0)if(this.encoder)t=this.encoder.encodeInto(e,this.textBuf).written||0;else for(let n=0;n127)throw new Error("Out of range character and no TextEncoder available");this.textBuf[n]=t}this.appendULeb(t),n>=0?this.appendU8(n):t>1&&this.appendBytes(this.textBuf,t)}getArrayView(e){return new Uint8Array(Y().buffer,this.buffer,e?this.capacity:this.size)}}class Oa{constructor(e){this.segments=[],this.backBranchTargets=null,this.lastSegmentEnd=0,this.overheadBytes=0,this.blockStack=[],this.backDispatchOffsets=[],this.dispatchTable=new Map,this.observedBackBranchTargets=new Set,this.trace=0,this.builder=e}initialize(e,t,n){this.segments.length=0,this.blockStack.length=0,this.startOfBody=e,this.backBranchTargets=t,this.base=this.builder.base,this.ip=this.lastSegmentStartIp=this.firstOpcodeIp=this.builder.base,this.lastSegmentEnd=0,this.overheadBytes=10,this.dispatchTable.clear(),this.observedBackBranchTargets.clear(),this.trace=n,this.backDispatchOffsets.length=0}entry(e){this.entryIp=e;const t=o.mono_jiterp_get_opcode_info(674,1);return this.firstOpcodeIp=e+2*t,this.appendBlob(),1!==this.segments.length&&ut(!1,"expected 1 segment"),"blob"!==this.segments[0].type&&ut(!1,"expected blob"),this.entryBlob=this.segments[0],this.segments.length=0,this.overheadBytes+=9,this.backBranchTargets&&(this.overheadBytes+=20,this.overheadBytes+=this.backBranchTargets.length),this.firstOpcodeIp}appendBlob(){this.builder.current.size!==this.lastSegmentEnd&&(this.segments.push({type:"blob",ip:this.lastSegmentStartIp,start:this.lastSegmentEnd,length:this.builder.current.size-this.lastSegmentEnd}),this.lastSegmentStartIp=this.ip,this.lastSegmentEnd=this.builder.current.size,this.overheadBytes+=2)}startBranchBlock(e,t){this.appendBlob(),this.segments.push({type:"branch-block-header",ip:e,isBackBranchTarget:t}),this.overheadBytes+=1}branch(e,t,n){t&&this.observedBackBranchTargets.add(e),this.appendBlob(),this.segments.push({type:"branch",from:this.ip,target:e,isBackward:t,branchType:n}),this.overheadBytes+=4,t&&(this.overheadBytes+=4)}emitBlob(e,t){const n=t.subarray(e.start,e.start+e.length);this.builder.appendBytes(n)}generate(){this.appendBlob();const e=this.builder.endFunction(!1);this.builder._push(),this.builder.base=this.base,this.emitBlob(this.entryBlob,e),this.backBranchTargets&&this.builder.block(64,3);for(let e=0;ee-t));for(let e=0;e0&&Fe("No back branch targets were reachable after filtering");else if(1===this.backDispatchOffsets.length)this.trace>0&&(this.backDispatchOffsets[0]===this.entryIp?Fe(`Exactly one back dispatch offset and it was the entry point 0x${this.entryIp.toString(16)}`):Fe(`Exactly one back dispatch offset and it was 0x${this.backDispatchOffsets[0].toString(16)}`)),this.builder.local("disp"),this.builder.appendU8(13),this.builder.appendULeb(this.blockStack.indexOf(this.backDispatchOffsets[0]));else{this.trace>0&&Fe(`${this.backDispatchOffsets.length} back branch offsets after filtering.`),this.builder.block(64),this.builder.block(64),this.builder.local("disp"),this.builder.appendU8(14),this.builder.appendULeb(this.backDispatchOffsets.length+1),this.builder.appendULeb(1);for(let e=0;e0&&this.blockStack.push(0)}this.trace>1&&Fe(`blockStack=${this.blockStack}`);for(let t=0;t1&&Fe(`backward br from ${n.from.toString(16)} to ${n.target.toString(16)}: disp=${t}`),o=!0):(this.trace>0&&Fe(`br from ${n.from.toString(16)} to ${n.target.toString(16)} failed: back branch target not in dispatch table`),r=-1)),r>=0||o){let e=0;switch(n.branchType){case 2:this.builder,n.from,void 0!==t&&(this.builder.i32_const(t),this.builder.local("disp",33)),this.builder.appendU8(12);break;case 3:this.builder.block(64,4),this.builder,n.from,void 0!==t&&(this.builder.i32_const(t),this.builder.local("disp",33)),this.builder.appendU8(12),e=1;break;case 0:void 0!==t&&(this.builder.i32_const(t),this.builder.local("disp",33)),this.builder.appendU8(12);break;case 1:void 0!==t?(this.builder.block(64,4),this.builder.i32_const(t),this.builder.local("disp",33),e=1,this.builder.appendU8(12)):this.builder.appendU8(13);break;default:throw new Error("Unimplemented branch type")}this.builder.appendULeb(e+r),e&&this.builder.endBlock(),this.trace>1&&Fe(`br from ${n.from.toString(16)} to ${n.target.toString(16)} breaking out ${e+r+1} level(s)`)}else{if(this.trace>0){const e=this.base;n.target>=e&&n.target1&&Fe(`br from ${n.from.toString(16)} to ${n.target.toString(16)} failed (outside of trace 0x${e.toString(16)} - 0x${this.exitIp.toString(16)})`)}const e=1===n.branchType||3===n.branchType;e&&this.builder.block(64,4),Pa(this.builder,n.target,4),e&&this.builder.endBlock()}break}default:throw new Error("unreachable")}}return this.backBranchTargets&&(this.blockStack.length<=1||ut(!1,"expected one or zero entries in the block stack at the end"),this.blockStack.length&&this.blockStack.shift(),this.builder.endBlock()),0!==this.blockStack.length&&ut(!1,`expected block stack to be empty at end of function but it was ${this.blockStack}`),this.builder.ip_const(this.exitIp),this.builder.appendU8(15),this.builder.appendU8(11),this.builder._pop(!1)}}let Da;const Fa={},Ma=globalThis.performance&&globalThis.performance.now?globalThis.performance.now.bind(globalThis.performance):Date.now;function Pa(e,t,n){e.ip_const(t),e.options.countBailouts&&(e.i32_const(e.traceIndex),e.i32_const(n),e.callImport("bailout")),e.appendU8(15)}function Va(e,t,n,r){e.local("cinfo"),e.block(64,4),e.local("cinfo"),e.local("disp"),e.appendU8(54),e.appendMemarg(Ya(19),0),n<=e.options.monitoringLongDistance+2&&(e.local("cinfo"),e.i32_const(n),e.appendU8(54),e.appendMemarg(Ya(20),0)),e.endBlock(),e.ip_const(t),e.options.countBailouts&&(e.i32_const(e.traceIndex),e.i32_const(r),e.callImport("bailout")),e.appendU8(15)}function za(){if(Da||(Da=ot.getWasmIndirectFunctionTable()),!Da)throw new Error("Module did not export the indirect function table");return Da}function Ha(e,t){t||ut(!1,"Attempting to set null function into table");const n=o.mono_jiterp_allocate_table_entry(e);return n>0&&za().set(n,t),n}function Wa(e,t,n,r,o){if(r<=0)return o&&e.appendU8(26),!0;if(r>=La)return!1;const a=o?"memop_dest":"pLocals";o&&e.local(a,33);let s=o?0:t;if(e.options.enableSimd){const t=16;for(;r>=t;)e.local(a),e.v128_const(0),e.appendSimd(11),e.appendMemarg(s,0),s+=t,r-=t}for(;r>=8;)e.local(a),e.i52_const(0),e.appendU8(55),e.appendMemarg(s,0),s+=8,r-=8;for(;r>=1;){e.local(a),e.i32_const(0);let t=r%4;switch(t){case 0:t=4,e.appendU8(54);break;case 1:e.appendU8(58);break;case 3:case 2:t=2,e.appendU8(59)}e.appendMemarg(s,0),s+=t,r-=t}return!0}function qa(e,t,n){Wa(e,0,0,n,!0)||(e.i32_const(t),e.i32_const(n),e.appendU8(252),e.appendU8(11),e.appendU8(0))}function Ga(e,t,n,r,o,a,s){if(r<=0)return o&&(e.appendU8(26),e.appendU8(26)),!0;if(r>=Ra)return!1;o?(a=a||"memop_dest",s=s||"memop_src",e.local(s,33),e.local(a,33)):a&&s||(a=s="pLocals");let i=o?0:t,c=o?0:n;if(e.options.enableSimd){const t=16;for(;r>=t;)e.local(a),e.local(s),e.appendSimd(0,!0),e.appendMemarg(c,0),e.appendSimd(11),e.appendMemarg(i,0),i+=t,c+=t,r-=t}for(;r>=8;)e.local(a),e.local(s),e.appendU8(41),e.appendMemarg(c,0),e.appendU8(55),e.appendMemarg(i,0),i+=8,c+=8,r-=8;for(;r>=1;){let t,n,o=r%4;switch(o){case 0:o=4,t=40,n=54;break;default:case 1:o=1,t=44,n=58;break;case 3:case 2:o=2,t=46,n=59}e.local(a),e.local(s),e.appendU8(t),e.appendMemarg(c,0),e.appendU8(n),e.appendMemarg(i,0),c+=o,i+=o,r-=o}return!0}function Ja(e,t){return Ga(e,0,0,t,!0)||(e.i32_const(t),e.appendU8(252),e.appendU8(10),e.appendU8(0),e.appendU8(0)),!0}function Xa(){const e=ls(5,1);e>=$a&&(Fe(`Disabling jiterpreter after ${e} failures`),is({enableTraces:!1,enableInterpEntry:!1,enableJitCall:!1}))}const Qa={};function Ya(e){const t=Qa[e];return void 0===t?Qa[e]=o.mono_jiterp_get_member_offset(e):t}function Za(e){const t=Xe.wasmExports[e];if("function"!=typeof t)throw new Error(`raw cwrap ${e} not found`);return t}const Ka={};function es(e){let t=Ka[e];return"number"!=typeof t&&(t=Ka[e]=o.mono_jiterp_get_opcode_value_table_entry(e)),t}function ts(e,t){return[e,e,t]}let ns;function rs(){if(!o.mono_wasm_is_zero_page_reserved())return!1;if(!0===ns)return!1;const e=K();for(let t=0;t<8;t++)if(0!==e[t])return!1===ns&&Pe(`Zero page optimizations are enabled but garbage appeared in memory at address ${4*t}: ${e[t]}`),ns=!0,!1;return ns=!1,!0}const os={enableTraces:"jiterpreter-traces-enabled",enableInterpEntry:"jiterpreter-interp-entry-enabled",enableJitCall:"jiterpreter-jit-call-enabled",enableBackwardBranches:"jiterpreter-backward-branch-entries-enabled",enableCallResume:"jiterpreter-call-resume-enabled",enableWasmEh:"jiterpreter-wasm-eh-enabled",enableSimd:"jiterpreter-simd-enabled",enableAtomics:"jiterpreter-atomics-enabled",zeroPageOptimization:"jiterpreter-zero-page-optimization",cprop:"jiterpreter-constant-propagation",enableStats:"jiterpreter-stats-enabled",disableHeuristic:"jiterpreter-disable-heuristic",estimateHeat:"jiterpreter-estimate-heat",countBailouts:"jiterpreter-count-bailouts",dumpTraces:"jiterpreter-dump-traces",useConstants:"jiterpreter-use-constants",eliminateNullChecks:"jiterpreter-eliminate-null-checks",noExitBackwardBranches:"jiterpreter-backward-branches-enabled",directJitCalls:"jiterpreter-direct-jit-calls",minimumTraceValue:"jiterpreter-minimum-trace-value",minimumTraceHitCount:"jiterpreter-minimum-trace-hit-count",monitoringPeriod:"jiterpreter-trace-monitoring-period",monitoringShortDistance:"jiterpreter-trace-monitoring-short-distance",monitoringLongDistance:"jiterpreter-trace-monitoring-long-distance",monitoringMaxAveragePenalty:"jiterpreter-trace-monitoring-max-average-penalty",backBranchBoost:"jiterpreter-back-branch-boost",jitCallHitCount:"jiterpreter-jit-call-hit-count",jitCallFlushThreshold:"jiterpreter-jit-call-queue-flush-threshold",interpEntryHitCount:"jiterpreter-interp-entry-hit-count",interpEntryFlushThreshold:"jiterpreter-interp-entry-queue-flush-threshold",wasmBytesLimit:"jiterpreter-wasm-bytes-limit",tableSize:"jiterpreter-table-size",aotTableSize:"jiterpreter-aot-table-size"};let as=-1,ss={};function is(e){for(const t in e){const n=os[t];if(!n){Pe(`Unrecognized jiterpreter option: ${t}`);continue}const r=e[t];"boolean"==typeof r?o.mono_jiterp_parse_option((r?"--":"--no-")+n):"number"==typeof r?o.mono_jiterp_parse_option(`--${n}=${r}`):Pe(`Jiterpreter option must be a boolean or a number but was ${typeof r} '${r}'`)}}function cs(e){return o.mono_jiterp_get_counter(e)}function ls(e,t){return o.mono_jiterp_modify_counter(e,t)}function ps(){const e=o.mono_jiterp_get_options_version();return e!==as&&(function(){ss={};for(const e in os){const t=o.mono_jiterp_get_option_as_int(os[e]);t>-2147483647?ss[e]=t:Fe(`Failed to retrieve value of option ${os[e]}`)}}(),as=e),ss}function us(e,t,n,r){const a=za(),s=t,i=s+n-1;return i= ${a.length}`),a.set(s,r),o.mono_jiterp_initialize_table(e,s,i),t+n}let ds=!1;const fs=["Unknown","InterpreterTiering","NullCheck","VtableNotInitialized","Branch","BackwardBranch","ConditionalBranch","ConditionalBackwardBranch","ComplexBranch","ArrayLoadFailed","ArrayStoreFailed","StringOperationFailed","DivideByZero","Overflow","Return","Call","Throw","AllocFailed","SpanOperationFailed","CastFailed","SafepointBranchTaken","UnboxFailed","CallDelegate","Debugging","Icall","UnexpectedRetIp","LeaveCheck"],_s={2:["V128_I1_NEGATION","V128_I2_NEGATION","V128_I4_NEGATION","V128_ONES_COMPLEMENT","V128_U2_WIDEN_LOWER","V128_U2_WIDEN_UPPER","V128_I1_CREATE_SCALAR","V128_I2_CREATE_SCALAR","V128_I4_CREATE_SCALAR","V128_I8_CREATE_SCALAR","V128_I1_EXTRACT_MSB","V128_I2_EXTRACT_MSB","V128_I4_EXTRACT_MSB","V128_I8_EXTRACT_MSB","V128_I1_CREATE","V128_I2_CREATE","V128_I4_CREATE","V128_I8_CREATE","SplatX1","SplatX2","SplatX4","SplatX8","NegateD1","NegateD2","NegateD4","NegateD8","NegateR4","NegateR8","SqrtR4","SqrtR8","CeilingR4","CeilingR8","FloorR4","FloorR8","TruncateR4","TruncateR8","RoundToNearestR4","RoundToNearestR8","NotANY","AnyTrueANY","AllTrueD1","AllTrueD2","AllTrueD4","AllTrueD8","PopCountU1","BitmaskD1","BitmaskD2","BitmaskD4","BitmaskD8","AddPairwiseWideningI1","AddPairwiseWideningU1","AddPairwiseWideningI2","AddPairwiseWideningU2","AbsI1","AbsI2","AbsI4","AbsI8","AbsR4","AbsR8","ConvertToSingleI4","ConvertToSingleU4","ConvertToSingleR8","ConvertToDoubleLowerI4","ConvertToDoubleLowerU4","ConvertToDoubleLowerR8","ConvertToInt32SaturateR4","ConvertToUInt32SaturateR4","ConvertToInt32SaturateR8","ConvertToUInt32SaturateR8","SignExtendWideningLowerD1","SignExtendWideningLowerD2","SignExtendWideningLowerD4","SignExtendWideningUpperD1","SignExtendWideningUpperD2","SignExtendWideningUpperD4","ZeroExtendWideningLowerD1","ZeroExtendWideningLowerD2","ZeroExtendWideningLowerD4","ZeroExtendWideningUpperD1","ZeroExtendWideningUpperD2","ZeroExtendWideningUpperD4","LoadVector128ANY","LoadScalarVector128X4","LoadScalarVector128X8","LoadScalarAndSplatVector128X1","LoadScalarAndSplatVector128X2","LoadScalarAndSplatVector128X4","LoadScalarAndSplatVector128X8","LoadWideningVector128I1","LoadWideningVector128U1","LoadWideningVector128I2","LoadWideningVector128U2","LoadWideningVector128I4","LoadWideningVector128U4"],3:["V128_I1_ADD","V128_I2_ADD","V128_I4_ADD","V128_R4_ADD","V128_I1_SUB","V128_I2_SUB","V128_I4_SUB","V128_R4_SUB","V128_BITWISE_AND","V128_BITWISE_OR","V128_BITWISE_EQUALITY","V128_BITWISE_INEQUALITY","V128_R4_FLOAT_EQUALITY","V128_R8_FLOAT_EQUALITY","V128_EXCLUSIVE_OR","V128_I1_MULTIPLY","V128_I2_MULTIPLY","V128_I4_MULTIPLY","V128_R4_MULTIPLY","V128_R4_DIVISION","V128_I1_LEFT_SHIFT","V128_I2_LEFT_SHIFT","V128_I4_LEFT_SHIFT","V128_I8_LEFT_SHIFT","V128_I1_RIGHT_SHIFT","V128_I2_RIGHT_SHIFT","V128_I4_RIGHT_SHIFT","V128_I1_URIGHT_SHIFT","V128_I2_URIGHT_SHIFT","V128_I4_URIGHT_SHIFT","V128_I8_URIGHT_SHIFT","V128_U1_NARROW","V128_U1_GREATER_THAN","V128_I1_LESS_THAN","V128_U1_LESS_THAN","V128_I2_LESS_THAN","V128_I1_EQUALS","V128_I2_EQUALS","V128_I4_EQUALS","V128_R4_EQUALS","V128_I8_EQUALS","V128_I1_EQUALS_ANY","V128_I2_EQUALS_ANY","V128_I4_EQUALS_ANY","V128_I8_EQUALS_ANY","V128_AND_NOT","V128_U2_LESS_THAN_EQUAL","V128_I1_SHUFFLE","V128_I2_SHUFFLE","V128_I4_SHUFFLE","V128_I8_SHUFFLE","ExtractScalarI1","ExtractScalarU1","ExtractScalarI2","ExtractScalarU2","ExtractScalarD4","ExtractScalarD8","ExtractScalarR4","ExtractScalarR8","SwizzleD1","AddD1","AddD2","AddD4","AddD8","AddR4","AddR8","SubtractD1","SubtractD2","SubtractD4","SubtractD8","SubtractR4","SubtractR8","MultiplyD2","MultiplyD4","MultiplyD8","MultiplyR4","MultiplyR8","DivideR4","DivideR8","DotI2","ShiftLeftD1","ShiftLeftD2","ShiftLeftD4","ShiftLeftD8","ShiftRightArithmeticD1","ShiftRightArithmeticD2","ShiftRightArithmeticD4","ShiftRightArithmeticD8","ShiftRightLogicalD1","ShiftRightLogicalD2","ShiftRightLogicalD4","ShiftRightLogicalD8","AndANY","AndNotANY","OrANY","XorANY","CompareEqualD1","CompareEqualD2","CompareEqualD4","CompareEqualD8","CompareEqualR4","CompareEqualR8","CompareNotEqualD1","CompareNotEqualD2","CompareNotEqualD4","CompareNotEqualD8","CompareNotEqualR4","CompareNotEqualR8","CompareLessThanI1","CompareLessThanU1","CompareLessThanI2","CompareLessThanU2","CompareLessThanI4","CompareLessThanU4","CompareLessThanI8","CompareLessThanR4","CompareLessThanR8","CompareLessThanOrEqualI1","CompareLessThanOrEqualU1","CompareLessThanOrEqualI2","CompareLessThanOrEqualU2","CompareLessThanOrEqualI4","CompareLessThanOrEqualU4","CompareLessThanOrEqualI8","CompareLessThanOrEqualR4","CompareLessThanOrEqualR8","CompareGreaterThanI1","CompareGreaterThanU1","CompareGreaterThanI2","CompareGreaterThanU2","CompareGreaterThanI4","CompareGreaterThanU4","CompareGreaterThanI8","CompareGreaterThanR4","CompareGreaterThanR8","CompareGreaterThanOrEqualI1","CompareGreaterThanOrEqualU1","CompareGreaterThanOrEqualI2","CompareGreaterThanOrEqualU2","CompareGreaterThanOrEqualI4","CompareGreaterThanOrEqualU4","CompareGreaterThanOrEqualI8","CompareGreaterThanOrEqualR4","CompareGreaterThanOrEqualR8","ConvertNarrowingSaturateSignedI2","ConvertNarrowingSaturateSignedI4","ConvertNarrowingSaturateUnsignedI2","ConvertNarrowingSaturateUnsignedI4","MultiplyWideningLowerI1","MultiplyWideningLowerI2","MultiplyWideningLowerI4","MultiplyWideningLowerU1","MultiplyWideningLowerU2","MultiplyWideningLowerU4","MultiplyWideningUpperI1","MultiplyWideningUpperI2","MultiplyWideningUpperI4","MultiplyWideningUpperU1","MultiplyWideningUpperU2","MultiplyWideningUpperU4","AddSaturateI1","AddSaturateU1","AddSaturateI2","AddSaturateU2","SubtractSaturateI1","SubtractSaturateU1","SubtractSaturateI2","SubtractSaturateU2","MultiplyRoundedSaturateQ15I2","MinI1","MinI2","MinI4","MinU1","MinU2","MinU4","MaxI1","MaxI2","MaxI4","MaxU1","MaxU2","MaxU4","AverageRoundedU1","AverageRoundedU2","MinR4","MinR8","MaxR4","MaxR8","PseudoMinR4","PseudoMinR8","PseudoMaxR4","PseudoMaxR8","StoreANY"],4:["V128_CONDITIONAL_SELECT","ReplaceScalarD1","ReplaceScalarD2","ReplaceScalarD4","ReplaceScalarD8","ReplaceScalarR4","ReplaceScalarR8","ShuffleD1","BitwiseSelectANY","LoadScalarAndInsertX1","LoadScalarAndInsertX2","LoadScalarAndInsertX4","LoadScalarAndInsertX8","StoreSelectedScalarX1","StoreSelectedScalarX2","StoreSelectedScalarX4","StoreSelectedScalarX8"]},ms={13:[65,0],14:[65,1]},hs={456:168,462:174,457:170,463:176},gs={508:[69,40,54],428:[106,40,54],430:[107,40,54],432:[107,40,54],436:[115,40,54],429:[124,41,55],431:[125,41,55],433:[125,41,55],437:[133,41,55],511:[106,40,54],515:[108,40,54],513:[124,41,55],517:[126,41,55],434:[140,42,56],435:[154,43,57],464:[178,40,56],467:[183,40,57],438:[184,40,57],465:[180,41,56],468:[185,41,57],439:[186,41,57],469:[187,42,57],466:[182,43,56],460:[1,52,55],461:[1,53,55],444:[113,40,54],452:[113,40,54],440:[117,40,54],448:[117,40,54],445:[113,41,54],453:[113,41,54],441:[117,41,54],449:[117,41,54],525:[116,40,54],526:[134,41,55],527:[117,40,54],528:[135,41,55],523:[118,40,54],524:[136,41,55],638:[119,40,54],639:[137,41,55],640:[120,40,54],641:[138,41,55],642:[103,40,54],644:[104,40,54],646:[105,40,54],643:[121,41,55],645:[122,41,55],647:[123,41,55],512:[106,40,54],516:[108,40,54],514:[124,41,55],518:[126,41,55],519:[113,40,54],520:[113,40,54],521:[114,40,54],522:[114,40,54]},bs={394:187,395:1,398:187,399:1,402:187,403:1,406:187,407:1,412:187,413:1,416:187,417:1,426:187,427:1,420:187,421:1,65536:187,65537:187,65535:187,65539:1,65540:1,65538:1},ys={344:[106,40,54],362:[106,40,54],364:[106,40,54],348:[107,40,54],352:[108,40,54],366:[108,40,54],368:[108,40,54],356:[109,40,54],360:[110,40,54],380:[111,40,54],384:[112,40,54],374:[113,40,54],376:[114,40,54],378:[115,40,54],388:[116,40,54],390:[117,40,54],386:[118,40,54],345:[124,41,55],349:[125,41,55],353:[126,41,55],357:[127,41,55],381:[129,41,55],361:[128,41,55],385:[130,41,55],375:[131,41,55],377:[132,41,55],379:[133,41,55],389:[134,41,55],391:[135,41,55],387:[136,41,55],346:[146,42,56],350:[147,42,56],354:[148,42,56],358:[149,42,56],347:[160,43,57],351:[161,43,57],355:[162,43,57],359:[163,43,57],392:[70,40,54],396:[71,40,54],414:[72,40,54],400:[74,40,54],418:[76,40,54],404:[78,40,54],424:[73,40,54],410:[75,40,54],422:[77,40,54],408:[79,40,54],393:[81,41,54],397:[82,41,54],415:[83,41,54],401:[85,41,54],419:[87,41,54],405:[89,41,54],425:[84,41,54],411:[86,41,54],423:[88,41,54],409:[90,41,54]},ws={187:392,207:396,195:400,215:410,199:414,223:424,191:404,211:408,203:418,219:422,231:[392,!1,!0],241:[396,!1,!0],235:[400,!1,!0],245:[410,!1,!0],237:[414,!1,!0],249:[424,!1,!0],233:[404,!1,!0],243:[408,!1,!0],239:[418,!1,!0],247:[422,!1,!0],251:[392,65,!0],261:[396,65,!0],255:[400,65,!0],265:[410,65,!0],257:[414,65,!0],269:[424,65,!0],253:[404,65,!0],263:[408,65,!0],259:[418,65,!0],267:[422,65,!0],188:393,208:397,196:401,216:411,200:415,224:425,192:405,212:409,204:419,220:423,252:[393,66,!0],256:[401,66,!0],266:[411,66,!0],258:[415,66,!0],270:[425,66,!0],254:[405,66,!0],264:[409,66,!0],260:[419,66,!0],268:[423,66,!0],189:394,209:65535,197:402,217:412,201:416,225:426,193:406,213:65536,205:420,221:65537,190:395,210:65538,198:403,218:413,202:417,226:427,194:407,214:65539,206:421,222:65540},ks={598:[!0,!1,159],625:[!0,!0,145],585:[!0,!1,155],612:[!0,!0,141],591:[!0,!1,156],618:[!0,!0,142],602:[!0,!1,153],629:[!0,!0,139],580:[!0,!1,"acos"],607:[!0,!0,"acosf"],581:[!0,!1,"acosh"],608:[!0,!0,"acoshf"],586:[!0,!1,"cos"],613:[!0,!0,"cosf"],578:[!0,!1,"asin"],605:[!0,!0,"asinf"],579:[!0,!1,"asinh"],606:[!0,!0,"asinhf"],597:[!0,!1,"sin"],624:[!0,!0,"sinf"],582:[!0,!1,"atan"],609:[!0,!0,"atanf"],583:[!0,!1,"atanh"],610:[!0,!0,"atanhf"],600:[!0,!1,"tan"],627:[!0,!0,"tanf"],587:[!0,!1,"cbrt"],614:[!0,!0,"cbrtf"],589:[!0,!1,"exp"],616:[!0,!0,"expf"],592:[!0,!1,"log"],619:[!0,!0,"logf"],593:[!0,!1,"log2"],620:[!0,!0,"log2f"],594:[!0,!1,"log10"],621:[!0,!0,"log10f"],603:[!1,!1,164],630:[!1,!0,150],604:[!1,!1,165],631:[!1,!0,151],584:[!1,!1,"atan2"],611:[!1,!0,"atan2f"],595:[!1,!1,"pow"],622:[!1,!0,"powf"],383:[!1,!1,"fmod"],382:[!1,!0,"fmodf"]},Ss={560:[67,0,0],561:[67,192,0],562:[68,0,1],563:[68,193,1],564:[65,0,2],565:[66,0,3]},vs={566:[74,0,0],567:[74,192,0],568:[75,0,1],569:[75,193,1],570:[72,0,2],571:[73,0,3]},Us={651:1,652:2,653:4,654:8},Es={651:44,652:46,653:40,654:41},Ts={651:58,652:59,653:54,654:55},xs=new Set([20,21,22,23,24,25,26,27,28,29,30]),Is={51:[16,54],52:[16,54],53:[8,54],54:[8,54],55:[4,54],57:[4,56],56:[2,55],58:[2,57]},As={1:[16,40],2:[8,40],3:[4,40],5:[4,42],4:[2,41],6:[2,43]},js=new Set([81,84,85,86,87,82,83,88,89,90,91,92,93]),$s={13:[16],14:[8],15:[4],16:[2]},Ls={10:100,11:132,12:164,13:196},Rs={6:[44,23],7:[46,26],8:[40,28],9:[41,30]};function Bs(e,t){return B(e+2*t)}function Ns(e,t){return M(e+2*t)}function Cs(e,t){return O(e+2*t)}function Os(e){return D(e+Ya(4))}function Ds(e,t){const n=D(Os(e)+Ya(5));return D(n+t*fc)}function Fs(e,t){const n=D(Os(e)+Ya(12));return D(n+t*fc)}function Ms(e,t,n){if(!n)return!1;for(let r=0;r=40||ut(!1,`Expected load opcode but got ${n}`),e.appendU8(n),void 0!==r)e.appendULeb(r);else if(253===n)throw new Error("PREFIX_simd ldloc without a simdOpcode");const o=Ys(t,n,r);e.appendMemarg(t,o)}function ei(e,t,n,r){n>=54||ut(!1,`Expected store opcode but got ${n}`),e.appendU8(n),void 0!==r&&e.appendULeb(r);const o=Ys(t,n,r);e.appendMemarg(t,o),Js(t),void 0!==r&&Js(t+8)}function ti(e,t,n){"number"!=typeof n&&(n=512),n>0&&Xs(t,n),e.lea("pLocals",t)}function ni(e,t,n,r){Xs(t,r),Wa(e,t,0,r,!1)||(ti(e,t,r),qa(e,n,r))}function ri(e,t,n,r){if(Xs(t,r),Ga(e,t,n,r,!1))return!0;ti(e,t,r),ti(e,n,0),Ja(e,r)}function oi(e,t){return 0!==o.mono_jiterp_is_imethod_var_address_taken(Os(e.frame),t)}function ai(e,t,n,r){if(e.allowNullCheckOptimization&&Hs.has(t)&&!oi(e,t))return ls(7,1),void(qs===t?r&&e.local("cknull_ptr"):(Ks(e,t,40),e.local("cknull_ptr",r?34:33),qs=t));Ks(e,t,40),e.local("cknull_ptr",34),e.appendU8(69),e.block(64,4),Pa(e,n,2),e.endBlock(),r&&e.local("cknull_ptr"),e.allowNullCheckOptimization&&!oi(e,t)?(Hs.set(t,n),qs=t):qs=-1}function si(e,t,n){let r,a=54;const s=ms[n];if(s)e.local("pLocals"),e.appendU8(s[0]),r=s[1],e.appendLeb(r);else switch(n){case 15:e.local("pLocals"),r=Ns(t,2),e.i32_const(r);break;case 16:e.local("pLocals"),r=Cs(t,2),e.i32_const(r);break;case 17:e.local("pLocals"),e.i52_const(0),a=55;break;case 19:e.local("pLocals"),e.appendU8(66),e.appendLebRef(t+4,!0),a=55;break;case 18:e.local("pLocals"),e.i52_const(Ns(t,2)),a=55;break;case 20:e.local("pLocals"),e.appendU8(67),e.appendF32(function(e,t){return n=e+2*t,o.mono_wasm_get_f32_unaligned(n);var n}(t,2)),a=56;break;case 21:e.local("pLocals"),e.appendU8(68),e.appendF64(function(e,t){return n=e+2*t,o.mono_wasm_get_f64_unaligned(n);var n}(t,2)),a=57;break;default:return!1}e.appendU8(a);const i=Bs(t,1);return e.appendMemarg(i,2),Js(i),"number"==typeof r?Ps.set(i,{type:"i32",value:r}):Ps.delete(i),!0}function ii(e,t,n){let r=40,o=54;switch(n){case 74:r=44;break;case 75:r=45;break;case 76:r=46;break;case 77:r=47;break;case 78:r=45,o=58;break;case 79:r=47,o=59;break;case 80:break;case 81:r=41,o=55;break;case 82:{const n=Bs(t,3);return ri(e,Bs(t,1),Bs(t,2),n),!0}case 83:return ri(e,Bs(t,1),Bs(t,2),8),ri(e,Bs(t,3),Bs(t,4),8),!0;case 84:return ri(e,Bs(t,1),Bs(t,2),8),ri(e,Bs(t,3),Bs(t,4),8),ri(e,Bs(t,5),Bs(t,6),8),!0;case 85:return ri(e,Bs(t,1),Bs(t,2),8),ri(e,Bs(t,3),Bs(t,4),8),ri(e,Bs(t,5),Bs(t,6),8),ri(e,Bs(t,7),Bs(t,8),8),!0;default:return!1}return e.local("pLocals"),Ks(e,Bs(t,2),r),ei(e,Bs(t,1),o),!0}function ci(e,t,n,r){const o=r>=23&&r<=36||r>=50&&r<=60,a=Bs(n,o?2:1),s=Bs(n,3),i=Bs(n,o?1:2),c=e.allowNullCheckOptimization&&Hs.has(a)&&!oi(e,a);36!==r&&45!==r&&ai(e,a,n,!1);let l=54,p=40;switch(r){case 23:p=44;break;case 24:p=45;break;case 25:p=46;break;case 26:p=47;break;case 31:case 41:case 27:break;case 43:case 29:p=42,l=56;break;case 44:case 30:p=43,l=57;break;case 37:case 38:l=58;break;case 39:case 40:l=59;break;case 28:case 42:p=41,l=55;break;case 45:return c||e.block(),e.local("pLocals"),e.i32_const(s),e.i32_const(a),e.i32_const(i),e.callImport("stfld_o"),c?(e.appendU8(26),ls(7,1)):(e.appendU8(13),e.appendULeb(0),Pa(e,n,2),e.endBlock()),!0;case 32:{const t=Bs(n,4);return ti(e,i,t),e.local("cknull_ptr"),0!==s&&(e.i32_const(s),e.appendU8(106)),Ja(e,t),!0}case 46:{const r=Ds(t,Bs(n,4));return e.local("cknull_ptr"),0!==s&&(e.i32_const(s),e.appendU8(106)),ti(e,i,0),e.ptr_const(r),e.callImport("value_copy"),!0}case 47:{const t=Bs(n,4);return e.local("cknull_ptr"),0!==s&&(e.i32_const(s),e.appendU8(106)),ti(e,i,0),Ja(e,t),!0}case 36:case 35:return e.local("pLocals"),Ks(e,a,40),0!==s&&(e.i32_const(s),e.appendU8(106)),ei(e,i,l),!0;default:return!1}return o&&e.local("pLocals"),e.local("cknull_ptr"),o?(e.appendU8(p),e.appendMemarg(s,0),ei(e,i,l),!0):(Ks(e,i,p),e.appendU8(l),e.appendMemarg(s,0),!0)}function li(e,t,n,r){const o=r>=23&&r<=36||r>=50&&r<=60,a=Bs(n,1),s=Ds(t,Bs(n,2)),i=Ds(t,Bs(n,3));!function(e,t,n){e.block(),e.ptr_const(t),e.appendU8(45),e.appendMemarg(Ya(0),0),e.appendU8(13),e.appendULeb(0),Pa(e,n,3),e.endBlock()}(e,s,n);let c=54,l=40;switch(r){case 50:l=44;break;case 51:l=45;break;case 52:l=46;break;case 53:l=47;break;case 58:case 65:case 54:break;case 67:case 56:l=42,c=56;break;case 68:case 57:l=43,c=57;break;case 61:case 62:c=58;break;case 63:case 64:c=59;break;case 55:case 66:l=41,c=55;break;case 69:return e.ptr_const(i),ti(e,a,0),e.callImport("copy_ptr"),!0;case 59:{const t=Bs(n,4);return ti(e,a,t),e.ptr_const(i),Ja(e,t),!0}case 72:return e.local("pLocals"),e.ptr_const(i),ei(e,a,c),!0;default:return!1}return o?(e.local("pLocals"),e.ptr_const(i),e.appendU8(l),e.appendMemarg(0,0),ei(e,a,c),!0):(e.ptr_const(i),Ks(e,a,l),e.appendU8(c),e.appendMemarg(0,0),!0)}function pi(e,t,n){let r,o,a,s,i="math_lhs32",c="math_rhs32",l=!1;const p=bs[n];if(p){e.local("pLocals");const r=1==p;return Ks(e,Bs(t,2),r?43:42),r||e.appendU8(p),Ks(e,Bs(t,3),r?43:42),r||e.appendU8(p),e.i32_const(n),e.callImport("relop_fp"),ei(e,Bs(t,1),54),!0}switch(n){case 382:case 383:return hi(e,t,n);default:if(s=ys[n],!s)return!1;s.length>3?(r=s[1],o=s[2],a=s[3]):(r=o=s[1],a=s[2])}switch(n){case 356:case 357:case 360:case 361:case 380:case 381:case 384:case 385:{const a=361===n||385===n||357===n||381===n;i=a?"math_lhs64":"math_lhs32",c=a?"math_rhs64":"math_rhs32",e.block(),Ks(e,Bs(t,2),r),e.local(i,33),Ks(e,Bs(t,3),o),e.local(c,34),l=!0,a&&(e.appendU8(80),e.appendU8(69)),e.appendU8(13),e.appendULeb(0),Pa(e,t,12),e.endBlock(),356!==n&&380!==n&&357!==n&&381!==n||(e.block(),e.local(c),a?e.i52_const(-1):e.i32_const(-1),e.appendU8(a?82:71),e.appendU8(13),e.appendULeb(0),e.local(i),e.appendU8(a?66:65),e.appendBoundaryValue(a?64:32,-1),e.appendU8(a?82:71),e.appendU8(13),e.appendULeb(0),Pa(e,t,13),e.endBlock());break}case 362:case 364:case 366:case 368:Ks(e,Bs(t,2),r),e.local(i,34),Ks(e,Bs(t,3),o),e.local(c,34),e.i32_const(n),e.callImport(364===n||368===n?"ckovr_u4":"ckovr_i4"),e.block(64,4),Pa(e,t,13),e.endBlock(),l=!0}return e.local("pLocals"),l?(e.local(i),e.local(c)):(Ks(e,Bs(t,2),r),Ks(e,Bs(t,3),o)),e.appendU8(s[0]),ei(e,Bs(t,1),a),!0}function ui(e,t,n){const r=gs[n];if(!r)return!1;const o=r[1],a=r[2];switch((n<472||n>507)&&e.local("pLocals"),n){case 428:case 430:Ks(e,Bs(t,2),o),e.i32_const(1);break;case 432:e.i32_const(0),Ks(e,Bs(t,2),o);break;case 436:Ks(e,Bs(t,2),o),e.i32_const(-1);break;case 444:case 445:Ks(e,Bs(t,2),o),41===o&&e.appendU8(167),e.i32_const(255);break;case 452:case 453:Ks(e,Bs(t,2),o),41===o&&e.appendU8(167),e.i32_const(65535);break;case 440:case 441:Ks(e,Bs(t,2),o),41===o&&e.appendU8(167),e.i32_const(24),e.appendU8(116),e.i32_const(24);break;case 448:case 449:Ks(e,Bs(t,2),o),41===o&&e.appendU8(167),e.i32_const(16),e.appendU8(116),e.i32_const(16);break;case 429:case 431:Ks(e,Bs(t,2),o),e.i52_const(1);break;case 433:e.i52_const(0),Ks(e,Bs(t,2),o);break;case 437:Ks(e,Bs(t,2),o),e.i52_const(-1);break;case 511:case 515:case 519:case 521:case 525:case 527:case 523:case 638:case 640:Ks(e,Bs(t,2),o),e.i32_const(Ns(t,3));break;case 512:case 516:case 520:case 522:Ks(e,Bs(t,2),o),e.i32_const(Cs(t,3));break;case 513:case 517:case 526:case 528:case 524:case 639:case 641:Ks(e,Bs(t,2),o),e.i52_const(Ns(t,3));break;case 514:case 518:Ks(e,Bs(t,2),o),e.i52_const(Cs(t,3));break;default:Ks(e,Bs(t,2),o)}return 1!==r[0]&&e.appendU8(r[0]),ei(e,Bs(t,1),a),!0}function di(e,t,n,r){const o=133===r?t+6:t+8,a=Fs(n,B(o-2));e.local("pLocals"),e.ptr_const(o),e.appendU8(54),e.appendMemarg(a,0),e.callHandlerReturnAddresses.push(o)}function fi(e,t){const n=o.mono_jiterp_get_opcode_info(t,4),r=e+2+2*o.mono_jiterp_get_opcode_info(t,2);let a;switch(n){case 7:a=O(r);break;case 8:a=M(r);break;case 17:a=M(r+2);break;default:return}return a}function _i(e,t,n,r){const a=r>=227&&r<=270,s=fi(t,r);if("number"!=typeof s)return!1;switch(r){case 132:case 133:case 128:case 129:{const a=132===r||133===r,i=t+2*s;return s<=0?e.backBranchOffsets.indexOf(i)>=0?(e.backBranchTraceLevel>1&&Fe(`0x${t.toString(16)} performing backward branch to 0x${i.toString(16)}`),a&&di(e,t,n,r),e.cfg.branch(i,!0,0),ls(9,1),!0):(i1||e.cfg.trace>1)&&Fe(`0x${t.toString(16)} ${ja(r)} target 0x${i.toString(16)} before start of trace`):(e.backBranchTraceLevel>0||e.cfg.trace>0)&&Fe(`0x${t.toString(16)} ${ja(r)} target 0x${i.toString(16)} not found in list `+e.backBranchOffsets.map((e=>"0x"+e.toString(16))).join(", ")),o.mono_jiterp_boost_back_branch_target(i),Pa(e,i,5),ls(10,1),!0):(e.branchTargets.add(i),a&&di(e,t,n,r),e.cfg.branch(i,!1,0),!0)}case 145:case 143:case 229:case 227:case 146:case 144:{const n=146===r||144===r;Ks(e,Bs(t,1),n?41:40),143===r||227===r?e.appendU8(69):144===r?e.appendU8(80):146===r&&(e.appendU8(80),e.appendU8(69));break}default:if(void 0===ws[r])throw new Error(`Unsupported relop branch opcode: ${ja(r)}`);if(4!==o.mono_jiterp_get_opcode_info(r,1))throw new Error(`Unsupported long branch opcode: ${ja(r)}`)}const i=t+2*s;return s<0?e.backBranchOffsets.indexOf(i)>=0?(e.backBranchTraceLevel>1&&Fe(`0x${t.toString(16)} performing conditional backward branch to 0x${i.toString(16)}`),e.cfg.branch(i,!0,a?3:1),ls(9,1)):(i1||e.cfg.trace>1)&&Fe(`0x${t.toString(16)} ${ja(r)} target 0x${i.toString(16)} before start of trace`):(e.backBranchTraceLevel>0||e.cfg.trace>0)&&Fe(`0x${t.toString(16)} ${ja(r)} target 0x${i.toString(16)} not found in list `+e.backBranchOffsets.map((e=>"0x"+e.toString(16))).join(", ")),o.mono_jiterp_boost_back_branch_target(i),e.block(64,4),Pa(e,i,5),e.endBlock(),ls(10,1)):(e.branchTargets.add(i),e.cfg.branch(i,!1,a?3:1)),!0}function mi(e,t,n,r){const o=ws[r];if(!o)return!1;const a=Array.isArray(o)?o[0]:o,s=ys[a],i=bs[a];if(!s&&!i)return!1;const c=s?s[1]:1===i?43:42;return Ks(e,Bs(t,1),c),s||1===i||e.appendU8(i),Array.isArray(o)&&o[1]?(e.appendU8(o[1]),e.appendLeb(Ns(t,2))):Ks(e,Bs(t,2),c),s||1==i||e.appendU8(i),s?e.appendU8(s[0]):(e.i32_const(a),e.callImport("relop_fp")),_i(e,t,n,r)}function hi(e,t,n){let r,o,a,s;const i=Bs(t,1),c=Bs(t,2),l=Bs(t,3),p=ks[n];if(!p)return!1;if(r=p[0],o=p[1],"string"==typeof p[2]?a=p[2]:s=p[2],e.local("pLocals"),r){if(Ks(e,c,o?42:43),s)e.appendU8(s);else{if(!a)throw new Error("internal error");e.callImport(a)}return ei(e,i,o?56:57),!0}if(Ks(e,c,o?42:43),Ks(e,l,o?42:43),s)e.appendU8(s);else{if(!a)throw new Error("internal error");e.callImport(a)}return ei(e,i,o?56:57),!0}function gi(e,t,n){const r=n>=87&&n<=112,o=n>=107&&n<=112,a=n>=95&&n<=106||n>=120&&n<=127||o,s=n>=101&&n<=106||n>=124&&n<=127||o;let i,c,l=-1,p=0,u=1;o?(i=Bs(t,1),c=Bs(t,2),l=Bs(t,3),p=Ns(t,4),u=Ns(t,5)):a?s?r?(i=Bs(t,1),c=Bs(t,2),p=Ns(t,3)):(i=Bs(t,2),c=Bs(t,1),p=Ns(t,3)):r?(i=Bs(t,1),c=Bs(t,2),l=Bs(t,3)):(i=Bs(t,3),c=Bs(t,1),l=Bs(t,2)):r?(c=Bs(t,2),i=Bs(t,1)):(c=Bs(t,1),i=Bs(t,2));let d,f=54;switch(n){case 87:case 95:case 101:case 107:d=44;break;case 88:case 96:case 102:case 108:d=45;break;case 89:case 97:case 103:case 109:d=46;break;case 90:case 98:case 104:case 110:d=47;break;case 113:case 120:case 124:d=40,f=58;break;case 114:case 121:case 125:d=40,f=59;break;case 91:case 99:case 105:case 111:case 115:case 122:case 126:case 119:d=40;break;case 93:case 117:d=42,f=56;break;case 94:case 118:d=43,f=57;break;case 92:case 100:case 106:case 112:case 116:case 123:case 127:d=41,f=55;break;default:return!1}const _=Zs(e,c,40,!0,!0);return _||ai(e,c,t,!1),r?(e.local("pLocals"),_?ut(Zs(e,c,40,!1,!0),"Unknown jiterpreter cprop failure"):e.local("cknull_ptr"),o?(Ks(e,l,40),0!==p&&(e.i32_const(p),e.appendU8(106),p=0),1!==u&&(e.i32_const(u),e.appendU8(108)),e.appendU8(106)):a&&l>=0?(Ks(e,l,40),e.appendU8(106)):p<0&&(e.i32_const(p),e.appendU8(106),p=0),e.appendU8(d),e.appendMemarg(p,0),ei(e,i,f)):119===n?(_?ut(Zs(e,c,40,!1,!0),"Unknown jiterpreter cprop failure"):e.local("cknull_ptr"),ti(e,i,0),e.callImport("copy_ptr")):(_?ut(Zs(e,c,40,!1,!0),"Unknown jiterpreter cprop failure"):e.local("cknull_ptr"),a&&l>=0?(Ks(e,l,40),e.appendU8(106)):p<0&&(e.i32_const(p),e.appendU8(106),p=0),Ks(e,i,d),e.appendU8(f),e.appendMemarg(p,0)),!0}function bi(e,t,n,r,o){e.block(),Ks(e,r,40),e.local("index",34);let a="cknull_ptr";e.options.zeroPageOptimization&&rs()?(ls(8,1),Ks(e,n,40),a="src_ptr",e.local(a,34)):ai(e,n,t,!0),e.appendU8(40),e.appendMemarg(Ya(9),2),e.appendU8(73),e.appendU8(13),e.appendULeb(0),Pa(e,t,9),e.endBlock(),e.local(a),e.i32_const(Ya(1)),e.appendU8(106),e.local("index"),1!=o&&(e.i32_const(o),e.appendU8(108)),e.appendU8(106)}function yi(e,t,n,r){const o=r<=328&&r>=315||341===r,a=Bs(n,o?2:1),s=Bs(n,o?1:3),i=Bs(n,o?3:2);let c,l,p=54;switch(r){case 341:return e.local("pLocals"),ai(e,a,n,!0),e.appendU8(40),e.appendMemarg(Ya(9),2),ei(e,s,54),!0;case 326:return e.local("pLocals"),l=Bs(n,4),bi(e,n,a,i,l),ei(e,s,54),!0;case 337:return e.block(),Ks(e,Bs(n,1),40),Ks(e,Bs(n,2),40),Ks(e,Bs(n,3),40),e.callImport("stelemr_tc"),e.appendU8(13),e.appendULeb(0),Pa(e,n,10),e.endBlock(),!0;case 340:return bi(e,n,a,i,4),ti(e,s,0),e.callImport("copy_ptr"),!0;case 324:case 320:case 319:case 333:l=4,c=40;break;case 315:l=1,c=44;break;case 316:l=1,c=45;break;case 330:case 329:l=1,c=40,p=58;break;case 317:l=2,c=46;break;case 318:l=2,c=47;break;case 332:case 331:l=2,c=40,p=59;break;case 322:case 335:l=4,c=42,p=56;break;case 321:case 334:l=8,c=41,p=55;break;case 323:case 336:l=8,c=43,p=57;break;case 325:{const t=Bs(n,4);return e.local("pLocals"),e.i32_const(Bs(n,1)),e.appendU8(106),bi(e,n,a,i,t),Ja(e,t),Xs(Bs(n,1),t),!0}case 338:{const r=Bs(n,5),o=Ds(t,Bs(n,4));return bi(e,n,a,i,r),ti(e,s,0),e.ptr_const(o),e.callImport("value_copy"),!0}case 339:{const t=Bs(n,5);return bi(e,n,a,i,t),ti(e,s,0),Ja(e,t),!0}default:return!1}return o?(e.local("pLocals"),bi(e,n,a,i,l),e.appendU8(c),e.appendMemarg(0,0),ei(e,s,p)):(bi(e,n,a,i,l),Ks(e,s,c),e.appendU8(p),e.appendMemarg(0,0)),!0}function wi(){return void 0!==Ws||(Ws=!0===ot.featureWasmSimd,Ws||Fe("Disabling Jiterpreter SIMD")),Ws}function ki(e,t,n){const r=`${t}_${n.toString(16)}`;return"object"!=typeof e.importedFunctions[r]&&e.defineImportedFunction("s",r,t,!1,n),r}function Si(e,t,n,r,a,s){if(e.options.enableSimd&&wi())switch(a){case 2:if(function(e,t,n){const r=o.mono_jiterp_get_simd_opcode(1,n);if(r>=0)return js.has(n)?(e.local("pLocals"),Ks(e,Bs(t,2),40),e.appendSimd(r,!0),e.appendMemarg(0,0),vi(e,t)):(Ui(e,t),e.appendSimd(r),vi(e,t)),!0;const a=Ls[n];if(a)return Ui(e,t),e.appendSimd(a),ei(e,Bs(t,1),54),!0;switch(n){case 6:case 7:case 8:case 9:{const r=Rs[n];return e.local("pLocals"),e.v128_const(0),Ks(e,Bs(t,2),r[0]),e.appendSimd(r[1]),e.appendU8(0),ei(e,Bs(t,1),253,11),!0}case 14:return Ui(e,t,7),vi(e,t),!0;case 15:return Ui(e,t,8),vi(e,t),!0;case 16:return Ui(e,t,9),vi(e,t),!0;case 17:return Ui(e,t,10),vi(e,t),!0;default:return!1}}(e,t,s))return!0;break;case 3:if(function(e,t,n){const r=o.mono_jiterp_get_simd_opcode(2,n);if(r>=0){const o=xs.has(n),a=Is[n];if(o)e.local("pLocals"),Ks(e,Bs(t,2),253,0),Ks(e,Bs(t,3),40),e.appendSimd(r),vi(e,t);else if(Array.isArray(a)){const n=zs(e,Bs(t,3)),o=a[0];if("number"!=typeof n)return Pe(`${e.functions[0].name}: Non-constant lane index passed to ExtractScalar`),!1;if(n>=o||n<0)return Pe(`${e.functions[0].name}: ExtractScalar index ${n} out of range (0 - ${o-1})`),!1;e.local("pLocals"),Ks(e,Bs(t,2),253,0),e.appendSimd(r),e.appendU8(n),ei(e,Bs(t,1),a[1])}else Ei(e,t),e.appendSimd(r),vi(e,t);return!0}switch(n){case 191:return Ks(e,Bs(t,2),40),Ks(e,Bs(t,3),253,0),e.appendSimd(11),e.appendMemarg(0,0),!0;case 10:case 11:return Ei(e,t),e.appendSimd(214),e.appendSimd(195),11===n&&e.appendU8(69),ei(e,Bs(t,1),54),!0;case 12:case 13:{const r=13===n,o=r?71:65;return e.local("pLocals"),Ks(e,Bs(t,2),253,0),e.local("math_lhs128",34),Ks(e,Bs(t,3),253,0),e.local("math_rhs128",34),e.appendSimd(o),e.local("math_lhs128"),e.local("math_lhs128"),e.appendSimd(o),e.local("math_rhs128"),e.local("math_rhs128"),e.appendSimd(o),e.appendSimd(80),e.appendSimd(77),e.appendSimd(80),e.appendSimd(r?195:163),ei(e,Bs(t,1),54),!0}case 47:{const n=Bs(t,3),r=zs(e,n);return e.local("pLocals"),Ks(e,Bs(t,2),253,0),"object"==typeof r?(e.appendSimd(12),e.appendBytes(r)):Ks(e,n,253,0),e.appendSimd(14),vi(e,t),!0}case 48:case 49:return function(e,t,n){const r=16/n,o=Bs(t,3),a=zs(e,o);if(2!==r&&4!==r&&ut(!1,"Unsupported shuffle element size"),e.local("pLocals"),Ks(e,Bs(t,2),253,0),"object"==typeof a){const t=new Uint8Array(_c),o=2===r?new Uint16Array(a.buffer,a.byteOffset,n):new Uint32Array(a.buffer,a.byteOffset,n);for(let e=0,a=0;e=0){const o=As[n],a=$s[n];if(Array.isArray(o)){const n=o[0],a=zs(e,Bs(t,3));if("number"!=typeof a)return Pe(`${e.functions[0].name}: Non-constant lane index passed to ReplaceScalar`),!1;if(a>=n||a<0)return Pe(`${e.functions[0].name}: ReplaceScalar index ${a} out of range (0 - ${n-1})`),!1;e.local("pLocals"),Ks(e,Bs(t,2),253,0),Ks(e,Bs(t,4),o[1]),e.appendSimd(r),e.appendU8(a),vi(e,t)}else if(Array.isArray(a)){const n=a[0],o=zs(e,Bs(t,4));if("number"!=typeof o)return Pe(`${e.functions[0].name}: Non-constant lane index passed to store method`),!1;if(o>=n||o<0)return Pe(`${e.functions[0].name}: Store lane ${o} out of range (0 - ${n-1})`),!1;Ks(e,Bs(t,2),40),Ks(e,Bs(t,3),253,0),e.appendSimd(r),e.appendMemarg(0,0),e.appendU8(o)}else!function(e,t){e.local("pLocals"),Ks(e,Bs(t,2),253,0),Ks(e,Bs(t,3),253,0),Ks(e,Bs(t,4),253,0)}(e,t),e.appendSimd(r),vi(e,t);return!0}switch(n){case 0:return e.local("pLocals"),Ks(e,Bs(t,3),253,0),Ks(e,Bs(t,4),253,0),Ks(e,Bs(t,2),253,0),e.appendSimd(82),vi(e,t),!0;case 7:{const n=zs(e,Bs(t,4));if("object"!=typeof n)return Pe(`${e.functions[0].name}: Non-constant indices passed to PackedSimd.Shuffle`),!1;for(let t=0;t<32;t++){const r=n[t];if(r<0||r>31)return Pe(`${e.functions[0].name}: Shuffle lane index #${t} (${r}) out of range (0 - 31)`),!1}return e.local("pLocals"),Ks(e,Bs(t,2),253,0),Ks(e,Bs(t,3),253,0),e.appendSimd(13),e.appendBytes(n),vi(e,t),!0}default:return!1}}(e,t,s))return!0}switch(n){case 650:if(e.options.enableSimd&&wi()){e.local("pLocals");const n=Y().slice(t+4,t+4+_c);e.v128_const(n),vi(e,t),Ps.set(Bs(t,1),{type:"v128",value:n})}else ti(e,Bs(t,1),_c),e.ptr_const(t+4),Ja(e,_c);return!0;case 651:case 652:case 653:case 654:{const r=Us[n],o=_c/r,a=Bs(t,1),s=Bs(t,2),i=Es[n],c=Ts[n];for(let t=0;t2;return e.local("pLocals"),ai(e,Bs(t,2),t,!0),Ks(e,Bs(t,3),n?41:40),e.appendAtomic(r[0],!1),e.appendMemarg(0,r[2]),0!==r[1]&&e.appendU8(r[1]),ei(e,Bs(t,1),n?55:54),!0}const o=vs[n];if(o){const n=o[2]>2;return e.local("pLocals"),ai(e,Bs(t,2),t,!0),Ks(e,Bs(t,4),n?41:40),Ks(e,Bs(t,3),n?41:40),e.appendAtomic(o[0],!1),e.appendMemarg(0,o[2]),0!==o[1]&&e.appendU8(o[1]),ei(e,Bs(t,1),n?55:54),!0}return!1}const xi=64;let Ii,Ai,ji,$i=0;const Li={};function Ri(){return Ai||(Ai=[ts("interp_entry_prologue",Za("mono_jiterp_interp_entry_prologue")),ts("interp_entry",Za("mono_jiterp_interp_entry")),ts("unbox",Za("mono_jiterp_object_unbox")),ts("stackval_from_data",Za("mono_jiterp_stackval_from_data"))],Ai)}let Bi,Ni=class{constructor(e,t,n,r,o,a,s,i){this.imethod=e,this.method=t,this.argumentCount=n,this.unbox=o,this.hasThisReference=a,this.hasReturnValue=s,this.paramTypes=new Array(n);for(let e=0;ee&&(n=n.substring(n.length-e,n.length)),n=`${this.imethod.toString(16)}_${n}`}else n=`${this.imethod.toString(16)}_${this.hasThisReference?"i":"s"}${this.hasReturnValue?"_r":""}_${this.argumentCount}`;this.traceName=n}finally{e&&Xe._free(e)}}getTraceName(){return this.traceName||this.generateName(),this.traceName||"unknown"}getName(){return this.name||this.generateName(),this.name||"unknown"}};function Ci(){const e=[];let t=0;for(;0!=(t=o.mono_jiterp_tlqueue_next(1));){const n=Li[t];n?e.push(n):Fe(`Failed to find corresponding info for method ptr ${t} from jit queue!`)}if(!e.length)return;const n=4*e.length+1;let r=Ii;if(r?r.clear(n):(Ii=r=new Na(n),r.defineType("unbox",{pMonoObject:127},127,!0),r.defineType("interp_entry_prologue",{pData:127,this_arg:127},127,!0),r.defineType("interp_entry",{pData:127,res:127},64,!0),r.defineType("stackval_from_data",{type:127,result:127,value:127},64,!0)),r.options.wasmBytesLimit<=cs(6))return;const a=Ma();let s=0,i=!0,c=!1;try{r.appendU32(1836278016),r.appendU32(1);for(let t=0;tYi[o.mono_jiterp_type_to_ldind(e)])),this.enableDirect=ps().directJitCalls&&!this.noWrapper&&this.wasmNativeReturnType&&(0===this.wasmNativeSignature.length||this.wasmNativeSignature.every((e=>e))),this.enableDirect&&(this.target=this.addr);let c=this.target.toString(16);const l=Hi++;this.name=`${this.enableDirect?"jcp":"jcw"}_${c}_${l.toString(16)}`}}function Xi(e){let t=Wi[e];return t||(e>=Wi.length&&(Wi.length=e+1),Vi||(Vi=za()),Wi[e]=t=Vi.get(e)),t}function Qi(){const e=[];let t=0;for(;0!=(t=o.mono_jiterp_tlqueue_next(0));){const n=Gi[t];if(n)for(let t=0;t0){o.mono_jiterp_register_jit_call_thunk(n.cinfo,r);for(let e=0;e0&&(gc.push(["trace_eip","trace_eip",Uc]),gc.push(["trace_args","trace_eip",Ec]));const e=(e,t)=>{for(let n=0;n>>0,rc.operand2=t>>>0}function Tc(e,t,n,r){if("number"==typeof r)o.mono_jiterp_adjust_abort_count(r,1),r=ja(r);else{let e=uc[r];"number"!=typeof e?e=1:e++,uc[r]=e}dc[e].abortReason=r}function xc(e){if(!ot.runtimeReady)return;if(oc||(oc=ps()),!oc.enableStats)return;const t=cs(9),n=cs(10),r=cs(7),a=cs(8),s=cs(3),i=cs(4),c=cs(2),l=cs(1),p=cs(0),u=cs(6),d=cs(11),f=cs(12),_=t/(t+n)*100,m=o.mono_jiterp_get_rejected_trace_count(),h=oc.eliminateNullChecks?r.toString():"off",g=oc.zeroPageOptimization?a.toString()+(rs()?"":" (disabled)"):"off",b=oc.enableBackwardBranches?`emitted: ${t}, failed: ${n} (${_.toFixed(1)}%)`:": off",y=s?oc.directJitCalls?`direct jit calls: ${i} (${(i/s*100).toFixed(1)}%)`:"direct jit calls: off":"";if(Fe(`// jitted ${u} bytes; ${l} traces (${(l/p*100).toFixed(1)}%) (${m} rejected); ${s} jit_calls; ${c} interp_entries`),Fe(`// cknulls eliminated: ${h}, fused: ${g}; back-branches ${b}; ${y}`),Fe(`// time: ${0|d}ms generating, ${0|f}ms compiling wasm.`),!e){if(oc.countBailouts){const e=Object.values(dc);e.sort(((e,t)=>(t.bailoutCount||0)-(e.bailoutCount||0)));for(let e=0;et.hitCount-e.hitCount)),Fe("// hottest failed traces:");for(let e=0,n=0;e=0)){if(t[e].abortReason){if(t[e].abortReason.startsWith("mono_icall_")||t[e].abortReason.startsWith("ret."))continue;switch(t[e].abortReason){case"trace-too-small":case"trace-too-big":case"call":case"callvirt.fast":case"calli.nat.fast":case"calli.nat":case"call.delegate":case"newobj":case"newobj_vt":case"newobj_slow":case"switch":case"rethrow":case"end-of-body":case"ret":case"intrins_marvin_block":case"intrins_ascii_chars_to_uppercase":continue}}n++,Fe(`${t[e].name} @${t[e].ip} (${t[e].hitCount} hits) ${t[e].abortReason}`)}const n=[];for(const t in e)n.push([t,e[t]]);n.sort(((e,t)=>t[1]-e[1])),Fe("// heat:");for(let e=0;e0?uc[t]=n:delete uc[t]}const e=Object.keys(uc);e.sort(((e,t)=>uc[t]-uc[e]));for(let t=0;te.toString(16).padStart(2,"0"))).join("")}`}async function Rc(e){const t=at.config.resources.lazyAssembly;if(!t)throw new Error("No assemblies have been marked as lazy-loadable. Use the 'BlazorWebAssemblyLazyLoad' item group in your project file to enable lazy loading an assembly.");let n=e;e.endsWith(".dll")?n=e.substring(0,e.length-4):e.endsWith(".wasm")&&(n=e.substring(0,e.length-5));const r=n+".dll",o=n+".wasm";if(at.config.resources.fingerprinting){const t=at.config.resources.fingerprinting;for(const n in t){const a=t[n];if(a==r||a==o){e=n;break}}}if(!t[e])if(t[r])e=r;else{if(!t[o])throw new Error(`${e} must be marked with 'BlazorWebAssemblyLazyLoad' item group in your project file to allow lazy-loading.`);e=o}const a={name:e,hash:t[e],behavior:"assembly"};if(at.loadedAssemblies.includes(e))return!1;let s=n+".pdb",i=!1;if(0!=at.config.debugLevel&&(i=Object.prototype.hasOwnProperty.call(t,s),at.config.resources.fingerprinting)){const e=at.config.resources.fingerprinting;for(const t in e)if(e[t]==s){s=t,i=!0;break}}const c=at.retrieve_asset_download(a);let l=null,p=null;if(i){const e=t[s]?at.retrieve_asset_download({name:s,hash:t[s],behavior:"pdb"}):Promise.resolve(null),[n,r]=await Promise.all([c,e]);l=new Uint8Array(n),p=r?new Uint8Array(r):null}else{const e=await c;l=new Uint8Array(e),p=null}return function(e,t){at.assert_runtime_running();const n=Xe.stackSave();try{const n=xn(4),r=In(n,2),o=In(n,3);Mn(r,21),Mn(o,21),yo(r,e,4),yo(o,t,4),gn(mn.LoadLazyAssembly,n)}finally{Xe.stackRestore(n)}}(l,p),!0}async function Bc(e){const t=at.config.resources.satelliteResources;t&&await Promise.all(e.filter((e=>Object.prototype.hasOwnProperty.call(t,e))).map((e=>{const n=[];for(const r in t[e]){const o={name:r,hash:t[e][r],behavior:"resource",culture:e};n.push(at.retrieve_asset_download(o))}return n})).reduce(((e,t)=>e.concat(t)),new Array).map((async e=>{const t=await e;!function(e){at.assert_runtime_running();const t=Xe.stackSave();try{const t=xn(3),n=In(t,2);Mn(n,21),yo(n,e,4),gn(mn.LoadSatelliteAssembly,t)}finally{Xe.stackRestore(t)}}(new Uint8Array(t))})))}function Nc(e){if(e===c)return null;const t=o.mono_wasm_read_as_bool_or_null_unsafe(e);return 0!==t&&(1===t||null)}var Cc,Oc;function Dc(e){if(e)try{(e=e.toLocaleLowerCase()).includes("zh")&&(e=e.replace("chs","HANS").replace("cht","HANT"));const t=Intl.getCanonicalLocales(e.replace("_","-"));return t.length>0?t[0]:void 0}catch(e){return}}!function(e){e[e.Sending=0]="Sending",e[e.Closed=1]="Closed",e[e.Error=2]="Error"}(Cc||(Cc={})),function(e){e[e.Idle=0]="Idle",e[e.PartialCommand=1]="PartialCommand",e[e.Error=2]="Error"}(Oc||(Oc={}));const Fc=[function(e){qo&&(globalThis.clearTimeout(qo),qo=void 0),qo=Xe.safeSetTimeout(mono_wasm_schedule_timer_tick,e)},function(e,t,n,r,o){if(!0!==ot.mono_wasm_runtime_is_ready)return;const a=Y(),s=0!==e?xe(e).concat(".dll"):"",i=dt(new Uint8Array(a.buffer,t,n));let c;r&&(c=dt(new Uint8Array(a.buffer,r,o))),It({eventName:"AssemblyLoaded",assembly_name:s,assembly_b64:i,pdb_b64:c})},function(e,t){const n=xe(t);Qe.logging&&"function"==typeof Qe.logging.debugger&&Qe.logging.debugger(e,n)},function(e,t,n,r){const o={res_ok:e,res:{id:t,value:dt(new Uint8Array(Y().buffer,n,r))}};_t.has(t)&&Me(`Adding an id (${t}) that already exists in commands_received`),_t.set(t,o)},function mono_wasm_fire_debugger_agent_message_with_data(e,t){mono_wasm_fire_debugger_agent_message_with_data_to_pause(dt(new Uint8Array(Y().buffer,e,t)))},mono_wasm_fire_debugger_agent_message_with_data_to_pause,function(){++Jo,Xe.safeSetTimeout(Yo,0)},function(e,t,n,r,a,s,i,c){if(n||ut(!1,"expected instruction pointer"),oc||(oc=ps()),!oc.enableTraces)return 1;if(oc.wasmBytesLimit<=cs(6))return 1;let l,p=dc[r];if(p||(dc[r]=p=new cc(n,r,i)),ls(0,1),oc.estimateHeat||sc.length>0||p.isVerbose){const e=o.mono_wasm_method_get_full_name(t);l=xe(e),Xe._free(e)}const u=xe(o.mono_wasm_method_get_name(t));p.name=l||u;let d=oc.noExitBackwardBranches?function(e,t,n){const r=t+n,a=[],s=(e-t)/2;for(;e=s&&a.push(t)}switch(r){case 132:case 133:a.push(n+i)}e+=2*i}else e+=2*i}return a.length<=0?null:new Uint16Array(a)}(n,a,s):null;if(d&&n!==a){const e=(n-a)/2;let t=!1;for(let n=0;n=e){t=!0;break}t||(d=null)}const f=function(e,t,n,r,a,s,i,c,l){let p=hc;p?p.clear(8):(hc=p=new Na(8),function(e){e.defineType("trace",{frame:127,pLocals:127,cinfo:127,ip:127},127,!0),e.defineType("bailout",{retval:127,base:127,reason:127},127,!0),e.defineType("copy_ptr",{dest:127,src:127},64,!0),e.defineType("value_copy",{dest:127,src:127,klass:127},64,!0),e.defineType("entry",{imethod:127},127,!0),e.defineType("strlen",{ppString:127,pResult:127},127,!0),e.defineType("getchr",{ppString:127,pIndex:127,pResult:127},127,!0),e.defineType("getspan",{destination:127,span:127,index:127,element_size:127},127,!0),e.defineType("overflow_check_i4",{lhs:127,rhs:127,opcode:127},127,!0),e.defineType("mathop_d_d",{value:124},124,!0),e.defineType("mathop_dd_d",{lhs:124,rhs:124},124,!0),e.defineType("mathop_f_f",{value:125},125,!0),e.defineType("mathop_ff_f",{lhs:125,rhs:125},125,!0),e.defineType("fmaf",{x:125,y:125,z:125},125,!0),e.defineType("fma",{x:124,y:124,z:124},124,!0),e.defineType("trace_eip",{traceId:127,eip:127},64,!0),e.defineType("newobj_i",{ppDestination:127,vtable:127},127,!0),e.defineType("newstr",{ppDestination:127,length:127},127,!0),e.defineType("localloc",{destination:127,len:127,frame:127},64,!0),e.defineType("ld_del_ptr",{ppDestination:127,ppSource:127},64,!0),e.defineType("ldtsflda",{ppDestination:127,offset:127},64,!0),e.defineType("gettype",{destination:127,source:127},127,!0),e.defineType("castv2",{destination:127,source:127,klass:127,opcode:127},127,!0),e.defineType("hasparent",{klass:127,parent:127},127,!0),e.defineType("imp_iface",{vtable:127,klass:127},127,!0),e.defineType("imp_iface_s",{obj:127,vtable:127,klass:127},127,!0),e.defineType("box",{vtable:127,destination:127,source:127,vt:127},64,!0),e.defineType("conv",{destination:127,source:127,opcode:127},127,!0),e.defineType("relop_fp",{lhs:124,rhs:124,opcode:127},127,!0),e.defineType("safepoint",{frame:127,ip:127},64,!0),e.defineType("hashcode",{ppObj:127},127,!0),e.defineType("try_hash",{ppObj:127},127,!0),e.defineType("hascsize",{ppObj:127},127,!0),e.defineType("hasflag",{klass:127,dest:127,sp1:127,sp2:127},64,!0),e.defineType("array_rank",{destination:127,source:127},127,!0),e.defineType("stfld_o",{locals:127,fieldOffsetBytes:127,targetLocalOffsetBytes:127,sourceLocalOffsetBytes:127},127,!0),e.defineType("notnull",{ptr:127,expected:127,traceIp:127,ip:127},64,!0),e.defineType("stelemr",{o:127,aindex:127,ref:127},127,!0),e.defineType("simd_p_p",{arg0:127,arg1:127},64,!0),e.defineType("simd_p_pp",{arg0:127,arg1:127,arg2:127},64,!0),e.defineType("simd_p_ppp",{arg0:127,arg1:127,arg2:127,arg3:127},64,!0);const t=vc();for(let n=0;ni.indexOf(e)>=0))>=0;b&&!i&&ut(!1,"Expected methodFullName if trace is instrumented");const y=b?pc++:0;b&&(Fe(`instrumenting: ${i}`),lc[y]=new ic(i)),p.compressImportNames=!b;try{p.appendU32(1836278016),p.appendU32(1),p.generateTypeSection();const t={disp:127,cknull_ptr:127,dest_ptr:127,src_ptr:127,memop_dest:127,memop_src:127,index:127,count:127,math_lhs32:127,math_rhs32:127,math_lhs64:126,math_rhs64:126,temp_f32:125,temp_f64:124};p.options.enableSimd&&(t.v128_zero=123,t.math_lhs128=123,t.math_rhs128=123);let a=!0,i=0;if(p.defineFunction({type:"trace",name:d,export:!0,locals:t},(()=>{switch(p.base=n,p.traceIndex=s,p.frame=e,B(n)){case 672:case 673:case 675:case 674:break;default:throw new Error(`Expected *ip to be a jiterpreter opcode but it was ${B(n)}`)}return p.cfg.initialize(r,c,b?1:0),i=function(e,t,n,r,a,s,i,c){let l=!0,p=!1,u=!1,d=!1,f=0,_=0,m=0;Gs(),s.backBranchTraceLevel=i?2:0;let h=s.cfg.entry(n);for(;n&&n;){if(s.cfg.ip=n,n>=a){Tc(s.traceIndex,0,0,"end-of-body"),i&&Fe(`instrumented trace ${t} exited at end of body @${n.toString(16)}`);break}const g=3840-s.bytesGeneratedSoFar-s.cfg.overheadBytes;if(s.size>=g){Tc(s.traceIndex,0,0,"trace-too-big"),i&&Fe(`instrumented trace ${t} exited because of size limit at @${n.toString(16)} (spaceLeft=${g}b)`);break}let b=B(n);const y=o.mono_jiterp_get_opcode_info(b,2),w=o.mono_jiterp_get_opcode_info(b,3),k=o.mono_jiterp_get_opcode_info(b,1),S=b>=655&&b<=657,v=S?b-655+2:0,U=S?Bs(n,1+v):0;b>=0&&b<689||ut(!1,`invalid opcode ${b}`);const E=S?_s[v][U]:ja(b),T=n,x=s.options.noExitBackwardBranches&&Ms(n,r,c),I=s.branchTargets.has(n),A=x||I||l&&c,j=m+_+s.branchTargets.size;let $=!1,L=es(b);switch(x&&(s.backBranchTraceLevel>1&&Fe(`${t} recording back branch target 0x${n.toString(16)}`),s.backBranchOffsets.push(n)),A&&(u=!1,d=!1,Qs(s,n,x),p=!0,Gs(),m=0),L<-1&&p&&(L=-2===L?2:0),l=!1,271===b||(ac.indexOf(b)>=0?(Pa(s,n,23),b=676):u&&(b=676)),b){case 676:u&&(d||s.appendU8(0),d=!0);break;case 313:case 314:ni(s,Bs(n,1),0,Bs(n,2));break;case 312:ti(s,Bs(n,1)),Ks(s,Bs(n,2),40),s.local("frame"),s.callImport("localloc");break;case 285:Ks(s,Bs(n,1),40),s.i32_const(0),Ks(s,Bs(n,2),40),s.appendU8(252),s.appendU8(11),s.appendU8(0);break;case 286:Ks(s,Bs(n,1),40),qa(s,0,Bs(n,2));break;case 310:{const e=Bs(n,3),t=Bs(n,2),r=Bs(n,1),o=zs(s,e);0!==o&&("number"!=typeof o?(Ks(s,e,40),s.local("count",34),s.block(64,4)):(s.i32_const(o),s.local("count",33)),Ks(s,r,40),s.local("dest_ptr",34),s.appendU8(69),Ks(s,t,40),s.local("src_ptr",34),s.appendU8(69),s.appendU8(114),s.block(64,4),Pa(s,n,2),s.endBlock(),"number"==typeof o&&Ga(s,0,0,o,!1,"dest_ptr","src_ptr")||(s.local("dest_ptr"),s.local("src_ptr"),s.local("count"),s.appendU8(252),s.appendU8(10),s.appendU8(0),s.appendU8(0)),"number"!=typeof o&&s.endBlock());break}case 311:{const e=Bs(n,3),t=Bs(n,2);ai(s,Bs(n,1),n,!0),Ks(s,t,40),Ks(s,e,40),s.appendU8(252),s.appendU8(11),s.appendU8(0);break}case 143:case 145:case 227:case 229:case 144:case 146:case 129:case 132:case 133:_i(s,n,e,b)?p=!0:n=0;break;case 538:{const e=Bs(n,2),t=Bs(n,1);e!==t?(s.local("pLocals"),ai(s,e,n,!0),ei(s,t,54)):ai(s,e,n,!1),s.allowNullCheckOptimization&&Hs.set(t,n),$=!0;break}case 636:case 637:{const t=D(e+Ya(4));s.ptr_const(t),s.callImport("entry"),s.block(64,4),Pa(s,n,1),s.endBlock();break}case 674:L=0;break;case 138:break;case 86:{s.local("pLocals");const e=Bs(n,2),r=oi(s,e),o=Bs(n,1);r||Pe(`${t}: Expected local ${e} to have address taken flag`),ti(s,e),ei(s,o,54),Ps.set(o,{type:"ldloca",offset:e}),$=!0;break}case 272:case 300:case 301:case 556:{s.local("pLocals");let t=Ds(e,Bs(n,2));300===b&&(t=o.mono_jiterp_imethod_to_ftnptr(t)),s.ptr_const(t),ei(s,Bs(n,1),54);break}case 305:{const t=Ds(e,Bs(n,3));Ks(s,Bs(n,1),40),Ks(s,Bs(n,2),40),s.ptr_const(t),s.callImport("value_copy");break}case 306:{const e=Bs(n,3);Ks(s,Bs(n,1),40),Ks(s,Bs(n,2),40),Ja(s,e);break}case 307:{const e=Bs(n,3);ti(s,Bs(n,1),e),ai(s,Bs(n,2),n,!0),Ja(s,e);break}case 308:{const t=Ds(e,Bs(n,3));Ks(s,Bs(n,1),40),ti(s,Bs(n,2),0),s.ptr_const(t),s.callImport("value_copy");break}case 309:{const e=Bs(n,3);Ks(s,Bs(n,1),40),ti(s,Bs(n,2),0),Ja(s,e);break}case 540:s.local("pLocals"),ai(s,Bs(n,2),n,!0),s.appendU8(40),s.appendMemarg(Ya(2),2),ei(s,Bs(n,1),54);break;case 539:{s.block(),Ks(s,Bs(n,3),40),s.local("index",34);let e="cknull_ptr";s.options.zeroPageOptimization&&rs()?(ls(8,1),Ks(s,Bs(n,2),40),e="src_ptr",s.local(e,34)):ai(s,Bs(n,2),n,!0),s.appendU8(40),s.appendMemarg(Ya(2),2),s.appendU8(72),s.local("index"),s.i32_const(0),s.appendU8(78),s.appendU8(113),s.appendU8(13),s.appendULeb(0),Pa(s,n,11),s.endBlock(),s.local("pLocals"),s.local("index"),s.i32_const(2),s.appendU8(108),s.local(e),s.appendU8(106),s.appendU8(47),s.appendMemarg(Ya(3),1),ei(s,Bs(n,1),54);break}case 342:case 343:{const e=Ns(n,4);s.block(),Ks(s,Bs(n,3),40),s.local("index",34);let t="cknull_ptr";342===b?ai(s,Bs(n,2),n,!0):(ti(s,Bs(n,2),0),t="src_ptr",s.local(t,34)),s.appendU8(40),s.appendMemarg(Ya(7),2),s.appendU8(73),s.local("index"),s.i32_const(0),s.appendU8(78),s.appendU8(113),s.appendU8(13),s.appendULeb(0),Pa(s,n,18),s.endBlock(),s.local("pLocals"),s.local(t),s.appendU8(40),s.appendMemarg(Ya(8),2),s.local("index"),s.i32_const(e),s.appendU8(108),s.appendU8(106),ei(s,Bs(n,1),54);break}case 662:s.block(),Ks(s,Bs(n,3),40),s.local("count",34),s.i32_const(0),s.appendU8(78),s.appendU8(13),s.appendULeb(0),Pa(s,n,18),s.endBlock(),ti(s,Bs(n,1),16),s.local("dest_ptr",34),Ks(s,Bs(n,2),40),s.appendU8(54),s.appendMemarg(0,0),s.local("dest_ptr"),s.local("count"),s.appendU8(54),s.appendMemarg(4,0);break;case 577:ti(s,Bs(n,1),8),ti(s,Bs(n,2),8),s.callImport("ld_del_ptr");break;case 73:ti(s,Bs(n,1),4),s.ptr_const(Cs(n,2)),s.callImport("ldtsflda");break;case 661:s.block(),ti(s,Bs(n,1),4),ti(s,Bs(n,2),0),s.callImport("gettype"),s.appendU8(13),s.appendULeb(0),Pa(s,n,2),s.endBlock();break;case 658:{const t=Ds(e,Bs(n,4));s.ptr_const(t),ti(s,Bs(n,1),4),ti(s,Bs(n,2),0),ti(s,Bs(n,3),0),s.callImport("hasflag");break}case 667:{const e=Ya(1);s.local("pLocals"),ai(s,Bs(n,2),n,!0),s.i32_const(e),s.appendU8(106),ei(s,Bs(n,1),54);break}case 659:s.local("pLocals"),ti(s,Bs(n,2),0),s.callImport("hashcode"),ei(s,Bs(n,1),54);break;case 660:s.local("pLocals"),ti(s,Bs(n,2),0),s.callImport("try_hash"),ei(s,Bs(n,1),54);break;case 663:s.local("pLocals"),ti(s,Bs(n,2),0),s.callImport("hascsize"),ei(s,Bs(n,1),54);break;case 668:s.local("pLocals"),Ks(s,Bs(n,2),40),s.local("math_lhs32",34),Ks(s,Bs(n,3),40),s.appendU8(115),s.i32_const(2),s.appendU8(116),s.local("math_rhs32",33),s.local("math_lhs32"),s.i32_const(327685),s.appendU8(106),s.i32_const(10485920),s.appendU8(114),s.i32_const(1703962),s.appendU8(106),s.i32_const(-8388737),s.appendU8(114),s.local("math_rhs32"),s.appendU8(113),s.appendU8(69),ei(s,Bs(n,1),54);break;case 541:case 542:s.block(),ti(s,Bs(n,1),4),ti(s,Bs(n,2),0),s.callImport(541===b?"array_rank":"a_elesize"),s.appendU8(13),s.appendULeb(0),Pa(s,n,2),s.endBlock();break;case 289:case 290:{const t=Ds(e,Bs(n,3)),r=o.mono_jiterp_is_special_interface(t),a=289===b,i=Bs(n,1);if(!t){Tc(s.traceIndex,0,0,"null-klass"),n=0;continue}s.block(),s.options.zeroPageOptimization&&rs()?(Ks(s,Bs(n,2),40),s.local("dest_ptr",34),ls(8,1)):(s.block(),Ks(s,Bs(n,2),40),s.local("dest_ptr",34),s.appendU8(13),s.appendULeb(0),s.local("pLocals"),s.i32_const(0),ei(s,i,54),s.appendU8(12),s.appendULeb(1),s.endBlock(),s.local("dest_ptr")),r&&s.local("dest_ptr"),s.appendU8(40),s.appendMemarg(Ya(14),0),s.ptr_const(t),s.callImport(r?"imp_iface_s":"imp_iface"),a&&(s.local("dest_ptr"),s.appendU8(69),s.appendU8(114)),s.block(64,4),s.local("pLocals"),s.local("dest_ptr"),ei(s,i,54),s.appendU8(5),a?Pa(s,n,19):(s.local("pLocals"),s.i32_const(0),ei(s,i,54)),s.endBlock(),s.endBlock();break}case 291:case 292:case 287:case 288:{const t=Ds(e,Bs(n,3)),r=291===b||292===b,o=287===b||291===b,a=Bs(n,1);if(!t){Tc(s.traceIndex,0,0,"null-klass"),n=0;continue}s.block(),s.options.zeroPageOptimization&&rs()?(Ks(s,Bs(n,2),40),s.local("dest_ptr",34),ls(8,1)):(s.block(),Ks(s,Bs(n,2),40),s.local("dest_ptr",34),s.appendU8(13),s.appendULeb(0),s.local("pLocals"),s.i32_const(0),ei(s,a,54),s.appendU8(12),s.appendULeb(1),s.endBlock(),s.local("dest_ptr")),s.appendU8(40),s.appendMemarg(Ya(14),0),s.appendU8(40),s.appendMemarg(Ya(15),0),r&&s.local("src_ptr",34),s.i32_const(t),s.appendU8(70),s.block(64,4),s.local("pLocals"),s.local("dest_ptr"),ei(s,a,54),s.appendU8(5),r?(s.local("src_ptr"),s.ptr_const(t),s.callImport("hasparent"),o&&(s.local("dest_ptr"),s.appendU8(69),s.appendU8(114)),s.block(64,4),s.local("pLocals"),s.local("dest_ptr"),ei(s,a,54),s.appendU8(5),o?Pa(s,n,19):(s.local("pLocals"),s.i32_const(0),ei(s,a,54)),s.endBlock()):(ti(s,Bs(n,1),4),s.local("dest_ptr"),s.ptr_const(t),s.i32_const(b),s.callImport("castv2"),s.appendU8(69),s.block(64,4),Pa(s,n,19),s.endBlock()),s.endBlock(),s.endBlock();break}case 295:case 296:s.ptr_const(Ds(e,Bs(n,3))),ti(s,Bs(n,1),4),ti(s,Bs(n,2),0),s.i32_const(296===b?1:0),s.callImport("box");break;case 299:{const t=Ds(e,Bs(n,3)),r=Ya(17),o=Bs(n,1),a=D(t+r);if(!t||!a){Tc(s.traceIndex,0,0,"null-klass"),n=0;continue}s.options.zeroPageOptimization&&rs()?(Ks(s,Bs(n,2),40),s.local("dest_ptr",34),ls(8,1)):(ai(s,Bs(n,2),n,!0),s.local("dest_ptr",34)),s.appendU8(40),s.appendMemarg(Ya(14),0),s.appendU8(40),s.appendMemarg(Ya(15),0),s.local("src_ptr",34),s.appendU8(40),s.appendMemarg(r,0),s.i32_const(a),s.appendU8(70),s.local("src_ptr"),s.appendU8(45),s.appendMemarg(Ya(16),0),s.appendU8(69),s.appendU8(113),s.block(64,4),s.local("pLocals"),s.local("dest_ptr"),s.i32_const(Ya(18)),s.appendU8(106),ei(s,o,54),s.appendU8(5),Pa(s,n,21),s.endBlock();break}case 294:s.block(),ti(s,Bs(n,1),4),Ks(s,Bs(n,2),40),s.callImport("newstr"),s.appendU8(13),s.appendULeb(0),Pa(s,n,17),s.endBlock();break;case 283:s.block(),ti(s,Bs(n,1),4),s.ptr_const(Ds(e,Bs(n,2))),s.callImport("newobj_i"),s.appendU8(13),s.appendULeb(0),Pa(s,n,17),s.endBlock();break;case 282:case 284:case 544:case 543:p?(Va(s,n,j,15),u=!0,L=0):n=0;break;case 546:case 547:case 548:case 549:case 545:p?(Va(s,n,j,545==b?22:15),u=!0):n=0;break;case 137:case 134:Pa(s,n,16),u=!0;break;case 130:case 131:Pa(s,n,26),u=!0;break;case 136:if(s.callHandlerReturnAddresses.length>0&&s.callHandlerReturnAddresses.length<=3){const t=Fs(e,Bs(n,1));s.local("pLocals"),s.appendU8(40),s.appendMemarg(t,0),s.local("index",33);for(let e=0;e=3&&b<=12||b>=509&&b<=510?p||s.options.countBailouts?(Pa(s,n,14),u=!0):n=0:b>=13&&b<=21?si(s,n,b)?$=!0:n=0:b>=74&&b<=85?ii(s,n,b)||(n=0):b>=344&&b<=427?pi(s,n,b)||(n=0):gs[b]?ui(s,n,b)||(n=0):ws[b]?mi(s,n,e,b)?p=!0:n=0:b>=23&&b<=49?ci(s,e,n,b)||(n=0):b>=50&&b<=73?li(s,e,n,b)||(n=0):b>=87&&b<=127?gi(s,n,b)||(n=0):b>=578&&b<=631?hi(s,n,b)||(n=0):b>=315&&b<=341?yi(s,e,n,b)||(n=0):b>=227&&b<=270?s.branchTargets.size>0?(Va(s,n,j,8),u=!0):n=0:b>=650&&b<=657?(s.containsSimd=!0,Si(s,n,b,E,v,U)?$=!0:n=0):b>=559&&b<=571?(s.containsAtomics=!0,Ti(s,n,b)||(n=0)):0===L||(n=0)}if(n){if(!$){const e=n+2;for(let t=0;t0&&(e+=" -> ");for(let n=0;n0&&(p?m++:_++,f+=L),(n+=2*k)<=a&&(h=n)}else i&&Fe(`instrumented trace ${t} aborted for opcode ${E} @${T.toString(16)}`),Tc(s.traceIndex,0,0,b)}for(;s.activeBlocks>0;)s.endBlock();return s.cfg.exitIp=h,s.containsSimd&&(f+=10240),f}(e,d,n,r,u,p,y,c),a=i>=oc.minimumTraceValue,p.cfg.generate()})),p.emitImportsAndFunctions(!1),!a)return g&&"end-of-body"===g.abortReason&&(g.abortReason="trace-too-small"),0;_=Ma();const f=p.getArrayView();if(ls(6,f.length),f.length>=4080)return Me(`Jiterpreter generated too much code (${f.length} bytes) for trace ${d}. Please report this issue.`),0;const h=new WebAssembly.Module(f),w=p.getWasmImports(),k=new WebAssembly.Instance(h,w).exports[d];let S;m=!1,l?(za().set(l,k),S=l):S=Ha(0,k);const v=cs(1);return p.options.enableStats&&v&&v%500==0&&xc(!0),S}catch(e){h=!0,m=!1;let t=p.containsSimd?" (simd)":"";return p.containsAtomics&&(t+=" (atomics)"),Pe(`${i||d}${t} code generation failed: ${e} ${e.stack}`),Xa(),0}finally{const e=Ma();if(_?(ls(11,_-f),ls(12,e-_)):ls(11,e-f),h||!m&&oc.dumpTraces||b){if(h||oc.dumpTraces||b)for(let e=0;e0;)p.endBlock();p.inSection&&p.endSection()}catch(e){}const n=p.getArrayView();for(let r=0;r=4?Ci():$i>0||"function"==typeof globalThis.setTimeout&&($i=globalThis.setTimeout((()=>{$i=0,Ci()}),10))}},function(e,t,n,r,o,a,s,i){if(n>16)return 0;const c=new Ni(e,t,n,r,o,a,s,i);ji||(ji=za());const l=ji.get(i),p=(a?s?29:20:s?11:2)+n;return c.result=Ha(p,l),Li[e]=c,c.result},function(e,t,n,r,a){const s=D(n+0),i=qi[s];if(i)return void(i.result>0?o.mono_jiterp_register_jit_call_thunk(n,i.result):(i.queue.push(n),i.queue.length>12&&Qi()));const c=new Ji(e,t,n,r,0!==a);qi[s]=c;const l=o.mono_jiterp_tlqueue_add(0,e);let p=Gi[e];p||(p=Gi[e]=[]),p.push(c),l>=6&&Qi()},function(e,t,n,r,a){const s=Xi(e);try{s(t,n,r,a)}catch(e){const t=Xe.wasmExports.__cpp_exception,n=t instanceof WebAssembly.Tag;if(n&&!(e instanceof WebAssembly.Exception&&e.is(t)))throw e;if(i=a,Xe.HEAPU32[i>>>2]=1,n){const n=e.getArg(t,0);o.mono_jiterp_begin_catch(n),o.mono_jiterp_end_catch()}else{if("number"!=typeof e)throw e;o.mono_jiterp_begin_catch(e),o.mono_jiterp_end_catch()}}var i},Qi,function(e,t,n){delete dc[n],function(e){delete Li[e]}(t),function(e){const t=Gi[e];if(t){for(let e=0;e{e&&e.dispose()},u=!0)}const d=jn(e,1),f=$n(d),_=Qr(d,f,1),m=26==f,h=20==f||30==f,g={fn:i,fqn:a+":"+o,args_count:c,arg_marshalers:l,res_converter:_,has_cleanup:u,arg_cleanup:p,is_discard_no_wait:m,is_async:h,isDisposed:!1};let b;b=h||m||u?nr(g):0!=c||_?1!=c||_?1==c&&_?function(e){const t=e.fn,r=e.arg_marshalers[0],o=e.res_converter,a=e.fqn;return e=null,function(s){const i=Bt();try{n&&e.isDisposed;const a=r(s),i=t(a);o(s,i)}catch(e){ho(s,e)}finally{Nt(i,"mono.callCsFunction:",a)}}}(g):2==c&&_?function(e){const t=e.fn,r=e.arg_marshalers[0],o=e.arg_marshalers[1],a=e.res_converter,s=e.fqn;return e=null,function(i){const c=Bt();try{n&&e.isDisposed;const s=r(i),c=o(i),l=t(s,c);a(i,l)}catch(e){ho(i,e)}finally{Nt(c,"mono.callCsFunction:",s)}}}(g):nr(g):function(e){const t=e.fn,r=e.arg_marshalers[0],o=e.fqn;return e=null,function(a){const s=Bt();try{n&&e.isDisposed;const o=r(a);t(o)}catch(e){ho(a,e)}finally{Nt(s,"mono.callCsFunction:",o)}}}(g):function(e){const t=e.fn,r=e.fqn;return e=null,function(o){const a=Bt();try{n&&e.isDisposed,t()}catch(e){ho(o,e)}finally{Nt(a,"mono.callCsFunction:",r)}}}(g);let y=b;y[vn]=g,tr[s]=y,Nt(t,"mono.bindJsFunction:",o)}(e),0}catch(e){return $e(function(e){let t="unknown exception";if(e){t=e.toString();const n=e.stack;n&&(n.startsWith(t)?t=n:t+="\n"+n),t=We(t)}return t}(e))}},function(e,t){!function(e,t){at.assert_runtime_running();const n=Nr(e);n&&"function"==typeof n&&n[Sn]||ut(!1,`Bound function handle expected ${e}`),n(t)}(e,t)},function(e,t){at.assert_runtime_running();const n=tr[e];n||ut(!1,`Imported function handle expected ${e}`),n(t)},function(e){fr((()=>function(e){if(!at.is_runtime_running())return void(at.diagnosticTracing&&De("This promise resolution/rejection can't be propagated to managed code, mono runtime already exited."));const t=In(e,0),r=n;try{at.assert_runtime_running();const n=In(e,1),o=In(e,2),a=In(e,3),s=Dn(o),i=qn(o),c=Nr(i);c||ut(!1,`Cannot find Promise for JSHandle ${i}`),c.resolve_or_reject(s,i,a),r||(Mn(n,1),Mn(t,0))}catch(e){ho(t,e)}}(e)))},function(e){fr((()=>function(e){if(!at.is_runtime_running())return void(at.diagnosticTracing&&De("This promise can't be canceled, mono runtime already exited."));const t=Vr(e);t||ut(!1,`Expected Promise for GCHandle ${e}`),t.cancel()}(e)))},function(e,t,n,r,o,a,s){return"function"==typeof st.mono_wasm_change_case?st.mono_wasm_change_case(e,t,n,r,o,a,s):0},function(e,t,n,r,o,a,s,i){return"function"==typeof st.mono_wasm_compare_string?st.mono_wasm_compare_string(e,t,n,r,o,a,s,i):0},function(e,t,n,r,o,a,s,i){return"function"==typeof st.mono_wasm_starts_with?st.mono_wasm_starts_with(e,t,n,r,o,a,s,i):0},function(e,t,n,r,o,a,s,i){return"function"==typeof st.mono_wasm_ends_with?st.mono_wasm_ends_with(e,t,n,r,o,a,s,i):0},function(e,t,n,r,o,a,s,i,c){return"function"==typeof st.mono_wasm_index_of?st.mono_wasm_index_of(e,t,n,r,o,a,s,i,c):0},function(e,t,n,r,o,a){return"function"==typeof st.mono_wasm_get_calendar_info?st.mono_wasm_get_calendar_info(e,t,n,r,o,a):0},function(e,t,n,r,o){return"function"==typeof st.mono_wasm_get_culture_info?st.mono_wasm_get_culture_info(e,t,n,r,o):0},function(e,t,n){return"function"==typeof st.mono_wasm_get_first_day_of_week?st.mono_wasm_get_first_day_of_week(e,t,n):0},function(e,t,n){return"function"==typeof st.mono_wasm_get_first_week_of_year?st.mono_wasm_get_first_week_of_year(e,t,n):0},function(e,t,n,r,o,a,s){try{const i=Ie(n,n+2*r),c=Dc(i);if(!c&&i)return je(o,o+2*i.length,i),v(s,i.length),0;const l=Dc(Ie(e,e+2*t));if(!c||!l)throw new Error(`Locale or culture name is null or empty. localeName=${c}, cultureName=${l}`);const p=c.split("-");let u,d;try{const e=p.length>1?p.pop():void 0;d=e?new Intl.DisplayNames([l],{type:"region"}).of(e):void 0;const t=p.join("-");u=new Intl.DisplayNames([l],{type:"language"}).of(t)}catch(e){if(!(e instanceof RangeError))throw e;try{u=new Intl.DisplayNames([l],{type:"language"}).of(c)}catch(e){if(e instanceof RangeError&&i)return je(o,o+2*i.length,i),v(s,i.length),0;throw e}}const f={LanguageName:u,RegionName:d},_=Object.values(f).join("##");if(!_)throw new Error(`Locale info for locale=${c} is null or empty.`);if(_.length>a)throw new Error(`Locale info for locale=${c} exceeds length of ${a}.`);return je(o,o+2*_.length,_),v(s,_.length),0}catch(e){return v(s,-1),$e(e.toString())}}];async function Mc(e,t){try{const n=await Pc(e,t);return at.mono_exit(n),n}catch(e){try{at.mono_exit(1,e)}catch(e){}return e&&"number"==typeof e.status?e.status:1}}async function Pc(e,t){null!=e&&""!==e||(e=at.config.mainAssemblyName)||ut(!1,"Null or empty config.mainAssemblyName"),null==t&&(t=ot.config.applicationArguments),null==t&&(t=Ye?(await import(/*! webpackIgnore: true */"process")).argv.slice(2):[]),function(e,t){const n=t.length+1,r=Xe._malloc(4*n);let a=0;Xe.setValue(r+4*a,o.mono_wasm_strdup(e),"i32"),a+=1;for(let e=0;e{const t=setInterval((()=>{1==ot.waitForDebugger&&(clearInterval(t),e())}),100)})));try{return Xe.runtimeKeepalivePush(),await new Promise((e=>globalThis.setTimeout(e,0))),await function(e,t,n){at.assert_runtime_running();const r=Xe.stackSave();try{const r=xn(5),o=In(r,1),a=In(r,2),s=In(r,3),i=In(r,4),c=function(e){const t=Xe.lengthBytesUTF8(e)+1,n=Xe._malloc(t),r=Y().subarray(n,n+t);return Xe.stringToUTF8Array(e,r,0,t),r[t-1]=0,n}(e);io(a,c),wo(s,t&&!t.length?void 0:t,15),Zr(i,n);let l=tn(o,0,Ht);return hn(ot.managedThreadTID,mn.CallEntrypoint,r),l=nn(r,Ht,l),null==l&&(l=Promise.resolve(0)),l[Br]=!0,l}finally{Xe.stackRestore(r)}}(e,t,1==ot.waitForDebugger)}finally{Xe.runtimeKeepalivePop()}}function Vc(e){ot.runtimeReady&&(ot.runtimeReady=!1,o.mono_wasm_exit(e))}function zc(e){if(at.exitReason=e,ot.runtimeReady){ot.runtimeReady=!1;const t=qe(e);Xe.abort(t)}throw e}async function Hc(e){e.out||(e.out=console.log.bind(console)),e.err||(e.err=console.error.bind(console)),e.print||(e.print=e.out),e.printErr||(e.printErr=e.err),at.out=e.print,at.err=e.printErr,await async function(){var e;if(Ye){if(globalThis.performance===Uo){const{performance:e}=Qe.require("perf_hooks");globalThis.performance=e}if(Qe.process=await import(/*! webpackIgnore: true */"process"),globalThis.crypto||(globalThis.crypto={}),!globalThis.crypto.getRandomValues){let e;try{e=Qe.require("node:crypto")}catch(e){}e?e.webcrypto?globalThis.crypto=e.webcrypto:e.randomBytes&&(globalThis.crypto.getRandomValues=t=>{t&&t.set(e.randomBytes(t.length))}):globalThis.crypto.getRandomValues=()=>{throw new Error("Using node without crypto support. To enable current operation, either provide polyfill for 'globalThis.crypto.getRandomValues' or enable 'node:crypto' module.")}}}ot.subtle=null===(e=globalThis.crypto)||void 0===e?void 0:e.subtle}()}function Wc(e){const t=Bt();e.locateFile||(e.locateFile=e.__locateFile=e=>at.scriptDirectory+e),e.mainScriptUrlOrBlob=at.scriptUrl;const s=e.instantiateWasm,c=e.preInit?"function"==typeof e.preInit?[e.preInit]:e.preInit:[],l=e.preRun?"function"==typeof e.preRun?[e.preRun]:e.preRun:[],p=e.postRun?"function"==typeof e.postRun?[e.postRun]:e.postRun:[],u=e.onRuntimeInitialized?e.onRuntimeInitialized:()=>{};e.instantiateWasm=(e,t)=>function(e,t,n){const r=Bt();if(n){const o=n(e,((e,n)=>{Nt(r,"mono.instantiateWasm"),ot.afterInstantiateWasm.promise_control.resolve(),t(e,n)}));return o}return async function(e,t){try{await at.afterConfigLoaded,at.diagnosticTracing&&De("instantiate_wasm_module"),await ot.beforePreInit.promise,Xe.addRunDependency("instantiate_wasm_module"),await async function(){ot.featureWasmSimd=await at.simd(),ot.featureWasmEh=await at.exceptions(),ot.emscriptenBuildOptions.wasmEnableSIMD&&(ot.featureWasmSimd||ut(!1,"This browser/engine doesn't support WASM SIMD. Please use a modern version. See also https://aka.ms/dotnet-wasm-features")),ot.emscriptenBuildOptions.wasmEnableEH&&(ot.featureWasmEh||ut(!1,"This browser/engine doesn't support WASM exception handling. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"))}(),function(e){const t=e.env||e.a;if(!t)return void Me("WARNING: Neither imports.env or imports.a were present when instantiating the wasm module. This likely indicates an emscripten configuration issue.");const n=new Array(Fc.length);for(const e in t){const r=t[e];if("function"==typeof r&&-1!==r.toString().indexOf("runtime_idx"))try{const{runtime_idx:t}=r();if(void 0!==n[t])throw new Error(`Duplicate runtime_idx ${t}`);n[t]=e}catch(e){}}for(const[e,r]of Fc.entries()){const o=n[e];if(void 0!==o){if("function"!=typeof t[o])throw new Error(`Expected ${o} to be a function`);t[o]=r}}}(e);const n=await at.wasmCompilePromise.promise;t(await WebAssembly.instantiate(n,e),n),at.diagnosticTracing&&De("instantiate_wasm_module done"),ot.afterInstantiateWasm.promise_control.resolve()}catch(e){throw Pe("instantiate_wasm_module() failed",e),at.mono_exit(1,e),e}Xe.removeRunDependency("instantiate_wasm_module")}(e,t),[]}(e,t,s),e.preInit=[()=>function(e){Xe.addRunDependency("mono_pre_init");const t=Bt();try{Xe.addRunDependency("mono_wasm_pre_init_essential"),at.diagnosticTracing&&De("mono_wasm_pre_init_essential"),at.gitHash!==ot.gitHash&&Me(`The version of dotnet.runtime.js ${ot.gitHash} is different from the version of dotnet.js ${at.gitHash}!`),at.gitHash!==ot.emscriptenBuildOptions.gitHash&&Me(`The version of dotnet.native.js ${ot.emscriptenBuildOptions.gitHash} is different from the version of dotnet.js ${at.gitHash}!`),n!==ot.emscriptenBuildOptions.wasmEnableThreads&&Me(`The threads of dotnet.native.js ${ot.emscriptenBuildOptions.wasmEnableThreads} is different from the version of dotnet.runtime.js ${n}!`),function(){const e=[...r];for(const t of e){const e=o,[n,r,a,s,c]=t,l="function"==typeof n;if(!0===n||l)e[r]=function(...t){!l||!n()||ut(!1,`cwrap ${r} should not be called when binding was skipped`);const o=i(r,a,s,c);return e[r]=o,o(...t)};else{const t=i(r,a,s,c);e[r]=t}}}(),s=Qe,Object.assign(s,{mono_wasm_exit:o.mono_wasm_exit,mono_wasm_profiler_init_aot:a.mono_wasm_profiler_init_aot,mono_wasm_profiler_init_browser:a.mono_wasm_profiler_init_browser,mono_wasm_exec_regression:o.mono_wasm_exec_regression,mono_wasm_print_thread_dump:void 0}),Xe.removeRunDependency("mono_wasm_pre_init_essential"),at.diagnosticTracing&&De("preInit"),ot.beforePreInit.promise_control.resolve(),e.forEach((e=>e()))}catch(e){throw Pe("user preInint() failed",e),at.mono_exit(1,e),e}var s;(async()=>{try{await async function(){at.diagnosticTracing&&De("mono_wasm_pre_init_essential_async"),Xe.addRunDependency("mono_wasm_pre_init_essential_async"),Xe.removeRunDependency("mono_wasm_pre_init_essential_async")}(),Nt(t,"mono.preInit")}catch(e){throw at.mono_exit(1,e),e}ot.afterPreInit.promise_control.resolve(),Xe.removeRunDependency("mono_pre_init")})()}(c)],e.preRun=[()=>async function(e){Xe.addRunDependency("mono_pre_run_async");try{await ot.afterInstantiateWasm.promise,await ot.afterPreInit.promise,at.diagnosticTracing&&De("preRunAsync");const t=Bt();e.map((e=>e())),Nt(t,"mono.preRun")}catch(e){throw Pe("preRunAsync() failed",e),at.mono_exit(1,e),e}ot.afterPreRun.promise_control.resolve(),Xe.removeRunDependency("mono_pre_run_async")}(l)],e.onRuntimeInitialized=()=>async function(e){try{await ot.afterPreRun.promise,at.diagnosticTracing&&De("onRuntimeInitialized"),ot.nativeExit=Vc,ot.nativeAbort=zc;const t=Bt();if(ot.beforeOnRuntimeInitialized.promise_control.resolve(),await ot.coreAssetsInMemory.promise,ot.config.virtualWorkingDirectory){const e=Xe.FS,t=ot.config.virtualWorkingDirectory;try{const n=e.stat(t);n?n&&e.isDir(n.mode)||ut(!1,`FS.chdir: ${t} is not a directory`):Xe.FS_createPath("/",t,!0,!0)}catch(e){Xe.FS_createPath("/",t,!0,!0)}e.chdir(t)}ot.config.interpreterPgo&&setTimeout(Gc,1e3*(ot.config.interpreterPgoSaveDelay||15)),Xe.runtimeKeepalivePush(),n||await async function(){try{const t=Bt();at.diagnosticTracing&&De("Initializing mono runtime");for(const e in ot.config.environmentVariables){const t=ot.config.environmentVariables[e];if("string"!=typeof t)throw new Error(`Expected environment variable '${e}' to be a string but it was ${typeof t}: '${t}'`);qc(e,t)}ot.config.runtimeOptions&&function(e){if(!Array.isArray(e))throw new Error("Expected runtimeOptions to be an array of strings");const t=Xe._malloc(4*e.length);let n=0;for(let r=0;raot; in your project file."),null==e&&(e={}),"writeAt"in e||(e.writeAt="System.Runtime.InteropServices.JavaScript.JavaScriptExports::StopProfile"),"sendTo"in e||(e.sendTo="Interop/Runtime::DumpAotProfileData");const t="aot:write-at-method="+e.writeAt+",send-to-method="+e.sendTo;a.mono_wasm_profiler_init_aot(t)}(ot.config.aotProfilerOptions),ot.config.browserProfilerOptions&&(ot.config.browserProfilerOptions,ot.emscriptenBuildOptions.enableBrowserProfiler||ut(!1,"Browser profiler is not enabled, please use browser; in your project file."),a.mono_wasm_profiler_init_browser("browser:")),ot.config.logProfilerOptions&&(e=ot.config.logProfilerOptions,ot.emscriptenBuildOptions.enableLogProfiler||ut(!1,"Log profiler is not enabled, please use log; in your project file."),e.takeHeapshot||ut(!1,"Log profiler is not enabled, the takeHeapshot method must be defined in LogProfilerOptions.takeHeapshot"),a.mono_wasm_profiler_init_log((e.configuration||"log:alloc,output=output.mlpd")+`,take-heapshot-method=${e.takeHeapshot}`)),function(){at.diagnosticTracing&&De("mono_wasm_load_runtime");try{const e=Bt();let t=ot.config.debugLevel;null==t&&(t=0,ot.config.debugLevel&&(t=0+t)),o.mono_wasm_load_runtime(t),Nt(e,"mono.loadRuntime")}catch(e){throw Pe("mono_wasm_load_runtime () failed",e),at.mono_exit(1,e),e}}(),function(){if(ds)return;ds=!0;const e=ps(),t=e.tableSize,n=ot.emscriptenBuildOptions.runAOTCompilation?e.tableSize:1,r=ot.emscriptenBuildOptions.runAOTCompilation?e.aotTableSize:1,a=t+n+36*r+1,s=za();let i=s.length;const c=performance.now();s.grow(a);const l=performance.now();e.enableStats&&Fe(`Allocated ${a} function table entries for jiterpreter, bringing total table size to ${s.length}`),i=us(0,i,t,Za("mono_jiterp_placeholder_trace")),i=us(1,i,n,Za("mono_jiterp_placeholder_jit_call"));for(let e=2;e<=37;e++)i=us(e,i,r,s.get(o.mono_jiterp_get_interp_entry_func(e)));const p=performance.now();e.enableStats&&Fe(`Growing wasm function table took ${l-c}. Filling table took ${p-l}.`)}(),function(){if(!ot.mono_wasm_bindings_is_ready){at.diagnosticTracing&&De("bindings_init"),ot.mono_wasm_bindings_is_ready=!0;try{const e=Bt();he||("undefined"!=typeof TextDecoder&&(be=new TextDecoder("utf-16le"),ye=new TextDecoder("utf-8",{fatal:!1}),we=new TextDecoder("utf-8"),ke=new TextEncoder),he=Xe._malloc(12)),Se||(Se=function(e){let t;if(le.length>0)t=le.pop();else{const e=function(){if(null==se||!ie){se=ue(ae,"js roots"),ie=new Int32Array(ae),ce=ae;for(let e=0;eat.loadedFiles.push(e.url))),at.diagnosticTracing&&De("all assets are loaded in wasm memory"))}(),Xc.registerRuntime(rt),0===at.config.debugLevel||ot.mono_wasm_runtime_is_ready||function mono_wasm_runtime_ready(){if(Qe.mono_wasm_runtime_is_ready=ot.mono_wasm_runtime_is_ready=!0,yt=0,bt={},wt=-1,globalThis.dotnetDebugger)debugger}(),0!==at.config.debugLevel&&at.config.cacheBootResources&&at.logDownloadStatsToConsole(),setTimeout((()=>{at.purgeUnusedCacheEntriesAsync()}),at.config.cachedResourcesPurgeDelay);try{e()}catch(e){throw Pe("user callback onRuntimeInitialized() failed",e),e}await async function(){at.diagnosticTracing&&De("mono_wasm_after_user_runtime_initialized");try{if(Xe.onDotnetReady)try{await Xe.onDotnetReady()}catch(e){throw Pe("onDotnetReady () failed",e),e}}catch(e){throw Pe("mono_wasm_after_user_runtime_initialized () failed",e),e}}(),Nt(t,"mono.onRuntimeInitialized")}catch(e){throw Xe.runtimeKeepalivePop(),Pe("onRuntimeInitializedAsync() failed",e),at.mono_exit(1,e),e}ot.afterOnRuntimeInitialized.promise_control.resolve()}(u),e.postRun=[()=>async function(e){try{await ot.afterOnRuntimeInitialized.promise,at.diagnosticTracing&&De("postRunAsync");const t=Bt();Xe.FS_createPath("/","usr",!0,!0),Xe.FS_createPath("/","usr/share",!0,!0),e.map((e=>e())),Nt(t,"mono.postRun")}catch(e){throw Pe("postRunAsync() failed",e),at.mono_exit(1,e),e}ot.afterPostRun.promise_control.resolve()}(p)],e.ready.then((async()=>{await ot.afterPostRun.promise,Nt(t,"mono.emscriptenStartup"),ot.dotnetReady.promise_control.resolve(rt)})).catch((e=>{ot.dotnetReady.promise_control.reject(e)})),e.ready=ot.dotnetReady.promise}function qc(e,t){o.mono_wasm_setenv(e,t)}async function Gc(){void 0!==at.exitCode&&0!==at.exitCode||await Ac()}async function Jc(e){}let Xc;function Qc(r){const o=Xe,a=r,s=globalThis;Object.assign(a.internal,{mono_wasm_exit:e=>{Xe.err("early exit "+e)},forceDisposeProxies:Hr,mono_wasm_dump_threads:void 0,logging:void 0,mono_wasm_stringify_as_error_with_stack:qe,mono_wasm_get_loaded_files:Ia,mono_wasm_send_dbg_command_with_parms:St,mono_wasm_send_dbg_command:vt,mono_wasm_get_dbg_command_info:Ut,mono_wasm_get_details:$t,mono_wasm_release_object:Rt,mono_wasm_call_function_on:jt,mono_wasm_debugger_resume:Et,mono_wasm_detach_debugger:Tt,mono_wasm_raise_debug_event:It,mono_wasm_change_debugger_log_level:xt,mono_wasm_debugger_attached:At,mono_wasm_runtime_is_ready:ot.mono_wasm_runtime_is_ready,mono_wasm_get_func_id_to_name_mappings:Je,get_property:ar,set_property:or,has_property:sr,get_typeof_property:ir,get_global_this:cr,get_dotnet_instance:()=>rt,dynamic_import:ur,mono_wasm_bind_cs_function:hr,ws_wasm_create:ha,ws_wasm_open:ga,ws_wasm_send:ba,ws_wasm_receive:ya,ws_wasm_close:wa,ws_wasm_abort:ka,ws_get_state:ma,http_wasm_supports_streaming_request:Ao,http_wasm_supports_streaming_response:jo,http_wasm_create_controller:$o,http_wasm_get_response_type:Fo,http_wasm_get_response_status:Mo,http_wasm_abort:Ro,http_wasm_transform_stream_write:Bo,http_wasm_transform_stream_close:No,http_wasm_fetch:Do,http_wasm_fetch_stream:Co,http_wasm_fetch_bytes:Oo,http_wasm_get_response_header_names:Po,http_wasm_get_response_header_values:Vo,http_wasm_get_response_bytes:Ho,http_wasm_get_response_length:zo,http_wasm_get_streamed_response_bytes:Wo,jiterpreter_dump_stats:xc,jiterpreter_apply_options:is,jiterpreter_get_options:ps,interp_pgo_load_data:jc,interp_pgo_save_data:Ac,mono_wasm_gc_lock:re,mono_wasm_gc_unlock:oe,monoObjectAsBoolOrNullUnsafe:Nc,monoStringToStringUnsafe:Ce,loadLazyAssembly:Rc,loadSatelliteAssemblies:Bc});const i={stringify_as_error_with_stack:qe,instantiate_symbols_asset:Ta,instantiate_asset:Ea,jiterpreter_dump_stats:xc,forceDisposeProxies:Hr,instantiate_segmentation_rules_asset:xa};"hybrid"===at.config.globalizationMode&&(i.stringToUTF16=je,i.stringToUTF16Ptr=$e,i.utf16ToString=Ie,i.utf16ToStringLoop=Ae,i.localHeapViewU16=Z,i.setU16_local=y,i.setI32=v),Object.assign(ot,i);const c={runMain:Pc,runMainAndExit:Mc,exit:at.mono_exit,setEnvironmentVariable:qc,getAssemblyExports:yr,setModuleImports:rr,getConfig:()=>ot.config,invokeLibraryInitializers:at.invokeLibraryInitializers,setHeapB32:m,setHeapB8:h,setHeapU8:g,setHeapU16:b,setHeapU32:w,setHeapI8:k,setHeapI16:S,setHeapI32:v,setHeapI52:E,setHeapU52:T,setHeapI64Big:x,setHeapF32:I,setHeapF64:A,getHeapB32:$,getHeapB8:L,getHeapU8:R,getHeapU16:B,getHeapU32:N,getHeapI8:F,getHeapI16:M,getHeapI32:P,getHeapI52:V,getHeapU52:z,getHeapI64Big:H,getHeapF32:W,getHeapF64:q,localHeapViewU8:Y,localHeapViewU16:Z,localHeapViewU32:K,localHeapViewI8:G,localHeapViewI16:J,localHeapViewI32:X,localHeapViewI64Big:Q,localHeapViewF32:ee,localHeapViewF64:te};return Object.assign(rt,{INTERNAL:a.internal,Module:o,runtimeBuildInfo:{productVersion:e,gitHash:ot.gitHash,buildConfiguration:t,wasmEnableThreads:n,wasmEnableSIMD:!0,wasmEnableExceptionHandling:!0},...c}),s.getDotnetRuntime?Xc=s.getDotnetRuntime.__list:(s.getDotnetRuntime=e=>s.getDotnetRuntime.__list.getRuntime(e),s.getDotnetRuntime.__list=Xc=new Yc),rt}class Yc{constructor(){this.list={}}registerRuntime(e){return void 0===e.runtimeId&&(e.runtimeId=Object.keys(this.list).length),this.list[e.runtimeId]=mr(e),at.config.runtimeId=e.runtimeId,e.runtimeId}getRuntime(e){const t=this.list[e];return t?t.deref():void 0}}export{Wc as configureEmscriptenStartup,Hc as configureRuntimeStartup,Jc as configureWorkerStartup,Qc as initializeExports,Eo as initializeReplacements,ct as passEmscriptenInternals,Xc as runtimeList,lt as setRuntimeGlobals}; +//# sourceMappingURL=dotnet.runtime.js.map diff --git a/_framework/dotnet.runtime.ju77aherdp.js.br b/_framework/dotnet.runtime.ju77aherdp.js.br new file mode 100644 index 00000000..2b3abf5f Binary files /dev/null and b/_framework/dotnet.runtime.ju77aherdp.js.br differ diff --git a/_framework/dotnet.runtime.ju77aherdp.js.gz b/_framework/dotnet.runtime.ju77aherdp.js.gz new file mode 100644 index 00000000..b628b10e Binary files /dev/null and b/_framework/dotnet.runtime.ju77aherdp.js.gz differ diff --git a/brotliloader.min.js b/brotliloader.min.js new file mode 100755 index 00000000..09b3932d --- /dev/null +++ b/brotliloader.min.js @@ -0,0 +1 @@ +import{BrotliDecode as d}from"./decode.min.js";Blazor.start({loadBootResource:(n,t,i)=>{if(n!=="dotnetjs"&&n!=="configuration")return fetch(i+".br",{cache:"no-cache"}).then(n=>{if(!n.ok)throw new Error(n.statusText);return n.arrayBuffer()}).then(t=>{const i=new Int8Array(t),r=d(i),u=n==="dotnetwasm"?"application/wasm":"application/octet-stream";return new Response(r,{headers:{"content-type":u}})})}}); \ No newline at end of file diff --git a/css/fonts/Awesome-Blazor-Browser-Icons.svg b/css/fonts/Awesome-Blazor-Browser-Icons.svg new file mode 100644 index 00000000..47a405fa --- /dev/null +++ b/css/fonts/Awesome-Blazor-Browser-Icons.svg @@ -0,0 +1,22 @@ + + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/css/fonts/Awesome-Blazor-Browser-Icons.svg.br b/css/fonts/Awesome-Blazor-Browser-Icons.svg.br new file mode 100644 index 00000000..7355e347 Binary files /dev/null and b/css/fonts/Awesome-Blazor-Browser-Icons.svg.br differ diff --git a/css/fonts/Awesome-Blazor-Browser-Icons.svg.gz b/css/fonts/Awesome-Blazor-Browser-Icons.svg.gz new file mode 100644 index 00000000..33262698 Binary files /dev/null and b/css/fonts/Awesome-Blazor-Browser-Icons.svg.gz differ diff --git a/css/fonts/Awesome-Blazor-Browser-Icons.ttf b/css/fonts/Awesome-Blazor-Browser-Icons.ttf new file mode 100644 index 00000000..5cdd7766 Binary files /dev/null and b/css/fonts/Awesome-Blazor-Browser-Icons.ttf differ diff --git a/css/fonts/Awesome-Blazor-Browser-Icons.woff b/css/fonts/Awesome-Blazor-Browser-Icons.woff new file mode 100644 index 00000000..a2abde75 Binary files /dev/null and b/css/fonts/Awesome-Blazor-Browser-Icons.woff differ diff --git a/css/images/ogp-image.png b/css/images/ogp-image.png new file mode 100644 index 00000000..fecc6252 Binary files /dev/null and b/css/images/ogp-image.png differ diff --git a/css/site.css b/css/site.css new file mode 100644 index 00000000..dd23ef56 --- /dev/null +++ b/css/site.css @@ -0,0 +1,711 @@ +body.theme-system-default, body.theme-light-mode { + --default-back-color: #ffffff; + --default-text-color: #24292f; + --default-link-color: #0366d6; + --default-link-color-light: #75b5fd; + --default-border-color: #d0d7de; + --quote-text-color: #6a737d; + --quote-text-line-color: #dfe2e5; + --header-text-line-color: #d8dee4; + --weaked-text-color: #c0c0c0; + --deadlink-text-color: #c0c0c0; + --appbar-back-color: #24292e; + --appbar-text-color: #ffffff; + --searchbox-back-color: var(--appbar-back-color); + --searchbox-back-color-focused: #ffffff; + --searchbox-border-color: #57606a; + --searchbox-text-color: #ffffff; + --searchbox-text-color-focused: #000000; + --footer-back-color: #e0e0e0; + --footer-text-color: #606060; + --scrollbar-back-color: #f1f1f1; + --scrollbar-thumb-color: #a8a8a8; +} + +@media (prefers-color-scheme: dark) { + body.theme-system-default, body.theme-dark-mode { + --default-back-color: #22272e; + --default-text-color: #aebac6; + --default-link-color: #449bf1; + --default-link-color-light: #70b2ef; + --default-border-color: #454c55; + --header-text-line-color: #454c55; + --weaked-text-color: #77838f; + --deadlink-text-color: #586168; + --quote-text-color: #768390; + --quote-text-line-color: #444c56; + --appbar-back-color: #2d333b; + --appbar-text-color: var(---default-text-color); + --searchbox-back-color: #22272e; + --searchbox-back-color-focused: #2d333b; + --searchbox-border-color: #454c55; + --searchbox-text-color: #aebac6; + --searchbox-text-color-focused: #aebac6; + --footer-back-color: var(--appbar-back-color); + --footer-text-color: var(--weaked-text-color); + --scrollbar-back-color: #424242; + --scrollbar-thumb-color: #7b7b7b; + } +} +body.theme-dark-mode { + --default-back-color: #22272e; + --default-text-color: #aebac6; + --default-link-color: #449bf1; + --default-link-color-light: #70b2ef; + --default-border-color: #454c55; + --header-text-line-color: #454c55; + --weaked-text-color: #77838f; + --deadlink-text-color: #586168; + --quote-text-color: #768390; + --quote-text-line-color: #444c56; + --appbar-back-color: #2d333b; + --appbar-text-color: var(---default-text-color); + --searchbox-back-color: #22272e; + --searchbox-back-color-focused: #2d333b; + --searchbox-border-color: #454c55; + --searchbox-text-color: #aebac6; + --searchbox-text-color-focused: #aebac6; + --footer-back-color: var(--appbar-back-color); + --footer-text-color: var(--weaked-text-color); + --scrollbar-back-color: #424242; + --scrollbar-thumb-color: #7b7b7b; +} + +body, input[type=text] { + font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Helvetica, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji; + color: var(--default-text-color); +} + +body { + font-size: 16px; + line-height: 1.5; + background-color: var(--default-back-color); +} + +input[type=text] { + font-size: 14px; +} + +a { + color: var(--default-link-color); + text-decoration: none; +} +a:hover { + text-decoration: underline; +} +a.clickable { + cursor: default; + user-select: none; + transition: color linear 0.2s; +} +a.clickable:hover { + color: var(--default-link-color-light); + text-decoration: none; +} + +@font-face { + font-family: "Awesome-Blazor-Browser-Icons"; + src: url("fonts/Awesome-Blazor-Browser-Icons.ttf?dia7uy") format("truetype"), url("fonts/Awesome-Blazor-Browser-Icons.woff?dia7uy") format("woff"), url("fonts/Awesome-Blazor-Browser-Icons.svg?dia7uy#Awesome-Blazor-Browser-Icons") format("svg"); + font-weight: normal; + font-style: normal; + font-display: block; +} +.icon { + /* use !important to prevent issues with browser extensions that change fonts */ + font-family: "Awesome-Blazor-Browser-Icons" !important; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-checkbox-blank:before { + content: "\e901"; +} + +.icon-checkbox-checked:before { + content: "\e902"; +} + +.icon-checkbox-indeterminate:before { + content: "\e904"; +} + +.icon-expand-less:before { + content: "\e900"; +} + +.icon-expand-more:before { + content: "\e903"; +} + +.icon-link:before { + content: "\e905"; +} + +.icon-logo-blazor-large:before { + content: "\e906"; +} + +.icon-mark-github:before { + content: "\e907"; +} + +.icon-menu:before { + content: "\e908"; +} + +.icon-settings:before { + content: "\e909"; +} + +.icon-light-mode:before { + content: "\e90a"; +} + +.icon-dark-mode:before { + content: "\e90b"; +} + +.toggle-box { + font-family: "Awesome-Blazor-Browser-Icons"; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + line-height: 1; + position: relative; + transition: color linear 0.2s; + color: var(--default-link-color); + font-size: 0; + width: 24px; + height: 24px; + margin-right: 4px; + vertical-align: middle; +} +.toggle-box input { + display: none; +} +.toggle-box:hover { + color: var(--default-link-color-light); +} +.toggle-box:after { + content: ""; + display: inline-block; + width: 32px; + height: 32px; + position: absolute; + border-radius: 16px; + background-color: var(--default-link-color-light); + z-index: -1; + opacity: 0.5; + transform: scale(0); + top: -5px; + left: -4px; + transition: transform ease-out 0.1s; +} +.toggle-box:active:after { + transform: scale(1); +} +.toggle-box:before { + font-size: 24px; +} +.toggle-box.unselected:before { + content: "\e901"; +} +.toggle-box.selected:before { + content: "\e902"; +} +.toggle-box.selected-any:before { + content: "\e904"; +} + +#app { + display: block; + position: fixed; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 10px; + background-color: var(--default-back-color); +} +#app > .header-pane { + position: absolute; + top: 0; + left: 0; + right: 0; + height: 72px; +} +#app > .loading-mask { + position: absolute; + top: 72px; + left: 0; + bottom: 38px; + right: 0; + z-index: 3; + background-color: var(--default-back-color); +} +#app > .left-pane { + border-right: solid 1px var(--default-border-color); + display: block; + position: absolute; + top: 72px; + left: 0; + bottom: 38px; + width: 280px; + transition: left ease 0.2s; + z-index: 1; + background-color: var(--default-back-color); +} +#app > .right-pane { + border-left: solid 1px var(--default-border-color); + display: block; + position: absolute; + top: 72px; + right: -181px; + bottom: 38px; + width: 180px; + transition: right ease 0.2s; + z-index: 2; + background-color: var(--default-back-color); +} +#app > .right-pane.settings-panel-expanded { + right: 0; +} +#app > .main-mask { + display: block; + position: absolute; + top: 72px; + bottom: 38px; + left: 0; + right: 0; + z-index: 1; + background-color: #000; + pointer-events: none; + opacity: 0; + transition: opacity ease 0.2s; +} +#app > .main-mask.settings-panel-expanded { + opacity: 0.5; + pointer-events: all; +} +#app > .main { + display: block; + position: absolute; + top: 72px; + left: 280px; + bottom: 38px; + right: 0; + overflow-x: hidden; + overflow-y: scroll; + transition: left ease 0.2s; +} +#app > .main::-webkit-scrollbar { + width: 12px; +} +#app > .main { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-back-color); +} +#app > .main::-webkit-scrollbar-track { + background: var(--scrollbar-back-color); +} +#app > .main::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-thumb-color); + border-radius: 6px; + border: solid 2px var(--scrollbar-back-color); +} +#app > .footer-pane { + border-top: solid 1px var(--default-border-color); + position: absolute; + left: 0; + right: 0; + bottom: 0; + height: 38px; +} +@media (max-width: 600px) { + #app > .header-pane { + height: 100px; + } + #app > .left-pane { + top: 100px; + left: -281px; + z-index: 2; + } + #app > .left-pane.group-panel-expanded { + left: 0; + } + #app > .right-pane { + top: 100px; + } + #app > .main-mask { + top: 100px; + } + #app > .main-mask.group-panel-expanded { + opacity: 0.5; + pointer-events: all; + } + #app > .main { + top: 100px; + left: 0; + } + #app > .loading-mask { + top: 100px; + } +} + +.app-bar { + background-color: var(--appbar-back-color); + color: var(--appbar-text-color); + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + display: flex; + justify-content: left; + align-items: center; +} +.app-bar > .app-text { + position: relative; + margin-left: 16px; + padding-left: 46px; + min-width: 280px; +} +.app-bar > .app-text .app-icon { + font-family: "Awesome-Blazor-Browser-Icons"; + font-size: 32px; + position: absolute; + top: -2px; + left: 0; +} +.app-bar > .app-text a { + color: #86bfff; +} +.app-bar > .app-text > .app-title { + font-weight: 600; + font-size: 18px; +} +.app-bar > .app-text > .app-description { + font-size: 12px; + color: var(--weaked-text-color); + line-height: 14px; +} +.app-bar > .search-box { + margin-left: 16px; + margin-right: 16px; + flex-grow: 1; + display: flex; + align-items: center; + visibility: hidden; +} +.app-bar > .search-box.enable-search-box { + visibility: visible; +} +.app-bar > .search-box .icon-menu, .app-bar > .search-box .icon-settings { + color: var(--appbar-text-color); + text-decoration: none; + font-size: 24px; + padding: 8px; + transition: color ease 0.2s; +} +.app-bar > .search-box .icon-menu:hover, .app-bar > .search-box .icon-settings:hover { + color: #fff; +} +.app-bar > .search-box .icon-menu { + display: none; +} +.app-bar > .search-box input { + background-color: var(--searchbox-back-color); + flex-grow: 1; + border: solid 1px var(--searchbox-border-color); + height: 28px; + padding-left: 10px; + border-radius: 4px; + color: var(--searchbox-text-color); + outline: none; +} +.app-bar > .search-box input:focus { + background-color: var(--searchbox-back-color-focused); + color: var(--searchbox-text-color-focused); +} +@media (max-width: 600px) { + .app-bar { + flex-direction: column; + justify-content: center; + } + .app-bar > .app-text > .app-description { + font-size: 12px; + line-height: 12px; + } + .app-bar > .search-box { + width: 100%; + flex-grow: 0; + margin-top: 6px; + } + .app-bar > .search-box .icon-menu { + display: inline-block; + } +} + +.groups-panel { + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; +} +.groups-panel > .header { + border-bottom: solid 1px var(--default-border-color); + padding-left: 20px; + height: 48px; + line-height: 48px; + display: flex; + align-items: center; +} +.groups-panel > .header > .text { + display: inline-block; + font-weight: 600; +} +.groups-panel > .selector { + position: absolute; + top: 49px; + left: 0; + bottom: 0; + right: 0; + overflow-x: hidden; + overflow-y: auto; + padding: 10px 10px 10px 20px; +} +.groups-panel > .selector::-webkit-scrollbar { + width: 12px; +} +.groups-panel > .selector { + scrollbar-width: thin; + scrollbar-color: var(--scrollbar-thumb-color) var(--scrollbar-back-color); +} +.groups-panel > .selector::-webkit-scrollbar-track { + background: var(--scrollbar-back-color); +} +.groups-panel > .selector::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-thumb-color); + border-radius: 6px; + border: solid 2px var(--scrollbar-back-color); +} + +.group-selector > .group a.link { + transition: color linear 0.2s; +} +.group-selector > .group:not(.visible) a.link { + color: var(--deadlink-text-color); + cursor: default; + pointer-events: none; +} +.group-selector > .group:not(.visible) a.link:hover { + text-decoration: none; +} +.group-selector > .group:not(.visible) .toggle-box { + color: var(--deadlink-text-color); +} +.group-selector > .group > .group-title { + white-space: nowrap; + height: 26px; + display: flex; +} +.group-selector > .group > .group-title > .expand-box { + display: inline-block; + color: var(--default-text-color); + text-decoration: none; + transition: transform linear 0.2s; + width: 26px; + height: 26px; +} +.group-selector > .group > .group-title > .expand-box:before { + display: inline-block; + content: "\e903"; + font-size: 18px; + width: 26px; + height: 26px; + line-height: 26px; + text-align: center; +} +.group-selector > .group.expanded > .group-title > .expand-box { + transform: rotate(-180deg); +} +.group-selector .sub-group { + padding-left: 10px; + overflow: hidden; + transition: height ease 0.2s; +} + +.awesome-blazor-contents { + margin-top: -20px; + padding: 12px 12px 12px 32px; + max-width: 900px; +} +.awesome-blazor-contents > .group { + display: none; +} +.awesome-blazor-contents > .group.visible { + display: block; +} +.awesome-blazor-contents > .group > .group-title { + position: relative; + font-size: 1.5em; + font-weight: 600; + color: var(--default-text-color); + margin-top: 24px; + margin-bottom: 16px; + line-height: 1.25; + padding-bottom: 0.3em; + border-bottom: 1px solid var(--header-text-line-color); +} +.awesome-blazor-contents > .group > .group-title > .group-anchor { + position: absolute; + width: 22px; + height: 1.5em; + left: -24px; + display: flex; + align-items: center; + text-decoration: none; +} +.awesome-blazor-contents > .group > .group-title > .group-anchor:after { + font-family: "Awesome-Blazor-Browser-Icons"; + content: "\e905"; + font-size: 16px; + color: var(--default-text-color); + visibility: hidden; +} +.awesome-blazor-contents > .group > .group-title:hover > .group-anchor:after { + visibility: visible; +} +.awesome-blazor-contents > .group blockquote { + padding: 0 1em; + color: var(--quote-text-color); + border-left: 0.25em solid var(--quote-text-line-color); + margin: 0 0 16px 0; +} +.awesome-blazor-contents > .group > .resources { + margin-left: 10px; +} +.awesome-blazor-contents > .group > .resources > .resource { + margin-bottom: 10px; + display: none; +} +.awesome-blazor-contents > .group > .resources > .resource.visible { + display: block; +} +.awesome-blazor-contents > .group > .resources > .resource > .resource-title { + font-weight: 600; +} +.awesome-blazor-contents > .group > .resources > .resource > .resource-description { + margin-left: 10px; +} +.awesome-blazor-contents > .group > .resources > .resource > .badges.has-badges { + margin-top: 6px; + margin-left: 10px; + height: 24px; + position: relative; +} +.awesome-blazor-contents > .group > .resources > .resource > .badges.has-badges > .badge.last-commit { + position: absolute; + top: 0; + left: 92px; +} +.awesome-blazor-contents > .group > .resources > .resource > .resource-description img { + vertical-align: middle; +} +.awesome-blazor-contents > .group > .resources > .resource code { + font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace; + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + background-color: rgba(27, 31, 35, 0.05); + border-radius: 3px; +} +.awesome-blazor-contents > .group > .sub-groups > .awesome-blazor-contents { + padding-left: 0; +} +.awesome-blazor-contents > .group > .sub-groups > .awesome-blazor-contents > .group > .group-title { + font-size: 1.25em; + margin-top: 24px; + margin-bottom: 16px; + line-height: 1.25; + padding-bottom: 0; + border-bottom: none; +} + +footer { + background-color: var(--footer-back-color); + padding: 0 20px; + overflow: hidden; + position: absolute; + top: 0; + left: 0; + bottom: 0; + right: 0; + font-size: 13px; + display: flex; + align-items: center; + justify-content: flex-end; +} +footer > .footer-item { + position: relative; + margin-right: 20px; + color: var(--footer-text-color); + height: 24px; + line-height: 24px; + white-space: nowrap; +} +footer > .footer-item.blazor { + padding-left: 24px; +} +footer > .footer-item.blazor:after { + font-family: "Awesome-Blazor-Browser-Icons"; + content: "\e906"; + font-size: 20px; + position: absolute; + top: 0; + left: 0; +} +footer > .footer-item.github { + padding-left: 24px; +} +footer > .footer-item.github:after { + font-family: "Awesome-Blazor-Browser-Icons"; + content: "\e907"; + font-size: 20px; + position: absolute; + top: 0; + left: 0; +} +@media (max-width: 480px) { + footer { + padding: 0 8px; + font-size: 11.2px; + } + footer > .footer-item { + margin-right: 8px; + } + footer > .footer-item:last-child { + margin-right: 0; + } +} + +.settings { + padding: 4px 0 0 10px; + font-size: 14px; +} +.settings h3:first-child { + margin-top: 0; +} +.settings h3 { + margin-bottom: 0; +} +.settings > .theme .icon { + margin-right: 4px; +} diff --git a/css/site.css.br b/css/site.css.br new file mode 100644 index 00000000..77a156a6 Binary files /dev/null and b/css/site.css.br differ diff --git a/css/site.css.gz b/css/site.css.gz new file mode 100644 index 00000000..5fd5cab1 Binary files /dev/null and b/css/site.css.gz differ diff --git a/css/site.min.css b/css/site.min.css new file mode 100644 index 00000000..d94cd8b7 --- /dev/null +++ b/css/site.min.css @@ -0,0 +1 @@ +body.theme-system-default,body.theme-light-mode{--default-back-color:#fff;--default-text-color:#24292f;--default-link-color:#0366d6;--default-link-color-light:#75b5fd;--default-border-color:#d0d7de;--quote-text-color:#6a737d;--quote-text-line-color:#dfe2e5;--header-text-line-color:#d8dee4;--weaked-text-color:#c0c0c0;--deadlink-text-color:#c0c0c0;--appbar-back-color:#24292e;--appbar-text-color:#fff;--searchbox-back-color:var(--appbar-back-color);--searchbox-back-color-focused:#fff;--searchbox-border-color:#57606a;--searchbox-text-color:#fff;--searchbox-text-color-focused:#000;--footer-back-color:#e0e0e0;--footer-text-color:#606060;--scrollbar-back-color:#f1f1f1;--scrollbar-thumb-color:#a8a8a8;}@media(prefers-color-scheme:dark){body.theme-system-default,body.theme-dark-mode{--default-back-color:#22272e;--default-text-color:#aebac6;--default-link-color:#449bf1;--default-link-color-light:#70b2ef;--default-border-color:#454c55;--header-text-line-color:#454c55;--weaked-text-color:#77838f;--deadlink-text-color:#586168;--quote-text-color:#768390;--quote-text-line-color:#444c56;--appbar-back-color:#2d333b;--appbar-text-color:var(-\2d default-text-color);--searchbox-back-color:#22272e;--searchbox-back-color-focused:#2d333b;--searchbox-border-color:#454c55;--searchbox-text-color:#aebac6;--searchbox-text-color-focused:#aebac6;--footer-back-color:var(--appbar-back-color);--footer-text-color:var(--weaked-text-color);--scrollbar-back-color:#424242;--scrollbar-thumb-color:#7b7b7b;}}body.theme-dark-mode{--default-back-color:#22272e;--default-text-color:#aebac6;--default-link-color:#449bf1;--default-link-color-light:#70b2ef;--default-border-color:#454c55;--header-text-line-color:#454c55;--weaked-text-color:#77838f;--deadlink-text-color:#586168;--quote-text-color:#768390;--quote-text-line-color:#444c56;--appbar-back-color:#2d333b;--appbar-text-color:var(-\2d default-text-color);--searchbox-back-color:#22272e;--searchbox-back-color-focused:#2d333b;--searchbox-border-color:#454c55;--searchbox-text-color:#aebac6;--searchbox-text-color-focused:#aebac6;--footer-back-color:var(--appbar-back-color);--footer-text-color:var(--weaked-text-color);--scrollbar-back-color:#424242;--scrollbar-thumb-color:#7b7b7b;}body,input[type=text]{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;color:var(--default-text-color);}body{font-size:16px;line-height:1.5;background-color:var(--default-back-color);}input[type=text]{font-size:14px;}a{color:var(--default-link-color);text-decoration:none;}a:hover{text-decoration:underline;}a.clickable{cursor:default;user-select:none;transition:color linear .2s;}a.clickable:hover{color:var(--default-link-color-light);text-decoration:none;}@font-face{font-family:"Awesome-Blazor-Browser-Icons";src:url("fonts/Awesome-Blazor-Browser-Icons.ttf?dia7uy") format("truetype"),url("fonts/Awesome-Blazor-Browser-Icons.woff?dia7uy") format("woff"),url("fonts/Awesome-Blazor-Browser-Icons.svg?dia7uy#Awesome-Blazor-Browser-Icons") format("svg");font-weight:normal;font-style:normal;font-display:block;}.icon{font-family:"Awesome-Blazor-Browser-Icons"!important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;}.icon-checkbox-blank:before{content:"";}.icon-checkbox-checked:before{content:"";}.icon-checkbox-indeterminate:before{content:"";}.icon-expand-less:before{content:"";}.icon-expand-more:before{content:"";}.icon-link:before{content:"";}.icon-logo-blazor-large:before{content:"";}.icon-mark-github:before{content:"";}.icon-menu:before{content:"";}.icon-settings:before{content:"";}.icon-light-mode:before{content:"";}.icon-dark-mode:before{content:"";}.toggle-box{font-family:"Awesome-Blazor-Browser-Icons";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;line-height:1;position:relative;transition:color linear .2s;color:var(--default-link-color);font-size:0;width:24px;height:24px;margin-right:4px;vertical-align:middle;}.toggle-box input{display:none;}.toggle-box:hover{color:var(--default-link-color-light);}.toggle-box:after{content:"";display:inline-block;width:32px;height:32px;position:absolute;border-radius:16px;background-color:var(--default-link-color-light);z-index:-1;opacity:.5;transform:scale(0);top:-5px;left:-4px;transition:transform ease-out .1s;}.toggle-box:active:after{transform:scale(1);}.toggle-box:before{font-size:24px;}.toggle-box.unselected:before{content:"";}.toggle-box.selected:before{content:"";}.toggle-box.selected-any:before{content:"";}#app{display:block;position:fixed;top:0;left:0;bottom:0;right:0;padding:10px;background-color:var(--default-back-color);}#app>.header-pane{position:absolute;top:0;left:0;right:0;height:72px;}#app>.loading-mask{position:absolute;top:72px;left:0;bottom:38px;right:0;z-index:3;background-color:var(--default-back-color);}#app>.left-pane{border-right:solid 1px var(--default-border-color);display:block;position:absolute;top:72px;left:0;bottom:38px;width:280px;transition:left ease .2s;z-index:1;background-color:var(--default-back-color);}#app>.right-pane{border-left:solid 1px var(--default-border-color);display:block;position:absolute;top:72px;right:-181px;bottom:38px;width:180px;transition:right ease .2s;z-index:2;background-color:var(--default-back-color);}#app>.right-pane.settings-panel-expanded{right:0;}#app>.main-mask{display:block;position:absolute;top:72px;bottom:38px;left:0;right:0;z-index:1;background-color:#000;pointer-events:none;opacity:0;transition:opacity ease .2s;}#app>.main-mask.settings-panel-expanded{opacity:.5;pointer-events:all;}#app>.main{display:block;position:absolute;top:72px;left:280px;bottom:38px;right:0;overflow-x:hidden;overflow-y:scroll;transition:left ease .2s;}#app>.main::-webkit-scrollbar{width:12px;}#app>.main{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-back-color);}#app>.main::-webkit-scrollbar-track{background:var(--scrollbar-back-color);}#app>.main::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-color);border-radius:6px;border:solid 2px var(--scrollbar-back-color);}#app>.footer-pane{border-top:solid 1px var(--default-border-color);position:absolute;left:0;right:0;bottom:0;height:38px;}@media(max-width:600px){#app>.header-pane{height:100px;}#app>.left-pane{top:100px;left:-281px;z-index:2;}#app>.left-pane.group-panel-expanded{left:0;}#app>.right-pane{top:100px;}#app>.main-mask{top:100px;}#app>.main-mask.group-panel-expanded{opacity:.5;pointer-events:all;}#app>.main{top:100px;left:0;}#app>.loading-mask{top:100px;}}.app-bar{background-color:var(--appbar-back-color);color:var(--appbar-text-color);position:absolute;top:0;left:0;bottom:0;right:0;display:flex;justify-content:left;align-items:center;}.app-bar>.app-text{position:relative;margin-left:16px;padding-left:46px;min-width:280px;}.app-bar>.app-text .app-icon{font-family:"Awesome-Blazor-Browser-Icons";font-size:32px;position:absolute;top:-2px;left:0;}.app-bar>.app-text a{color:#86bfff;}.app-bar>.app-text>.app-title{font-weight:600;font-size:18px;}.app-bar>.app-text>.app-description{font-size:12px;color:var(--weaked-text-color);line-height:14px;}.app-bar>.search-box{margin-left:16px;margin-right:16px;flex-grow:1;display:flex;align-items:center;visibility:hidden;}.app-bar>.search-box.enable-search-box{visibility:visible;}.app-bar>.search-box .icon-menu,.app-bar>.search-box .icon-settings{color:var(--appbar-text-color);text-decoration:none;font-size:24px;padding:8px;transition:color ease .2s;}.app-bar>.search-box .icon-menu:hover,.app-bar>.search-box .icon-settings:hover{color:#fff;}.app-bar>.search-box .icon-menu{display:none;}.app-bar>.search-box input{background-color:var(--searchbox-back-color);flex-grow:1;border:solid 1px var(--searchbox-border-color);height:28px;padding-left:10px;border-radius:4px;color:var(--searchbox-text-color);outline:0;}.app-bar>.search-box input:focus{background-color:var(--searchbox-back-color-focused);color:var(--searchbox-text-color-focused);}@media(max-width:600px){.app-bar{flex-direction:column;justify-content:center;}.app-bar>.app-text>.app-description{font-size:12px;line-height:12px;}.app-bar>.search-box{width:100%;flex-grow:0;margin-top:6px;}.app-bar>.search-box .icon-menu{display:inline-block;}}.groups-panel{position:absolute;top:0;left:0;bottom:0;right:0;}.groups-panel>.header{border-bottom:solid 1px var(--default-border-color);padding-left:20px;height:48px;line-height:48px;display:flex;align-items:center;}.groups-panel>.header>.text{display:inline-block;font-weight:600;}.groups-panel>.selector{position:absolute;top:49px;left:0;bottom:0;right:0;overflow-x:hidden;overflow-y:auto;padding:10px 10px 10px 20px;}.groups-panel>.selector::-webkit-scrollbar{width:12px;}.groups-panel>.selector{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb-color) var(--scrollbar-back-color);}.groups-panel>.selector::-webkit-scrollbar-track{background:var(--scrollbar-back-color);}.groups-panel>.selector::-webkit-scrollbar-thumb{background-color:var(--scrollbar-thumb-color);border-radius:6px;border:solid 2px var(--scrollbar-back-color);}.group-selector>.group a.link{transition:color linear .2s;}.group-selector>.group:not(.visible) a.link{color:var(--deadlink-text-color);cursor:default;pointer-events:none;}.group-selector>.group:not(.visible) a.link:hover{text-decoration:none;}.group-selector>.group:not(.visible) .toggle-box{color:var(--deadlink-text-color);}.group-selector>.group>.group-title{white-space:nowrap;height:26px;display:flex;}.group-selector>.group>.group-title>.expand-box{display:inline-block;color:var(--default-text-color);text-decoration:none;transition:transform linear .2s;width:26px;height:26px;}.group-selector>.group>.group-title>.expand-box:before{display:inline-block;content:"";font-size:18px;width:26px;height:26px;line-height:26px;text-align:center;}.group-selector>.group.expanded>.group-title>.expand-box{transform:rotate(-180deg);}.group-selector .sub-group{padding-left:10px;overflow:hidden;transition:height ease .2s;}.awesome-blazor-contents{margin-top:-20px;padding:12px 12px 12px 32px;max-width:900px;}.awesome-blazor-contents>.group{display:none;}.awesome-blazor-contents>.group.visible{display:block;}.awesome-blazor-contents>.group>.group-title{position:relative;font-size:1.5em;font-weight:600;color:var(--default-text-color);margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:.3em;border-bottom:1px solid var(--header-text-line-color);}.awesome-blazor-contents>.group>.group-title>.group-anchor{position:absolute;width:22px;height:1.5em;left:-24px;display:flex;align-items:center;text-decoration:none;}.awesome-blazor-contents>.group>.group-title>.group-anchor:after{font-family:"Awesome-Blazor-Browser-Icons";content:"";font-size:16px;color:var(--default-text-color);visibility:hidden;}.awesome-blazor-contents>.group>.group-title:hover>.group-anchor:after{visibility:visible;}.awesome-blazor-contents>.group blockquote{padding:0 1em;color:var(--quote-text-color);border-left:.25em solid var(--quote-text-line-color);margin:0 0 16px 0;}.awesome-blazor-contents>.group>.resources{margin-left:10px;}.awesome-blazor-contents>.group>.resources>.resource{margin-bottom:10px;display:none;}.awesome-blazor-contents>.group>.resources>.resource.visible{display:block;}.awesome-blazor-contents>.group>.resources>.resource>.resource-title{font-weight:600;}.awesome-blazor-contents>.group>.resources>.resource>.resource-description{margin-left:10px;}.awesome-blazor-contents>.group>.resources>.resource>.badges.has-badges{margin-top:6px;margin-left:10px;height:24px;position:relative;}.awesome-blazor-contents>.group>.resources>.resource>.badges.has-badges>.badge.last-commit{position:absolute;top:0;left:92px;}.awesome-blazor-contents>.group>.resources>.resource>.resource-description img{vertical-align:middle;}.awesome-blazor-contents>.group>.resources>.resource code{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;padding:.2em .4em;margin:0;font-size:85%;background-color:rgba(27,31,35,.05);border-radius:3px;}.awesome-blazor-contents>.group>.sub-groups>.awesome-blazor-contents{padding-left:0;}.awesome-blazor-contents>.group>.sub-groups>.awesome-blazor-contents>.group>.group-title{font-size:1.25em;margin-top:24px;margin-bottom:16px;line-height:1.25;padding-bottom:0;border-bottom:0;}footer{background-color:var(--footer-back-color);padding:0 20px;overflow:hidden;position:absolute;top:0;left:0;bottom:0;right:0;font-size:13px;display:flex;align-items:center;justify-content:flex-end;}footer>.footer-item{position:relative;margin-right:20px;color:var(--footer-text-color);height:24px;line-height:24px;white-space:nowrap;}footer>.footer-item.blazor{padding-left:24px;}footer>.footer-item.blazor:after{font-family:"Awesome-Blazor-Browser-Icons";content:"";font-size:20px;position:absolute;top:0;left:0;}footer>.footer-item.github{padding-left:24px;}footer>.footer-item.github:after{font-family:"Awesome-Blazor-Browser-Icons";content:"";font-size:20px;position:absolute;top:0;left:0;}@media(max-width:480px){footer{padding:0 8px;font-size:11.2px;}footer>.footer-item{margin-right:8px;}footer>.footer-item:last-child{margin-right:0;}}.settings{padding:4px 0 0 10px;font-size:14px;}.settings h3:first-child{margin-top:0;}.settings h3{margin-bottom:0;}.settings>.theme .icon{margin-right:4px;} \ No newline at end of file diff --git a/css/site.min.css.br b/css/site.min.css.br new file mode 100644 index 00000000..822739c7 Binary files /dev/null and b/css/site.min.css.br differ diff --git a/css/site.min.css.gz b/css/site.min.css.gz new file mode 100644 index 00000000..a212219a Binary files /dev/null and b/css/site.min.css.gz differ diff --git a/decode.min.js b/decode.min.js new file mode 100755 index 00000000..fdcf4233 --- /dev/null +++ b/decode.min.js @@ -0,0 +1 @@ +export let BrotliDecode=(()=>{const f=Int32Array.from([256,402,436,468,500,534,566,598,630,662,694,726,758,790,822,854,886,920,952,984,1016,1048,1080]),w=Int32Array.from([1,2,3,4,0,5,17,6,16,7,8,9,10,11,12,13,14,15]),b=Int32Array.from([0,3,2,1,0,0,0,0,0,0,3,3,3,3,3,3]),j=Int32Array.from([0,0,0,0,-1,1,-2,2,-3,3,-1,1,-2,2,-3,3]),l=Int32Array.from([131072,131076,131075,196610,131072,131076,131075,262145,131072,131076,131075,196610,131072,131076,131075,262149]),m=Int32Array.from([1,5,9,13,17,25,33,41,49,65,81,97,113,145,177,209,241,305,369,497,753,1265,2289,4337,8433,16625]),p=Int32Array.from([2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,6,6,7,8,9,10,11,12,13,24]),q=Int16Array.from([0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,12,14,24]),o=Int16Array.from([0,0,0,0,0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,7,8,9,10,24]),n=new Int16Array(2816);function g(f){let w=-1,b=16;for(;b>0;)f>>>b!=0&&(w+=b,f>>>=b),b>>=1;return w+f}function k(f,w,b){return 16+w+2*(b<>w),l=g(j)-1;return((l-1<<1|j>>l&1)-1<=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),0!==J(f,1)){const w=J(f,3);return 0===w?1:J(f,w)+(1<>>b.s;j+=255&l;const m=f[j]>>16,p=65535&f[j];if(m<=8)return b.s+=m,p;j+=p;return j+=(l&(1<>>8,b.s+=8+(f[j]>>16),65535&f[j]}function d(f,w,b){b.s>=16&&(b.g=b.k[b.v++]<<16|b.g>>>16,b.s-=16);const j=e(f,w,b),l=p[j];return b.s>=16&&(b.g=b.k[b.v++]<<16|b.g>>>16,b.s-=16),m[j]+(l<=16?J(b,l):_(b,l))}function H(f,w){const b=f[w];for(;w>0;w--)f[w]=f[w-1];f[0]=b}function a(f,w,b,j,l){const m=new Int32Array(w),p=new Int32Array(4),q=1+g(f-1),o=J(l,2)+1;for(let f=0;f=16&&(l.g=l.k[l.v++]<<16|l.g>>>16,l.s-=16);const b=J(l,q);if(b>=w)throw new Error("Can't readHuffmanCode");p[f]=b}!function(f,w){for(let b=0;b0;f++){const b=w[f];p.s>=16&&(p.g=p.k[p.v++]<<16|p.g>>>16,p.s-=16);const j=p.g>>>p.s&15;p.s+=l[j]>>16;const m=65535&l[j];o[b]=m,0!==m&&(n-=32>>m,g++)}if(0!==n&&1!==g)throw new Error("Corrupted Huffman code histogram");return function(f,w,b,j){let l=0,m=8,p=0,q=0,o=32768;const n=new Int32Array(33);for(U(n,n.length-1,5,f,18);l0;){j.v>2030&&E(j),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);const f=j.g>>>j.s&31;j.s+=n[f]>>16;const g=65535&n[f];if(g<16)p=0,b[l++]=g,0!==g&&(m=g,o-=32768>>g);else{const f=g-14;let n=0;16===g&&(n=m),q!==n&&(p=0,q=n);const k=p;p>0&&(p-=2,p<<=f),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16),p+=J(j,f)+3;const s=p-k;if(l+s>w)throw new Error("symbol + repeatDelta > numSymbols");for(let f=0;f2030&&E(l),l.s>=16&&(l.g=l.k[l.v++]<<16|l.g>>>16,l.s-=16);const m=J(l,2);return 1===m?a(f,w,b,j,l):u(w,m,b,j,l)}function h(w,b,j){j.v>2030&&E(j);const l=t(j)+1;if(1===l)return b.fill(0,0,w),l;j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let m=0;0!==J(j,1)&&(m=J(j,4)+1);const p=l+m,q=f[p+31>>5],o=new Int32Array(q+1),n=o.length-1;z(p,p,o,n,j);for(let f=0;f2030&&E(j),j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);const l=e(o,n,j);if(0===l)b[f]=0,f++;else if(l<=m){j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16);let m=(1<=w)throw new Error("Corrupted context map");b[f]=0,f++,m--}}else b[f]=l-m,f++}return j.s>=16&&(j.g=j.k[j.v++]<<16|j.g>>>16,j.s-=16),1===J(j,1)&&function(f,w){const b=new Int32Array(256);for(let f=0;f<256;f++)b[f]=f;for(let j=0;j=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);let m=e(f.l,2*w,f);const p=d(f.l,2*w+1,f);return 1===m?m=j[l+1]+1:0===m?m=j[l]:m-=2,m>=b&&(m-=b),j[l]=j[l+1],j[l+1]=m,p}function r(f){f.u=i(f,0,f.h);const w=f.H[5];f.i=w<<6,f.I=255&f.R[f.i];const b=f.K[w];f.T=b<<9,f.W=f.T+256}function I(f){f.B=i(f,1,f.Y),f.S=f.H[7]}function R(f){f.A=i(f,2,f.V),f.D=f.H[9]<<2}function K(f){if(0!==f.F)return f.P=10,void(f.j=12);f.U=new Int32Array(0),f.C=new Int32Array(0),f.J=new Int32Array(0),f.v>2030&&E(f),function(f){if(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.F=J(f,1),f._=0,f.M=0,f.X=0,0!==f.F&&0!==J(f,1))return;const w=J(f,2)+4;if(7===w){if(f.X=1,0!==J(f,1))throw new Error("Corrupted reserved bit");const w=J(f,2);if(0===w)return;for(let b=0;b=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);const j=J(f,8);if(0===j&&b+1===w&&w>1)throw new Error("Exuberant nibble");f._|=j<<8*b}}else for(let b=0;b=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);const j=J(f,4);if(0===j&&b+1===w&&w>4)throw new Error("Exuberant nibble");f._|=j<<4*b}f._++,0===f.F&&(f.M=J(f,1))}(f),0===f._&&0===f.X||(0!==f.M||0!==f.X?(G(f),f.j=0!==f.X?5:6):f.j=3,0===f.X&&(f.G+=f._,f.G>1<<30&&(f.G=1<<30),f.Of.G){const b=f.G;for(;w>>1>b;)w>>=1;0===f.F&&w<16384&&f.Z>=16384&&(w=16384)}if(w<=f.O)return;const b=new Int8Array(w+37);0!==f.L.length&&b.set(f.L.subarray(0,f.O),0),f.L=b,f.O=w}(f)))}function T(f,w,b){let j=f.l[2*w];if(b<=1)return f.l[2*w+1]=j,f.l[2*w+2]=j,1<<28;const l=b+2;j+=z(l,l,f.l,2*w,f),f.l[2*w+1]=j;return j+=z(26,26,f.l,2*w+1,f),f.l[2*w+2]=j,d(f.l,2*w+1,f)}function c(f){f.h=t(f)+1,f.u=T(f,0,f.h),f.Y=t(f)+1,f.B=T(f,1,f.Y),f.V=t(f)+1,f.A=T(f,2,f.V),f.v>2030&&E(f),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.N=J(f,2),f.$=J(f,4)<=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),f.K[w]=J(f,2);f.v>2030&&E(f)}f.R=new Int8Array(f.h<<6);const w=h(f.h<<6,f.R,f);f.ff=1;for(let w=0;w>6){f.ff=0;break}f.wf=new Int8Array(f.V<<2);const b=h(f.V<<2,f.wf,f);f.U=B(256,256,w,f),f.C=B(704,704,f.Y,f);let j=k(f.N,f.$,24),l=j;1===f.bf&&(j=k(f.N,f.$,62),l=s(2147483644,f.N,f.$)),f.J=B(j,l,b,f),function(f,w){const b=f.p,j=f.q,l=f.N,m=f.$,p=1<>>f.s,f.s+=8,j--;if(0===j)return;const l=Math.min(x(f),j>>1);if(l>0){const m=f.v<<1,p=l<<1;w.set(f.o.subarray(m,m+p),b),b+=p,j-=p,f.v+=l}if(0===j)return;if(x(f)>0){for(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);0!==j;)w[b++]=f.g>>>f.s,f.s+=8,j--;return void C(f,0)}for(;j>0;){const l=bf(f,w,b,j);if(-1===l)throw new Error("Unexpected end of input");b+=l,j-=l}}(f,w,f.jf,b),f._-=b,f.jf+=b,f.jf===f.O)return f.P=6,void(f.j=12);X(f),f.j=2}function W(f){const w=Math.min(f.lf-f.mf,f.pf-f.qf);return 0!==w&&(f.nf.set(f.L.subarray(f.qf,f.qf+w),f.gf+f.mf),f.mf+=w,f.qf+=w),f.mf>5],p=new Int32Array(j+j*m);let q=j;for(let f=0;f2147483644)throw new Error("Invalid backward reference");const b=f.sf-f.maxDistance-1-f.vf;if(b<0)!function(f,w,b){-1===f.tf&&function(f){f.ef=new Int8Array(256);let w=8;for(;f.vf-1>>>w!=0;)w++;w-=8,f.tf=w;let b=0,j=0;for(;b>>w]=j,b+=1<>>f.tf];for(;w>=f.df[j+1];)j++;if(f.vf>w+b)throw new Error("Invalid backward reference");f.m=f.m+1&3,f.H[f.m]=f.sf,f._-=b,f.Hf=j,f.af=w-f.df[j],f.uf=b,f.zf=0}(f,-b-1,f.hf),f.j=14;else{const j=L,l=f.hf;if(l>31)throw new Error("Invalid backward reference");const m=$[l];if(0===m)throw new Error("Invalid backward reference");let p=N[l];const q=b>>>m;p+=(b&(1<=o.if)throw new Error("Invalid backward reference");const n=function(f,w,b,j,l,m,p){let q=w;const o=m.rf,n=m.If,g=m.Rf,k=3*p,s=o[k],v=o[k+1],t=o[k+2];let e=g[s];const d=g[s+1];let H=g[t];const a=g[t+1];let u=v-11,z=v;(u<1||u>9)&&(u=0);(z<1||z>9)&&(z=0);for(;e!==d;)f[q++]=n[e++];u>l&&(u=l);j+=u,l-=u;let h=l-=z;for(;h>0;)f[q++]=b[j++],h--;if(10===v||11===v){let w=q-l;for(10===v&&(l=1);l>0;){const b=255&f[w];b<192?(b>=97&&b<=122&&(f[w]^=32),w+=1,l-=1):b<224?(f[w+1]^=32,w+=2,l-=2):(f[w+2]^=5,w+=3,l-=3)}}else if(21===v||22===v){let w=q-l;const b=m.Kf[p];let j=16777216-(32768&b)+(32767&b);for(;l>0;){let b=1;const m=255&f[w];if(m<128)j+=m,f[w]=127&j;else if(m<192);else if(m<224)if(l>=2){const l=f[w+1];j+=63&l|(31&m)<<6,f[w]=192|j>>6&31,f[w+1]=192&l|63&j,b=2}else b=l;else if(m<240)if(l>=3){const l=f[w+1],p=f[w+2];j+=63&p|(63&l)<<6|(15&m)<<12,f[w]=224|j>>12&15,f[w+1]=192&l|j>>6&63,f[w+2]=192&p|63&j,b=3}else b=l;else if(m<248)if(l>=4){const l=f[w+1],p=f[w+2],q=f[w+3];j+=63&q|(63&p)<<6|(63&l)<<12|(7&m)<<18,f[w]=240|j>>18&7,f[w+1]=192&l|j>>12&63,f[w+2]=192&p|j>>6&63,f[w+3]=192&q|63&j,b=4}else b=l;w+=b,l-=b,21===v&&(l=0)}}for(;H!==a;)f[q++]=n[H++];return q-w}(f.L,f.jf,j,p,l,o,q);if(f.jf+=n,f._-=n,f.jf>=w)return f.P=4,void(f.j=12);f.j=4}}function A(f,w){let b=f.jf;const j=b;for(;f.uf!==f.zf;){const j=w-b,l=f.df[f.Hf+1]-f.df[f.Hf]-f.af;let m=f.uf-f.zf;if(m>l&&(m=l),m>j&&(m=j),f.L.set(f.Tf[f.Hf].slice(f.af,f.af+m),b),b+=m,f.af+=m,f.zf+=m,m===l&&(f.Hf++,f.af=0),b>=w)break}return b-j}function V(f){if(0===f.j)throw new Error("Can't decompress until initialized");if(11===f.j)throw new Error("Can't decompress after close");if(1===f.j){const w=function(f){const w=f.bf;if(f.bf=0,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),0===J(f,1))return 16;let b=J(f,3);return 0!==b?17+b:(b=J(f,3),0!==b?1===b?0===w?-1:(f.bf=1,1===J(f,1)?-1:(b=J(f,6),b<10||b>30?-1:b)):8+b:17)}(f);if(-1===w)throw new Error("Invalid 'windowBits' code");f.Z=1<2030&&E(f),0===f.B&&I(f),f.B--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);const p=e(f.C,f.S,f)<<2,q=n[p],o=n[p+1],g=n[p+2];f.yf=n[p+3],f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);const k=255&q;f.Wf=o+(k<=16?J(f,k):_(f,k)),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);const s=q>>8;f.hf=g+(s<=16?J(f,s):_(f,s)),f.Bf=0,f.j=7;case 7:if(0!==f.ff){for(;f.Bf2030&&E(f),0===f.u&&r(f),f.u--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),m[f.jf]=e(f.U,f.I,f),f.jf++,f.Bf++,f.jf>=w){f.P=7,f.j=12;break}}else{let b=255&m[f.jf-1&l],j=255&m[f.jf-2&l];for(;f.Bf2030&&E(f),0===f.u&&r(f);const l=O[f.T+b]|O[f.W+j],p=255&f.R[f.i+l];if(f.u--,j=b,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),b=e(f.U,p,f),m[f.jf]=b,f.jf++,f.Bf++,f.jf>=w){f.P=7,f.j=12;break}}}if(7!==f.j)continue;if(f._-=f.Wf,f._<=0){f.j=4;continue}let v=f.yf;if(v<0)f.sf=f.H[f.m];else{f.v>2030&&E(f),0===f.A&&R(f),f.A--,f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16);const w=255&f.wf[f.D+v];if(v=e(f.J,w,f),v<16){const w=f.m+b[v]&3;if(f.sf=f.H[w]+j[v],f.sf<0)throw new Error("Negative distance")}else{const w=f.p[v];let b;f.s+w<=32?b=J(f,w):(f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),b=w<=16?J(f,w):_(f,w)),f.sf=f.q[v]+(b<f.maxDistance){f.j=9;continue}if(v>0&&(f.m=f.m+1&3,f.H[f.m]=f.sf),f.hf>f._)throw new Error("Invalid backward reference");f.Bf=0,f.j=8;case 8:let t=f.jf-f.sf&l,d=f.jf;const H=f.hf-f.Bf,a=t+H,u=d+H;if(ad&&u>t)for(let f=0;f=w){f.P=8,f.j=12;break}8===f.j&&(f.j=4);continue;case 9:S(f,w);continue;case 14:if(f.jf+=A(f,w),f.jf>=w)return f.P=14,void(f.j=12);f.j=4;continue;case 5:for(;f._>0;)f.v>2030&&E(f),f.s>=16&&(f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16),J(f,8),f._--;f.j=2;continue;case 6:y(f);continue;case 12:f.pf=Math.min(f.jf,f.O),f.j=13;case 13:if(0===W(f))return;f.jf>=f.cf&&(f.maxDistance=f.cf),f.jf>=f.O&&(f.jf>f.O&&m.copyWithin(0,f.O,f.jf),f.jf&=l,f.qf=0),f.j=f.P;continue;default:throw new Error("Unexpected state "+wf(f.j))}if(10===f.j){if(f._<0)throw new Error("Invalid metablock length");G(f),C(f,1)}}!function(f){const w=new Int16Array(24),b=new Int16Array(24);b[0]=2;for(let f=0;f<23;++f)w[f+1]=w[f]+(1<>>6,m=-4;l>=2&&(l-=2,m=0);const p=(170064>>>2*l&3)<<3|j>>>3&7,n=(156228>>>2*l&3)<<3|7&j,g=b[n],k=m+(g>4?3:g-2),s=4*j;f[s]=q[p]|o[n]<<8,f[s+1]=w[p],f[s+2]=b[n],f[s+3]=k}}(n);const D=new function(f,w,b){this.if=0,this.rf=new Int32Array(0),this.If=new Int8Array(0),this.Rf=new Int32Array(0),this.Kf=new Int16Array(0),this.if=f,this.rf=new Int32Array(3*f),this.Kf=new Int16Array(f),this.If=new Int8Array(w),this.Rf=new Int32Array(b+1)}(121,167,50);function F(f,w){let b=1<>=1;return(f&b-1)+b}function Q(f,w,b,j,l){do{f[w+(j-=b)]=l}while(j>0)}function P(f,w,b){let j=1<0;o[w]--)Q(f,m+p,j,s,w<<16|q[g++]),p=F(p,w);const t=v-1;let e=-1,d=m;for(let w=b+1,j=2;w<=15;w++,j<<=1)for(;o[w]>0;o[w]--)(p&t)!==e&&(d+=s,k=P(o,w,b),s=1<>b),j,s,w-b<<16|q[g++]),p=F(p,w);return v}function E(f){if(0!==f.t){if(x(f)>=-2)return;throw new Error("No more input")}const w=f.v<<1;let b=4096-w;for(f.o.copyWithin(0,w,4096),f.v=0;b<4096;){const w=4096-b,j=bf(f,f.o,b,w);if(j<=0){f.t=1,f.Yf=b,b+=1;break}b+=j}!function(f,w){const b=f.o,j=w>>1,l=f.k;for(let f=0;f>3)-4;if(b>f.Yf)throw new Error("Read after end");if(0!==w&&b!==f.Yf)throw new Error("Unused bytes after end")}function J(f,w){const b=f.g>>>f.s&(1<>>16,f.s-=16,b|J(f,w-16)<<16}function M(f){f.v>2030&&E(f),C(f,0),f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16,f.g=f.k[f.v++]<<16|f.g>>>16,f.s-=16}function X(f){32===f.s&&M(f)}function G(f){const w=32-f.s&7;if(0!==w){if(0!==J(f,w))throw new Error("Corrupted padding bits")}}function x(f){let w=2048;return 0!==f.t&&(w=f.Yf+1>>1),w-f.v}!function(f,w,b,j,l){const m=j.length;let p=1,q=0;for(let b=0;b#\n#]# for # a # that #. # with #\'# from # by #. The # on # as # is #ing #\n\t#:#ed #(# at #ly #="# of the #. This #,# not #er #al #=\'#ful #ive #less #est #ize #ous #'," !! ! , *! &! \" ! ) * * - ! # ! #!*! + ,$ ! - % . / # 0 1 . \" 2 3!* 4% ! # / 5 6 7 8 0 1 & $ 9 + : ; < ' != > ?! 4 @ 4 2 & A *# ( B C& ) % ) !*# *-% A +! *. D! %' & E *6 F G% ! *A *% H! D I!+! J!+ K +- *4! A L!*4 M N +6 O!*% +.! K *G P +%( ! G *D +D Q +# *K!*G!+D!+# +G +A +4!+% +K!+4!*D!+K!*K");const O=new Int32Array(2048);function Z(){this.L=new Int8Array(0),this.K=new Int8Array(0),this.R=new Int8Array(0),this.wf=new Int8Array(0),this.p=new Int8Array(0),this.nf=new Int8Array(0),this.o=new Int8Array(0),this.k=new Int16Array(0),this.Sf=new Int32Array(0),this.H=new Int32Array(0),this.l=new Int32Array(0),this.U=new Int32Array(0),this.C=new Int32Array(0),this.J=new Int32Array(0),this.q=new Int32Array(0),this.Af=0,this.j=0,this.P=0,this.g=0,this.s=0,this.v=0,this.Yf=0,this.t=0,this._=0,this.F=0,this.M=0,this.X=0,this.u=0,this.h=0,this.B=0,this.Y=0,this.A=0,this.V=0,this.jf=0,this.maxDistance=0,this.m=0,this.ff=0,this.I=0,this.S=0,this.Bf=0,this.Wf=0,this.i=0,this.D=0,this.T=0,this.W=0,this.yf=0,this.$=0,this.N=0,this.sf=0,this.hf=0,this.cf=0,this.Z=0,this.O=0,this.G=0,this.gf=0,this.lf=0,this.mf=0,this.qf=0,this.pf=0,this.kf=0,this.bf=0,this.Vf=0,this.vf=0,this.Hf=0,this.af=0,this.uf=0,this.zf=0,this.Tf=new Array(0),this.df=new Int32Array(0),this.tf=0,this.ef=new Int8Array(0),this.input=null,this.L=new Int8Array(0),this.H=new Int32Array(10),this.H[0]=16,this.H[1]=15,this.H[2]=11,this.H[3]=4}!function(f,w,b){for(let w=0;w<256;++w)f[w]=63&w,f[512+w]=w>>2,f[1792+w]=2+(w>>6);for(let b=0;b<128;++b)f[1024+b]=4*(w.charCodeAt(b)-32);for(let w=0;w<64;++w)f[1152+w]=1&w,f[1216+w]=2+(1&w);let j=1280;for(let w=0;w<19;++w){const l=3&w,m=b.charCodeAt(w)-32;for(let w=0;w!pfwp6s{8-ip<73s{je#+pllmpfbwmlmfwvafyfqlpfmwqffgeb`wjmwldjewkbqn2;s{`bnfkjooalogyllnuljgfbpzqjmdejoosfbhjmjw`lpw0s{8ib`hwbdpajwpqloofgjwhmftmfbq?"..dqltIPLMgvwzMbnfpbofzlv#olwpsbjmibyy`logfzfpejpkttt-qjphwbapsqfu23s{qjpf16s{Aovfgjmd033/abooelqgfbqmtjogal{-ebjqob`hufqpsbjqivmfwf`kje+"sj`hfujo\'+! tbqnolqgglfpsvoo/333jgfbgqbtkvdfpslwevmgavqmkqfe`foohfzpwj`hklvqolppevfo21s{pvjwgfboQPP!bdfgdqfzDFW!fbpfbjnpdjqobjgp;s{8mbuzdqjgwjsp :::tbqpobgz`bqp*8#~sksolpfmvooubpwtjmgQPP#tfbqqfozaffmpbnfgvhfmbpb`bsftjpkdvoeW109kjwppolwdbwfhj`haovqwkfz26s{$$*8*8!=npjftjmpajqgplqwafwbpffhW2;9lqgpwqffnboo53s{ebqn\x0elupalzpX3^-$*8!SLPWafbqhjgp*8~~nbqzwfmg+VH*rvbgyk9\n.pjy....sqls$*8\x0eojewW2:9uj`fbmgzgfaw=QPPsllomf`haoltW259gllqfuboW249ofwpebjolqbosloomlub`lopdfmf#\x0elxplewqlnfwjooqlpp?k0=slvqebgfsjmh?wq=njmj*\x7f"+njmfyk9\x04abqpkfbq33*8njoh#..=jqlmeqfggjphtfmwpljosvwp,ip,klozW119JPAMW139bgbnpffp?k1=iplm$/#$`lmwW129#QPPollsbpjbnllm?,s=plvoOJMFelqw`bqwW279?k2=;3s{"..?:s{8W379njhf975Ymj`fjm`kZlqhqj`fyk9\b$**8svqfnbdfsbqbwlmfalmg904Y\\le\\$^*8333/yk9\vwbmhzbqgaltoavpk965YIbub03s{\t\x7f~\t&@0&907YifeeF[SJ`bpkujpbdloepmltyk9\x05rvfq-`pppj`hnfbwnjm-ajmggfookjqfsj`pqfmw905YKWWS.132elwltloeFMG#{al{967YALGZgj`h8\t~\tf{jw906Yubqpafbw$~*8gjfw:::8bmmf~~?,Xj^-Obmdhn.^tjqfwlzpbggppfbobof{8\t\n~f`klmjmf-lqd336*wlmziftppbmgofdpqlle333*#133tjmfdfbqgldpallwdbqz`vwpwzofwfnswjlm-{no`l`hdbmd\'+$-63s{Sk-Gnjp`bobmolbmgfphnjofqzbmvmj{gjp`*8~\tgvpw`ojs*-\t\t43s{.133GUGp4^=?wbsfgfnlj((*tbdffvqlskjolswpklofEBRpbpjm.15WobapsfwpVQO#avoh`llh8~\x0e\tKFBGX3^*baaqivbm+2:;ofpkwtjm?,j=plmzdvzpev`hsjsf\x7f.\t"331*mgltX2^8X^8\tOld#pbow\x0e\t\n\nabmdwqjnabwk*x\x0e\t33s{\t~*8hl9\0effpbg=\x0ep9,,#X^8wloosovd+*x\tx\x0e\t#-ip$133sgvboalbw-ISD*8\t~rvlw*8\t\t$*8\t\x0e\t~\x0e1327132613251324132;132:13131312131113101317131613151314131;131:130313021301130013071306130513041320132113221323133:133;133413351336133713301331133213332:::2::;2::42::52::62::72::02::12::22::32:;:2:;;2:;42:;52:;62:;72:;02:;12:;22:;32:4:2:4;2:442:452:462:472:402:412:422:432:5:2:5;2:542:552:562:572:502:512:522:532:6:2:6;2:642:652:662:672:602:612:622:632333231720:73333::::`lnln/Mpfpwffpwbsfqlwlglkb`f`bgbb/]lajfmg/Abbp/Aujgb`bpllwqlelqlplollwqb`vbogjilpjgldqbmwjslwfnbgfafbodlrv/Efpwlmbgbwqfpsl`l`bpbabilwlgbpjmlbdvbsvfpvmlpbmwfgj`fovjpfoobnbzlylmbbnlqsjpllaqb`oj`foolgjlpklqb`bpj<[<\\!sbqhpnlvpfNlpw#---?,bnlmdaqbjmalgz#mlmf8abpfg`bqqzgqbewqfefqsbdf\\klnf-nfwfqgfobzgqfbnsqlufiljmw?,wq=gqvdp?"..#bsqjojgfboboofmf{b`welqwk`lgfpoldj`Ujft#pffnpaobmhslqwp#+133pbufg\\ojmhdlbopdqbmwdqffhklnfpqjmdpqbwfg03s{8tklpfsbqpf+*8!#Aol`hojmv{ilmfpsj{fo$*8!=*8je+.ofewgbujgklqpfEl`vpqbjpfal{fpWqb`hfnfmw?,fn=abq!=-pq`>wltfqbow>!`baofkfmqz17s{8pfwvsjwbozpkbqsnjmlqwbpwftbmwpwkjp-qfpfwtkffodjqop,`pp,233&8`ovappwveeajaofulwfp#2333hlqfb~*8\x0e\tabmgprvfvf>#x~8;3s{8`hjmdx\x0e\t\n\nbkfbg`ol`hjqjpkojhf#qbwjlpwbwpElqn!zbkll*X3^8Balvwejmgp?,k2=gfavdwbphpVQO#>`foop~*+*821s{8sqjnfwfoopwvqmp3{533-isd!psbjmafb`kwb{fpnj`qlbmdfo..=?,djewppwfuf.ojmhalgz-~*8\t\nnlvmw#+2::EBR?,qldfqeqbmh@obpp1;s{8effgp?k2=?p`lwwwfpwp11s{8gqjmh*#\x7f\x7f#oftjppkboo 30:8#elq#olufgtbpwf33s{8ib9\x0fnpjnlm?elmwqfsoznffwpvmwfq`kfbswjdkwAqbmg*#">#gqfpp`ojspqllnplmhfznlajonbjm-Mbnf#sobwfevmmzwqffp`ln,!2-isdtnlgfsbqbnPWBQWofew#jggfm/#132*8\t~\telqn-ujqvp`kbjqwqbmptlqpwSbdfpjwjlmsbw`k?"..\tl.`b`ejqnpwlvqp/333#bpjbmj((*xbglaf$*X3^jg>23alwk8nfmv#-1-nj-smd!hfujm`lb`k@kjogaqv`f1-isdVQO*(-isd\x7fpvjwfpoj`fkbqqz213!#ptffwwq=\x0e\tmbnf>gjfdlsbdf#ptjpp..=\t\t eee8!=Old-`ln!wqfbwpkffw*#%%#27s{8poffsmwfmwejofgib9\x0fojg>!`Mbnf!tlqpfpklwp.al{.gfowb\t%ow8afbqp97;Y?gbwb.qvqbo?,b=#psfmgabhfqpklsp>#!!8sks!=`wjlm20s{8aqjbmkfoolpjyf>l>&1E#iljmnbzaf?jnd#jnd!=/#eipjnd!#!*X3^NWlsAWzsf!mftozGbmph`yf`kwqbjohmltp?,k6=ebr!=yk.`m23*8\t.2!*8wzsf>aovfpwqvozgbujp-ip$8=\x0e\t?"pwffo#zlv#k1=\x0e\telqn#ifpvp233&#nfmv-\x0e\t\n\x0e\ttbofpqjphpvnfmwggjmda.ojhwfb`kdje!#ufdbpgbmphffpwjpkrjspvlnjplaqfgfpgffmwqfwlglpsvfgfb/]lpfpw/Mwjfmfkbpwblwqlpsbqwfglmgfmvfulkb`fqelqnbnjpnlnfilqnvmglbrv/Ag/Abpp/_olbzvgbef`kbwlgbpwbmwlnfmlpgbwlplwqbppjwjlnv`klbklqbovdbqnbzlqfpwlpklqbpwfmfqbmwfpelwlpfpwbpsb/Apmvfubpbovgelqlpnfgjlrvjfmnfpfpslgfq`kjofpfq/Muf`fpgf`jqilp/Efpwbqufmwbdqvslkf`klfoolpwfmdlbnjdl`lpbpmjufodfmwfnjpnbbjqfpivojlwfnbpkb`jbebulqivmjlojaqfsvmwlavfmlbvwlqbaqjoavfmbwf{wlnbqylpbafqojpwbovfdl`/_nlfmfqlivfdlsfq/Vkbafqfpwlzmvm`bnvifqubolqevfqbojaqldvpwbjdvboulwlp`bplpdv/Absvfglplnlpbujplvpwfggfafmml`kfavp`bebowbfvqlppfqjfgj`kl`vqpl`obuf`bpbpof/_msobylobqdllaqbpujpwbbslzlivmwlwqbwbujpwl`qfbq`bnslkfnlp`jm`l`bqdlsjplplqgfmkb`fm/Mqfbgjp`lsfgql`fq`bsvfgbsbsfonfmlq/Vwjo`obqlilqdf`boofslmfqwbqgfmbgjfnbq`bpjdvffoobppjdol`l`kfnlwlpnbgqf`obpfqfpwlmj/]lrvfgbsbpbqabm`lkjilpujbifsbaol/Epwfujfmfqfjmlgfibqelmgl`bmbomlqwfofwqb`bvpbwlnbqnbmlpovmfpbvwlpujoobufmglsfpbqwjslpwfmdbnbq`loofubsbgqfvmjglubnlpylmbpbnalpabmgbnbqjbbavplnv`kbpvajqqjlibujujqdqbgl`kj`bboo/Ailufmgj`kbfpwbmwbofppbojqpvfolsfplpejmfpoobnbavp`l/Epwboofdbmfdqlsobybkvnlqsbdbqivmwbglaofjpobpalopbab/]lkbaobov`kb/mqfbgj`fmivdbqmlwbpuboofboo/M`bqdbglolqbabilfpw/Edvpwlnfmwfnbqjlejqnb`lpwlej`kbsobwbkldbqbqwfpofzfpbrvfonvpflabpfpsl`lpnjwbg`jfol`kj`lnjfgldbmbqpbmwlfwbsbgfafpsobzbqfgfppjfwf`lqwf`lqfbgvgbpgfpflujfilgfpfbbdvbp%rvlw8glnbjm`lnnlmpwbwvpfufmwpnbpwfqpzpwfnb`wjlmabmmfqqfnlufp`qloovsgbwfdolabonfgjvnejowfqmvnafq`kbmdfqfpvowsvaoj`p`qffm`kllpfmlqnbowqbufojppvfpplvq`fwbqdfwpsqjmdnlgvofnlajofptjw`ksklwlpalqgfqqfdjlmjwpfoepl`jbob`wjuf`lovnmqf`lqgelooltwjwof=fjwkfqofmdwkebnjozeqjfmgobzlvwbvwklq`qfbwfqfujftpvnnfqpfqufqsobzfgsobzfqf{sbmgsloj`zelqnbwglvaofsljmwppfqjfpsfqplmojujmdgfpjdmnlmwkpelq`fpvmjrvftfjdkwsflsoffmfqdzmbwvqfpfbq`kejdvqfkbujmd`vpwlnleepfwofwwfqtjmgltpvanjwqfmgfqdqlvspvsolbgkfbowknfwklgujgflpp`klloevwvqfpkbgltgfabwfubovfpLaif`wlwkfqpqjdkwpofbdvf`kqlnfpjnsofmlwj`fpkbqfgfmgjmdpfbplmqfslqwlmojmfprvbqfavwwlmjnbdfpfmbaofnlujmdobwfpwtjmwfqEqbm`fsfqjlgpwqlmdqfsfbwOlmglmgfwbjoelqnfggfnbmgpf`vqfsbppfgwlddofsob`fpgfuj`fpwbwj``jwjfppwqfbnzfooltbwwb`hpwqffweojdkwkjggfmjmel!=lsfmfgvpfevouboofz`bvpfpofbgfqpf`qfwpf`lmggbnbdfpslqwpf{`fswqbwjmdpjdmfgwkjmdpfeef`wejfogppwbwfpleej`fujpvbofgjwlqulovnfQfslqwnvpfvnnlujfpsbqfmwb``fppnlpwoznlwkfq!#jg>!nbqhfwdqlvmg`kbm`fpvqufzafelqfpznalonlnfmwpsff`knlwjlmjmpjgfnbwwfq@fmwfqlaif`wf{jpwpnjggofFvqlsfdqltwkofdb`znbmmfqfmlvdk`bqffqbmptfqlqjdjmslqwbo`ojfmwpfof`wqbmgln`olpfgwlsj`p`lnjmdebwkfqlswjlmpjnsozqbjpfgfp`bsf`klpfm`kvq`kgfejmfqfbplm`lqmfqlvwsvwnfnlqzjeqbnfsloj`fnlgfopMvnafqgvqjmdleefqppwzofphjoofgojpwfg`boofgpjoufqnbqdjmgfofwfafwwfqaqltpfojnjwpDolabopjmdoftjgdfw`fmwfqavgdfwmltqbs`qfgjw`objnpfmdjmfpbefwz`klj`fpsjqjw.pwzofpsqfbgnbhjmdmffgfgqvppjbsofbpff{wfmwP`qjswaqlhfmbooltp`kbqdfgjujgfeb`wlqnfnafq.abpfgwkflqz`lmejdbqlvmgtlqhfgkfosfg@kvq`kjnsb`wpklvogbotbzpoldl!#alwwlnojpw!=*xubq#sqfej{lqbmdfKfbgfq-svpk+`lvsofdbqgfmaqjgdfobvm`kQfujftwbhjmdujpjlmojwwofgbwjmdAvwwlmafbvwzwkfnfpelqdlwPfbq`kbm`klqbonlpwolbgfg@kbmdfqfwvqmpwqjmdqfolbgNlajofjm`lnfpvssozPlvq`flqgfqpujftfg%maps8`lvqpfBalvw#jpobmg?kwno#`llhjfmbnf>!bnbylmnlgfqmbguj`fjm?,b=9#Wkf#gjboldklvpfpAFDJM#Nf{j`lpwbqwp`fmwqfkfjdkwbggjmdJpobmgbppfwpFnsjqfP`kllofeelqwgjqf`wmfbqoznbmvboPfof`w-\t\tLmfiljmfgnfmv!=SkjojsbtbqgpkbmgofjnslqwLeej`fqfdbqgphjoopmbwjlmPslqwpgfdqfftffhoz#+f-d-afkjmggl`wlqolddfgvmjwfg?,a=?,afdjmpsobmwpbppjpwbqwjpwjppvfg033s{\x7f`bmbgbbdfm`zp`kfnfqfnbjmAqbyjopbnsofoldl!=afzlmg.p`bofb``fswpfqufgnbqjmfEllwfq`bnfqb?,k2=\t\\elqn!ofbufppwqfpp!#,=\x0e\t-dje!#lmolbgolbgfqL{elqgpjpwfqpvqujuojpwfmefnbofGfpjdmpjyf>!bssfbowf{w!=ofufopwkbmhpkjdkfqelq`fgbmjnbobmzlmfBeqj`bbdqffgqf`fmwSflsof?aq#,=tlmgfqsqj`fpwvqmfg\x7f\x7f#x~8nbjm!=jmojmfpvmgbztqbs!=ebjofg`fmpvpnjmvwfafb`lmrvlwfp263s{\x7ffpwbwfqfnlwffnbjo!ojmhfgqjdkw8pjdmboelqnbo2-kwnopjdmvssqjm`feolbw9-smd!#elqvn-B``fppsbsfqpplvmgpf{wfmgKfjdkwpojgfqVWE.;!%bns8#Afelqf-#TjwkpwvgjlltmfqpnbmbdfsqlejwiRvfqzbmmvbosbqbnpalvdkwebnlvpdlldofolmdfqj((*#xjpqbfopbzjmdgf`jgfklnf!=kfbgfqfmpvqfaqbm`ksjf`fpaol`h8pwbwfgwls!=?qb`jmdqfpjyf..%dw8sb`jwzpf{vboavqfbv-isd!#23/333lawbjmwjwofpbnlvmw/#Jm`-`lnfgznfmv!#ozqj`pwlgbz-jmgffg`lvmwz\\oldl-EbnjozollhfgNbqhfwopf#jeSobzfqwvqhfz*8ubq#elqfpwdjujmdfqqlqpGlnbjm~fopfxjmpfqwAold?,ellwfqoldjm-ebpwfqbdfmwp?algz#23s{#3sqbdnbeqjgbzivmjlqgloobqsob`fg`lufqpsovdjm6/333#sbdf!=alpwlm-wfpw+bubwbqwfpwfg\\`lvmwelqvnpp`kfnbjmgf{/ejoofgpkbqfpqfbgfqbofqw+bssfbqPvanjwojmf!=algz!=\t)#WkfWklvdkpffjmdifqpfzMftp?,ufqjezf{sfqwjmivqztjgwk>@llhjfPWBQW#b`qlpp\\jnbdfwkqfbgmbwjufsl`hfwal{!=\tPzpwfn#Gbujg`bm`fqwbaofpsqlufgBsqjo#qfboozgqjufqjwfn!=nlqf!=albqgp`lolqp`bnsvpejqpw#\x7f\x7f#X^8nfgjb-dvjwbqejmjpktjgwk9pkltfgLwkfq#-sks!#bppvnfobzfqptjoplmpwlqfpqfojfeptfgfm@vpwlnfbpjoz#zlvq#Pwqjmd\t\tTkjowbzolq`ofbq9qfplqweqfm`kwklvdk!*#(#!?algz=avzjmdaqbmgpNfnafqmbnf!=lssjmdpf`wlq6s{8!=upsb`fslpwfqnbilq#`leeffnbqwjmnbwvqfkbssfm?,mbu=hbmpbpojmh!=Jnbdfp>ebopftkjof#kpsb`f3%bns8#\t\tJm##sltfqSlophj.`lolqilqgbmAlwwlnPwbqw#.`lvmw1-kwnomftp!=32-isdLmojmf.qjdkwnjoofqpfmjlqJPAM#33/333#dvjgfpubovf*f`wjlmqfsbjq-{no!##qjdkwp-kwno.aol`hqfdF{s9klufqtjwkjmujqdjmsklmfp?,wq=\x0evpjmd#\t\nubq#=$*8\t\n?,wg=\t?,wq=\tabkbpbaqbpjodbofdlnbdzbqslophjpqsphj4]4C5d\bTA\nzk\vBl\bQ\x7f\vUm\x05Gx\bSM\nmC\bTA\twQ\nd}\bW@\bTl\bTF\ti@\tcT\vBM\v|j\x04BV\tqw\tcC\bWI\npa\tfM\n{Z\x05{X\bTF\bVV\bVK\t\x7fm\x04kF\t[]\bPm\bTv\nsI\vpg\t[I\bQp\x04mx\v_W\n^M\npe\vQ}\vGu\nel\npe\x04Ch\x04BV\bTA\tSo\nzk\vGL\vxD\nd[\x05Jz\x05MY\bQp\x04li\nfl\npC\x05{B\x05Nt\vwT\ti_\bTg\x04QQ\n|p\vXN\bQS\vxD\x04QC\bWZ\tpD\vVS\bTW\x05Nt\x04Yh\nzu\x04Kj\x05N}\twr\tHa\n_D\tj`\vQ}\vWp\nxZ\x04{c\tji\tBU\nbD\x04a|\tTn\tpV\nZd\nmC\vEV\x05{X\tc}\tTo\bWl\bUd\tIQ\tcg\vxs\nXW\twR\vek\tc}\t]y\tJn\nrp\neg\npV\nz\\\x05{W\npl\nz\\\nzU\tPc\t`{\bV@\nc|\bRw\ti_\bVb\nwX\tHv\x04Su\bTF\v_W\vWs\vsI\x05m\x7f\nTT\ndc\tUS\t}f\tiZ\bWz\tc}\x04MD\tBe\tiD\v@@\bTl\bPv\t}t\x04Sw\x04M`\vnU\tkW\ved\nqo\vxY\tA|\bTz\vy`\x04BR\x04BM\tia\x04XU\nyu\x04n^\tfL\tiI\nXW\tfD\bWz\bW@\tyj\t\x7fm\tav\tBN\vb\\\tpD\bTf\nY[\tJn\bQy\t[^\vWc\vyu\x04Dl\x04CJ\vWj\vHR\t`V\vuW\tQy\np@\vGu\x05pl\x04Jm\bW[\nLP\nxC\n`m\twQ\x05ui\x05\x7fR\nbI\twQ\tBZ\tWV\x04BR\npg\tcg\x05ti\x04CW\n_y\tRg\bQa\vQB\vWc\nYb\x05le\ngE\x04Su\nL[\tQ\x7f\tea\tdj\v]W\nb~\x04M`\twL\bTV\bVH\nt\x7f\npl\t|b\x05s_\bU|\bTa\x04oQ\x05lv\x04Sk\x04M`\bTv\vK}\nfl\tcC\x04oQ\x04BR\tHk\t|d\bQp\tHK\tBZ\vHR\bPv\vLx\vEZ\bT\x7f\bTv\tiD\x05oD\x05MU\vwB\x04Su\x05k`\x04St\ntC\tPl\tKg\noi\tjY\vxY\x04h}\nzk\bWZ\t\x7fm\ve`\tTB\tfE\nzk\t`z\x04Yh\nV|\tHK\tAJ\tAJ\bUL\tp\\\tql\nYc\x04Kd\nfy\x04Yh\t[I\vDg\x04Jm\n]n\nlb\bUd\n{Z\tlu\tfs\x04oQ\bTW\x04Jm\vwB\tea\x04Yh\x04BC\tsb\tTn\nzU\n_y\vxY\tQ]\ngw\x04mt\tO\\\ntb\bWW\bQy\tmI\tV[\ny\\\naB\vRb\twQ\n]Q\x04QJ\bWg\vWa\bQj\ntC\bVH\nYm\vxs\bVK\nel\bWI\vxY\x04Cq\ntR\vHV\bTl\bVw\tay\bQa\bVV\t}t\tdj\nr|\tp\\\twR\n{i\nTT\t[I\ti[\tAJ\vxs\v_W\td{\vQ}\tcg\tTz\tA|\tCj\vLm\x05N}\x05m\x7f\nbK\tdZ\tp\\\t`V\tsV\np@\tiD\twQ\vQ}\bTf\x05ka\x04Jm\v@@\bV`\tzp\n@N\x04Sw\tiI\tcg\noi\x04Su\bVw\x04lo\x04Cy\tc}\vb\\\tsU\x04BA\bWI\bTf\nxS\tVp\nd|\bTV\vbC\tNo\x05Ju\nTC\t|`\n{Z\tD]\bU|\tc}\x05lm\bTl\tBv\tPl\tc}\bQp\t\x7fm\nLk\tkj\n@N\x04Sb\x04KO\tj_\tp\\\nzU\bTl\bTg\bWI\tcf\x04XO\bWW\ndz\x04li\tBN\nd[\bWO\x04MD\vKC\tdj\tI_\bVV\ny\\\vLm\x05xl\txB\tkV\vb\\\vJW\vVS\tVx\vxD\td{\x04MD\bTa\t|`\vPz\x04R}\vWs\x04BM\nsI\x04CN\bTa\x04Jm\npe\ti_\npV\nrh\tRd\tHv\n~A\nxR\vWh\vWk\nxS\vAz\vwX\nbI\x04oQ\tfw\nqI\nV|\nun\x05z\x7f\vpg\td\\\voA\x05{D\ti_\x05xB\bT\x7f\t`V\x05qr\tTT\x04g]\x04CA\vuR\tVJ\tT`\npw\vRb\tI_\nCx\x04Ro\vsI\x04Cj\x04Kh\tBv\tWV\x04BB\x05oD\x05{D\nhc\x04Km\v^R\tQE\n{I\np@\nc|\x05Gt\tc}\x04Dl\nzU\x05qN\tsV\x05k}\tHh\v|j\nqo\x05u|\tQ]\vek\x05\x7fZ\x04M`\x04St\npe\tdj\bVG\veE\t\x7fm\vWc\x04|I\n[W\tfL\bT\x7f\tBZ\x04Su\vKa\x04Cq\x05Nt\x04Y[\nqI\bTv\tfM\ti@\t}f\x04B\\\tQy\vBl\bWg\x04XD\x05kc\vx[\bVV\tQ]\t\x7fa\tPy\vxD\nfI\t}f\x05oD\tdj\tSG\x05ls\t~D\x04CN\n{Z\t\\v\n_D\nhc\vx_\x04C[\tAJ\nLM\tVx\x04CI\tbj\tc^\tcF\ntC\x04Sx\twr\x04XA\bU\\\t|a\vK\\\bTV\bVj\nd|\tfs\x04CX\ntb\bRw\tVx\tAE\tA|\bT\x7f\x05Nt\vDg\tVc\bTl\x04d@\npo\t\x7fM\tcF\npe\tiZ\tBo\bSq\nfH\x04l`\bTx\bWf\tHE\vF{\tcO\tfD\nlm\vfZ\nlm\veU\tdG\x04BH\bTV\tSi\x05MW\nwX\nz\\\t\\c\x04CX\nd}\tl}\bQp\bTV\tF~\bQ\x7f\t`i\ng@\x05nO\bUd\bTl\nL[\twQ\tji\ntC\t|J\nLU\naB\vxY\x04Kj\tAJ\x05uN\ti[\npe\x04Sk\vDg\vx]\bVb\bVV\nea\tkV\nqI\bTa\x04Sk\nAO\tpD\ntb\nts\nyi\bVg\ti_\v_W\nLk\x05Nt\tyj\tfM\x04R\x7f\tiI\bTl\vwX\tsV\vMl\nyu\tAJ\bVj\x04KO\tWV\vA}\vW\x7f\nrp\tiD\v|o\x05lv\vsI\x04BM\td~\tCU\bVb\x04eV\npC\vwT\tj`\tc}\vxs\vps\vvh\tWV\vGg\vAe\vVK\v]W\trg\vWc\x05F`\tBr\vb\\\tdZ\bQp\nqI\x04kF\nLk\vAR\bWI\bTg\tbs\tdw\n{L\n_y\tiZ\bTA\tlg\bVV\bTl\tdk\n`k\ta{\ti_\x05{A\x05wj\twN\v@@\bTe\ti_\n_D\twL\nAH\viK\vek\n[]\tp_\tyj\bTv\tUS\t[r\n{I\nps\x05Gt\vVK\npl\x04S}\vWP\t|d\x04MD\vHV\bT\x7f\x04R}\x04M`\bTV\bVH\x05lv\x04Ch\bW[\x04Ke\tR{\v^R\tab\tBZ\tVA\tB`\nd|\nhs\x04Ke\tBe\x04Oi\tR{\td\\\x05nB\bWZ\tdZ\tVJ\x05Os\t\x7fm\x04uQ\vhZ\x04Q@\x04QQ\nfI\bW[\x04B\\\x04li\nzU\nMd\x04M`\nxS\bVV\n\\}\vxD\t\x7fm\bTp\x04IS\nc|\tkV\x05i~\tV{\vhZ\t|b\bWt\n@R\voA\vnU\bWI\tea\tB`\tiD\tc}\tTz\x04BR\vQB\x05Nj\tCP\t[I\bTv\t`W\x05uN\vpg\vpg\vWc\tiT\tbs\twL\tU_\tc\\\t|h\vKa\tNr\tfL\nq|\nzu\nz\\\tNr\bUg\t|b\x04m`\bTv\nyd\nrp\bWf\tUX\x04BV\nzk\nd}\twQ\t}f\x04Ce\ved\bTW\bSB\nxU\tcn\bTb\ne\x7f\ta\\\tSG\bU|\npV\nN\\\x04Kn\vnU\tAt\tpD\v^R\vIr\x04b[\tR{\tdE\vxD\vWK\vWA\bQL\bW@\x04Su\bUd\nDM\tPc\x04CA\x04Dl\x04oQ\tHs\x05wi\x04ub\n\x7fa\bQp\x05Ob\nLP\bTl\x04Y[\vK}\tAJ\bQ\x7f\x04n^\vsA\bSM\nqM\bWZ\n^W\vz{\x04S|\tfD\bVK\bTv\bPv\x04BB\tCP\x04dF\tid\vxs\x04mx\vws\tcC\ntC\tyc\x05M`\vW\x7f\nrh\bQp\vxD\x04\\o\nsI\x04_k\nzu\x04kF\tfD\x04Xs\x04XO\tjp\bTv\x04BS\x05{B\tBr\nzQ\nbI\tc{\x04BD\x04BV\x05nO\bTF\tca\x05Jd\tfL\tPV\tI_\nlK\x04`o\twX\npa\tgu\bP}\x05{^\bWf\n{I\tBN\npa\x04Kl\vpg\tcn\tfL\vvh\x04Cq\bTl\vnU\bSq\x04Cm\twR\bUJ\npe\nyd\nYg\x04Cy\vKW\tfD\nea\x04oQ\tj_\tBv\x04nM\vID\bTa\nzA\x05pl\n]n\bTa\tR{\tfr\n_y\bUg\x05{X\x05kk\vxD\x04|I\x05xl\nfy\x04Ce\vwB\nLk\vd]\noi\n}h\tQ]\npe\bVw\x04Hk\x04OQ\nzk\tAJ\npV\bPv\ny\\\tA{\x04Oi\bSB\x04XA\veE\tjp\nq}\tiD\x05qN\v^R\t\x7fm\tiZ\tBr\bVg\noi\n\\X\tU_\nc|\vHV\bTf\tTn\x04\\N\x04\\N\nuB\x05lv\nyu\tTd\bTf\bPL\v]W\tdG\nA`\nw^\ngI\npe\tdw\nz\\\x05ia\bWZ\tcF\x04Jm\n{Z\bWO\x04_k\x04Df\x04RR\td\\\bVV\vxs\x04BN\x05ti\x04lm\tTd\t]y\vHV\tSo\v|j\x04XX\tA|\vZ^\vGu\bTW\x05M`\x04kF\vhZ\vVK\tdG\vBl\tay\nxU\x05qE\x05nO\bVw\nqI\x04CX\ne\x7f\tPl\bWO\vLm\tdL\x05uH\x04Cm\tdT\x04fn\vwB\x05ka\vnU\n@M\nyT\tHv\t\\}\x04Kh\td~\x04Yh\x05k}\neR\td\\\bWI\t|b\tHK\tiD\bTW\x05MY\npl\bQ_\twr\vAx\tHE\bTg\bSq\x05vp\vb\\\bWO\nOl\nsI\nfy\vID\t\\c\n{Z\n^~\npe\nAO\tTT\vxv\x04k_\bWO\v|j\vwB\tQy\ti@\tPl\tHa\tdZ\x05k}\x04ra\tUT\vJc\ved\np@\tQN\nd|\tkj\tHk\x04M`\noi\twr\td\\\nlq\no_\nlb\nL[\tac\x04BB\x04BH\x04Cm\npl\tIQ\bVK\vxs\n`e\viK\npa\x04Oi\tUS\bTp\tfD\nPG\x05kk\x04XA\nz\\\neg\vWh\twR\x05qN\nqS\tcn\x04lo\nxS\n^W\tBU\nt\x7f\tHE\tp\\\tfF\tfw\bVV\bW@\tak\vVK\x05ls\tVJ\bVV\veE\x04\\o\nyX\nYm\x04M`\x05lL\nd|\nzk\tA{\x05sE\twQ\x04XT\nt\x7f\tPl\t]y\vwT\x05{p\x04MD\vb\\\tQ]\x04Kj\tJn\nAH\vRb\tBU\tHK\t\\c\nfI\x05m\x7f\nqM\n@R\tSo\noi\x04BT\tHv\n_y\x04Kh\tBZ\t]i\bUJ\tV{\x04Sr\nbI\vGg\ta_\bTR\nfI\nfl\t[K\tII\x04S|\vuW\tiI\bWI\nqI\v|j\x04BV\bVg\bWZ\x04kF\vx]\bTA\tab\tfr\ti@\tJd\tJd\vps\nAO\bTa\x05xu\tiD\nzk\t|d\t|`\bW[\tlP\tdG\bVV\vw}\vqO\ti[\bQ\x7f\bTz\vVF\twN\x05ts\tdw\bTv\neS\ngi\tNr\x05yS\npe\bVV\bSq\n`m\tyj\tBZ\vWX\bSB\tc\\\nUR\t[J\tc_\x04nM\bWQ\vAx\nMd\tBr\x05ui\vxY\bSM\vWc\v|j\vxs\t}Q\tBO\bPL\bWW\tfM\nAO\tPc\veU\x04e^\bTg\nqI\tac\bPv\tcF\x04oQ\tQ\x7f\vhZ\x05ka\nz\\\tiK\tBU\n`k\tCP\x04S|\x04M`\n{I\tS{\x04_O\tBZ\x04Zi\x04Sk\tps\tp\\\nYu\n]s\nxC\bWt\nbD\tkV\vGu\x05yS\nqA\t[r\neK\x04M`\tdZ\x05lL\bUg\bTl\nbD\tUS\vb\\\tpV\ncc\x04S\\\tct\t`z\bPL\vWs\nA`\neg\bSq\x05uE\x04CR\vDg\t`W\vz{\vWc\x04Sk\x04Sk\tbW\bUg\tea\nxZ\tiI\tUX\tVJ\nqn\tS{\vRb\bTQ\npl\x05Gt\vuW\x05uj\npF\nqI\tfL\t[I\tia\x04XO\nyu\vDg\ved\tq{\x04VG\bQ\x7f\x05ka\tVj\tkV\txB\nd|\np@\tQN\tPc\tps\x04]j\tkV\toU\bTp\nzU\x05nB\vB]\ta{\bV@\n]n\x04m`\tcz\tR{\x04m`\bQa\vwT\bSM\x05MY\x05qN\tdj\x05~s\vQ}\x05MY\vMB\tBv\twR\bRg\vQ}\tql\vKC\nrm\x05xu\x04CC\vwB\vvh\tBq\x04Xq\npV\ti_\x05Ob\x05uE\nbd\nqo\v{i\nC~\tBL\veE\x05uH\bVj\x04Ey\x04Gz\vzR\v{i\tcf\n{Z\n]n\x04XA\vGu\vnU\thS\vGI\nCc\tHE\bTA\tHB\x04BH\x04Cj\nCc\bTF\tHE\nXI\tA{\bQ\x7f\tc\\\vmO\vWX\nfH\np@\x05MY\bTF\nlK\tBt\nzU\tTT\x04Km\vwT\npV\ndt\vyI\tVx\tQ\x7f\tRg\tTd\nzU\bRS\nLM\twA\x04nM\tTn\ndS\t]g\nLc\vwB\t}t\t[I\tCP\x04kX\vFm\vhZ\x05m\x7f\ti[\np@\vQ}\vW\x7f\t|d\nMO\nMd\tf_\tfD\tcJ\tHz\vRb\tio\tPy\x04Y[\nxU\tct\v@@\tww\bPv\x04BM\x04FF\ntb\x05v|\vKm\tBq\tBq\x04Kh\x04`o\nZd\x04XU\ti]\t|`\tSt\x04B\\\bQ\x7f\v_W\tTJ\nqI\t|a\tA{\vuP\x04MD\tPl\nxR\tfL\vws\tc{\td\\\bV`\neg\tHK\x05kc\nd|\bVV\ny\\\x05kc\ti]\bVG\t`V\tss\tI_\tAE\tbs\tdu\nel\tpD\vW\x7f\nqs\x05lv\bSM\x04Zi\vVK\x05ia\vQB\tQ\x7f\n{Z\bPt\vKl\nlK\nhs\ndS\bVK\x05mf\nd^\tkV\tcO\nc|\bVH\t\\]\bTv\bSq\tmI\vDg\tVJ\tcn\ny\\\bVg\bTv\nyX\bTF\t]]\bTp\noi\nhs\veU\nBf\tdj\x05Mr\n|p\t\\g\t]r\bVb\x05{D\nd[\x04XN\tfM\tO\\\x05s_\tcf\tiZ\x04XN\vWc\tqv\n`m\tU^\x05oD\nd|\vGg\tdE\vwf\x04lo\x04u}\nd|\x05oQ\t`i\x04Oi\vxD\ndZ\nCx\x04Yw\nzk\ntb\ngw\tyj\tB`\nyX\vps\ntC\vpP\vqw\bPu\bPX\tDm\npw\x05Nj\tss\taG\vxs\bPt\noL\x04Gz\tOk\ti@\ti]\x04eC\tIQ\tii\tdj\v@J\t|d\x05uh\bWZ\veU\vnU\bTa\tcC\x04g]\nzk\x04Yh\bVK\nLU\np@\ntb\ntR\tCj\vNP\ti@\bP{\n\\}\n{c\nwX\tfL\bVG\tc{\t|`\tAJ\t|C\tfD\x05ln\t|d\tbs\nqI\x05{B\vAx\np@\nzk\vRb\x05Os\vWS\x04e^\vD_\tBv\vWd\bVb\vxs\veE\bRw\n]n\n|p\vg|\tfw\x05kc\bTI\x05ka\n\\T\x04Sp\tju\vps\npe\x05u|\vGr\bVe\tCU\x04]M\x04XU\vxD\bTa\tIQ\vWq\tCU\tam\tdj\bSo\x04Sw\vnU\x04Ch\tQ]\x05s_\bPt\tfS\bTa\t\\}\n@O\x04Yc\tUZ\bTx\npe\vnU\nzU\t|}\tiD\nz\\\bSM\vxD\x04BR\nzQ\tQN\x04]M\x04Yh\nLP\vFm\vLX\x05vc\vql\x05ka\tHK\bVb\ntC\nCy\bTv\nuV\x04oQ\t`z\t[I\tB`\vRb\tyj\tsb\vWs\bTl\tkV\ved\ne\x7f\x05lL\vxN\t\x7fm\nJn\tjY\vxD\bVb\bSq\vyu\twL\vXL\bTA\tpg\tAt\tnD\x04XX\twR\npl\nhw\x05yS\nps\tcO\bW[\v|j\x04XN\tsV\tp\\\tBe\nb~\nAJ\n]e\x05k`\x05qN\tdw\tWV\tHE\vEV\x05Jz\tid\tB`\tzh\x05E]\tfD\bTg\x05qN\bTa\tja\x04Cv\bSM\nhc\bUe\x05t_\tie\x04g]\twQ\nPn\bVB\tjw\bVg\vbE\tBZ\vRH\bP{\tjp\n\\}\ta_\tcC\t|a\vD]\tBZ\ti[\tfD\vxW\no_\td\\\n_D\ntb\t\\c\tAJ\nlK\x04oQ\x04lo\vLx\vM@\bWZ\x04Kn\vpg\nTi\nIv\n|r\v@}\x05Jz\x05Lm\x05Wh\x05k}\x05ln\vxD\n]s\x04gc\vps\tBr\bTW\vBM\x05tZ\nBY\x04DW\tjf\vSW\x04C}\nqo\tdE\tmv\tIQ\bPP\bUb\x05lv\x04BC\nzQ\t[I\vgl\nig\bUs\x04BT\vbC\bSq\tsU\tiW\nJn\tSY\tHK\trg\npV\vID\v|j\x04KO\t`S\t|a`vbmglfmujbqnbgqjgavp`bqjmj`jlwjfnslslqrvf`vfmwbfpwbglsvfgfmivfdlp`lmwqbfpw/Mmmlnaqfwjfmfmsfqejonbmfqbbnjdlp`jvgbg`fmwqlbvmrvfsvfgfpgfmwqlsqjnfqsqf`jlpfd/Vmavfmlpuloufqsvmwlppfnbmbkba/Abbdlpwlmvfulpvmjglp`bqolpfrvjslmj/]lpnv`klpbodvmb`lqqfljnbdfmsbqwjqbqqjabnbq/Abklnaqffnsoflufqgbg`bnajlnv`kbpevfqlmsbpbglo/Amfbsbqf`fmvfubp`vqplpfpwbabrvjfqlojaqlp`vbmwlb``fplnjdvfoubqjlp`vbwqlwjfmfpdqvslppfq/Mmfvqlsbnfgjlpeqfmwfb`fq`bgfn/Mplefqwb`l`kfpnlgfoljwbojbofwqbpbod/Vm`lnsqb`vbofpf{jpwf`vfqslpjfmglsqfmpboofdbqujbifpgjmfqlnvq`jbslgq/Msvfpwlgjbqjlsvfaolrvjfqfnbmvfosqlsjl`qjpjp`jfqwlpfdvqlnvfqwfevfmwf`fqqbqdqbmgffef`wlsbqwfpnfgjgbsqlsjbleqf`fwjfqqbf.nbjoubqjbpelqnbpevwvqllaifwlpfdvjqqjfpdlmlqnbpnjpnlp/Vmj`l`bnjmlpjwjlpqby/_mgfajglsqvfabwlofglwfm/Abifp/Vpfpsfql`l`jmblqjdfmwjfmgb`jfmwl`/Mgjykbaobqpfq/Abobwjmbevfqybfpwjoldvfqqbfmwqbq/E{jwlo/_sfybdfmgbu/Agflfujwbqsbdjmbnfwqlpibujfqsbgqfpe/M`jo`bafyb/Mqfbppbojgbfmu/Alibs/_mbavplpajfmfpwf{wlpoofubqsvfgbmevfqwf`ln/Vm`obpfpkvnbmlwfmjglajoablvmjgbgfpw/Mpfgjwbq`qfbgl2%bns8Kjpwlqz#>#mft#@fmwqbovsgbwfgPsf`jboMfwtlqhqfrvjqf`lnnfmwtbqmjmd@loofdfwlloabqqfnbjmpaf`bvpffof`wfgGfvwp`kejmbm`ftlqhfqprvj`hozafwtffmf{b`wozpfwwjmdgjpfbpfPl`jfwztfbslmpf{kjajw%ow8"..@lmwqlo`obppfp`lufqfglvwojmfbwwb`hpgfuj`fp+tjmgltsvqslpfwjwof>!Nlajof#hjoojmdpkltjmdJwbojbmgqlssfgkfbujozfeef`wp.2$^*8\t`lmejqn@vqqfmwbgubm`fpkbqjmdlsfmjmdgqbtjmdajoojlmlqgfqfgDfqnbmzqfobwfg?,elqn=jm`ovgftkfwkfqgfejmfgP`jfm`f`bwboldBqwj`ofavwwlmpobqdfpwvmjelqnilvqmfzpjgfabq@kj`bdlklojgbzDfmfqbosbppbdf/%rvlw8bmjnbwfeffojmdbqqjufgsbppjmdmbwvqboqlvdkoz-\t\tWkf#avw#mlwgfmpjwzAqjwbjm@kjmfpfob`h#lewqjavwfJqfobmg!#gbwb.eb`wlqpqf`fjufwkbw#jpOjaqbqzkvpabmgjm#eb`wbeebjqp@kbqofpqbgj`boaqlvdkwejmgjmdobmgjmd9obmd>!qfwvqm#ofbgfqpsobmmfgsqfnjvnsb`hbdfBnfqj`bFgjwjlm^%rvlw8Nfppbdfmffg#wlubovf>!`lnsof{ollhjmdpwbwjlmafojfufpnboofq.nlajofqf`lqgptbmw#wlhjmg#leEjqfel{zlv#bqfpjnjobqpwvgjfgnb{jnvnkfbgjmdqbsjgoz`ojnbwfhjmdglnfnfqdfgbnlvmwpelvmgfgsjlmffqelqnvobgzmbpwzklt#wl#Pvsslqwqfufmvff`lmlnzQfpvowpaqlwkfqplogjfqobqdfoz`boojmd-%rvlw8B``lvmwFgtbqg#pfdnfmwQlafqw#feelqwpSb`jej`ofbqmfgvs#tjwkkfjdkw9tf#kbufBmdfofpmbwjlmp\\pfbq`kbssojfgb`rvjqfnbppjufdqbmwfg9#ebopfwqfbwfgajddfpwafmfejwgqjujmdPwvgjfpnjmjnvnsfqkbspnlqmjmdpfoojmdjp#vpfgqfufqpfubqjbmw#qlof>!njppjmdb`kjfufsqlnlwfpwvgfmwplnflmff{wqfnfqfpwlqfalwwln9fuloufgboo#wkfpjwfnbsfmdojpktbz#wl##Bvdvpwpznalop@lnsbmznbwwfqpnvpj`bobdbjmpwpfqujmd~*+*8\x0e\tsbznfmwwqlvaof`lm`fsw`lnsbqfsbqfmwpsobzfqpqfdjlmpnlmjwlq#$$Wkf#tjmmjmdf{solqfbgbswfgDboofqzsqlgv`fbajojwzfmkbm`f`bqffqp*-#Wkf#`loof`wPfbq`k#bm`jfmwf{jpwfgellwfq#kbmgofqsqjmwfg`lmplofFbpwfqmf{slqwptjmgltp@kbmmfojoofdbomfvwqbopvddfpw\\kfbgfqpjdmjmd-kwno!=pfwwofgtfpwfqm`bvpjmd.tfahjw`objnfgIvpwj`f`kbswfquj`wjnpWklnbp#nlyjoobsqlnjpfsbqwjfpfgjwjlmlvwpjgf9ebopf/kvmgqfgLoznsj`\\avwwlmbvwklqpqfb`kfg`kqlmj`gfnbmgppf`lmgpsqlwf`wbglswfgsqfsbqfmfjwkfqdqfbwozdqfbwfqlufqboojnsqluf`lnnbmgpsf`jbopfbq`k-tlqpkjsevmgjmdwklvdkwkjdkfpwjmpwfbgvwjojwzrvbqwfq@vowvqfwfpwjmd`ofbqozf{slpfgAqltpfqojafqbo~#`bw`kSqlif`wf{bnsofkjgf+*8EolqjgbbmptfqpbooltfgFnsfqlqgfefmpfpfqjlvpeqffglnPfufqbo.avwwlmEvqwkfqlvw#le#">#mvoowqbjmfgGfmnbqhuljg+3*,boo-ipsqfufmwQfrvfpwPwfskfm\t\tTkfm#lapfquf?,k1=\x0e\tNlgfqm#sqlujgf!#bow>!alqgfqp-\t\tElq#\t\tNbmz#bqwjpwpsltfqfgsfqelqnej`wjlmwzsf#lenfgj`bowj`hfwplsslpfg@lvm`jotjwmfppivpwj`fDflqdf#Afodjvn---?,b=wtjwwfqmlwbaoztbjwjmdtbqebqf#Lwkfq#qbmhjmdskqbpfpnfmwjlmpvqujufp`klobq?,s=\x0e\t#@lvmwqzjdmlqfgolpp#leivpw#bpDflqdjbpwqbmdf?kfbg=?pwlssfg2$^*8\x0e\tjpobmgpmlwbaofalqgfq9ojpw#le`bqqjfg233/333?,k0=\t#pfufqboaf`lnfppfof`w#tfggjmd33-kwnonlmbq`klee#wkfwfb`kfqkjdkoz#ajloldzojef#lelq#fufmqjpf#le%qbrvl8sovplmfkvmwjmd+wklvdkGlvdobpiljmjmd`jq`ofpElq#wkfBm`jfmwUjfwmbnufkj`ofpv`k#bp`qzpwboubovf#>Tjmgltpfmilzfgb#pnboobppvnfg?b#jg>!elqfjdm#Boo#qjklt#wkfGjpsobzqfwjqfgkltfufqkjggfm8abwwofppffhjmd`bajmfwtbp#mlwollh#bw`lmgv`wdfw#wkfIbmvbqzkbssfmpwvqmjmdb9klufqLmojmf#Eqfm`k#ob`hjmdwzsj`bof{wqb`wfmfnjfpfufm#jedfmfqbwgf`jgfgbqf#mlw,pfbq`kafojfep.jnbdf9ol`bwfgpwbwj`-oldjm!=`lmufqwujlofmwfmwfqfgejqpw!=`jq`vjwEjmobmg`kfnjpwpkf#tbp23s{8!=bp#pv`kgjujgfg?,psbm=tjoo#afojmf#leb#dqfbwnzpwfqz,jmgf{-eboojmdgvf#wl#qbjotbz`loofdfnlmpwfqgfp`fmwjw#tjwkmv`ofbqIftjpk#sqlwfpwAqjwjpkeoltfqpsqfgj`wqfelqnpavwwlm#tkl#tbpof`wvqfjmpwbmwpvj`jgfdfmfqj`sfqjlgpnbqhfwpPl`jbo#ejpkjmd`lnajmfdqbskj`tjmmfqp?aq#,=?az#wkf#MbwvqboSqjub`z`llhjfplvw`lnfqfploufPtfgjpkaqjfeozSfqpjbmpl#nv`k@fmwvqzgfsj`wp`lovnmpklvpjmdp`qjswpmf{w#wlafbqjmdnbssjmdqfujpfgiRvfqz+.tjgwk9wjwof!=wllowjsPf`wjlmgfpjdmpWvqhjpkzlvmdfq-nbw`k+~*+*8\t\tavqmjmdlsfqbwfgfdqffpplvq`f>Qj`kbqg`olpfozsobpwj`fmwqjfp?,wq=\x0e\t`lolq9 vo#jg>!slppfppqloojmdskzpj`pebjojmdf{f`vwf`lmwfpwojmh#wlGfebvow?aq#,=\t9#wqvf/`kbqwfqwlvqjpn`obppj`sql`ffgf{sobjm?,k2=\x0e\tlmojmf-<{no#ufkfosjmdgjbnlmgvpf#wkfbjqojmffmg#..=*-bwwq+qfbgfqpklpwjmd eeeeeeqfbojyfUjm`fmwpjdmbop#pq`>!,Sqlgv`wgfpsjwfgjufqpfwfoojmdSvaoj`#kfog#jmIlpfsk#wkfbwqfbeef`wp?pwzof=b#obqdfglfpm$wobwfq/#Fofnfmwebuj`lm`qfbwlqKvmdbqzBjqslqwpff#wkfpl#wkbwNj`kbfoPzpwfnpSqldqbnp/#bmg##tjgwk>f%rvlw8wqbgjmdofew!=\tsfqplmpDlogfm#Beebjqpdqbnnbqelqnjmdgfpwqlzjgfb#le`bpf#lelogfpw#wkjp#jp-pq`#>#`bqwllmqfdjpwq@lnnlmpNvpojnpTkbw#jpjm#nbmznbqhjmdqfufbopJmgffg/frvbooz,pklt\\blvwgllqfp`bsf+Bvpwqjbdfmfwj`pzpwfn/Jm#wkf#pjwwjmdKf#boplJpobmgpB`bgfnz\t\n\n?"..Gbmjfo#ajmgjmdaol`h!=jnslpfgvwjojyfBaqbkbn+f{`fswxtjgwk9svwwjmd*-kwno+\x7f\x7f#X^8\tGBWBX#)hjw`kfmnlvmwfgb`wvbo#gjbof`wnbjmoz#\\aobmh$jmpwboof{sfqwpje+wzsfJw#bopl%`lsz8#!=Wfqnpalqm#jmLswjlmpfbpwfqmwbohjmd`lm`fqmdbjmfg#lmdljmdivpwjez`qjwj`peb`wlqzjwp#ltmbppbvowjmujwfgobpwjmdkjp#ltmkqfe>!,!#qfo>!gfufols`lm`fqwgjbdqbngloobqp`ovpwfqsksbo`lklo*8~*+*8vpjmd#b=?psbm=ufppfopqfujuboBggqfppbnbwfvqbmgqljgboofdfgjoomfpptbohjmd`fmwfqprvbojeznbw`kfpvmjejfgf{wjm`wGfefmpfgjfg#jm\t\n?"..#`vpwlnpojmhjmdOjwwof#Allh#lefufmjmdnjm-iptfbqjmdBoo#Qjd8\t~*+*8qbjpjmd#Bopl/#`qv`jbobalvw!=gf`obqf..=\t?p`ejqfel{bp#nv`kbssojfpjmgf{/#p/#avw#wzsf#>#\t\x0e\t?"..wltbqgpQf`lqgpSqjubwfElqfjdmSqfnjfq`klj`fpUjqwvboqfwvqmp@lnnfmwSltfqfgjmojmf8slufqwz`kbnafqOjujmd#ulovnfpBmwklmzoldjm!#QfobwfgF`lmlnzqfb`kfp`vwwjmddqbujwzojef#jm@kbswfq.pkbgltMlwbaof?,wg=\x0e\t#qfwvqmpwbgjvntjgdfwpubqzjmdwqbufopkfog#aztkl#bqftlqh#jmeb`vowzbmdvobqtkl#kbgbjqslqwwltm#le\t\tPlnf#$`oj`h$`kbqdfphfztlqgjw#tjoo`jwz#le+wkjp*8Bmgqft#vmjrvf#`kf`hfglq#nlqf033s{8#qfwvqm8qpjlm>!sovdjmptjwkjm#kfqpfoePwbwjlmEfgfqboufmwvqfsvaojpkpfmw#wlwfmpjlmb`wqfpp`lnf#wlejmdfqpGvhf#lesflsof/f{soljwtkbw#jpkbqnlmzb#nbilq!9!kwwsjm#kjp#nfmv!=\tnlmwkozleej`fq`lvm`jodbjmjmdfufm#jmPvnnbqzgbwf#leolzbowzejwmfppbmg#tbpfnsfqlqpvsqfnfPf`lmg#kfbqjmdQvppjbmolmdfpwBoafqwbobwfqbopfw#le#pnboo!=-bssfmggl#tjwkefgfqboabmh#leafmfbwkGfpsjwf@bsjwbodqlvmgp*/#bmg#sfq`fmwjw#eqln`olpjmd`lmwbjmJmpwfbgejewffmbp#tfoo-zbkll-qfpslmgejdkwfqlap`vqfqfeof`wlqdbmj`>#Nbwk-fgjwjmdlmojmf#sbggjmdb#tkloflmfqqlqzfbq#lefmg#le#abqqjfqtkfm#jwkfbgfq#klnf#leqfpvnfgqfmbnfgpwqlmd=kfbwjmdqfwbjmp`olvgeqtbz#le#Nbq`k#2hmltjmdjm#sbqwAfwtffmofpplmp`olpfpwujqwvboojmhp!=`qlppfgFMG#..=ebnlvp#btbqgfgOj`fmpfKfbowk#ebjqoz#tfbowkznjmjnboBeqj`bm`lnsfwfobafo!=pjmdjmdebqnfqpAqbpjo*gjp`vppqfsob`fDqfdlqzelmw#`lsvqpvfgbssfbqpnbhf#vsqlvmgfgalwk#leaol`hfgpbt#wkfleej`fp`lolvqpje+gl`vtkfm#kffmelq`fsvpk+evBvdvpw#VWE.;!=Ebmwbpzjm#nlpwjmivqfgVpvboozebqnjmd`olpvqflaif`w#gfefm`fvpf#le#Nfgj`bo?algz=\tfujgfmwaf#vpfghfz@lgfpj{wffmJpobnj` 333333fmwjqf#tjgfoz#b`wjuf#+wzsflelmf#`bm`lolq#>psfbhfqf{wfmgpSkzpj`pwfqqbjm?walgz=evmfqboujftjmdnjggof#`qj`hfwsqlskfwpkjewfggl`wlqpQvppfoo#wbqdfw`lnsb`wbodfaqbpl`jbo.avoh#lenbm#bmg?,wg=\t#kf#ofew*-ubo+*ebopf*8oldj`boabmhjmdklnf#wlmbnjmd#Bqjylmb`qfgjwp*8\t~*8\telvmgfqjm#wvqm@loojmpafelqf#Avw#wkf`kbqdfgWjwof!=@bswbjmpsfoofgdlggfppWbd#..=Bggjmd9avw#tbpQf`fmw#sbwjfmwab`h#jm>ebopf%Ojm`lomtf#hmlt@lvmwfqIvgbjpnp`qjsw#bowfqfg$^*8\t##kbp#wkfvm`ofbqFufmw$/alwk#jmmlw#boo\t\t?"..#sob`jmdkbqg#wl#`fmwfqplqw#le`ojfmwppwqffwpAfqmbqgbppfqwpwfmg#wlebmwbpzgltm#jmkbqalvqEqffglniftfoqz,balvw--pfbq`kofdfmgpjp#nbgfnlgfqm#lmoz#lmlmoz#wljnbdf!#ojmfbq#sbjmwfqbmg#mlwqbqfoz#b`qlmzngfojufqpklqwfq33%bns8bp#nbmztjgwk>!,)#?"X@wjwof#>le#wkf#oltfpw#sj`hfg#fp`bsfgvpfp#lesflsofp#Svaoj`Nbwwkftwb`wj`pgbnbdfgtbz#elqobtp#lefbpz#wl#tjmgltpwqlmd##pjnsof~`bw`k+pfufmwkjmelal{tfmw#wlsbjmwfg`jwjyfmJ#glm$wqfwqfbw-#Plnf#tt-!*8\talnajmdnbjowl9nbgf#jm-#Nbmz#`bqqjfp\x7f\x7fx~8tjtlqh#lepzmlmzngfefbwpebulqfglswj`bosbdfWqbvmofpp#pfmgjmdofew!=?`lnP`lqBoo#wkfiRvfqz-wlvqjpw@obppj`ebopf!#Tjokfonpvavqapdfmvjmfajpklsp-psojw+dolabo#elooltpalgz#lemlnjmbo@lmwb`wpf`vobqofew#wl`kjfeoz.kjggfm.abmmfq?,oj=\t\t-#Tkfm#jm#alwkgjpnjppF{solqfbotbzp#ujb#wkfpsb/]lotfoebqfqvojmd#bqqbmdf`bswbjmkjp#plmqvof#lekf#wllhjwpfoe/>3%bns8+`boofgpbnsofpwl#nbhf`ln,sbdNbqwjm#Hfmmfgzb``fswpevoo#lekbmgofgAfpjgfp,,..=?,baof#wlwbqdfwpfppfm`fkjn#wl#jwp#az#`lnnlm-njmfqbowl#wbhftbzp#wlp-lqd,obgujpfgsfmbowzpjnsof9je#wkfzOfwwfqpb#pklqwKfqafqwpwqjhfp#dqlvsp-ofmdwkeojdkwplufqobspoltoz#ofppfq#pl`jbo#?,s=\t\n\njw#jmwlqbmhfg#qbwf#levo=\x0e\t##bwwfnswsbjq#lenbhf#jwHlmwbhwBmwlmjlkbujmd#qbwjmdp#b`wjufpwqfbnpwqbssfg!*-`pp+klpwjofofbg#wlojwwof#dqlvsp/Sj`wvqf..=\x0e\t\x0e\t#qltp>!#laif`wjmufqpf?ellwfq@vpwlnU=?_,p`qploujmd@kbnafqpobufqztlvmgfgtkfqfbp">#$vmgelq#boosbqwoz#.qjdkw9Bqbajbmab`hfg#`fmwvqzvmjw#lenlajof.Fvqlsf/jp#klnfqjph#legfpjqfg@ojmwlm`lpw#lebdf#le#af`lnf#mlmf#les%rvlw8Njggof#fbg$*X3@qjwj`ppwvgjlp=%`lsz8dqlvs!=bppfnaonbhjmd#sqfppfgtjgdfw-sp9!#<#qfavjowaz#plnfElqnfq#fgjwlqpgfobzfg@bmlmj`kbg#wkfsvpkjmd`obpp>!avw#bqfsbqwjboAbazolmalwwln#`bqqjfq@lnnbmgjwp#vpfBp#tjwk`lvqpfpb#wkjqggfmlwfpbopl#jmKlvpwlm13s{8!=b``vpfgglvaof#dlbo#leEbnlvp#*-ajmg+sqjfpwp#Lmojmfjm#Ivozpw#(#!d`lmpvowgf`jnbokfosevoqfujufgjp#ufqzq$($jswolpjmd#efnbofpjp#boplpwqjmdpgbzp#lebqqjuboevwvqf#?laif`welq`jmdPwqjmd+!#,=\t\n\nkfqf#jpfm`lgfg-##Wkf#aboollmglmf#az,`lnnlmad`lolqobt#le#Jmgjbmbbuljgfgavw#wkf1s{#0s{irvfqz-bewfq#bsloj`z-nfm#bmgellwfq.>#wqvf8elq#vpfp`qffm-Jmgjbm#jnbdf#>ebnjoz/kwws9,,#%maps8gqjufqpfwfqmbopbnf#bpmlwj`fgujftfqp~*+*8\t#jp#nlqfpfbplmpelqnfq#wkf#mftjp#ivpw`lmpfmw#Pfbq`ktbp#wkftkz#wkfpkjssfgaq=?aq=tjgwk9#kfjdkw>nbgf#le`vjpjmfjp#wkbwb#ufqz#Bgnjqbo#ej{fg8mlqnbo#NjppjlmSqfpp/#lmwbqjl`kbqpfwwqz#wl#jmubgfg>!wqvf!psb`jmdjp#nlpwb#nlqf#wlwboozeboo#le~*8\x0e\t##jnnfmpfwjnf#jmpfw#lvwpbwjpezwl#ejmggltm#wlolw#le#Sobzfqpjm#Ivmfrvbmwvnmlw#wkfwjnf#wlgjpwbmwEjmmjpkpq`#>#+pjmdof#kfos#leDfqnbm#obt#bmgobafofgelqfpwp`llhjmdpsb`f!=kfbgfq.tfoo#bpPwbmofzaqjgdfp,dolabo@qlbwjb#Balvw#X3^8\t##jw/#bmgdqlvsfgafjmd#b*xwkqltkf#nbgfojdkwfqfwkj`boEEEEEE!alwwln!ojhf#b#fnsolzpojuf#jmbp#pffmsqjmwfqnlpw#leva.ojmhqfif`wpbmg#vpfjnbdf!=pv``ffgeffgjmdMv`ofbqjmelqnbwl#kfosTlnfm$pMfjwkfqNf{j`bmsqlwfjm?wbaof#az#nbmzkfbowkzobtpvjwgfujpfg-svpk+xpfoofqppjnsoz#Wkqlvdk-`llhjf#Jnbdf+logfq!=vp-ip!=#Pjm`f#vmjufqpobqdfq#lsfm#wl"..#fmgojfp#jm$^*8\x0e\t##nbqhfwtkl#jp#+!GLN@lnbmbdfglmf#elqwzsfle#Hjmdglnsqlejwpsqlslpfwl#pklt`fmwfq8nbgf#jwgqfppfgtfqf#jmnj{wvqfsqf`jpfbqjpjmdpq`#>#$nbhf#b#pf`vqfgAbswjpwulwjmd#\t\n\nubq#Nbq`k#1dqft#vs@ojnbwf-qfnlufphjoofgtbz#wkf?,kfbg=eb`f#leb`wjmd#qjdkw!=wl#tlqhqfgv`fpkbp#kbgfqf`wfgpklt+*8b`wjlm>allh#lebm#bqfb>>#!kww?kfbgfq\t?kwno=`lmelqneb`jmd#`llhjf-qfoz#lmklpwfg#-`vpwlnkf#tfmwavw#elqpsqfbg#Ebnjoz#b#nfbmplvw#wkfelqvnp-ellwbdf!=Nlajo@ofnfmwp!#jg>!bp#kjdkjmwfmpf..=?"..efnbof#jp#pffmjnsojfgpfw#wkfb#pwbwfbmg#kjpebpwfpwafpjgfpavwwlm\\alvmgfg!=?jnd#Jmelal{fufmwp/b#zlvmdbmg#bqfMbwjuf#`kfbsfqWjnflvwbmg#kbpfmdjmfptlm#wkf+nlpwozqjdkw9#ejmg#b#.alwwlnSqjm`f#bqfb#lenlqf#lepfbq`k\\mbwvqf/ofdboozsfqjlg/obmg#lelq#tjwkjmgv`fgsqlujmdnjppjofol`boozBdbjmpwwkf#tbzh%rvlw8s{8!=\x0e\tsvpkfg#babmglmmvnfqbo@fqwbjmJm#wkjpnlqf#jmlq#plnfmbnf#jpbmg/#jm`qltmfgJPAM#3.`qfbwfpL`wlafqnbz#mlw`fmwfq#obwf#jmGfefm`ffmb`wfgtjpk#wlaqlbgoz`llojmdlmolbg>jw-#Wkfqf`lufqNfnafqpkfjdkw#bppvnfp?kwno=\tsflsof-jm#lmf#>tjmgltellwfq\\b#dllg#qfhobnblwkfqp/wl#wkjp\\`llhjfsbmfo!=Olmglm/gfejmfp`qvpkfgabswjpn`lbpwbopwbwvp#wjwof!#nluf#wlolpw#jmafwwfq#jnsojfpqjuboqzpfqufqp#PzpwfnSfqkbspfp#bmg#`lmwfmgeoltjmdobpwfg#qjpf#jmDfmfpjpujft#leqjpjmd#pffn#wlavw#jm#ab`hjmdkf#tjoodjufm#bdjujmd#`jwjfp-eolt#le#Obwfq#boo#avwKjdktbzlmoz#azpjdm#lekf#glfpgjeefqpabwwfqz%bns8obpjmdofpwkqfbwpjmwfdfqwbhf#lmqfevpfg`boofg#>VP%bnsPff#wkfmbwjufpaz#wkjppzpwfn-kfbg#le9klufq/ofpajbmpvqmbnfbmg#boo`lnnlm,kfbgfq\\\\sbqbnpKbqubqg,sj{fo-qfnlubopl#olmdqlof#leiljmwozphzp`qbVmj`lgfaq#,=\x0e\tBwobmwbmv`ofvp@lvmwz/svqfoz#`lvmw!=fbpjoz#avjog#blm`oj`hb#djufmsljmwfqk%rvlw8fufmwp#fopf#x\tgjwjlmpmlt#wkf/#tjwk#nbm#tkllqd,Tfalmf#bmg`buboqzKf#gjfgpfbwwof33/333#xtjmgltkbuf#wlje+tjmgbmg#jwpplofoz#n%rvlw8qfmftfgGfwqljwbnlmdpwfjwkfq#wkfn#jmPfmbwlqVp?,b=?Hjmd#leEqbm`jp.sqlgv`kf#vpfgbqw#bmgkjn#bmgvpfg#azp`lqjmdbw#klnfwl#kbufqfobwfpjajojwzeb`wjlmAveebolojmh!=?tkbw#kfeqff#wl@jwz#le`lnf#jmpf`wlqp`lvmwfglmf#gbzmfqulvpprvbqf#~8je+dljm#tkbwjnd!#bojp#lmozpfbq`k,wvfpgbzollpfozPlolnlmpf{vbo#.#?b#kqnfgjvn!GL#MLW#Eqbm`f/tjwk#b#tbq#bmgpf`lmg#wbhf#b#=\x0e\t\x0e\t\x0e\tnbqhfw-kjdktbzglmf#jm`wjujwz!obpw!=laojdfgqjpf#wl!vmgfejnbgf#wl#Fbqoz#sqbjpfgjm#jwp#elq#kjpbwkofwfIvsjwfqZbkll"#wfqnfg#pl#nbmzqfbooz#p-#Wkf#b#tlnbmgjqf`w#qjdkw!#aj`z`ofb`jmd>!gbz#bmgpwbwjmdQbwkfq/kjdkfq#Leej`f#bqf#mltwjnfp/#tkfm#b#sbz#elqlm#wkjp.ojmh!=8alqgfqbqlvmg#bmmvbo#wkf#Mftsvw#wkf-`ln!#wbhjm#wlb#aqjfe+jm#wkfdqlvsp-8#tjgwkfmyznfppjnsof#jm#obwfxqfwvqmwkfqbszb#sljmwabmmjmdjmhp!=\t+*8!#qfb#sob`f_v330@bbalvw#bwq=\x0e\t\n\n``lvmw#djufp#b?P@QJSWQbjotbzwkfnfp,wlloal{AzJg+!{kvnbmp/tbw`kfpjm#plnf#je#+tj`lnjmd#elqnbwp#Vmgfq#avw#kbpkbmgfg#nbgf#azwkbm#jmefbq#legfmlwfg,jeqbnfofew#jmulowbdfjm#fb`kb%rvlw8abpf#leJm#nbmzvmgfqdlqfdjnfpb`wjlm#?,s=\x0e\t?vpwlnUb8%dw8?,jnslqwplq#wkbwnlpwoz#%bns8qf#pjyf>!?,b=?,kb#`obppsbppjufKlpw#>#TkfwkfqefqwjofUbqjlvp>X^8+ev`bnfqbp,=?,wg=b`wp#bpJm#plnf=\x0e\t\x0e\t?"lqdbmjp#?aq#,=Afjijmd`bwbo/Lgfvwp`kfvqlsfvfvphbqbdbfjodfpufmphbfpsb/]bnfmpbifvpvbqjlwqbabiln/E{j`ls/Mdjmbpjfnsqfpjpwfnbl`wvaqfgvqbmwfb/]bgjqfnsqfpbnlnfmwlmvfpwqlsqjnfqbwqbu/Epdqb`jbpmvfpwqbsql`fplfpwbglp`bojgbgsfqplmbm/Vnfqlb`vfqgln/Vpj`bnjfnaqllefqwbpbodvmlpsb/Apfpfifnsolgfqf`klbgfn/Mpsqjubglbdqfdbqfmob`fpslpjaofklwfofppfujoobsqjnfql/Vowjnlfufmwlpbq`kjul`vowvqbnvifqfpfmwqbgbbmvm`jlfnabqdlnfq`bgldqbmgfpfpwvgjlnfilqfpefaqfqlgjpf/]lwvqjpnl`/_gjdlslqwbgbfpsb`jlebnjojbbmwlmjlsfqnjwfdvbqgbqbodvmbpsqf`jlpbodvjfmpfmwjglujpjwbpw/Awvol`lml`fqpfdvmgl`lmpfileqbm`jbnjmvwlppfdvmgbwfmfnlpfef`wlpn/Mobdbpfpj/_mqfujpwbdqbmbgb`lnsqbqjmdqfpldbq`/Abb``j/_mf`vbglqrvjfmfpjm`ovplgfafq/Mnbwfqjbklnaqfpnvfpwqbslgq/Abnb/]bmb/Vowjnbfpwbnlplej`jbowbnajfmmjmd/Vmpbovglpslgfnlpnfilqbqslpjwjlmavpjmfppklnfsbdfpf`vqjwzobmdvbdfpwbmgbqg`bnsbjdmefbwvqfp`bwfdlqzf{wfqmbo`kjogqfmqfpfqufgqfpfbq`kf{`kbmdfebulqjwfwfnsobwfnjojwbqzjmgvpwqzpfquj`fpnbwfqjbosqlgv`wpy.jmgf{9`lnnfmwpplewtbqf`lnsofwf`bofmgbqsobwelqnbqwj`ofpqfrvjqfgnlufnfmwrvfpwjlmavjogjmdslojwj`pslppjaofqfojdjlmskzpj`boeffgab`hqfdjpwfqsj`wvqfpgjpbaofgsqlwl`lobvgjfm`fpfwwjmdpb`wjujwzfofnfmwpofbqmjmdbmzwkjmdbapwqb`wsqldqfpplufqujftnbdbyjmff`lmlnj`wqbjmjmdsqfppvqfubqjlvp#?pwqlmd=sqlsfqwzpklssjmdwldfwkfqbgubm`fgafkbujlqgltmolbgefbwvqfgellwaboopfof`wfgObmdvbdfgjpwbm`fqfnfnafqwqb`hjmdsbpptlqgnlgjejfgpwvgfmwpgjqf`wozejdkwjmdmlqwkfqmgbwbabpfefpwjuboaqfbhjmdol`bwjlmjmwfqmfwgqlsgltmsqb`wj`ffujgfm`fevm`wjlmnbqqjbdfqfpslmpfsqlaofnpmfdbwjufsqldqbnpbmbozpjpqfofbpfgabmmfq!=svq`kbpfsloj`jfpqfdjlmbo`qfbwjufbqdvnfmwallhnbqhqfefqqfq`kfnj`bogjujpjlm`booab`hpfsbqbwfsqlif`wp`lmeoj`wkbqgtbqfjmwfqfpwgfojufqznlvmwbjmlawbjmfg>#ebopf8elq+ubq#b``fswfg`bsb`jwz`lnsvwfqjgfmwjwzbjq`qbewfnsolzfgsqlslpfgglnfpwj`jm`ovgfpsqlujgfgklpsjwboufqwj`bo`loobspfbssqlb`ksbqwmfqpoldl!=?bgbvdkwfqbvwklq!#`vowvqboebnjojfp,jnbdfp,bppfnaozsltfqevowfb`kjmdejmjpkfggjpwqj`w`qjwj`bo`dj.ajm,svqslpfpqfrvjqfpfof`wjlmaf`lnjmdsqlujgfpb`bgfnj`f{fq`jpfb`wvbooznfgj`jmf`lmpwbmwb``jgfmwNbdbyjmfgl`vnfmwpwbqwjmdalwwln!=lapfqufg9#%rvlw8f{wfmgfgsqfujlvpPlewtbqf`vpwlnfqgf`jpjlmpwqfmdwkgfwbjofgpojdkwozsobmmjmdwf{wbqfb`vqqfm`zfufqzlmfpwqbjdkwwqbmpefqslpjwjufsqlgv`fgkfqjwbdfpkjssjmdbaplovwfqf`fjufgqfofubmwavwwlm!#ujlofm`fbmztkfqfafmfejwpobvm`kfgqf`fmwozboojbm`felooltfgnvowjsofavoofwjmjm`ovgfgl``vqqfgjmwfqmbo\'+wkjp*-qfsvaoj`=?wq=?wg`lmdqfppqf`lqgfgvowjnbwfplovwjlm?vo#jg>!gjp`lufqKlnf?,b=tfapjwfpmfwtlqhpbowklvdkfmwjqfoznfnlqjbonfppbdfp`lmwjmvfb`wjuf!=plnftkbwuj`wlqjbTfpwfqm##wjwof>!Ol`bwjlm`lmwqb`wujpjwlqpGltmolbgtjwklvw#qjdkw!=\tnfbpvqfptjgwk#>#ubqjbaofjmuloufgujqdjmjbmlqnboozkbssfmfgb``lvmwppwbmgjmdmbwjlmboQfdjpwfqsqfsbqfg`lmwqlopb``vqbwfajqwkgbzpwqbwfdzleej`jbodqbskj`p`qjnjmboslppjaoz`lmpvnfqSfqplmbopsfbhjmdubojgbwfb`kjfufg-isd!#,=nb`kjmfp?,k1=\t##hfztlqgpeqjfmgozaqlwkfqp`lnajmfglqjdjmbo`lnslpfgf{sf`wfgbgfrvbwfsbhjpwbmeloolt!#ubovbaof?,obafo=qfobwjufaqjmdjmdjm`qfbpfdlufqmlqsovdjmp,Ojpw#le#Kfbgfq!=!#mbnf>!#+%rvlw8dqbgvbwf?,kfbg=\t`lnnfq`fnbobzpjbgjqf`wlqnbjmwbjm8kfjdkw9p`kfgvof`kbmdjmdab`h#wl#`bwkloj`sbwwfqmp`lolq9# dqfbwfpwpvssojfpqfojbaof?,vo=\t\n\n?pfof`w#`jwjyfmp`olwkjmdtbw`kjmd?oj#jg>!psf`jej``bqqzjmdpfmwfm`f?`fmwfq=`lmwqbpwwkjmhjmd`bw`k+f*plvwkfqmNj`kbfo#nfq`kbmw`bqlvpfosbggjmd9jmwfqjlq-psojw+!ojybwjlmL`wlafq#*xqfwvqmjnsqlufg..%dw8\t\t`lufqbdf`kbjqnbm-smd!#,=pvaif`wpQj`kbqg#tkbwfufqsqlabaozqf`lufqzabpfabooivgdnfmw`lmmf`w--`pp!#,=#tfapjwfqfslqwfggfebvow!,=?,b=\x0e\tfof`wqj`p`lwobmg`qfbwjlmrvbmwjwz-#JPAM#3gjg#mlw#jmpwbm`f.pfbq`k.!#obmd>!psfbhfqp@lnsvwfq`lmwbjmpbq`kjufpnjmjpwfqqfb`wjlmgjp`lvmwJwbojbml`qjwfqjbpwqlmdoz9#$kwws9$p`qjsw$`lufqjmdleefqjmdbssfbqfgAqjwjpk#jgfmwjezEb`fallhmvnfqlvpufkj`ofp`lm`fqmpBnfqj`bmkbmgojmdgju#jg>!Tjoojbn#sqlujgfq\\`lmwfmwb``vqb`zpf`wjlm#bmgfqplmeof{jaof@bwfdlqzobtqfm`f?p`qjsw=obzlvw>!bssqlufg#nb{jnvnkfbgfq!=?,wbaof=Pfquj`fpkbnjowlm`vqqfmw#`bmbgjbm`kbmmfop,wkfnfp,,bqwj`oflswjlmboslqwvdboubovf>!!jmwfqubotjqfofppfmwjwofgbdfm`jfpPfbq`k!#nfbpvqfgwklvpbmgpsfmgjmd%kfoojs8mft#Gbwf!#pjyf>!sbdfMbnfnjggof!#!#,=?,b=kjggfm!=pfrvfm`fsfqplmbolufqeoltlsjmjlmpjoojmljpojmhp!=\t\n?wjwof=ufqpjlmppbwvqgbzwfqnjmbojwfnsqlsfmdjmffqpf`wjlmpgfpjdmfqsqlslpbo>!ebopf!Fpsb/]loqfofbpfppvanjw!#fq%rvlw8bggjwjlmpznswlnplqjfmwfgqfplvq`fqjdkw!=?sofbpvqfpwbwjlmpkjpwlqz-ofbujmd##alqgfq>`lmwfmwp`fmwfq!=-\t\tPlnf#gjqf`wfgpvjwbaofavodbqjb-pklt+*8gfpjdmfgDfmfqbo#`lm`fswpF{bnsofptjoojbnpLqjdjmbo!=?psbm=pfbq`k!=lsfqbwlqqfrvfpwpb#%rvlw8booltjmdGl`vnfmwqfujpjlm-#\t\tWkf#zlvqpfoe@lmwb`w#nj`kjdbmFmdojpk#`lovnajbsqjlqjwzsqjmwjmdgqjmhjmdeb`jojwzqfwvqmfg@lmwfmw#leej`fqpQvppjbm#dfmfqbwf.;;6:.2!jmgj`bwfebnjojbq#rvbojwznbqdjm93#`lmwfmwujftslqw`lmwb`wp.wjwof!=slqwbaof-ofmdwk#fojdjaofjmuloufpbwobmwj`lmolbg>!gfebvow-pvssojfgsbznfmwpdolppbqz\t\tBewfq#dvjgbm`f?,wg=?wgfm`lgjmdnjggof!=`bnf#wl#gjpsobzpp`lwwjpkilmbwkbmnbilqjwztjgdfwp-`ojmj`bowkbjobmgwfb`kfqp?kfbg=\t\nbeef`wfgpvsslqwpsljmwfq8wlPwqjmd?,pnboo=lhobklnbtjoo#af#jmufpwlq3!#bow>!klojgbzpQfplvq`foj`fmpfg#+tkj`k#-#Bewfq#`lmpjgfqujpjwjmdf{solqfqsqjnbqz#pfbq`k!#bmgqljg!rvj`hoz#nffwjmdpfpwjnbwf8qfwvqm#8`lolq9 #kfjdkw>bssqlubo/#%rvlw8#`kf`hfg-njm-ip!nbdmfwj`=?,b=?,kelqf`bpw-#Tkjof#wkvqpgbzgufqwjpf%fb`vwf8kbp@obppfubovbwflqgfqjmdf{jpwjmdsbwjfmwp#Lmojmf#`lolqbglLswjlmp!`bnsafoo?"..#fmg?,psbm=??aq#,=\x0e\t\\slsvsp\x7fp`jfm`fp/%rvlw8#rvbojwz#Tjmgltp#bppjdmfgkfjdkw9#?a#`obppof%rvlw8#ubovf>!#@lnsbmzf{bnsofp?jeqbnf#afojfufpsqfpfmwpnbqpkboosbqw#le#sqlsfqoz*-\t\tWkf#wb{lmlnznv`k#le#?,psbm=\t!#gbwb.pqwvdv/Fpp`qlooWl#sqlif`w?kfbg=\x0e\tbwwlqmfzfnskbpjppslmplqpebm`zal{tlqog$p#tjogojef`kf`hfg>pfppjlmpsqldqbnns{8elmw.#Sqlif`wilvqmbopafojfufgub`bwjlmwklnsplmojdkwjmdbmg#wkf#psf`jbo#alqgfq>3`kf`hjmd?,walgz=?avwwlm#@lnsofwf`ofbqej{\t?kfbg=\tbqwj`of#?pf`wjlmejmgjmdpqlof#jm#slsvobq##L`wlafqtfapjwf#f{slpvqfvpfg#wl##`kbmdfplsfqbwfg`oj`hjmdfmwfqjmd`lnnbmgpjmelqnfg#mvnafqp##?,gju=`qfbwjmdlmPvanjwnbqzobmg`loofdfpbmbozwj`ojpwjmdp`lmwb`w-olddfgJmbgujplqzpjaojmdp`lmwfmw!p%rvlw8*p-#Wkjp#sb`hbdfp`kf`hal{pvddfpwpsqfdmbmwwlnlqqltpsb`jmd>j`lm-smdibsbmfpf`lgfabpfavwwlm!=dbnaojmdpv`k#bp#/#tkjof#?,psbm=#njpplvqjpslqwjmdwls92s{#-?,psbm=wfmpjlmptjgwk>!1obyzolbgmlufnafqvpfg#jm#kfjdkw>!`qjsw!=\t%maps8?,?wq=?wg#kfjdkw91,sqlgv`w`lvmwqz#jm`ovgf#ellwfq!#%ow8"..#wjwof!=?,irvfqz-?,elqn=\t+\vBl\bQ\x7f*+\vUm\x05Gx*kqubwphjjwbojbmlqln/Nm(ow/Pqh/Kf4K4]4C5dwbnaj/Emmlwj`jbpnfmpbifpsfqplmbpgfqf`klpmb`jlmbopfquj`jl`lmwb`wlvpvbqjlpsqldqbnbdlajfqmlfnsqfpbpbmvm`jlpubofm`jb`lolnajbgfpsv/Epgfslqwfpsqlzf`wlsqlgv`wls/Vaoj`lmlplwqlpkjpwlqjbsqfpfmwfnjoolmfpnfgjbmwfsqfdvmwbbmwfqjlqqf`vqplpsqlaofnbpbmwjbdlmvfpwqlplsjmj/_mjnsqjnjqnjfmwqbpbn/Eqj`bufmgfglqpl`jfgbgqfpsf`wlqfbojybqqfdjpwqlsbobaqbpjmwfq/Epfmwlm`fpfpsf`jbonjfnaqlpqfbojgbg`/_qglabybqbdlybs/Mdjmbppl`jbofpaolrvfbqdfpwj/_mborvjofqpjpwfnbp`jfm`jbp`lnsofwlufqpj/_m`lnsofwbfpwvgjlps/Vaoj`blaifwjulboj`bmwfavp`bglq`bmwjgbgfmwqbgbpb``jlmfpbq`kjulppvsfqjlqnbzlq/Abbofnbmjbevm`j/_m/Vowjnlpkb`jfmglbrvfoolpfgj`j/_mefqmbmglbnajfmwfeb`fallhmvfpwqbp`ojfmwfpsql`fplpabpwbmwfsqfpfmwbqfslqwbq`lmdqfplsvaoj`bq`lnfq`jl`lmwqbwli/_ufmfpgjpwqjwlw/E`mj`b`lmivmwlfmfqd/Abwqbabibqbpwvqjbpqf`jfmwfvwjojybqalofw/Ampboubglq`lqqf`wbwqbabilpsqjnfqlpmfdl`jlpojafqwbggfwboofpsbmwboobsq/_{jnlbonfq/Abbmjnbofprvj/Emfp`lqby/_mpf``j/_mavp`bmglls`jlmfpf{wfqjlq`lm`fswlwlgbu/Abdbofq/Abfp`qjajqnfgj`jmboj`fm`jb`lmpvowbbpsf`wlp`q/Awj`bg/_obqfpivpwj`jbgfafq/Mmsfq/Alglmf`fpjwbnbmwfmfqsfrvf/]lqf`jajgbwqjavmbowfmfqjef`bm`j/_m`bmbqjbpgfp`bqdbgjufqplpnboolq`bqfrvjfqfw/E`mj`lgfafq/Abujujfmgbejmbmybpbgfobmwfevm`jlmb`lmpfilpgje/A`jo`jvgbgfpbmwjdvbpbubmybgbw/Eqnjmlvmjgbgfpp/Mm`kfy`bnsb/]bplewlmj`qfujpwbp`lmwjfmfpf`wlqfpnlnfmwlpeb`vowbg`q/Egjwlgjufqpbppvsvfpwleb`wlqfppfdvmglpsfrvf/]b<_!?,pfof`w=Bvpwqbojb!#`obpp>!pjwvbwjlmbvwklqjwzelooltjmdsqjnbqjozlsfqbwjlm`kboofmdfgfufolsfgbmlmznlvpevm`wjlm#evm`wjlmp`lnsbmjfppwqv`wvqfbdqffnfmw!#wjwof>!slwfmwjbofgv`bwjlmbqdvnfmwppf`lmgbqz`lszqjdkwobmdvbdfpf{`ovpjuf`lmgjwjlm?,elqn=\x0e\tpwbwfnfmwbwwfmwjlmAjldqbskz~#fopf#x\tplovwjlmptkfm#wkf#Bmbozwj`pwfnsobwfpgbmdfqlvppbwfoojwfgl`vnfmwpsvaojpkfqjnslqwbmwsqlwlwzsfjmeovfm`f%qbrvl8?,feef`wjufdfmfqboozwqbmpelqnafbvwjevowqbmpslqwlqdbmjyfgsvaojpkfgsqlnjmfmwvmwjo#wkfwkvnambjoMbwjlmbo#-el`vp+*8lufq#wkf#njdqbwjlmbmmlvm`fgellwfq!=\tf{`fswjlmofpp#wkbmf{sfmpjufelqnbwjlmeqbnftlqhwfqqjwlqzmgj`bwjlm`vqqfmwoz`obppMbnf`qjwj`jpnwqbgjwjlmfopftkfqfBof{bmgfqbssljmwfgnbwfqjbopaqlbg`bpwnfmwjlmfgbeejojbwf?,lswjlm=wqfbwnfmwgjeefqfmw,gfebvow-Sqfpjgfmwlm`oj`h>!ajldqbskzlwkfqtjpfsfqnbmfmwEqbm/KbjpKlooztllgf{sbmpjlmpwbmgbqgp?,pwzof=\tqfgv`wjlmGf`fnafq#sqfefqqfg@bnaqjgdflsslmfmwpAvpjmfpp#`lmevpjlm=\t?wjwof=sqfpfmwfgf{sobjmfgglfp#mlw#tlqogtjgfjmwfqeb`fslpjwjlmpmftpsbsfq?,wbaof=\tnlvmwbjmpojhf#wkf#fppfmwjboejmbm`jbopfof`wjlmb`wjlm>!,babmglmfgFgv`bwjlmsbqpfJmw+pwbajojwzvmbaof#wl?,wjwof=\tqfobwjlmpMlwf#wkbwfeej`jfmwsfqelqnfgwtl#zfbqpPjm`f#wkfwkfqfelqftqbssfq!=bowfqmbwfjm`qfbpfgAbwwof#lesfq`fjufgwqzjmd#wlmf`fppbqzslqwqbzfgfof`wjlmpFojybafwk?,jeqbnf=gjp`lufqzjmpvqbm`fp-ofmdwk8ofdfmgbqzDfldqbskz`bmgjgbwf`lqslqbwfplnfwjnfppfquj`fp-jmkfqjwfg?,pwqlmd=@lnnvmjwzqfojdjlvpol`bwjlmp@lnnjwwffavjogjmdpwkf#tlqogml#olmdfqafdjmmjmdqfefqfm`f`bmmlw#afeqfrvfm`zwzsj`boozjmwl#wkf#qfobwjuf8qf`lqgjmdsqfpjgfmwjmjwjboozwf`kmjrvfwkf#lwkfqjw#`bm#aff{jpwfm`fvmgfqojmfwkjp#wjnfwfofsklmfjwfnp`lsfsqb`wj`fpbgubmwbdf*8qfwvqm#Elq#lwkfqsqlujgjmdgfnl`qb`zalwk#wkf#f{wfmpjufpveefqjmdpvsslqwfg`lnsvwfqp#evm`wjlmsqb`wj`bopbjg#wkbwjw#nbz#afFmdojpk?,eqln#wkf#p`kfgvofggltmolbgp?,obafo=\tpvpsf`wfgnbqdjm9#3psjqjwvbo?,kfbg=\t\tnj`qlplewdqbgvboozgjp`vppfgkf#af`bnff{f`vwjufirvfqz-ipklvpfklog`lmejqnfgsvq`kbpfgojwfqboozgfpwqlzfgvs#wl#wkfubqjbwjlmqfnbjmjmdjw#jp#mlw`fmwvqjfpIbsbmfpf#bnlmd#wkf`lnsofwfgbodlqjwknjmwfqfpwpqfafoojlmvmgfejmfgfm`lvqbdfqfpjybaofjmuloujmdpfmpjwjufvmjufqpbosqlujpjlm+bowklvdkefbwvqjmd`lmgv`wfg*/#tkj`k#`lmwjmvfg.kfbgfq!=Efaqvbqz#mvnfqlvp#lufqeolt9`lnslmfmweqbdnfmwpf{`foofmw`lopsbm>!wf`kmj`bomfbq#wkf#Bgubm`fg#plvq`f#lef{sqfppfgKlmd#Hlmd#Eb`fallhnvowjsof#nf`kbmjpnfofubwjlmleefmpjuf?,elqn=\t\npslmplqfggl`vnfmw-lq#%rvlw8wkfqf#bqfwklpf#tklnlufnfmwpsql`fppfpgjeej`vowpvanjwwfgqf`lnnfmg`lmujm`fgsqlnlwjmd!#tjgwk>!-qfsob`f+`obppj`bo`lbojwjlmkjp#ejqpwgf`jpjlmpbppjpwbmwjmgj`bwfgfulovwjlm.tqbssfq!fmlvdk#wlbolmd#wkfgfojufqfg..=\x0e\t?"..Bnfqj`bm#sqlwf`wfgMlufnafq#?,pwzof=?evqmjwvqfJmwfqmfw##lmaovq>!pvpsfmgfgqf`jsjfmwabpfg#lm#Nlqflufq/balojpkfg`loof`wfgtfqf#nbgffnlwjlmbofnfqdfm`zmbqqbwjufbgul`bwfps{8alqgfq`lnnjwwfggjq>!owq!fnsolzffpqfpfbq`k-#pfof`wfgpv``fpplq`vpwlnfqpgjpsobzfgPfswfnafqbgg@obpp+Eb`fallh#pvddfpwfgbmg#obwfqlsfqbwjmdfobalqbwfPlnfwjnfpJmpwjwvwf`fqwbjmozjmpwboofgelooltfqpIfqvpbofnwkfz#kbuf`lnsvwjmddfmfqbwfgsqlujm`fpdvbqbmwffbqajwqbqzqf`ldmjyftbmwfg#wls{8tjgwk9wkflqz#leafkbujlvqTkjof#wkffpwjnbwfgafdbm#wl#jw#af`bnfnbdmjwvgfnvpw#kbufnlqf#wkbmGjqf`wlqzf{wfmpjlmpf`qfwbqzmbwvqboozl``vqqjmdubqjbaofpdjufm#wkfsobwelqn-?,obafo=?ebjofg#wl`lnslvmgphjmgp#le#pl`jfwjfpbolmdpjgf#..%dw8\t\tplvwktfpwwkf#qjdkwqbgjbwjlmnbz#kbuf#vmfp`bsf+pslhfm#jm!#kqfe>!,sqldqbnnflmoz#wkf#`lnf#eqlngjqf`wlqzavqjfg#jmb#pjnjobqwkfz#tfqf?,elmw=?,Mlqtfdjbmpsf`jejfgsqlgv`jmdsbppfmdfq+mft#Gbwfwfnslqbqzej`wjlmboBewfq#wkffrvbwjlmpgltmolbg-qfdvobqozgfufolsfqbaluf#wkfojmhfg#wlskfmlnfmbsfqjlg#lewllowjs!=pvapwbm`fbvwlnbwj`bpsf`w#leBnlmd#wkf`lmmf`wfgfpwjnbwfpBjq#Elq`fpzpwfn#lelaif`wjufjnnfgjbwfnbhjmd#jwsbjmwjmdp`lmrvfqfgbqf#pwjoosql`fgvqfdqltwk#lekfbgfg#azFvqlsfbm#gjujpjlmpnlof`vofpeqbm`kjpfjmwfmwjlmbwwqb`wfg`kjogkllgbopl#vpfggfgj`bwfgpjmdbslqfgfdqff#leebwkfq#le`lmeoj`wp?,b=?,s=\t`bnf#eqlntfqf#vpfgmlwf#wkbwqf`fjujmdF{f`vwjuffufm#nlqfb``fpp#wl`lnnbmgfqSlojwj`bonvpj`jbmpgfoj`jlvpsqjplmfqpbgufmw#leVWE.;!#,=?"X@GBWBX!=@lmwb`wPlvwkfqm#ad`lolq>!pfqjfp#le-#Jw#tbp#jm#Fvqlsfsfqnjwwfgubojgbwf-bssfbqjmdleej`jboppfqjlvpoz.obmdvbdfjmjwjbwfgf{wfmgjmdolmd.wfqnjmeobwjlmpv`k#wkbwdfw@llhjfnbqhfg#az?,avwwlm=jnsofnfmwavw#jw#jpjm`qfbpfpgltm#wkf#qfrvjqjmdgfsfmgfmw..=\t?"..#jmwfqujftTjwk#wkf#`lsjfp#le`lmpfmpvptbp#avjowUfmfyvfob+elqnfqozwkf#pwbwfsfqplmmfopwqbwfdj`ebulvq#lejmufmwjlmTjhjsfgjb`lmwjmfmwujqwvbooztkj`k#tbpsqjm`jsof@lnsofwf#jgfmwj`bopklt#wkbwsqjnjwjufbtbz#eqlnnlof`vobqsqf`jpfozgjpploufgVmgfq#wkfufqpjlm>!=%maps8?,Jw#jp#wkf#Wkjp#jp#tjoo#kbuflqdbmjpnpplnf#wjnfEqjfgqj`ktbp#ejqpwwkf#lmoz#eb`w#wkbwelqn#jg>!sqf`fgjmdWf`kmj`boskzpj`jpwl``vqp#jmmbujdbwlqpf`wjlm!=psbm#jg>!plvdkw#wlafolt#wkfpvqujujmd~?,pwzof=kjp#gfbwkbp#jm#wkf`bvpfg#azsbqwjboozf{jpwjmd#vpjmd#wkftbp#djufmb#ojpw#leofufop#lemlwjlm#leLeej`jbo#gjpnjppfgp`jfmwjpwqfpfnaofpgvsoj`bwff{solpjufqf`lufqfgboo#lwkfqdboofqjfpxsbggjmd9sflsof#leqfdjlm#lebggqfppfpbppl`jbwfjnd#bow>!jm#nlgfqmpklvog#afnfwklg#leqfslqwjmdwjnfpwbnsmffgfg#wlwkf#Dqfbwqfdbqgjmdpffnfg#wlujftfg#bpjnsb`w#lmjgfb#wkbwwkf#Tlqogkfjdkw#lef{sbmgjmdWkfpf#bqf`vqqfmw!=`bqfevooznbjmwbjmp`kbqdf#le@obppj`bobggqfppfgsqfgj`wfgltmfqpkjs?gju#jg>!qjdkw!=\x0e\tqfpjgfm`fofbuf#wkf`lmwfmw!=bqf#lewfm##~*+*8\x0e\tsqlabaoz#Sqlefpplq.avwwlm!#qfpslmgfgpbzp#wkbwkbg#wl#afsob`fg#jmKvmdbqjbmpwbwvp#lepfqufp#bpVmjufqpbof{f`vwjlmbddqfdbwfelq#tkj`kjmef`wjlmbdqffg#wlkltfufq/#slsvobq!=sob`fg#lm`lmpwqv`wfof`wlqbopznalo#lejm`ovgjmdqfwvqm#wlbq`kjwf`w@kqjpwjbmsqfujlvp#ojujmd#jmfbpjfq#wlsqlefpplq\t%ow8"..#feef`w#lebmbozwj`ptbp#wbhfmtkfqf#wkfwllh#lufqafojfe#jmBeqjhbbmpbp#ebq#bpsqfufmwfgtlqh#tjwkb#psf`jbo?ejfogpfw@kqjpwnbpQfwqjfufg\t\tJm#wkf#ab`h#jmwlmlqwkfbpwnbdbyjmfp=?pwqlmd=`lnnjwwffdlufqmjmddqlvsp#lepwlqfg#jmfpwbaojpkb#dfmfqbojwp#ejqpwwkfjq#ltmslsvobwfgbm#laif`w@bqjaafbmboolt#wkfgjpwqj`wptjp`lmpjmol`bwjlm-8#tjgwk9#jmkbajwfgPl`jbojpwIbmvbqz#2?,ellwfq=pjnjobqoz`klj`f#lewkf#pbnf#psf`jej`#avpjmfpp#Wkf#ejqpw-ofmdwk8#gfpjqf#wlgfbo#tjwkpjm`f#wkfvpfqBdfmw`lm`fjufgjmgf{-sksbp#%rvlw8fmdbdf#jmqf`fmwoz/eft#zfbqptfqf#bopl\t?kfbg=\t?fgjwfg#azbqf#hmltm`jwjfp#jmb``fpphfz`lmgfnmfgbopl#kbufpfquj`fp/ebnjoz#leP`kllo#le`lmufqwfgmbwvqf#le#obmdvbdfnjmjpwfqp?,laif`w=wkfqf#jp#b#slsvobqpfrvfm`fpbgul`bwfgWkfz#tfqfbmz#lwkfqol`bwjlm>fmwfq#wkfnv`k#nlqfqfeof`wfgtbp#mbnfglqjdjmbo#b#wzsj`botkfm#wkfzfmdjmffqp`lvog#mlwqfpjgfmwptfgmfpgbzwkf#wkjqg#sqlgv`wpIbmvbqz#1tkbw#wkfzb#`fqwbjmqfb`wjlmpsql`fpplqbewfq#kjpwkf#obpw#`lmwbjmfg!=?,gju=\t?,b=?,wg=gfsfmg#lmpfbq`k!=\tsjf`fp#le`lnsfwjmdQfefqfm`fwfmmfppfftkj`k#kbp#ufqpjlm>?,psbm=#??,kfbgfq=djufp#wkfkjpwlqjbmubovf>!!=sbggjmd93ujft#wkbwwldfwkfq/wkf#nlpw#tbp#elvmgpvapfw#lebwwb`h#lm`kjogqfm/sljmwp#lesfqplmbo#slpjwjlm9boofdfgoz@ofufobmgtbp#obwfqbmg#bewfqbqf#djufmtbp#pwjoop`qloojmdgfpjdm#lenbhfp#wkfnv`k#ofppBnfqj`bmp-\t\tBewfq#/#avw#wkfNvpfvn#leolvjpjbmb+eqln#wkfnjmmfplwbsbqwj`ofpb#sql`fppGlnjmj`bmulovnf#leqfwvqmjmdgfefmpjuf33s{\x7fqjdknbgf#eqlnnlvpflufq!#pwzof>!pwbwfp#le+tkj`k#jp`lmwjmvfpEqbm`jp`lavjogjmd#tjwklvw#btjwk#plnftkl#tlvogb#elqn#leb#sbqw#leafelqf#jwhmltm#bp##Pfquj`fpol`bwjlm#bmg#lewfmnfbpvqjmdbmg#jw#jpsbsfqab`hubovfp#le\x0e\t?wjwof=>#tjmglt-gfwfqnjmffq%rvlw8#sobzfg#azbmg#fbqoz?,`fmwfq=eqln#wkjpwkf#wkqffsltfq#bmgle#%rvlw8jmmfqKWNO?b#kqfe>!z9jmojmf8@kvq`k#lewkf#fufmwufqz#kjdkleej`jbo#.kfjdkw9#`lmwfmw>!,`dj.ajm,wl#`qfbwfbeqjhbbmpfpsfqbmwleqbm/Kbjpobwujf)Mvojfwvuj)_(`f)Mwjmb(af)Mwjmb\fUh\fT{\fTN\n{I\np@\x04Fr\vBl\bQ\x7f\tA{\vUm\x05Gx\tA{\x01yp\x06YA\0zX\bTV\bWl\bUd\x04BM\vB{\npV\v@x\x04B\\\np@\x04Db\x04Gz\tal\npa\tfM\tuD\bV~\x04mx\vQ}\ndS\tp\\\bVK\bS]\bU|\x05oD\tkV\ved\vHR\nb~\x04M`\nJp\x05oD\x04|Q\nLP\x04Sw\bTl\nAI\nxC\bWt\tBq\x05F`\x04Cm\vLm\tKx\t}t\bPv\ny\\\naB\tV\x7f\nZd\x04XU\x04li\tfr\ti@\tBH\x04BD\x04BV\t`V\n[]\tp_\tTn\n~A\nxR\tuD\t`{\bV@\tTn\tHK\tAJ\vxs\x04Zf\nqI\x04Zf\vBM\v|j\t}t\bSM\nmC\vQ}pfquj`jlpbqw/A`volbqdfmwjmbabq`folmb`vborvjfqsvaoj`bglsqlgv`wlpslo/Awj`bqfpsvfpwbtjhjsfgjbpjdvjfmwfa/Vprvfgb`lnvmjgbgpfdvqjgbgsqjm`jsbosqfdvmwbp`lmwfmjglqfpslmgfqufmfyvfobsqlaofnbpgj`jfnaqfqfob`j/_mmlujfnaqfpjnjobqfpsqlzf`wlpsqldqbnbpjmpwjwvwlb`wjujgbgfm`vfmwqbf`lmln/Abjn/Mdfmfp`lmwb`wbqgfp`bqdbqmf`fpbqjlbwfm`j/_mwfo/Eelml`lnjpj/_m`bm`jlmfp`bsb`jgbgfm`lmwqbqbm/Mojpjpebulqjwlpw/Eqnjmlpsqlujm`jbfwjrvfwbpfofnfmwlpevm`jlmfpqfpvowbgl`bq/M`wfqsqlsjfgbgsqjm`jsjlmf`fpjgbgnvmj`jsbo`qfb`j/_mgfp`bqdbpsqfpfm`jb`lnfq`jbolsjmjlmfpfifq`j`jlfgjwlqjbopbobnbm`bdlmy/Mofygl`vnfmwlsfo/A`vobqf`jfmwfpdfmfqbofpwbqqbdlmbsq/M`wj`bmlufgbgfpsqlsvfpwbsb`jfmwfpw/E`mj`bplaifwjulp`lmwb`wlp\fHB\fIk\fHn\fH^\fHS\fHc\fHU\fId\fHn\fH{\fHC\fHR\fHT\fHR\fHI\fHc\fHY\fHn\fH\\\fHU\fIk\fHy\fIg\fHd\fHy\fIm\fHw\fH\\\fHU\fHR\fH@\fHR\fHJ\fHy\fHU\fHR\fHT\fHA\fIl\fHU\fIm\fHc\fH\\\fHU\fIl\fHB\fId\fHn\fHJ\fHS\fHD\fH@\fHR\fHHgjsolgl`p\fHT\fHB\fHC\fH\\\fIn\fHF\fHD\fHR\fHB\fHF\fHH\fHR\fHG\fHS\fH\\\fHx\fHT\fHH\fHH\fH\\\fHU\fH^\fIg\fH{\fHU\fIm\fHj\fH@\fHR\fH\\\fHJ\fIk\fHZ\fHU\fIm\fHd\fHz\fIk\fH^\fHC\fHJ\fHS\fHy\fHR\fHB\fHY\fIk\fH@\fHH\fIl\fHD\fH@\fIl\fHv\fHB\fI`\fHH\fHT\fHR\fH^\fH^\fIk\fHz\fHp\fIe\fH@\fHB\fHJ\fHJ\fHH\fHI\fHR\fHD\fHU\fIl\fHZ\fHU\fH\\\fHi\fH^\fH{\fHy\fHA\fIl\fHD\fH{\fH\\\fHF\fHR\fHT\fH\\\fHR\fHH\fHy\fHS\fHc\fHe\fHT\fIk\fH{\fHC\fIl\fHU\fIn\fHm\fHj\fH{\fIk\fHs\fIl\fHB\fHz\fIg\fHp\fHy\fHR\fH\\\fHi\fHA\fIl\fH{\fHC\fIk\fHH\fIm\fHB\fHY\fIg\fHs\fHJ\fIk\fHn\fHi\fH{\fH\\\fH|\fHT\fIk\fHB\fIk\fH^\fH^\fH{\fHR\fHU\fHR\fH^\fHf\fHF\fH\\\fHv\fHR\fH\\\fH|\fHT\fHR\fHJ\fIk\fH\\\fHp\fHS\fHT\fHJ\fHS\fH^\fH@\fHn\fHJ\fH@\fHD\fHR\fHU\fIn\fHn\fH^\fHR\fHz\fHp\fIl\fHH\fH@\fHs\fHD\fHB\fHS\fH^\fHk\fHT\fIk\fHj\fHD\fIk\fHD\fHC\fHR\fHy\fIm\fH^\fH^\fIe\fH{\fHA\fHR\fH{\fH\\\fIk\fH^\fHp\fH{\fHU\fH\\\fHR\fHB\fH^\fH{\fIk\fHF\fIk\fHp\fHU\fHR\fHI\fHk\fHT\fIl\fHT\fHU\fIl\fHy\fH^\fHR\fHL\fIl\fHy\fHU\fHR\fHm\fHJ\fIn\fH\\\fHH\fHU\fHH\fHT\fHR\fHH\fHC\fHR\fHJ\fHj\fHC\fHR\fHF\fHR\fHy\fHy\fI`\fHD\fHZ\fHR\fHB\fHJ\fIk\fHz\fHC\fHU\fIl\fH\\\fHR\fHC\fHz\fIm\fHJ\fH^\fH{\fIl`bwfdlqjfpf{sfqjfm`f?,wjwof=\x0e\t@lszqjdkw#ibubp`qjsw`lmgjwjlmpfufqzwkjmd?s#`obpp>!wf`kmloldzab`hdqlvmg?b#`obpp>!nbmbdfnfmw%`lsz8#132ibubP`qjsw`kbqb`wfqpaqfbg`qvnawkfnpfoufpklqjylmwbodlufqmnfmw@bojelqmjbb`wjujwjfpgjp`lufqfgMbujdbwjlmwqbmpjwjlm`lmmf`wjlmmbujdbwjlmbssfbqbm`f?,wjwof=?n`kf`hal{!#wf`kmjrvfpsqlwf`wjlmbssbqfmwozbp#tfoo#bpvmw$/#$VB.qfplovwjlmlsfqbwjlmpwfofujpjlmwqbmpobwfgTbpkjmdwlmmbujdbwlq-#>#tjmglt-jnsqfppjlm%ow8aq%dw8ojwfqbwvqfslsvobwjlmad`lolq>! fpsf`jbooz#`lmwfmw>!sqlgv`wjlmmftpofwwfqsqlsfqwjfpgfejmjwjlmofbgfqpkjsWf`kmloldzSbqojbnfmw`lnsbqjplmvo#`obpp>!-jmgf{Le+!`lm`ovpjlmgjp`vppjlm`lnslmfmwpajloldj`boQfulovwjlm\\`lmwbjmfqvmgfqpwllgmlp`qjsw=?sfqnjppjlmfb`k#lwkfqbwnlpskfqf#lmel`vp>!?elqn#jg>!sql`fppjmdwkjp-ubovfdfmfqbwjlm@lmefqfm`fpvapfrvfmwtfoo.hmltmubqjbwjlmpqfsvwbwjlmskfmlnfmlmgjp`jsojmfoldl-smd!#+gl`vnfmw/alvmgbqjfpf{sqfppjlmpfwwofnfmwAb`hdqlvmglvw#le#wkffmwfqsqjpf+!kwwsp9!#vmfp`bsf+!sbpptlqg!#gfnl`qbwj`?b#kqfe>!,tqbssfq!=\tnfnafqpkjsojmdvjpwj`s{8sbggjmdskjolplskzbppjpwbm`fvmjufqpjwzeb`jojwjfpqf`ldmjyfgsqfefqfm`fje#+wzsflenbjmwbjmfgul`bavobqzkzslwkfpjp-pvanjw+*8%bns8maps8bmmlwbwjlmafkjmg#wkfElvmgbwjlmsvaojpkfq!bppvnswjlmjmwqlgv`fg`lqqvswjlmp`jfmwjpwpf{soj`jwozjmpwfbg#legjnfmpjlmp#lm@oj`h>!`lmpjgfqfggfsbqwnfmwl``vsbwjlmpllm#bewfqjmufpwnfmwsqlmlvm`fgjgfmwjejfgf{sfqjnfmwNbmbdfnfmwdfldqbskj`!#kfjdkw>!ojmh#qfo>!-qfsob`f+,gfsqfppjlm`lmefqfm`fsvmjpknfmwfojnjmbwfgqfpjpwbm`fbgbswbwjlmlsslpjwjlmtfoo#hmltmpvssofnfmwgfwfqnjmfgk2#`obpp>!3s{8nbqdjmnf`kbmj`bopwbwjpwj`p`fofaqbwfgDlufqmnfmw\t\tGvqjmd#wgfufolsfqpbqwjej`jbofrvjubofmwlqjdjmbwfg@lnnjppjlmbwwb`knfmw?psbm#jg>!wkfqf#tfqfMfgfqobmgpafzlmg#wkfqfdjpwfqfgilvqmbojpweqfrvfmwozboo#le#wkfobmd>!fm!#?,pwzof=\x0e\tbaplovwf8#pvsslqwjmdf{wqfnfoz#nbjmpwqfbn?,pwqlmd=#slsvobqjwzfnsolznfmw?,wbaof=\x0e\t#`lopsbm>!?,elqn=\t##`lmufqpjlmbalvw#wkf#?,s=?,gju=jmwfdqbwfg!#obmd>!fmSlqwvdvfpfpvapwjwvwfjmgjujgvbojnslppjaofnvowjnfgjbbonlpw#boos{#plojg# bsbqw#eqlnpvaif`w#wljm#Fmdojpk`qjwj`jyfgf{`fsw#elqdvjgfojmfplqjdjmboozqfnbqhbaofwkf#pf`lmgk1#`obpp>!?b#wjwof>!+jm`ovgjmdsbqbnfwfqpsqlkjajwfg>#!kwws9,,gj`wjlmbqzsfq`fswjlmqfulovwjlmelvmgbwjlms{8kfjdkw9pv``fppevopvsslqwfqpnjoofmmjvnkjp#ebwkfqwkf#%rvlw8ml.qfsfbw8`lnnfq`jbojmgvpwqjbofm`lvqbdfgbnlvmw#le#vmleej`jbofeej`jfm`zQfefqfm`fp`llqgjmbwfgjp`objnfqf{sfgjwjlmgfufolsjmd`bo`vobwfgpjnsojejfgofdjwjnbwfpvapwqjmd+3!#`obpp>!`lnsofwfozjoovpwqbwfejuf#zfbqpjmpwqvnfmwSvaojpkjmd2!#`obpp>!spz`kloldz`lmejgfm`fmvnafq#le#bapfm`f#leel`vpfg#lmiljmfg#wkfpwqv`wvqfpsqfujlvpoz=?,jeqbnf=lm`f#bdbjmavw#qbwkfqjnnjdqbmwple#`lvqpf/b#dqlvs#leOjwfqbwvqfVmojhf#wkf?,b=%maps8\tevm`wjlm#jw#tbp#wkf@lmufmwjlmbvwlnlajofSqlwfpwbmwbddqfppjufbewfq#wkf#Pjnjobqoz/!#,=?,gju=`loof`wjlm\x0e\tevm`wjlmujpjajojwzwkf#vpf#leulovmwffqpbwwqb`wjlmvmgfq#wkf#wkqfbwfmfg)?"X@GBWBXjnslqwbm`fjm#dfmfqbowkf#obwwfq?,elqn=\t?,-jmgf{Le+$j#>#38#j#?gjeefqfm`fgfulwfg#wlwqbgjwjlmppfbq`k#elqvowjnbwfozwlvqmbnfmwbwwqjavwfppl.`boofg#~\t?,pwzof=fubovbwjlmfnskbpjyfgb``fppjaof?,pf`wjlm=pv``fppjlmbolmd#tjwkNfbmtkjof/jmgvpwqjfp?,b=?aq#,=kbp#af`lnfbpsf`wp#leWfofujpjlmpveej`jfmwabphfwabooalwk#pjgfp`lmwjmvjmdbm#bqwj`of?jnd#bow>!bgufmwvqfpkjp#nlwkfqnbm`kfpwfqsqjm`jsofpsbqwj`vobq`lnnfmwbqzfeef`wp#legf`jgfg#wl!=?pwqlmd=svaojpkfqpIlvqmbo#legjeej`vowzeb`jojwbwfb``fswbaofpwzof-`pp!\nevm`wjlm#jmmlubwjlm=@lszqjdkwpjwvbwjlmptlvog#kbufavpjmfppfpGj`wjlmbqzpwbwfnfmwplewfm#vpfgsfqpjpwfmwjm#Ibmvbqz`lnsqjpjmd?,wjwof=\t\ngjsolnbwj``lmwbjmjmdsfqelqnjmdf{wfmpjlmpnbz#mlw#af`lm`fsw#le#lm`oj`h>!Jw#jp#boplejmbm`jbo#nbhjmd#wkfOv{fnalvqdbggjwjlmbobqf#`boofgfmdbdfg#jm!p`qjsw!*8avw#jw#tbpfof`wqlmj`lmpvanjw>!\t?"..#Fmg#fof`wqj`boleej`jboozpvddfpwjlmwls#le#wkfvmojhf#wkfBvpwqbojbmLqjdjmboozqfefqfm`fp\t?,kfbg=\x0e\tqf`ldmjpfgjmjwjbojyfojnjwfg#wlBof{bmgqjbqfwjqfnfmwBgufmwvqfpelvq#zfbqp\t\t%ow8"..#jm`qfbpjmdgf`lqbwjlmk0#`obpp>!lqjdjmp#lelaojdbwjlmqfdvobwjlm`obppjejfg+evm`wjlm+bgubmwbdfpafjmd#wkf#kjpwlqjbmp?abpf#kqfeqfsfbwfgoztjoojmd#wl`lnsbqbaofgfpjdmbwfgmlnjmbwjlmevm`wjlmbojmpjgf#wkfqfufobwjlmfmg#le#wkfp#elq#wkf#bvwklqjyfgqfevpfg#wlwbhf#sob`fbvwlmlnlvp`lnsqlnjpfslojwj`bo#qfpwbvqbmwwtl#le#wkfEfaqvbqz#1rvbojwz#leptelaif`w-vmgfqpwbmgmfbqoz#bootqjwwfm#azjmwfqujftp!#tjgwk>!2tjwkgqbtboeolbw9ofewjp#vpvbooz`bmgjgbwfpmftpsbsfqpnzpwfqjlvpGfsbqwnfmwafpw#hmltmsbqojbnfmwpvssqfppfg`lmufmjfmwqfnfnafqfggjeefqfmw#pzpwfnbwj`kbp#ofg#wlsqlsbdbmgb`lmwqloofgjmeovfm`fp`fqfnlmjbosql`objnfgSqlwf`wjlmoj#`obpp>!P`jfmwjej``obpp>!ml.wqbgfnbqhpnlqf#wkbm#tjgfpsqfbgOjafqbwjlmwllh#sob`fgbz#le#wkfbp#olmd#bpjnsqjplmfgBggjwjlmbo\t?kfbg=\t?nObalqbwlqzMlufnafq#1f{`fswjlmpJmgvpwqjboubqjfwz#leeolbw9#ofeGvqjmd#wkfbppfppnfmwkbuf#affm#gfbop#tjwkPwbwjpwj`pl``vqqfm`f,vo=?,gju=`ofbqej{!=wkf#svaoj`nbmz#zfbqptkj`k#tfqflufq#wjnf/pzmlmznlvp`lmwfmw!=\tsqfpvnbaozkjp#ebnjozvpfqBdfmw-vmf{sf`wfgjm`ovgjmd#`kboofmdfgb#njmlqjwzvmgfejmfg!afolmdp#wlwbhfm#eqlnjm#L`wlafqslpjwjlm9#pbjg#wl#afqfojdjlvp#Efgfqbwjlm#qltpsbm>!lmoz#b#eftnfbmw#wkbwofg#wl#wkf..=\x0e\t?gju#?ejfogpfw=Bq`kajpkls#`obpp>!mlafjmd#vpfgbssqlb`kfpsqjujofdfpmlp`qjsw=\tqfpvowp#jmnbz#af#wkfFbpwfq#fddnf`kbmjpnpqfbplmbaofSlsvobwjlm@loof`wjlmpfof`wfg!=mlp`qjsw=\x0e,jmgf{-sksbqqjubo#le.ippgh$**8nbmbdfg#wljm`lnsofwf`bpvbowjfp`lnsofwjlm@kqjpwjbmpPfswfnafq#bqjwknfwj`sql`fgvqfpnjdkw#kbufSqlgv`wjlmjw#bssfbqpSkjolplskzeqjfmgpkjsofbgjmd#wldjujmd#wkfwltbqg#wkfdvbqbmwffggl`vnfmwfg`lolq9 333ujgfl#dbnf`lnnjppjlmqfeof`wjmd`kbmdf#wkfbppl`jbwfgpbmp.pfqjelmhfzsqfpp8#sbggjmd9Kf#tbp#wkfvmgfqozjmdwzsj`booz#/#bmg#wkf#pq`Fofnfmwpv``fppjufpjm`f#wkf#pklvog#af#mfwtlqhjmdb``lvmwjmdvpf#le#wkfoltfq#wkbmpkltp#wkbw?,psbm=\t\n\n`lnsobjmwp`lmwjmvlvprvbmwjwjfpbpwqlmlnfqkf#gjg#mlwgvf#wl#jwpbssojfg#wlbm#bufqbdffeelqwp#wlwkf#evwvqfbwwfnsw#wlWkfqfelqf/`bsbajojwzQfsvaoj`bmtbp#elqnfgFof`wqlmj`hjolnfwfqp`kboofmdfpsvaojpkjmdwkf#elqnfqjmgjdfmlvpgjqf`wjlmppvapjgjbqz`lmpsjqb`zgfwbjop#lebmg#jm#wkfbeelqgbaofpvapwbm`fpqfbplm#elq`lmufmwjlmjwfnwzsf>!baplovwfozpvsslpfgozqfnbjmfg#bbwwqb`wjufwqbufoojmdpfsbqbwfozel`vpfp#lmfofnfmwbqzbssoj`baofelvmg#wkbwpwzofpkffwnbmvp`qjswpwbmgp#elq#ml.qfsfbw+plnfwjnfp@lnnfq`jbojm#Bnfqj`bvmgfqwbhfmrvbqwfq#lebm#f{bnsofsfqplmboozjmgf{-sks!owqOjfvwfmbmw\t?gju#jg>!wkfz#tlvogbajojwz#lenbgf#vs#lemlwfg#wkbw`ofbq#wkbwbqdvf#wkbwwl#bmlwkfq`kjogqfm$psvqslpf#leelqnvobwfgabpfg#vslmwkf#qfdjlmpvaif`w#lesbppfmdfqpslppfppjlm-\t\tJm#wkf#Afelqf#wkfbewfqtbqgp`vqqfmwoz#b`qlpp#wkfp`jfmwjej``lnnvmjwz-`bsjwbojpnjm#Dfqnbmzqjdkw.tjmdwkf#pzpwfnPl`jfwz#leslojwj`jbmgjqf`wjlm9tfmw#lm#wlqfnlubo#le#Mft#Zlqh#bsbqwnfmwpjmgj`bwjlmgvqjmd#wkfvmofpp#wkfkjpwlqj`bokbg#affm#bgfejmjwjufjmdqfgjfmwbwwfmgbm`f@fmwfq#elqsqlnjmfm`fqfbgzPwbwfpwqbwfdjfpavw#jm#wkfbp#sbqw#le`lmpwjwvwf`objn#wkbwobalqbwlqz`lnsbwjaofebjovqf#le/#pv`k#bp#afdbm#tjwkvpjmd#wkf#wl#sqlujgfefbwvqf#leeqln#tkj`k,!#`obpp>!dfloldj`bopfufqbo#legfojafqbwfjnslqwbmw#klogp#wkbwjmd%rvlw8#ubojdm>wlswkf#Dfqnbmlvwpjgf#lemfdlwjbwfgkjp#`bqffqpfsbqbwjlmjg>!pfbq`ktbp#`boofgwkf#elvqwkqf`qfbwjlmlwkfq#wkbmsqfufmwjlmtkjof#wkf#fgv`bwjlm/`lmmf`wjmdb``vqbwfoztfqf#avjowtbp#hjoofgbdqffnfmwpnv`k#nlqf#Gvf#wl#wkftjgwk9#233plnf#lwkfqHjmdgln#lewkf#fmwjqfebnlvp#elqwl#`lmmf`wlaif`wjufpwkf#Eqfm`ksflsof#bmgefbwvqfg!=jp#pbjg#wlpwqv`wvqboqfefqfmgvnnlpw#lewfmb#pfsbqbwf.=\t?gju#jg#Leej`jbo#tlqogtjgf-bqjb.obafowkf#sobmfwbmg#jw#tbpg!#ubovf>!ollhjmd#bwafmfej`jbobqf#jm#wkfnlmjwlqjmdqfslqwfgozwkf#nlgfqmtlqhjmd#lmbooltfg#wltkfqf#wkf#jmmlubwjuf?,b=?,gju=plvmgwqb`hpfbq`kElqnwfmg#wl#afjmsvw#jg>!lsfmjmd#leqfpwqj`wfgbglswfg#azbggqfppjmdwkfloldjbmnfwklgp#leubqjbmw#le@kqjpwjbm#ufqz#obqdfbvwlnlwjufaz#ebq#wkfqbmdf#eqlnsvqpvjw#leeloolt#wkfaqlvdkw#wljm#Fmdobmgbdqff#wkbwb``vpfg#le`lnfp#eqlnsqfufmwjmdgju#pwzof>kjp#lq#kfqwqfnfmglvpeqffgln#le`lm`fqmjmd3#2fn#2fn8Abphfwaboo,pwzof-`ppbm#fbqojfqfufm#bewfq,!#wjwof>!-`ln,jmgf{wbhjmd#wkfsjwwpavqdk`lmwfmw!=\x0e?p`qjsw=+ewvqmfg#lvwkbujmd#wkf?,psbm=\x0e\t#l``bpjlmboaf`bvpf#jwpwbqwfg#wlskzpj`booz=?,gju=\t##`qfbwfg#az@vqqfmwoz/#ad`lolq>!wbajmgf{>!gjpbpwqlvpBmbozwj`p#bopl#kbp#b=?gju#jg>!?,pwzof=\t?`boofg#elqpjmdfq#bmg-pq`#>#!,,ujlobwjlmpwkjp#sljmw`lmpwbmwozjp#ol`bwfgqf`lqgjmdpg#eqln#wkfmfgfqobmgpslqwvdv/Fp;N;};D;u;F5m4K4]4_7`gfpbqqlool`lnfmwbqjlfgv`b`j/_mpfswjfnaqfqfdjpwqbglgjqf``j/_mvaj`b`j/_msvaoj`jgbgqfpsvfpwbpqfpvowbglpjnslqwbmwfqfpfqubglpbqw/A`volpgjefqfmwfppjdvjfmwfpqfs/Vaoj`bpjwvb`j/_mnjmjpwfqjlsqjub`jgbggjqf`wlqjlelqnb`j/_mslaob`j/_msqfpjgfmwf`lmw','fmjglpb``fplqjlpwf`kmlqbwjsfqplmbofp`bwfdlq/Abfpsf`jbofpgjpslmjaofb`wvbojgbgqfefqfm`jbuboobglojgajaojlwf`bqfob`jlmfp`bofmgbqjlslo/Awj`bpbmwfqjlqfpgl`vnfmwlpmbwvqbofybnbwfqjbofpgjefqfm`jbf`lm/_nj`bwqbmpslqwfqlgq/Advfysbqwj`jsbqfm`vfmwqbmgjp`vpj/_mfpwqv`wvqbevmgb`j/_meqf`vfmwfpsfqnbmfmwfwlwbonfmwf!2s{#plojg# -dje!#bow>!wqbmpsbqfmwjmelqnbwjlmbssoj`bwjlm!#lm`oj`h>!fpwbaojpkfgbgufqwjpjmd-smd!#bow>!fmujqlmnfmwsfqelqnbm`fbssqlsqjbwf%bns8ngbpk8jnnfgjbwfoz?,pwqlmd=?,qbwkfq#wkbmwfnsfqbwvqfgfufolsnfmw`lnsfwjwjlmsob`fklogfqujpjajojwz9`lszqjdkw!=3!#kfjdkw>!fufm#wklvdkqfsob`fnfmwgfpwjmbwjlm@lqslqbwjlm?vo#`obpp>!Bppl`jbwjlmjmgjujgvbopsfqpsf`wjufpfwWjnflvw+vqo+kwws9,,nbwkfnbwj`pnbqdjm.wls9fufmwvbooz#gfp`qjswjlm*#ml.qfsfbw`loof`wjlmp-ISD\x7fwkvna\x7fsbqwj`jsbwf,kfbg=?algzeolbw9ofew8?oj#`obpp>!kvmgqfgp#le\t\tKltfufq/#`lnslpjwjlm`ofbq9alwk8`llsfqbwjlmtjwkjm#wkf#obafo#elq>!alqgfq.wls9Mft#Yfbobmgqf`lnnfmgfgsklwldqbskzjmwfqfpwjmd%ow8pvs%dw8`lmwqlufqpzMfwkfqobmgpbowfqmbwjufnb{ofmdwk>!ptjwyfqobmgGfufolsnfmwfppfmwjbooz\t\tBowklvdk#?,wf{wbqfb=wkvmgfqajqgqfsqfpfmwfg%bns8mgbpk8psf`vobwjlm`lnnvmjwjfpofdjpobwjlmfof`wqlmj`p\t\n?gju#jg>!joovpwqbwfgfmdjmffqjmdwfqqjwlqjfpbvwklqjwjfpgjpwqjavwfg5!#kfjdkw>!pbmp.pfqje8`bsbaof#le#gjpbssfbqfgjmwfqb`wjufollhjmd#elqjw#tlvog#afBedkbmjpwbmtbp#`qfbwfgNbwk-eollq+pvqqlvmgjmd`bm#bopl#aflapfqubwjlmnbjmwfmbm`ffm`lvmwfqfg?k1#`obpp>!nlqf#qf`fmwjw#kbp#affmjmubpjlm#le*-dfwWjnf+*evmgbnfmwboGfpsjwf#wkf!=?gju#jg>!jmpsjqbwjlmf{bnjmbwjlmsqfsbqbwjlmf{sobmbwjlm?jmsvw#jg>!?,b=?,psbm=ufqpjlmp#lejmpwqvnfmwpafelqf#wkf##>#$kwws9,,Gfp`qjswjlmqfobwjufoz#-pvapwqjmd+fb`k#le#wkff{sfqjnfmwpjmeovfmwjbojmwfdqbwjlmnbmz#sflsofgvf#wl#wkf#`lnajmbwjlmgl#mlw#kbufNjggof#Fbpw?mlp`qjsw=?`lszqjdkw!#sfqkbsp#wkfjmpwjwvwjlmjm#Gf`fnafqbqqbmdfnfmwnlpw#ebnlvpsfqplmbojwz`qfbwjlm#leojnjwbwjlmpf{`ovpjufozplufqfjdmwz.`lmwfmw!=\t?wg#`obpp>!vmgfqdqlvmgsbqboofo#wlgl`wqjmf#lel``vsjfg#azwfqnjmloldzQfmbjppbm`fb#mvnafq#lepvsslqw#elqf{solqbwjlmqf`ldmjwjlmsqfgf`fpplq?jnd#pq`>!,?k2#`obpp>!svaoj`bwjlmnbz#bopl#afpsf`jbojyfg?,ejfogpfw=sqldqfppjufnjoojlmp#lepwbwfp#wkbwfmelq`fnfmwbqlvmg#wkf#lmf#bmlwkfq-sbqfmwMlgfbdqj`vowvqfBowfqmbwjufqfpfbq`kfqpwltbqgp#wkfNlpw#le#wkfnbmz#lwkfq#+fpsf`jbooz?wg#tjgwk>!8tjgwk9233&jmgfsfmgfmw?k0#`obpp>!#lm`kbmdf>!*-bgg@obpp+jmwfqb`wjlmLmf#le#wkf#gbvdkwfq#leb``fpplqjfpaqbm`kfp#le\x0e\t?gju#jg>!wkf#obqdfpwgf`obqbwjlmqfdvobwjlmpJmelqnbwjlmwqbmpobwjlmgl`vnfmwbqzjm#lqgfq#wl!=\t?kfbg=\t?!#kfjdkw>!2b`qlpp#wkf#lqjfmwbwjlm*8?,p`qjsw=jnsofnfmwfg`bm#af#pffmwkfqf#tbp#bgfnlmpwqbwf`lmwbjmfq!=`lmmf`wjlmpwkf#Aqjwjpktbp#tqjwwfm"jnslqwbmw8s{8#nbqdjm.elooltfg#azbajojwz#wl#`lnsoj`bwfggvqjmd#wkf#jnnjdqbwjlmbopl#`boofg?k7#`obpp>!gjpwjm`wjlmqfsob`fg#azdlufqmnfmwpol`bwjlm#lejm#Mlufnafqtkfwkfq#wkf?,s=\t?,gju=b`rvjpjwjlm`boofg#wkf#sfqpf`vwjlmgfpjdmbwjlmxelmw.pjyf9bssfbqfg#jmjmufpwjdbwff{sfqjfm`fgnlpw#ojhfoztjgfoz#vpfggjp`vppjlmpsqfpfm`f#le#+gl`vnfmw-f{wfmpjufozJw#kbp#affmjw#glfp#mlw`lmwqbqz#wljmkbajwbmwpjnsqlufnfmwp`klobqpkjs`lmpvnswjlmjmpwqv`wjlmelq#f{bnsoflmf#lq#nlqfs{8#sbggjmdwkf#`vqqfmwb#pfqjfp#lebqf#vpvboozqlof#jm#wkfsqfujlvpoz#gfqjubwjufpfujgfm`f#lef{sfqjfm`fp`lolqp`kfnfpwbwfg#wkbw`fqwjej`bwf?,b=?,gju=\t#pfof`wfg>!kjdk#p`klloqfpslmpf#wl`lnelqwbaofbglswjlm#lewkqff#zfbqpwkf#`lvmwqzjm#Efaqvbqzpl#wkbw#wkfsflsof#tkl#sqlujgfg#az?sbqbn#mbnfbeef`wfg#azjm#wfqnp#lebssljmwnfmwJPL.;;6:.2!tbp#alqm#jmkjpwlqj`bo#qfdbqgfg#bpnfbpvqfnfmwjp#abpfg#lm#bmg#lwkfq#9#evm`wjlm+pjdmjej`bmw`fofaqbwjlmwqbmpnjwwfg,ip,irvfqz-jp#hmltm#bpwkflqfwj`bo#wbajmgf{>!jw#`lvog#af?mlp`qjsw=\tkbujmd#affm\x0e\t?kfbg=\x0e\t?#%rvlw8Wkf#`lnsjobwjlmkf#kbg#affmsqlgv`fg#azskjolplskfq`lmpwqv`wfgjmwfmgfg#wlbnlmd#lwkfq`lnsbqfg#wlwl#pbz#wkbwFmdjmffqjmdb#gjeefqfmwqfefqqfg#wlgjeefqfm`fpafojfe#wkbwsklwldqbskpjgfmwjezjmdKjpwlqz#le#Qfsvaoj`#lemf`fppbqjozsqlabajojwzwf`kmj`boozofbujmd#wkfpsf`wb`vobqeqb`wjlm#lefof`wqj`jwzkfbg#le#wkfqfpwbvqbmwpsbqwmfqpkjsfnskbpjp#lmnlpw#qf`fmwpkbqf#tjwk#pbzjmd#wkbwejoofg#tjwkgfpjdmfg#wljw#jp#lewfm!=?,jeqbnf=bp#elooltp9nfqdfg#tjwkwkqlvdk#wkf`lnnfq`jbo#sljmwfg#lvwlsslqwvmjwzujft#le#wkfqfrvjqfnfmwgjujpjlm#lesqldqbnnjmdkf#qf`fjufgpfwJmwfqubo!=?,psbm=?,jm#Mft#Zlqhbggjwjlmbo#`lnsqfppjlm\t\t?gju#jg>!jm`lqslqbwf8?,p`qjsw=?bwwb`kFufmwaf`bnf#wkf#!#wbqdfw>!\\`bqqjfg#lvwPlnf#le#wkfp`jfm`f#bmgwkf#wjnf#le@lmwbjmfq!=nbjmwbjmjmd@kqjpwlskfqNv`k#le#wkftqjwjmdp#le!#kfjdkw>!1pjyf#le#wkfufqpjlm#le#nj{wvqf#le#afwtffm#wkfF{bnsofp#lefgv`bwjlmbo`lnsfwjwjuf#lmpvanjw>!gjqf`wlq#legjpwjm`wjuf,GWG#[KWNO#qfobwjmd#wlwfmgfm`z#wlsqlujm`f#letkj`k#tlvoggfpsjwf#wkfp`jfmwjej`#ofdjpobwvqf-jmmfqKWNO#boofdbwjlmpBdqj`vowvqftbp#vpfg#jmbssqlb`k#wljmwfoojdfmwzfbqp#obwfq/pbmp.pfqjegfwfqnjmjmdSfqelqnbm`fbssfbqbm`fp/#tkj`k#jp#elvmgbwjlmpbaaqfujbwfgkjdkfq#wkbmp#eqln#wkf#jmgjujgvbo#`lnslpfg#lepvsslpfg#wl`objnp#wkbwbwwqjavwjlmelmw.pjyf92fofnfmwp#leKjpwlqj`bo#kjp#aqlwkfqbw#wkf#wjnfbmmjufqpbqzdlufqmfg#azqfobwfg#wl#vowjnbwfoz#jmmlubwjlmpjw#jp#pwjoo`bm#lmoz#afgfejmjwjlmpwlDNWPwqjmdB#mvnafq#lejnd#`obpp>!Fufmwvbooz/tbp#`kbmdfgl``vqqfg#jmmfjdkalqjmdgjpwjmdvjpktkfm#kf#tbpjmwqlgv`jmdwfqqfpwqjboNbmz#le#wkfbqdvfp#wkbwbm#Bnfqj`bm`lmrvfpw#letjgfpsqfbg#tfqf#hjoofgp`qffm#bmg#Jm#lqgfq#wlf{sf`wfg#wlgfp`fmgbmwpbqf#ol`bwfgofdjpobwjufdfmfqbwjlmp#ab`hdqlvmgnlpw#sflsofzfbqp#bewfqwkfqf#jp#mlwkf#kjdkfpweqfrvfmwoz#wkfz#gl#mlwbqdvfg#wkbwpkltfg#wkbwsqfglnjmbmwwkfloldj`boaz#wkf#wjnf`lmpjgfqjmdpklqw.ojufg?,psbm=?,b=`bm#af#vpfgufqz#ojwwoflmf#le#wkf#kbg#boqfbgzjmwfqsqfwfg`lnnvmj`bwfefbwvqfp#ledlufqmnfmw/?,mlp`qjsw=fmwfqfg#wkf!#kfjdkw>!0Jmgfsfmgfmwslsvobwjlmpobqdf.p`bof-#Bowklvdk#vpfg#jm#wkfgfpwqv`wjlmslppjajojwzpwbqwjmd#jmwtl#lq#nlqff{sqfppjlmppvalqgjmbwfobqdfq#wkbmkjpwlqz#bmg?,lswjlm=\x0e\t@lmwjmfmwbofojnjmbwjmdtjoo#mlw#afsqb`wj`f#lejm#eqlmw#lepjwf#le#wkffmpvqf#wkbwwl#`qfbwf#bnjppjppjssjslwfmwjboozlvwpwbmgjmdafwwfq#wkbmtkbw#jp#mltpjwvbwfg#jmnfwb#mbnf>!WqbgjwjlmbopvddfpwjlmpWqbmpobwjlmwkf#elqn#lebwnlpskfqj`jgfloldj`bofmwfqsqjpfp`bo`vobwjmdfbpw#le#wkfqfnmbmwp#lesovdjmpsbdf,jmgf{-sks!Wkjp#jp#wkf#?b#kqfe>!,slsvobqjyfgjmuloufg#jmbqf#vpfg#wlbmg#pfufqbonbgf#az#wkfpffnp#wl#afojhfoz#wkbwSbofpwjmjbmmbnfg#bewfqjw#kbg#affmnlpw#`lnnlmwl#qfefq#wlavw#wkjp#jp`lmpf`vwjufwfnslqbqjozJm#dfmfqbo/`lmufmwjlmpwbhfp#sob`fpvagjujpjlmwfqqjwlqjbolsfqbwjlmbosfqnbmfmwoztbp#obqdfozlvwaqfbh#lejm#wkf#sbpwelooltjmd#b#{nomp9ld>!=?b#`obpp>!`obpp>!wf{w@lmufqpjlm#nbz#af#vpfgnbmveb`wvqfbewfq#afjmd`ofbqej{!=\trvfpwjlm#letbp#fof`wfgwl#af`lnf#baf`bvpf#le#plnf#sflsofjmpsjqfg#azpv``fppevo#b#wjnf#tkfmnlqf#`lnnlmbnlmdpw#wkfbm#leej`jbotjgwk9233&8wf`kmloldz/tbp#bglswfgwl#hffs#wkfpfwwofnfmwpojuf#ajqwkpjmgf{-kwno!@lmmf`wj`vwbppjdmfg#wl%bns8wjnfp8b``lvmw#elqbojdm>qjdkwwkf#`lnsbmzbotbzp#affmqfwvqmfg#wljmuloufnfmwAf`bvpf#wkfwkjp#sfqjlg!#mbnf>!r!#`lmejmfg#wlb#qfpvow#leubovf>!!#,=jp#b`wvboozFmujqlmnfmw\x0e\t?,kfbg=\x0e\t@lmufqpfoz/=\t?gju#jg>!3!#tjgwk>!2jp#sqlabaozkbuf#af`lnf`lmwqloojmdwkf#sqlaofn`jwjyfmp#leslojwj`jbmpqfb`kfg#wkfbp#fbqoz#bp9mlmf8#lufq?wbaof#`fooubojgjwz#legjqf`woz#wllmnlvpfgltmtkfqf#jw#jptkfm#jw#tbpnfnafqp#le#qfobwjlm#wlb``lnnlgbwfbolmd#tjwk#Jm#wkf#obwfwkf#Fmdojpkgfoj`jlvp!=wkjp#jp#mlwwkf#sqfpfmwje#wkfz#bqfbmg#ejmboozb#nbwwfq#le\x0e\t\n?,gju=\x0e\t\x0e\t?,p`qjsw=ebpwfq#wkbmnbilqjwz#lebewfq#tkj`k`lnsbqbwjufwl#nbjmwbjmjnsqluf#wkfbtbqgfg#wkffq!#`obpp>!eqbnfalqgfqqfpwlqbwjlmjm#wkf#pbnfbmbozpjp#lewkfjq#ejqpwGvqjmd#wkf#`lmwjmfmwbopfrvfm`f#leevm`wjlm+*xelmw.pjyf9#tlqh#lm#wkf?,p`qjsw=\t?afdjmp#tjwkibubp`qjsw9`lmpwjwvfmwtbp#elvmgfgfrvjojaqjvnbppvnf#wkbwjp#djufm#azmffgp#wl#af`llqgjmbwfpwkf#ubqjlvpbqf#sbqw#lelmoz#jm#wkfpf`wjlmp#lejp#b#`lnnlmwkflqjfp#legjp`lufqjfpbppl`jbwjlmfgdf#le#wkfpwqfmdwk#leslpjwjlm#jmsqfpfmw.gbzvmjufqpboozwl#elqn#wkfavw#jmpwfbg`lqslqbwjlmbwwb`kfg#wljp#`lnnlmozqfbplmp#elq#%rvlw8wkf#`bm#af#nbgftbp#baof#wltkj`k#nfbmpavw#gjg#mlwlmNlvpfLufqbp#slppjaoflsfqbwfg#az`lnjmd#eqlnwkf#sqjnbqzbggjwjlm#leelq#pfufqbowqbmpefqqfgb#sfqjlg#lebqf#baof#wlkltfufq/#jwpklvog#kbufnv`k#obqdfq\t\n?,p`qjsw=bglswfg#wkfsqlsfqwz#legjqf`wfg#azfeef`wjufoztbp#aqlvdkw`kjogqfm#leSqldqbnnjmdolmdfq#wkbmnbmvp`qjswptbq#bdbjmpwaz#nfbmp#lebmg#nlpw#lepjnjobq#wl#sqlsqjfwbqzlqjdjmbwjmdsqfpwjdjlvpdqbnnbwj`bof{sfqjfm`f-wl#nbhf#wkfJw#tbp#bopljp#elvmg#jm`lnsfwjwlqpjm#wkf#V-P-qfsob`f#wkfaqlvdkw#wkf`bo`vobwjlmeboo#le#wkfwkf#dfmfqbosqb`wj`boozjm#klmlq#leqfofbpfg#jmqfpjgfmwjbobmg#plnf#lehjmd#le#wkfqfb`wjlm#wl2pw#Fbqo#le`vowvqf#bmgsqjm`jsbooz?,wjwof=\t##wkfz#`bm#afab`h#wl#wkfplnf#le#kjpf{slpvqf#wlbqf#pjnjobqelqn#le#wkfbggEbulqjwf`jwjyfmpkjssbqw#jm#wkfsflsof#tjwkjm#sqb`wj`fwl#`lmwjmvf%bns8njmvp8bssqlufg#az#wkf#ejqpw#booltfg#wkfbmg#elq#wkfevm`wjlmjmdsobzjmd#wkfplovwjlm#wlkfjdkw>!3!#jm#kjp#allhnlqf#wkbm#belooltp#wkf`qfbwfg#wkfsqfpfm`f#jm%maps8?,wg=mbwjlmbojpwwkf#jgfb#leb#`kbqb`wfqtfqf#elq`fg#`obpp>!awmgbzp#le#wkfefbwvqfg#jmpkltjmd#wkfjmwfqfpw#jmjm#sob`f#lewvqm#le#wkfwkf#kfbg#leOlqg#le#wkfslojwj`boozkbp#jwp#ltmFgv`bwjlmbobssqlubo#leplnf#le#wkffb`k#lwkfq/afkbujlq#lebmg#af`bvpfbmg#bmlwkfqbssfbqfg#lmqf`lqgfg#jmaob`h%rvlw8nbz#jm`ovgfwkf#tlqog$p`bm#ofbg#wlqfefqp#wl#balqgfq>!3!#dlufqmnfmw#tjmmjmd#wkfqfpvowfg#jm#tkjof#wkf#Tbpkjmdwlm/wkf#pvaif`w`jwz#jm#wkf=?,gju=\x0e\t\n\nqfeof`w#wkfwl#`lnsofwfaf`bnf#nlqfqbgjlb`wjufqfif`wfg#aztjwklvw#bmzkjp#ebwkfq/tkj`k#`lvog`lsz#le#wkfwl#jmgj`bwfb#slojwj`bob``lvmwp#le`lmpwjwvwfptlqhfg#tjwkfq?,b=?,oj=le#kjp#ojefb``lnsbmjfg`ojfmwTjgwksqfufmw#wkfOfdjpobwjufgjeefqfmwozwldfwkfq#jmkbp#pfufqboelq#bmlwkfqwf{w#le#wkfelvmgfg#wkff#tjwk#wkf#jp#vpfg#elq`kbmdfg#wkfvpvbooz#wkfsob`f#tkfqftkfqfbp#wkf=#?b#kqfe>!!=?b#kqfe>!wkfnpfoufp/bowklvdk#kfwkbw#`bm#afwqbgjwjlmboqlof#le#wkfbp#b#qfpvowqfnluf@kjoggfpjdmfg#aztfpw#le#wkfPlnf#sflsofsqlgv`wjlm/pjgf#le#wkfmftpofwwfqpvpfg#az#wkfgltm#wl#wkfb``fswfg#azojuf#jm#wkfbwwfnswp#wllvwpjgf#wkfeqfrvfm`jfpKltfufq/#jmsqldqbnnfqpbw#ofbpw#jmbssql{jnbwfbowklvdk#jwtbp#sbqw#lebmg#ubqjlvpDlufqmlq#lewkf#bqwj`ofwvqmfg#jmwl=?b#kqfe>!,wkf#f`lmlnzjp#wkf#nlpwnlpw#tjgfoztlvog#obwfqbmg#sfqkbspqjpf#wl#wkfl``vqp#tkfmvmgfq#tkj`k`lmgjwjlmp-wkf#tfpwfqmwkflqz#wkbwjp#sqlgv`fgwkf#`jwz#lejm#tkj`k#kfpffm#jm#wkfwkf#`fmwqboavjogjmd#lenbmz#le#kjpbqfb#le#wkfjp#wkf#lmoznlpw#le#wkfnbmz#le#wkfwkf#TfpwfqmWkfqf#jp#mlf{wfmgfg#wlPwbwjpwj`bo`lopsbm>1#\x7fpklqw#pwlqzslppjaof#wlwlsloldj`bo`qjwj`bo#leqfslqwfg#wlb#@kqjpwjbmgf`jpjlm#wljp#frvbo#wlsqlaofnp#leWkjp#`bm#afnfq`kbmgjpfelq#nlpw#leml#fujgfm`ffgjwjlmp#lefofnfmwp#jm%rvlw8-#Wkf`ln,jnbdfp,tkj`k#nbhfpwkf#sql`fppqfnbjmp#wkfojwfqbwvqf/jp#b#nfnafqwkf#slsvobqwkf#bm`jfmwsqlaofnp#jmwjnf#le#wkfgfefbwfg#azalgz#le#wkfb#eft#zfbqpnv`k#le#wkfwkf#tlqh#le@bojelqmjb/pfqufg#bp#bdlufqmnfmw-`lm`fswp#lenlufnfmw#jm\n\n?gju#jg>!jw!#ubovf>!obmdvbdf#lebp#wkfz#bqfsqlgv`fg#jmjp#wkbw#wkff{sobjm#wkfgju=?,gju=\tKltfufq#wkfofbg#wl#wkf\n?b#kqfe>!,tbp#dqbmwfgsflsof#kbuf`lmwjmvbooztbp#pffm#bpbmg#qfobwfgwkf#qlof#lesqlslpfg#azle#wkf#afpwfb`k#lwkfq-@lmpwbmwjmfsflsof#eqlngjbof`wp#lewl#qfujpjlmtbp#qfmbnfgb#plvq`f#lewkf#jmjwjboobvm`kfg#jmsqlujgf#wkfwl#wkf#tfpwtkfqf#wkfqfbmg#pjnjobqafwtffm#wtljp#bopl#wkfFmdojpk#bmg`lmgjwjlmp/wkbw#jw#tbpfmwjwofg#wlwkfnpfoufp-rvbmwjwz#leqbmpsbqfm`zwkf#pbnf#bpwl#iljm#wkf`lvmwqz#bmgwkjp#jp#wkfWkjp#ofg#wlb#pwbwfnfmw`lmwqbpw#wlobpwJmgf{Lewkqlvdk#kjpjp#gfpjdmfgwkf#wfqn#jpjp#sqlujgfgsqlwf`w#wkfmd?,b=?,oj=Wkf#`vqqfmwwkf#pjwf#lepvapwbmwjbof{sfqjfm`f/jm#wkf#Tfpwwkfz#pklvogpolufm(ajmb`lnfmwbqjlpvmjufqpjgbg`lmgj`jlmfpb`wjujgbgfpf{sfqjfm`jbwf`mlold/Absqlgv``j/_msvmwvb`j/_mbsoj`b`j/_m`lmwqbpf/]b`bwfdlq/Abpqfdjpwqbqpfsqlefpjlmbowqbwbnjfmwlqfd/Apwqbwfpf`qfwbq/Absqjm`jsbofpsqlwf``j/_mjnslqwbmwfpjnslqwbm`jbslpjajojgbgjmwfqfpbmwf`qf`jnjfmwlmf`fpjgbgfppvp`qjajqpfbpl`jb`j/_mgjpslmjaofpfubovb`j/_mfpwvgjbmwfpqfpslmpbaofqfplov`j/_mdvbgbobibqbqfdjpwqbglplslqwvmjgbg`lnfq`jbofpelwldqbe/Abbvwlqjgbgfpjmdfmjfq/Abwfofujpj/_m`lnsfwfm`jblsfqb`jlmfpfpwbaof`jglpjnsofnfmwfb`wvbonfmwfmbufdb`j/_m`lmelqnjgbgojmf.kfjdkw9elmw.ebnjoz9!#9#!kwws9,,bssoj`bwjlmpojmh!#kqfe>!psf`jej`booz,,?"X@GBWBX\tLqdbmjybwjlmgjpwqjavwjlm3s{8#kfjdkw9qfobwjlmpkjsgfuj`f.tjgwk?gju#`obpp>!?obafo#elq>!qfdjpwqbwjlm?,mlp`qjsw=\t,jmgf{-kwno!tjmglt-lsfm+#"jnslqwbmw8bssoj`bwjlm,jmgfsfmgfm`f,,ttt-dlldoflqdbmjybwjlmbvwl`lnsofwfqfrvjqfnfmwp`lmpfqubwjuf?elqn#mbnf>!jmwfoof`wvbonbqdjm.ofew92;wk#`fmwvqzbm#jnslqwbmwjmpwjwvwjlmpbaaqfujbwjlm?jnd#`obpp>!lqdbmjpbwjlm`jujojybwjlm2:wk#`fmwvqzbq`kjwf`wvqfjm`lqslqbwfg13wk#`fmwvqz.`lmwbjmfq!=nlpw#mlwbaoz,=?,b=?,gju=mlwjej`bwjlm$vmgfejmfg$*Evqwkfqnlqf/afojfuf#wkbwjmmfqKWNO#>#sqjlq#wl#wkfgqbnbwj`boozqfefqqjmd#wlmfdlwjbwjlmpkfbgrvbqwfqpPlvwk#Beqj`bvmpv``fppevoSfmmpzoubmjbBp#b#qfpvow/?kwno#obmd>!%ow8,pvs%dw8gfbojmd#tjwkskjobgfoskjbkjpwlqj`booz*8?,p`qjsw=\tsbggjmd.wls9f{sfqjnfmwbodfwBwwqjavwfjmpwqv`wjlmpwf`kmloldjfpsbqw#le#wkf#>evm`wjlm+*xpvap`qjswjlmo-gwg!=\x0e\t?kwdfldqbskj`bo@lmpwjwvwjlm$/#evm`wjlm+pvsslqwfg#azbdqj`vowvqbo`lmpwqv`wjlmsvaoj`bwjlmpelmw.pjyf9#2b#ubqjfwz#le?gju#pwzof>!Fm`z`olsfgjbjeqbnf#pq`>!gfnlmpwqbwfgb``lnsojpkfgvmjufqpjwjfpGfnldqbskj`p*8?,p`qjsw=?gfgj`bwfg#wlhmltofgdf#lepbwjpeb`wjlmsbqwj`vobqoz?,gju=?,gju=Fmdojpk#+VP*bssfmg@kjog+wqbmpnjppjlmp-#Kltfufq/#jmwfoojdfm`f!#wbajmgf{>!eolbw9qjdkw8@lnnlmtfbowkqbmdjmd#eqlnjm#tkj`k#wkfbw#ofbpw#lmfqfsqlgv`wjlmfm`z`olsfgjb8elmw.pjyf92ivqjpgj`wjlmbw#wkbw#wjnf!=?b#`obpp>!Jm#bggjwjlm/gfp`qjswjlm(`lmufqpbwjlm`lmwb`w#tjwkjp#dfmfqboozq!#`lmwfmw>!qfsqfpfmwjmd%ow8nbwk%dw8sqfpfmwbwjlml``bpjlmbooz?jnd#tjgwk>!mbujdbwjlm!=`lnsfmpbwjlm`kbnsjlmpkjsnfgjb>!boo!#ujlobwjlm#leqfefqfm`f#wlqfwvqm#wqvf8Pwqj`w,,FM!#wqbmpb`wjlmpjmwfqufmwjlmufqjej`bwjlmJmelqnbwjlm#gjeej`vowjfp@kbnsjlmpkjs`bsbajojwjfp?"Xfmgje^..=~\t?,p`qjsw=\t@kqjpwjbmjwzelq#f{bnsof/Sqlefppjlmboqfpwqj`wjlmppvddfpw#wkbwtbp#qfofbpfg+pv`k#bp#wkfqfnluf@obpp+vmfnsolznfmwwkf#Bnfqj`bmpwqv`wvqf#le,jmgf{-kwno#svaojpkfg#jmpsbm#`obpp>!!=?b#kqfe>!,jmwqlgv`wjlmafolmdjmd#wl`objnfg#wkbw`lmpfrvfm`fp?nfwb#mbnf>!Dvjgf#wl#wkflufqtkfonjmdbdbjmpw#wkf#`lm`fmwqbwfg/\t-mlmwlv`k#lapfqubwjlmp?,b=\t?,gju=\te#+gl`vnfmw-alqgfq9#2s{#xelmw.pjyf92wqfbwnfmw#le3!#kfjdkw>!2nlgjej`bwjlmJmgfsfmgfm`fgjujgfg#jmwldqfbwfq#wkbmb`kjfufnfmwpfpwbaojpkjmdIbubP`qjsw!#mfufqwkfofpppjdmjej`bm`fAqlbg`bpwjmd=%maps8?,wg=`lmwbjmfq!=\tpv`k#bp#wkf#jmeovfm`f#leb#sbqwj`vobqpq`>$kwws9,,mbujdbwjlm!#kboe#le#wkf#pvapwbmwjbo#%maps8?,gju=bgubmwbdf#legjp`lufqz#leevmgbnfmwbo#nfwqlslojwbmwkf#lsslpjwf!#{no9obmd>!gfojafqbwfozbojdm>`fmwfqfulovwjlm#lesqfpfqubwjlmjnsqlufnfmwpafdjmmjmd#jmIfpvp#@kqjpwSvaoj`bwjlmpgjpbdqffnfmwwf{w.bojdm9q/#evm`wjlm+*pjnjobqjwjfpalgz=?,kwno=jp#`vqqfmwozboskbafwj`bojp#plnfwjnfpwzsf>!jnbdf,nbmz#le#wkf#eolt9kjggfm8bubjobaof#jmgfp`qjaf#wkff{jpwfm`f#leboo#lufq#wkfwkf#Jmwfqmfw\n?vo#`obpp>!jmpwboobwjlmmfjdkalqkllgbqnfg#elq`fpqfgv`jmd#wkf`lmwjmvfp#wlMlmfwkfofpp/wfnsfqbwvqfp\t\n\n?b#kqfe>!`olpf#wl#wkff{bnsofp#le#jp#balvw#wkf+pff#afolt*-!#jg>!pfbq`ksqlefppjlmbojp#bubjobaofwkf#leej`jbo\n\n?,p`qjsw=\t\t\n\n?gju#jg>!b``fofqbwjlmwkqlvdk#wkf#Kboo#le#Ebnfgfp`qjswjlmpwqbmpobwjlmpjmwfqefqfm`f#wzsf>$wf{w,qf`fmw#zfbqpjm#wkf#tlqogufqz#slsvobqxab`hdqlvmg9wqbgjwjlmbo#plnf#le#wkf#`lmmf`wfg#wlf{soljwbwjlmfnfqdfm`f#le`lmpwjwvwjlmB#Kjpwlqz#lepjdmjej`bmw#nbmveb`wvqfgf{sf`wbwjlmp=?mlp`qjsw=?`bm#af#elvmgaf`bvpf#wkf#kbp#mlw#affmmfjdkalvqjmdtjwklvw#wkf#bggfg#wl#wkf\n?oj#`obpp>!jmpwqvnfmwboPlujfw#Vmjlmb`hmltofgdfgtkj`k#`bm#afmbnf#elq#wkfbwwfmwjlm#wlbwwfnswp#wl#gfufolsnfmwpJm#eb`w/#wkf?oj#`obpp>!bjnsoj`bwjlmppvjwbaof#elqnv`k#le#wkf#`lolmjybwjlmsqfpjgfmwjbo`bm`foAvaaof#Jmelqnbwjlmnlpw#le#wkf#jp#gfp`qjafgqfpw#le#wkf#nlqf#lq#ofppjm#PfswfnafqJmwfoojdfm`fpq`>!kwws9,,s{8#kfjdkw9#bubjobaof#wlnbmveb`wvqfqkvnbm#qjdkwpojmh#kqfe>!,bubjobajojwzsqlslqwjlmbolvwpjgf#wkf#bpwqlmlnj`bokvnbm#afjmdpmbnf#le#wkf#bqf#elvmg#jmbqf#abpfg#lmpnboofq#wkbmb#sfqplm#tklf{sbmpjlm#lebqdvjmd#wkbwmlt#hmltm#bpJm#wkf#fbqozjmwfqnfgjbwfgfqjufg#eqlnP`bmgjmbujbm?,b=?,gju=\x0e\t`lmpjgfq#wkfbm#fpwjnbwfgwkf#Mbwjlmbo?gju#jg>!sbdqfpvowjmd#jm`lnnjppjlmfgbmboldlvp#wlbqf#qfrvjqfg,vo=\t?,gju=\ttbp#abpfg#lmbmg#af`bnf#b%maps8%maps8w!#ubovf>!!#tbp#`bswvqfgml#nlqf#wkbmqfpsf`wjufoz`lmwjmvf#wl#=\x0e\t?kfbg=\x0e\t?tfqf#`qfbwfgnlqf#dfmfqbojmelqnbwjlm#vpfg#elq#wkfjmgfsfmgfmw#wkf#Jnsfqjbo`lnslmfmw#lewl#wkf#mlqwkjm`ovgf#wkf#@lmpwqv`wjlmpjgf#le#wkf#tlvog#mlw#afelq#jmpwbm`fjmufmwjlm#lenlqf#`lnsof{`loof`wjufozab`hdqlvmg9#wf{w.bojdm9#jwp#lqjdjmbojmwl#b``lvmwwkjp#sql`fppbm#f{wfmpjufkltfufq/#wkfwkfz#bqf#mlwqfif`wfg#wkf`qjwj`jpn#legvqjmd#tkj`ksqlabaoz#wkfwkjp#bqwj`of+evm`wjlm+*xJw#pklvog#afbm#bdqffnfmwb``jgfmwboozgjeefqp#eqlnBq`kjwf`wvqfafwwfq#hmltmbqqbmdfnfmwpjmeovfm`f#lmbwwfmgfg#wkfjgfmwj`bo#wlplvwk#le#wkfsbpp#wkqlvdk{no!#wjwof>!tfjdkw9alog8`qfbwjmd#wkfgjpsobz9mlmfqfsob`fg#wkf?jnd#pq`>!,jkwwsp9,,ttt-Tlqog#Tbq#JJwfpwjnlmjbopelvmg#jm#wkfqfrvjqfg#wl#bmg#wkbw#wkfafwtffm#wkf#tbp#gfpjdmfg`lmpjpwp#le#`lmpjgfqbaozsvaojpkfg#azwkf#obmdvbdf@lmpfqubwjlm`lmpjpwfg#leqfefq#wl#wkfab`h#wl#wkf#`pp!#nfgjb>!Sflsof#eqln#bubjobaof#lmsqlufg#wl#afpvddfpwjlmp!tbp#hmltm#bpubqjfwjfp#leojhfoz#wl#af`lnsqjpfg#lepvsslqw#wkf#kbmgp#le#wkf`lvsofg#tjwk`lmmf`w#bmg#alqgfq9mlmf8sfqelqnbm`fpafelqf#afjmdobwfq#af`bnf`bo`vobwjlmplewfm#`boofgqfpjgfmwp#lenfbmjmd#wkbw=?oj#`obpp>!fujgfm`f#elqf{sobmbwjlmpfmujqlmnfmwp!=?,b=?,gju=tkj`k#booltpJmwqlgv`wjlmgfufolsfg#azb#tjgf#qbmdflm#afkboe#leubojdm>!wls!sqjm`jsof#lebw#wkf#wjnf/?,mlp`qjsw=\x0epbjg#wl#kbufjm#wkf#ejqpwtkjof#lwkfqpkzslwkfwj`boskjolplskfqpsltfq#le#wkf`lmwbjmfg#jmsfqelqnfg#azjmbajojwz#wltfqf#tqjwwfmpsbm#pwzof>!jmsvw#mbnf>!wkf#rvfpwjlmjmwfmgfg#elqqfif`wjlm#lejnsojfp#wkbwjmufmwfg#wkfwkf#pwbmgbqgtbp#sqlabaozojmh#afwtffmsqlefpplq#lejmwfqb`wjlmp`kbmdjmd#wkfJmgjbm#L`fbm#`obpp>!obpwtlqhjmd#tjwk$kwws9,,ttt-zfbqp#afelqfWkjp#tbp#wkfqf`qfbwjlmbofmwfqjmd#wkfnfbpvqfnfmwpbm#f{wqfnfozubovf#le#wkfpwbqw#le#wkf\t?,p`qjsw=\t\tbm#feelqw#wljm`qfbpf#wkfwl#wkf#plvwkpsb`jmd>!3!=pveej`jfmwozwkf#Fvqlsfbm`lmufqwfg#wl`ofbqWjnflvwgjg#mlw#kbuf`lmpfrvfmwozelq#wkf#mf{wf{wfmpjlm#lef`lmlnj`#bmgbowklvdk#wkfbqf#sqlgv`fgbmg#tjwk#wkfjmpveej`jfmwdjufm#az#wkfpwbwjmd#wkbwf{sfmgjwvqfp?,psbm=?,b=\twklvdkw#wkbwlm#wkf#abpjp`foosbggjmd>jnbdf#le#wkfqfwvqmjmd#wljmelqnbwjlm/pfsbqbwfg#azbppbppjmbwfgp!#`lmwfmw>!bvwklqjwz#lemlqwktfpwfqm?,gju=\t?gju#!=?,gju=\x0e\t##`lmpvowbwjlm`lnnvmjwz#lewkf#mbwjlmbojw#pklvog#afsbqwj`jsbmwp#bojdm>!ofewwkf#dqfbwfpwpfof`wjlm#lepvsfqmbwvqbogfsfmgfmw#lmjp#nfmwjlmfgbooltjmd#wkftbp#jmufmwfgb``lnsbmzjmdkjp#sfqplmbobubjobaof#bwpwvgz#le#wkflm#wkf#lwkfqf{f`vwjlm#leKvnbm#Qjdkwpwfqnp#le#wkfbppl`jbwjlmpqfpfbq`k#bmgpv``ffgfg#azgfefbwfg#wkfbmg#eqln#wkfavw#wkfz#bqf`lnnbmgfq#lepwbwf#le#wkfzfbqp#le#bdfwkf#pwvgz#le?vo#`obpp>!psob`f#jm#wkftkfqf#kf#tbp?oj#`obpp>!ewkfqf#bqf#mltkj`k#af`bnfkf#svaojpkfgf{sqfppfg#jmwl#tkj`k#wkf`lnnjppjlmfqelmw.tfjdkw9wfqqjwlqz#lef{wfmpjlmp!=Qlnbm#Fnsjqffrvbo#wl#wkfJm#`lmwqbpw/kltfufq/#bmgjp#wzsj`boozbmg#kjp#tjef+bopl#`boofg=?vo#`obpp>!feef`wjufoz#fuloufg#jmwlpffn#wl#kbuftkj`k#jp#wkfwkfqf#tbp#mlbm#f{`foofmwboo#le#wkfpfgfp`qjafg#azJm#sqb`wj`f/aqlbg`bpwjmd`kbqdfg#tjwkqfeof`wfg#jmpvaif`wfg#wlnjojwbqz#bmgwl#wkf#sljmwf`lmlnj`boozpfwWbqdfwjmdbqf#b`wvboozuj`wlqz#lufq+*8?,p`qjsw=`lmwjmvlvpozqfrvjqfg#elqfulovwjlmbqzbm#feef`wjufmlqwk#le#wkf/#tkj`k#tbp#eqlmw#le#wkflq#lwkfqtjpfplnf#elqn#lekbg#mlw#affmdfmfqbwfg#azjmelqnbwjlm-sfqnjwwfg#wljm`ovgfp#wkfgfufolsnfmw/fmwfqfg#jmwlwkf#sqfujlvp`lmpjpwfmwozbqf#hmltm#bpwkf#ejfog#lewkjp#wzsf#ledjufm#wl#wkfwkf#wjwof#le`lmwbjmp#wkfjmpwbm`fp#lejm#wkf#mlqwkgvf#wl#wkfjqbqf#gfpjdmfg`lqslqbwjlmptbp#wkbw#wkflmf#le#wkfpfnlqf#slsvobqpv``ffgfg#jmpvsslqw#eqlnjm#gjeefqfmwglnjmbwfg#azgfpjdmfg#elqltmfqpkjs#lebmg#slppjaozpwbmgbqgjyfgqfpslmpfWf{wtbp#jmwfmgfgqf`fjufg#wkfbppvnfg#wkbwbqfbp#le#wkfsqjnbqjoz#jmwkf#abpjp#lejm#wkf#pfmpfb``lvmwp#elqgfpwqlzfg#azbw#ofbpw#wtltbp#gf`obqfg`lvog#mlw#afPf`qfwbqz#lebssfbq#wl#afnbqdjm.wls92,]_p(\x7f_p(\',df*xwkqlt#f~8wkf#pwbqw#lewtl#pfsbqbwfobmdvbdf#bmgtkl#kbg#affmlsfqbwjlm#legfbwk#le#wkfqfbo#mvnafqp\n?ojmh#qfo>!sqlujgfg#wkfwkf#pwlqz#le`lnsfwjwjlmpfmdojpk#+VH*fmdojpk#+VP*#evm`wjlm+*-isd!#tjgwk>!`lmejdvqbwjlm-smd!#tjgwk>!?algz#`obpp>!Nbwk-qbmgln+*`lmwfnslqbqz#Vmjwfg#Pwbwfp`jq`vnpwbm`fp-bssfmg@kjog+lqdbmjybwjlmp?psbm#`obpp>!!=?jnd#pq`>!,gjpwjmdvjpkfgwklvpbmgp#le#`lnnvmj`bwjlm`ofbq!=?,gju=jmufpwjdbwjlmebuj`lm-j`l!#nbqdjm.qjdkw9abpfg#lm#wkf#Nbppb`kvpfwwpwbaof#alqgfq>jmwfqmbwjlmbobopl#hmltm#bpsqlmvm`jbwjlmab`hdqlvmg9 esbggjmd.ofew9Elq#f{bnsof/#njp`foobmflvp%ow8,nbwk%dw8spz`kloldj`bojm#sbqwj`vobqfbq`k!#wzsf>!elqn#nfwklg>!bp#lsslpfg#wlPvsqfnf#@lvqwl``bpjlmbooz#Bggjwjlmbooz/Mlqwk#Bnfqj`bs{8ab`hdqlvmglsslqwvmjwjfpFmwfqwbjmnfmw-wlOltfq@bpf+nbmveb`wvqjmdsqlefppjlmbo#`lnajmfg#tjwkElq#jmpwbm`f/`lmpjpwjmd#le!#nb{ofmdwk>!qfwvqm#ebopf8`lmp`jlvpmfppNfgjwfqqbmfbmf{wqblqgjmbqzbppbppjmbwjlmpvapfrvfmwoz#avwwlm#wzsf>!wkf#mvnafq#lewkf#lqjdjmbo#`lnsqfkfmpjufqfefqp#wl#wkf?,vo=\t?,gju=\tskjolplskj`bool`bwjlm-kqfetbp#svaojpkfgPbm#Eqbm`jp`l+evm`wjlm+*x\t?gju#jg>!nbjmplskjpwj`bwfgnbwkfnbwj`bo#,kfbg=\x0e\t?algzpvddfpwp#wkbwgl`vnfmwbwjlm`lm`fmwqbwjlmqfobwjlmpkjspnbz#kbuf#affm+elq#f{bnsof/Wkjp#bqwj`of#jm#plnf#`bpfpsbqwp#le#wkf#gfejmjwjlm#leDqfbw#Aqjwbjm#`foosbggjmd>frvjubofmw#wlsob`fklogfq>!8#elmw.pjyf9#ivpwjej`bwjlmafojfufg#wkbwpveefqfg#eqlnbwwfnswfg#wl#ofbgfq#le#wkf`qjsw!#pq`>!,+evm`wjlm+*#xbqf#bubjobaof\t\n?ojmh#qfo>!#pq`>$kwws9,,jmwfqfpwfg#jm`lmufmwjlmbo#!#bow>!!#,=?,bqf#dfmfqboozkbp#bopl#affmnlpw#slsvobq#`lqqfpslmgjmd`qfgjwfg#tjwkwzof>!alqgfq9?,b=?,psbm=?,-dje!#tjgwk>!?jeqbnf#pq`>!wbaof#`obpp>!jmojmf.aol`h8b``lqgjmd#wl#wldfwkfq#tjwkbssql{jnbwfozsbqojbnfmwbqznlqf#bmg#nlqfgjpsobz9mlmf8wqbgjwjlmboozsqfglnjmbmwoz%maps8\x7f%maps8%maps8?,psbm=#`foopsb`jmd>?jmsvw#mbnf>!lq!#`lmwfmw>!`lmwqlufqpjbosqlsfqwz>!ld9,{.pkl`htbuf.gfnlmpwqbwjlmpvqqlvmgfg#azMfufqwkfofpp/tbp#wkf#ejqpw`lmpjgfqbaof#Bowklvdk#wkf#`loobalqbwjlmpklvog#mlw#afsqlslqwjlm#le?psbm#pwzof>!hmltm#bp#wkf#pklqwoz#bewfqelq#jmpwbm`f/gfp`qjafg#bp#,kfbg=\t?algz#pwbqwjmd#tjwkjm`qfbpjmdoz#wkf#eb`w#wkbwgjp`vppjlm#lenjggof#le#wkfbm#jmgjujgvbogjeej`vow#wl#sljmw#le#ujftklnlpf{vbojwzb``fswbm`f#le?,psbm=?,gju=nbmveb`wvqfqplqjdjm#le#wkf`lnnlmoz#vpfgjnslqwbm`f#legfmlnjmbwjlmpab`hdqlvmg9# ofmdwk#le#wkfgfwfqnjmbwjlmb#pjdmjej`bmw!#alqgfq>!3!=qfulovwjlmbqzsqjm`jsofp#lejp#`lmpjgfqfgtbp#gfufolsfgJmgl.Fvqlsfbmuvomfqbaof#wlsqlslmfmwp#lebqf#plnfwjnfp`olpfq#wl#wkfMft#Zlqh#@jwz#mbnf>!pfbq`kbwwqjavwfg#wl`lvqpf#le#wkfnbwkfnbwj`jbmaz#wkf#fmg#lebw#wkf#fmg#le!#alqgfq>!3!#wf`kmloldj`bo-qfnluf@obpp+aqbm`k#le#wkffujgfm`f#wkbw"Xfmgje^..=\x0e\tJmpwjwvwf#le#jmwl#b#pjmdofqfpsf`wjufoz-bmg#wkfqfelqfsqlsfqwjfp#lejp#ol`bwfg#jmplnf#le#tkj`kWkfqf#jp#bopl`lmwjmvfg#wl#bssfbqbm`f#le#%bns8mgbpk8#gfp`qjafp#wkf`lmpjgfqbwjlmbvwklq#le#wkfjmgfsfmgfmwozfrvjssfg#tjwkglfp#mlw#kbuf?,b=?b#kqfe>!`lmevpfg#tjwk?ojmh#kqfe>!,bw#wkf#bdf#lebssfbq#jm#wkfWkfpf#jm`ovgfqfdbqgofpp#le`lvog#af#vpfg#pwzof>%rvlw8pfufqbo#wjnfpqfsqfpfmw#wkfalgz=\t?,kwno=wklvdkw#wl#afslsvobwjlm#leslppjajojwjfpsfq`fmwbdf#leb``fpp#wl#wkfbm#bwwfnsw#wlsqlgv`wjlm#leirvfqz,irvfqzwtl#gjeefqfmwafolmd#wl#wkffpwbaojpknfmwqfsob`jmd#wkfgfp`qjswjlm!#gfwfqnjmf#wkfbubjobaof#elqB``lqgjmd#wl#tjgf#qbmdf#le\n?gju#`obpp>!nlqf#`lnnlmozlqdbmjpbwjlmpevm`wjlmbojwztbp#`lnsofwfg#%bns8ngbpk8#sbqwj`jsbwjlmwkf#`kbqb`wfqbm#bggjwjlmbobssfbqp#wl#afeb`w#wkbw#wkfbm#f{bnsof#lepjdmjej`bmwozlmnlvpflufq>!af`bvpf#wkfz#bpzm`#>#wqvf8sqlaofnp#tjwkpffnp#wl#kbufwkf#qfpvow#le#pq`>!kwws9,,ebnjojbq#tjwkslppfppjlm#leevm`wjlm#+*#xwllh#sob`f#jmbmg#plnfwjnfppvapwbmwjbooz?psbm=?,psbm=jp#lewfm#vpfgjm#bm#bwwfnswdqfbw#gfbo#leFmujqlmnfmwbopv``fppevooz#ujqwvbooz#boo13wk#`fmwvqz/sqlefppjlmbopmf`fppbqz#wl#gfwfqnjmfg#az`lnsbwjajojwzaf`bvpf#jw#jpGj`wjlmbqz#lenlgjej`bwjlmpWkf#elooltjmdnbz#qfefq#wl9@lmpfrvfmwoz/Jmwfqmbwjlmbobowklvdk#plnfwkbw#tlvog#aftlqog$p#ejqpw`obppjejfg#bpalwwln#le#wkf+sbqwj`vobqozbojdm>!ofew!#nlpw#`lnnlmozabpjp#elq#wkfelvmgbwjlm#le`lmwqjavwjlmpslsvobqjwz#le`fmwfq#le#wkfwl#qfgv`f#wkfivqjpgj`wjlmpbssql{jnbwjlm#lmnlvpflvw>!Mft#Wfpwbnfmw`loof`wjlm#le?,psbm=?,b=?,jm#wkf#Vmjwfgejon#gjqf`wlq.pwqj`w-gwg!=kbp#affm#vpfgqfwvqm#wl#wkfbowklvdk#wkjp`kbmdf#jm#wkfpfufqbo#lwkfqavw#wkfqf#bqfvmsqf`fgfmwfgjp#pjnjobq#wlfpsf`jbooz#jmtfjdkw9#alog8jp#`boofg#wkf`lnsvwbwjlmbojmgj`bwf#wkbwqfpwqj`wfg#wl\n?nfwb#mbnf>!bqf#wzsj`booz`lmeoj`w#tjwkKltfufq/#wkf#Bm#f{bnsof#le`lnsbqfg#tjwkrvbmwjwjfp#leqbwkfq#wkbm#b`lmpwfoobwjlmmf`fppbqz#elqqfslqwfg#wkbwpsf`jej`bwjlmslojwj`bo#bmg%maps8%maps8?qfefqfm`fp#wlwkf#pbnf#zfbqDlufqmnfmw#ledfmfqbwjlm#lekbuf#mlw#affmpfufqbo#zfbqp`lnnjwnfmw#wl\n\n?vo#`obpp>!ujpvbojybwjlm2:wk#`fmwvqz/sqb`wjwjlmfqpwkbw#kf#tlvogbmg#`lmwjmvfgl``vsbwjlm#lejp#gfejmfg#bp`fmwqf#le#wkfwkf#bnlvmw#le=?gju#pwzof>!frvjubofmw#legjeefqfmwjbwfaqlvdkw#balvwnbqdjm.ofew9#bvwlnbwj`boozwklvdkw#le#bpPlnf#le#wkfpf\t?gju#`obpp>!jmsvw#`obpp>!qfsob`fg#tjwkjp#lmf#le#wkffgv`bwjlm#bmgjmeovfm`fg#azqfsvwbwjlm#bp\t?nfwb#mbnf>!b``lnnlgbwjlm?,gju=\t?,gju=obqdf#sbqw#leJmpwjwvwf#elqwkf#pl.`boofg#bdbjmpw#wkf#Jm#wkjp#`bpf/tbp#bssljmwfg`objnfg#wl#afKltfufq/#wkjpGfsbqwnfmw#lewkf#qfnbjmjmdfeef`w#lm#wkfsbqwj`vobqoz#gfbo#tjwk#wkf\t?gju#pwzof>!bonlpw#botbzpbqf#`vqqfmwozf{sqfppjlm#leskjolplskz#leelq#nlqf#wkbm`jujojybwjlmplm#wkf#jpobmgpfof`wfgJmgf{`bm#qfpvow#jm!#ubovf>!!#,=wkf#pwqv`wvqf#,=?,b=?,gju=Nbmz#le#wkfpf`bvpfg#az#wkfle#wkf#Vmjwfgpsbm#`obpp>!n`bm#af#wqb`fgjp#qfobwfg#wlaf`bnf#lmf#lejp#eqfrvfmwozojujmd#jm#wkfwkflqfwj`boozElooltjmd#wkfQfulovwjlmbqzdlufqmnfmw#jmjp#gfwfqnjmfgwkf#slojwj`bojmwqlgv`fg#jmpveej`jfmw#wlgfp`qjswjlm!=pklqw#pwlqjfppfsbqbwjlm#lebp#wl#tkfwkfqhmltm#elq#jwptbp#jmjwjboozgjpsobz9aol`hjp#bm#f{bnsofwkf#sqjm`jsbo`lmpjpwp#le#bqf`ldmjyfg#bp,algz=?,kwno=b#pvapwbmwjboqf`lmpwqv`wfgkfbg#le#pwbwfqfpjpwbm`f#wlvmgfqdqbgvbwfWkfqf#bqf#wtldqbujwbwjlmbobqf#gfp`qjafgjmwfmwjlmboozpfqufg#bp#wkf`obpp>!kfbgfqlsslpjwjlm#wlevmgbnfmwboozglnjmbwfg#wkfbmg#wkf#lwkfqboojbm`f#tjwktbp#elq`fg#wlqfpsf`wjufoz/bmg#slojwj`bojm#pvsslqw#lesflsof#jm#wkf13wk#`fmwvqz-bmg#svaojpkfgolbg@kbqwafbwwl#vmgfqpwbmgnfnafq#pwbwfpfmujqlmnfmwboejqpw#kboe#le`lvmwqjfp#bmgbq`kjwf`wvqboaf#`lmpjgfqfg`kbqb`wfqjyfg`ofbqJmwfqubobvwklqjwbwjufEfgfqbwjlm#letbp#pv``ffgfgbmg#wkfqf#bqfb#`lmpfrvfm`fwkf#Sqfpjgfmwbopl#jm`ovgfgeqff#plewtbqfpv``fppjlm#legfufolsfg#wkftbp#gfpwqlzfgbtbz#eqln#wkf8\t?,p`qjsw=\t?bowklvdk#wkfzelooltfg#az#bnlqf#sltfqevoqfpvowfg#jm#bVmjufqpjwz#leKltfufq/#nbmzwkf#sqfpjgfmwKltfufq/#plnfjp#wklvdkw#wlvmwjo#wkf#fmgtbp#bmmlvm`fgbqf#jnslqwbmwbopl#jm`ovgfp=?jmsvw#wzsf>wkf#`fmwfq#le#GL#MLW#BOWFQvpfg#wl#qfefqwkfnfp,wkbw#kbg#affmwkf#abpjp#elqkbp#gfufolsfgjm#wkf#pvnnfq`lnsbqbwjufozgfp`qjafg#wkfpv`k#bp#wklpfwkf#qfpvowjmdjp#jnslppjaofubqjlvp#lwkfqPlvwk#Beqj`bmkbuf#wkf#pbnffeef`wjufmfppjm#tkj`k#`bpf8#wf{w.bojdm9pwqv`wvqf#bmg8#ab`hdqlvmg9qfdbqgjmd#wkfpvsslqwfg#wkfjp#bopl#hmltmpwzof>!nbqdjmjm`ovgjmd#wkfabkbpb#Nfobzvmlqph#alhn/Iomlqph#mzmlqphpolufm)M(ajmbjmwfqmb`jlmbo`bojej`b`j/_m`lnvmj`b`j/_m`lmpwqv``j/_m!=?gju#`obpp>!gjpbnajdvbwjlmGlnbjmMbnf$/#$bgnjmjpwqbwjlmpjnvowbmflvpozwqbmpslqwbwjlmJmwfqmbwjlmbo#nbqdjm.alwwln9qfpslmpjajojwz?"Xfmgje^..=\t?,=?nfwb#mbnf>!jnsofnfmwbwjlmjmeqbpwqv`wvqfqfsqfpfmwbwjlmalqgfq.alwwln9?,kfbg=\t?algz=>kwws&0B&1E&1E?elqn#nfwklg>!nfwklg>!slpw!#,ebuj`lm-j`l!#~*8\t?,p`qjsw=\t-pfwBwwqjavwf+Bgnjmjpwqbwjlm>#mft#Bqqbz+*8?"Xfmgje^..=\x0e\tgjpsobz9aol`h8Vmelqwvmbwfoz/!=%maps8?,gju=,ebuj`lm-j`l!=>$pwzofpkffw$#jgfmwjej`bwjlm/#elq#f{bnsof/?oj=?b#kqfe>!,bm#bowfqmbwjufbp#b#qfpvow#lesw!=?,p`qjsw=\twzsf>!pvanjw!#\t+evm`wjlm+*#xqf`lnnfmgbwjlmelqn#b`wjlm>!,wqbmpelqnbwjlmqf`lmpwqv`wjlm-pwzof-gjpsobz#B``lqgjmd#wl#kjggfm!#mbnf>!bolmd#tjwk#wkfgl`vnfmw-algz-bssql{jnbwfoz#@lnnvmj`bwjlmpslpw!#b`wjlm>!nfbmjmd#%rvlw8..?"Xfmgje^..=Sqjnf#Njmjpwfq`kbqb`wfqjpwj`?,b=#?b#`obpp>wkf#kjpwlqz#le#lmnlvpflufq>!wkf#dlufqmnfmwkqfe>!kwwsp9,,tbp#lqjdjmbooztbp#jmwqlgv`fg`obppjej`bwjlmqfsqfpfmwbwjufbqf#`lmpjgfqfg?"Xfmgje^..=\t\tgfsfmgp#lm#wkfVmjufqpjwz#le#jm#`lmwqbpw#wl#sob`fklogfq>!jm#wkf#`bpf#lejmwfqmbwjlmbo#`lmpwjwvwjlmbopwzof>!alqgfq.9#evm`wjlm+*#xAf`bvpf#le#wkf.pwqj`w-gwg!=\t?wbaof#`obpp>!b``lnsbmjfg#azb``lvmw#le#wkf?p`qjsw#pq`>!,mbwvqf#le#wkf#wkf#sflsof#jm#jm#bggjwjlm#wlp*8#ip-jg#>#jg!#tjgwk>!233&!qfdbqgjmd#wkf#Qlnbm#@bwkloj`bm#jmgfsfmgfmwelooltjmd#wkf#-dje!#tjgwk>!2wkf#elooltjmd#gjp`qjnjmbwjlmbq`kbfloldj`bosqjnf#njmjpwfq-ip!=?,p`qjsw=`lnajmbwjlm#le#nbqdjmtjgwk>!`qfbwfFofnfmw+t-bwwb`kFufmw+?,b=?,wg=?,wq=pq`>!kwwsp9,,bJm#sbqwj`vobq/#bojdm>!ofew!#@yf`k#Qfsvaoj`Vmjwfg#Hjmdgln`lqqfpslmgfm`f`lm`ovgfg#wkbw-kwno!#wjwof>!+evm`wjlm#+*#x`lnfp#eqln#wkfbssoj`bwjlm#le?psbm#`obpp>!pafojfufg#wl#affnfmw+$p`qjsw$?,b=\t?,oj=\t?ojufqz#gjeefqfmw=?psbm#`obpp>!lswjlm#ubovf>!+bopl#hmltm#bp\n?oj=?b#kqfe>!=?jmsvw#mbnf>!pfsbqbwfg#eqlnqfefqqfg#wl#bp#ubojdm>!wls!=elvmgfq#le#wkfbwwfnswjmd#wl#`bqalm#gjl{jgf\t\t?gju#`obpp>!`obpp>!pfbq`k.,algz=\t?,kwno=lsslqwvmjwz#wl`lnnvmj`bwjlmp?,kfbg=\x0e\t?algz#pwzof>!tjgwk9Wj\rVSmd#Uj\rWkw`kbmdfp#jm#wkfalqgfq.`lolq9 3!#alqgfq>!3!#?,psbm=?,gju=?tbp#gjp`lufqfg!#wzsf>!wf{w!#*8\t?,p`qjsw=\t\tGfsbqwnfmw#le#f``ofpjbpwj`bowkfqf#kbp#affmqfpvowjmd#eqln?,algz=?,kwno=kbp#mfufq#affmwkf#ejqpw#wjnfjm#qfpslmpf#wlbvwlnbwj`booz#?,gju=\t\t?gju#jtbp#`lmpjgfqfgsfq`fmw#le#wkf!#,=?,b=?,gju=`loof`wjlm#le#gfp`fmgfg#eqlnpf`wjlm#le#wkfb``fsw.`kbqpfwwl#af#`lmevpfgnfnafq#le#wkf#sbggjmd.qjdkw9wqbmpobwjlm#lejmwfqsqfwbwjlm#kqfe>$kwws9,,tkfwkfq#lq#mlwWkfqf#bqf#boplwkfqf#bqf#nbmzb#pnboo#mvnafqlwkfq#sbqwp#lejnslppjaof#wl##`obpp>!avwwlmol`bwfg#jm#wkf-#Kltfufq/#wkfbmg#fufmwvboozBw#wkf#fmg#le#af`bvpf#le#jwpqfsqfpfmwp#wkf?elqn#b`wjlm>!#nfwklg>!slpw!jw#jp#slppjaofnlqf#ojhfoz#wlbm#jm`qfbpf#jmkbuf#bopl#affm`lqqfpslmgp#wlbmmlvm`fg#wkbwbojdm>!qjdkw!=nbmz#`lvmwqjfpelq#nbmz#zfbqpfbqojfpw#hmltmaf`bvpf#jw#tbpsw!=?,p`qjsw=\x0e#ubojdm>!wls!#jmkbajwbmwp#leelooltjmd#zfbq\x0e\t?gju#`obpp>!njoojlm#sflsof`lmwqlufqpjbo#`lm`fqmjmd#wkfbqdvf#wkbw#wkfdlufqmnfmw#bmgb#qfefqfm`f#wlwqbmpefqqfg#wlgfp`qjajmd#wkf#pwzof>!`lolq9bowklvdk#wkfqfafpw#hmltm#elqpvanjw!#mbnf>!nvowjsoj`bwjlmnlqf#wkbm#lmf#qf`ldmjwjlm#le@lvm`jo#le#wkffgjwjlm#le#wkf##?nfwb#mbnf>!Fmwfqwbjmnfmw#btbz#eqln#wkf#8nbqdjm.qjdkw9bw#wkf#wjnf#lejmufpwjdbwjlmp`lmmf`wfg#tjwkbmg#nbmz#lwkfqbowklvdk#jw#jpafdjmmjmd#tjwk#?psbm#`obpp>!gfp`fmgbmwp#le?psbm#`obpp>!j#bojdm>!qjdkw!?,kfbg=\t?algz#bpsf`wp#le#wkfkbp#pjm`f#affmFvqlsfbm#Vmjlmqfnjmjp`fmw#lenlqf#gjeej`vowUj`f#Sqfpjgfmw`lnslpjwjlm#lesbppfg#wkqlvdknlqf#jnslqwbmwelmw.pjyf922s{f{sobmbwjlm#lewkf#`lm`fsw#letqjwwfm#jm#wkf\n?psbm#`obpp>!jp#lmf#le#wkf#qfpfnaobm`f#wllm#wkf#dqlvmgptkj`k#`lmwbjmpjm`ovgjmd#wkf#gfejmfg#az#wkfsvaoj`bwjlm#lenfbmp#wkbw#wkflvwpjgf#le#wkfpvsslqw#le#wkf?jmsvw#`obpp>!?psbm#`obpp>!w+Nbwk-qbmgln+*nlpw#sqlnjmfmwgfp`qjswjlm#le@lmpwbmwjmlsoftfqf#svaojpkfg?gju#`obpp>!pfbssfbqp#jm#wkf2!#kfjdkw>!2!#nlpw#jnslqwbmwtkj`k#jm`ovgfptkj`k#kbg#affmgfpwqv`wjlm#lewkf#slsvobwjlm\t\n?gju#`obpp>!slppjajojwz#leplnfwjnfp#vpfgbssfbq#wl#kbufpv``fpp#le#wkfjmwfmgfg#wl#afsqfpfmw#jm#wkfpwzof>!`ofbq9a\x0e\t?,p`qjsw=\x0e\t?tbp#elvmgfg#jmjmwfqujft#tjwk\\jg!#`lmwfmw>!`bsjwbo#le#wkf\x0e\t?ojmh#qfo>!pqfofbpf#le#wkfsljmw#lvw#wkbw{NOKwwsQfrvfpwbmg#pvapfrvfmwpf`lmg#obqdfpwufqz#jnslqwbmwpsf`jej`bwjlmppvqeb`f#le#wkfbssojfg#wl#wkfelqfjdm#sloj`z\\pfwGlnbjmMbnffpwbaojpkfg#jmjp#afojfufg#wlJm#bggjwjlm#wlnfbmjmd#le#wkfjp#mbnfg#bewfqwl#sqlwf`w#wkfjp#qfsqfpfmwfgGf`obqbwjlm#lenlqf#feej`jfmw@obppjej`bwjlmlwkfq#elqnp#lekf#qfwvqmfg#wl?psbm#`obpp>!`sfqelqnbm`f#le+evm`wjlm+*#x\x0eje#bmg#lmoz#jeqfdjlmp#le#wkfofbgjmd#wl#wkfqfobwjlmp#tjwkVmjwfg#Mbwjlmppwzof>!kfjdkw9lwkfq#wkbm#wkfzsf!#`lmwfmw>!Bppl`jbwjlm#le\t?,kfbg=\t?algzol`bwfg#lm#wkfjp#qfefqqfg#wl+jm`ovgjmd#wkf`lm`fmwqbwjlmpwkf#jmgjujgvbobnlmd#wkf#nlpwwkbm#bmz#lwkfq,=\t?ojmh#qfo>!#qfwvqm#ebopf8wkf#svqslpf#lewkf#bajojwz#wl8`lolq9 eee~\t-\t?psbm#`obpp>!wkf#pvaif`w#legfejmjwjlmp#le=\x0e\t?ojmh#qfo>!`objn#wkbw#wkfkbuf#gfufolsfg?wbaof#tjgwk>!`fofaqbwjlm#leElooltjmd#wkf#wl#gjpwjmdvjpk?psbm#`obpp>!awbhfp#sob`f#jmvmgfq#wkf#mbnfmlwfg#wkbw#wkf=?"Xfmgje^..=\tpwzof>!nbqdjm.jmpwfbg#le#wkfjmwqlgv`fg#wkfwkf#sql`fpp#lejm`qfbpjmd#wkfgjeefqfm`fp#jmfpwjnbwfg#wkbwfpsf`jbooz#wkf,gju=?gju#jg>!tbp#fufmwvboozwkqlvdklvw#kjpwkf#gjeefqfm`fplnfwkjmd#wkbwpsbm=?,psbm=?,pjdmjej`bmwoz#=?,p`qjsw=\x0e\t\x0e\tfmujqlmnfmwbo#wl#sqfufmw#wkfkbuf#affm#vpfgfpsf`jbooz#elqvmgfqpwbmg#wkfjp#fppfmwjbooztfqf#wkf#ejqpwjp#wkf#obqdfpwkbuf#affm#nbgf!#pq`>!kwws9,,jmwfqsqfwfg#bppf`lmg#kboe#le`qloojmd>!ml!#jp#`lnslpfg#leJJ/#Kloz#Qlnbmjp#f{sf`wfg#wlkbuf#wkfjq#ltmgfejmfg#bp#wkfwqbgjwjlmbooz#kbuf#gjeefqfmwbqf#lewfm#vpfgwl#fmpvqf#wkbwbdqffnfmw#tjwk`lmwbjmjmd#wkfbqf#eqfrvfmwozjmelqnbwjlm#lmf{bnsof#jp#wkfqfpvowjmd#jm#b?,b=?,oj=?,vo=#`obpp>!ellwfqbmg#fpsf`jboozwzsf>!avwwlm!#?,psbm=?,psbm=tkj`k#jm`ovgfg=\t?nfwb#mbnf>!`lmpjgfqfg#wkf`bqqjfg#lvw#azKltfufq/#jw#jpaf`bnf#sbqw#lejm#qfobwjlm#wlslsvobq#jm#wkfwkf#`bsjwbo#letbp#leej`jbooztkj`k#kbp#affmwkf#Kjpwlqz#lebowfqmbwjuf#wlgjeefqfmw#eqlnwl#pvsslqw#wkfpvddfpwfg#wkbwjm#wkf#sql`fpp##?gju#`obpp>!wkf#elvmgbwjlmaf`bvpf#le#kjp`lm`fqmfg#tjwkwkf#vmjufqpjwzlsslpfg#wl#wkfwkf#`lmwf{w#le?psbm#`obpp>!swf{w!#mbnf>!r!\n\n?gju#`obpp>!wkf#p`jfmwjej`qfsqfpfmwfg#aznbwkfnbwj`jbmpfof`wfg#az#wkfwkbw#kbuf#affm=?gju#`obpp>!`gju#jg>!kfbgfqjm#sbqwj`vobq/`lmufqwfg#jmwl*8\t?,p`qjsw=\t?skjolplskj`bo#pqsphlkqubwphjwj\rVSmd#Uj\rWkw!kwws9,,!=?psbm#`obpp>!nfnafqp#le#wkf#tjmglt-ol`bwjlmufqwj`bo.bojdm9,b=#\x7f#?b#kqfe>!?"gl`wzsf#kwno=nfgjb>!p`qffm!#?lswjlm#ubovf>!ebuj`lm-j`l!#,=\t\n\n?gju#`obpp>!`kbqb`wfqjpwj`p!#nfwklg>!dfw!#,algz=\t?,kwno=\tpklqw`vw#j`lm!#gl`vnfmw-tqjwf+sbggjmd.alwwln9qfsqfpfmwbwjufppvanjw!#ubovf>!bojdm>!`fmwfq!#wkqlvdklvw#wkf#p`jfm`f#ej`wjlm\t##?gju#`obpp>!pvanjw!#`obpp>!lmf#le#wkf#nlpw#ubojdm>!wls!=?tbp#fpwbaojpkfg*8\x0e\t?,p`qjsw=\x0e\tqfwvqm#ebopf8!=*-pwzof-gjpsobzaf`bvpf#le#wkf#gl`vnfmw-`llhjf?elqn#b`wjlm>!,~algzxnbqdjm938Fm`z`olsfgjb#leufqpjlm#le#wkf#-`qfbwfFofnfmw+mbnf!#`lmwfmw>!?,gju=\t?,gju=\t\tbgnjmjpwqbwjuf#?,algz=\t?,kwno=kjpwlqz#le#wkf#!=?jmsvw#wzsf>!slqwjlm#le#wkf#bp#sbqw#le#wkf#%maps8?b#kqfe>!lwkfq#`lvmwqjfp!=\t?gju#`obpp>!?,psbm=?,psbm=?Jm#lwkfq#tlqgp/gjpsobz9#aol`h8`lmwqlo#le#wkf#jmwqlgv`wjlm#le,=\t?nfwb#mbnf>!bp#tfoo#bp#wkf#jm#qf`fmw#zfbqp\x0e\t\n?gju#`obpp>!?,gju=\t\n?,gju=\tjmpsjqfg#az#wkfwkf#fmg#le#wkf#`lnsbwjaof#tjwkaf`bnf#hmltm#bp#pwzof>!nbqdjm9-ip!=?,p`qjsw=?#Jmwfqmbwjlmbo#wkfqf#kbuf#affmDfqnbm#obmdvbdf#pwzof>!`lolq9 @lnnvmjpw#Sbqwz`lmpjpwfmw#tjwkalqgfq>!3!#`foo#nbqdjmkfjdkw>!wkf#nbilqjwz#le!#bojdm>!`fmwfqqfobwfg#wl#wkf#nbmz#gjeefqfmw#Lqwklgl{#@kvq`kpjnjobq#wl#wkf#,=\t?ojmh#qfo>!ptbp#lmf#le#wkf#vmwjo#kjp#gfbwk~*+*8\t?,p`qjsw=lwkfq#obmdvbdfp`lnsbqfg#wl#wkfslqwjlmp#le#wkfwkf#Mfwkfqobmgpwkf#nlpw#`lnnlmab`hdqlvmg9vqo+bqdvfg#wkbw#wkfp`qloojmd>!ml!#jm`ovgfg#jm#wkfMlqwk#Bnfqj`bm#wkf#mbnf#le#wkfjmwfqsqfwbwjlmpwkf#wqbgjwjlmbogfufolsnfmw#le#eqfrvfmwoz#vpfgb#`loof`wjlm#leufqz#pjnjobq#wlpvqqlvmgjmd#wkff{bnsof#le#wkjpbojdm>!`fmwfq!=tlvog#kbuf#affmjnbdf\\`bswjlm#>bwwb`kfg#wl#wkfpvddfpwjmd#wkbwjm#wkf#elqn#le#jmuloufg#jm#wkfjp#gfqjufg#eqlnmbnfg#bewfq#wkfJmwqlgv`wjlm#wlqfpwqj`wjlmp#lm#pwzof>!tjgwk9#`bm#af#vpfg#wl#wkf#`qfbwjlm#lenlpw#jnslqwbmw#jmelqnbwjlm#bmgqfpvowfg#jm#wkf`loobspf#le#wkfWkjp#nfbmp#wkbwfofnfmwp#le#wkftbp#qfsob`fg#azbmbozpjp#le#wkfjmpsjqbwjlm#elqqfdbqgfg#bp#wkfnlpw#pv``fppevohmltm#bp#%rvlw8b#`lnsqfkfmpjufKjpwlqz#le#wkf#tfqf#`lmpjgfqfgqfwvqmfg#wl#wkfbqf#qfefqqfg#wlVmplvq`fg#jnbdf=\t\n?gju#`obpp>!`lmpjpwp#le#wkfpwlsSqlsbdbwjlmjmwfqfpw#jm#wkfbubjobajojwz#lebssfbqp#wl#kbuffof`wqlnbdmfwj`fmbaofPfquj`fp+evm`wjlm#le#wkfJw#jp#jnslqwbmw?,p`qjsw=?,gju=evm`wjlm+*xubq#qfobwjuf#wl#wkfbp#b#qfpvow#le#wkf#slpjwjlm#leElq#f{bnsof/#jm#nfwklg>!slpw!#tbp#elooltfg#az%bns8ngbpk8#wkfwkf#bssoj`bwjlmip!=?,p`qjsw=\x0e\tvo=?,gju=?,gju=bewfq#wkf#gfbwktjwk#qfpsf`w#wlpwzof>!sbggjmd9jp#sbqwj`vobqozgjpsobz9jmojmf8#wzsf>!pvanjw!#jp#gjujgfg#jmwl\bTA\nzk#+\vBl\bQ\x7f*qfpslmpbajojgbgbgnjmjpwqb`j/_mjmwfqmb`jlmbofp`lqqfpslmgjfmwf\fHe\fHF\fHC\fIg\fH{\fHF\fIn\fH\\\fIa\fHY\fHU\fHB\fHR\fH\\\fIk\fH^\fIg\fH{\fIg\fHn\fHv\fIm\fHD\fHR\fHY\fH^\fIk\fHy\fHS\fHD\fHT\fH\\\fHy\fHR\fH\\\fHF\fIm\fH^\fHS\fHT\fHz\fIg\fHp\fIk\fHn\fHv\fHR\fHU\fHS\fHc\fHA\fIk\fHp\fIk\fHn\fHZ\fHR\fHB\fHS\fH^\fHU\fHB\fHR\fH\\\fIl\fHp\fHR\fH{\fH\\\fHO\fH@\fHD\fHR\fHD\fIk\fHy\fIm\fHB\fHR\fH\\\fH@\fIa\fH^\fIe\fH{\fHB\fHR\fH^\fHS\fHy\fHB\fHU\fHS\fH^\fHR\fHF\fIo\fH[\fIa\fHL\fH@\fHN\fHP\fHH\fIk\fHA\fHR\fHp\fHF\fHR\fHy\fIa\fH^\fHS\fHy\fHs\fIa\fH\\\fIk\fHD\fHz\fHS\fH^\fHR\fHG\fHJ\fI`\fH\\\fHR\fHD\fHB\fHR\fHB\fH^\fIk\fHB\fHH\fHJ\fHR\fHD\fH@\fHR\fHp\fHR\fH\\\fHY\fHS\fHy\fHR\fHT\fHy\fIa\fHC\fIg\fHn\fHv\fHR\fHU\fHH\fIk\fHF\fHU\fIm\fHm\fHv\fH@\fHH\fHR\fHC\fHR\fHT\fHn\fHY\fHR\fHJ\fHJ\fIk\fHz\fHD\fIk\fHF\fHS\fHw\fH^\fIk\fHY\fHS\fHZ\fIk\fH[\fH\\\fHR\fHp\fIa\fHC\fHe\fHH\fIa\fHH\fH\\\fHB\fIm\fHn\fH@\fHd\fHJ\fIg\fHD\fIg\fHn\fHe\fHF\fHy\fH\\\fHO\fHF\fHN\fHP\fIk\fHn\fHT\fIa\fHI\fHS\fHH\fHG\fHS\fH^\fIa\fHB\fHB\fIm\fHz\fIa\fHC\fHi\fHv\fIa\fHw\fHR\fHw\fIn\fHs\fHH\fIl\fHT\fHn\fH{\fIl\fHH\fHp\fHR\fHc\fH{\fHR\fHY\fHS\fHA\fHR\fH{\fHt\fHO\fIa\fHs\fIk\fHJ\fIn\fHT\fH\\\fIk\fHJ\fHS\fHD\fIg\fHn\fHU\fHH\fIa\fHC\fHR\fHT\fIk\fHy\fIa\fHT\fH{\fHR\fHn\fHK\fIl\fHY\fHS\fHZ\fIa\fHY\fH\\\fHR\fHH\fIk\fHn\fHJ\fId\fHs\fIa\fHT\fHD\fHy\fIa\fHZ\fHR\fHT\fHR\fHB\fHD\fIk\fHi\fHJ\fHR\fH^\fHH\fH@\fHS\fHp\fH^\fIl\fHF\fIm\fH\\\fIn\fH[\fHU\fHS\fHn\fHJ\fIl\fHB\fHS\fHH\fIa\fH\\\fHy\fHY\fHS\fHH\fHR\fH\\\fIm\fHF\fHC\fIk\fHT\fIa\fHI\fHR\fHD\fHy\fH\\\fIg\fHM\fHP\fHB\fIm\fHy\fIa\fHH\fHC\fIg\fHp\fHD\fHR\fHy\fIo\fHF\fHC\fHR\fHF\fIg\fHT\fIa\fHs\fHt\fH\\\fIk\fH^\fIn\fHy\fHR\fH\\\fIa\fHC\fHY\fHS\fHv\fHR\fH\\\fHT\fIn\fHv\fHD\fHR\fHB\fIn\fH^\fIa\fHC\fHJ\fIk\fHz\fIk\fHn\fHU\fHB\fIk\fHZ\fHR\fHT\fIa\fHy\fIn\fH^\fHB\fId\fHn\fHD\fIk\fHH\fId\fHC\fHR\fH\\\fHp\fHS\fHT\fHy\fIkqpp({no!#wjwof>!.wzsf!#`lmwfmw>!wjwof!#`lmwfmw>!bw#wkf#pbnf#wjnf-ip!=?,p`qjsw=\t?!#nfwklg>!slpw!#?,psbm=?,b=?,oj=ufqwj`bo.bojdm9w,irvfqz-njm-ip!=-`oj`h+evm`wjlm+#pwzof>!sbggjmd.~*+*8\t?,p`qjsw=\t?,psbm=?b#kqfe>!?b#kqfe>!kwws9,,*8#qfwvqm#ebopf8wf{w.gf`lqbwjlm9#p`qloojmd>!ml!#alqgfq.`loobspf9bppl`jbwfg#tjwk#Abkbpb#JmglmfpjbFmdojpk#obmdvbdf?wf{w#{no9psb`f>-dje!#alqgfq>!3!?,algz=\t?,kwno=\tlufqeolt9kjggfm8jnd#pq`>!kwws9,,bggFufmwOjpwfmfqqfpslmpjaof#elq#p-ip!=?,p`qjsw=\t,ebuj`lm-j`l!#,=lsfqbwjmd#pzpwfn!#pwzof>!tjgwk92wbqdfw>!\\aobmh!=Pwbwf#Vmjufqpjwzwf{w.bojdm9ofew8\tgl`vnfmw-tqjwf+/#jm`ovgjmd#wkf#bqlvmg#wkf#tlqog*8\x0e\t?,p`qjsw=\x0e\t?!#pwzof>!kfjdkw98lufqeolt9kjggfmnlqf#jmelqnbwjlmbm#jmwfqmbwjlmbob#nfnafq#le#wkf#lmf#le#wkf#ejqpw`bm#af#elvmg#jm#?,gju=\t\n\n?,gju=\tgjpsobz9#mlmf8!=!#,=\t?ojmh#qfo>!\t##+evm`wjlm+*#xwkf#26wk#`fmwvqz-sqfufmwGfebvow+obqdf#mvnafq#le#Azybmwjmf#Fnsjqf-isd\x7fwkvna\x7fofew\x7fubpw#nbilqjwz#lenbilqjwz#le#wkf##bojdm>!`fmwfq!=Vmjufqpjwz#Sqfppglnjmbwfg#az#wkfPf`lmg#Tlqog#Tbqgjpwqjavwjlm#le#pwzof>!slpjwjlm9wkf#qfpw#le#wkf#`kbqb`wfqjyfg#az#qfo>!mleloolt!=gfqjufp#eqln#wkfqbwkfq#wkbm#wkf#b#`lnajmbwjlm#lepwzof>!tjgwk9233Fmdojpk.psfbhjmd`lnsvwfq#p`jfm`falqgfq>!3!#bow>!wkf#f{jpwfm`f#leGfnl`qbwj`#Sbqwz!#pwzof>!nbqdjm.Elq#wkjp#qfbplm/-ip!=?,p`qjsw=\t\npAzWbdMbnf+p*X3^ip!=?,p`qjsw=\x0e\t?-ip!=?,p`qjsw=\x0e\tojmh#qfo>!j`lm!#$#bow>$$#`obpp>$elqnbwjlm#le#wkfufqpjlmp#le#wkf#?,b=?,gju=?,gju=,sbdf=\t##?sbdf=\t?gju#`obpp>!`lmwaf`bnf#wkf#ejqpwabkbpb#Jmglmfpjbfmdojpk#+pjnsof*"y"W"W"["Q"U"V"@=i=l<^<\\=n=m!?gju#jg>!ellwfq!=wkf#Vmjwfg#Pwbwfp?jnd#pq`>!kwws9,,-isd\x7fqjdkw\x7fwkvna\x7f-ip!=?,p`qjsw=\x0e\t?ol`bwjlm-sqlwl`loeqbnfalqgfq>!3!#p!#,=\t?nfwb#mbnf>!?,b=?,gju=?,gju=?elmw.tfjdkw9alog8%rvlw8#bmg#%rvlw8gfsfmgjmd#lm#wkf#nbqdjm938sbggjmd9!#qfo>!mleloolt!#Sqfpjgfmw#le#wkf#wtfmwjfwk#`fmwvqzfujpjlm=\t##?,sbdfJmwfqmfw#F{solqfqb-bpzm`#>#wqvf8\x0e\tjmelqnbwjlm#balvw?gju#jg>!kfbgfq!=!#b`wjlm>!kwws9,,?b#kqfe>!kwwsp9,,?gju#jg>!`lmwfmw!?,gju=\x0e\t?,gju=\x0e\t?gfqjufg#eqln#wkf#?jnd#pq`>$kwws9,,b``lqgjmd#wl#wkf#\t?,algz=\t?,kwno=\tpwzof>!elmw.pjyf9p`qjsw#obmdvbdf>!Bqjbo/#Kfoufwj`b/?,b=?psbm#`obpp>!?,p`qjsw=?p`qjsw#slojwj`bo#sbqwjfpwg=?,wq=?,wbaof=?kqfe>!kwws9,,ttt-jmwfqsqfwbwjlm#leqfo>!pwzofpkffw!#gl`vnfmw-tqjwf+$?`kbqpfw>!vwe.;!=\tafdjmmjmd#le#wkf#qfufbofg#wkbw#wkfwfofujpjlm#pfqjfp!#qfo>!mleloolt!=#wbqdfw>!\\aobmh!=`objnjmd#wkbw#wkfkwws&0B&1E&1Ettt-nbmjefpwbwjlmp#leSqjnf#Njmjpwfq#lejmeovfm`fg#az#wkf`obpp>!`ofbqej{!=,gju=\x0e\t?,gju=\x0e\t\x0e\twkqff.gjnfmpjlmbo@kvq`k#le#Fmdobmgle#Mlqwk#@bqlojmbprvbqf#hjolnfwqfp-bggFufmwOjpwfmfqgjpwjm`w#eqln#wkf`lnnlmoz#hmltm#bpSklmfwj`#Boskbafwgf`obqfg#wkbw#wkf`lmwqloofg#az#wkfAfmibnjm#Eqbmhojmqlof.sobzjmd#dbnfwkf#Vmjufqpjwz#lejm#Tfpwfqm#Fvqlsfsfqplmbo#`lnsvwfqSqlif`w#Dvwfmafqdqfdbqgofpp#le#wkfkbp#affm#sqlslpfgwldfwkfq#tjwk#wkf=?,oj=?oj#`obpp>!jm#plnf#`lvmwqjfpnjm-ip!=?,p`qjsw=le#wkf#slsvobwjlmleej`jbo#obmdvbdf?jnd#pq`>!jnbdfp,jgfmwjejfg#az#wkfmbwvqbo#qfplvq`fp`obppjej`bwjlm#le`bm#af#`lmpjgfqfgrvbmwvn#nf`kbmj`pMfufqwkfofpp/#wkfnjoojlm#zfbqp#bdl?,algz=\x0e\t?,kwno=\x0e"y"W"W"["Q"U"V"@\twbhf#bgubmwbdf#lebmg/#b``lqgjmd#wlbwwqjavwfg#wl#wkfNj`qlplew#Tjmgltpwkf#ejqpw#`fmwvqzvmgfq#wkf#`lmwqlogju#`obpp>!kfbgfqpklqwoz#bewfq#wkfmlwbaof#f{`fswjlmwfmp#le#wklvpbmgppfufqbo#gjeefqfmwbqlvmg#wkf#tlqog-qfb`kjmd#njojwbqzjplobwfg#eqln#wkflsslpjwjlm#wl#wkfwkf#Log#WfpwbnfmwBeqj`bm#Bnfqj`bmpjmpfqwfg#jmwl#wkfpfsbqbwf#eqln#wkfnfwqlslojwbm#bqfbnbhfp#jw#slppjaofb`hmltofgdfg#wkbwbqdvbaoz#wkf#nlpwwzsf>!wf{w,`pp!=\twkf#JmwfqmbwjlmboB``lqgjmd#wl#wkf#sf>!wf{w,`pp!#,=\t`ljm`jgf#tjwk#wkfwtl.wkjqgp#le#wkfGvqjmd#wkjp#wjnf/gvqjmd#wkf#sfqjlgbmmlvm`fg#wkbw#kfwkf#jmwfqmbwjlmbobmg#nlqf#qf`fmwozafojfufg#wkbw#wkf`lmp`jlvpmfpp#bmgelqnfqoz#hmltm#bppvqqlvmgfg#az#wkfejqpw#bssfbqfg#jml``bpjlmbooz#vpfgslpjwjlm9baplovwf8!#wbqdfw>!\\aobmh!#slpjwjlm9qfobwjuf8wf{w.bojdm9`fmwfq8ib{,ojap,irvfqz,2-ab`hdqlvmg.`lolq9 wzsf>!bssoj`bwjlm,bmdvbdf!#`lmwfmw>!?nfwb#kwws.frvju>!Sqjub`z#Sloj`z?,b=f+!&0@p`qjsw#pq`>$!#wbqdfw>!\\aobmh!=Lm#wkf#lwkfq#kbmg/-isd\x7fwkvna\x7fqjdkw\x7f1?,gju=?gju#`obpp>!?gju#pwzof>!eolbw9mjmfwffmwk#`fmwvqz?,algz=\x0e\t?,kwno=\x0e\t?jnd#pq`>!kwws9,,p8wf{w.bojdm9`fmwfqelmw.tfjdkw9#alog8#B``lqgjmd#wl#wkf#gjeefqfm`f#afwtffm!#eqbnfalqgfq>!3!#!#pwzof>!slpjwjlm9ojmh#kqfe>!kwws9,,kwno7,ollpf-gwg!=\tgvqjmd#wkjp#sfqjlg?,wg=?,wq=?,wbaof=`olpfoz#qfobwfg#wlelq#wkf#ejqpw#wjnf8elmw.tfjdkw9alog8jmsvw#wzsf>!wf{w!#?psbm#pwzof>!elmw.lmqfbgzpwbwf`kbmdf\n?gju#`obpp>!`ofbqgl`vnfmw-ol`bwjlm-#Elq#f{bnsof/#wkf#b#tjgf#ubqjfwz#le#?"GL@WZSF#kwno=\x0e\t?%maps8%maps8%maps8!=?b#kqfe>!kwws9,,pwzof>!eolbw9ofew8`lm`fqmfg#tjwk#wkf>kwws&0B&1E&1Ettt-jm#slsvobq#`vowvqfwzsf>!wf{w,`pp!#,=jw#jp#slppjaof#wl#Kbqubqg#Vmjufqpjwzwzofpkffw!#kqfe>!,wkf#nbjm#`kbqb`wfqL{elqg#Vmjufqpjwz##mbnf>!hfztlqgp!#`pwzof>!wf{w.bojdm9wkf#Vmjwfg#Hjmdglnefgfqbo#dlufqmnfmw?gju#pwzof>!nbqdjm#gfsfmgjmd#lm#wkf#gfp`qjswjlm#le#wkf?gju#`obpp>!kfbgfq-njm-ip!=?,p`qjsw=gfpwqv`wjlm#le#wkfpojdkwoz#gjeefqfmwjm#b``lqgbm`f#tjwkwfof`lnnvmj`bwjlmpjmgj`bwfp#wkbw#wkfpklqwoz#wkfqfbewfqfpsf`jbooz#jm#wkf#Fvqlsfbm#`lvmwqjfpKltfufq/#wkfqf#bqfpq`>!kwws9,,pwbwj`pvddfpwfg#wkbw#wkf!#pq`>!kwws9,,ttt-b#obqdf#mvnafq#le#Wfof`lnnvmj`bwjlmp!#qfo>!mleloolt!#wKloz#Qlnbm#Fnsfqlqbonlpw#f{`ovpjufoz!#alqgfq>!3!#bow>!Pf`qfwbqz#le#Pwbwf`vonjmbwjmd#jm#wkf@JB#Tlqog#Eb`wallhwkf#nlpw#jnslqwbmwbmmjufqpbqz#le#wkfpwzof>!ab`hdqlvmg.?oj=?fn=?b#kqfe>!,wkf#Bwobmwj`#L`fbmpwqj`woz#psfbhjmd/pklqwoz#afelqf#wkfgjeefqfmw#wzsfp#lewkf#Lwwlnbm#Fnsjqf=?jnd#pq`>!kwws9,,Bm#Jmwqlgv`wjlm#wl`lmpfrvfm`f#le#wkfgfsbqwvqf#eqln#wkf@lmefgfqbwf#Pwbwfpjmgjdfmlvp#sflsofpSql`ffgjmdp#le#wkfjmelqnbwjlm#lm#wkfwkflqjfp#kbuf#affmjmuloufnfmw#jm#wkfgjujgfg#jmwl#wkqffbgib`fmw#`lvmwqjfpjp#qfpslmpjaof#elqgjpplovwjlm#le#wkf`loobalqbwjlm#tjwktjgfoz#qfdbqgfg#bpkjp#`lmwfnslqbqjfpelvmgjmd#nfnafq#leGlnjmj`bm#Qfsvaoj`dfmfqbooz#b``fswfgwkf#slppjajojwz#lebqf#bopl#bubjobaofvmgfq#`lmpwqv`wjlmqfpwlqbwjlm#le#wkfwkf#dfmfqbo#svaoj`jp#bonlpw#fmwjqfozsbppfp#wkqlvdk#wkfkbp#affm#pvddfpwfg`lnsvwfq#bmg#ujgflDfqnbmj`#obmdvbdfp#b``lqgjmd#wl#wkf#gjeefqfmw#eqln#wkfpklqwoz#bewfqtbqgpkqfe>!kwwsp9,,ttt-qf`fmw#gfufolsnfmwAlbqg#le#Gjqf`wlqp?gju#`obpp>!pfbq`k\x7f#?b#kqfe>!kwws9,,Jm#sbqwj`vobq/#wkfNvowjsof#ellwmlwfplq#lwkfq#pvapwbm`fwklvpbmgp#le#zfbqpwqbmpobwjlm#le#wkf?,gju=\x0e\t?,gju=\x0e\t\x0e\t?b#kqfe>!jmgf{-skstbp#fpwbaojpkfg#jmnjm-ip!=?,p`qjsw=\tsbqwj`jsbwf#jm#wkfb#pwqlmd#jmeovfm`fpwzof>!nbqdjm.wls9qfsqfpfmwfg#az#wkfdqbgvbwfg#eqln#wkfWqbgjwjlmbooz/#wkfFofnfmw+!p`qjsw!*8Kltfufq/#pjm`f#wkf,gju=\t?,gju=\t?gju#ofew8#nbqdjm.ofew9sqlwf`wjlm#bdbjmpw38#ufqwj`bo.bojdm9Vmelqwvmbwfoz/#wkfwzsf>!jnbdf,{.j`lm,gju=\t?gju#`obpp>!#`obpp>!`ofbqej{!=?gju#`obpp>!ellwfq\n\n?,gju=\t\n\n?,gju=\twkf#nlwjlm#sj`wvqf<}=f!t0-lqd,2:::,{kwno!=?b#wbqdfw>!\\aobmh!#wf{w,kwno8#`kbqpfw>!#wbqdfw>!\\aobmh!=?wbaof#`foosbggjmd>!bvwl`lnsofwf>!lee!#wf{w.bojdm9#`fmwfq8wl#obpw#ufqpjlm#az#ab`hdqlvmg.`lolq9# !#kqfe>!kwws9,,ttt-,gju=?,gju=?gju#jg>?b#kqfe>! !#`obpp>!!=?jnd#pq`>!kwws9,,`qjsw!#pq`>!kwws9,,\t?p`qjsw#obmdvbdf>!,,FM!#!kwws9,,ttt-tfm`lgfVQJ@lnslmfmw+!#kqfe>!ibubp`qjsw9?gju#`obpp>!`lmwfmwgl`vnfmw-tqjwf+$?p`slpjwjlm9#baplovwf8p`qjsw#pq`>!kwws9,,#pwzof>!nbqdjm.wls9-njm-ip!=?,p`qjsw=\t?,gju=\t?gju#`obpp>!t0-lqd,2:::,{kwno!#\t\x0e\t?,algz=\x0e\t?,kwno=gjpwjm`wjlm#afwtffm,!#wbqdfw>!\\aobmh!=?ojmh#kqfe>!kwws9,,fm`lgjmd>!vwe.;!<=\tt-bggFufmwOjpwfmfq!kwws9,,ttt-j`lm!#kqfe>!kwws9,,#pwzof>!ab`hdqlvmg9wzsf>!wf{w,`pp!#,=\tnfwb#sqlsfqwz>!ld9w?jmsvw#wzsf>!wf{w!##pwzof>!wf{w.bojdm9wkf#gfufolsnfmw#le#wzofpkffw!#wzsf>!wfkwno8#`kbqpfw>vwe.;jp#`lmpjgfqfg#wl#afwbaof#tjgwk>!233&!#Jm#bggjwjlm#wl#wkf#`lmwqjavwfg#wl#wkf#gjeefqfm`fp#afwtffmgfufolsnfmw#le#wkf#Jw#jp#jnslqwbmw#wl#?,p`qjsw=\t\t?p`qjsw##pwzof>!elmw.pjyf92=?,psbm=?psbm#jg>daOjaqbqz#le#@lmdqfpp?jnd#pq`>!kwws9,,jnFmdojpk#wqbmpobwjlmB`bgfnz#le#P`jfm`fpgju#pwzof>!gjpsobz9`lmpwqv`wjlm#le#wkf-dfwFofnfmwAzJg+jg*jm#`lmivm`wjlm#tjwkFofnfmw+$p`qjsw$*8#?nfwb#sqlsfqwz>!ld9<}=f!wf{w!#mbnf>!=Sqjub`z#Sloj`z?,b=bgnjmjpwfqfg#az#wkffmbaofPjmdofQfrvfpwpwzof>%rvlw8nbqdjm9?,gju=?,gju=?,gju=?=?jnd#pq`>!kwws9,,j#pwzof>%rvlw8eolbw9qfefqqfg#wl#bp#wkf#wlwbo#slsvobwjlm#lejm#Tbpkjmdwlm/#G-@-#pwzof>!ab`hdqlvmg.bnlmd#lwkfq#wkjmdp/lqdbmjybwjlm#le#wkfsbqwj`jsbwfg#jm#wkfwkf#jmwqlgv`wjlm#lejgfmwjejfg#tjwk#wkfej`wjlmbo#`kbqb`wfq#L{elqg#Vmjufqpjwz#njpvmgfqpwbmgjmd#leWkfqf#bqf/#kltfufq/pwzofpkffw!#kqfe>!,@lovnajb#Vmjufqpjwzf{sbmgfg#wl#jm`ovgfvpvbooz#qfefqqfg#wljmgj`bwjmd#wkbw#wkfkbuf#pvddfpwfg#wkbwbeejojbwfg#tjwk#wkf`lqqfobwjlm#afwtffmmvnafq#le#gjeefqfmw=?,wg=?,wq=?,wbaof=Qfsvaoj`#le#Jqfobmg\t?,p`qjsw=\t?p`qjsw#vmgfq#wkf#jmeovfm`f`lmwqjavwjlm#wl#wkfLeej`jbo#tfapjwf#lekfbgrvbqwfqp#le#wkf`fmwfqfg#bqlvmg#wkfjnsoj`bwjlmp#le#wkfkbuf#affm#gfufolsfgEfgfqbo#Qfsvaoj`#leaf`bnf#jm`qfbpjmdoz`lmwjmvbwjlm#le#wkfMlwf/#kltfufq/#wkbwpjnjobq#wl#wkbw#le#`bsbajojwjfp#le#wkfb``lqgbm`f#tjwk#wkfsbqwj`jsbmwp#jm#wkfevqwkfq#gfufolsnfmwvmgfq#wkf#gjqf`wjlmjp#lewfm#`lmpjgfqfgkjp#zlvmdfq#aqlwkfq?,wg=?,wq=?,wbaof=?b#kwws.frvju>![.VB.skzpj`bo#sqlsfqwjfple#Aqjwjpk#@lovnajbkbp#affm#`qjwj`jyfg+tjwk#wkf#f{`fswjlmrvfpwjlmp#balvw#wkfsbppjmd#wkqlvdk#wkf3!#`foosbggjmd>!3!#wklvpbmgp#le#sflsofqfgjqf`wp#kfqf-#Elqkbuf#`kjogqfm#vmgfq&0F&0@,p`qjsw&0F!**8?b#kqfe>!kwws9,,ttt-?oj=?b#kqfe>!kwws9,,pjwf\\mbnf!#`lmwfmw>!wf{w.gf`lqbwjlm9mlmfpwzof>!gjpsobz9#mlmf?nfwb#kwws.frvju>![.mft#Gbwf+*-dfwWjnf+*#wzsf>!jnbdf,{.j`lm!?,psbm=?psbm#`obpp>!obmdvbdf>!ibubp`qjswtjmglt-ol`bwjlm-kqfe?b#kqfe>!ibubp`qjsw9..=\x0e\t?p`qjsw#wzsf>!w?b#kqfe>$kwws9,,ttt-klqw`vw#j`lm!#kqfe>!?,gju=\x0e\t?gju#`obpp>!?p`qjsw#pq`>!kwws9,,!#qfo>!pwzofpkffw!#w?,gju=\t?p`qjsw#wzsf>,b=#?b#kqfe>!kwws9,,#booltWqbmpsbqfm`z>![.VB.@lnsbwjaof!#`lmqfobwjlmpkjs#afwtffm\t?,p`qjsw=\x0e\t?p`qjsw#?,b=?,oj=?,vo=?,gju=bppl`jbwfg#tjwk#wkf#sqldqbnnjmd#obmdvbdf?,b=?b#kqfe>!kwws9,,?,b=?,oj=?oj#`obpp>!elqn#b`wjlm>!kwws9,,?gju#pwzof>!gjpsobz9wzsf>!wf{w!#mbnf>!r!?wbaof#tjgwk>!233&!#ab`hdqlvmg.slpjwjlm9!#alqgfq>!3!#tjgwk>!qfo>!pklqw`vw#j`lm!#k5=?vo=?oj=?b#kqfe>!##?nfwb#kwws.frvju>!`pp!#nfgjb>!p`qffm!#qfpslmpjaof#elq#wkf#!#wzsf>!bssoj`bwjlm,!#pwzof>!ab`hdqlvmg.kwno8#`kbqpfw>vwe.;!#booltwqbmpsbqfm`z>!pwzofpkffw!#wzsf>!wf\x0e\t?nfwb#kwws.frvju>!=?,psbm=?psbm#`obpp>!3!#`foopsb`jmd>!3!=8\t?,p`qjsw=\t?p`qjsw#plnfwjnfp#`boofg#wkfglfp#mlw#mf`fppbqjozElq#nlqf#jmelqnbwjlmbw#wkf#afdjmmjmd#le#?"GL@WZSF#kwno=?kwnosbqwj`vobqoz#jm#wkf#wzsf>!kjggfm!#mbnf>!ibubp`qjsw9uljg+3*8!feef`wjufmfpp#le#wkf#bvwl`lnsofwf>!lee!#dfmfqbooz#`lmpjgfqfg=?jmsvw#wzsf>!wf{w!#!=?,p`qjsw=\x0e\t?p`qjswwkqlvdklvw#wkf#tlqog`lnnlm#njp`lm`fswjlmbppl`jbwjlm#tjwk#wkf?,gju=\t?,gju=\t?gju#`gvqjmd#kjp#ojefwjnf/`lqqfpslmgjmd#wl#wkfwzsf>!jnbdf,{.j`lm!#bm#jm`qfbpjmd#mvnafqgjsolnbwj`#qfobwjlmpbqf#lewfm#`lmpjgfqfgnfwb#`kbqpfw>!vwe.;!#?jmsvw#wzsf>!wf{w!#f{bnsofp#jm`ovgf#wkf!=?jnd#pq`>!kwws9,,jsbqwj`jsbwjlm#jm#wkfwkf#fpwbaojpknfmw#le\t?,gju=\t?gju#`obpp>!%bns8maps8%bns8maps8wl#gfwfqnjmf#tkfwkfqrvjwf#gjeefqfmw#eqlnnbqhfg#wkf#afdjmmjmdgjpwbm`f#afwtffm#wkf`lmwqjavwjlmp#wl#wkf`lmeoj`w#afwtffm#wkftjgfoz#`lmpjgfqfg#wltbp#lmf#le#wkf#ejqpwtjwk#ubqzjmd#gfdqffpkbuf#psf`vobwfg#wkbw+gl`vnfmw-dfwFofnfmwsbqwj`jsbwjmd#jm#wkflqjdjmbooz#gfufolsfgfwb#`kbqpfw>!vwe.;!=#wzsf>!wf{w,`pp!#,=\tjmwfq`kbmdfbaoz#tjwknlqf#`olpfoz#qfobwfgpl`jbo#bmg#slojwj`bowkbw#tlvog#lwkfqtjpfsfqsfmgj`vobq#wl#wkfpwzof#wzsf>!wf{w,`ppwzsf>!pvanjw!#mbnf>!ebnjojfp#qfpjgjmd#jmgfufolsjmd#`lvmwqjfp`lnsvwfq#sqldqbnnjmdf`lmlnj`#gfufolsnfmwgfwfqnjmbwjlm#le#wkfelq#nlqf#jmelqnbwjlmlm#pfufqbo#l``bpjlmpslqwvdv/Fp#+Fvqlsfv*VWE.;!#pfwWjnflvw+evm`wjlm+*gjpsobz9jmojmf.aol`h8?jmsvw#wzsf>!pvanjw!#wzsf#>#$wf{w,ibubp`qj?jnd#pq`>!kwws9,,ttt-!#!kwws9,,ttt-t0-lqd,pklqw`vw#j`lm!#kqfe>!!#bvwl`lnsofwf>!lee!#?,b=?,gju=?gju#`obpp>?,b=?,oj=\t?oj#`obpp>!`pp!#wzsf>!wf{w,`pp!#?elqn#b`wjlm>!kwws9,,{w,`pp!#kqfe>!kwws9,,ojmh#qfo>!bowfqmbwf!#\x0e\t?p`qjsw#wzsf>!wf{w,#lm`oj`h>!ibubp`qjsw9+mft#Gbwf*-dfwWjnf+*~kfjdkw>!2!#tjgwk>!2!#Sflsof$p#Qfsvaoj`#le##?b#kqfe>!kwws9,,ttt-wf{w.gf`lqbwjlm9vmgfqwkf#afdjmmjmd#le#wkf#?,gju=\t?,gju=\t?,gju=\tfpwbaojpknfmw#le#wkf#?,gju=?,gju=?,gju=?,g ujftslqwxnjm.kfjdkw9\t?p`qjsw#pq`>!kwws9,,lswjlm=?lswjlm#ubovf>lewfm#qfefqqfg#wl#bp#,lswjlm=\t?lswjlm#ubov?"GL@WZSF#kwno=\t?"..XJmwfqmbwjlmbo#Bjqslqw=\t?b#kqfe>!kwws9,,ttt?,b=?b#kqfe>!kwws9,,t\fTL\fT^\fTE\fT^\fUh\fT{\fTN\roI\ro|\roL\ro{\roO\rov\rot\nAO\x05Gx\bTA\nzk#+\vUm\x05Gx*\fHD\fHS\fH\\\fIa\fHJ\fIk\fHZ\fHM\fHR\fHe\fHD\fH^\fIg\fHM\fHy\fIa\fH[\fIk\fHH\fIa\fH\\\fHp\fHR\fHD\fHy\fHR\fH\\\fIl\fHT\fHn\fH@\fHn\fHK\fHS\fHH\fHT\fIa\fHI\fHR\fHF\fHD\fHR\fHT\fIa\fHY\fIl\fHy\fHR\fH\\\fHT\fHn\fHT\fIa\fHy\fH\\\fHO\fHT\fHR\fHB\fH{\fIa\fH\\\fIl\fHv\fHS\fHs\fIa\fHL\fIg\fHn\fHY\fHS\fHp\fIa\fHr\fHR\fHD\fHi\fHB\fIk\fH\\\fHS\fHy\fHR\fHY\fHS\fHA\fHS\fHD\fIa\fHD\fH{\fHR\fHM\fHS\fHC\fHR\fHm\fHy\fIa\fHC\fIg\fHn\fHy\fHS\fHT\fIm\fH\\\fHy\fIa\fH[\fHR\fHF\fHU\fIm\fHm\fHv\fHH\fIl\fHF\fIa\fH\\\fH@\fHn\fHK\fHD\fHs\fHS\fHF\fIa\fHF\fHO\fIl\fHy\fIa\fH\\\fHS\fHy\fIk\fHs\fHF\fIa\fH\\\fHR\fH\\\fHn\fHA\fHF\fIa\fH\\\fHR\fHF\fIa\fHH\fHB\fHR\fH^\fHS\fHy\fIg\fHn\fH\\\fHG\fHP\fIa\fHH\fHR\fH\\\fHD\fHS\fH\\\fIa\fHB\fHR\fHO\fH^\fHS\fHB\fHS\fHs\fIk\fHMgfp`qjswjlm!#`lmwfmw>!gl`vnfmw-ol`bwjlm-sqlw-dfwFofnfmwpAzWbdMbnf+?"GL@WZSF#kwno=\t?kwno#?nfwb#`kbqpfw>!vwe.;!=9vqo!#`lmwfmw>!kwws9,,-`pp!#qfo>!pwzofpkffw!pwzof#wzsf>!wf{w,`pp!=wzsf>!wf{w,`pp!#kqfe>!t0-lqd,2:::,{kwno!#{nowzsf>!wf{w,ibubp`qjsw!#nfwklg>!dfw!#b`wjlm>!ojmh#qfo>!pwzofpkffw!##>#gl`vnfmw-dfwFofnfmwwzsf>!jnbdf,{.j`lm!#,=`foosbggjmd>!3!#`foops-`pp!#wzsf>!wf{w,`pp!#?,b=?,oj=?oj=?b#kqfe>!!#tjgwk>!2!#kfjdkw>!2!!=?b#kqfe>!kwws9,,ttt-pwzof>!gjpsobz9mlmf8!=bowfqmbwf!#wzsf>!bssoj.,,T0@,,GWG#[KWNO#2-3#foopsb`jmd>!3!#`foosbg#wzsf>!kjggfm!#ubovf>!,b=%maps8?psbm#qlof>!p\t?jmsvw#wzsf>!kjggfm!#obmdvbdf>!IbubP`qjsw!##gl`vnfmw-dfwFofnfmwpAd>!3!#`foopsb`jmd>!3!#zsf>!wf{w,`pp!#nfgjb>!wzsf>$wf{w,ibubp`qjsw$tjwk#wkf#f{`fswjlm#le#zsf>!wf{w,`pp!#qfo>!pw#kfjdkw>!2!#tjgwk>!2!#>$(fm`lgfVQJ@lnslmfmw+?ojmh#qfo>!bowfqmbwf!#\talgz/#wq/#jmsvw/#wf{wnfwb#mbnf>!qlalwp!#`lmnfwklg>!slpw!#b`wjlm>!=\t?b#kqfe>!kwws9,,ttt-`pp!#qfo>!pwzofpkffw!#?,gju=?,gju=?gju#`obppobmdvbdf>!ibubp`qjsw!=bqjb.kjggfm>!wqvf!=.[?qjsw!#wzsf>!wf{w,ibubpo>38~*+*8\t+evm`wjlm+*xab`hdqlvmg.jnbdf9#vqo+,b=?,oj=?oj=?b#kqfe>!k\n\n?oj=?b#kqfe>!kwws9,,bwlq!#bqjb.kjggfm>!wqv=#?b#kqfe>!kwws9,,ttt-obmdvbdf>!ibubp`qjsw!#,lswjlm=\t?lswjlm#ubovf,gju=?,gju=?gju#`obpp>qbwlq!#bqjb.kjggfm>!wqf>+mft#Gbwf*-dfwWjnf+*slqwvdv/Fp#+gl#Aqbpjo*!wf{w,?nfwb#kwws.frvju>!@lmwfqbmpjwjlmbo,,FM!#!kwws9?kwno#{nomp>!kwws9,,ttt.,,T0@,,GWG#[KWNO#2-3#WGWG,{kwno2.wqbmpjwjlmbo,,ttt-t0-lqd,WQ,{kwno2,sf#>#$wf{w,ibubp`qjsw$8?nfwb#mbnf>!gfp`qjswjlmsbqfmwMlgf-jmpfqwAfelqf?jmsvw#wzsf>!kjggfm!#mbip!#wzsf>!wf{w,ibubp`qj+gl`vnfmw*-qfbgz+evm`wjp`qjsw#wzsf>!wf{w,ibubpjnbdf!#`lmwfmw>!kwws9,,VB.@lnsbwjaof!#`lmwfmw>wno8#`kbqpfw>vwe.;!#,=\tojmh#qfo>!pklqw`vw#j`lm?ojmh#qfo>!pwzofpkffw!#?,p`qjsw=\t?p`qjsw#wzsf>>#gl`vnfmw-`qfbwfFofnfm?b#wbqdfw>!\\aobmh!#kqfe>#gl`vnfmw-dfwFofnfmwpAjmsvw#wzsf>!wf{w!#mbnf>b-wzsf#>#$wf{w,ibubp`qjmsvw#wzsf>!kjggfm!#mbnfkwno8#`kbqpfw>vwe.;!#,=gwg!=\t?kwno#{nomp>!kwws.,,T0@,,GWG#KWNO#7-32#WfmwpAzWbdMbnf+$p`qjsw$*jmsvw#wzsf>!kjggfm!#mbn?p`qjsw#wzsf>!wf{w,ibubp!#pwzof>!gjpsobz9mlmf8!=gl`vnfmw-dfwFofnfmwAzJg+>gl`vnfmw-`qfbwfFofnfmw+$#wzsf>$wf{w,ibubp`qjsw$jmsvw#wzsf>!wf{w!#mbnf>!g-dfwFofnfmwpAzWbdMbnf+pmj`bo!#kqfe>!kwws9,,ttt-@,,GWG#KWNO#7-32#Wqbmpjw?pwzof#wzsf>!wf{w,`pp!=\t\t?pwzof#wzsf>!wf{w,`pp!=jlmbo-gwg!=\t?kwno#{nomp>kwws.frvju>!@lmwfmw.Wzsfgjmd>!3!#`foopsb`jmd>!3!kwno8#`kbqpfw>vwe.;!#,=\t#pwzof>!gjpsobz9mlmf8!=??oj=?b#kqfe>!kwws9,,ttt-#wzsf>$wf{w,ibubp`qjsw$=&*&'&^&\x88\u0178\u0c3e&\u01ad&\u0192&)&^&%&'&\x82&P&1&\xb1&3&]&m&u&E&t&C&\xcf&V&V&/&>&6&\u0f76\u177co&p&@&E&M&P&x&@&F&e&\xcc&7&:&(&D&0&C&)&.&F&-&1&(&L&F&1\u025e*\u03ea\u21f3&\u1372&K&;&)&E&H&P&0&?&9&V&\x81&-&v&a&,&E&)&?&=&'&'&B&\u0d2e&\u0503&\u0316*&*8&%&%&&&%,)&\x9a&>&\x86&7&]&F&2&>&J&6&n&2&%&?&\x8e&2&6&J&g&-&0&,&*&J&*&O&)&6&(&<&B&N&.&P&@&2&.&W&M&%\u053c\x84(,(<&,&\u03da&\u18c7&-&,(%&(&%&(\u013b0&X&D&\x81&j&'&J&(&.&B&3&Z&R&h&3&E&E&<\xc6-\u0360\u1ef3&%8?&@&,&Z&@&0&J&,&^&x&_&6&C&6&C\u072c\u2a25&f&-&-&-&-&,&J&2&8&z&8&C&Y&8&-&d&\u1e78\xcc-&7&1&F&7&t&W&7&I&.&.&^&=\u0f9c\u19d3&8(>&/&/&\u077b')'\u1065')'%@/&0&%\u043e\u09c0*&*@&C\u053d\u05d4\u0274\u05eb4\u0dd7\u071a\u04d16\u0d84&/\u0178\u0303Z&*%\u0246\u03ff&\u0134&1\xa8\u04b4\u0174",w,"AAAAKKLLKKKKKJJIHHIHHGGFF"),function(f,w){if(w.length>31)throw new Error("sizeBits length must be at most "+wf(31));for(let f=0;f<4;++f)if(0!==w[f])throw new Error("first "+wf(4)+" must be 0");const b=N,j=$;j.set(w.subarray(0,w.length),0);let l=0;const m=f.length;for(let f=0;f=31)throw new Error("newSizeBits values must be less than 31");if(l+=f<m)throw new Error("newSizeBits is inconsistent: overflow")}}for(let f=w.length;f<32;++f)b[f]=l;if(l!==m)throw new Error("newSizeBits is inconsistent: underflow");L=f}(f,w)}function ff(f){this.data=new Int8Array(0),this.offset=0,this.data=f}function wf(f){return f.toString()}function bf(f,w,b,j){if(null===f.input)return-1;const l=f.input;let m=Math.min(l.offset+j,l.data.length),p=m-l.offset;return w.set(l.data.subarray(l.offset,m),b),l.offset+=p,p}return function(f,w){let b=new Z;if(b.input=new ff(f),v(b),w){let f=w.customDictionary;f&&function(f,w){if(1!==f.j)throw new Error("State MUST be freshly initialized");if(0===f.Vf&&(f.Tf=new Array(16),f.df=new Int32Array(16),f.tf=-1),15===f.Vf)throw new Error("Too many dictionary chunks");f.Tf[f.Vf]=w,f.Vf++,f.vf+=w.length,f.df[f.Vf]=f.vf}(b,f)}let j=0,l=[];for(;;){let f=new Int8Array(16384);if(l.push(f),b.nf=f,b.gf=0,b.lf=16384,b.mf=0,V(b),j+=b.mf,b.mf<16384)break}!function(f){if(0===f.j)throw new Error("State MUST be initialized");11!==f.j&&(f.j=11,f.input=null)}(b);let m=new Int8Array(j),p=0;for(let f=0;f + + + + Awesome Blazor Browser + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
Loading...
+ + + +
+
+  + +
+ Awesome Blazor Browser +
+
+ This is a browser for + "Awesome Blazor".
+ Special thanks to contributor's great works! +
+ +
Loading...
+
+ +

Theme

+
+
+
+ +
+ Awesome Blazor Awesome

+
+

A collection of awesome Blazor resources.

+
+

Blazor is a .NET web framework using C#/Razor and HTML that runs in the browser with WebAssembly.

+

Contributions are always welcome! Please take a look at the contribution guidelines pages first. Thanks to all contributors, you're awesome and wouldn't be possible without you!

+

If you need to search on this list you can try this great website: Awesome Blazor Browser. +Thanks @jsakamoto for this! Source code stars last commit.

+ Introduction
+ What is Blazor?

Blazor is a .NET web framework to build client web apps with C#.

+

Blazor lets you build interactive web UIs using C# instead of JavaScript. Blazor apps are composed of reusable web UI components implemented using C#, HTML, and CSS. Both client and server code is written in C#, allowing you to share code and libraries. +More information on the official Blazor website.

+ Get started

To get started with Blazor, follow the instructions in the Blazor Get Started documentation.

+

Doing the Build a web app with Blazor learning session on Microsoft Learn can also be a good idea. Another great resource to start is the beginner serie by Jeff Fritz on Channel9 or YouTube.

+ General
+
+
Archives of the ASP.NET blog about Blazor.
+
+
Official website of Blazor, from Microsoft.
+
+
Blazor courses on Microsoft Learn.
+
+
Daily builds of the 'dev' branch of Blazor.
+
+
Curated extensions for Microsoft ASP.Net Core Blazor.
+
+
Unofficial documentation website.
+
+
Official basic demo website.
+
+
Official documentation, by Microsoft.
+
GitHub StarsLast Commit
+
Migration of a traditional ASP.NET Web Forms app to Blazor, sample by Microsoft Architecture.
+
+
FAQ.
+
GitHub StarsLast Commit
+
The official Blazor repository (which is the ASP.NET Core repository).
+
+
'Hello World' sample.
+
+
Introduction to ASP.NET Core.
+
GitHub StarsLast Commit
+
Build a complete Blazor app and learn about the various Blazor framework features along the way.
+
+
ASP.NET Core Blazor WebAssembly performance best practices, by Pranav Krishnamoorthy and Steve Sanderson.
+
+
.NET 6 planning process.
+ Templates
+
GitHub StarsLast Commit
+
    +
  • Solution templates using .Net MAUI and Blazor with out-of-the-box best practices enabling fast and high-quality cross-platform development for web, android, iOS, and Windows with native beautiful Blazor components. The projects created by these templates contain everything required for developing real-world applications, including (but not limited to) CI/CD pipelines, Infra as Code for Azure, localization, multi-mode development (Blazor Server/WASM/Hybrid), builtin bullet proof exception handling, etc. Read more.
  • +
+
GitHub StarsLast Commit
+
    +
  • Clean Architecture Solution Template for Blazor WebAssembly built with MudBlazor Components. This project will make your Blazor Learning Process much easier than you anticipate. Blazor Hero is meant to be an Enterprise Level Boilerplate, which comes free of cost, completely open sourced. Read the Quick Start Guide here.
  • +
+
GitHub StarsLast Commit
+
    +
  • This template can be used to create a Blazor WASM application hosted in an ASP.NET Core Web app using Azure AD and Microsoft.Identity.Web to authenticate using the BFF security architecture. (server authentication) This removes the tokens form the browser and uses cookies with each HTTP request, response. The template also adds the required security headers as best it can for a Blazor application. Read the Quick Start Guide here.
  • +
+
GitHub StarsLast Commit
+
    +
  • This template can be used to create a Blazor WASM application hosted in an ASP.NET Core Web app using Azure B2C and Microsoft.Identity.Web to authenticate using the BFF security architecture. (server authentication) This removes the tokens form the browser and uses cookies with each HTTP request, response. The template also adds the required security headers as best it can for a Blazor application. Read the Quick Start Guide here.
  • +
+
GitHub StarsLast Commit
+
Serie of videos on YouTube who explain how to build your own IDE from scratch with Blazor and .NET. Starting point repo . Blazor Studio repo .
+
+
This is a simple template for the .NET CLI which allows to create a Blazor project ready to be deployed in an Azure Static Web Apps. It allows to create an Azure Function project as backend.
+ Sample Projects
+ AI
+
GitHub StarsLast Commit
+
.NET 7 SDK for OpenAI with a Blazor Server playground.
+
Last Commit
+
Interactive Face Detection & Recognition tutorial with hands-on code samples. State-of-the-art local face AI showcase. Blazor Server & Hybrid.
+ Authentication
+
GitHub StarsLast Commit
+
Real World Admin Dashboard / Starter kit with IdentityServer4 Material Design. Demo.
+
GitHub StarsLast Commit
+
OpenID/Connect server base on IdentityServer4.
+
GitHub StarsLast Commit
+
A sample project showcasing a Blazor app using EF Core with Identity authentication.
+
GitHub StarsLast Commit
+
The right way to use OpenID Connect on Blazor.
+
Last Commit
+
Blazor WASM, Azure AD, REST & gRPC.
+
Last Commit
+
Blazor WebAssembly application using OpenID Connect (OIDC) authentication with Microsoft Identity and Keycloak.
+
Last Commit
+
This repository contains a Blazor WebAssembly application implementing a simple Quiz manager secured by Auth0. The implementation details are described in the following article: Securing Blazor WebAssembly Apps.
+ CMS
+
GitHub StarsLast Commit
+
.NET 5 ASP.NET Core Blogging application with Blazor Admin Dashboard. Demo.
+
GitHub StarsLast Commit
+
Migration of a traditional ASP.NET Web Forms app to Blazor.
+
GitHub StarsLast Commit
+
JHipster is a well-known platform for generating modern application in java world. JHipster provides a blueprints system that allows to override the default behavior of the generator. JHipster.NET is a blueprint that overrides the back-end part, originally generated in spring boot, by back-end in asp.net core. For the front-end all the common language can be used (angular, react), including Blazor.
+
GitHub StarsLast Commit
+
A code-first, extensible Blazor app that generates a CMS for your own database.
+
GitHub StarsLast Commit
+
Simple shop application built with Blazor WebAssembly.
+
Last Commit
+
A simple starter site for Umbraco v9, making use of Blazor WebAssembly with Tailwind CSS/UI. A project that I use to play around and experiment with Umbraco 9, Blazor WebAssembly, TailwindCSS, the Block List Editor, and several other concepts.
+ Games
+
GitHub StarsLast Commit
+
2D game built with .NET and C# on a Twitch stream. Trains is available to play online at wengier.com/Trains.NET.
+
GitHub StarsLast Commit
+
Collection of .NET 8 C# applications consuming a single .NET Standard project running in: Blazor Client (WebAssembly), Blazor Server, Electron (via Blazor Server), WPF, WinForms, Xamarin, MAUI. Demo.
+
GitHub StarsLast Commit
+
Blazor port of DiabloWeb, making it a double WebAssembly app: a WebAssembly (C#) PWA hosting a WebAssembly (C++) game. Demo.
+
GitHub StarsLast Commit
+
Fusion + Blazor sample and a fully functional web app allowing you to play real-time multiplayer board games. Demo.
+
GitHub StarsLast Commit
+
Wolfenstein 3D ported to modern C# and Blazor. Article.
+
Last Commit
+
ZX Spectrum emulator running on Blazor WebAssembly. Demo.
+
Last Commit
+
Simple clone of popular Wordle game in Blazor. Demo.
+ Hybrid
+
+
Host Razor Components inside an Electron shell. This allows for modern, high-performance cross-platform desktop apps built with .NET and web technologies.
+
GitHub StarsLast Commit
+
Build native, cross-platform desktop apps that are lighter than light. Photino is a lightweight open-source framework for building native, cross-platform desktop applications with Web UI technology.
+
Last Commit
+
Example of using Umbraco Heartcore with Blazor.
+
+
With some tweaks and limitations you can run Blazor Wasm on Net Framework 4.x or in another environment. Explanation on Medium.
+
Last Commit
+
RemoteBlazorWebView enables you to interact with the user interface of a program developed with either the BlazorWebView WPF control or WinForms control using a web browser.
+
Last Commit
+
Demonstrates how an existing Angular app can be migrated to Blazor gradually by integrating Blazor components, including calling Angular service methods. Demo.
+ IDE
+
GitHub StarsLast Commit
+
IDE for .NET solutions written using a Photino host, Blazor UI, and C#.
+
Last Commit
+
IDE for the Picat logic programming language based on the Monaco Editor. Demo.
+ IoT
+
GitHub StarsLast Commit
+
PresenceLight is a solution to broadcast your various statuses to a Phillips Hue or LIFX light bulb. Some statuses you can broadcast are: your availability in Microsoft Teams, your current Windows 10 theme, and a theme or color of your choosing. Blog post. Demo video.
+
Last Commit
+
In this sample, a Meadow microcontroller polls data from a LM35 temperature sensor. That data is sent via HTTP request to an API controller endpoint and stored in a database where it can be visualized in a chart using a Blazor web app.
+ Machine Learning
+
GitHub StarsLast Commit
+
A sample ables to make sentiment analysis prediction/detection of what the user is writing in a very UI interactive app (Blazor based) in the client side and running an ML.NET model (Sentiment analysis based on binary-classification) in the server side.
+
GitHub StarsLast Commit
+
A "server-less" general purpose optimization suite for algorithm parameters. Also provides offline optimization of Quantconnect Lean trading algorithms. Demo (https://optimizer.ml).
+
GitHub StarsLast Commit
+
A web application that showcases performing what-if analysis using in-memory Machine Learning models. Live demo.
+
Last Commit
+
ML5 Machine Learning for Blazor with JSInterop mechanism.
+ Mobile
+
+
Experimental Mobile Blazor Bindings - Build native mobile apps with Blazor.
+ Rapid Development Framework
+
GitHub StarsLast Commit
+
A development framework based on .NET Core and EF. It supports Blazor, Vue, React and LayUI with one click code generation for CRUD, Import/Export, etc. Website.
+ ToDos
+
GitHub StarsLast Commit
+
Todo application by David Fowler in .NET 7 that features an ASP.NET Core hosted Blazor WASM front end application and an ASP.NET Core REST API backend using minimal APIs.
+
GitHub StarsLast Commit
+
A TodoMVC clone using Bolero.
+
GitHub StarsLast Commit
+
The procrastination friendly habit tracker. ake notes, manage tasks, track habits. Demo.
+ Others
+
GitHub StarsLast Commit
+
Clean Architecture Template for Blazor WebAssembly Built with MudBlazor Components.
+
GitHub StarsLast Commit
+
Server-side rendering (SSR) with Blazor components, by Steve Sanderson.
+
GitHub StarsLast Commit
+
Modular Application Framework for Blazor.
+
GitHub StarsLast Commit
+
Flight Finder.
+
GitHub StarsLast Commit
+
LINQ Provider for the Twitter API (Twitter Library).
+
GitHub StarsLast Commit
+
Read-only File streams in Blazor. Demo.
+
GitHub StarsLast Commit
+
Migration of a traditional ASP.NET Web Forms app to Blazor.
+
GitHub StarsLast Commit
+
Blazor chat demo using SignalR JS client with interop.
+
GitHub StarsLast Commit
+
A basic HTML SVG Editor written in Blazor WASM.
+
GitHub StarsLast Commit
+
A netflix-like portal application with pilets. This sample demonstrates the use of piral to build a dynamic app consisting of various micro frontends. Demo.
+
GitHub StarsLast Commit
+
This is a sample using Blazor server and SignalR to do command and control. Agents connect to the blazor server application which is hosting a SignalR Hub and we can issue various commands against the connected agents (this feature uses client results).
+
GitHub StarsLast Commit
+
Sample line of business application that illustrates key features of Blazor. Demo.
+
GitHub StarsLast Commit
+
A money manager implemented using CQRS+ES. Demo.
+
GitHub StarsLast Commit
+
A Blazor Weather sample app that shows the current weather for your current location and a collection of pinned locations. Demonstrated at .NET Conf 2019 by Daniel Roth. Demo.
+
GitHub StarsLast Commit
+
A basic HTML SVG Editor written in Blazor WASM. Demo.
+
GitHub StarsLast Commit
+
Ethereum blockchain explorer and simple wallet.
+
GitHub StarsLast Commit
+
FFmpegBlazor provides ability to utilize ffmpeg.wasm from Blazor Wasm C#. ffmpeg.wasm is a pure Webassembly / Javascript port of FFmpeg. It enables video & audio record, convert and stream right inside browsers.
+
GitHub StarsLast Commit
+
A free and open source IDE written using .NET - a Photino host, Blazor UI, and C#.
+
GitHub StarsLast Commit
+
A Blazor wrapper for the Media Capture and Streams browser API. The API standardizes ways to request access to local multimedia devices, such as microphones or video cameras. This also includes the MediaStream API, which provides the means to control where multimedia stream data is consumed, and provides some information and configuration options for the devices that produce the media. This project implements a wrapper around the API for Blazor so that we can easily and safely interact with the media streams of the browser. Demo.
+
Last Commit
+
– An app to play Planning Poker for distributed teams. The app is implemented using Blazor and shows how to switch between client-side and server-side mode with a configuration change. Demo.
+
Last Commit
+
Online tool for verify .Net regex syntax. (Demo).
+
Last Commit
+
Online tool for verify .Net regex syntax, see splits list, table etc. (Demo).
+
+
Blazor Tour of Heroes, using Blazor-State(State Management architecture utilizing the MediatR pipeline) for the Redux style state.
+
Last Commit
+
Blazor.Text.Editor is a Text Editor component library using the Blazor UI Framework for .NET. Demo.
+
Last Commit
+
Wake-on-LAN app for local networks. Blazor Server + EF Core + DI + CI.
+
Last Commit
+
A Blazor app that wraps Waffle Generator. The generator outputs readable gibberish that can be used in place of Lorum Ipsum. Demo.
+
Last Commit
+
Compile and run Nethereum snippets on the browser. You can run it here: http://playground.nethereum.com/.
+
Last Commit
+
A sample project that demonstrates the usage of Typin framework with a Blazor SPA application (Xterm.js and custom web workers implementation in C# to emulate terminal experience in browser). Live demo.
+
Last Commit
+
Unofficial Blazor WebAssembly client for eShopOnContainers.
+
GitHub StarsLast Commit
+
    +
  • Blazor Server integrating with Up bank (an Australian digital bank), to assist users with budgeting and to gain powerful future insights. Uses Clean Architecture and Marten DB.
  • +
+
Last Commit
+
An application for learning foreign words using flashcards and spaced repetition.
+
GitHub StarsLast Commit
+
Sample project, guide and tips for setting up TailwindCSS in Blazor.
+
Last Commit
+
Source code of a presentation by Ed Charbeneau about Blazor and CSS.
+
Last Commit
+
A sample of generating Graphviz DOT language files and visualising tree data structures. Demo.
+
Last Commit
+
Simple Blazor Server app which uses image recognition to identify and extract text printed in an image file uploaded by the user. Demo.
+
Last Commit
+
Simple Football Blazor Server web app displaying fixtures & results, group standings, teams & players and has a player search. Demo.
+
GitHub StarsLast Commit
+
    +
  • An automation framework to create Blazor component by RenderTreeBuilder.
  • +
+
Last Commit
+
MobX-style dependency tracking in Blazor (proof-of-concept level maturity)
+ Tutorials
+
GitHub Stars
+
Blazor app building workshop by .NET Foundation, Blazzing Pizza.
+
GitHub StarsLast Commit
+
June 2021 - Display sensor data using Chart.js in a Blazor application. Source code .
+
GitHub StarsLast Commit
+
Build "NextTechEvent", a site that will help speakers, organizers, and attendees find their next tech event. Source code .
+ Libraries & Extensions

Reusable components like buttons, inputs, grids and more. See also the Blazor component bundles feature comparison chart.

+ Component bundles
+
GitHub StarsLast Commit
+
GitHub licence FAST is a collection of technologies built on Web Components and modern Web Standards, designed to help you efficiently tackle some of the most common challenges in website and application design and development. FAST & Blazor documentation.
+
GitHub StarsLast Commit
+
A set of enterprise-class UI components based on Ant Design and Blazor. (Docs as Demo).
+
GitHub StarsLast Commit
+
MudBlazor is an ambitious Material Design component framework for Blazor with an emphasis on ease of use and clear structure. It is perfect for .NET developers who want to rapidly build web applications without having to struggle with CSS and Javascript. MudBlazor, being written entirely in C#, empowers them to adapt, fix or extend the framework and the multitude of examples in the documentation makes learning MudBlazor very easy. Documentation. Demo.
+
GitHub StarsLast Commit
+
Components for Blazor with support for Bootstrap, Bulma, AntDesign and Material CSS. (Bootstrap Demo), (Bulma Demo), (AntDesign Demo), (Material Demo).
+
GitHub StarsLast Commit
+
A set of enterprise-class UI components based on Material Design and Blazor. It's an almost perfect copy of Vuetify, and Long-term roadmaps have been mapped out. It is powered by the MASA team and remains free and open source. Documentation. Pro Demo.
+
GitHub StarsLast Commit
+
Native UI components for Blazor. DataGrid, DataList, Tabs, Dialog and more. (Demo).
+
GitHub StarsLast Commit
+
Material Design components for Blazor. Bootstrap 4 components for Blazor (Demo).
+
GitHub StarsLast Commit
+
Reusable bootstrap components for Blazor. (Docs as Demo).
+
GitHub StarsLast Commit
+
High-performance, lightweight, and responsive blazor bootstrap components in a single package from the developers for the developers. (Docs as Demo).
+
GitHub StarsLast Commit
+
A lightweight wrapper around Microsoft's official FluentUI Web Components for use with .NET 6.0 Razor views & Blazor. (Samples & demo).
+
GitHub StarsLast Commit
+
A blazor component library using Element UI. API imitates Element, CSS directly uses Element's style, HTML structure directly uses Element's HTML structure. Blazor WebAssembly Version demo. Blazor WebAssembly Version PWA Mode demo.
+
GitHub StarsLast Commit
+
Simple port of FluenUI/Office Fabric React components and style to Blazor. Client-side demo (WebAssembly). Server-side demo (SignalR).
+
+
External link. A fast datagrid, listview, input and other native Blazor components for server and client-side apps.
+
GitHub StarsLast Commit
+
A set of native UI Blazor components (including a Data Grid, Pivot Grid, Scheduler, and Charts) for both Blazor server-side and Blazor client-side platforms.
+
GitHub StarsLast Commit
+
The most comprehensive native Blazor component library including Data Grid, Charts, Scheduler, Diagram and Document Editor components. (Demo).
+
GitHub StarsLast Commit
+
ADMINLTE for Blazor is a collection of reusable components, with which you can easily develop digital services as a designer or developer. Think of buttons, form elements and page templates. This project adapts ADMINLTE 3 so the components can be used from dotnet core Blazor.
+
GitHub StarsLast Commit
+
Blazor component library based on the Clarity UI design. 30+ components including Datagrid and Tree-view (Docs & Demos).
+
GitHub StarsLast Commit
+
Lightweight, customizable, and performance oriented component library for Blazor and .NET MAUI Hybrid. Built with TailwindCSS. Demo.
+
GitHub StarsLast Commit
+
An alternative Material Theme Razor Component Library. Material.Blazor focuses sharply on giving you pure markup from Google's material-components-web - we don't try to sit between you and your use of Google's CSS and SASS because they do it better than we ever could. We also have some cool "plus" components. See our demo and comprehensive documentation.
+
GitHub StarsLast Commit
+
Majorsoft Majorsoft Blazor Components is a set of UI Components and other useful Extensions for Blazor applications. All components are free and available on NuGet. The main goal of this project is to provide an easy to use, feature reach set of customizable components with other useful extensions. NuGet Demo app Docs.
+
GitHub StarsLast Commit
+
Open Source MIT Blazor Components: Grid, Select, Wizard etc.
+
GitHub StarsLast Commit
+
An open source library of Blazor components including Table, Tree, ToolBar and FileExplorer. Demo.
+
GitHub StarsLast Commit
+
Bootstrap 5 components + additional components built on top of Bootstrap 5 (grid, autosuggest, message-boxes, atc.). Enterprise project template with gRPC code-first client/server communication, localization and more. Interactive documentation & Demos.
+
GitHub StarsLast Commit
+
Blazor component library based on the Clarity UI design. 30+ components including Datagrid and Tree-view (Docs & Demos).
+
+
External link (telerik.com). A native set of UI components for Blazor, including grid, charting, and calendar components.
+
+
A Blazor starter template built using your choice of Blazorise or MudBlazor, with more UI library integration coming. It offers a myriad of features such as user registration, login, password reset, two factor; user management, roles, permissioning; background workers, logging, caching, email templates, localization and many more.
+
Last Commit
+
Component library for Blazor including Grid, Kanban, Gantt, Chart, Docking, Pivot and more. Website.
+
GitHub StarsLast Commit
+
Blazor Admin theme built on top of Tabler UI. Minimal javascript. Demo.
+
GitHub StarsLast Commit
+
Ionic framework integration for Blazor.
+
+
Complete toolset for implementing commercial business applications. It includes the equivalent of all Bootstrap JavaScript components, all html5 input types with widgets fallbacks, advanced editable components like DataGrid, TreeView, DetailView, ModalDetail, DetailList. All components have default customizable templates, and support virtualizazion and Drag & Drop. Component rendering is meta-data driven, so component configuration is in part automatic, and in part can be driven with data annotations. The toolset includes also query tools, to issue complex local or remote queries, changes-tracking tools to send only the changed records to the server, advanced validation attributes, globalization tools, "Behaviors" that modify existing components, state management and save, and more.
+
GitHub StarsLast Commit
+
ASP.NET Web Forms System.Web.UI.WebControls Razor Components For Blazor WebAssembly. Demo.
+
Last Commit
+
Github Octicons created as a .razor components and available via the NuGet package. The project website is an example using the generated components.
+
GitHub StarsLast Commit
+
ABP Framework is a complete infrastructure to create modern web applications by following the best practices and conventions of software development.
+
+
Paid External link Diagram, Chart, Text Editor, Gauge, Barcode, and User Interface components for Blazor. Demo.
+
GitHub StarsLast Commit
+
Useful third party extension components for MudBlazor, from the contributors. +20 components includes Stepper, SpeedDial, Wheel, Splitter, Animate, Popup, Material 3 Switch, Gallery, CodeInput and more. Documentation.
+ Individual components
+ 2D/3D Rendering engines
+
GitHub StarsLast Commit
+
This library packages the well-known 3D library Babylon.js into a Razor component that can be used in a C# Blazor project. The library is intended to use for creation of molecules visualization and used limited API of Babylon library. Demo application which is showing different parts of library Pubchem Viewer. Show chemical information from pubchem.ncbi.nlm.nih.gov.
+ API
+
GitHub StarsLast Commit
+
<Title> and <Meta> components for changing the document titile and meta elements, with server-side prerendering support for SEO/OGP. (Demo).
+
GitHub StarsLast Commit
+
Wrapper library around the HTML canvas API written in C# (no JS dependency) (Demo).
+
Last Commit
+
This is a wrapper around the Intersection Observer API.
+ Charts
+
GitHub StarsLast Commit
+
Brings ChartJs charts to Blazor.
+
GitHub StarsLast Commit
+
SVG charts for Blazor.
+
Last Commit
+
Interactive and flexible charts for Blazor Web Apps. Taking its inspiration from the highly popular ggpplot2 R package, GG.Net provides natively rich features for your Data Analysis Workflow. Build publication quality charts with just a few lines of code. Website.
+
Last Commit
+
Sparkline Charts for Blazor using Fonts.
+
GitHub StarsLast Commit
+
Blazor wrapper for ApexCharts. Demo.
+
GitHub StarsLast Commit
+
Brings the charting library plotly.js with over 40 chart types to Blazor (Demo).
+
GitHub StarsLast Commit
+
Interactive and flexible charts for Blazor Web Apps. Taking its inspiration from the highly popular ggpplot2 R package, GG.Net provides natively rich features for your Data Analysis Workflow. Build publication quality charts with just a few lines of code. Website.
+
GitHub StarsLast Commit
+
This is a NuGet package for Blazor to use ChartJs, constantly updated with new features.
+
Last Commit
+
Blazor wrapper for Chartist.js bundled with Chartist.js plugins.
+ CSS
+
GitHub StarsLast Commit
+
BlazorSize is a JavaScript interop library for Blazor that is used to detect the Browser's current size, change in size, and test media queries.
+
GitHub StarsLast Commit
+
A Blazor component based on animate.css to easly animate your content. Demo.
+
+
A small utility library to allow in-component styling without duplicate <style> tags. Also supports programmatically triggered animations.
+ Database
+
GitHub StarsLast Commit
+
DexieNET aims to be a feature complete .NET wrapper for Dexie.js the famous Javascript IndexedDB wrapper from David Fahlander. It's designed for Blazor and includes an easy to use Razor component. Now with support for DexieCloud in preview.
+
GitHub StarsLast Commit
+
EfCoreNexus helps integrating the entity framework core into your blazor app. Via reflection it adds your entitiy classes automatically and provides you with basic crud functionality.
+ Datagrids / tables
+
GitHub StarsLast Commit
+
Grid component with CRUD forms for Blazor and ASP.NET MVC, supporting filtering, sorting, searching, paging, subgrids and others (Demo).
+
GitHub StarsLast Commit
+
Virtualized data grid component with lean markup, focused on displaying remote data. (Demo & documentation).
+ Date & time
+
GitHub StarsLast Commit
+
A date range picker component library for Blazor. Demo.
+
Last Commit
+
A fully featured calendar UI component for viewing and creating events, tasks, and milestones. Month, week, and daily views. Blazor Calendar wraps the fully featured Toast UI Calendar JS library. MIT License. Sample project.
+ Diagrams
+
GitHub StarsLast Commit
+
Z.Blazor.Diagrams is a fully customizable and extensible all-purpose diagrams library for Blazor (both Server Side and WASM). It was first inspired by the popular React library react-diagrams, but then evolved into something much bigger. ZBD can be used to make advanced diagrams with a custom design. Even the behavior of the library is "hackable" and can be changed to suit your needs.
+
GitHub StarsLast Commit
+
Interactive diagram component (flowcharts, UML, BPMN, ...), customizable and extensible according to user needs (node types, styles). Demo.
+ Maps
+
GitHub StarsLast Commit
+
Blazor interop for GoogleMap library.
+
Last Commit
+
Blazor wrapper over vector drawing/mapping library. Jquery Mapael.
+ Modal, Toast & Notifications
+
GitHub StarsLast Commit
+
A JavaScript free modal library for Blazor and Razor Components applications.
+
GitHub StarsLast Commit
+
A JavaScript free toast library for Blazor and Razor Component applications.
+
GitHub StarsLast Commit
+
A powerful and customizable Sidepanel implementation for Blazor applications.
+ Tabs
+
Last Commit
+
An extended tabs component library providing various tab features for Blazor.
+ Testing
+
GitHub StarsLast Commit
+
A testing library for Blazor Components. You can easily define components under test in C# or Razor syntax and verify outcome using semantic HTML diffing/comparison logic. You can easily interact with and inspect components, trigger event handlers, provide cascading values, inject services, mock IJsRuntime, and perform snapshot testing.
+
GitHub StarsLast Commit
+
A snapshot testing library for Blazor Components. Supports rendering Blazor Components to a snapshot file via bunit or via raw Blazor rendering.
+ Others
+
GitHub StarsLast Commit
+
.NET Core and Blazor library that attempts to dramatically improve the way we implement real-time and high-load services by introducing a novel kind of "computed observables" - immutable, thread-safe, and most importantly, almost invisible for developers. Samples. Overview.
+
GitHub StarsLast Commit
+
A context menu component for Blazor (Demo).
+
GitHub StarsLast Commit
+
Auto-complete textbox with local and remote data source, for both Client-side and Server-Side Blazor.
+
GitHub StarsLast Commit
+
Easy-to-use Drag and Drop library for Blazor.
+
GitHub StarsLast Commit
+
Blazor download files to the browser from c# without any JavaScript library or dependency. BlazorDownloadFile is the solution to saving files on the client-side, and is perfect for web apps that generates files on the client. However if the file is coming from the server we recommend you to first try to use Content-Disposition attachment response header as it has more cross-browser compatibility.
+
GitHub StarsLast Commit
+
A Blazor wrapper for the browser API File System Access. The API makes it possible to read and write to your local file system from the browser both files and directories. [Demo](The API makes it possible to read and write to your local file system from the browser both files and directories.).
+
GitHub StarsLast Commit
+
Blazor wrappers for PatternFly. To view the latest develop branch in action, visit the demo app.
+
GitHub StarsLast Commit
+
Provide "Update Now" UI and feature to your Blazor PWA that appears when the next version of one is available.
+
GitHub StarsLast Commit
+
Allows current and previous route to exist enabling transition animations of UI/UX design systems.
+
Last Commit
+
Blazor component implementing the popular SweetAlert2 JavaScript Library.
+
Last Commit
+
Blazor component for Microsoft's Monaco Editor which powers Visual Studio Code. (Demo).
+
Last Commit
+
Component library for CSS grids with extra features, such as moving and resizing interactively. Create your own dashboard with ease. (Demo).
+
Last Commit
+
Component library for tree views. (Demo).
+
Last Commit
+
GitHub Emoji for Blazor (Demo).
+
Last Commit
+
hCaptcha Component for Server-Side Blazor.
+
GitHub StarsLast Commit
+
The default project template localized using XLocalizer with online translation and auto resource creating.
+
Last Commit
+
An app to help keep track of speed cubing averages on the fly using Blazor WebAssembly. Demo.
+
Last Commit
+
Create multiple panels separated by sliding splitters.
+
Last Commit
+
A Blazor component to create panes separated by a slidable splitter bar.
+
GitHub StarsLast Commit
+
Responsive, vertical timeline component.
+
Last Commit
+
A typewriter effect for Blazor.
+
Last Commit
+
An implementation of Blazor diff and merge component based on Mergely with server side support.
+
Last Commit
+
A library that provides an easy helper to use MetaMask with Blazor WebAssembly.
+
Last Commit
+
Surround an "input type=file" element by this Blazor component to making a zone that accepts drag and drops files (Demo).
+
Last Commit
+
Knob Control for Blazor.
+
Last Commit
+
Device detection for blazor using current-device.js.
+
Last Commit
+
A textarea with style. This component essentially remains and works as a textarea but can have any of the text styled based on your application needs. Its simplicity is purposefully designed to avoid the complexities and issues that come with rich text editors.
+
Last Commit
+
A simple to use blazor component to draw custom signatures. Demo.
+
Last Commit
+
A simple to use blazor component for both Blazor Server and WebAssembly which adds a basic tag editor to your app. Demo.
+
Last Commit
+
An implementation of Bootstrap tooltips for both Blazor Server and WebAssembly. Demo.
+
GitHub StarsLast Commit
+
Barcode Scanner component for Blazor using zxing-js Interop. Demo.
+
GitHub StarsLast Commit
+
A library performing animations when a Blazor component enters or leaves the DOM inspired by react-transition-group.
+ Tools & Utilities

Libraries and extensions for state management, cookies, local storage and other specific tools.

+
GitHub StarsLast Commit
+
Zero boilerplate Flux/Redux library for DotNet.
+
GitHub StarsLast Commit
+
A library to provide access to local storage in Blazor applications.
+
GitHub StarsLast Commit
+
Manage client side state in Blazor using MediatR pipeline.
+
GitHub StarsLast Commit
+
A testing library for Blazor Components. You can easily define components under test in C# or Razor syntax and verify outcome using semantic HTML diffing/comparison logic. You can easily interact with and inspect components, trigger event handlers, provide cascading values, inject services, mock IJsRuntime, and perform snapshot testing.
+
GitHub StarsLast Commit
+
Cropper.Blazor is a component that wraps around Cropper.js for cropping images in Blazor. Support Blazor Server, Blazor WebAssembly, Blazor Server Hybrid with MVC and MAUI Blazor Hybrid. Demo.
+
GitHub StarsLast Commit
+
A cross platform package to copy text to and from the clipboard. Supports Blazor via the Clipboard Browser API.
+
GitHub StarsLast Commit
+
CssBuilder is a Builder pattern for CSS classes to be used with Razor Components.
+
GitHub StarsLast Commit
+
A Blazor wrapper for the browser File System Access API.
+
GitHub StarsLast Commit
+
Polyfills for Blazor (for Internet Explorer 11 support and some other browsers).
+
GitHub StarsLast Commit
+
Localizing contents text in Blazor (Demo).
+
GitHub StarsLast Commit
+
Blazor interop for GoogleMap library.
+
GitHub StarsLast Commit
+
Library for creating DotNet Web Worker threads/multithreading in Blazor. Live demo.
+
GitHub StarsLast Commit
+
BlazorMVVM is a small framework for building Blazor and BlazorServerside apps. With it's simple to use MVVM pattern you can boost up your development speed while minimizing the hazzle to just make it work.
+
GitHub StarsLast Commit
+
Develop browser extensions/addons with Blazor WebAssembly. Tested with Google Chrome, Mozilla Firefox and MS Edge.
+
+
Blazor extensions for Analytics.
+
GitHub StarsLast Commit
+
Generate de PDF document with iTextSharp from a Blazor Server App.
+
GitHub StarsLast Commit
+
BlazorRouter is an awesome router inspired by react-router, providing declarative routing for Blazor.
+
GitHub StarsLast Commit
+
Wrapper for Steve Sanderson's BlazorFileInput component.
+
+
Blazor Code Component for documentation sites. Demo.
+
+
Lightweight Event Aggregator for Blazor (Razor Components).
+
+
Provides gamepad API access for Blazor.
+
GitHub StarsLast Commit
+
A library to provide configuration-centric keyboard shortcuts for Blazor.
+
+
Redux state management for Blazor.
+
+
Open files in your browser and load into Blazor.
+
Last Commit
+
A library to provide Speech Synthesis API access for Blazor.
+
+
– A barcode library for Blazor using barcode fonts.
+
Last Commit
+
Develop Blazor apps with Redux.
+
Last Commit
+
A Blazor JSInterop wrapper for Howler.js, an audio library.
+
Last Commit
+
A Blazor JSInterop wrapper for jsMind, a MindMapping tool.
+
Last Commit
+
A port of the popular Highcharts library. Demo.
+
Last Commit
+
Lazy loading for CSS style sheets.
+
GitHub StarsLast Commit
+
Smart script tags in Blazor components, ideal for lazy loading of javascript files.
+
Last Commit
+
Blazor Library for IndexedDB DOM API.
+
Last Commit
+
BlazorIndexedDbJs is a wrapper arround IndexedDB DOM API, supports Blazor WASM and Server.
+
Last Commit
+
Opens a palette with the Material colors for Blazor application.
+
Last Commit
+
A Blazor library for connecting to devices using Bluetooth.
+
Last Commit
+
Blazor service for the experimental WebBluetooth functions. Based on Blazm.Bluetooth.
+
Last Commit
+
Application Insights for Blazor web applications.
+
Last Commit
+
Print and save PDF documents with a native print dialog in a Blazor Server or client Application.
+
Last Commit
+
Use .razor components to render HTML strings for email content.
+
Last Commit
+
A Blazor JSInterop wrapper for Media Session API. The Media Session API provides a way to customize media notifications. (Demo).
+
GitHub StarsLast Commit
+
Antivirus protection for Blazor Wasm projects. This package attempts to guard against false positives from antiviruses that flag Blazor Wasm as malware, until Microsoft gives us an official solution.
+
GitHub StarsLast Commit
+
An unopinionated Blazor state management library that utilizes INotifyPropertyChanged and INotifyCollectionChanged .NET interfaces to automatically detect state changes in components.
+
GitHub StarsLast Commit
+
An open-source utility package for GoogleApis in Blazor. Written from scratch and aims easiest of use.
+
GitHub StarsLast Commit
+
A simple client-side state management container for Blazor/.NET includes redo/undo and ReduxDevTools support.
+
GitHub StarsLast Commit
+
RxBlazorLight is a simple reactive wrapper around Blazor components. For now only MudBlazor components are supported. Build the RxMudBlazorLightSample and enjoy the reactive Components.
+ Others
+
GitHub Stars
+
Home for Blazor Extensions.
+
GitHub StarsLast Commit
+
Blazor for F# with hot reloaded templates, type-safe endpoints and routing, remoting, and much more.
+
GitHub StarsLast Commit
+
Blazor port of Microsoft UI Fabric with fluent design. (Demo).
+
GitHub StarsLast Commit
+
Blazor WebView control for WPF, Android, macOS, iOS. Run Blazor on .NET Core and Mono natively inside a Webview. Documentation.
+
GitHub StarsLast Commit
+
Production ready lazy loading implementation. Full lazy loading support for WASM and Server (pages, components, dlls) with abstractions to implement modularization if you wish (custom endpoints, custom manifests, etc).
+
GitHub StarsLast Commit
+
This is a project to make F# developer to write blazor easier - Use F# for Blazor, Computation expression (CE) style DSL for internal and third party blazor libraries, Dependency injection, Adaptive and Elmish models, Giraffe style routing, Type safe style.
+
GitHub StarsLast Commit
+
Fast download of files to the browser from Blazor without any javascript library reference or dependency. (Demo).
+
GitHub StarsLast Commit
+
A high-level Spotify API library for Blazor WebAssembly projects that enables Spotify playback in the browser, manages OAuth 2.0 authorization, provides easy access to the Spotify Web API and uses IndexedDB caching.
+
GitHub StarsLast Commit
+
Execute dynamic object expressions as Javascript in Blazor client-side apps.
+
+
An Ionic CLI clone for Blazor projects.
+
Last Commit
+
This project takes in a TypeScript type definition file and creates a .NET Core project that will work with the provided Interop abstraction project.
+
Last Commit
+
Generators.Blazor is a source generator for improving performance in Blazor. The project also contains analyzers to detect common issues in Blazor apps.
+
GitHub StarsLast Commit
+
    +
  • Manage k8s using balzor with AI,like kubernetes dashboard.
  • +
+ Source generators
+
GitHub StarsLast Commit
+
Github Octicons created as a .razor components using source generator. The generated components are available via the NuGet package, the generator itself is available as a separate NuGet package. The project website is an example using the generated components.
+
GitHub StarsLast Commit
+
Github Octicons Generates Blazor -> Javascript strongly typed interop methods, by parsing the Javascript it self and generating extension methods for IJSRuntime.
+
GitHub StarsLast Commit
+
Generates methods with parameters for Razor and Blazor pages, so you can navigate without having to guess URLs or parameters.
+ Real-World applications
+
GitHub StarsLast Commit
+
Try .NET provides developers and content authors with tools to create interactive experiences.
+ Videos
+
+
July 9, 2024 - duration Let's dive into why GraphQL is a compelling choice for API queries and how to integrate it with Blazor. In this session, we'll enhance a Blazor app by incorporating GraphQL and using QuickGrid to present the data.
+
+
duration July 2, 2024 - In this episode Eduardo joins Frank to showcase FairPlayTube: The Next Generation of Video Sharing portals, a tool for content creators and entrepreneurs, powered by AI to create thumbnails, digital marketing strategies, passive income ideas, posts for social networks and more.
+
+
duration June 28, 2024 - Looking to build mobile, desktop, and web apps all with nearly 100% shared web UI? New Blazor Hybrid templates in .NET 9 give you a single click automatically configured project with .NET MAUI, Blazor, and a razor class library all setup.
+
+
June 18, 2024 - Join Jeff Fritz as he shows how he built Aspireify.net with .NET 8, Blazor, Microsoft Azure and .NET Aspire. Community links.
+
+
June 17, 2024 - Join this session of Orchard Core Pair Programming by Lombiq! In these, we do an hour of pair programming with an Orchard Core community member about a project of theirs. We learn together a lot, share best practices, and write some good code. All this is live, and you can join us with your questions!
+
+
duration June 13, 2024 - This talk presents how you can use Akka.NET and Blazor to build scalable, streaming web applications without JavaScript or any fuss. Pure C# end to end.
+
+
duration June 11, 2024 - Learn about some of the static web asset improvements coming in .NET 9.
+
+
duration June 10, 2024 - In this talk, Dan Roth dived into all that's new in Blazor in .NET 8 like the advanced render modes, built-in authentication support, and scaffolding, and also looked at the future of Blazor in .NET 9 and how that can make web development even better.
+
+
June 3, 2024 - Are you using audio in your Blazor applications? This week, Kristoffer Stube joins us to talk about Blazor.WebAudio, a Blazor library for playing, generating, and analyzing sound! This library and the libraries surrounding it enable developers to make rich interactive applications in a safe fashion.
+
+
duration May 22, 2024 - Dive into the latest advancements in ASP.NET Core and Blazor for building dynamic, responsive full-stack web applications. Learn how these powerful frameworks simplify the development process, from server to client, enabling you to create rich interactive web UIs with C# instead of JavaScript.
+
+
duration May 22, 2024 - We've heard a lot about how using .NET to build our UI applications lets us share code across our whole stack, but finding the best way to do this isn't straightforward. UI code and API code can sometimes seem at cross-purposes and it's not always obvious how using .NET code across your whole stack provides any advantages over using different technologies for your UI and API. It's easy to fall into the trap of underutilizing the right code-sharing techniques. Or, at the other extreme, butchering your architecture for the sake of sharing code. In this talk, Matt Goldman (author of .NET MAUI in Action) will look at extending Clean Architecture to incorporate UIs built with .NET MAUI and Blazor. See sensible ways to write clean, testable, re-usable code that can be shared across the different layers of your solution, and across different solutions in your enterprise, to optimize efficiency and minimize duplication. We'll also see how to avoid the common pitfalls of over-engineering or under-sharing. You will walk away knowing how to make full-stack code shared with .NET a reality.
+
+
duration May 22, 2024 - Learn how to build an AI-powered content composer using GPT-3.5 Turbo and Syncfusion Blazor components. Effortlessly create content on any topic and automatically adjust its tone, format, and length—all in one place.
+
+
duration May 1, 2024 - Fritz wraps up the series on Blazor with .NET 8 by enabling the pizza website as a progressive web app (PWA) and publishes it to Microsoft Azure.
+
+
duration April 29, 2024 - Are you using a front-end framework with Blazor? In this week's episode, community MVP Egin Hansen shows us how to supercharge Blazor static server-side rendering (SSR) with the htmx front-end library. Adding htmx gives you access to another level of interactivity while still retaining all the advantages of Blazor SSR stateless nature.
+
+
duration April 23, 2024 - The Fluent UI Blazor library provides a set of Blazor components which are used to build applications that have a Fluent design (i.e. have the look and feel or modern Microsoft applications). Join Vincent and Denis to learn the fundamentals and building blocks of the library and demonstrate how to quickly incorporate it into your Blazor projects. Learn the basics of setting up the environment, use the interactive components, and change the styling of your application with Fluent UI design tokens.
+
+
duration April 23, 2024 - Talk by Steve Sanderson at the NDC London 2024. It’s 2024, and the web continues to dominate the software landscape. Innovation proceeds in all directions, with new frameworks, build systems, and architectural patterns emerging at pace. But where are we all heading? Is there a pattern? What’s the next big phase? In this demo-centric talk we’ll look at the common trends across web frameworks: disruptive new features that are showing up across technologies and changing how web apps are built. We’ll dig into live code examples in Next.js (React), SvelteKit, Blazor, Astro, and more. We’ll see how these and others are setting a similar path for the next phase of web technology – and how you could implement the same features yourself without any framework. Finally, we’ll catch up on the state of WebAssembly and try out WASI preview 2 – the upcoming reinvention of WASI. Will it achieve the dream of seamless interop across all languages, operating systems, and CPU architectures? Will it become the standard for server-side cloud programming? Let’s build something with it.
+
+
duration April 9, 2024 - Learn how improvements coming to .NET 9 will make it easier to integrate Blazor Web and Blazor Hybrid.
+
+
duration March 19, 2024 - Add genuinely useful AI-powered features to your web app, just by dropping in pre-built Smart Components that upgrade your existing pages and forms in minutes. Steve Sanderson shows how SmartPaste, SmartTextArea, and SmartComboBox can all delight your users and make them more productive. This is a new experiment from the .NET team, and they want feedbacks.
+
+
duration February 13, 2024 - See how to connect a Blazor app to Microsoft Entra using OIDC and the BFF pattern.
+
+
duration January 25, 2024 - Live with the lead Blazor Product Manager, Daniel Roth, we will learn about basic web development with .NET Blazor! Then, build an interactive web-based game application with Blazor. Come to learn something new and leave with something that we all built, together, live with experts.
+
+
January 24, 2024 - In the last episode, we dug deep into the underpinnings of optimistic concurrency handling in EF Core. In this episode, we continue that journey to cover disconnected scenarios. That is, where the entity travels to a client and then back to the server before being updated in the database. We’ll look at the different patterns for doing updates like this in ASP.NET Core and Blazor apps and see how concurrency tokens work with each of these. We’ll also look at how ExecuteUpdate can be used with concurrency tokens, and take a look at ETag concurrency in Azure Cosmos DB.
+
+
duration December 12, 2023 - In this session, we will show you some experimental ideas for Blazor and .NET+WASI and answer your questions about the .NET eShop Blazor App. Community links.
+
+
duration November 18, 2023 - ASP.NET's RazorComponent model is intuitive and brings productivity to web development. In this session we'll learn how RazorComponents aren't just for Blazor apps and how we can integrate the best part of Blazor with existing ASP.NET applications using: Razor Pages, MVC, and even other front-end technologies.
+
+
duration November 18, 2023 - Tailwind CSS has been growing in popularity for some time. It’s fast becoming one of the top frameworks to use when styling applications. It offers a different approach to the traditional frameworks like Bootstrap—utility based styling. Rather than using prebuilt components—which result in your application looking like a lot of others on the web—you can tailor your design by applying small focused CSS classes resulting in a unique style for your app. In this code focused talk, you will learn how to bring the power of Tailwind CSS to your Blazor applications. We’ll start off with a brief introduction to Tailwind. Then we’ll get into some code and see how we can integrate Tailwind with Blazor. For the rest of the time, we’ll explore the various features of Tailwind and see just how beautiful we can make our Blazor app.
+
+
duration November 18, 2023 - The Blazor Puzzle podcast team of Carl Franklin and Jeff Fritz have a collection of puzzles and brain-teasers for you in this code-focused session about the latest features of the Blazor framework. We'll fix bugs, build cool features, and even write a unit test or two.
+
+
duration November 18, 2023 - Discuss and showcase the different Blazor testing strategies, libraries, and tools available to us, so whether you are building a website, web app, or a reusable Blazor component library, you can pick the ones that yield the most bang for the buck. Specifically, this session covers end-2-end testing, component testing, unit testing, Playwright, bUnit, snapshot testing, semantic markup comparison, emulating user interactions, and how and when to use test doubles (e.g., mocks).
+
+
duration November 15, 2023 - In .NET 8 you can deliver the best web app experiences entirely in Blazor using Blazor's convenient component model. You can build your entire web app in Blazor without the needed for writing JavaScript or mixing web frameworks. In this session you'll see how you can use Blazor's new server-side rendering support to power your web apps from the server for maximum performance and scalability. You'll see how you can easily add advanced capabilities like streaming rendering and enhanced navigation & form handling to further optimize the user experience. Then add rich client-side interactivity wherever it is needed using Blazor Server or Blazor WebAssembly.
+
+
duration October 10, 2023 - About what Blazor has to offer in .NET 8 RC2. Community links.
+
+
duration October 10, 2023 - 10 reasons why the new enhancements and new features about Blazor released with .NET 8 are an absolute game changer.
+
+
duration September 12, 2023 - Discover how full stack Blazor apps work and how they differ from traditional Blazor Server and WebAssembly apps. We'll also explore some of the new full stack UI features that Blazor offers in .NET 8 RC1. Community links.
+
+
duration September 8, 2023 - Carl Franklin and Jeff Fritz offer Blazor-based problems to be solved and give away prizes to lucky winners. Source code.
+
+
duration September 7, 2023 - This short video is about how to create a new Blazor Server application and authenticate it using Azure AD.
+
+
duration August 25, 2023 - We're going to update the API to use the Cosmos client and maybe do some updates on the Edit form. And Burke shows off the signature move that won him the "Pop 'n' Lock" championship.
+
+
duration August 22, 2023 - Becky is joined by Sam Basu from Progress showing off the latest controls for Blazor and Blazor Hybrid apps with Telerik UI.
+
+
duration August 14, 2023 - In this video we'll explore how to integrate the new Blazor Server Side rendering capabilities in .NET 8.0 with the traditional Blazor WebAssembly and Blazor Server (SignalR) hosting models for a rich client-side experience. We'll explore the differences between these different options, how to seamlessly implement each option where it makes sense, and discuss different architecture approaches with Blazor in ASP.NET Core 8.0.
+
+
duration August 4, 2023 - Come find out about the future of Blazor in .NET 8! We'll explore all the upcoming features and improvements, including our effort to create a unified full stack web UI programming model that combines the strengths of client and server. We hope to see you there.
+
+
duration July 27, 2023 - Should I learn a JavaScript framework or concentrate on mastering Blazor? What is the future of Blazor? Is Microsoft invested in making Blazor great? We will answer these questions in today's Dev Questions episode.
+
+
duration July 7, 2023 - Finishing the API and starting the UI. Community links.
+
+
duration July 4, 2023 - In this episode, we discuss and implement progress indicators to enhance user experience. Plus, we integrate a Map component from Progress Telerik, adding a visually striking and functional element to the platform. Source code.
+
+
duration June 30 - Last week we got the API started - let's finish it up and start on the UI. Url list.
+
+
duration June 28, 2023 - Let's take a deep dive into a .NET 8 Preview feature, sections. What are SectionOutlet, and SectionContent? How do we use them to build an extensive layout system for Blazor applications?
+
+
duration June 21, 2023 - Learn how to utilize the Blazor Spark framework by building a Twitter clone.
+
+
duration June 15, 2021 - This summer, Burke and Jon are porting theurlist.com to Blazor - a real world JavaScript application written in Vue.js. Join them each week as they use Visual Studio, Visual Studio Code and GitHub Copilot to rebuild this app and try to tackle every frontend issue you might encounter along the way. Community links.
+
+
duration June 14, 2023 - Chat about Blazor Studio, this month's featured Blazor community project. Community links.
+
+
duration May 26, 2023 - Join this session to explore new features in .NET 8 for web frontends, backends, and future development. Discover how .NET 8 enhances web app development with better performance, new APIs, and modern development support. Get guidance on leveraging these tools for scalable, efficient cloud apps. Suitable for both experienced and new .NET developers, this session offers valuable insights into the latest developments in .NET 8 for web development.
+
+
duration May 26, 2023 - By Isaac Levin at the NDC Oslo 2023. With the introduction of WebAssembly-based Blazor, .NET developers can now build solutions that can run on all sorts of new hosting platforms, even ones without servers. Building applications that can run nearly anywhere, all written in C# is an amazing experience for web developers, far and wide. Write code in the programming language you love, without having to learn the newest Javascript framework (though you can interop if you want to!) is the reason why Blazor is one of the most exciting things in the current .NET landscape. In this session, we will go over the technology of Blazor WebAssembly and showcase deploying a .NET app that can run in places we never thought we could.
+
+
duration May 24, 2023 - Since we started using Blazor in 2019, it's been an excellent tool for our team of C# developers. Even when Blazor was brand new, we used it in our latest project, which really helped us. Seeing other people in our field, I can say that Blazor was a key to our project's success. Our journey with Blazor has mostly been easy, but we have still learned a lot along the way. In this video, I will share some tips and lessons we have picked up. I will also discuss how to make smart choices and avoid problems when you're changing your existing project to use Blazor.
+
+
duration May 24, 2023 - Learn how ASP.NET Blazor in .NET 8 allows you to use a single powerful component model to handle all of your web UI needs, including server-side rendering, client-side rendering, streaming rendering, progressive enhancement, and much more.
+
+
duration May 24, 2023 - In this session, we demonstrate how to leverage DevExpress Blazor/.NET MAUI UI components to deliver intuitive mobile solutions that amaze. We show you how Blazor Hybrid apps reduce time to market and how our adaptive Blazor Data Grid can be used alongside our rich collection of FREE .NET MAUI UI components to address a variety of usage scenarios.
+
+
duration May 23, 2023 - .NET Build session: How to Create a PDF Document in Blazor Using the .NET PDF Library. PDFs are an ideal format for sharing and archiving documents, but creating a viewer from scratch requires a deep understanding of PDF specifications and programming languages. What benefit does a PDF viewer provide for your business? It makes it easy to send a report to stakeholders, send an invoice to a customer, or generate a receipt in a retail shop. In this demo, we’ll show how you can easily add a PDF viewer to your app with text, images, and a table in the PDF document.
+
+
duration May 23, 2023 - Microsoft Build session: Blazor + .NET MAUI – the perfect “hybrid”. In this session, we demonstrate how to leverage DevExpress Blazor/.NET MAUI UI components to deliver intuitive mobile solutions that amaze. We show you how Blazor Hybrid apps reduce time to market and how our adaptive Blazor Data Grid can be used alongside our rich collection of FREE .NET MAUI UI components to address a variety of usage scenarios.
    +
  • This Will Skyrocket Your Blazor Development Productivity - duration May 23, 2023 - Developing Blazor is fun. However, there are a lot of different things that take quite some time when added together. For instance creating isolated CSS files, creating isolated JS files, creating code behind files and others. However, Jimmy Engstrom has created a Visual Extension that solves exactly this problems. Using this extension, your productivity will get a substantial boost. In this video, I'll show you everything you need to know to use this extension in your day to day Blazor development.
  • +
+
GitHub StarsLast Commit
+
duration May 22, 2023 - Have you ever considered writing microservices in Blazor? In this week's episode, community MVP Florian Rappl joins us to talk about micro frontends. He'll show us how to break a Blazor UI into modules for maintainability and development by decoupled teams. Sample repo. Demo.
+
+
duration May 19, 2023 - We have been running Blazor in production for over two years now. Everyone in our team is a C# developer, so when we went into our latest project Blazor was a natural choice, even though Blazor was only a week old. Looking at my peers working in the same space, I am convinced that it saved our project by switching to Blazor. Even though it has been mostly smooth sailing we have learned a lot during the years. In this session, Jimmy Engström will give you some of the tips, tricks, and learnings we have collected over the years, when to choose what, and how to avoid pitfalls converting your exiting project to Blazor.
+
+
duration May 10, 2023 - Come check out some of the progress the Blazor team has made for .NET 8. Community links.
+
GitHub StarsLast Commit
+
duration May 9, 2023 - Part 16 of our new project, "NextTechEvent", a site that will help speakers, organizers, and attendees find their next tech event. In this stream, we made the attendee page look better, and with our close personal friend Chat GPT, we did a better-looking temperature view. Source code .
+
+
duration May 1, 2023 - Learn C#, F#, and .NET with free self-guided learning from Microsoft Learn. Connect4 lesson on Microsoft Learn.
+
+
duration April 11, 2023 - Learn about Data API Builder and how it can be used in Blazor app development. Community links.
+
+
duration February 23, 2023 - March 14, 2023 - Learn how to use Playwright to implement end-to-end testing for your Blazor application. Community links.
+
+
duration February 23, 2023 - Carl talks to Steve Sanderson, creator of Blazor, to answer questions about Blazor United, coming in .NET 8.
+
+
duration February 23, 2023 - Chat with Michael Washington about how .NET developers can leverage OpenAI GPT-3 in their Blazor applications.
+
+
duration February 14, 2023 - The Blazor team shares early thoughts on Blazor United in .NET 8, an effort to create a single unified model for all your web UI scenarios that combines the best of Razor Pages, Blazor Server, and Blazor WebAssembly. Community links.
+
+
duration February 7, 2023 - Do you need to display mapping data in your Blazor apps? In this week's episode, community member Tim Purdum joins the panel to show us GeoBlazor, a versatile web mapping API that you can implement without having to write a single line of JavaScript.
+
+
duration January 24, 2023 - A quick look at some of the experiments we're considering for Blazor in .NET 8.
+
+
duration January 10, 2023 - It show what it's like to build a .NET 7 Blazor app using both new and currently experimental features. Featuring: Daniel Roth, Jon Galloway, Mackinnon Buck. Community links.
+
+
duration December 21, 2022 - Are you tired of slow and clunky web applications? Look no further than Blazor running in React! Blazor is a powerful framework for building interactive client-side web apps with C#, and when combined with the speed and flexibility of React, you get a winning combination for stunning, high-performance web experiences. In this video, we will use the new Custom Elements feature to run Blazor in React, and demonstrate some of the other exciting features and benefits of this dynamic duo. Don't miss out on the future of web development.
+
+
duration December 13, 2022 - Find out our early plans for Blazor in .NET 8. Community links.
+
+
duration November 18, 2022 - Use the IDE to make a Fluxor CRUD Application.
+
+
duration November 10, 2022 - Blazor in .NET 7 is loaded with many new improvements to make building beautiful interactive web UI easier and more productive. In this session we'll take a look at the new support for custom elements, improved data binding, handling location changing events, showing loading progress, dynamic authentication requests, and more.
+
+
duration November 10, 2022 - So you’ve heard about new features in .NET 7, but how does it all fit together when you build an app? Join Steve as he quickly builds an end-to-end audio manager app with Blazor WebAssembly using features old and new. This is a moderately advanced talk (it assumes existing Blazor knowledge) full of hints and tips including: cleaner ways to organize JS interop, directly accessing files on an end user’s filesystem, dynamically generating SVGs, creating an elegant “loading” experience, and the performance impact of AOT compilation. Full source code is provided!
+
+
duration November 10, 2022 - .NET 7 introduces powerful new capabilities for running .NET code on WebAssembly. In this session we’ll show how you can run .NET from any JavaScript code using the new and improved JavaScript interop support. We’ll look at debugging and hot reload improvements for .NET on WebAssembly and show how the .NET WebAssembly build tools in .NET 7 take advantage of the latest WebAssembly features like SIMD and Exception Handling to improve performance. We’ll also check out some upcoming and experimental .NET WebAssembly capabilities like support for multithreading.
+
+
duration November 10, 2022 - Testing is hard, testing takes time to learn and to write, and time is money. As developers we want to test. We know we should but we don't have time. So how can we get more developers to do testing? We can create better tools. Let me introduce you to Playwright - Reliable end-to-end cross browser testing for modern web apps, by Microsoft and fully open source. Playwright's codegen generates tests for you so now you really have no excuses. It's time to play your tests wright.
+
+
duration November 10, 2022 - Are you a web developer and need to target iOS, Android, macOS, and Windows? Ship directly to the store and build world class apps with native API access with .NET MAUI and Blazor Hybrid.
+
+
duration November 10, 2022 - Desktop is not dead and there are a lot of applications written in WPF and Windows Forms that need to be ported to Web, or reuse ready components written by the web team. Blazor can be the answer for both the requirements thanks to Blazor Hybrid. Let’s see how you can use it.
+
+
duration November 10, 2022 - Does your CSS code remind you of an episode of Hoarders? In this session we’ll explore a variety of CSS related architecture decisions that Blazor developers face. Attendees will learn how and when to use plain CSS, Sass or CSS Isolation with Blazor. Modern CSS techniques like custom CSS properties will be discussed. We’ll explore techniques to build modular and intelligent CSS by leveraging CSS principals and incorporating helper libraries. This session aims to break the dependency on CSS systems like Bootstrap and Tailwind.
+
+
duration November 10, 2022 - Are you a .NET developer who wants to quickly build and deploy full-stack .NET serverless applications? Then this talk is for you! In this session, we will learn how to use Azure Static Web Apps with Blazor and .NET. First, we will explore Azure Static Web Apps. Then take a look at getting started with Blazor WebAssembly paired with the serverless power of .NET Azure Functions or Azure Container Apps. We will continue on to explore other .NET API options now available. And finally, we will discover how to automatically build and deploy to Azure directly from our code repository.
+
+
duration November 3, 2022 - Carl shows how to easily support multiple languages in a Blazor WebAssembly application.
+
GitHub StarsLast Commit
+
duration November 2, 2022 - Part 12 of the project "NextTechEvent", a site that will help speakers, organizers, and attendees find their next tech event. In this stream, we add search functionality using RavenDB by adding an index. A way for organizers to filter conferences by name, country, location, city, and tags or a combination of them. This way we can see how many conferences are happening in "Stockholm" or all the conferences named "NDC". Source code.
+
+
duration October 20, 2022 - Adding guests and links, and playlist functionality.
+
+
duration October 11, 2022 - Learn more about the latest multithreading and MSAL developments for Blazor in .NET 7. Community links.
+
+
duration September 22, 2022 - Carl shows how to use MSAL and Azure AD B2C to authenticate users and call a secure API.
+
+
duration September 13, 2022 - Learn more about the exciting runtime changes in Blazor for .NET 7. Community links. Part 1.
+
+
duration September 8, 2022 - Make a Text Editor in Blazor from scratch, Blazor Text Editor Part 1.
+
+
duration September 8, 2022 - Roslyn Syntax Highlighting | Blazor Text Editor Part 2.
+
+
duration September 8, 2022 - Make a Text Editor in Blazor from scratch | Blazor Text Editor Part 1.
+
GitHub StarsLast Commit
+
September 2, 2022 - In this video, Daniel will show you how to create a project for .NET MAUI and Blazor and how to structure the code so it can be shared between the app and the web. Source code.
+
+
duration September 1, 2022 - Short presentation of Blazor. Blazor is a framework that can build frontend web applications with HTML, CSS, and C#. It leverages web assembly to eliminate JavaScript from the usual client-side tech stack.
+
+
duration August 28, 2022 - In this tutorial we'll learn how to create a todo list with Blazor and improve the page using Bootstrap.
+
+
duration August 23, 2022 - Overview of Blazor in .NET 7 with Daniel Roth, Jon Galloway, Mackinnon Buck and Tanay Parikh. Learn more about the great new features coming to Blazor in .NET 7.
+
+
duration August 22, 2022 - In this tutorial you will learn the basics of building a website with Blazor and how the default Blazor project template works. If you have any problems feel free to leave a comment and I will try and get back to you. I've also added some notes below that you might find useful.
+
+
duration July 18, 2022 - In this session, Josh and I are back again to continue building a decentralizaed social media platform in the open-source space. This session in particular we will be discussing, designing and implementing a main page header in Blazor using SharpStyles.
+
+
duration July 12, 2022 - ASP.NET Community Standup - Blazor: Flavors of State Management with Blazor WebAssembly. Working with Blazor WebAssembly applications we often overlook the importance of appropriate state management. Without a good understanding and the right strategy, our applications can end up polluted with components that behave badly and we end up regretting the bad choices.- This session covers the simple state management flavours and then progress towards something more tasty like the Redux pattern. We will see what there is to like and dislike about each flavour. Next, we will take a step back and determine the appropriate seasoning of state management to pair with our application. You will leave this session having sampled all the wonderful flavours and be able to make great decisions to have the best development experience. Community links.
+
+
duration July 11, 2022 - This video shows how to secure your Blazor application and a Web API using Azure Active Directory (AAD).
+
+
duration July 7, 2022 - What’s next for Blazor, and .NET on WASI, talk by Steve Sanderson at the NDC Porto. In this demo-centric talk, Microsoft developer/architect Steve will show the current state-of-the-art in Blazor for building rich web-based UI for browsers and native apps. This will include powerful new features shipped in .NET 6, as well as upcoming enhancements under development for .NET 7 and .NET MAUI. We’ll also look at more experimental future possibilities, including running .NET Core on WASI (WebAssembly on the server) which creates entirely new cloud and edge hosting options and lets you bring .NET code to places it’s never been before.
+
+
duration June 29, 2022 - Grace Taylor from the Visual Studio team joins James to talk about a new experiment that they are running to improve tutorial inside of Visual Studio! Their first experiment is going to help developers get started learning and building web apps with Blazor. Install Visual Studio, and you may have the opportunity to test out this new experimental feature from the team.
+
+
duration June 20, 2022 - This video is about test-driving CSS styles in Blazor.
+
+
duration June 16, 2022 - Should I learn Blazor in more depth or should I better understand ASP.NET Core? Which one is the better one to learn well first? Should I bounce back and forth or specialize in one?
+
+
June 3, 2022 - Carl uses a client-side repository based on IndexedDB to persist data even without an Internet connection.
+
+
duration May 27, 2022 - Carl shows you how to use TypeScript when creating a Blazor component.
+
+
duration May 25, 2022 - See how you can quickly and iteratively build modern, native and hybrid web apps for any device with Visual Studio and .NET Multi-platform App UI (.NET MAUI). We’ll take you on a tour of the tools and frameworks that can speed up your development time to create powerful, native desktop and mobile apps for Windows, macOS, iOS, and Android from a single codebase with .NET MAUI. We’ll also show you how to enhance your Blazor web apps with native device capabilities.
+
+
duration May 25, 2022 - Blazor uses the latest open web standards to enable full stack web development with .NET. But what if you need to build a native client app? Blazor is expanding beyond the web to enable support for building native client apps using a hybrid of web technologies and .NET. In this session we’ll look at the new Blazor Hybrid support in .NET MAUI for building cross platform native client apps for mobile and desktop as well as Blazor Hybrid support for modernizing WPF and Windows Forms apps.
+
+
duration May 25, 2022 - WebAssembly is moving beyond the browser and is pitched to become a foundational element of modern cloud-native architecture. It lets any language compile to universal binaries that run on any OS or processor, robustly sandboxed and with great performance. This session covers a new approach to running .NET in WASI environments. You’ll see how your existing .NET code could be built into WASI-compliant modules, plus the opportunities this opens. This is experimental, not yet a committed product.
+
+
May 23, 2022 - Let's start our journey together to build beautiful native cross-platform apps for iOS, Android, macOS, and Windows with .NET MAUI, C#, and Visual Studio! In this full workshop, I will walk you through everything you need to know about .NET MAUI and building your very first app. You will learn the basics including how to build user interfaces with XAML, how MVVM and data binding simplify development, how to navigate between pages, access platform features like geolocation, optimize data collections, and theme your app for light theme and dark theme. This course has everything you need to learn the basics and set you up for success when building apps with .NET MAUI.
+
+
duration May 20, 2022 - In the last video, we created a custom report using the Bold Reports Designer. We could use the provided Bold Reports Viewer to display the reports, but that does not always fit with what you want to accomplish. That is why today we will implement a report viewer in a Blazor Server application. That way, we can show our custom report to our clients directly inside of our site instead of sending them to a separate application.
+
+
duration May 19, 2022 - Many developers still consider WebAssembly to be a leading-edge, niche technology tied to low-level systems programming languages. However, C# and .NET have run on WebAssembly since 2017. Blazor WebAssembly brought .NET into the browser on open standards, and is now one of the fastest-growing parts of .NET across enterprises, startups, and hobbyists. Next, with WASI we could let you run .NET in even more places, introducing cloud-native tools and techniques to a wider segment of the global developer community. This is a technical talk showing how we bring .NET to WebAssembly. Steve will demonstrate how it runs both interpreted and AOT-compiled, how an IDE debugger can attach, performance tradeoffs, and how a move from Emscripten to WASI SDK lets it run in Wasmtime/Wasmer or higher-level runtimes like wasmCloud. Secondly, you'll hear lessons learned from Blazor as an open-source project - challenges and misconceptions faced bringing WebAssembly beyond early adopters.
+
+
duration May 19, 2022 - In this video we use the ServiceStack Blazor WASM template to show how the combination of typed end-to-end services and Blazor is great for building line of business applications. The template provides a clean separation of concerns, typed end-to-end safety and rapid iteration thanks to shared C# language, Visual Studio Hot Reload and ServiceStack message centric design.
+
+
duration May 17, 2022 - Showcasing migrating a Blazor WASM PWA to .NET MAUI and Blazor Hybrid. Community links.
+
+
duration May 13, 2022 - Talk by Steve Sanderson at the NDC London 2022. Real-world software projects often involve combining many technologies. So, is modern Blazor powerful and flexible enough for your team's needs? In this demo-heavy talk, Steve will show how Blazor WebAssembly/Server can seamlessly embed libraries and logic written in other languages such as Rust or C/C++, how Blazor WebAssembly/Server components can be used inside other SPA frameworks such as React or Angular (or vice-versa) and how Blazor components can be used not only for web projects, but also shared with native apps for macOS, iOS, Android, and Windows (including WPF and WinForms) These capabilities should equip your team to take on the most ambitious projects with confidence. We'll then look further into the future and consider how WebAssembly is moving beyond the browser and is pitched to become a foundational element of cloud-native server apps. You'll be among the first to see an experimental new approach to compiling .NET applications into WASI-compliant universal binaries that can run on any OS or processor, robustly sandboxed and with great performance.
+
+
duration May 13, 2022 - Creating office files in C# has always been a popular solution. You can generate reports in formats that users are comfortable with. With the Syncfusion file controls, you can not only create Excel files, you can also create Microsoft Word documents, PowerPoint presentations, and PDF documents. In this video, we will look at the office file controls in Syncfusion and how to use them.
+
+
duration May 11, 2022 - John Miller joins James on this week's On .NET to chat about how .NET developers can build Microsoft Teams apps and bots completely with C#, .NET, and Blazor! John walks us through everything we need to know to get started and how to even publish apps for Teams.
+
+
duration May 11, 2022 - The Blazor controls in Syncfusion are pretty impressive. In this video, we will look at the DataGrid, charts, a Kanban-style board, a dashboard, autocomplete textboxes, context menus, signature pads, menu bars, toast messages, and more. There are so many controls to look at, in fact, that we are going to purposefully ignore the office file creation and display controls, as well as reporting. That way, we can spend more time on the other controls today and then focus on the office files in another video. The reporting will actually have two different videos dedicated to it.
+
+
duration May 10, 2022 - Modern web development means that more and more application code is running in the browser. Traditionally this has been JavaScript but more recently there has been the trend to use C#/WASM with Blazor. These modern applications typically also need authentication and single-sign-on as well as token-based security for calling APIs – in other words OpenID Connect and OAuth 2. There are different patterns for securing such applications and this session covers some of the pitfalls of the various approaches, especially given the ever-changing browser landscape. We will conclude with the “backend for frontend” (or BFF) pattern which has become the most secure and stable of these approaches.
+
+
duration May 5, 2022 - App walkthrough, Create a static web app with an Azure DevOps pipeline, Add Azure DevOps environments and configure approvals, Configure a multi-stage pipeline, Static Web Apps named preview environments, Playwright tests, Manual approval before production deployment, Secure staging environments with a password. Source code.
+
+
duration May 2, 2022 - In this week's episode, Kristoffer Strube joins the panel to show us a Blazor WASM wrapper for the browser File System Access API. He's bringing demos and code to share, so this is an episode you won't want to miss.
+
+
duration April 29, 2022 - Securing SPAs and Blazor Applications using the BFF (Backend for Frontend) Pattern at the NDC Porto, by Dominick Baier.
+
+
duration April 29, 2022 - State management in Blazor, at the NDC Porto 2022. When developing a Single Page Application, a very important aspect is state management. Since Blazer is a component-based UI framework, how do we manage to update the UI when the state of the application changes.
+
+
duration April 29, 2022 - Streaming three ways with Blazor: REST, gRPC, and SignalR, by Carl Franklin at the NDC Porto 2022. Learn how to stream data from server to client to improve perceived performance and increase scalability. Carl shows how streaming works in general, and then how to implement using each of these three transports.
+
+
duration April 25, 2022 - SignalR is an excellent way to connect two or more clients together for real-time communication. The best part is that this library is just a wrapper around web-standard technologies such as Web Sockets and Long-Polling. It just makes them easier to use. That means we can even use SignalR with other clients such as Java or JavaScript. In this video, we are going to learn how to set up SignalR and how to connect to it using web clients and desktop clients. Throughout the video, we will cover best practices, as well as how to use this in the real world.
+
+
duration April 21, 2022 - Carl revisits the topic of MVVM with Blazor, clarifying your options.
+
+
duration April 14, 2022 - Build a generic repository that the client can query.
+
+
duration April 12, 2022 - David Pine introduces Blazorators, Blazor C# Source Generators on this month's Blazor Community Standup. Community links.
+
+
duration April 1, 2022 - Blazor enables building client-side web UI with .NET, but sometimes you need more than what the web platform offers. Sometimes you need full access to the native capabilities of the device. You can now host Blazor components in .NET MAUI apps to build cross-platform native apps using web UI. The components run natively in the .NET process and render web UI to an embedded web view control using a local interop channel. This hybrid approach gives you the best of native and the web. Your components can access native functionality through the .NET platform, and they render standard web UI. .NET MAUI Blazor apps can run anywhere .NET MAUI can (Windows, Mac, iOS, and Android).
+
+
duration March 31, 2022 - pp State Management using Fluxor, a Flux/Redux library for Blazor.
+
+
duration Mars 14, 2022 - Fritz shows you how to connect authentication and authorization to your Blazor app. We'll focus on how to connect a properly configured Microsoft Identity application to your Blazor framework.
+
+
duration Mars 8, 2022 - Join this Blazor Community Standup to learn more about using Blazor Hybrid to create cross-platform native client apps for Windows, iOS, Android & Mac. Community links.
+
+
duration Mars 2, 2022 - Tailwind CSS has been growing in popularity for some time. It’s fast becoming one of the top frameworks to use when styling applications. It offers a different approach to the traditional frameworks like Bootstrap—utility based styling. Rather than using prebuilt components—which result in your application looking like a lot of others on the web—you can tailor your design by applying small focused CSS classes resulting in a unique style for your app. In this talk, you will learn how to bring the power of Tailwind CSS to your Blazor applications. We’ll start off with an introduction to Tailwind and how it differs from other CSS frameworks. Then we’ll get into some code and see how we can integrate Tailwind with Blazor. For the rest of the time, we’ll explore the various features of Tailwind and see how just how beautiful we can make our Blazor app. By Chris Sainty, at the NDC Oslo 2021.
+
+
duration Mars 1, 2022 - Why create tests of UI components? Isn’t UI tests inherently brittle, run slowly, and hard to maintain? By Egil Hansen, at the NDC Oslo 2021.
+
+
duration February 28, 2022 - You've built your Blazor application, now where do you run it? In this demo filled session, Fritz will talk through Progressive Web Apps, packaging with Docker, and deploying your Blazor application to Azure. Community links.
+
+
duration February 21, 2022 - Talk by Steve Sanderson at the NDC Oslo 2021. .NET 6 is a huge release for Blazor, adding a ton of powerful new features for .NET web developers. This talk will be full of demos to get you up-to-speed on this hot framework.
+
+
duration duration February 14, 2022 - Blazor is a free and open-source web framework that enables developers to create web apps using C# and HTML. Being a .NET developer as well as a big fan of classic point-and-click adventure games, I’ve ported my Game-a-Tron 4000 adventure game engine to Blazor.
+
+
duration February 8, 2022 - Find out what's being planned for Blazor in .NET 7. Community links.
+
+
duration January 24, 2022 - The first day of the conference kicks off with a keynote session by Scott Hunter. Day one is focused on front-end technologies (Blazor). Conference website.
+
+
duration January 11, 2022 - Join Blazor creator Steve Sanderson for a special look at Blazor WebAssembly on .NET 6. Community links.
+ Articles
+
+
July 9, 2024 - This release focuses on quality-of-life enhancements for all developers and workloads. When you use Visual Studio, you want to feel empowered and productive. That's why quality-of-life features are so important: they make coding a smooth and enjoyable experience, free of unnecessary hassles and headaches. We hope you'll love this update.
+
+
June 12, 2024 - This article is about the new Blazor render modes in .NET 8, including ServerInteractivity, WebAssemblyInteractivity, AutoInteractivity and static server-side rendering (SSR).
+
+
June 11, 2024 - How to use Blazor.Diagrams.
+
+
June 4, 2024 - .NET 9 is shaping up ahead of its November 2024 release. Here are the highlights for Blazor so far.
+
+
May 29, 2024 - Avoiding interactivity with Blazor.
+
+
May 21, 2024 - .NET Announcements & Updates from Microsoft Build 2024.
+
+
November 28, 2023 - Per-User Blazor 8 State.
+
+
October 12, 2023 - Blazor 8 State Management.
+
+
October 10, 2023 - This is the last release candidate that we plan to share before the final .NET 8 release later this year. Most of the planned features and changes for .NET 8 are part of this release candidate and are ready for you to try out.
+
+
September 12, 2023 - This release includes a new AOT mode for both Android and WASM, System.Text.Json improvements, and Azure Managed Identity support for containers. Now is great time to pick up and test .NET 8 if you haven’t yet.
+
+
September 5, 2023 - This article introduces .NET Blazor, a powerful framework that unifies client-side and server-side development paradigms and offers enhanced performance and improved tooling.
+
+
July 13, 2023 - Userware is using vestiges of the long-gone and sorely missed Microsoft Silverlight web-dev platform to power its new "XAML for Blazor" offering, which lets .NET developers use markup language within client-side Blazor applications.
+
+
July 12, 2023 - New components and features added in the Syncfusion Essential Studio 2023 Volume 2 release for the Blazor platform.
+
+
July 11, 2023 - .NET 8 Preview 6 is now available and includes many great new improvements to ASP.NET Core. Here’s a summary of what’s new in this preview release: Form model binding & validation with server-side rendering, Enhanced page navigation & form handling, Preserve existing DOM elements with streaming rendering, Interactive rendering with Blazor WebAssembly and more.
+
+
July 11, 2023 - This is the first in a number of posts where we’ll explore the changes coming for Blazor in .NET 8.
+
+
July 10, 2023 - Today, we are thrilled to announce the release of “XAML for Blazor”, a new Blazor extension by Userware that brings the power of XAML to Blazor WebAssembly applications. It combines the familiarity and capabilities of XAML with the versatility of Blazor, empowering .NET developers to create cutting-edge web applications with even greater ease and flexibility.
+
+
June 13, 2023 - .NET 8 Preview 5 is now available and includes many great new improvements to ASP.NET Core. New Blazor Web App project template, Blazor router integration with endpoint routing, Blazor Content Security Policy (CSP) compatibility and more.
+
+
May 25, 2023 - List of available free and open-source user interface libraries for Blazor development.
+
+
May 23, 2023 - Components, done “right” carry tremendous potential to speed up your web development, and make ongoing maintenance (and development) of your apps much easier. But, like any tool, it all depends how you use it.
+
+
May 16, 2023 - .NET 8 Preview 4 is now available and includes many great new improvements to ASP.NET Core. Streaming rendering with Blazor components, Handling form posts with Blazor SSR, Route to named elements in Blazor, Webcil packaging for Blazor WebAssembly apps and more.
+
+
May 16, 2023 - .NET 8 is shaping up to be a significant release for Blazor, and there’s one big reason why.
+
+
April 24, 2023 - Are you ready for Build 2023? Microsoft’s premier developer conference is just around the corner, and there are several exciting .NET sessions that you won’t want to miss.
+
+
April 12, 2023 - Sooner or later, as you build out your Blazor UI, you’re going to hit a situation where your component isn’t re-rendering when you expect it to.
+
+
April 11, 2023 - ASP.NET Core updates in .NET 8 Preview 3. Here’s a summary of what’s new in this preview release: Server-side rendering with Blazor, Render Razor components outside of ASP.NET Core, Sections support in Blazor, Monitor Blazor Server circuit activity, SIMD enabled by default for Blazor WebAssembly apps and more. See the ASP.NET Core roadmap for .NET 8.
+
+
April 3, 2023 - Microsoft even offers a Build reusable components with Blazor learning module that shows how to build a Razor class library that contains Blazor components, package a Razor class library for use in other Blazor applications, and reference a Razor class library in a Blazor application and use its components. Author: Jeffrey T. Fritz.
+
+
February 23, 2023 - There are some big changes coming for Blazor in .NET 8 and they look very, very promising.
+
+
February 23, 2023 - The NavigationManager is a service that enables developers to programmatically navigate the user to different pages or external URIs. In ASP.NET Core 7, there were added new features that enable us to parse simple state between pages and listen to and intercept navigation. In this post, we will look at the basic capabilities of the NavigationManager, present what new features were added in ASP.NET Core 7, discuss how it fits into the Blazor/.NET ecosystem, and in the end present a scenario that is now possible with relative ease using new additions from ASP.NET Core 7.
+
+
February 21, 2023 - The first preview of .NET 8 is ready to download. This blog post covers the major themes and goals that drive the prioritization and selection of enhancements to develop. .NET 8 preview and release candidate builds will be delivered monthly. As usual, the final release will be delivered sometime in November at .NET Conf.
+
GitHub StarsLast Commit
+
February 19, 2023 - This blog is set in two parts. The first describes the process of setting up an Azure Active Directory multitenant on Azure, and the 2nd part describes how to integrate with a Blazor WASM application. Source code .
+
+
February 14, 2023 - See the setup and customization of the newest Progress Telerik Reporting viewer, implemented with Telerik UI for Blazor controls with both Blazor Wasm and Blazor Server.
+
+
February 1, 2023 - Release of Blazorise v1.2, which brings a number of new features, improvements, and bug fixes to the framework.
+
+
January 30, 2023 - This articles looks at the current state of WebAssembly (wasm). It starts by revisiting 2022 developments then he tries to predict where I think things will go in 2023.
+
+
January 30, 2023 - Second edition of the eBook "Blazor WebAssembly Succinctly" by Michael Washington.
+
+
January 28, 2023 - You can play dynamic audio in a Blazor Server application and have full control over the user interface. YouTube video about this article.
+
+
January 27, 2023 - Both Blazor and .NET MAUI are great and Powerful frameworks. Using .NET MAUI, you can build fully native cross-platform apps and build web apps completely in C# with Blazor. But when you combine them with the MAUI Blazor template, you need to know that it should feel like a mobile app, not a web page. This articles explains some tips and tricks.
+
+
January 26, 2023 - We've started some experiments to combine the advantages of Razor Pages, Blazor Server and Blazor WebAssembly all into one thing.
+
+
January 23, 2023 - Blazor WebAssembly allows to run a .NET web application in a browser. Starting with .NET 7, you can easily run any .NET method from JavaScript without needing the whole Blazor framework. Let's see how to run a .NET method from JavaScript.
+
+
January 21, 2023 - You can do a lot of things with Blazor: PWA, SSR, SPA, Hybrid app... the process of how the user sees the first page is different for each of these modes.
+
+
January 16, 2023 - Reducing Blazor WASM size by providing custom ICU data.
+
+
December 22, 2022 - Since version 7.0 of .NET, Microsoft has enhanced and integrated the ability to create HTML Custom Elements. These custom elements offer developers a way to create their own full-featured DOM elements. In Blazor, this allows publishing these components to other SPA Frameworks, such as Angular or React. More info in the Microsoft documentation.
+
+
December 19, 2022 - The .NET Podcast app was first introduced at .NET Conf 2021 and recently updated to highlight new features in .NET 7 at the .NET Conf 2022 keynote. The podcast app is ready to use sample application that showcases .NET, ASP.NET Core, Blazor, .NET MAUI, Azure Container Apps, Orleans, Power Platform, Playwright, and more. This post explains all the new features and show how we upgraded the .NET Podcast app to take advantage of them.
+
+
December 15, 2022 - This post is about the benefits of using WASM outside the browser and its potential as a transformative technology on the server.
+
GitHub StarsLast Commit
+
December 8, 2022 - Learn how to integrate with Keycloak from Blazor WASM. Create a public client and use built-in capabilities of Microsoft.AspNetCore.Components.WebAssembly.Authentication that integrates with OpenId Connect compliant providers. Source code Brings ChartJs.
+
+
December 5, 2022 - What’s new in the Microsoft Fluent UI library for Blazor version 2.0.
+
+
November 29, 2022 - In this post, we're going to reuse the concepts we have learned to build a better experience: a web application, that we can use to manage our custom learning provider and its contents. We'll focus on how to implement in a real application some of the peculiar features we have learned about these APIs, like the fact that a different set of permissions is required based on the type of content you're working with.
+
+
November 24, 2022 - This new Blazorise 1.1.4 is a hotfix release to solve this and a few other minor issues that were fixed in the meantime. Blazorise 1.1.4 is a recommended upgrade for all Blazorise 1.1 and Blazorise 1.1.3 users.
+
+
November 17, 2022 - If you are working with Blazor, gRPC is a big issue for transferring data from APIs to clients. One issue of developing with gRPC-Web is debugging the transmitted data because the data is in an efficient binary message format. This article shows you how to solve this problem with the help of my NuGet.
+
+
November 8, 2022 - This Blazorise version was supposed to be just a minor maintenance release. Instead, we got a few relatively large features and announcements, with .NET 7 support.
+
+
November 2, 2022 - Microsoft is exploring built-in container support for client-side Blazor WebAssembly apps. Article on Visual Studio Magazine.
+
+
October 31, 2022 - Resize images before uploading in Blazor Web Assembly.
+
+
October 31, 2022 - On October 24th, Docker announced the support of WASM and WASI in a new technical preview release. This articles tries it out and sees how it works with .NET 7.
+
+
October 29, 2022 - One of the cool features of Blazor is code reusability. Using Razor Class Library, we can use our Razor component in all blazor type project like Blazor Server, WASM and MAUI Hybrid.
+
+
October 29, 2022 - This post will show you how to run .NET 7 on a Raspberry PI Zero 2 W using WASM and WASI.
+
+
October 24, 2022 - The Technical Preview of Docker+Wasm is now available! Wasm has been producing a lot of buzz recently, and this feature will make it easier for you to quickly build applications targeting Wasm runtimes.
+
+
October 12, 2022 - This series describes the implementation of a User Interface driven by an Elsa workflow engine.
+
+
October 11, 2022 - .NET 7 Release Candidate 2 (RC2) is now available and includes many great new improvements to ASP.NET Core and Blazor: improved diagnostics for authentication in Blazor WebAssembly and WebAssembly multithreading (experimental).
+
+
October 11, 2022 - Multithreading support for client-side Blazor WebAssembly apps is planned for .NET 8 in November 2023, but developers can try it out now for .NET apps thanks to experimental functionality in the brand-new .NET 7 Release Candidate 2.
+
+
October 5, 2022 - Using .NET 7's Blazor Custom Elements to render dynamic content, by Jon Hilton.
+
+
October 4, 2022 - This article shows off a Blazor component that can display an object recursively in a tree view. The component was made as part as a project, FHIR Watch, a tool for comparing FHIR data from two different data sources: FHIR API Service and Dataverse. As such, it is particularly useful for displaying FHIR data.
+
+
September 30, 2022 - This post shows how to install the new template, create and run a new app using the template, and then I’ll share some recommended resources.
+
+
September 20, 2022 - WebAssembly, the open source tech that makes client-side Blazor work, was the star of the ASP.NET Core show in the new ASP.NET Core updates in .NET 7 Release Candidate 1.
+
GitHub StarsLast Commit
+
September 20, 2022 - Part 7 of the articles explaining how port the game Wolfenstein 3D on C# and Blazor. Source code .
    +
  • C# / Blazor Wolfenstein - Part 6 - The Basic Raycaster - September 18, 2022 - Part 6 of the articles explaining how port the game Wolfenstein 3D on C# and Blazor. Source code stars last commit.
  • +
+
+
September 14, 2022 - .NET 7 Release Candidate 1 (RC1) is now available and includes many great new improvements to ASP.NET Core.
+
+
September 7, 2022 - Please imagine the case that you have a Blazor WebAssembly PWA site that supports offline mode, and you've been opening that PWA by a web browser. If you published a new version of that PWA, you might want to verify it, I guess. In this case, you will reload the page on that web browser. However, you might never see the contents of the new version unexpectedly even though you hard-reload it.
+
+
September 2, 2022 - OpenAPI is a language-agnostic specification for documenting RESTful APIs. It allows both humans and computers to understand the capabilities of a service without accessing code, docs, or using other methods. Hosted Blazor WebAssembly apps include an ASP.NET Core backend for file and API access, and so implementing support for OpenAPI provides numerous benefits.
+
+
August 30, 2022 - Troubleshooting .NET Blazor WASM Debugging.
+
+
July 27, 2022 - The 3.1.4 release is primarily focused on stabilization. This includes a variety of performance optimizations, user experience improvements, and localization enhancements.
+
+
July 23, 2022 - This serie of article compares the approaches of XAML vs Blazor. The same application will be create using XAML and Blazor to discover the pros and cons. The part 1 focuses on XAML.
+
+
July 22, 2022 - Azure Static Web Apps is a great place to host Blazor WebAssembly apps. Among Static Web Apps' many features, it has built-in support for authentication using social logins. In this article, we'll look at how we can take advantage of Static Web Apps Authentication in our Blazor WebAssembly apps. By Anthony Chu, from Microsoft.
+
+
July 19, 2022 - Share Blazor components using dependency injection.
+
+
July 18, 2022 - Using IAsyncEnumerable in a Razor component.
+
+
July 15, 2022 - Try the new Blazor Guide in Visual Studio. Read on to learn about how to give it a try and for a chance to receive a sticker.
+
+
July 12, 2022 - .NET 7 Preview 6 is now available and includes many great new improvements to ASP.NET Core. Blazor custom elements no longer experimental, experimental QuickGrid component for Blazor, System.Security.Cryptography support on WebAssembly, empty Blazor project templates and more. For more details on the ASP.NET Core work planned for .NET 7 see the full ASP.NET Core roadmap for .NET 7 on GitHub.
+
+
June 29, 2022 - Uno Platform Does WebAssembly Threading Months Ahead of .NET 7, by David Ramel for Visual Studio Magazine.
+
+
June 29, 2022 - 3 reasons why I've created yet another library for the downloading on Blazor apps.
+
+
June 24, 2022 - Blazor Posts Biggest Gain in WebAssembly Usage: Report, by David Ramel for Visual Studio Magazine.
+
+
June 21, 2022 - Implementing RavenDB time series in a Blazor project.
+
+
June 9, 2022 - The FAST team and friends have been hard at work not only on Microsoft’s core Web Components platform, but also on Fluent UI integrations for Blazor. This post will give you an overview of what’s new and changed in versions 1.3 and 1.4 of the Microsoft Fluent UI Blazor library.
+
+
June 8, 2022 - A Full-Stack Web App Using Blazor WebAssembly and GraphQL: Part 3. Part 1.
+
+
May 31, 2022 - The dependency injection system is a big part of how modern ASP.NET Core works internally: It provides a flexible solution for developers to structure their projects, decouple their dependencies, and control the lifetimes of the components within an application. In Blazor - a new part of ASP.NET Core - however, the DI system feels a bit odd, and things seem to work a bit differently than expected. This article will explain why this is not only a feeling but indeed the case in the first place and how to handle the differences in order to not run into problems later on.
+
+
May 10, 2022 - .NET 7 Preview 4 is now available and includes many great new improvements to ASP.NET Core. Article by Dan Roth from Microsoft.
+
+
May 9, 2022 - Q&A: Deep Dive on Blazor, on Visual Studio Magazine.
+
+
May 6, 2022 - Syncfusion Essential Studio Release Enhances .NET MAUI, WinUI, Blazor and More, on Visual Studio Magazine.
+
+
April 28, 2022 - Use the Query String to pass an array of selected values between Blazor Pages.
+
+
April 26, 2022 - Guide on containerizing a complex system composed from multiple Blazor WASM apps, ASPNET Core Web Api, NGINX & Let's Encrypt SSL certificates.
+
+
April 12, 2022 - Sneak Preview how to use SQLite and EF Core in the browser with Blazor WebAssembly.
+
+
March 31, 2022 - Mastering Blazor - Part 1: DOM Integration.
+
+
March 24, 2022 - Conditional Blazor Styles (without the if statements).
+
+
March 18, 2022 - Securing a Blazor WebAssembly Hosted Apps with Azure Active Directory. Part 2.
+
+
February 17, 2022 - This article shows how to create a full-stack web application using Blazor WebAssembly and GraphQL with SQL Server as our database.
+
+
February 10, 2022 - What's Coming for Blazor Hybrid in .NET 7, Visual Studio Magazine.
+
+
January 19, 2022 - Use Tailwind's new JIT mode when developing Blazor applications.
+ Podcasts
+
+
June 20, 2024 - What's up with MAUI and Blazor? Carl and Richard chat with Beth Massi about the latest MAUI, including the new webview available on GitHub that lets you embed an existing web page into your MAUI app. Beth talks about making apps the way you want to - with a mobile, web, or desktop focus - or making them all! Mixing Blazor and MAUI means you can steer clear of XAML if you prefer. There's no right way to build your clients, and MAUI gives you many choices. Duration: 45 minutes.
+
+
March 27, 2023 - Chris is a Microsoft MVP, author, and software engineer with over 17 years of experience with ASP.NET. Passionate about sharing his knowledge with the community, he regularly writes both for his own blog as well as others — such as Visual Studio magazine, Progress Telerik, and StackOverflow. This passion for blogging led to his first book, Blazor in Action, a practical guide to building Blazor applications. He also maintains several popular open-source projects under the GitHub organization, Blazored. When not tapping on a keyboard, Chris is a keen speaker, having delivered talks at both user groups and conferences all over the world. Duration: 41 minutes.
+
+
March 23, 2023 - What if you didn't have to choose between client-side and server-side Blazor? Carl and Richard talk to Javier Nelson and Steve Sanderson about Blazor United in its early stages of development, providing flexibility at the web component level for client- and server-side rendering. At the simplest level, Blazor United offers server-side rendering when a site is first hit so that you can load the larger client-side components over time. But deeper is the idea that some elements on your web page benefit from being client-side, and some from being server-side, and why should you have to choose only one? Duration: 53 minutes.
+
+
July 17, 2022 - At NDC London we sat down with Steve Sanderson and talked about the origin story of Blazor, some of the upcoming things in .NET 7, and what Steve is working on right now. Duration: 35 minutes.
+
+
July 7, 2022 - WebAssembly is awesome - what else can you do with it? While at NDC London, Carl and Richard talked to Steve Sanderson about his work with WebAssembly, including Blazor. Steve talks about how WebAssembly continues to evolve adding WebAssembly System Integration. This opens the door to the idea that code in the WebAssembly can be run anywhere - any operating system, any language, using whatever compute is available. That gives an option to run code on the client, the server, and anywhere in between. Duration: 55 minutes.
+
+
June 2, 2022 - How do you find a great video clip after the fact? Carl and Richard talk to Jeff Fritz about his work building KlipTok, a tool for making Twitch video clips more discoverable and shareable. Jeff digs into the tricky bits of KlipTok, which is all about fast indexing and searching to get to the right clip. The conversation digs into various data storage techniques and using the cloud in a way that doesn't break the bank. Jeff may be a Microsoft employee, but that doesn't mean he uses only Microsoft tools for his projects. Duration: 57 minutes.
+
+
May 27, 2022 - Jon Galloway talks to David Ortinau about .NET MAUI. Duration: 41 minutes. YouTube video.
+
+
May 25, 2022 - Microsoft have just had their annual Build conference - which comes with a whole host of exciting announcements and discussions about hot programming topics in the Microsoft developer space. And each year, I long for a podcast episode to come out straight after Build, overviewing them! Well, this year - this podcast aims to do just that! In this episode, I was joined by both Scott Hunter and Gaurav Seth to chat about various topics. Check out the links below for a guide to what we discussed. Duration: 71 minutes.
+
+
May 10, 2022 - The Unhandled Exception Podcast with Andrew Lock (andrewlock.net). He’s the author of the Manning ebook, ASP.NET Core in Action, Second Edition. This episode covers a lot - from the different flavours of ASP.NET, to Kubernetes, Blazor, gRPC, testing, Minimal API, MediatR and more.
+
+
May 4, 2022 - In this episode we talked with Poornima Nayar about Umbraco Heartcore and where you might use it, Blazor, a little on GraphQL and how it fits very well with mobile apps which communicate with remote APIs. Duration: 59 minutes.
+
+
February 12, 2022 - Steve Sanderson talks about his journey into tech, his life, education, career and everything else in between. Duration: 73 minutes.
+ Presentations slides
+
+
January 28, 2021 - Using .NET 5 with the Raspberry Pi, on Slideshare.
+ Tooling
+
GitHub StarsLast Commit
+
Update .razor files and see the updates instantly without reloading the page. Your application state is preserved because there is no need to reload anything. livesharp.net.
+
+
Blazor .Net Developer Playground and Code Editor in the Browser.
+
GitHub StarsLast Commit
+
A project templates package of Blazor apps without JavaScript and CSS libraries.
+
GitHub StarsLast Commit
+
Write, compile, execute and share Blazor components entirely in the browser - https://blazorrepl.com.
+
+
A Visual Studio Code extension that offers Blazor and Razor snippets.
+
Last Commit
+
When you publish your Blazor WebAssembly app, this package pre-renders and saves the app as static HTML files in your public folder.
+
Last Commit
+
Add this NuGet package to your Blazor WebAssembly project to easily publish it to GitHub Pages.
+
GitHub StarsLast Commit
+
A dotnet global tool for compilation, minification, and compression of scss, css and js.
+
+
.NET Core.
+
+
A Visual Studio Code extension that offers improved Razor support.
+
GitHub StarsLast Commit
+
Tracetool viewer, client Api for Dotnet, Java, Javasvript, C++ , Python, Delphi.
+
+
Latest preview of Visual Studio.
+
+
Visual Studio Code, free, open source and cross-platform code editor.
+ Books
+
+
Build Single-Page Apps with WebAssembly and C# (By David Pine via O'Reilly Early Release February 3rd, 2022).
+
+
A practical and hands-on approach to learning Blazor using .NET 6. (3rd ed. edition (December 8, 2021).
+
+
Blazor WebAssembly by Example: A project-based guide to building web apps with .NET, Blazor WebAssembly, and C# (1st edition published the July 9th, 2021).
+
+
An example-driven guide to building reusable UI components and web frontends—all with Blazor, C#, and .NET. (Manning Early Access Program began October 2020).
+
+
Microsoft Blazor: Building Web Applications in .NET (Second edition published in May 2020).
+
+
Blazor Revealed, Building Web Applications in .NET (Published February, 2019).
+
+
Blazor Quick Start Guide: Build web applications using Blazor, EF Core, and SQL Server (Published October 31, 2018).
+ E-Books
+
+
August 31, 2020 - Blazor is a framework for creating SPA webpages with either client-side or server-side architectures, using Razor technology written with the C# language. Because client-side Blazor with WebAssembly executes entirely on a user's browser, it’s very fast for many applications. In Blazor WebAssembly Succinctly, Michael Washington will take readers through the core elements of Blazor and then explore additional features by building a sample application. Free e-book.
+
+
April 16, 2020 - A free e-book for starting with the Blazor framework.
+
+
March 18, 2020 - A free e-book for getting started with the Blazor framework. Examples source code.
+
+
Blazor for ASP.NET Web Forms developers, a free e-book from Microsoft.
+
+
This book covers the new Blazor UI framework, including how to create server-side and client-side WebAssembly projects, how to implement authentication and authorization, and how to use data binding. It then covers how CSLA .NET supports Blazor, including walking through a complete sample app.
+
+
August 24, 2019 - An Introduction to Building Applications with Blazor: How to get started creating applications using this exciting easy to use Microsoft C# framework
+ Courses
+
+
Build a web app with Blazor WebAssembly and Visual Studio Code, on Microsoft Learn.
+
+
June 2020 - DevOps and Docker Support for .NET Core Blazor Applications, on Udemy. This Docker Support Course with DevOps concepts using ASP.NET Core Blazor will teach you Dockerisation of Blazor Apps.
+
+
Create interactive web applications with C#, on Udemy.
+
+
December, 2019 - Building a Blazor app is building components. This course is essential for gaining a good understanding of components. On Pluralsight.
+
+
December, 2019 - Learn how to secure your Blazor application using a variety of best practice techniques for authentication and authorization. On Pluralsight.
+
+
December, 2019 - Learn how to build your first application in a hands-on way using Blazor, Microsoft's solution to use C# to write interactive web UIs without JavaScript. On Pluralsight.
+
+
December 2019 - Blazor In-Depth Workshop (Blaze Invaders), on C# Academy. Learn serious Blazor concepts while building a working browser based game.
+
+
October 2019 - Learn how to use a framework that allows you to run your compiled code directly in the browser on top of WebAssembly, a course on Udemy.
+
+
October 2019 - Blazor on ASP.NET Core 3.0, a course on SkillShare.
+
GitHub Stars
+
Blazor First Look on LinkedIn Learning. Source code .
+
GitHub Stars
+
DevExpress Blazor free training course Source code .
+
+
June 2021 - Discover the Core Concepts of Blazor and learn to create web applications with ease.
+ Community
+
+
This repository's Twitter feed.
+
+
Blazor channel on the DotNetEvolution discord server.
+
+
Blazor discussion on Gitter.
+
GitHub StarsLast Commit
+
    +
  • This is a .NET knowledge sharing platform with live demos crafted by developers for developers with love using .NET Blazor. ilovedotnet.org.
  • +
+
+
Community documentation on Blazor.
+
+
Blogs and code samples primarily covering server-side Blazor.
+
+
Practical samples of Blazor.
+
+
Practical samples of Blazor Server-Side.
+
+
Blazor subreddit.
+
+
Blazor questions feed on Stack Overflow.
+
+
Hashtag on Twitter.
+
+
Man page for Blazor and WebAssembly.
+ Other Languages
+
+
[Portuguese] Blog about Blazor.
+
+
[Russian] Old official documentation website translated in Russian.
+
+
[French] DevApps.be's podcast #44: "Blazor et WebAssembly vont-ils tuer JavaScript ?".
+
+
[French] DevApps.be's podcast #47: "Actualités : TypeScript, Uno, Angular, DocFX, Database".
+
+
[Italian] Video about Blazor.
+
+
[Italian] Italian Blazor community website with useful articles and events.
+
+
[Spanish] Series of videos about Blazor.
+
+
[German] Blog about Blazor.
+ +
+ + + +
+ +
+ +
+ An unhandled error has occurred. + Reload + 🗙 +
+ + + + + diff --git a/index.html.br b/index.html.br new file mode 100644 index 00000000..850f2fea Binary files /dev/null and b/index.html.br differ diff --git a/index.html.gz b/index.html.gz new file mode 100644 index 00000000..c4125544 Binary files /dev/null and b/index.html.gz differ diff --git a/scripts/helper.js b/scripts/helper.js new file mode 100644 index 00000000..2022a59b --- /dev/null +++ b/scripts/helper.js @@ -0,0 +1,32 @@ +export const scrollToAnchor = (anchorName, smooth, changeUrl) => { + try { + const element = document.querySelector(`a[name=${anchorName}]`); + if (element !== null) { + element.scrollIntoView({ behavior: smooth === true ? 'smooth' : 'auto' }); + if (changeUrl === true) { + const href = location.href.split('#')[0]; + history.pushState(null, document.title, `${href}#${anchorName}`); + } + } + } + catch (error) { + console.error(error); + } +}; +export const getCurrentTheme = () => { + return localStorage.getItem("theme") || "theme-system-default"; +}; +export const setCurrentTheme = (theme) => { + localStorage.setItem("theme", theme); + document.body.classList.remove("theme-system-default", "theme-light-mode", "theme-dark-mode"); + document.body.classList.add(theme); +}; +export const installHashWatcher = () => { + const locationHashChanged = () => { + const hash = location.hash.split('#').pop() || ''; + if (hash !== '') { + scrollToAnchor(hash, false, false); + } + }; + window.addEventListener("hashchange", locationHashChanged); +}; diff --git a/scripts/helper.js.br b/scripts/helper.js.br new file mode 100644 index 00000000..ad644477 Binary files /dev/null and b/scripts/helper.js.br differ diff --git a/scripts/helper.js.gz b/scripts/helper.js.gz new file mode 100644 index 00000000..1d13b5df Binary files /dev/null and b/scripts/helper.js.gz differ diff --git a/scripts/theme-initializer.js b/scripts/theme-initializer.js new file mode 100644 index 00000000..404d8df8 --- /dev/null +++ b/scripts/theme-initializer.js @@ -0,0 +1,3 @@ +"use strict"; +const theme = localStorage.getItem("theme") || "theme-system-default"; +document.body.classList.add(theme); diff --git a/scripts/theme-initializer.js.br b/scripts/theme-initializer.js.br new file mode 100644 index 00000000..6e2f9504 Binary files /dev/null and b/scripts/theme-initializer.js.br differ diff --git a/scripts/theme-initializer.js.gz b/scripts/theme-initializer.js.gz new file mode 100644 index 00000000..90806a22 Binary files /dev/null and b/scripts/theme-initializer.js.gz differ