diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 00000000..e69de29b
diff --git a/.stamp b/.stamp
new file mode 100644
index 00000000..e69de29b
diff --git a/Logo.svg b/Logo.svg
new file mode 100644
index 00000000..6319cdce
--- /dev/null
+++ b/Logo.svg
@@ -0,0 +1,9 @@
+
diff --git a/MimaSim.Browser.runtimeconfig.json b/MimaSim.Browser.runtimeconfig.json
new file mode 100644
index 00000000..5f82b411
--- /dev/null
+++ b/MimaSim.Browser.runtimeconfig.json
@@ -0,0 +1,36 @@
+{
+ "runtimeOptions": {
+ "tfm": "net8.0",
+ "includedFrameworks": [
+ {
+ "name": "Microsoft.NETCore.App",
+ "version": "8.0.10"
+ }
+ ],
+ "wasmHostProperties": {
+ "perHostConfig": [
+ {
+ "name": "browser",
+ "html-path": "index.html",
+ "Host": "browser"
+ }
+ ],
+ "runtimeArgs": [],
+ "mainAssembly": "MimaSim.Browser.dll"
+ },
+ "configProperties": {
+ "Microsoft.Extensions.DependencyInjection.VerifyOpenGenericServiceTrimmability": true,
+ "System.ComponentModel.TypeConverter.EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization": false,
+ "System.Resources.ResourceManager.AllowCustomResourceTypes": false,
+ "System.Runtime.InteropServices.BuiltInComInterop.IsSupported": false,
+ "System.Runtime.InteropServices.EnableConsumingManagedCodeFromNativeHosting": false,
+ "System.Runtime.InteropServices.EnableCppCLIHostActivation": false,
+ "System.Runtime.InteropServices.Marshalling.EnableGeneratedComInterfaceComImportInterop": false,
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
+ "System.StartupHookProvider.IsSupported": false,
+ "System.Text.Encoding.EnableUnsafeUTF7Encoding": false,
+ "System.Text.Json.JsonSerializer.IsReflectionEnabledByDefault": false,
+ "System.Threading.Thread.EnableAutoreleasePool": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/_framework/Avalonia.Base.wasm b/_framework/Avalonia.Base.wasm
new file mode 100644
index 00000000..ccdbaff5
Binary files /dev/null and b/_framework/Avalonia.Base.wasm differ
diff --git a/_framework/Avalonia.Browser.wasm b/_framework/Avalonia.Browser.wasm
new file mode 100644
index 00000000..04822e2f
Binary files /dev/null and b/_framework/Avalonia.Browser.wasm differ
diff --git a/_framework/Avalonia.Controls.ColorPicker.wasm b/_framework/Avalonia.Controls.ColorPicker.wasm
new file mode 100644
index 00000000..21136a4b
Binary files /dev/null and b/_framework/Avalonia.Controls.ColorPicker.wasm differ
diff --git a/_framework/Avalonia.Controls.DataGrid.wasm b/_framework/Avalonia.Controls.DataGrid.wasm
new file mode 100644
index 00000000..f5350949
Binary files /dev/null and b/_framework/Avalonia.Controls.DataGrid.wasm differ
diff --git a/_framework/Avalonia.Controls.wasm b/_framework/Avalonia.Controls.wasm
new file mode 100644
index 00000000..35ddc4b7
Binary files /dev/null and b/_framework/Avalonia.Controls.wasm differ
diff --git a/_framework/Avalonia.DesignerSupport.wasm b/_framework/Avalonia.DesignerSupport.wasm
new file mode 100644
index 00000000..4073c73b
Binary files /dev/null and b/_framework/Avalonia.DesignerSupport.wasm differ
diff --git a/_framework/Avalonia.Diagnostics.wasm b/_framework/Avalonia.Diagnostics.wasm
new file mode 100644
index 00000000..8841418e
Binary files /dev/null and b/_framework/Avalonia.Diagnostics.wasm differ
diff --git a/_framework/Avalonia.Dialogs.wasm b/_framework/Avalonia.Dialogs.wasm
new file mode 100644
index 00000000..8f6feaa4
Binary files /dev/null and b/_framework/Avalonia.Dialogs.wasm differ
diff --git a/_framework/Avalonia.Fonts.Inter.wasm b/_framework/Avalonia.Fonts.Inter.wasm
new file mode 100644
index 00000000..65810066
Binary files /dev/null and b/_framework/Avalonia.Fonts.Inter.wasm differ
diff --git a/_framework/Avalonia.Markup.Xaml.wasm b/_framework/Avalonia.Markup.Xaml.wasm
new file mode 100644
index 00000000..3eeed16d
Binary files /dev/null and b/_framework/Avalonia.Markup.Xaml.wasm differ
diff --git a/_framework/Avalonia.Markup.wasm b/_framework/Avalonia.Markup.wasm
new file mode 100644
index 00000000..a73a6a0c
Binary files /dev/null and b/_framework/Avalonia.Markup.wasm differ
diff --git a/_framework/Avalonia.Metal.wasm b/_framework/Avalonia.Metal.wasm
new file mode 100644
index 00000000..87732808
Binary files /dev/null and b/_framework/Avalonia.Metal.wasm differ
diff --git a/_framework/Avalonia.MicroCom.wasm b/_framework/Avalonia.MicroCom.wasm
new file mode 100644
index 00000000..551a8ea8
Binary files /dev/null and b/_framework/Avalonia.MicroCom.wasm differ
diff --git a/_framework/Avalonia.OpenGL.wasm b/_framework/Avalonia.OpenGL.wasm
new file mode 100644
index 00000000..294352f8
Binary files /dev/null and b/_framework/Avalonia.OpenGL.wasm differ
diff --git a/_framework/Avalonia.ReactiveUI.wasm b/_framework/Avalonia.ReactiveUI.wasm
new file mode 100644
index 00000000..1fa09ab0
Binary files /dev/null and b/_framework/Avalonia.ReactiveUI.wasm differ
diff --git a/_framework/Avalonia.Remote.Protocol.wasm b/_framework/Avalonia.Remote.Protocol.wasm
new file mode 100644
index 00000000..baeb3ea5
Binary files /dev/null and b/_framework/Avalonia.Remote.Protocol.wasm differ
diff --git a/_framework/Avalonia.Skia.wasm b/_framework/Avalonia.Skia.wasm
new file mode 100644
index 00000000..758d1057
Binary files /dev/null and b/_framework/Avalonia.Skia.wasm differ
diff --git a/_framework/Avalonia.Themes.Fluent.wasm b/_framework/Avalonia.Themes.Fluent.wasm
new file mode 100644
index 00000000..b0a72f48
Binary files /dev/null and b/_framework/Avalonia.Themes.Fluent.wasm differ
diff --git a/_framework/Avalonia.Themes.Simple.wasm b/_framework/Avalonia.Themes.Simple.wasm
new file mode 100644
index 00000000..25148d60
Binary files /dev/null and b/_framework/Avalonia.Themes.Simple.wasm differ
diff --git a/_framework/Avalonia.Vulkan.wasm b/_framework/Avalonia.Vulkan.wasm
new file mode 100644
index 00000000..76d48b42
Binary files /dev/null and b/_framework/Avalonia.Vulkan.wasm differ
diff --git a/_framework/Avalonia.Xaml.Interactions.wasm b/_framework/Avalonia.Xaml.Interactions.wasm
new file mode 100644
index 00000000..80855267
Binary files /dev/null and b/_framework/Avalonia.Xaml.Interactions.wasm differ
diff --git a/_framework/Avalonia.Xaml.Interactivity.wasm b/_framework/Avalonia.Xaml.Interactivity.wasm
new file mode 100644
index 00000000..605b188d
Binary files /dev/null and b/_framework/Avalonia.Xaml.Interactivity.wasm differ
diff --git a/_framework/Avalonia.wasm b/_framework/Avalonia.wasm
new file mode 100644
index 00000000..7213cf53
Binary files /dev/null and b/_framework/Avalonia.wasm differ
diff --git a/_framework/AvaloniaEdit.wasm b/_framework/AvaloniaEdit.wasm
new file mode 100644
index 00000000..6a88d726
Binary files /dev/null and b/_framework/AvaloniaEdit.wasm differ
diff --git a/_framework/AvaloniaHex.wasm b/_framework/AvaloniaHex.wasm
new file mode 100644
index 00000000..0454cbc2
Binary files /dev/null and b/_framework/AvaloniaHex.wasm differ
diff --git a/_framework/DynamicData.wasm b/_framework/DynamicData.wasm
new file mode 100644
index 00000000..e87a1467
Binary files /dev/null and b/_framework/DynamicData.wasm differ
diff --git a/_framework/HarfBuzzSharp.pdb b/_framework/HarfBuzzSharp.pdb
new file mode 100755
index 00000000..887c19ec
Binary files /dev/null and b/_framework/HarfBuzzSharp.pdb differ
diff --git a/_framework/HarfBuzzSharp.wasm b/_framework/HarfBuzzSharp.wasm
new file mode 100644
index 00000000..8c36e8f9
Binary files /dev/null and b/_framework/HarfBuzzSharp.wasm differ
diff --git a/_framework/MicroCom.Runtime.wasm b/_framework/MicroCom.Runtime.wasm
new file mode 100644
index 00000000..7d1d226e
Binary files /dev/null and b/_framework/MicroCom.Runtime.wasm differ
diff --git a/_framework/Microsoft.CSharp.wasm b/_framework/Microsoft.CSharp.wasm
new file mode 100644
index 00000000..310e2fd8
Binary files /dev/null and b/_framework/Microsoft.CSharp.wasm differ
diff --git a/_framework/Microsoft.JSInterop.WebAssembly.wasm b/_framework/Microsoft.JSInterop.WebAssembly.wasm
new file mode 100644
index 00000000..1750ee70
Binary files /dev/null and b/_framework/Microsoft.JSInterop.WebAssembly.wasm differ
diff --git a/_framework/Microsoft.JSInterop.wasm b/_framework/Microsoft.JSInterop.wasm
new file mode 100644
index 00000000..48aa7de0
Binary files /dev/null and b/_framework/Microsoft.JSInterop.wasm differ
diff --git a/_framework/Microsoft.VisualBasic.Core.wasm b/_framework/Microsoft.VisualBasic.Core.wasm
new file mode 100644
index 00000000..ac1bf835
Binary files /dev/null and b/_framework/Microsoft.VisualBasic.Core.wasm differ
diff --git a/_framework/Microsoft.VisualBasic.wasm b/_framework/Microsoft.VisualBasic.wasm
new file mode 100644
index 00000000..3c85d3de
Binary files /dev/null and b/_framework/Microsoft.VisualBasic.wasm differ
diff --git a/_framework/Microsoft.Win32.Primitives.wasm b/_framework/Microsoft.Win32.Primitives.wasm
new file mode 100644
index 00000000..f24a7906
Binary files /dev/null and b/_framework/Microsoft.Win32.Primitives.wasm differ
diff --git a/_framework/Microsoft.Win32.Registry.wasm b/_framework/Microsoft.Win32.Registry.wasm
new file mode 100644
index 00000000..694ef8b6
Binary files /dev/null and b/_framework/Microsoft.Win32.Registry.wasm differ
diff --git a/_framework/MimaSim.Browser.pdb b/_framework/MimaSim.Browser.pdb
new file mode 100644
index 00000000..6b10c18d
Binary files /dev/null and b/_framework/MimaSim.Browser.pdb differ
diff --git a/_framework/MimaSim.Browser.wasm b/_framework/MimaSim.Browser.wasm
new file mode 100644
index 00000000..a60401fc
Binary files /dev/null and b/_framework/MimaSim.Browser.wasm differ
diff --git a/_framework/MimaSim.pdb b/_framework/MimaSim.pdb
new file mode 100644
index 00000000..eb4f6ed0
Binary files /dev/null and b/_framework/MimaSim.pdb differ
diff --git a/_framework/MimaSim.wasm b/_framework/MimaSim.wasm
new file mode 100644
index 00000000..0b646996
Binary files /dev/null and b/_framework/MimaSim.wasm differ
diff --git a/_framework/Newtonsoft.Json.wasm b/_framework/Newtonsoft.Json.wasm
new file mode 100644
index 00000000..f134cd8e
Binary files /dev/null and b/_framework/Newtonsoft.Json.wasm differ
diff --git a/_framework/ReactiveUI.wasm b/_framework/ReactiveUI.wasm
new file mode 100644
index 00000000..c3b81e89
Binary files /dev/null and b/_framework/ReactiveUI.wasm differ
diff --git a/_framework/Silverfly.pdb b/_framework/Silverfly.pdb
new file mode 100755
index 00000000..1598516b
Binary files /dev/null and b/_framework/Silverfly.pdb differ
diff --git a/_framework/Silverfly.wasm b/_framework/Silverfly.wasm
new file mode 100644
index 00000000..d797c502
Binary files /dev/null and b/_framework/Silverfly.wasm differ
diff --git a/_framework/SkiaSharp.pdb b/_framework/SkiaSharp.pdb
new file mode 100755
index 00000000..148a3ab0
Binary files /dev/null and b/_framework/SkiaSharp.pdb differ
diff --git a/_framework/SkiaSharp.wasm b/_framework/SkiaSharp.wasm
new file mode 100644
index 00000000..b38d9784
Binary files /dev/null and b/_framework/SkiaSharp.wasm differ
diff --git a/_framework/Splat.wasm b/_framework/Splat.wasm
new file mode 100644
index 00000000..dd587e9e
Binary files /dev/null and b/_framework/Splat.wasm differ
diff --git a/_framework/System.AppContext.wasm b/_framework/System.AppContext.wasm
new file mode 100644
index 00000000..fc02cf9a
Binary files /dev/null and b/_framework/System.AppContext.wasm differ
diff --git a/_framework/System.Buffers.wasm b/_framework/System.Buffers.wasm
new file mode 100644
index 00000000..9bab64c4
Binary files /dev/null and b/_framework/System.Buffers.wasm differ
diff --git a/_framework/System.Collections.Concurrent.wasm b/_framework/System.Collections.Concurrent.wasm
new file mode 100644
index 00000000..b717f364
Binary files /dev/null and b/_framework/System.Collections.Concurrent.wasm differ
diff --git a/_framework/System.Collections.Immutable.wasm b/_framework/System.Collections.Immutable.wasm
new file mode 100644
index 00000000..d4d0221d
Binary files /dev/null and b/_framework/System.Collections.Immutable.wasm differ
diff --git a/_framework/System.Collections.NonGeneric.wasm b/_framework/System.Collections.NonGeneric.wasm
new file mode 100644
index 00000000..0a3d16f0
Binary files /dev/null and b/_framework/System.Collections.NonGeneric.wasm differ
diff --git a/_framework/System.Collections.Specialized.wasm b/_framework/System.Collections.Specialized.wasm
new file mode 100644
index 00000000..f2cb0515
Binary files /dev/null and b/_framework/System.Collections.Specialized.wasm differ
diff --git a/_framework/System.Collections.wasm b/_framework/System.Collections.wasm
new file mode 100644
index 00000000..68adcb0b
Binary files /dev/null and b/_framework/System.Collections.wasm differ
diff --git a/_framework/System.ComponentModel.Annotations.wasm b/_framework/System.ComponentModel.Annotations.wasm
new file mode 100644
index 00000000..19091f69
Binary files /dev/null and b/_framework/System.ComponentModel.Annotations.wasm differ
diff --git a/_framework/System.ComponentModel.DataAnnotations.wasm b/_framework/System.ComponentModel.DataAnnotations.wasm
new file mode 100644
index 00000000..902f7bfd
Binary files /dev/null and b/_framework/System.ComponentModel.DataAnnotations.wasm differ
diff --git a/_framework/System.ComponentModel.EventBasedAsync.wasm b/_framework/System.ComponentModel.EventBasedAsync.wasm
new file mode 100644
index 00000000..b3fa563f
Binary files /dev/null and b/_framework/System.ComponentModel.EventBasedAsync.wasm differ
diff --git a/_framework/System.ComponentModel.Primitives.wasm b/_framework/System.ComponentModel.Primitives.wasm
new file mode 100644
index 00000000..b61e6e7b
Binary files /dev/null and b/_framework/System.ComponentModel.Primitives.wasm differ
diff --git a/_framework/System.ComponentModel.TypeConverter.wasm b/_framework/System.ComponentModel.TypeConverter.wasm
new file mode 100644
index 00000000..86b4c98f
Binary files /dev/null and b/_framework/System.ComponentModel.TypeConverter.wasm differ
diff --git a/_framework/System.ComponentModel.wasm b/_framework/System.ComponentModel.wasm
new file mode 100644
index 00000000..945e26e7
Binary files /dev/null and b/_framework/System.ComponentModel.wasm differ
diff --git a/_framework/System.Configuration.wasm b/_framework/System.Configuration.wasm
new file mode 100644
index 00000000..4969d6ae
Binary files /dev/null and b/_framework/System.Configuration.wasm differ
diff --git a/_framework/System.Console.wasm b/_framework/System.Console.wasm
new file mode 100644
index 00000000..2e61e147
Binary files /dev/null and b/_framework/System.Console.wasm differ
diff --git a/_framework/System.Core.wasm b/_framework/System.Core.wasm
new file mode 100644
index 00000000..40cde979
Binary files /dev/null and b/_framework/System.Core.wasm differ
diff --git a/_framework/System.Data.Common.wasm b/_framework/System.Data.Common.wasm
new file mode 100644
index 00000000..0c12ee95
Binary files /dev/null and b/_framework/System.Data.Common.wasm differ
diff --git a/_framework/System.Data.DataSetExtensions.wasm b/_framework/System.Data.DataSetExtensions.wasm
new file mode 100644
index 00000000..325c3856
Binary files /dev/null and b/_framework/System.Data.DataSetExtensions.wasm differ
diff --git a/_framework/System.Data.wasm b/_framework/System.Data.wasm
new file mode 100644
index 00000000..3e58f1bc
Binary files /dev/null and b/_framework/System.Data.wasm differ
diff --git a/_framework/System.Diagnostics.Contracts.wasm b/_framework/System.Diagnostics.Contracts.wasm
new file mode 100644
index 00000000..1e976224
Binary files /dev/null and b/_framework/System.Diagnostics.Contracts.wasm differ
diff --git a/_framework/System.Diagnostics.Debug.wasm b/_framework/System.Diagnostics.Debug.wasm
new file mode 100644
index 00000000..6495a419
Binary files /dev/null and b/_framework/System.Diagnostics.Debug.wasm differ
diff --git a/_framework/System.Diagnostics.DiagnosticSource.wasm b/_framework/System.Diagnostics.DiagnosticSource.wasm
new file mode 100644
index 00000000..4c83415a
Binary files /dev/null and b/_framework/System.Diagnostics.DiagnosticSource.wasm differ
diff --git a/_framework/System.Diagnostics.FileVersionInfo.wasm b/_framework/System.Diagnostics.FileVersionInfo.wasm
new file mode 100644
index 00000000..f0f9a989
Binary files /dev/null and b/_framework/System.Diagnostics.FileVersionInfo.wasm differ
diff --git a/_framework/System.Diagnostics.Process.wasm b/_framework/System.Diagnostics.Process.wasm
new file mode 100644
index 00000000..ba4aa524
Binary files /dev/null and b/_framework/System.Diagnostics.Process.wasm differ
diff --git a/_framework/System.Diagnostics.StackTrace.wasm b/_framework/System.Diagnostics.StackTrace.wasm
new file mode 100644
index 00000000..01ac2026
Binary files /dev/null and b/_framework/System.Diagnostics.StackTrace.wasm differ
diff --git a/_framework/System.Diagnostics.TextWriterTraceListener.wasm b/_framework/System.Diagnostics.TextWriterTraceListener.wasm
new file mode 100644
index 00000000..40babcee
Binary files /dev/null and b/_framework/System.Diagnostics.TextWriterTraceListener.wasm differ
diff --git a/_framework/System.Diagnostics.Tools.wasm b/_framework/System.Diagnostics.Tools.wasm
new file mode 100644
index 00000000..2103eaad
Binary files /dev/null and b/_framework/System.Diagnostics.Tools.wasm differ
diff --git a/_framework/System.Diagnostics.TraceSource.wasm b/_framework/System.Diagnostics.TraceSource.wasm
new file mode 100644
index 00000000..fe989aef
Binary files /dev/null and b/_framework/System.Diagnostics.TraceSource.wasm differ
diff --git a/_framework/System.Diagnostics.Tracing.wasm b/_framework/System.Diagnostics.Tracing.wasm
new file mode 100644
index 00000000..abb77938
Binary files /dev/null and b/_framework/System.Diagnostics.Tracing.wasm differ
diff --git a/_framework/System.Drawing.Primitives.wasm b/_framework/System.Drawing.Primitives.wasm
new file mode 100644
index 00000000..326a5626
Binary files /dev/null and b/_framework/System.Drawing.Primitives.wasm differ
diff --git a/_framework/System.Drawing.wasm b/_framework/System.Drawing.wasm
new file mode 100644
index 00000000..5d5d2830
Binary files /dev/null and b/_framework/System.Drawing.wasm differ
diff --git a/_framework/System.Dynamic.Runtime.wasm b/_framework/System.Dynamic.Runtime.wasm
new file mode 100644
index 00000000..7266b3a5
Binary files /dev/null and b/_framework/System.Dynamic.Runtime.wasm differ
diff --git a/_framework/System.Formats.Asn1.wasm b/_framework/System.Formats.Asn1.wasm
new file mode 100644
index 00000000..ab42992c
Binary files /dev/null and b/_framework/System.Formats.Asn1.wasm differ
diff --git a/_framework/System.Formats.Tar.wasm b/_framework/System.Formats.Tar.wasm
new file mode 100644
index 00000000..bc121629
Binary files /dev/null and b/_framework/System.Formats.Tar.wasm differ
diff --git a/_framework/System.Globalization.Calendars.wasm b/_framework/System.Globalization.Calendars.wasm
new file mode 100644
index 00000000..7501bf42
Binary files /dev/null and b/_framework/System.Globalization.Calendars.wasm differ
diff --git a/_framework/System.Globalization.Extensions.wasm b/_framework/System.Globalization.Extensions.wasm
new file mode 100644
index 00000000..7b56fc34
Binary files /dev/null and b/_framework/System.Globalization.Extensions.wasm differ
diff --git a/_framework/System.Globalization.wasm b/_framework/System.Globalization.wasm
new file mode 100644
index 00000000..c8d6d306
Binary files /dev/null and b/_framework/System.Globalization.wasm differ
diff --git a/_framework/System.IO.Compression.Brotli.wasm b/_framework/System.IO.Compression.Brotli.wasm
new file mode 100644
index 00000000..c8492818
Binary files /dev/null and b/_framework/System.IO.Compression.Brotli.wasm differ
diff --git a/_framework/System.IO.Compression.FileSystem.wasm b/_framework/System.IO.Compression.FileSystem.wasm
new file mode 100644
index 00000000..c545eac8
Binary files /dev/null and b/_framework/System.IO.Compression.FileSystem.wasm differ
diff --git a/_framework/System.IO.Compression.ZipFile.wasm b/_framework/System.IO.Compression.ZipFile.wasm
new file mode 100644
index 00000000..c70d3df7
Binary files /dev/null and b/_framework/System.IO.Compression.ZipFile.wasm differ
diff --git a/_framework/System.IO.Compression.wasm b/_framework/System.IO.Compression.wasm
new file mode 100644
index 00000000..ebaed500
Binary files /dev/null and b/_framework/System.IO.Compression.wasm differ
diff --git a/_framework/System.IO.FileSystem.AccessControl.wasm b/_framework/System.IO.FileSystem.AccessControl.wasm
new file mode 100644
index 00000000..6c632756
Binary files /dev/null and b/_framework/System.IO.FileSystem.AccessControl.wasm differ
diff --git a/_framework/System.IO.FileSystem.DriveInfo.wasm b/_framework/System.IO.FileSystem.DriveInfo.wasm
new file mode 100644
index 00000000..76d46b99
Binary files /dev/null and b/_framework/System.IO.FileSystem.DriveInfo.wasm differ
diff --git a/_framework/System.IO.FileSystem.Primitives.wasm b/_framework/System.IO.FileSystem.Primitives.wasm
new file mode 100644
index 00000000..3a27b870
Binary files /dev/null and b/_framework/System.IO.FileSystem.Primitives.wasm differ
diff --git a/_framework/System.IO.FileSystem.Watcher.wasm b/_framework/System.IO.FileSystem.Watcher.wasm
new file mode 100644
index 00000000..ae73b7cd
Binary files /dev/null and b/_framework/System.IO.FileSystem.Watcher.wasm differ
diff --git a/_framework/System.IO.FileSystem.wasm b/_framework/System.IO.FileSystem.wasm
new file mode 100644
index 00000000..f0a93745
Binary files /dev/null and b/_framework/System.IO.FileSystem.wasm differ
diff --git a/_framework/System.IO.IsolatedStorage.wasm b/_framework/System.IO.IsolatedStorage.wasm
new file mode 100644
index 00000000..0b74742e
Binary files /dev/null and b/_framework/System.IO.IsolatedStorage.wasm differ
diff --git a/_framework/System.IO.MemoryMappedFiles.wasm b/_framework/System.IO.MemoryMappedFiles.wasm
new file mode 100644
index 00000000..5cf5b034
Binary files /dev/null and b/_framework/System.IO.MemoryMappedFiles.wasm differ
diff --git a/_framework/System.IO.Pipes.AccessControl.wasm b/_framework/System.IO.Pipes.AccessControl.wasm
new file mode 100644
index 00000000..cf101132
Binary files /dev/null and b/_framework/System.IO.Pipes.AccessControl.wasm differ
diff --git a/_framework/System.IO.Pipes.wasm b/_framework/System.IO.Pipes.wasm
new file mode 100644
index 00000000..c7ccf735
Binary files /dev/null and b/_framework/System.IO.Pipes.wasm differ
diff --git a/_framework/System.IO.UnmanagedMemoryStream.wasm b/_framework/System.IO.UnmanagedMemoryStream.wasm
new file mode 100644
index 00000000..c25d0fbe
Binary files /dev/null and b/_framework/System.IO.UnmanagedMemoryStream.wasm differ
diff --git a/_framework/System.IO.wasm b/_framework/System.IO.wasm
new file mode 100644
index 00000000..78b88034
Binary files /dev/null and b/_framework/System.IO.wasm differ
diff --git a/_framework/System.Linq.Expressions.wasm b/_framework/System.Linq.Expressions.wasm
new file mode 100644
index 00000000..5cb064d0
Binary files /dev/null and b/_framework/System.Linq.Expressions.wasm differ
diff --git a/_framework/System.Linq.Parallel.wasm b/_framework/System.Linq.Parallel.wasm
new file mode 100644
index 00000000..67153eff
Binary files /dev/null and b/_framework/System.Linq.Parallel.wasm differ
diff --git a/_framework/System.Linq.Queryable.wasm b/_framework/System.Linq.Queryable.wasm
new file mode 100644
index 00000000..33e10fc3
Binary files /dev/null and b/_framework/System.Linq.Queryable.wasm differ
diff --git a/_framework/System.Linq.wasm b/_framework/System.Linq.wasm
new file mode 100644
index 00000000..cc5f4b2e
Binary files /dev/null and b/_framework/System.Linq.wasm differ
diff --git a/_framework/System.Memory.wasm b/_framework/System.Memory.wasm
new file mode 100644
index 00000000..8b902efc
Binary files /dev/null and b/_framework/System.Memory.wasm differ
diff --git a/_framework/System.Net.Http.Json.wasm b/_framework/System.Net.Http.Json.wasm
new file mode 100644
index 00000000..cfe53699
Binary files /dev/null and b/_framework/System.Net.Http.Json.wasm differ
diff --git a/_framework/System.Net.Http.wasm b/_framework/System.Net.Http.wasm
new file mode 100644
index 00000000..8b65f2e8
Binary files /dev/null and b/_framework/System.Net.Http.wasm differ
diff --git a/_framework/System.Net.HttpListener.wasm b/_framework/System.Net.HttpListener.wasm
new file mode 100644
index 00000000..962e165f
Binary files /dev/null and b/_framework/System.Net.HttpListener.wasm differ
diff --git a/_framework/System.Net.Mail.wasm b/_framework/System.Net.Mail.wasm
new file mode 100644
index 00000000..2bd0993b
Binary files /dev/null and b/_framework/System.Net.Mail.wasm differ
diff --git a/_framework/System.Net.NameResolution.wasm b/_framework/System.Net.NameResolution.wasm
new file mode 100644
index 00000000..3d213c04
Binary files /dev/null and b/_framework/System.Net.NameResolution.wasm differ
diff --git a/_framework/System.Net.NetworkInformation.wasm b/_framework/System.Net.NetworkInformation.wasm
new file mode 100644
index 00000000..a064ddcc
Binary files /dev/null and b/_framework/System.Net.NetworkInformation.wasm differ
diff --git a/_framework/System.Net.Ping.wasm b/_framework/System.Net.Ping.wasm
new file mode 100644
index 00000000..9ba65316
Binary files /dev/null and b/_framework/System.Net.Ping.wasm differ
diff --git a/_framework/System.Net.Primitives.wasm b/_framework/System.Net.Primitives.wasm
new file mode 100644
index 00000000..86f9097b
Binary files /dev/null and b/_framework/System.Net.Primitives.wasm differ
diff --git a/_framework/System.Net.Quic.wasm b/_framework/System.Net.Quic.wasm
new file mode 100644
index 00000000..05dd0a4e
Binary files /dev/null and b/_framework/System.Net.Quic.wasm differ
diff --git a/_framework/System.Net.Requests.wasm b/_framework/System.Net.Requests.wasm
new file mode 100644
index 00000000..908ac31e
Binary files /dev/null and b/_framework/System.Net.Requests.wasm differ
diff --git a/_framework/System.Net.Security.wasm b/_framework/System.Net.Security.wasm
new file mode 100644
index 00000000..5d4b9ec9
Binary files /dev/null and b/_framework/System.Net.Security.wasm differ
diff --git a/_framework/System.Net.ServicePoint.wasm b/_framework/System.Net.ServicePoint.wasm
new file mode 100644
index 00000000..e06ad687
Binary files /dev/null and b/_framework/System.Net.ServicePoint.wasm differ
diff --git a/_framework/System.Net.Sockets.wasm b/_framework/System.Net.Sockets.wasm
new file mode 100644
index 00000000..a99f2351
Binary files /dev/null and b/_framework/System.Net.Sockets.wasm differ
diff --git a/_framework/System.Net.WebClient.wasm b/_framework/System.Net.WebClient.wasm
new file mode 100644
index 00000000..f4ed3706
Binary files /dev/null and b/_framework/System.Net.WebClient.wasm differ
diff --git a/_framework/System.Net.WebHeaderCollection.wasm b/_framework/System.Net.WebHeaderCollection.wasm
new file mode 100644
index 00000000..11d3b4c8
Binary files /dev/null and b/_framework/System.Net.WebHeaderCollection.wasm differ
diff --git a/_framework/System.Net.WebProxy.wasm b/_framework/System.Net.WebProxy.wasm
new file mode 100644
index 00000000..7c3a7b50
Binary files /dev/null and b/_framework/System.Net.WebProxy.wasm differ
diff --git a/_framework/System.Net.WebSockets.Client.wasm b/_framework/System.Net.WebSockets.Client.wasm
new file mode 100644
index 00000000..e8364ff6
Binary files /dev/null and b/_framework/System.Net.WebSockets.Client.wasm differ
diff --git a/_framework/System.Net.WebSockets.wasm b/_framework/System.Net.WebSockets.wasm
new file mode 100644
index 00000000..abb6a478
Binary files /dev/null and b/_framework/System.Net.WebSockets.wasm differ
diff --git a/_framework/System.Net.wasm b/_framework/System.Net.wasm
new file mode 100644
index 00000000..b4adda12
Binary files /dev/null and b/_framework/System.Net.wasm differ
diff --git a/_framework/System.Numerics.Vectors.wasm b/_framework/System.Numerics.Vectors.wasm
new file mode 100644
index 00000000..d32b244c
Binary files /dev/null and b/_framework/System.Numerics.Vectors.wasm differ
diff --git a/_framework/System.Numerics.wasm b/_framework/System.Numerics.wasm
new file mode 100644
index 00000000..c356fa41
Binary files /dev/null and b/_framework/System.Numerics.wasm differ
diff --git a/_framework/System.ObjectModel.wasm b/_framework/System.ObjectModel.wasm
new file mode 100644
index 00000000..176a55ff
Binary files /dev/null and b/_framework/System.ObjectModel.wasm differ
diff --git a/_framework/System.Private.CoreLib.wasm b/_framework/System.Private.CoreLib.wasm
new file mode 100644
index 00000000..141f1d9f
Binary files /dev/null and b/_framework/System.Private.CoreLib.wasm differ
diff --git a/_framework/System.Private.DataContractSerialization.wasm b/_framework/System.Private.DataContractSerialization.wasm
new file mode 100644
index 00000000..cc2efd23
Binary files /dev/null and b/_framework/System.Private.DataContractSerialization.wasm differ
diff --git a/_framework/System.Private.Uri.wasm b/_framework/System.Private.Uri.wasm
new file mode 100644
index 00000000..9ed750cc
Binary files /dev/null and b/_framework/System.Private.Uri.wasm differ
diff --git a/_framework/System.Private.Xml.Linq.wasm b/_framework/System.Private.Xml.Linq.wasm
new file mode 100644
index 00000000..9197818d
Binary files /dev/null and b/_framework/System.Private.Xml.Linq.wasm differ
diff --git a/_framework/System.Private.Xml.wasm b/_framework/System.Private.Xml.wasm
new file mode 100644
index 00000000..9fe2b7e5
Binary files /dev/null and b/_framework/System.Private.Xml.wasm differ
diff --git a/_framework/System.Reactive.wasm b/_framework/System.Reactive.wasm
new file mode 100644
index 00000000..1483bccf
Binary files /dev/null and b/_framework/System.Reactive.wasm differ
diff --git a/_framework/System.Reflection.DispatchProxy.wasm b/_framework/System.Reflection.DispatchProxy.wasm
new file mode 100644
index 00000000..0d41d93e
Binary files /dev/null and b/_framework/System.Reflection.DispatchProxy.wasm differ
diff --git a/_framework/System.Reflection.Emit.ILGeneration.wasm b/_framework/System.Reflection.Emit.ILGeneration.wasm
new file mode 100644
index 00000000..5fbbd147
Binary files /dev/null and b/_framework/System.Reflection.Emit.ILGeneration.wasm differ
diff --git a/_framework/System.Reflection.Emit.Lightweight.wasm b/_framework/System.Reflection.Emit.Lightweight.wasm
new file mode 100644
index 00000000..f4fe3389
Binary files /dev/null and b/_framework/System.Reflection.Emit.Lightweight.wasm differ
diff --git a/_framework/System.Reflection.Emit.wasm b/_framework/System.Reflection.Emit.wasm
new file mode 100644
index 00000000..fc40b3b8
Binary files /dev/null and b/_framework/System.Reflection.Emit.wasm differ
diff --git a/_framework/System.Reflection.Extensions.wasm b/_framework/System.Reflection.Extensions.wasm
new file mode 100644
index 00000000..e99828f9
Binary files /dev/null and b/_framework/System.Reflection.Extensions.wasm differ
diff --git a/_framework/System.Reflection.Metadata.wasm b/_framework/System.Reflection.Metadata.wasm
new file mode 100644
index 00000000..f7ae38c4
Binary files /dev/null and b/_framework/System.Reflection.Metadata.wasm differ
diff --git a/_framework/System.Reflection.Primitives.wasm b/_framework/System.Reflection.Primitives.wasm
new file mode 100644
index 00000000..c183a42f
Binary files /dev/null and b/_framework/System.Reflection.Primitives.wasm differ
diff --git a/_framework/System.Reflection.TypeExtensions.wasm b/_framework/System.Reflection.TypeExtensions.wasm
new file mode 100644
index 00000000..de95a7ba
Binary files /dev/null and b/_framework/System.Reflection.TypeExtensions.wasm differ
diff --git a/_framework/System.Reflection.wasm b/_framework/System.Reflection.wasm
new file mode 100644
index 00000000..65b33220
Binary files /dev/null and b/_framework/System.Reflection.wasm differ
diff --git a/_framework/System.Resources.Reader.wasm b/_framework/System.Resources.Reader.wasm
new file mode 100644
index 00000000..988fa94b
Binary files /dev/null and b/_framework/System.Resources.Reader.wasm differ
diff --git a/_framework/System.Resources.ResourceManager.wasm b/_framework/System.Resources.ResourceManager.wasm
new file mode 100644
index 00000000..e2f97512
Binary files /dev/null and b/_framework/System.Resources.ResourceManager.wasm differ
diff --git a/_framework/System.Resources.Writer.wasm b/_framework/System.Resources.Writer.wasm
new file mode 100644
index 00000000..38d67087
Binary files /dev/null and b/_framework/System.Resources.Writer.wasm differ
diff --git a/_framework/System.Runtime.CompilerServices.Unsafe.wasm b/_framework/System.Runtime.CompilerServices.Unsafe.wasm
new file mode 100644
index 00000000..9183f0f0
Binary files /dev/null and b/_framework/System.Runtime.CompilerServices.Unsafe.wasm differ
diff --git a/_framework/System.Runtime.CompilerServices.VisualC.wasm b/_framework/System.Runtime.CompilerServices.VisualC.wasm
new file mode 100644
index 00000000..5415bc8c
Binary files /dev/null and b/_framework/System.Runtime.CompilerServices.VisualC.wasm differ
diff --git a/_framework/System.Runtime.Extensions.wasm b/_framework/System.Runtime.Extensions.wasm
new file mode 100644
index 00000000..a093127b
Binary files /dev/null and b/_framework/System.Runtime.Extensions.wasm differ
diff --git a/_framework/System.Runtime.Handles.wasm b/_framework/System.Runtime.Handles.wasm
new file mode 100644
index 00000000..97caeade
Binary files /dev/null and b/_framework/System.Runtime.Handles.wasm differ
diff --git a/_framework/System.Runtime.InteropServices.JavaScript.wasm b/_framework/System.Runtime.InteropServices.JavaScript.wasm
new file mode 100644
index 00000000..870aabdf
Binary files /dev/null and b/_framework/System.Runtime.InteropServices.JavaScript.wasm differ
diff --git a/_framework/System.Runtime.InteropServices.RuntimeInformation.wasm b/_framework/System.Runtime.InteropServices.RuntimeInformation.wasm
new file mode 100644
index 00000000..3c6ecdc7
Binary files /dev/null and b/_framework/System.Runtime.InteropServices.RuntimeInformation.wasm differ
diff --git a/_framework/System.Runtime.InteropServices.wasm b/_framework/System.Runtime.InteropServices.wasm
new file mode 100644
index 00000000..6528900e
Binary files /dev/null and b/_framework/System.Runtime.InteropServices.wasm differ
diff --git a/_framework/System.Runtime.Intrinsics.wasm b/_framework/System.Runtime.Intrinsics.wasm
new file mode 100644
index 00000000..bf81512a
Binary files /dev/null and b/_framework/System.Runtime.Intrinsics.wasm differ
diff --git a/_framework/System.Runtime.Loader.wasm b/_framework/System.Runtime.Loader.wasm
new file mode 100644
index 00000000..3baaf38a
Binary files /dev/null and b/_framework/System.Runtime.Loader.wasm differ
diff --git a/_framework/System.Runtime.Numerics.wasm b/_framework/System.Runtime.Numerics.wasm
new file mode 100644
index 00000000..d574bc96
Binary files /dev/null and b/_framework/System.Runtime.Numerics.wasm differ
diff --git a/_framework/System.Runtime.Serialization.Formatters.wasm b/_framework/System.Runtime.Serialization.Formatters.wasm
new file mode 100644
index 00000000..ccea5bc6
Binary files /dev/null and b/_framework/System.Runtime.Serialization.Formatters.wasm differ
diff --git a/_framework/System.Runtime.Serialization.Json.wasm b/_framework/System.Runtime.Serialization.Json.wasm
new file mode 100644
index 00000000..28d612bb
Binary files /dev/null and b/_framework/System.Runtime.Serialization.Json.wasm differ
diff --git a/_framework/System.Runtime.Serialization.Primitives.wasm b/_framework/System.Runtime.Serialization.Primitives.wasm
new file mode 100644
index 00000000..d10af25f
Binary files /dev/null and b/_framework/System.Runtime.Serialization.Primitives.wasm differ
diff --git a/_framework/System.Runtime.Serialization.Xml.wasm b/_framework/System.Runtime.Serialization.Xml.wasm
new file mode 100644
index 00000000..8f650c27
Binary files /dev/null and b/_framework/System.Runtime.Serialization.Xml.wasm differ
diff --git a/_framework/System.Runtime.Serialization.wasm b/_framework/System.Runtime.Serialization.wasm
new file mode 100644
index 00000000..3a9edf43
Binary files /dev/null and b/_framework/System.Runtime.Serialization.wasm differ
diff --git a/_framework/System.Runtime.wasm b/_framework/System.Runtime.wasm
new file mode 100644
index 00000000..e9fc59a1
Binary files /dev/null and b/_framework/System.Runtime.wasm differ
diff --git a/_framework/System.Security.AccessControl.wasm b/_framework/System.Security.AccessControl.wasm
new file mode 100644
index 00000000..5436d9d9
Binary files /dev/null and b/_framework/System.Security.AccessControl.wasm differ
diff --git a/_framework/System.Security.Claims.wasm b/_framework/System.Security.Claims.wasm
new file mode 100644
index 00000000..e8bda10f
Binary files /dev/null and b/_framework/System.Security.Claims.wasm differ
diff --git a/_framework/System.Security.Cryptography.Algorithms.wasm b/_framework/System.Security.Cryptography.Algorithms.wasm
new file mode 100644
index 00000000..aa76ba43
Binary files /dev/null and b/_framework/System.Security.Cryptography.Algorithms.wasm differ
diff --git a/_framework/System.Security.Cryptography.Cng.wasm b/_framework/System.Security.Cryptography.Cng.wasm
new file mode 100644
index 00000000..58da4d2c
Binary files /dev/null and b/_framework/System.Security.Cryptography.Cng.wasm differ
diff --git a/_framework/System.Security.Cryptography.Csp.wasm b/_framework/System.Security.Cryptography.Csp.wasm
new file mode 100644
index 00000000..7a3f652b
Binary files /dev/null and b/_framework/System.Security.Cryptography.Csp.wasm differ
diff --git a/_framework/System.Security.Cryptography.Encoding.wasm b/_framework/System.Security.Cryptography.Encoding.wasm
new file mode 100644
index 00000000..35cb0298
Binary files /dev/null and b/_framework/System.Security.Cryptography.Encoding.wasm differ
diff --git a/_framework/System.Security.Cryptography.OpenSsl.wasm b/_framework/System.Security.Cryptography.OpenSsl.wasm
new file mode 100644
index 00000000..04c8ea76
Binary files /dev/null and b/_framework/System.Security.Cryptography.OpenSsl.wasm differ
diff --git a/_framework/System.Security.Cryptography.Primitives.wasm b/_framework/System.Security.Cryptography.Primitives.wasm
new file mode 100644
index 00000000..19bf40b6
Binary files /dev/null and b/_framework/System.Security.Cryptography.Primitives.wasm differ
diff --git a/_framework/System.Security.Cryptography.X509Certificates.wasm b/_framework/System.Security.Cryptography.X509Certificates.wasm
new file mode 100644
index 00000000..b8d6f279
Binary files /dev/null and b/_framework/System.Security.Cryptography.X509Certificates.wasm differ
diff --git a/_framework/System.Security.Cryptography.wasm b/_framework/System.Security.Cryptography.wasm
new file mode 100644
index 00000000..69a3e99b
Binary files /dev/null and b/_framework/System.Security.Cryptography.wasm differ
diff --git a/_framework/System.Security.Principal.Windows.wasm b/_framework/System.Security.Principal.Windows.wasm
new file mode 100644
index 00000000..7983ae13
Binary files /dev/null and b/_framework/System.Security.Principal.Windows.wasm differ
diff --git a/_framework/System.Security.Principal.wasm b/_framework/System.Security.Principal.wasm
new file mode 100644
index 00000000..bc461304
Binary files /dev/null and b/_framework/System.Security.Principal.wasm differ
diff --git a/_framework/System.Security.SecureString.wasm b/_framework/System.Security.SecureString.wasm
new file mode 100644
index 00000000..ce15cdf3
Binary files /dev/null and b/_framework/System.Security.SecureString.wasm differ
diff --git a/_framework/System.Security.wasm b/_framework/System.Security.wasm
new file mode 100644
index 00000000..294daceb
Binary files /dev/null and b/_framework/System.Security.wasm differ
diff --git a/_framework/System.ServiceModel.Web.wasm b/_framework/System.ServiceModel.Web.wasm
new file mode 100644
index 00000000..66a12c42
Binary files /dev/null and b/_framework/System.ServiceModel.Web.wasm differ
diff --git a/_framework/System.ServiceProcess.wasm b/_framework/System.ServiceProcess.wasm
new file mode 100644
index 00000000..ad68639d
Binary files /dev/null and b/_framework/System.ServiceProcess.wasm differ
diff --git a/_framework/System.Text.Encoding.CodePages.wasm b/_framework/System.Text.Encoding.CodePages.wasm
new file mode 100644
index 00000000..39d21d33
Binary files /dev/null and b/_framework/System.Text.Encoding.CodePages.wasm differ
diff --git a/_framework/System.Text.Encoding.Extensions.wasm b/_framework/System.Text.Encoding.Extensions.wasm
new file mode 100644
index 00000000..cdc031f4
Binary files /dev/null and b/_framework/System.Text.Encoding.Extensions.wasm differ
diff --git a/_framework/System.Text.Encoding.wasm b/_framework/System.Text.Encoding.wasm
new file mode 100644
index 00000000..5cecff7a
Binary files /dev/null and b/_framework/System.Text.Encoding.wasm differ
diff --git a/_framework/System.Text.Encodings.Web.wasm b/_framework/System.Text.Encodings.Web.wasm
new file mode 100644
index 00000000..fa9c0240
Binary files /dev/null and b/_framework/System.Text.Encodings.Web.wasm differ
diff --git a/_framework/System.Text.Json.wasm b/_framework/System.Text.Json.wasm
new file mode 100644
index 00000000..5e25f25c
Binary files /dev/null and b/_framework/System.Text.Json.wasm differ
diff --git a/_framework/System.Text.RegularExpressions.wasm b/_framework/System.Text.RegularExpressions.wasm
new file mode 100644
index 00000000..a5ecb209
Binary files /dev/null and b/_framework/System.Text.RegularExpressions.wasm differ
diff --git a/_framework/System.Threading.Channels.wasm b/_framework/System.Threading.Channels.wasm
new file mode 100644
index 00000000..9e3f382b
Binary files /dev/null and b/_framework/System.Threading.Channels.wasm differ
diff --git a/_framework/System.Threading.Overlapped.wasm b/_framework/System.Threading.Overlapped.wasm
new file mode 100644
index 00000000..2774e5ac
Binary files /dev/null and b/_framework/System.Threading.Overlapped.wasm differ
diff --git a/_framework/System.Threading.Tasks.Dataflow.wasm b/_framework/System.Threading.Tasks.Dataflow.wasm
new file mode 100644
index 00000000..d1609428
Binary files /dev/null and b/_framework/System.Threading.Tasks.Dataflow.wasm differ
diff --git a/_framework/System.Threading.Tasks.Extensions.wasm b/_framework/System.Threading.Tasks.Extensions.wasm
new file mode 100644
index 00000000..4be234d1
Binary files /dev/null and b/_framework/System.Threading.Tasks.Extensions.wasm differ
diff --git a/_framework/System.Threading.Tasks.Parallel.wasm b/_framework/System.Threading.Tasks.Parallel.wasm
new file mode 100644
index 00000000..d5435093
Binary files /dev/null and b/_framework/System.Threading.Tasks.Parallel.wasm differ
diff --git a/_framework/System.Threading.Tasks.wasm b/_framework/System.Threading.Tasks.wasm
new file mode 100644
index 00000000..930302f7
Binary files /dev/null and b/_framework/System.Threading.Tasks.wasm differ
diff --git a/_framework/System.Threading.Thread.wasm b/_framework/System.Threading.Thread.wasm
new file mode 100644
index 00000000..db099c07
Binary files /dev/null and b/_framework/System.Threading.Thread.wasm differ
diff --git a/_framework/System.Threading.ThreadPool.wasm b/_framework/System.Threading.ThreadPool.wasm
new file mode 100644
index 00000000..639cfe3c
Binary files /dev/null and b/_framework/System.Threading.ThreadPool.wasm differ
diff --git a/_framework/System.Threading.Timer.wasm b/_framework/System.Threading.Timer.wasm
new file mode 100644
index 00000000..f15fb83a
Binary files /dev/null and b/_framework/System.Threading.Timer.wasm differ
diff --git a/_framework/System.Threading.wasm b/_framework/System.Threading.wasm
new file mode 100644
index 00000000..d6ec1d3a
Binary files /dev/null and b/_framework/System.Threading.wasm differ
diff --git a/_framework/System.Transactions.Local.wasm b/_framework/System.Transactions.Local.wasm
new file mode 100644
index 00000000..c89b6a42
Binary files /dev/null and b/_framework/System.Transactions.Local.wasm differ
diff --git a/_framework/System.Transactions.wasm b/_framework/System.Transactions.wasm
new file mode 100644
index 00000000..2f1a4c9a
Binary files /dev/null and b/_framework/System.Transactions.wasm differ
diff --git a/_framework/System.ValueTuple.wasm b/_framework/System.ValueTuple.wasm
new file mode 100644
index 00000000..54e45edb
Binary files /dev/null and b/_framework/System.ValueTuple.wasm differ
diff --git a/_framework/System.Web.HttpUtility.wasm b/_framework/System.Web.HttpUtility.wasm
new file mode 100644
index 00000000..a69a0f73
Binary files /dev/null and b/_framework/System.Web.HttpUtility.wasm differ
diff --git a/_framework/System.Web.wasm b/_framework/System.Web.wasm
new file mode 100644
index 00000000..19347747
Binary files /dev/null and b/_framework/System.Web.wasm differ
diff --git a/_framework/System.Windows.wasm b/_framework/System.Windows.wasm
new file mode 100644
index 00000000..2c0dc452
Binary files /dev/null and b/_framework/System.Windows.wasm differ
diff --git a/_framework/System.Xml.Linq.wasm b/_framework/System.Xml.Linq.wasm
new file mode 100644
index 00000000..0b6371d5
Binary files /dev/null and b/_framework/System.Xml.Linq.wasm differ
diff --git a/_framework/System.Xml.ReaderWriter.wasm b/_framework/System.Xml.ReaderWriter.wasm
new file mode 100644
index 00000000..a80b9948
Binary files /dev/null and b/_framework/System.Xml.ReaderWriter.wasm differ
diff --git a/_framework/System.Xml.Serialization.wasm b/_framework/System.Xml.Serialization.wasm
new file mode 100644
index 00000000..984845f1
Binary files /dev/null and b/_framework/System.Xml.Serialization.wasm differ
diff --git a/_framework/System.Xml.XDocument.wasm b/_framework/System.Xml.XDocument.wasm
new file mode 100644
index 00000000..7c6e119f
Binary files /dev/null and b/_framework/System.Xml.XDocument.wasm differ
diff --git a/_framework/System.Xml.XPath.XDocument.wasm b/_framework/System.Xml.XPath.XDocument.wasm
new file mode 100644
index 00000000..34609703
Binary files /dev/null and b/_framework/System.Xml.XPath.XDocument.wasm differ
diff --git a/_framework/System.Xml.XPath.wasm b/_framework/System.Xml.XPath.wasm
new file mode 100644
index 00000000..6a404829
Binary files /dev/null and b/_framework/System.Xml.XPath.wasm differ
diff --git a/_framework/System.Xml.XmlDocument.wasm b/_framework/System.Xml.XmlDocument.wasm
new file mode 100644
index 00000000..656342a4
Binary files /dev/null and b/_framework/System.Xml.XmlDocument.wasm differ
diff --git a/_framework/System.Xml.XmlSerializer.wasm b/_framework/System.Xml.XmlSerializer.wasm
new file mode 100644
index 00000000..3f530d7b
Binary files /dev/null and b/_framework/System.Xml.XmlSerializer.wasm differ
diff --git a/_framework/System.Xml.wasm b/_framework/System.Xml.wasm
new file mode 100644
index 00000000..de28a0ce
Binary files /dev/null and b/_framework/System.Xml.wasm differ
diff --git a/_framework/System.wasm b/_framework/System.wasm
new file mode 100644
index 00000000..96cb411c
Binary files /dev/null and b/_framework/System.wasm differ
diff --git a/_framework/WindowsBase.wasm b/_framework/WindowsBase.wasm
new file mode 100644
index 00000000..ea8e8983
Binary files /dev/null and b/_framework/WindowsBase.wasm differ
diff --git a/_framework/avalonia.js b/_framework/avalonia.js
new file mode 100755
index 00000000..9364bf1a
--- /dev/null
+++ b/_framework/avalonia.js
@@ -0,0 +1,2 @@
+var g=class{static getCaretCoordinates(e,t,i){var b,d;if(!W)throw new Error("textarea-caret-position#getCaretCoordinates should only be called in a browser");let n=(b=i==null?void 0:i.debug)!=null?b:!1;if(n){let p=document.querySelector("#input-textarea-caret-position-mirror-div");p&&((d=p.parentNode)==null||d.removeChild(p))}let r=document.createElement("div");r.id="input-textarea-caret-position-mirror-div",document.body.appendChild(r);let a=r.style,o=window.getComputedStyle?window.getComputedStyle(e):e.currentStyle,l=e.nodeName==="INPUT";a.whiteSpace="pre-wrap",l||(a.wordWrap="break-word"),a.position="absolute",n||(a.visibility="hidden"),_.forEach(p=>{if(l&&p==="lineHeight")if(o.boxSizing==="border-box"){let w=parseInt(o.height),B=parseInt(o.paddingTop)+parseInt(o.paddingBottom)+parseInt(o.borderTopWidth)+parseInt(o.borderBottomWidth),D=B+parseInt(o.lineHeight);w>D?a.lineHeight=`${w-B}px`:w===D?a.lineHeight=o.lineHeight:a.lineHeight="0"}else a.lineHeight=o.height;else a[p]=o[p]}),F?e.scrollHeight>parseInt(o.height)&&(a.overflowY="scroll"):a.overflow="hidden",r.textContent=e.value.substring(0,t),l&&(r.textContent=r.textContent.replace(/\s/g,"\xA0"));let u=document.createElement("span");u.textContent=e.value.substring(t)||".",r.appendChild(u);let c={top:u.offsetTop+parseInt(o.borderTopWidth),left:u.offsetLeft+parseInt(o.borderLeftWidth),height:parseInt(o.lineHeight)};return n?u.style.backgroundColor="#aaa":document.body.removeChild(r),c}},_=["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","borderStyle","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing","tabSize","MozTabSize"],W=typeof window!="undefined",F=W&&window.mozInnerScreenX!=null;var f=class{static initializeBackgroundHandlers(){this.clipboardState===0&&(globalThis.addEventListener("paste",e=>{this.clipboardState===2&&this.resolveClipboard(e.clipboardData.getData("text"))}),this.clipboardState=1)}static async readClipboardText(){if(globalThis.navigator.clipboard.readText)return await globalThis.navigator.clipboard.readText();try{return await new Promise((e,t)=>{this.clipboardState=2,this.resolveClipboard=e,this.rejectClipboard=t})}finally{this.clipboardState=1,this.resolveClipboard=null,this.rejectClipboard=null}}static subscribeKeyEvents(e,t,i){let n=a=>{t(a.code,a.key,this.getModifiers(a))&&this.clipboardState!==2&&a.preventDefault()};e.addEventListener("keydown",n);let r=a=>{i(a.code,a.key,this.getModifiers(a))&&a.preventDefault(),this.rejectClipboard&&this.rejectClipboard()};return e.addEventListener("keyup",r),()=>{e.removeEventListener("keydown",n),e.removeEventListener("keyup",r)}}static subscribeTextEvents(e,t,i,n,r){let a=c=>{i(c)&&c.preventDefault()};e.addEventListener("compositionstart",a);let o=c=>{let b=c.getTargetRanges(),d=-1,p=-1;b.length>0&&(d=b[0].startOffset,p=b[0].endOffset),c.inputType==="insertCompositionText"&&(d=2,p=d+2),t(c,d,p)&&c.preventDefault()};e.addEventListener("beforeinput",o);let l=c=>{n(c)&&c.preventDefault()};e.addEventListener("compositionupdate",l);let u=c=>{r(c)&&c.preventDefault()};return e.addEventListener("compositionend",u),()=>{e.removeEventListener("compositionstart",a),e.removeEventListener("compositionupdate",l),e.removeEventListener("compositionend",u)}}static subscribePointerEvents(e,t,i,n,r,a){let o=d=>{t(d),d.preventDefault()},l=d=>{i(d),d.preventDefault()},u=d=>{n(d),d.preventDefault()},c=d=>{r(d),d.preventDefault()},b=d=>{a(d),d.preventDefault()};return e.addEventListener("pointermove",o),e.addEventListener("pointerdown",l),e.addEventListener("pointerup",u),e.addEventListener("wheel",b),e.addEventListener("pointercancel",c),()=>{e.removeEventListener("pointerover",o),e.removeEventListener("pointerdown",l),e.removeEventListener("pointerup",u),e.removeEventListener("pointercancel",c),e.removeEventListener("wheel",b)}}static subscribeInputEvents(e,t){let i=n=>{t(n.value)&&n.preventDefault()};return e.addEventListener("input",i),()=>{e.removeEventListener("input",i)}}static subscribeDropEvents(e,t){let i=n=>{t(n)&&n.preventDefault()};return e.addEventListener("dragover",i),e.addEventListener("dragenter",i),e.addEventListener("dragleave",i),e.addEventListener("drop",i),()=>{e.removeEventListener("dragover",i),e.removeEventListener("dragenter",i),e.removeEventListener("dragleave",i),e.removeEventListener("drop",i)}}static getCoalescedEvents(e){return e.getCoalescedEvents()}static subscribeKeyboardGeometryChange(e,t){"virtualKeyboard"in navigator&&navigator.virtualKeyboard.addEventListener("geometrychange",i=>{let n=e.getBoundingClientRect(),r=i.target.boundingRect;t({x:r.x-n.x,y:r.y-n.y,width:r.width,height:r.height})})}static subscribeVisibilityChange(e){return document.addEventListener("visibilitychange",()=>{e(document.visibilityState==="visible")}),document.visibilityState==="visible"}static clearInput(e){e.value=""}static focusElement(e){e.focus()}static setCursor(e,t){t==="default"?e.style.removeProperty("cursor"):e.style.cursor=t}static setBounds(e,t,i,n,r,a){e.style.left=t.toFixed(0)+"px",e.style.top=i.toFixed(0)+"px";let{left:o,top:l}=g.getCaretCoordinates(e,a);e.style.left=(t-o).toFixed(0)+"px",e.style.top=(i-l).toFixed(0)+"px"}static hide(e){e.style.display="none"}static show(e){e.style.display="block"}static setSurroundingText(e,t,i,n){!e||(e.value=t,e.setSelectionRange(i,n),e.style.width="20px",e.style.width=`${e.scrollWidth}px`)}static getModifiers(e){let t=0;return e.ctrlKey&&(t|=2),e.altKey&&(t|=1),e.shiftKey&&(t|=4),e.metaKey&&(t|=8),t.toString()}static setPointerCapture(e,t){e.setPointerCapture(t)}static releasePointerCapture(e,t){e.hasPointerCapture(t)&&e.releasePointerCapture(t)}};f.clipboardState=0;var m=class{static addClass(e,t){e.classList.add(t)}static observeDarkMode(e){if(globalThis.matchMedia===void 0)return!1;let t=globalThis.matchMedia("(prefers-color-scheme: dark)"),i=globalThis.matchMedia("(prefers-contrast: more)");return t.addEventListener("change",n=>{e(n.matches,i.matches)}),i.addEventListener("change",n=>{e(t.matches,n.matches)}),{isDarkMode:t.matches,isHighContrast:i.matches}}static getFirstElementByClassName(e,t){let i=(t!=null?t:globalThis.document).getElementsByClassName(e);return i?i[0]:null}static createAvaloniaCanvas(e){var n;let t=(n=e.getAttribute("data-containerId"))!=null?n:"0000",i=document.createElement("canvas");return i.id=`canvas${t}`,i.classList.add("avalonia-canvas"),i.style.width="100%",i.style.height="100%",i.style.position="absolute",i}static attachCanvas(e,t){e.prepend(t)}static detachCanvas(e,t){e.removeChild(t)}static createAvaloniaHost(e){let t=Math.random().toString(36).replace(/[^a-z]+/g,"").substr(2,10);e.classList.add("avalonia-container"),e.tabIndex=0,e.setAttribute("data-containerId",t),e.oncontextmenu=function(){return!1},e.style.overflow="hidden",e.style.touchAction="none";let i=document.createElement("div");i.id=`nativeHost${t}`,i.classList.add("avalonia-native-host"),i.style.left="0px",i.style.top="0px",i.style.width="100%",i.style.height="100%",i.style.position="absolute";let n=document.createElement("input");return n.id=`inputElement${t}`,n.classList.add("avalonia-input-element"),n.autocapitalize="none",n.type="text",n.spellcheck=!1,n.style.padding="0",n.style.margin="0",n.style.borderWidth="0",n.style.position="absolute",n.style.overflow="hidden",n.style.borderStyle="hidden",n.style.outline="none",n.style.background="transparent",n.style.color="transparent",n.style.display="none",n.style.height="20px",n.style.zIndex="-1",n.onpaste=function(){return!1},n.oncopy=function(){return!1},n.oncut=function(){return!1},e.prepend(n),e.prepend(i),{host:e,nativeHost:i,inputElement:n}}static isFullscreen(){return document.fullscreenElement!=null}static async setFullscreen(e){e?await document.documentElement.requestFullscreen():await document.exitFullscreen()}static initSafeAreaPadding(){document.documentElement.style.setProperty("--av-sat","env(safe-area-inset-top)"),document.documentElement.style.setProperty("--av-sar","env(safe-area-inset-right)"),document.documentElement.style.setProperty("--av-sab","env(safe-area-inset-bottom)"),document.documentElement.style.setProperty("--av-sal","env(safe-area-inset-left)")}static getSafeAreaPadding(){let e=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sat")),t=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sab")),i=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sal")),n=parseFloat(getComputedStyle(document.documentElement).getPropertyValue("--av-sar"));return[i,e,t,n]}};var S=class{static hasNativeFilePicker(){return"showSaveFilePicker"in globalThis}static isMobile(){var r;let e=(r=globalThis.navigator)==null?void 0:r.userAgentData;if(e)return e.mobile;let t=navigator.userAgent,i=/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i,n=/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;return i.test(t)||n.test(t.substr(0,4))}static isTv(){return navigator.userAgent.includes("SmartTV")}};var I=typeof SharedArrayBuffer!="undefined";function T(s){return I&&s[Symbol.toStringTag]==="SharedArrayBuffer"}var L=class{static async seek(e,t){return await e.seek(t)}static async truncate(e,t){return await e.truncate(t)}static async close(e){return await e.close()}static async write(e,t,i,n){var o;let r=(o=globalThis.getDotnetRuntime(0))==null?void 0:o.localHeapViewU8(),a;if(t._pointer>0&&t._length>0&&r&&!T(r.buffer))a=new Uint8Array(r.buffer,t._pointer+i,n);else{let l=new Uint8Array(n);t.copyTo(l,i),a=t}return await e.write(a)}static byteLength(e){return e.size}static async sliceArrayBuffer(e,t,i){let n=await e.slice(t,t+i).arrayBuffer();return new Uint8Array(n)}static toMemoryView(e){return e}};var z=class{},H=class{static createDefaultChild(e){return document.createElement("div")}static createAttachment(){return new z}static initializeWithChildHandle(e,t){e._child=t,e._child.style.position="absolute"}static attachTo(e,t){e._host&&e._child&&e._host.removeChild(e._child),e._host=t,e._host&&e._child&&e._host.appendChild(e._child)}static showInBounds(e,t,i,n,r){e._child&&(e._child.style.top=`${i}px`,e._child.style.left=`${t}px`,e._child.style.width=`${n}px`,e._child.style.height=`${r}px`,e._child.style.display="block")}static hideWithSize(e,t,i){e._child&&(e._child.style.width=`${t}px`,e._child.style.height=`${i}px`,e._child.style.display="none")}static releaseChild(e){e._child&&(e._child=void 0)}};var k=class{static addBackHandler(e){history.pushState(null,"",window.location.href),window.onpopstate=()=>{e()?history.forward():history.back()}}};var P=class{static itemsArrayAt(e,t){let i=e[t];if(!i)return[];let n=[];for(let r=0;r(i[i.Software2D=1]="Software2D",i[i.WebGL1=2]="WebGL1",i[i.WebGL2=3]="WebGL2",i))(v||{}),y=class{constructor(e,t){this.context=e;this.mode=t}};var C=class{static observeSize(e,t){return this.resizeObserver||(this.resizeObserver=new ResizeObserver(this.onResize),this.resizeObserver.callbacks=new Map),this.resizeObserver.callbacks.set(e,t),this.resizeObserver.observe(e,{box:"content-box"}),()=>{var i,n;(i=this.resizeObserver)==null||i.callbacks.delete(e),(n=this.resizeObserver)==null||n.unobserve(e)}}static onResize(e,t){for(let i of e){let n=t.callbacks.get(i.target);if(!n)continue;let r=window.devicePixelRatio,a,o,l=r;i.devicePixelContentBoxSize?(a=i.devicePixelContentBoxSize[0].inlineSize,o=i.devicePixelContentBoxSize[0].blockSize,l=1):i.contentBoxSize?i.contentBoxSize[0]?(a=i.contentBoxSize[0].inlineSize,o=i.contentBoxSize[0].blockSize):(a=i.contentBoxSize.inlineSize,o=i.contentBoxSize.blockSize):(a=i.contentRect.width,o=i.contentRect.height);let u=Math.round(a*l),c=Math.round(o*l);n(u,c,r)}}};var h=class extends y{constructor(t,i,n){super(i,n);this.canvas=t;this.context=i;this.mode=n;C.observeSize(t,(r,a,o)=>{this.sizeParams=[r,a,o],this.sizeChangedCallback&&this.sizeChangedCallback(r,a,o)})}destroy(){delete this.sizeChangedCallback}onSizeChanged(t){if(this.sizeChangedCallback)throw new Error("For simplicity, we don't support multiple size changed callbacks per surface, not needed yet.");this.sizeChangedCallback=t}ensureSize(){this.sizeParams&&(this.canvas.width=this.sizeParams[0],this.canvas.height=this.sizeParams[1],delete this.sizeParams)}};var E=class extends h{constructor(t){let i=t.getContext("2d",{alpha:!0});if(!i)throw new Error("HTMLCanvasElement.getContext(2d) returned null.");super(t,i,1);this.canvas=t;this.runtime=globalThis.getDotnetRuntime(0)}putPixelData(t,i,n){var l;this.ensureSize();let r=(l=this.runtime)==null?void 0:l.localHeapViewU8(),a;if(t._pointer>0&&t._length>0&&r&&!T(r.buffer))a=new Uint8ClampedArray(r.buffer,t._pointer,t._length);else{let u=new Uint8Array(t.byteLength);t.copyTo(u),a=new Uint8ClampedArray(u.buffer)}let o=new ImageData(a,i,n);this.context.putImageData(o,0,0)}};function N(){var t,i,n,r;let s=globalThis,e=(i=s.Module)!=null?i:(t=s.getDotnetRuntime(0))==null?void 0:t.Module;return(r=(n=e==null?void 0:e.GL)!=null?n:s.AvaloniaGL)!=null?r:s.SkiaSharpGL}var x=class extends h{constructor(t,i){var u,c;let n=N();if(!n)throw new Error("Module.GL object wasn't initialized, WebGL can't be used.");let r=i===2?"webgl":"webgl2",a={alpha:!0,depth:!0,stencil:!0,antialias:!1,premultipliedAlpha:!0,preserveDrawingBuffer:!1,failIfMajorPerformanceCaveat:!0,majorVersion:i===2?1:2,minorVersion:0,enableExtensionsByDefault:1,explicitSwapControl:0},o=t.getContext(r,a);if(!o)throw new Error(`HTMLCanvasElement.getContext(${r}) returned null.`);let l=n.registerContext(o,a);n.makeContextCurrent(l),o.gl_handle=l;super(t,o,1);this.canvas=t;this.contextHandle=l,this.fboId=(c=(u=o.getParameter(o.FRAMEBUFFER_BINDING))==null?void 0:u.id)!=null?c:0,this.stencil=o.getParameter(o.STENCIL_BITS),this.sample=o.getParameter(o.SAMPLES),this.depth=o.getParameter(o.DEPTH_BITS)}};var M=class{static create(e,t){if(!e)throw new Error("No html container was provided.");let i=m.createAvaloniaCanvas(e);m.attachCanvas(e,i);try{if(t===1)return new E(i);if(t===2||t===3)return new x(i,t);throw new Error(`Unsupported rendering mode: ${v[t]}`)}catch(n){throw m.detachCanvas(e,i),n}}static destroy(e){e.destroy()}static onSizeChanged(e,t){e.onSizeChanged(t)}static ensureSize(e){e.ensureSize()}static putPixelData(e,t,i,n){e.putPixelData(t,i,n)}};async function Le(s,e){"serviceWorker"in navigator&&await globalThis.navigator.serviceWorker.register(s,e?{scope:e}:void 0)}export{m as AvaloniaDOM,S as Caniuse,M as CanvasFactory,P as GeneralHelpers,f as InputHelper,H as NativeControlHost,k as NavigationHelper,L as StreamHelper,A as TimerHelper,Le as registerServiceWorker};
+//# sourceMappingURL=avalonia.js.map
diff --git a/_framework/avalonia.js.map b/_framework/avalonia.js.map
new file mode 100755
index 00000000..dc15a7c1
--- /dev/null
+++ b/_framework/avalonia.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../webapp/modules/avalonia/caretHelper.ts", "../webapp/modules/avalonia/input.ts", "../webapp/modules/avalonia/dom.ts", "../webapp/modules/avalonia/caniuse.ts", "../webapp/modules/avalonia/stream.ts", "../webapp/modules/avalonia/nativeControlHost.ts", "../webapp/modules/avalonia/navigationHelper.ts", "../webapp/modules/avalonia/generalHelpers.ts", "../webapp/modules/avalonia/timer.ts", "../webapp/modules/avalonia/surfaces/surfaceBase.ts", "../webapp/modules/avalonia/surfaces/resizeHandler.ts", "../webapp/modules/avalonia/surfaces/htmlSurfaceBase.ts", "../webapp/modules/avalonia/surfaces/softwareSurface.ts", "../webapp/modules/avalonia/surfaces/webGlSurface.ts", "../webapp/modules/avalonia/surfaces/surfaceFactory.ts", "../webapp/modules/avalonia.ts"],
+ "sourcesContent": ["// Based on https://github.com/component/textarea-caret-position/blob/master/index.js\r\nexport class CaretHelper {\r\n public static getCaretCoordinates(\r\n element: HTMLInputElement | HTMLTextAreaElement,\r\n position: number,\r\n options?: { debug: boolean }\r\n ) {\r\n if (!isBrowser) {\r\n throw new Error(\r\n \"textarea-caret-position#getCaretCoordinates should only be called in a browser\"\r\n );\r\n }\r\n\r\n const debug = options?.debug ?? false;\r\n if (debug) {\r\n const el = document.querySelector(\r\n \"#input-textarea-caret-position-mirror-div\"\r\n );\r\n if (el) el.parentNode?.removeChild(el);\r\n }\r\n\r\n // The mirror div will replicate the textarea's style\r\n const div = document.createElement(\"div\");\r\n div.id = \"input-textarea-caret-position-mirror-div\";\r\n document.body.appendChild(div);\r\n\r\n const style = div.style;\r\n const computed = window.getComputedStyle\r\n ? window.getComputedStyle(element)\r\n : ((element as any).currentStyle as CSSStyleDeclaration); // currentStyle for IE < 9\r\n const isInput = element.nodeName === \"INPUT\";\r\n\r\n // Default textarea styles\r\n style.whiteSpace = \"pre-wrap\";\r\n if (!isInput) style.wordWrap = \"break-word\"; // only for textarea-s\r\n\r\n // Position off-screen\r\n style.position = \"absolute\"; // required to return coordinates properly\r\n if (!debug) style.visibility = \"hidden\"; // not 'display: none' because we want rendering\r\n\r\n // Transfer the element's properties to the div\r\n properties.forEach((prop: string) => {\r\n if (isInput && prop === \"lineHeight\") {\r\n // Special case for s because text is rendered centered and line height may be != height\r\n if (computed.boxSizing === \"border-box\") {\r\n const height = parseInt(computed.height);\r\n const outerHeight =\r\n parseInt(computed.paddingTop) +\r\n parseInt(computed.paddingBottom) +\r\n parseInt(computed.borderTopWidth) +\r\n parseInt(computed.borderBottomWidth);\r\n const targetHeight = outerHeight + parseInt(computed.lineHeight);\r\n if (height > targetHeight) {\r\n style.lineHeight = `${height - outerHeight}px`;\r\n } else if (height === targetHeight) {\r\n style.lineHeight = computed.lineHeight;\r\n } else {\r\n style.lineHeight = \"0\";\r\n }\r\n } else {\r\n style.lineHeight = computed.height;\r\n }\r\n } else {\r\n (style as any)[prop] = (computed as any)[prop];\r\n }\r\n });\r\n\r\n if (isFirefox) {\r\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\r\n if (element.scrollHeight > parseInt(computed.height)) {\r\n style.overflowY = \"scroll\";\r\n }\r\n } else {\r\n style.overflow = \"hidden\"; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\r\n }\r\n\r\n div.textContent = element.value.substring(0, position);\r\n // The second special handling for input type=\"text\" vs textarea:\r\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\r\n if (isInput) div.textContent = div.textContent.replace(/\\s/g, \"\\u00a0\");\r\n\r\n const span = document.createElement(\"span\");\r\n // Wrapping must be replicated *exactly*, including when a long word gets\r\n // onto the next line, with whitespace at the end of the line before (#7).\r\n // The *only* reliable way to do that is to copy the *entire* rest of the\r\n // textarea's content into the created at the caret position.\r\n // For inputs, just '.' would be enough, but no need to bother.\r\n span.textContent = element.value.substring(position) || \".\"; // || because a completely empty faux span doesn't render at all\r\n div.appendChild(span);\r\n\r\n const coordinates = {\r\n top: span.offsetTop + parseInt(computed.borderTopWidth),\r\n left: span.offsetLeft + parseInt(computed.borderLeftWidth),\r\n height: parseInt(computed.lineHeight)\r\n };\r\n\r\n if (debug) {\r\n span.style.backgroundColor = \"#aaa\";\r\n } else {\r\n document.body.removeChild(div);\r\n }\r\n\r\n return coordinates;\r\n }\r\n}\r\n\r\nconst properties = [\r\n \"direction\", // RTL support\r\n \"boxSizing\",\r\n \"width\", // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\r\n \"height\",\r\n \"overflowX\",\r\n \"overflowY\", // copy the scrollbar for IE\r\n\r\n \"borderTopWidth\",\r\n \"borderRightWidth\",\r\n \"borderBottomWidth\",\r\n \"borderLeftWidth\",\r\n \"borderStyle\",\r\n\r\n \"paddingTop\",\r\n \"paddingRight\",\r\n \"paddingBottom\",\r\n \"paddingLeft\",\r\n\r\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\r\n \"fontStyle\",\r\n \"fontVariant\",\r\n \"fontWeight\",\r\n \"fontStretch\",\r\n \"fontSize\",\r\n \"fontSizeAdjust\",\r\n \"lineHeight\",\r\n \"fontFamily\",\r\n\r\n \"textAlign\",\r\n \"textTransform\",\r\n \"textIndent\",\r\n \"textDecoration\", // might not make a difference, but better be safe\r\n\r\n \"letterSpacing\",\r\n \"wordSpacing\",\r\n\r\n \"tabSize\",\r\n \"MozTabSize\"\r\n];\r\n\r\nconst isBrowser = typeof window !== \"undefined\";\r\nconst isFirefox = isBrowser && (window as any).mozInnerScreenX != null;\r\n", "import { CaretHelper } from \"./caretHelper\";\r\n\r\nenum RawInputModifiers {\r\n None = 0,\r\n Alt = 1,\r\n Control = 2,\r\n Shift = 4,\r\n Meta = 8,\r\n\r\n LeftMouseButton = 16,\r\n RightMouseButton = 32,\r\n MiddleMouseButton = 64,\r\n XButton1MouseButton = 128,\r\n XButton2MouseButton = 256,\r\n KeyboardMask = Alt | Control | Shift | Meta,\r\n\r\n PenInverted = 512,\r\n PenEraser = 1024,\r\n PenBarrelButton = 2048\r\n}\r\n\r\n/*\r\n* This is a hack to handle Mozilla clipboard events in a more convinient way for framework users.\r\n* In the browser, events go in order KeyDown -> Paste -> KeyUp.\r\n* On KeyDown we trigger Avalonia handlers, which might execute readClipboardText.\r\n* When readClipboardText was executed, we mark ClipboardState as Pending and setup clipboard promise,\r\n* which will un-handle KeyDown event, basically allowing browser to pass a Paste event properly.\r\n* On actual Paste event we execute promise callbacks, resuming async operation, and returning pasted text to the app.\r\n* Note #1, on every KeyUp event we will reset all the state and reject pending promises if any, as this event it expected to come after Paste.\r\n* Note #2, whole this code will be executed only on legacy browsers like Mozilla, where clipboard.readText is not available.\r\n* Note #3, with all of these hacks Clipboard.ReadText will still work only on actual \"paste\" gesture initiated by user.\r\n* */\r\nenum ClipboardState {\r\n None,\r\n Ready,\r\n Pending\r\n}\r\n\r\nexport class InputHelper {\r\n static clipboardState: ClipboardState = ClipboardState.None;\r\n static resolveClipboard?: any;\r\n static rejectClipboard?: any;\r\n\r\n public static initializeBackgroundHandlers() {\r\n if (this.clipboardState !== ClipboardState.None) {\r\n return;\r\n }\r\n\r\n globalThis.addEventListener(\"paste\", (args: any) => {\r\n if (this.clipboardState === ClipboardState.Pending) {\r\n this.resolveClipboard(args.clipboardData.getData(\"text\"));\r\n }\r\n });\r\n this.clipboardState = ClipboardState.Ready;\r\n }\r\n\r\n public static async readClipboardText(): Promise {\r\n if (globalThis.navigator.clipboard.readText) {\r\n return await globalThis.navigator.clipboard.readText();\r\n } else {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n this.clipboardState = ClipboardState.Pending;\r\n this.resolveClipboard = resolve;\r\n this.rejectClipboard = reject;\r\n });\r\n } finally {\r\n this.clipboardState = ClipboardState.Ready;\r\n this.resolveClipboard = null;\r\n this.rejectClipboard = null;\r\n }\r\n }\r\n }\r\n\r\n public static subscribeKeyEvents(\r\n element: HTMLInputElement,\r\n keyDownCallback: (code: string, key: string, modifiers: string) => boolean,\r\n keyUpCallback: (code: string, key: string, modifiers: string) => boolean) {\r\n const keyDownHandler = (args: KeyboardEvent) => {\r\n if (keyDownCallback(args.code, args.key, this.getModifiers(args))) {\r\n if (this.clipboardState !== ClipboardState.Pending) {\r\n args.preventDefault();\r\n }\r\n }\r\n };\r\n element.addEventListener(\"keydown\", keyDownHandler);\r\n\r\n const keyUpHandler = (args: KeyboardEvent) => {\r\n if (keyUpCallback(args.code, args.key, this.getModifiers(args))) {\r\n args.preventDefault();\r\n }\r\n if (this.rejectClipboard) {\r\n this.rejectClipboard();\r\n }\r\n };\r\n\r\n element.addEventListener(\"keyup\", keyUpHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"keydown\", keyDownHandler);\r\n element.removeEventListener(\"keyup\", keyUpHandler);\r\n };\r\n }\r\n\r\n public static subscribeTextEvents(\r\n element: HTMLInputElement,\r\n beforeInputCallback: (args: InputEvent, start: number, end: number) => boolean,\r\n compositionStartCallback: (args: CompositionEvent) => boolean,\r\n compositionUpdateCallback: (args: CompositionEvent) => boolean,\r\n compositionEndCallback: (args: CompositionEvent) => boolean) {\r\n const compositionStartHandler = (args: CompositionEvent) => {\r\n if (compositionStartCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionstart\", compositionStartHandler);\r\n\r\n const beforeInputHandler = (args: InputEvent) => {\r\n const ranges = args.getTargetRanges();\r\n let start = -1;\r\n let end = -1;\r\n if (ranges.length > 0) {\r\n start = ranges[0].startOffset;\r\n end = ranges[0].endOffset;\r\n }\r\n\r\n if (args.inputType === \"insertCompositionText\") {\r\n start = 2;\r\n end = start + 2;\r\n }\r\n if (beforeInputCallback(args, start, end)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"beforeinput\", beforeInputHandler);\r\n\r\n const compositionUpdateHandler = (args: CompositionEvent) => {\r\n if (compositionUpdateCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n\r\n const compositionEndHandler = (args: CompositionEvent) => {\r\n if (compositionEndCallback(args)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"compositionend\", compositionEndHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"compositionstart\", compositionStartHandler);\r\n element.removeEventListener(\"compositionupdate\", compositionUpdateHandler);\r\n element.removeEventListener(\"compositionend\", compositionEndHandler);\r\n };\r\n }\r\n\r\n public static subscribePointerEvents(\r\n element: HTMLInputElement,\r\n pointerMoveCallback: (args: PointerEvent) => boolean,\r\n pointerDownCallback: (args: PointerEvent) => boolean,\r\n pointerUpCallback: (args: PointerEvent) => boolean,\r\n pointerCancelCallback: (args: PointerEvent) => boolean,\r\n wheelCallback: (args: WheelEvent) => boolean\r\n ) {\r\n const pointerMoveHandler = (args: PointerEvent) => {\r\n pointerMoveCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerDownHandler = (args: PointerEvent) => {\r\n pointerDownCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerUpHandler = (args: PointerEvent) => {\r\n pointerUpCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const pointerCancelHandler = (args: PointerEvent) => {\r\n pointerCancelCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n const wheelHandler = (args: WheelEvent) => {\r\n wheelCallback(args);\r\n args.preventDefault();\r\n };\r\n\r\n element.addEventListener(\"pointermove\", pointerMoveHandler);\r\n element.addEventListener(\"pointerdown\", pointerDownHandler);\r\n element.addEventListener(\"pointerup\", pointerUpHandler);\r\n element.addEventListener(\"wheel\", wheelHandler);\r\n element.addEventListener(\"pointercancel\", pointerCancelHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"pointerover\", pointerMoveHandler);\r\n element.removeEventListener(\"pointerdown\", pointerDownHandler);\r\n element.removeEventListener(\"pointerup\", pointerUpHandler);\r\n element.removeEventListener(\"pointercancel\", pointerCancelHandler);\r\n element.removeEventListener(\"wheel\", wheelHandler);\r\n };\r\n }\r\n\r\n public static subscribeInputEvents(\r\n element: HTMLInputElement,\r\n inputCallback: (value: string) => boolean\r\n ) {\r\n const inputHandler = (args: Event) => {\r\n if (inputCallback((args as any).value)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"input\", inputHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"input\", inputHandler);\r\n };\r\n }\r\n\r\n public static subscribeDropEvents(\r\n element: HTMLInputElement,\r\n dragEvent: (args: any) => boolean\r\n ) {\r\n const dragHandler = (args: Event) => {\r\n if (dragEvent(args as any)) {\r\n args.preventDefault();\r\n }\r\n };\r\n element.addEventListener(\"dragover\", dragHandler);\r\n element.addEventListener(\"dragenter\", dragHandler);\r\n element.addEventListener(\"dragleave\", dragHandler);\r\n element.addEventListener(\"drop\", dragHandler);\r\n\r\n return () => {\r\n element.removeEventListener(\"dragover\", dragHandler);\r\n element.removeEventListener(\"dragenter\", dragHandler);\r\n element.removeEventListener(\"dragleave\", dragHandler);\r\n element.removeEventListener(\"drop\", dragHandler);\r\n };\r\n }\r\n\r\n public static getCoalescedEvents(pointerEvent: PointerEvent): PointerEvent[] {\r\n return pointerEvent.getCoalescedEvents();\r\n }\r\n\r\n public static subscribeKeyboardGeometryChange(\r\n element: HTMLInputElement,\r\n handler: (args: any) => boolean) {\r\n if (\"virtualKeyboard\" in navigator) {\r\n // (navigator as any).virtualKeyboard.overlaysContent = true;\r\n (navigator as any).virtualKeyboard.addEventListener(\"geometrychange\", (event: any) => {\r\n const elementRect = element.getBoundingClientRect();\r\n const keyboardRect = event.target.boundingRect as DOMRect;\r\n handler({\r\n x: keyboardRect.x - elementRect.x,\r\n y: keyboardRect.y - elementRect.y,\r\n width: keyboardRect.width,\r\n height: keyboardRect.height\r\n });\r\n });\r\n }\r\n }\r\n\r\n public static subscribeVisibilityChange(\r\n handler: (state: boolean) => void): boolean {\r\n document.addEventListener(\"visibilitychange\", () => {\r\n handler(document.visibilityState === \"visible\");\r\n });\r\n return document.visibilityState === \"visible\";\r\n }\r\n\r\n public static clearInput(inputElement: HTMLInputElement) {\r\n inputElement.value = \"\";\r\n }\r\n\r\n public static focusElement(inputElement: HTMLElement) {\r\n inputElement.focus();\r\n }\r\n\r\n public static setCursor(inputElement: HTMLInputElement, kind: string) {\r\n if (kind === \"default\") {\r\n inputElement.style.removeProperty(\"cursor\");\r\n } else {\r\n inputElement.style.cursor = kind;\r\n }\r\n }\r\n\r\n public static setBounds(inputElement: HTMLInputElement, x: number, y: number, caretWidth: number, caretHeight: number, caret: number) {\r\n inputElement.style.left = (x).toFixed(0) + \"px\";\r\n inputElement.style.top = (y).toFixed(0) + \"px\";\r\n\r\n const { left, top } = CaretHelper.getCaretCoordinates(inputElement, caret);\r\n\r\n inputElement.style.left = (x - left).toFixed(0) + \"px\";\r\n inputElement.style.top = (y - top).toFixed(0) + \"px\";\r\n }\r\n\r\n public static hide(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"none\";\r\n }\r\n\r\n public static show(inputElement: HTMLInputElement) {\r\n inputElement.style.display = \"block\";\r\n }\r\n\r\n public static setSurroundingText(inputElement: HTMLInputElement, text: string, start: number, end: number) {\r\n if (!inputElement) {\r\n return;\r\n }\r\n\r\n inputElement.value = text;\r\n inputElement.setSelectionRange(start, end);\r\n inputElement.style.width = \"20px\";\r\n inputElement.style.width = `${inputElement.scrollWidth}px`;\r\n }\r\n\r\n private static getModifiers(args: KeyboardEvent): string {\r\n let modifiers = RawInputModifiers.None;\r\n\r\n if (args.ctrlKey) { modifiers |= RawInputModifiers.Control; }\r\n if (args.altKey) { modifiers |= RawInputModifiers.Alt; }\r\n if (args.shiftKey) { modifiers |= RawInputModifiers.Shift; }\r\n if (args.metaKey) { modifiers |= RawInputModifiers.Meta; }\r\n\r\n return modifiers.toString();\r\n }\r\n\r\n public static setPointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n containerElement.setPointerCapture(pointerId);\r\n }\r\n\r\n public static releasePointerCapture(containerElement: HTMLInputElement, pointerId: number): void {\r\n if (containerElement.hasPointerCapture(pointerId)) {\r\n containerElement.releasePointerCapture(pointerId);\r\n }\r\n }\r\n}\r\n", "\r\nexport class AvaloniaDOM {\r\n public static addClass(element: HTMLElement, className: string): void {\r\n element.classList.add(className);\r\n }\r\n\r\n static observeDarkMode(observer: (isDarkMode: boolean, isHighContrast: boolean) => boolean) {\r\n if (globalThis.matchMedia === undefined) {\r\n return false;\r\n }\r\n\r\n const colorShemeMedia = globalThis.matchMedia(\"(prefers-color-scheme: dark)\");\r\n const prefersContrastMedia = globalThis.matchMedia(\"(prefers-contrast: more)\");\r\n\r\n colorShemeMedia.addEventListener(\"change\", (args: MediaQueryListEvent) => {\r\n observer(args.matches, prefersContrastMedia.matches);\r\n });\r\n prefersContrastMedia.addEventListener(\"change\", (args: MediaQueryListEvent) => {\r\n observer(colorShemeMedia.matches, args.matches);\r\n });\r\n\r\n return {\r\n isDarkMode: colorShemeMedia.matches,\r\n isHighContrast: prefersContrastMedia.matches\r\n };\r\n }\r\n\r\n static getFirstElementByClassName(className: string, parent?: HTMLElement): Element | null {\r\n const elements = (parent ?? globalThis.document).getElementsByClassName(className);\r\n return elements ? elements[0] : null;\r\n }\r\n\r\n static createAvaloniaCanvas(host: HTMLElement): HTMLCanvasElement {\r\n const containerId = host.getAttribute(\"data-containerId\") ?? \"0000\";\r\n\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.id = `canvas${containerId}`;\r\n canvas.classList.add(\"avalonia-canvas\");\r\n canvas.style.width = \"100%\";\r\n canvas.style.height = \"100%\";\r\n canvas.style.position = \"absolute\";\r\n\r\n return canvas;\r\n }\r\n\r\n static attachCanvas(host: HTMLElement, canvas: HTMLCanvasElement): void {\r\n host.prepend(canvas);\r\n }\r\n\r\n static detachCanvas(host: HTMLElement, canvas: HTMLCanvasElement): void {\r\n host.removeChild(canvas);\r\n }\r\n\r\n static createAvaloniaHost(host: HTMLElement) {\r\n const containerId = Math.random().toString(36).replace(/[^a-z]+/g, \"\").substr(2, 10);\r\n\r\n // Root element\r\n host.classList.add(\"avalonia-container\");\r\n host.tabIndex = 0;\r\n host.setAttribute(\"data-containerId\", containerId);\r\n host.oncontextmenu = function () { return false; };\r\n host.style.overflow = \"hidden\";\r\n host.style.touchAction = \"none\";\r\n\r\n // Canvas is lazily created depending on the rendering mode. See createAvaloniaCanvas usage.\r\n\r\n // Native controls host\r\n const nativeHost = document.createElement(\"div\");\r\n nativeHost.id = `nativeHost${containerId}`;\r\n nativeHost.classList.add(\"avalonia-native-host\");\r\n nativeHost.style.left = \"0px\";\r\n nativeHost.style.top = \"0px\";\r\n nativeHost.style.width = \"100%\";\r\n nativeHost.style.height = \"100%\";\r\n nativeHost.style.position = \"absolute\";\r\n\r\n // IME\r\n const inputElement = document.createElement(\"input\");\r\n inputElement.id = `inputElement${containerId}`;\r\n inputElement.classList.add(\"avalonia-input-element\");\r\n inputElement.autocapitalize = \"none\";\r\n inputElement.type = \"text\";\r\n inputElement.spellcheck = false;\r\n inputElement.style.padding = \"0\";\r\n inputElement.style.margin = \"0\";\r\n inputElement.style.borderWidth = \"0\";\r\n inputElement.style.position = \"absolute\";\r\n inputElement.style.overflow = \"hidden\";\r\n inputElement.style.borderStyle = \"hidden\";\r\n inputElement.style.outline = \"none\";\r\n inputElement.style.background = \"transparent\";\r\n inputElement.style.color = \"transparent\";\r\n inputElement.style.display = \"none\";\r\n inputElement.style.height = \"20px\";\r\n inputElement.style.zIndex = \"-1\";\r\n inputElement.onpaste = function () { return false; };\r\n inputElement.oncopy = function () { return false; };\r\n inputElement.oncut = function () { return false; };\r\n\r\n host.prepend(inputElement);\r\n host.prepend(nativeHost);\r\n\r\n return {\r\n host,\r\n nativeHost,\r\n inputElement\r\n };\r\n }\r\n\r\n public static isFullscreen(): boolean {\r\n return document.fullscreenElement != null;\r\n }\r\n\r\n public static async setFullscreen(isFullscreen: boolean) {\r\n if (isFullscreen) {\r\n const doc = document.documentElement;\r\n await doc.requestFullscreen();\r\n } else {\r\n await document.exitFullscreen();\r\n }\r\n }\r\n\r\n public static initSafeAreaPadding(): void {\r\n document.documentElement.style.setProperty(\"--av-sat\", \"env(safe-area-inset-top)\");\r\n document.documentElement.style.setProperty(\"--av-sar\", \"env(safe-area-inset-right)\");\r\n document.documentElement.style.setProperty(\"--av-sab\", \"env(safe-area-inset-bottom)\");\r\n document.documentElement.style.setProperty(\"--av-sal\", \"env(safe-area-inset-left)\");\r\n }\r\n\r\n public static getSafeAreaPadding(): number[] {\r\n const top = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sat\"));\r\n const bottom = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sab\"));\r\n const left = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sal\"));\r\n const right = parseFloat(getComputedStyle(document.documentElement).getPropertyValue(\"--av-sar\"));\r\n\r\n return [left, top, bottom, right];\r\n }\r\n}\r\n", "export class Caniuse {\r\n public static hasNativeFilePicker(): boolean {\r\n return \"showSaveFilePicker\" in globalThis;\r\n }\r\n\r\n public static isMobile(): boolean {\r\n const userAgentData = (globalThis.navigator as any)?.userAgentData;\r\n if (userAgentData) {\r\n return userAgentData.mobile;\r\n }\r\n\r\n const userAgent = navigator.userAgent;\r\n const regex1 = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i;\r\n const regex2 = /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw(n|u)|c55\\/|capi|ccwa|cdm|cell|chtm|cldc|cmd|co(mp|nd)|craw|da(it|ll|ng)|dbte|dcs|devi|dica|dmob|do(c|p)o|ds(12|d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(|_)|g1 u|g560|gene|gf5|gmo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd(m|p|t)|hei|hi(pt|ta)|hp( i|ip)|hsc|ht(c(| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i(20|go|ma)|i230|iac( ||\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|[a-w])|libw|lynx|m1w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|mcr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|([1-8]|c))|phil|pire|pl(ay|uc)|pn2|po(ck|rt|se)|prox|psio|ptg|qaa|qc(07|12|21|32|60|[2-7]|i)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h|oo|p)|sdk\\/|se(c(|0|1)|47|mc|nd|ri)|sgh|shar|sie(|m)|sk0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h|v|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl|tdg|tel(i|m)|tim|tmo|to(pl|sh)|ts(70|m|m3|m5)|tx9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas|your|zeto|zte/i;\r\n return regex1.test(userAgent) || regex2.test(userAgent.substr(0, 4));\r\n }\r\n\r\n public static isTv(): boolean {\r\n return navigator.userAgent.includes(\"SmartTV\");\r\n }\r\n}\r\n", "import FileSystemWritableFileStream from \"native-file-system-adapter/types/src/FileSystemWritableFileStream\";\r\n\r\nconst sharedArrayBufferDefined = typeof SharedArrayBuffer !== \"undefined\";\r\nexport function isSharedArrayBuffer(buffer: any): buffer is SharedArrayBuffer {\r\n // BEWARE: In some cases, `instanceof SharedArrayBuffer` returns false even though buffer is an SAB.\r\n // Patch adapted from https://github.com/emscripten-core/emscripten/pull/16994\r\n // See also https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag\r\n return sharedArrayBufferDefined && buffer[Symbol.toStringTag] === \"SharedArrayBuffer\";\r\n}\r\n\r\nexport class StreamHelper {\r\n public static async seek(stream: FileSystemWritableFileStream, position: number) {\r\n return await stream.seek(position);\r\n }\r\n\r\n public static async truncate(stream: FileSystemWritableFileStream, size: number) {\r\n return await stream.truncate(size);\r\n }\r\n\r\n public static async close(stream: FileSystemWritableFileStream) {\r\n return await stream.close();\r\n }\r\n\r\n public static async write(stream: FileSystemWritableFileStream, span: any, offset: number, count: number) {\r\n const heap8 = globalThis.getDotnetRuntime(0)?.localHeapViewU8();\r\n\r\n let buffer: Uint8Array;\r\n if (span._pointer > 0 && span._length > 0 && heap8 && !isSharedArrayBuffer(heap8.buffer)) {\r\n // Attempt to use undocumented access to the HEAP8 directly\r\n // Note, SharedArrayBuffer cannot be used with ImageData (when WasmEnableThreads = true).\r\n buffer = new Uint8Array(heap8.buffer, span._pointer as number + offset, count);\r\n } else {\r\n // Or fallback to the normal API that does multiple array copies.\r\n const copy = new Uint8Array(count);\r\n span.copyTo(copy, offset);\r\n buffer = span;\r\n }\r\n\r\n return await stream.write(buffer);\r\n }\r\n\r\n public static byteLength(stream: Blob) {\r\n return stream.size;\r\n }\r\n\r\n public static async sliceArrayBuffer(stream: Blob, offset: number, count: number) {\r\n const buffer = await stream.slice(offset, offset + count).arrayBuffer();\r\n return new Uint8Array(buffer);\r\n }\r\n\r\n public static toMemoryView(buffer: Uint8Array): Uint8Array {\r\n return buffer;\r\n }\r\n}\r\n", "class NativeControlHostTopLevelAttachment {\r\n _child?: HTMLElement;\r\n _host?: HTMLElement;\r\n}\r\n\r\nexport class NativeControlHost {\r\n public static createDefaultChild(parent?: HTMLElement): HTMLElement {\r\n return document.createElement(\"div\");\r\n }\r\n\r\n public static createAttachment(): NativeControlHostTopLevelAttachment {\r\n return new NativeControlHostTopLevelAttachment();\r\n }\r\n\r\n public static initializeWithChildHandle(element: NativeControlHostTopLevelAttachment, child: HTMLElement): void {\r\n element._child = child;\r\n element._child.style.position = \"absolute\";\r\n }\r\n\r\n public static attachTo(element: NativeControlHostTopLevelAttachment, host?: HTMLElement): void {\r\n if (element._host && element._child) {\r\n element._host.removeChild(element._child);\r\n }\r\n\r\n element._host = host;\r\n\r\n if (element._host && element._child) {\r\n element._host.appendChild(element._child);\r\n }\r\n }\r\n\r\n public static showInBounds(element: NativeControlHostTopLevelAttachment, x: number, y: number, width: number, height: number): void {\r\n if (element._child) {\r\n element._child.style.top = `${y}px`;\r\n element._child.style.left = `${x}px`;\r\n element._child.style.width = `${width}px`;\r\n element._child.style.height = `${height}px`;\r\n element._child.style.display = \"block\";\r\n }\r\n }\r\n\r\n public static hideWithSize(element: NativeControlHostTopLevelAttachment, width: number, height: number): void {\r\n if (element._child) {\r\n element._child.style.width = `${width}px`;\r\n element._child.style.height = `${height}px`;\r\n element._child.style.display = \"none\";\r\n }\r\n }\r\n\r\n public static releaseChild(element: NativeControlHostTopLevelAttachment): void {\r\n if (element._child) {\r\n element._child = undefined;\r\n }\r\n }\r\n}\r\n", "export class NavigationHelper {\r\n public static addBackHandler(backHandlerCallback: () => Boolean) {\r\n history.pushState(null, \"\", window.location.href);\r\n window.onpopstate = () => {\r\n const handled = backHandlerCallback();\r\n\r\n if (!handled) {\r\n history.back();\r\n } else {\r\n history.forward();\r\n }\r\n };\r\n }\r\n}\r\n", "export class GeneralHelpers {\r\n public static itemsArrayAt(instance: any, key: any): any[] {\r\n const items = instance[key];\r\n if (!items) {\r\n return [];\r\n }\r\n\r\n const retItems = [];\r\n for (let i = 0; i < items.length; i++) {\r\n retItems[i] = items[i];\r\n }\r\n return retItems;\r\n }\r\n\r\n public static itemAt(instance: any, key: any): any {\r\n const item = instance[key];\r\n return item;\r\n }\r\n\r\n public static callMethod(instance: any, name: string /*, args */): any {\r\n const args = Array.prototype.slice.call(arguments, 2);\r\n return instance[name].apply(instance, args);\r\n }\r\n}\r\n", "export class TimerHelper {\r\n public static runAnimationFrames(renderFrameCallback: (timestamp: number) => boolean): void {\r\n function render(time: number) {\r\n const next = renderFrameCallback(time);\r\n if (next) {\r\n window.requestAnimationFrame(render);\r\n }\r\n }\r\n\r\n window.requestAnimationFrame(render);\r\n }\r\n}\r\n", "export type AvaloniaRenderingContext = RenderingContext;\r\n\r\nexport enum BrowserRenderingMode {\r\n Software2D = 1,\r\n WebGL1,\r\n WebGL2\r\n}\r\n\r\nexport abstract class CanvasSurface {\r\n constructor(\r\n public context: AvaloniaRenderingContext,\r\n public mode: BrowserRenderingMode) {\r\n }\r\n\r\n abstract destroy(): void;\r\n abstract ensureSize(): void;\r\n abstract onSizeChanged(sizeChangedCallback: (width: number, height: number, dpr: number) => void): void;\r\n}\r\n", "type ResizeObserverWithCallbacks = {\r\n callbacks: Map void)>;\r\n} & ResizeObserver;\r\n\r\nexport class ResizeHandler {\r\n private static resizeObserver?: ResizeObserverWithCallbacks;\r\n\r\n public static observeSize(element: HTMLElement, callback: (width: number, height: number, dpr: number) => void) : (() => void) {\r\n if (!this.resizeObserver) {\r\n this.resizeObserver = new ResizeObserver(this.onResize) as ResizeObserverWithCallbacks;\r\n this.resizeObserver.callbacks = new Map void)>();\r\n }\r\n\r\n this.resizeObserver.callbacks.set(element, callback);\r\n this.resizeObserver.observe(element, { box: \"content-box\" });\r\n\r\n return () => {\r\n this.resizeObserver?.callbacks.delete(element);\r\n this.resizeObserver?.unobserve(element);\r\n };\r\n }\r\n\r\n private static onResize(entries: ResizeObserverEntry[], observer: ResizeObserver) {\r\n for (const entry of entries) {\r\n const callback = (observer as ResizeObserverWithCallbacks).callbacks.get(entry.target);\r\n if (!callback) {\r\n continue;\r\n }\r\n\r\n const trueDpr = window.devicePixelRatio;\r\n let width;\r\n let height;\r\n let dpr = trueDpr;\r\n if (entry.devicePixelContentBoxSize) {\r\n // NOTE: Only this path gives the correct answer\r\n // The other paths are imperfect fallbacks\r\n // for browsers that don't provide anyway to do this\r\n width = entry.devicePixelContentBoxSize[0].inlineSize;\r\n height = entry.devicePixelContentBoxSize[0].blockSize;\r\n dpr = 1; // it's already in width and height\r\n } else if (entry.contentBoxSize) {\r\n if (entry.contentBoxSize[0]) {\r\n width = entry.contentBoxSize[0].inlineSize;\r\n height = entry.contentBoxSize[0].blockSize;\r\n } else {\r\n width = (entry.contentBoxSize as any).inlineSize;\r\n height = (entry.contentBoxSize as any).blockSize;\r\n }\r\n } else {\r\n width = entry.contentRect.width;\r\n height = entry.contentRect.height;\r\n }\r\n const displayWidth = Math.round(width * dpr);\r\n const displayHeight = Math.round(height * dpr);\r\n callback(displayWidth, displayHeight, trueDpr);\r\n }\r\n }\r\n}\r\n", "import { ResizeHandler } from \"./resizeHandler\";\r\nimport { CanvasSurface, AvaloniaRenderingContext, BrowserRenderingMode } from \"./surfaceBase\";\r\n\r\nexport abstract class HtmlCanvasSurfaceBase extends CanvasSurface {\r\n private sizeParams?: [number, number, number];\r\n private sizeChangedCallback?: (width: number, height: number, dpr: number) => void;\r\n\r\n constructor(\r\n public canvas: HTMLCanvasElement,\r\n public context: AvaloniaRenderingContext,\r\n public mode: BrowserRenderingMode) {\r\n super(context, mode);\r\n\r\n // No need to ubsubsribe, canvas never leaves JS world, it should be GC'ed with all callbacks.\r\n ResizeHandler.observeSize(canvas, (width, height, dpr) => {\r\n this.sizeParams = [width, height, dpr];\r\n\r\n if (this.sizeChangedCallback) {\r\n this.sizeChangedCallback(width, height, dpr);\r\n }\r\n });\r\n }\r\n\r\n public destroy(): void {\r\n delete this.sizeChangedCallback;\r\n }\r\n\r\n public onSizeChanged(sizeChangedCallback: (width: number, height: number, dpr: number) => void) {\r\n if (this.sizeChangedCallback) { throw new Error(\"For simplicity, we don't support multiple size changed callbacks per surface, not needed yet.\"); }\r\n this.sizeChangedCallback = sizeChangedCallback;\r\n }\r\n\r\n public ensureSize() {\r\n if (this.sizeParams) {\r\n this.canvas.width = this.sizeParams[0];\r\n this.canvas.height = this.sizeParams[1];\r\n delete this.sizeParams;\r\n }\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./surfaceBase\";\r\nimport { HtmlCanvasSurfaceBase } from \"./htmlSurfaceBase\";\r\nimport { RuntimeAPI } from \"../../../types/dotnet\";\r\nimport { isSharedArrayBuffer } from \"../stream\";\r\n\r\nexport class SoftwareSurface extends HtmlCanvasSurfaceBase {\r\n private readonly runtime: RuntimeAPI | undefined;\r\n\r\n constructor(public canvas: HTMLCanvasElement) {\r\n const context = canvas.getContext(\"2d\", {\r\n alpha: true\r\n });\r\n if (!context) {\r\n throw new Error(\"HTMLCanvasElement.getContext(2d) returned null.\");\r\n }\r\n super(canvas, context, BrowserRenderingMode.Software2D);\r\n\r\n this.runtime = globalThis.getDotnetRuntime(0);\r\n }\r\n\r\n public putPixelData(span: any /* IMemoryView */, width: number, height: number): void {\r\n this.ensureSize();\r\n\r\n const heap8 = this.runtime?.localHeapViewU8();\r\n\r\n let clampedBuffer: Uint8ClampedArray;\r\n if (span._pointer > 0 && span._length > 0 && heap8 && !isSharedArrayBuffer(heap8.buffer)) {\r\n // Attempt to use undocumented access to the HEAP8 directly\r\n // Note, SharedArrayBuffer cannot be used with ImageData (when WasmEnableThreads = true).\r\n clampedBuffer = new Uint8ClampedArray(heap8.buffer, span._pointer, span._length);\r\n } else {\r\n // Or fallback to the normal API that does multiple array copies.\r\n const copy = new Uint8Array(span.byteLength);\r\n span.copyTo(copy);\r\n clampedBuffer = new Uint8ClampedArray(copy.buffer);\r\n }\r\n\r\n const imageData = new ImageData(clampedBuffer, width, height);\r\n (this.context as CanvasRenderingContext2D).putImageData(imageData, 0, 0);\r\n }\r\n}\r\n", "import { BrowserRenderingMode } from \"./surfaceBase\";\r\nimport { HtmlCanvasSurfaceBase } from \"./htmlSurfaceBase\";\r\n\r\nfunction getGL(): any {\r\n const self = globalThis as any;\r\n const module = self.Module ?? self.getDotnetRuntime(0)?.Module;\r\n return module?.GL ?? self.AvaloniaGL ?? self.SkiaSharpGL;\r\n}\r\n\r\nexport class WebGlSurface extends HtmlCanvasSurfaceBase {\r\n public contextHandle?: number;\r\n public fboId?: number;\r\n public stencil?: number;\r\n public sample?: number;\r\n public depth?: number;\r\n\r\n constructor(public canvas: HTMLCanvasElement, mode: BrowserRenderingMode.WebGL1 | BrowserRenderingMode.WebGL2) {\r\n // Skia only understands WebGL context wrapped in Emscripten.\r\n const gl = getGL();\r\n if (!gl) {\r\n throw new Error(\"Module.GL object wasn't initialized, WebGL can't be used.\");\r\n }\r\n\r\n const modeStr = mode === BrowserRenderingMode.WebGL1 ? \"webgl\" : \"webgl2\";\r\n const attrs: WebGLContextAttributes | any =\r\n {\r\n alpha: true,\r\n depth: true,\r\n stencil: true,\r\n antialias: false,\r\n premultipliedAlpha: true,\r\n preserveDrawingBuffer: false,\r\n // only supported on older browsers, which is perfect as we want to fallback to 2d there.\r\n failIfMajorPerformanceCaveat: true,\r\n // attrs used by Emscripten:\r\n majorVersion: mode === BrowserRenderingMode.WebGL1 ? 1 : 2,\r\n minorVersion: 0,\r\n enableExtensionsByDefault: 1,\r\n explicitSwapControl: 0\r\n };\r\n const context = canvas.getContext(modeStr, attrs) as WebGLRenderingContext;\r\n if (!context) {\r\n throw new Error(`HTMLCanvasElement.getContext(${modeStr}) returned null.`);\r\n }\r\n\r\n const handle = gl.registerContext(context, attrs);\r\n gl.makeContextCurrent(handle);\r\n (context as any).gl_handle = handle;\r\n\r\n super(canvas, context, BrowserRenderingMode.Software2D);\r\n\r\n this.contextHandle = handle;\r\n this.fboId = context.getParameter(context.FRAMEBUFFER_BINDING)?.id ?? 0;\r\n this.stencil = context.getParameter(context.STENCIL_BITS);\r\n this.sample = context.getParameter(context.SAMPLES);\r\n this.depth = context.getParameter(context.DEPTH_BITS);\r\n }\r\n}\r\n", "import { AvaloniaDOM } from \"../dom\";\r\nimport { SoftwareSurface } from \"./softwareSurface\";\r\nimport { BrowserRenderingMode, CanvasSurface } from \"./surfaceBase\";\r\nimport { WebGlSurface } from \"./webGlSurface\";\r\n\r\nexport class CanvasFactory {\r\n public static create(container: HTMLElement, mode: BrowserRenderingMode): CanvasSurface {\r\n if (!container) {\r\n throw new Error(\"No html container was provided.\");\r\n }\r\n\r\n const canvas = AvaloniaDOM.createAvaloniaCanvas(container);\r\n AvaloniaDOM.attachCanvas(container, canvas);\r\n\r\n try {\r\n if (mode === BrowserRenderingMode.Software2D) {\r\n return new SoftwareSurface(canvas);\r\n } else if (mode === BrowserRenderingMode.WebGL1 || mode === BrowserRenderingMode.WebGL2) {\r\n return new WebGlSurface(canvas, mode);\r\n } else {\r\n throw new Error(`Unsupported rendering mode: ${BrowserRenderingMode[mode]}`);\r\n }\r\n } catch (ex) {\r\n AvaloniaDOM.detachCanvas(container, canvas);\r\n throw ex;\r\n }\r\n }\r\n\r\n public static destroy(surface: CanvasSurface) {\r\n surface.destroy();\r\n }\r\n\r\n public static onSizeChanged(surface: CanvasSurface, sizeChangedCallback: (width: number, height: number, dpr: number) => void) {\r\n surface.onSizeChanged(sizeChangedCallback);\r\n }\r\n\r\n public static ensureSize(surface: CanvasSurface): void {\r\n surface.ensureSize();\r\n }\r\n\r\n public static putPixelData(surface: SoftwareSurface, span: any /* IMemoryView */, width: number, height: number): void {\r\n surface.putPixelData(span, width, height);\r\n }\r\n}\r\n", "import { InputHelper } from \"./avalonia/input\";\r\nimport { AvaloniaDOM } from \"./avalonia/dom\";\r\nimport { Caniuse } from \"./avalonia/caniuse\";\r\nimport { StreamHelper } from \"./avalonia/stream\";\r\nimport { NativeControlHost } from \"./avalonia/nativeControlHost\";\r\nimport { NavigationHelper } from \"./avalonia/navigationHelper\";\r\nimport { GeneralHelpers } from \"./avalonia/generalHelpers\";\r\nimport { TimerHelper } from \"./avalonia/timer\";\r\nimport { CanvasFactory } from \"./avalonia/surfaces/surfaceFactory\";\r\n\r\nasync function registerServiceWorker(path: string, scope: string | undefined) {\r\n if (\"serviceWorker\" in navigator) {\r\n await globalThis.navigator.serviceWorker.register(path, scope ? { scope } : undefined);\r\n }\r\n}\r\n\r\nexport {\r\n Caniuse,\r\n CanvasFactory,\r\n InputHelper,\r\n AvaloniaDOM,\r\n StreamHelper,\r\n NativeControlHost,\r\n NavigationHelper,\r\n GeneralHelpers,\r\n TimerHelper,\r\n registerServiceWorker\r\n};\r\n"],
+ "mappings": "AACO,IAAMA,EAAN,KAAkB,CACrB,OAAc,oBACVC,EACAC,EACAC,EACF,CANN,IAAAC,EAAAC,EAOQ,GAAI,CAACC,EACD,MAAM,IAAI,MACN,gFACJ,EAGJ,IAAMC,GAAQH,EAAAD,GAAA,YAAAA,EAAS,QAAT,KAAAC,EAAkB,GAChC,GAAIG,EAAO,CACP,IAAMC,EAAK,SAAS,cAChB,2CACJ,EACIA,KAAIH,EAAAG,EAAG,aAAH,MAAAH,EAAe,YAAYG,GACvC,CAGA,IAAMC,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,GAAK,2CACT,SAAS,KAAK,YAAYA,CAAG,EAE7B,IAAMC,EAAQD,EAAI,MACZE,EAAW,OAAO,iBAClB,OAAO,iBAAiBV,CAAO,EAC7BA,EAAgB,aAClBW,EAAUX,EAAQ,WAAa,QAGrCS,EAAM,WAAa,WACdE,IAASF,EAAM,SAAW,cAG/BA,EAAM,SAAW,WACZH,IAAOG,EAAM,WAAa,UAG/BG,EAAW,QAASC,GAAiB,CACjC,GAAIF,GAAWE,IAAS,aAEpB,GAAIH,EAAS,YAAc,aAAc,CACrC,IAAMI,EAAS,SAASJ,EAAS,MAAM,EACjCK,EACF,SAASL,EAAS,UAAU,EAC5B,SAASA,EAAS,aAAa,EAC/B,SAASA,EAAS,cAAc,EAChC,SAASA,EAAS,iBAAiB,EACjCM,EAAeD,EAAc,SAASL,EAAS,UAAU,EAC3DI,EAASE,EACTP,EAAM,WAAa,GAAGK,EAASC,MACxBD,IAAWE,EAClBP,EAAM,WAAaC,EAAS,WAE5BD,EAAM,WAAa,GAE3B,MACIA,EAAM,WAAaC,EAAS,YAG/BD,EAAcI,GAASH,EAAiBG,EAEjD,CAAC,EAEGI,EAEIjB,EAAQ,aAAe,SAASU,EAAS,MAAM,IAC/CD,EAAM,UAAY,UAGtBA,EAAM,SAAW,SAGrBD,EAAI,YAAcR,EAAQ,MAAM,UAAU,EAAGC,CAAQ,EAGjDU,IAASH,EAAI,YAAcA,EAAI,YAAY,QAAQ,MAAO,MAAQ,GAEtE,IAAMU,EAAO,SAAS,cAAc,MAAM,EAM1CA,EAAK,YAAclB,EAAQ,MAAM,UAAUC,CAAQ,GAAK,IACxDO,EAAI,YAAYU,CAAI,EAEpB,IAAMC,EAAc,CAChB,IAAKD,EAAK,UAAY,SAASR,EAAS,cAAc,EACtD,KAAMQ,EAAK,WAAa,SAASR,EAAS,eAAe,EACzD,OAAQ,SAASA,EAAS,UAAU,CACxC,EAEA,OAAIJ,EACAY,EAAK,MAAM,gBAAkB,OAE7B,SAAS,KAAK,YAAYV,CAAG,EAG1BW,CACX,CACJ,EAEMP,EAAa,CACf,YACA,YACA,QACA,SACA,YACA,YAEA,iBACA,mBACA,oBACA,kBACA,cAEA,aACA,eACA,gBACA,cAGA,YACA,cACA,aACA,cACA,WACA,iBACA,aACA,aAEA,YACA,gBACA,aACA,iBAEA,gBACA,cAEA,UACA,YACJ,EAEMP,EAAY,OAAO,QAAW,YAC9BY,EAAYZ,GAAc,OAAe,iBAAmB,KC9G3D,IAAMe,EAAN,KAAkB,CAKrB,OAAc,8BAA+B,CACrC,KAAK,iBAAmB,IAI5B,WAAW,iBAAiB,QAAUC,GAAc,CAC5C,KAAK,iBAAmB,GACxB,KAAK,iBAAiBA,EAAK,cAAc,QAAQ,MAAM,CAAC,CAEhE,CAAC,EACD,KAAK,eAAiB,EAC1B,CAEA,aAAoB,mBAAqC,CACrD,GAAI,WAAW,UAAU,UAAU,SAC/B,OAAO,MAAM,WAAW,UAAU,UAAU,SAAS,EAErD,GAAI,CACA,OAAO,MAAM,IAAI,QAAa,CAACC,EAASC,IAAW,CAC/C,KAAK,eAAiB,EACtB,KAAK,iBAAmBD,EACxB,KAAK,gBAAkBC,CAC3B,CAAC,CACL,QAAE,CACE,KAAK,eAAiB,EACtB,KAAK,iBAAmB,KACxB,KAAK,gBAAkB,IAC3B,CAER,CAEA,OAAc,mBACVC,EACAC,EACAC,EAA0E,CAC1E,IAAMC,EAAkBN,GAAwB,CACxCI,EAAgBJ,EAAK,KAAMA,EAAK,IAAK,KAAK,aAAaA,CAAI,CAAC,GACxD,KAAK,iBAAmB,GACxBA,EAAK,eAAe,CAGhC,EACAG,EAAQ,iBAAiB,UAAWG,CAAc,EAElD,IAAMC,EAAgBP,GAAwB,CACtCK,EAAcL,EAAK,KAAMA,EAAK,IAAK,KAAK,aAAaA,CAAI,CAAC,GAC1DA,EAAK,eAAe,EAEpB,KAAK,iBACL,KAAK,gBAAgB,CAE7B,EAEA,OAAAG,EAAQ,iBAAiB,QAASI,CAAY,EAEvC,IAAM,CACTJ,EAAQ,oBAAoB,UAAWG,CAAc,EACrDH,EAAQ,oBAAoB,QAASI,CAAY,CACrD,CACJ,CAEA,OAAc,oBACVJ,EACAK,EACAC,EACAC,EACAC,EAA6D,CAC7D,IAAMC,EAA2BZ,GAA2B,CACpDS,EAAyBT,CAAI,GAC7BA,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,mBAAoBS,CAAuB,EAEpE,IAAMC,EAAsBb,GAAqB,CAC7C,IAAMc,EAASd,EAAK,gBAAgB,EAChCe,EAAQ,GACRC,EAAM,GACNF,EAAO,OAAS,IAChBC,EAAQD,EAAO,GAAG,YAClBE,EAAMF,EAAO,GAAG,WAGhBd,EAAK,YAAc,0BACnBe,EAAQ,EACRC,EAAMD,EAAQ,GAEdP,EAAoBR,EAAMe,EAAOC,CAAG,GACpChB,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,cAAeU,CAAkB,EAE1D,IAAMI,EAA4BjB,GAA2B,CACrDU,EAA0BV,CAAI,GAC9BA,EAAK,eAAe,CAE5B,EACAG,EAAQ,iBAAiB,oBAAqBc,CAAwB,EAEtE,IAAMC,EAAyBlB,GAA2B,CAClDW,EAAuBX,CAAI,GAC3BA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,iBAAkBe,CAAqB,EAEzD,IAAM,CACTf,EAAQ,oBAAoB,mBAAoBS,CAAuB,EACvET,EAAQ,oBAAoB,oBAAqBc,CAAwB,EACzEd,EAAQ,oBAAoB,iBAAkBe,CAAqB,CACvE,CACJ,CAEA,OAAc,uBACVf,EACAgB,EACAC,EACAC,EACAC,EACAC,EACF,CACE,IAAMC,EAAsBxB,GAAuB,CAC/CmB,EAAoBnB,CAAI,EACxBA,EAAK,eAAe,CACxB,EAEMyB,EAAsBzB,GAAuB,CAC/CoB,EAAoBpB,CAAI,EACxBA,EAAK,eAAe,CACxB,EAEM0B,EAAoB1B,GAAuB,CAC7CqB,EAAkBrB,CAAI,EACtBA,EAAK,eAAe,CACxB,EAEM2B,EAAwB3B,GAAuB,CACjDsB,EAAsBtB,CAAI,EAC1BA,EAAK,eAAe,CACxB,EAEM4B,EAAgB5B,GAAqB,CACvCuB,EAAcvB,CAAI,EAClBA,EAAK,eAAe,CACxB,EAEA,OAAAG,EAAQ,iBAAiB,cAAeqB,CAAkB,EAC1DrB,EAAQ,iBAAiB,cAAesB,CAAkB,EAC1DtB,EAAQ,iBAAiB,YAAauB,CAAgB,EACtDvB,EAAQ,iBAAiB,QAASyB,CAAY,EAC9CzB,EAAQ,iBAAiB,gBAAiBwB,CAAoB,EAEvD,IAAM,CACTxB,EAAQ,oBAAoB,cAAeqB,CAAkB,EAC7DrB,EAAQ,oBAAoB,cAAesB,CAAkB,EAC7DtB,EAAQ,oBAAoB,YAAauB,CAAgB,EACzDvB,EAAQ,oBAAoB,gBAAiBwB,CAAoB,EACjExB,EAAQ,oBAAoB,QAASyB,CAAY,CACrD,CACJ,CAEA,OAAc,qBACVzB,EACA0B,EACF,CACE,IAAMC,EAAgB9B,GAAgB,CAC9B6B,EAAe7B,EAAa,KAAK,GACjCA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,QAAS2B,CAAY,EAEvC,IAAM,CACT3B,EAAQ,oBAAoB,QAAS2B,CAAY,CACrD,CACJ,CAEA,OAAc,oBACV3B,EACA4B,EACF,CACE,IAAMC,EAAehC,GAAgB,CAC7B+B,EAAU/B,CAAW,GACrBA,EAAK,eAAe,CAE5B,EACA,OAAAG,EAAQ,iBAAiB,WAAY6B,CAAW,EAChD7B,EAAQ,iBAAiB,YAAa6B,CAAW,EACjD7B,EAAQ,iBAAiB,YAAa6B,CAAW,EACjD7B,EAAQ,iBAAiB,OAAQ6B,CAAW,EAErC,IAAM,CACT7B,EAAQ,oBAAoB,WAAY6B,CAAW,EACnD7B,EAAQ,oBAAoB,YAAa6B,CAAW,EACpD7B,EAAQ,oBAAoB,YAAa6B,CAAW,EACpD7B,EAAQ,oBAAoB,OAAQ6B,CAAW,CACnD,CACJ,CAEA,OAAc,mBAAmBC,EAA4C,CACzE,OAAOA,EAAa,mBAAmB,CAC3C,CAEA,OAAc,gCACV9B,EACA+B,EAAiC,CAC7B,oBAAqB,WAEpB,UAAkB,gBAAgB,iBAAiB,iBAAmBC,GAAe,CAClF,IAAMC,EAAcjC,EAAQ,sBAAsB,EAC5CkC,EAAeF,EAAM,OAAO,aAClCD,EAAQ,CACJ,EAAGG,EAAa,EAAID,EAAY,EAChC,EAAGC,EAAa,EAAID,EAAY,EAChC,MAAOC,EAAa,MACpB,OAAQA,EAAa,MACzB,CAAC,CACL,CAAC,CAET,CAEA,OAAc,0BACVH,EAA4C,CAC5C,gBAAS,iBAAiB,mBAAoB,IAAM,CAChDA,EAAQ,SAAS,kBAAoB,SAAS,CAClD,CAAC,EACM,SAAS,kBAAoB,SACxC,CAEA,OAAc,WAAWI,EAAgC,CACrDA,EAAa,MAAQ,EACzB,CAEA,OAAc,aAAaA,EAA2B,CAClDA,EAAa,MAAM,CACvB,CAEA,OAAc,UAAUA,EAAgCC,EAAc,CAC9DA,IAAS,UACTD,EAAa,MAAM,eAAe,QAAQ,EAE1CA,EAAa,MAAM,OAASC,CAEpC,CAEA,OAAc,UAAUD,EAAgCE,EAAWC,EAAWC,EAAoBC,EAAqBC,EAAe,CAClIN,EAAa,MAAM,KAAQE,EAAG,QAAQ,CAAC,EAAI,KAC3CF,EAAa,MAAM,IAAOG,EAAG,QAAQ,CAAC,EAAI,KAE1C,GAAM,CAAE,KAAAI,EAAM,IAAAC,CAAI,EAAIC,EAAY,oBAAoBT,EAAcM,CAAK,EAEzEN,EAAa,MAAM,MAAQE,EAAIK,GAAM,QAAQ,CAAC,EAAI,KAClDP,EAAa,MAAM,KAAOG,EAAIK,GAAK,QAAQ,CAAC,EAAI,IACpD,CAEA,OAAc,KAAKR,EAAgC,CAC/CA,EAAa,MAAM,QAAU,MACjC,CAEA,OAAc,KAAKA,EAAgC,CAC/CA,EAAa,MAAM,QAAU,OACjC,CAEA,OAAc,mBAAmBA,EAAgCU,EAAcjC,EAAeC,EAAa,CACnG,CAACsB,IAILA,EAAa,MAAQU,EACrBV,EAAa,kBAAkBvB,EAAOC,CAAG,EACzCsB,EAAa,MAAM,MAAQ,OAC3BA,EAAa,MAAM,MAAQ,GAAGA,EAAa,gBAC/C,CAEA,OAAe,aAAatC,EAA6B,CACrD,IAAIiD,EAAY,EAEhB,OAAIjD,EAAK,UAAWiD,GAAa,GAC7BjD,EAAK,SAAUiD,GAAa,GAC5BjD,EAAK,WAAYiD,GAAa,GAC9BjD,EAAK,UAAWiD,GAAa,GAE1BA,EAAU,SAAS,CAC9B,CAEA,OAAc,kBAAkBC,EAAoCC,EAAyB,CACzFD,EAAiB,kBAAkBC,CAAS,CAChD,CAEA,OAAc,sBAAsBD,EAAoCC,EAAyB,CACzFD,EAAiB,kBAAkBC,CAAS,GAC5CD,EAAiB,sBAAsBC,CAAS,CAExD,CACJ,EA5SapD,EACF,eAAiC,ECtCrC,IAAMqD,EAAN,KAAkB,CACrB,OAAc,SAASC,EAAsBC,EAAyB,CAClED,EAAQ,UAAU,IAAIC,CAAS,CACnC,CAEA,OAAO,gBAAgBC,EAAqE,CACxF,GAAI,WAAW,aAAe,OAC1B,MAAO,GAGX,IAAMC,EAAkB,WAAW,WAAW,8BAA8B,EACtEC,EAAuB,WAAW,WAAW,0BAA0B,EAE7E,OAAAD,EAAgB,iBAAiB,SAAWE,GAA8B,CACtEH,EAASG,EAAK,QAASD,EAAqB,OAAO,CACvD,CAAC,EACDA,EAAqB,iBAAiB,SAAWC,GAA8B,CAC3EH,EAASC,EAAgB,QAASE,EAAK,OAAO,CAClD,CAAC,EAEM,CACH,WAAYF,EAAgB,QAC5B,eAAgBC,EAAqB,OACzC,CACJ,CAEA,OAAO,2BAA2BH,EAAmBK,EAAsC,CACvF,IAAMC,GAAYD,GAAA,KAAAA,EAAU,WAAW,UAAU,uBAAuBL,CAAS,EACjF,OAAOM,EAAWA,EAAS,GAAK,IACpC,CAEA,OAAO,qBAAqBC,EAAsC,CAhCtE,IAAAC,EAiCQ,IAAMC,GAAcD,EAAAD,EAAK,aAAa,kBAAkB,IAApC,KAAAC,EAAyC,OAEvDE,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAAA,EAAO,GAAK,SAASD,IACrBC,EAAO,UAAU,IAAI,iBAAiB,EACtCA,EAAO,MAAM,MAAQ,OACrBA,EAAO,MAAM,OAAS,OACtBA,EAAO,MAAM,SAAW,WAEjBA,CACX,CAEA,OAAO,aAAaH,EAAmBG,EAAiC,CACpEH,EAAK,QAAQG,CAAM,CACvB,CAEA,OAAO,aAAaH,EAAmBG,EAAiC,CACpEH,EAAK,YAAYG,CAAM,CAC3B,CAEA,OAAO,mBAAmBH,EAAmB,CACzC,IAAME,EAAc,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,QAAQ,WAAY,EAAE,EAAE,OAAO,EAAG,EAAE,EAGnFF,EAAK,UAAU,IAAI,oBAAoB,EACvCA,EAAK,SAAW,EAChBA,EAAK,aAAa,mBAAoBE,CAAW,EACjDF,EAAK,cAAgB,UAAY,CAAE,MAAO,EAAO,EACjDA,EAAK,MAAM,SAAW,SACtBA,EAAK,MAAM,YAAc,OAKzB,IAAMI,EAAa,SAAS,cAAc,KAAK,EAC/CA,EAAW,GAAK,aAAaF,IAC7BE,EAAW,UAAU,IAAI,sBAAsB,EAC/CA,EAAW,MAAM,KAAO,MACxBA,EAAW,MAAM,IAAM,MACvBA,EAAW,MAAM,MAAQ,OACzBA,EAAW,MAAM,OAAS,OAC1BA,EAAW,MAAM,SAAW,WAG5B,IAAMC,EAAe,SAAS,cAAc,OAAO,EACnD,OAAAA,EAAa,GAAK,eAAeH,IACjCG,EAAa,UAAU,IAAI,wBAAwB,EACnDA,EAAa,eAAiB,OAC9BA,EAAa,KAAO,OACpBA,EAAa,WAAa,GAC1BA,EAAa,MAAM,QAAU,IAC7BA,EAAa,MAAM,OAAS,IAC5BA,EAAa,MAAM,YAAc,IACjCA,EAAa,MAAM,SAAW,WAC9BA,EAAa,MAAM,SAAW,SAC9BA,EAAa,MAAM,YAAc,SACjCA,EAAa,MAAM,QAAU,OAC7BA,EAAa,MAAM,WAAa,cAChCA,EAAa,MAAM,MAAQ,cAC3BA,EAAa,MAAM,QAAU,OAC7BA,EAAa,MAAM,OAAS,OAC5BA,EAAa,MAAM,OAAS,KAC5BA,EAAa,QAAU,UAAY,CAAE,MAAO,EAAO,EACnDA,EAAa,OAAS,UAAY,CAAE,MAAO,EAAO,EAClDA,EAAa,MAAQ,UAAY,CAAE,MAAO,EAAO,EAEjDL,EAAK,QAAQK,CAAY,EACzBL,EAAK,QAAQI,CAAU,EAEhB,CACH,KAAAJ,EACA,WAAAI,EACA,aAAAC,CACJ,CACJ,CAEA,OAAc,cAAwB,CAClC,OAAO,SAAS,mBAAqB,IACzC,CAEA,aAAoB,cAAcC,EAAuB,CACjDA,EAEA,MADY,SAAS,gBACX,kBAAkB,EAE5B,MAAM,SAAS,eAAe,CAEtC,CAEA,OAAc,qBAA4B,CACtC,SAAS,gBAAgB,MAAM,YAAY,WAAY,0BAA0B,EACjF,SAAS,gBAAgB,MAAM,YAAY,WAAY,4BAA4B,EACnF,SAAS,gBAAgB,MAAM,YAAY,WAAY,6BAA6B,EACpF,SAAS,gBAAgB,MAAM,YAAY,WAAY,2BAA2B,CACtF,CAEA,OAAc,oBAA+B,CACzC,IAAMC,EAAM,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EACxFC,EAAS,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EAC3FC,EAAO,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EACzFC,EAAQ,WAAW,iBAAiB,SAAS,eAAe,EAAE,iBAAiB,UAAU,CAAC,EAEhG,MAAO,CAACD,EAAMF,EAAKC,EAAQE,CAAK,CACpC,CACJ,ECzIO,IAAMC,EAAN,KAAc,CACjB,OAAc,qBAA+B,CACzC,MAAO,uBAAwB,UACnC,CAEA,OAAc,UAAoB,CALtC,IAAAC,EAMQ,IAAMC,GAAiBD,EAAA,WAAW,YAAX,YAAAA,EAA8B,cACrD,GAAIC,EACA,OAAOA,EAAc,OAGzB,IAAMC,EAAY,UAAU,UACtBC,EAAS,2TACTC,EAAS,8+CACf,OAAOD,EAAO,KAAKD,CAAS,GAAKE,EAAO,KAAKF,EAAU,OAAO,EAAG,CAAC,CAAC,CACvE,CAEA,OAAc,MAAgB,CAC1B,OAAO,UAAU,UAAU,SAAS,SAAS,CACjD,CACJ,EClBA,IAAMG,EAA2B,OAAO,mBAAsB,YACvD,SAASC,EAAoBC,EAA0C,CAI1E,OAAOF,GAA4BE,EAAO,OAAO,eAAiB,mBACtE,CAEO,IAAMC,EAAN,KAAmB,CACtB,aAAoB,KAAKC,EAAsCC,EAAkB,CAC7E,OAAO,MAAMD,EAAO,KAAKC,CAAQ,CACrC,CAEA,aAAoB,SAASD,EAAsCE,EAAc,CAC7E,OAAO,MAAMF,EAAO,SAASE,CAAI,CACrC,CAEA,aAAoB,MAAMF,EAAsC,CAC5D,OAAO,MAAMA,EAAO,MAAM,CAC9B,CAEA,aAAoB,MAAMA,EAAsCG,EAAWC,EAAgBC,EAAe,CAvB9G,IAAAC,EAwBQ,IAAMC,GAAQD,EAAA,WAAW,iBAAiB,CAAC,IAA7B,YAAAA,EAAgC,kBAE1CR,EACJ,GAAIK,EAAK,SAAW,GAAKA,EAAK,QAAU,GAAKI,GAAS,CAACV,EAAoBU,EAAM,MAAM,EAGnFT,EAAS,IAAI,WAAWS,EAAM,OAAQJ,EAAK,SAAqBC,EAAQC,CAAK,MAC1E,CAEH,IAAMG,EAAO,IAAI,WAAWH,CAAK,EACjCF,EAAK,OAAOK,EAAMJ,CAAM,EACxBN,EAASK,CACb,CAEA,OAAO,MAAMH,EAAO,MAAMF,CAAM,CACpC,CAEA,OAAc,WAAWE,EAAc,CACnC,OAAOA,EAAO,IAClB,CAEA,aAAoB,iBAAiBA,EAAcI,EAAgBC,EAAe,CAC9E,IAAMP,EAAS,MAAME,EAAO,MAAMI,EAAQA,EAASC,CAAK,EAAE,YAAY,EACtE,OAAO,IAAI,WAAWP,CAAM,CAChC,CAEA,OAAc,aAAaA,EAAgC,CACvD,OAAOA,CACX,CACJ,ECrDA,IAAMW,EAAN,KAA0C,CAG1C,EAEaC,EAAN,KAAwB,CAC3B,OAAc,mBAAmBC,EAAmC,CAChE,OAAO,SAAS,cAAc,KAAK,CACvC,CAEA,OAAc,kBAAwD,CAClE,OAAO,IAAIF,CACf,CAEA,OAAc,0BAA0BG,EAA8CC,EAA0B,CAC5GD,EAAQ,OAASC,EACjBD,EAAQ,OAAO,MAAM,SAAW,UACpC,CAEA,OAAc,SAASA,EAA8CE,EAA0B,CACvFF,EAAQ,OAASA,EAAQ,QACzBA,EAAQ,MAAM,YAAYA,EAAQ,MAAM,EAG5CA,EAAQ,MAAQE,EAEZF,EAAQ,OAASA,EAAQ,QACzBA,EAAQ,MAAM,YAAYA,EAAQ,MAAM,CAEhD,CAEA,OAAc,aAAaA,EAA8CG,EAAWC,EAAWC,EAAeC,EAAsB,CAC5HN,EAAQ,SACRA,EAAQ,OAAO,MAAM,IAAM,GAAGI,MAC9BJ,EAAQ,OAAO,MAAM,KAAO,GAAGG,MAC/BH,EAAQ,OAAO,MAAM,MAAQ,GAAGK,MAChCL,EAAQ,OAAO,MAAM,OAAS,GAAGM,MACjCN,EAAQ,OAAO,MAAM,QAAU,QAEvC,CAEA,OAAc,aAAaA,EAA8CK,EAAeC,EAAsB,CACtGN,EAAQ,SACRA,EAAQ,OAAO,MAAM,MAAQ,GAAGK,MAChCL,EAAQ,OAAO,MAAM,OAAS,GAAGM,MACjCN,EAAQ,OAAO,MAAM,QAAU,OAEvC,CAEA,OAAc,aAAaA,EAAoD,CACvEA,EAAQ,SACRA,EAAQ,OAAS,OAEzB,CACJ,ECtDO,IAAMO,EAAN,KAAuB,CAC1B,OAAc,eAAeC,EAAoC,CAC7D,QAAQ,UAAU,KAAM,GAAI,OAAO,SAAS,IAAI,EAChD,OAAO,WAAa,IAAM,CACNA,EAAoB,EAKhC,QAAQ,QAAQ,EAFhB,QAAQ,KAAK,CAIrB,CACJ,CACJ,ECbO,IAAMC,EAAN,KAAqB,CACxB,OAAc,aAAaC,EAAeC,EAAiB,CACvD,IAAMC,EAAQF,EAASC,GACvB,GAAI,CAACC,EACD,MAAO,CAAC,EAGZ,IAAMC,EAAW,CAAC,EAClB,QAASC,EAAI,EAAGA,EAAIF,EAAM,OAAQE,IAC9BD,EAASC,GAAKF,EAAME,GAExB,OAAOD,CACX,CAEA,OAAc,OAAOH,EAAeC,EAAe,CAE/C,OADaD,EAASC,EAE1B,CAEA,OAAc,WAAWD,EAAeK,EAA+B,CACnE,IAAMC,EAAO,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,EACpD,OAAON,EAASK,GAAM,MAAML,EAAUM,CAAI,CAC9C,CACJ,ECvBO,IAAMC,EAAN,KAAkB,CACrB,OAAc,mBAAmBC,EAA2D,CACxF,SAASC,EAAOC,EAAc,CACbF,EAAoBE,CAAI,GAEjC,OAAO,sBAAsBD,CAAM,CAE3C,CAEA,OAAO,sBAAsBA,CAAM,CACvC,CACJ,ECTO,IAAKE,OACRA,IAAA,WAAa,GAAb,aACAA,IAAA,mBACAA,IAAA,mBAHQA,OAAA,IAMUC,EAAf,KAA6B,CAChC,YACWC,EACAC,EAA4B,CAD5B,aAAAD,EACA,UAAAC,CACX,CAKJ,ECbO,IAAMC,EAAN,KAAoB,CAGvB,OAAc,YAAYC,EAAsBC,EAA+E,CAC3H,OAAK,KAAK,iBACN,KAAK,eAAiB,IAAI,eAAe,KAAK,QAAQ,EACtD,KAAK,eAAe,UAAY,IAAI,KAGxC,KAAK,eAAe,UAAU,IAAID,EAASC,CAAQ,EACnD,KAAK,eAAe,QAAQD,EAAS,CAAE,IAAK,aAAc,CAAC,EAEpD,IAAM,CAhBrB,IAAAE,EAAAC,GAiBYD,EAAA,KAAK,iBAAL,MAAAA,EAAqB,UAAU,OAAOF,IACtCG,EAAA,KAAK,iBAAL,MAAAA,EAAqB,UAAUH,EACnC,CACJ,CAEA,OAAe,SAASI,EAAgCC,EAA0B,CAC9E,QAAWC,KAASF,EAAS,CACzB,IAAMH,EAAYI,EAAyC,UAAU,IAAIC,EAAM,MAAM,EACrF,GAAI,CAACL,EACD,SAGJ,IAAMM,EAAU,OAAO,iBACnBC,EACAC,EACAC,EAAMH,EACND,EAAM,2BAINE,EAAQF,EAAM,0BAA0B,GAAG,WAC3CG,EAASH,EAAM,0BAA0B,GAAG,UAC5CI,EAAM,GACCJ,EAAM,eACTA,EAAM,eAAe,IACrBE,EAAQF,EAAM,eAAe,GAAG,WAChCG,EAASH,EAAM,eAAe,GAAG,YAEjCE,EAASF,EAAM,eAAuB,WACtCG,EAAUH,EAAM,eAAuB,YAG3CE,EAAQF,EAAM,YAAY,MAC1BG,EAASH,EAAM,YAAY,QAE/B,IAAMK,EAAe,KAAK,MAAMH,EAAQE,CAAG,EACrCE,EAAgB,KAAK,MAAMH,EAASC,CAAG,EAC7CT,EAASU,EAAcC,EAAeL,CAAO,CACjD,CACJ,CACJ,ECtDO,IAAeM,EAAf,cAA6CC,CAAc,CAI9D,YACWC,EACAC,EACAC,EAA4B,CACnC,MAAMD,EAASC,CAAI,EAHZ,YAAAF,EACA,aAAAC,EACA,UAAAC,EAIPC,EAAc,YAAYH,EAAQ,CAACI,EAAOC,EAAQC,IAAQ,CACtD,KAAK,WAAa,CAACF,EAAOC,EAAQC,CAAG,EAEjC,KAAK,qBACL,KAAK,oBAAoBF,EAAOC,EAAQC,CAAG,CAEnD,CAAC,CACL,CAEO,SAAgB,CACnB,OAAO,KAAK,mBAChB,CAEO,cAAcC,EAA2E,CAC5F,GAAI,KAAK,oBAAuB,MAAM,IAAI,MAAM,+FAA+F,EAC/I,KAAK,oBAAsBA,CAC/B,CAEO,YAAa,CACZ,KAAK,aACL,KAAK,OAAO,MAAQ,KAAK,WAAW,GACpC,KAAK,OAAO,OAAS,KAAK,WAAW,GACrC,OAAO,KAAK,WAEpB,CACJ,EClCO,IAAMC,EAAN,cAA8BC,CAAsB,CAGvD,YAAmBC,EAA2B,CAC1C,IAAMC,EAAUD,EAAO,WAAW,KAAM,CACpC,MAAO,EACX,CAAC,EACD,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,iDAAiD,EAErE,MAAMD,EAAQC,GAAwC,EAPvC,YAAAD,EASf,KAAK,QAAU,WAAW,iBAAiB,CAAC,CAChD,CAEO,aAAaE,EAA6BC,EAAeC,EAAsB,CApB1F,IAAAC,EAqBQ,KAAK,WAAW,EAEhB,IAAMC,GAAQD,EAAA,KAAK,UAAL,YAAAA,EAAc,kBAExBE,EACJ,GAAIL,EAAK,SAAW,GAAKA,EAAK,QAAU,GAAKI,GAAS,CAACE,EAAoBF,EAAM,MAAM,EAGnFC,EAAgB,IAAI,kBAAkBD,EAAM,OAAQJ,EAAK,SAAUA,EAAK,OAAO,MAC5E,CAEH,IAAMO,EAAO,IAAI,WAAWP,EAAK,UAAU,EAC3CA,EAAK,OAAOO,CAAI,EAChBF,EAAgB,IAAI,kBAAkBE,EAAK,MAAM,CACrD,CAEA,IAAMC,EAAY,IAAI,UAAUH,EAAeJ,EAAOC,CAAM,EAC3D,KAAK,QAAqC,aAAaM,EAAW,EAAG,CAAC,CAC3E,CACJ,ECrCA,SAASC,GAAa,CAHtB,IAAAC,EAAAC,EAAAC,EAAAC,EAII,IAAMC,EAAO,WACPC,GAASJ,EAAAG,EAAK,SAAL,KAAAH,GAAeD,EAAAI,EAAK,iBAAiB,CAAC,IAAvB,YAAAJ,EAA0B,OACxD,OAAOG,GAAAD,EAAAG,GAAA,YAAAA,EAAQ,KAAR,KAAAH,EAAcE,EAAK,aAAnB,KAAAD,EAAiCC,EAAK,WACjD,CAEO,IAAME,EAAN,cAA2BC,CAAsB,CAOpD,YAAmBC,EAA2BC,EAAiE,CAhBnH,IAAAT,EAAAC,EAkBQ,IAAMS,EAAKX,EAAM,EACjB,GAAI,CAACW,EACD,MAAM,IAAI,MAAM,2DAA2D,EAG/E,IAAMC,EAAUF,IAAS,EAA8B,QAAU,SAC3DG,EACN,CACI,MAAO,GACP,MAAO,GACP,QAAS,GACT,UAAW,GACX,mBAAoB,GACpB,sBAAuB,GAEvB,6BAA8B,GAE9B,aAAcH,IAAS,EAA8B,EAAI,EACzD,aAAc,EACd,0BAA2B,EAC3B,oBAAqB,CACzB,EACMI,EAAUL,EAAO,WAAWG,EAASC,CAAK,EAChD,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,gCAAgCF,mBAAyB,EAG7E,IAAMG,EAASJ,EAAG,gBAAgBG,EAASD,CAAK,EAChDF,EAAG,mBAAmBI,CAAM,EAC3BD,EAAgB,UAAYC,EAE7B,MAAMN,EAAQK,GAAwC,EAjCvC,YAAAL,EAmCf,KAAK,cAAgBM,EACrB,KAAK,OAAQb,GAAAD,EAAAa,EAAQ,aAAaA,EAAQ,mBAAmB,IAAhD,YAAAb,EAAmD,KAAnD,KAAAC,EAAyD,EACtE,KAAK,QAAUY,EAAQ,aAAaA,EAAQ,YAAY,EACxD,KAAK,OAASA,EAAQ,aAAaA,EAAQ,OAAO,EAClD,KAAK,MAAQA,EAAQ,aAAaA,EAAQ,UAAU,CACxD,CACJ,ECpDO,IAAME,EAAN,KAAoB,CACvB,OAAc,OAAOC,EAAwBC,EAA2C,CACpF,GAAI,CAACD,EACD,MAAM,IAAI,MAAM,iCAAiC,EAGrD,IAAME,EAASC,EAAY,qBAAqBH,CAAS,EACzDG,EAAY,aAAaH,EAAWE,CAAM,EAE1C,GAAI,CACA,GAAID,IAAS,EACT,OAAO,IAAIG,EAAgBF,CAAM,EAC9B,GAAID,IAAS,GAA+BA,IAAS,EACxD,OAAO,IAAII,EAAaH,EAAQD,CAAI,EAEpC,MAAM,IAAI,MAAM,+BAA+BK,EAAqBL,IAAO,CAEnF,OAASM,EAAP,CACE,MAAAJ,EAAY,aAAaH,EAAWE,CAAM,EACpCK,CACV,CACJ,CAEA,OAAc,QAAQC,EAAwB,CAC1CA,EAAQ,QAAQ,CACpB,CAEA,OAAc,cAAcA,EAAwBC,EAA2E,CAC3HD,EAAQ,cAAcC,CAAmB,CAC7C,CAEA,OAAc,WAAWD,EAA8B,CACnDA,EAAQ,WAAW,CACvB,CAEA,OAAc,aAAaA,EAA0BE,EAA6BC,EAAeC,EAAsB,CACnHJ,EAAQ,aAAaE,EAAMC,EAAOC,CAAM,CAC5C,CACJ,ECjCA,eAAeC,GAAsBC,EAAcC,EAA2B,CACtE,kBAAmB,WACnB,MAAM,WAAW,UAAU,cAAc,SAASD,EAAMC,EAAQ,CAAE,MAAAA,CAAM,EAAI,MAAS,CAE7F",
+ "names": ["CaretHelper", "element", "position", "options", "_a", "_b", "isBrowser", "debug", "el", "div", "style", "computed", "isInput", "properties", "prop", "height", "outerHeight", "targetHeight", "isFirefox", "span", "coordinates", "InputHelper", "args", "resolve", "reject", "element", "keyDownCallback", "keyUpCallback", "keyDownHandler", "keyUpHandler", "beforeInputCallback", "compositionStartCallback", "compositionUpdateCallback", "compositionEndCallback", "compositionStartHandler", "beforeInputHandler", "ranges", "start", "end", "compositionUpdateHandler", "compositionEndHandler", "pointerMoveCallback", "pointerDownCallback", "pointerUpCallback", "pointerCancelCallback", "wheelCallback", "pointerMoveHandler", "pointerDownHandler", "pointerUpHandler", "pointerCancelHandler", "wheelHandler", "inputCallback", "inputHandler", "dragEvent", "dragHandler", "pointerEvent", "handler", "event", "elementRect", "keyboardRect", "inputElement", "kind", "x", "y", "caretWidth", "caretHeight", "caret", "left", "top", "CaretHelper", "text", "modifiers", "containerElement", "pointerId", "AvaloniaDOM", "element", "className", "observer", "colorShemeMedia", "prefersContrastMedia", "args", "parent", "elements", "host", "_a", "containerId", "canvas", "nativeHost", "inputElement", "isFullscreen", "top", "bottom", "left", "right", "Caniuse", "_a", "userAgentData", "userAgent", "regex1", "regex2", "sharedArrayBufferDefined", "isSharedArrayBuffer", "buffer", "StreamHelper", "stream", "position", "size", "span", "offset", "count", "_a", "heap8", "copy", "NativeControlHostTopLevelAttachment", "NativeControlHost", "parent", "element", "child", "host", "x", "y", "width", "height", "NavigationHelper", "backHandlerCallback", "GeneralHelpers", "instance", "key", "items", "retItems", "i", "name", "args", "TimerHelper", "renderFrameCallback", "render", "time", "BrowserRenderingMode", "CanvasSurface", "context", "mode", "ResizeHandler", "element", "callback", "_a", "_b", "entries", "observer", "entry", "trueDpr", "width", "height", "dpr", "displayWidth", "displayHeight", "HtmlCanvasSurfaceBase", "CanvasSurface", "canvas", "context", "mode", "ResizeHandler", "width", "height", "dpr", "sizeChangedCallback", "SoftwareSurface", "HtmlCanvasSurfaceBase", "canvas", "context", "span", "width", "height", "_a", "heap8", "clampedBuffer", "isSharedArrayBuffer", "copy", "imageData", "getGL", "_a", "_b", "_c", "_d", "self", "module", "WebGlSurface", "HtmlCanvasSurfaceBase", "canvas", "mode", "gl", "modeStr", "attrs", "context", "handle", "CanvasFactory", "container", "mode", "canvas", "AvaloniaDOM", "SoftwareSurface", "WebGlSurface", "BrowserRenderingMode", "ex", "surface", "sizeChangedCallback", "span", "width", "height", "registerServiceWorker", "path", "scope"]
+}
diff --git a/_framework/blazor.boot.json b/_framework/blazor.boot.json
new file mode 100644
index 00000000..7631ec89
--- /dev/null
+++ b/_framework/blazor.boot.json
@@ -0,0 +1,245 @@
+{
+ "mainAssemblyName": "MimaSim.Browser.dll",
+ "resources": {
+ "hash": "sha256-EVkcsilp77Dl3ee1VHO3vWQxbszOy3SKCGYgoOMLxtI=",
+ "jsModuleNative": {
+ "dotnet.native.js": "sha256-GgAx8jKPFVNWJf0XoLg7lNKzJI1l69QNMPqtw1V92FU="
+ },
+ "jsModuleRuntime": {
+ "dotnet.runtime.js": "sha256-FjrgL9dY6dc2yUoXDWowSfachSgM8O29qUMWDQOJKRI="
+ },
+ "wasmNative": {
+ "dotnet.native.wasm": "sha256-LSjslJzRHZWTGh3oO679K9yFUjWeepxIgdFvz3nu8Ts="
+ },
+ "wasmSymbols": {
+ "dotnet.native.js.symbols": "sha256-l5blRegRrUUQZAZOVG+0Lzx7TAnttLKWuFZKFJjx7bA="
+ },
+ "icu": {
+ "icudt_CJK.dat": "sha256-SZLtQnRc0JkwqHab0VUVP7T3uBPSeYzxzDnpxPpUnHk=",
+ "icudt_EFIGS.dat": "sha256-8fItetYY8kQ0ww6oxwTLiT3oXlBwHKumbeP2pRF4yTc=",
+ "icudt_no_CJK.dat": "sha256-L7sV7NEYP37/Qr2FPCePo5cJqRgTXRwGHuwF5Q+0Nfs="
+ },
+ "assembly": {
+ "Avalonia.Base.wasm": "sha256-QOAIH/B/eQadDmC4HmODniTA17/WsViENwV58tyXUqg=",
+ "Avalonia.Controls.wasm": "sha256-7JE98WorNBFQG3KWktRick2XUVIKoZ3hQsP69gVgQFU=",
+ "Avalonia.DesignerSupport.wasm": "sha256-aoMtm/2utvqfadIGlmyF4rQqU6x3hf4RN1rsEuKAD0k=",
+ "Avalonia.Dialogs.wasm": "sha256-lil6jfeXPtaxHF5MZCgmhpboXoUV1mtU8hzVooLNTfo=",
+ "Avalonia.Markup.Xaml.wasm": "sha256-AgDEX4M7En9MLrPyEboVK1OJgoSozo6vydQTWSFINYs=",
+ "Avalonia.Markup.wasm": "sha256-52y08YA1myRgTrnB+pz+wuP5OAby+HZC1CxYLJjcYt4=",
+ "Avalonia.Metal.wasm": "sha256-HU35u59dLAchYF2o1rw+T/RFdFYys+KIl81PhtOZBgY=",
+ "Avalonia.MicroCom.wasm": "sha256-VMwtnw/nQwmgSOfnz1sOp5QtMV8YsUhPKxxh0draPq4=",
+ "Avalonia.OpenGL.wasm": "sha256-HB1tzHM+VaN+UyJf7JEdzbj0R//ifUqn11aRta1LT0Y=",
+ "Avalonia.Vulkan.wasm": "sha256-3kANu8yX6nkyib6BnCHtN6e6dUn1Z21YilODMdRjrVY=",
+ "Avalonia.wasm": "sha256-GjjIdj4kwFWUTYzCXADYChIu09ttzDqTBdkt7mgVxJk=",
+ "AvaloniaEdit.wasm": "sha256-0QvTv7fo+OyikjZFX4guy6FDsgN7hfFnLGmTZz4x2N4=",
+ "Avalonia.Browser.wasm": "sha256-jnU+75vA76mcFIbONTIKRCqtwOw4JSmKEiFpa7+ZiNQ=",
+ "Avalonia.Controls.ColorPicker.wasm": "sha256-mZkjkDbKTQdtIUCAVk462osp7fBh4gP56qCR3xbiAhM=",
+ "Avalonia.Controls.DataGrid.wasm": "sha256-oZjXW4NDZJZ1m1f2/BZIMGsWW84/nAjHYUbLOOXu69Q=",
+ "Avalonia.Diagnostics.wasm": "sha256-bAjpF4fXlJBF2CV+EF/zSHviVy5tlVx6X50Y1CFy2EE=",
+ "Avalonia.Fonts.Inter.wasm": "sha256-JNn39ty5SoPbK8yHMZABvjEJ1+x8Tz8+AwfV/cvflNU=",
+ "Avalonia.ReactiveUI.wasm": "sha256-MyAiNNsYV7NH8bgql07z3D5Kl7tAdc839sfE7Jgx04U=",
+ "Avalonia.Remote.Protocol.wasm": "sha256-mbai8iKSfP+e104NHdsNHwR6qsalea3RYRq7dc19/uw=",
+ "Avalonia.Skia.wasm": "sha256-tsZlZx4wU8TkPaYWVxd3SohMehqAJMT4KdamPncVFsw=",
+ "Avalonia.Themes.Fluent.wasm": "sha256-/l/dv0ZIw9/fB/cAV96n1HltIarYg9s5pEbZSXnJE2M=",
+ "Avalonia.Themes.Simple.wasm": "sha256-bi8xdIiDObqjYExJPKzQa9DaTy+UQ2Q0fFmd1OGOwnY=",
+ "Avalonia.Xaml.Interactions.wasm": "sha256-q1yQzR1FzwG1ua0QJaXXiE5dyULIq1LRdOKn9ORf+cY=",
+ "Avalonia.Xaml.Interactivity.wasm": "sha256-E11L598p5epmFRVQbJFPzGN/u+db2wWhZ+Ckqp7FA8s=",
+ "AvaloniaHex.wasm": "sha256-c7aW3hMBWHj8GhZL06Jyl+U6U9WCo0phLVJZ5iR17O0=",
+ "DynamicData.wasm": "sha256-HK/bv9+Y0YTsrvQOSHsJnQXj3Qr8ma+OnPlZhlcWMrA=",
+ "HarfBuzzSharp.wasm": "sha256-TDZqaOaLLxcNw8w7g/Dabsw0Tuzz4ZYB4EbHNiR9NqQ=",
+ "MicroCom.Runtime.wasm": "sha256-dI22KS20yc+ziyg4tSUpmSjG0ebPXDL5QTSZf+ehjwI=",
+ "Microsoft.JSInterop.wasm": "sha256-t9q43mL+SUSnDmA3kXTLQ42nvlXwYmnKxyqFFPYcifs=",
+ "Microsoft.JSInterop.WebAssembly.wasm": "sha256-AQCuGvuEaOGJIRllBm0t1I9jKw+kNMrILxGeDDgzgzY=",
+ "Newtonsoft.Json.wasm": "sha256-GlXMWKvDs45M2pACoR3Y4Qh8mcrOZGljqmvJY+6JZ5s=",
+ "ReactiveUI.wasm": "sha256-FD15kVoh5mtIdf6700NSj2jWVzuCg/RotRSU3wLuGIg=",
+ "Silverfly.wasm": "sha256-IWHzcY/JDJXie0aSqOPp8EWhWDPaRgale2es+L/5+E0=",
+ "SkiaSharp.wasm": "sha256-FuaZRL1BQxWKGMtmMq8twUVP906lz1iAN+r+CSxuA/k=",
+ "Splat.wasm": "sha256-VYXXOoyoCWNTMQcXbxgV4sTcCIWNDAvShTrTyRXegAw=",
+ "System.Reactive.wasm": "sha256-lurqzInE6vTnJTNO3+E8MzBx0+2iqgFpuY/9QtyOE44=",
+ "Microsoft.CSharp.wasm": "sha256-bqu74vg/La1Ub2pVw0G0r6S6XMaAgbrpFYRK6yHXlo4=",
+ "Microsoft.VisualBasic.Core.wasm": "sha256-tv/7FnHANUZX7lUT4coWbRvG2fJUgCrJiCcOYFEuNXY=",
+ "Microsoft.VisualBasic.wasm": "sha256-+4VR23SMpK5zqsm3bMlLEm2DjNdbh0VDZgUYc7aGlYk=",
+ "Microsoft.Win32.Primitives.wasm": "sha256-d0lkYbvvBvSnQPJNF/l2wJuZc2X9m1EJ8DHxBIVYssE=",
+ "Microsoft.Win32.Registry.wasm": "sha256-Rt2m9BagcLtQOdRPe1Z1wEdVDhpDiElJI56Wak3uTCM=",
+ "System.AppContext.wasm": "sha256-mFfP2Arj1JJ/G2KQfFEmu226MKfR7Wndcb1ZCKR9f8c=",
+ "System.Buffers.wasm": "sha256-aRoQjwNAVVC58TX4/3W94kK/oCkyEQEsecc6Lh+duwQ=",
+ "System.Collections.Concurrent.wasm": "sha256-v0zimDBCOAAsgWTnlL2YGVkqWmzICjSP37cT835Io1g=",
+ "System.Collections.Immutable.wasm": "sha256-fUXVnkbRcFA7i7/jeAN8DIvseu3v+zp3AZRT0pa4I+E=",
+ "System.Collections.NonGeneric.wasm": "sha256-mxhOztkWpbBfawOtzVq60UsrcArUVPlgaziX5gcurj8=",
+ "System.Collections.Specialized.wasm": "sha256-eEXevlY2VJELz9E68qj/vxgsFpkkr9Pnq+m5Nnsr3H4=",
+ "System.Collections.wasm": "sha256-hrg73LXOOiA372GxNmGeTPBDBbgunR9UpeVvL0l+SSc=",
+ "System.ComponentModel.Annotations.wasm": "sha256-rqauJecJPWB/NqTykDvDJHiAR0RZzFo5gpx/cK81G2E=",
+ "System.ComponentModel.DataAnnotations.wasm": "sha256-DKOymdZ3a09mhunTi+G5NzRbVsbYovQRXc87QhwS8S0=",
+ "System.ComponentModel.EventBasedAsync.wasm": "sha256-ofH96Bte99hH9Iqmu5ygv8LSwuQVPWHEwPMbVD5dzaI=",
+ "System.ComponentModel.Primitives.wasm": "sha256-9qWlf9eb/xG67Vqu4c+cVV14L3b6Q1piiPGm1VU0gsU=",
+ "System.ComponentModel.TypeConverter.wasm": "sha256-zcRFaEaTRwTaX5hmQYb81ZRpyRI3t31gngDfpAWBAds=",
+ "System.ComponentModel.wasm": "sha256-Lf6zJU3pHfC98kGJLRC4n1037BKTd6HH0yYAE5IHzCc=",
+ "System.Configuration.wasm": "sha256-pNswMgbtFy4q42zwkx8ZippZyqtWyE4ybzdQWeuai4Q=",
+ "System.Console.wasm": "sha256-LpRS+qUC3ZN1ZdF/i1fLOnOFCH2HPpOfw6tiAG8JkeU=",
+ "System.Core.wasm": "sha256-xCnOKNqbAEpVHv1a2qizVbOpPoGDO3/ZpAhClGXN/zM=",
+ "System.Data.Common.wasm": "sha256-MoXJq2iR8u8PymjEbp5EnP0QHPwQ2lGhxorczrDuk+g=",
+ "System.Data.DataSetExtensions.wasm": "sha256-tgZcUraSi3F3Mq6zygvgSK7BZK4OEM24MPFAZP2Sdlg=",
+ "System.Data.wasm": "sha256-sTRAV64AfsFFpfbCQQs1JUdy6NYdmIhtYaqi4hlnASc=",
+ "System.Diagnostics.Contracts.wasm": "sha256-57RrNSOwk6ToMnjAZq7zdcG19DNv4hbQo/KnnlOlRDk=",
+ "System.Diagnostics.Debug.wasm": "sha256-yu206E3/83EY5buueU1ckCHSHmCcFG0UiNn6rOoSK0o=",
+ "System.Diagnostics.DiagnosticSource.wasm": "sha256-bkN0UlB/z6B/V2LhL46P5KCvlfCP95a3IrW+xghTfBo=",
+ "System.Diagnostics.FileVersionInfo.wasm": "sha256-6za94/2mK6uL2Zgojl6dY0MG19wGGn9ldbwZ+k6+Mcg=",
+ "System.Diagnostics.Process.wasm": "sha256-tZSTvB1BTBnsdAEbAOJg7QYYGzfXBJvcmJjpypzoj2I=",
+ "System.Diagnostics.StackTrace.wasm": "sha256-ikWRQyJ5x5PnK6t26GO8x8ndhowgfUzsTqS6y9Iiwbw=",
+ "System.Diagnostics.TextWriterTraceListener.wasm": "sha256-WtVOtK6j/NW7AK29yt9hHuOXI9FE9C49xmgAZ9g+2fY=",
+ "System.Diagnostics.Tools.wasm": "sha256-1E2WNjvT0U7z1T2bUYW2VrGoSoiTNkuu3jatBWBaso4=",
+ "System.Diagnostics.TraceSource.wasm": "sha256-SYnrXp4+/GRBFmDnZbN+RYHeqftjqssYtqhCnEgPZDA=",
+ "System.Diagnostics.Tracing.wasm": "sha256-kaXA6RGUYSN8M+Tmm8K4VkVb5a2I9EXdyilRU+056GI=",
+ "System.Drawing.Primitives.wasm": "sha256-31xwZWWi+g7lzvwocyBm/L7w3YPgUcWInep4TSS/M9c=",
+ "System.Drawing.wasm": "sha256-MIyS+ekESdwuGERCi1gruuypyGaZfXhe8myGNi1jDlo=",
+ "System.Dynamic.Runtime.wasm": "sha256-qEiKfhY+6X2SBAWXoCkZBVJCAu6eaWavSJVA+2gfrfc=",
+ "System.Formats.Asn1.wasm": "sha256-QP1i6WWYeGL/3T+502u4z8kR1VnKTVhxBGdqOIJYcvU=",
+ "System.Formats.Tar.wasm": "sha256-s/fmZB3te+2iaU84ym0D58TAkTBERWbz0/typMI3PP8=",
+ "System.Globalization.Calendars.wasm": "sha256-PWzEOa+rQ2U/FtvoqBaOL78LoqQoZcbHFdwRmZuSrtA=",
+ "System.Globalization.Extensions.wasm": "sha256-wf0JhIIJDOME+/d+kwDkMBhbXc4BXA+fAigzoIh/60g=",
+ "System.Globalization.wasm": "sha256-4Sge6PJFkOCVchWxr8HoRt3KCILqIFZCWPz8ymPq2wc=",
+ "System.IO.Compression.Brotli.wasm": "sha256-WMpVtDfum1btdtxWy4IBzOaSUw3N8L6E3UX61h6v7nA=",
+ "System.IO.Compression.FileSystem.wasm": "sha256-3yMvrKXNUemYfaqxqJlzM5WS7ItmSu4YXXK0OEPRQwg=",
+ "System.IO.Compression.ZipFile.wasm": "sha256-euBudEJVhdnmNdX0Y7k90COpJgRgDE04wFLDcAhhKxQ=",
+ "System.IO.Compression.wasm": "sha256-2M/H1XOveVhgbZ7BFK0eRbFqIf0xsa6086ZySro2uBg=",
+ "System.IO.FileSystem.AccessControl.wasm": "sha256-GOZxXL/g8Svh+AiBeGW7A337+fsa/Lpz6dzvKmNfCYE=",
+ "System.IO.FileSystem.DriveInfo.wasm": "sha256-9Yd90DO4ctvR9A/DKrCJHU98JMkH+zZ73EhpXmoQ4sY=",
+ "System.IO.FileSystem.Primitives.wasm": "sha256-Da6FNP5PWptYFR0JJhGkyHUPxNKXnHOpAIjZo3LSgSQ=",
+ "System.IO.FileSystem.Watcher.wasm": "sha256-9libRXjoGyjRrkxuNHZPc4UAJYSfDuA6LDw/Erk8sJU=",
+ "System.IO.FileSystem.wasm": "sha256-AvC20IVTPC32SOvZ10s1YKrdx8jDPkJU2/dg4FP0yxk=",
+ "System.IO.IsolatedStorage.wasm": "sha256-rYq2sDMo0vQVY6WQhlzQ+f2Dgct2pCTd2fuUzS71wvk=",
+ "System.IO.MemoryMappedFiles.wasm": "sha256-MwV+gKlsN8zh1YGaCrpwhMhSwRykR1XN4PtrNVKi2Ao=",
+ "System.IO.Pipes.AccessControl.wasm": "sha256-sQ/qkrAR8fnIlKnOrZSxwVSjRPO6gZUY0H8VtbgQkvw=",
+ "System.IO.Pipes.wasm": "sha256-Xidt+dfM7PvvAitP41toZj3jKGGIFf3STiSWpStxgvw=",
+ "System.IO.UnmanagedMemoryStream.wasm": "sha256-xsKAopJA9mj65+EoT8rwR/EKBKyHtwJU0lT8Z24WgC0=",
+ "System.IO.wasm": "sha256-kkk+g1Od4JpxCIdn7Km0vUER6rrxtRdt5QgiGffrBEw=",
+ "System.Linq.Expressions.wasm": "sha256-PVQNNBPgctU6cszraPw2rcmPLGHf51QBCaYF+t1hutk=",
+ "System.Linq.Parallel.wasm": "sha256-dlHW643drSB6V8JSBrmz6vf8144n+sX2GUW6Eo4dWKo=",
+ "System.Linq.Queryable.wasm": "sha256-kJ5gLcP6tuIlzisKYrRdWMQ5WHOmUnABgpaMxYa5h9k=",
+ "System.Linq.wasm": "sha256-+Vs+SYsN4+R0wUVLIKcCjYu9plPw45qruB/xnq8afXs=",
+ "System.Memory.wasm": "sha256-yfYPObQX7u9bc1I8UWkhyhB0k5h561E7oM9BYaCNTxw=",
+ "System.Net.Http.Json.wasm": "sha256-SrDXA84O594bKa7DiCgzOHSqRx3wdJ3rqtsyuBEHKQg=",
+ "System.Net.Http.wasm": "sha256-R0usassMy9sM8Jy/9AQ/n4cK5ehGnf5gJTwGaoGYYLY=",
+ "System.Net.HttpListener.wasm": "sha256-dXFEIxcZsYXt2/WbffErP3yYpt4TZ6OCazHXH2Nxe9g=",
+ "System.Net.Mail.wasm": "sha256-3agGPCCx8mmvLqiDgRteXT1adLCYE4CPkEplgcpx+54=",
+ "System.Net.NameResolution.wasm": "sha256-kAsUzTHcVl3t4LZWWvaE0NgPTyYYERkyO7NnnU293p0=",
+ "System.Net.NetworkInformation.wasm": "sha256-jC+ubSb0Tqne41RlxNa8g7LpTUuTh8V5b1rOp7cj/00=",
+ "System.Net.Ping.wasm": "sha256-wzMAa+pJkIfhBnhsWFpEH7rvVqn4v+3iGY8U2/ZhRjc=",
+ "System.Net.Primitives.wasm": "sha256-xkJjScjdGgBuonrFlA2G8ZkvWCewWGGLu/eihIOjLDY=",
+ "System.Net.Quic.wasm": "sha256-wepiw6o9w6WUdz5hET11/7vxPK8VF+3i7flDVMWdmRw=",
+ "System.Net.Requests.wasm": "sha256-DA+VqlOoeSeSPeQHGVnV+MAT4LCXooAFe+Cbx5sQn8E=",
+ "System.Net.Security.wasm": "sha256-Q9qdofnTvI0HDQWw6kpRi+1luCTCAHbAq+Q8ojkz0ac=",
+ "System.Net.ServicePoint.wasm": "sha256-m6EUt7cmecqKDu2q+tPq5LjZuvnxsHIbhp6RV2wzNvs=",
+ "System.Net.Sockets.wasm": "sha256-OZ1o9ezT+KfyM5U/0lMGRwPCiEpA70ignemNpMs7kC0=",
+ "System.Net.WebClient.wasm": "sha256-AJyHvLJiDu95nsTu7M65O8PxbHxqS034/7R8SOdNDOU=",
+ "System.Net.WebHeaderCollection.wasm": "sha256-4B00lHvJG30Cn0DFYoOZQcFgcnlT2U3K74QoMhwMnms=",
+ "System.Net.WebProxy.wasm": "sha256-IijLALhqKQsAmDyjDmx0/IR7Dux4Eg/MVuvMjf8vFuw=",
+ "System.Net.WebSockets.Client.wasm": "sha256-xHTv+l4KceU0oHvjMGqBQCe0q6tglxT5AL/VbsZh0H8=",
+ "System.Net.WebSockets.wasm": "sha256-WMlP1NvHT6kmbOiXo+g3LC4JOOK33DKIz6j7AR3//T8=",
+ "System.Net.wasm": "sha256-Lvt5QEGlHh45k2Gljy0FG50WWGlLjIzkqOm57TLpqCE=",
+ "System.Numerics.Vectors.wasm": "sha256-BIPsRgT6+1GWje6N1nJoE++gGGyGby+nityW4m51eLo=",
+ "System.Numerics.wasm": "sha256-exLQZCxHDYBTmNKxqLyW+e4iSNF26qvLIWgHLoEwqa0=",
+ "System.ObjectModel.wasm": "sha256-RiJBw0xo6GqT9rOfGolHfeXEjJLqmtFpxY0Eia25FFk=",
+ "System.Private.DataContractSerialization.wasm": "sha256-xTUQtlc/Pmuw+wYl33hJ3F7Tl/HeVCN4jZgQJVuhvfw=",
+ "System.Private.Uri.wasm": "sha256-hkINiJfHoD4XAAJLFHMxiJjN6XYdS45e8U0dSK6kUw4=",
+ "System.Private.Xml.Linq.wasm": "sha256-JN1cZ4BgYhryq++EiKf2BYgEMFVeLEiETawR/nUYZ1M=",
+ "System.Private.Xml.wasm": "sha256-K/v2Yal7OdNCXG7qlKN+pGL8Xmb4Hot6OIwZczV8Q9o=",
+ "System.Reflection.DispatchProxy.wasm": "sha256-LjD7w2TkaTn1wAdIjTKbqjbt8sTtYdy5yYPf2J5ftlg=",
+ "System.Reflection.Emit.ILGeneration.wasm": "sha256-GUH+ThMDKcy7WOsKwrXGNhJrJ7ODnmJBxyn7ZQLq6lI=",
+ "System.Reflection.Emit.Lightweight.wasm": "sha256-lgOGyIikc6ad6ngJCVv22XP9CtUUWDcEa7682YKD3gE=",
+ "System.Reflection.Emit.wasm": "sha256-DV75vgz4Mu1GFbUOvTSw4+VI0EPBBkdqU41wjy0Ks1s=",
+ "System.Reflection.Extensions.wasm": "sha256-bNWMt1fJXx5bHh8Sk+o9rD3X67egvJWz7qeM/Lb1p+I=",
+ "System.Reflection.Metadata.wasm": "sha256-Pc2gRCgpLTqqi+Z/g9EhTwP+lmOg7bwWlQXZa2pjqPw=",
+ "System.Reflection.Primitives.wasm": "sha256-GJl/wo4Ld2XRHljKAqCultIjfyXCNvyZFnU87anpox4=",
+ "System.Reflection.TypeExtensions.wasm": "sha256-ytOl4TDqsvKZCOmdaY3PkUzZvlXLi+yPg0Xx5VO7bXI=",
+ "System.Reflection.wasm": "sha256-1ym7uXNHmxYbSKu/t47+OvNPDVQV45AD/X0TQBB/T9w=",
+ "System.Resources.Reader.wasm": "sha256-gmW0Vmm5hlAF7LEeACKozOS/k7VTED1+0gEtMJ6FFhk=",
+ "System.Resources.ResourceManager.wasm": "sha256-Xze3KFm3pNHjD8jjYqcHaIRAACMsK/DDIYSMq/HiB6k=",
+ "System.Resources.Writer.wasm": "sha256-7ZgeewBBNlDtxsTMxL6/OI6PEARc2TyK/SnOzrrWfVM=",
+ "System.Runtime.CompilerServices.Unsafe.wasm": "sha256-UDf3mGd1WO+Y9H3zjII5k+VOmOhRWusCyPANRCBESKA=",
+ "System.Runtime.CompilerServices.VisualC.wasm": "sha256-q7AJwktTKY7EeHpBY/I42sQjTNcHnmTjsvYjyCeExnI=",
+ "System.Runtime.Extensions.wasm": "sha256-n7NzM16Dkh6d0LCNj9NW2/XSwGylQ0WHNlcTcOCAMzQ=",
+ "System.Runtime.Handles.wasm": "sha256-3S7V8BAfN+xIfntvh83PeUhBxzkKS1BsvXoAGUXlw0w=",
+ "System.Runtime.InteropServices.JavaScript.wasm": "sha256-dmibenSwlZeTzHL8qVCne9JK+D9bPDHu5+zBvgE8diE=",
+ "System.Runtime.InteropServices.RuntimeInformation.wasm": "sha256-dMAsUqmFUW0A2saYaH7lPqosaiUQYGF0wUBfY4rV4Fk=",
+ "System.Runtime.InteropServices.wasm": "sha256-wJSy/QbhUA+65Uu4gAOSw5UqAyXt+2UqqA5RJ0I3ANY=",
+ "System.Runtime.Intrinsics.wasm": "sha256-tO2bEk74uhqDPo2lPk5HKTcoKK7KjWhBUcTMwWaQW3I=",
+ "System.Runtime.Loader.wasm": "sha256-hHlvZ3WYSDq1hb76C4vJB9vZ/pjinL4EatHbfOH/ol8=",
+ "System.Runtime.Numerics.wasm": "sha256-FJRBYXb3VOMOj5fZ2cbr9HoTVa0kUByKKRriKysHsXA=",
+ "System.Runtime.Serialization.Formatters.wasm": "sha256-HMT47vX6OKdmX2+N74Q6VPTN5r4N24Ex0GGS1BG5b6A=",
+ "System.Runtime.Serialization.Json.wasm": "sha256-6KdtywJjNd1YJUC83ZpLNFT9BzUt6Kg/cv+cKWvVGew=",
+ "System.Runtime.Serialization.Primitives.wasm": "sha256-sgOZjqOOtmMo+7ZREGl28gMRBf8+j7TUQG6pyhNlwCc=",
+ "System.Runtime.Serialization.Xml.wasm": "sha256-hF1OeRZ7U+ToBUGvkYuK4/XjH7107KlxOqiOV5X7N2M=",
+ "System.Runtime.Serialization.wasm": "sha256-JbInCBcF9/WSA0+DMatfei19xvbey5G0tGQ3suiBf2M=",
+ "System.Runtime.wasm": "sha256-4BcXZYAwZ/gZaJnbSpqpytZzd+prHGkg6DYeakjmPag=",
+ "System.Security.AccessControl.wasm": "sha256-RKGV/GvAfRK5EAxguTo7baNzGpKE0jKBB1/nK1WbQA8=",
+ "System.Security.Claims.wasm": "sha256-ds0ZDSYRXwjVwbzsBodGCRLQ5vUKB89T0XLF4UySDMg=",
+ "System.Security.Cryptography.Algorithms.wasm": "sha256-FWTRgsNgWGoGv3PtyiVSGfNKOqi7h5N7I6s0v3YCkUw=",
+ "System.Security.Cryptography.Cng.wasm": "sha256-glN6tiehTQP7CHzi8XQBp1EKSEBVAd7/ujuLafEPFR8=",
+ "System.Security.Cryptography.Csp.wasm": "sha256-pz6nBbdQVQnz3PoXR+BSw41W1t36pvuvmLZcQyQVcbA=",
+ "System.Security.Cryptography.Encoding.wasm": "sha256-9e1DJMxalnlKS1M3ruTwuEqlSVIzH15x5O1neJFdG+4=",
+ "System.Security.Cryptography.OpenSsl.wasm": "sha256-k5QB+8aSSBpqJC8DmS9qZRObLcEo6Axp7ac5eaUQ2JQ=",
+ "System.Security.Cryptography.Primitives.wasm": "sha256-S/ZcaFi1uIvSSUXTzKOAVhrRzPPgE5/sOod+2zmI28U=",
+ "System.Security.Cryptography.X509Certificates.wasm": "sha256-wR8JPm4PLzSERmgRBzY9gB8IApXxE3HDgW0DRRlscyU=",
+ "System.Security.Cryptography.wasm": "sha256-7w/PVEpO3X58mCbouEaVZx5WFoOdj06HiWigjIG18tU=",
+ "System.Security.Principal.Windows.wasm": "sha256-4omyq0WeV6AOswZ/vX7wAotJk3cOBkne83CNRSID5pA=",
+ "System.Security.Principal.wasm": "sha256-G8/3+uGTZSa4LqDHhabdlhoq+vq8Gjnf+3B2IKEK3KY=",
+ "System.Security.SecureString.wasm": "sha256-KCvgnXd+N5Eufy7NsMngxT3LWPyZCaMVLo+RBxjmAPI=",
+ "System.Security.wasm": "sha256-Bks+SEaUiwrFumF+LqzUSGpgf2GElOI2n83MmGoZz58=",
+ "System.ServiceModel.Web.wasm": "sha256-zvbrH6GY2gWriWU3++qK8WpsrIZnVJXu8JeD0eyasU0=",
+ "System.ServiceProcess.wasm": "sha256-2Q1f2RTPK2ZLyEtirc/tXkv5qp9oaO9D4zjOXWOYSo4=",
+ "System.Text.Encoding.CodePages.wasm": "sha256-QXnusu8+XQKwh0a3a7i/vwUpTF6TJ3/0NGSD91SeSFA=",
+ "System.Text.Encoding.Extensions.wasm": "sha256-ONI100PCdbc11Kll6OvQOT1ZDloIqhn3XSM7Y/vTILg=",
+ "System.Text.Encoding.wasm": "sha256-4L6l8Jr4yge2OJDgdcO/nwyNbM4jOOtH5c/EeHvYXgY=",
+ "System.Text.Encodings.Web.wasm": "sha256-6Y6N5ETBj8O39UNagV5qZ512KymTVfEFmfm6MAZTjlU=",
+ "System.Text.Json.wasm": "sha256-v14S+sEsSp2TlRl6ma6DEg80ikULQqDmrtTdNt9VYro=",
+ "System.Text.RegularExpressions.wasm": "sha256-M/km5aoud0Ftci2Zc59DbJdsmGwSt/hPJH6LVehI7zI=",
+ "System.Threading.Channels.wasm": "sha256-lEcL737q7F4fkaf1kVIoRG6D/zCiKpQdWst5wp3FKMU=",
+ "System.Threading.Overlapped.wasm": "sha256-700ZpTpIXCgnhm7wf/n5RMr5MKMIUCIkgAlLUcdIVKo=",
+ "System.Threading.Tasks.Dataflow.wasm": "sha256-nC5UPLQ3pt8tonktdhBCuvHN6dNUAJiFdSKRo3vI/u8=",
+ "System.Threading.Tasks.Extensions.wasm": "sha256-nOoxF4GF9b4N7sYU9t43t+CBswwAqQoad465P0fskJA=",
+ "System.Threading.Tasks.Parallel.wasm": "sha256-x+wSQKsPdwA+sHI2/u7YjLq5Krw2Ypwfng5OTJFGk9M=",
+ "System.Threading.Tasks.wasm": "sha256-z/K8+TJ68KHPKQ8veUALu8wLYGChTQT5gXZXAgHoorU=",
+ "System.Threading.Thread.wasm": "sha256-9TcvLiJPX/ik58YIv5KFHwd0itW92e83LkMV6GQB5jQ=",
+ "System.Threading.ThreadPool.wasm": "sha256-vfEb7gSp1UDIptiasxjYYFCs0OxQq15N/77qo1sXOG4=",
+ "System.Threading.Timer.wasm": "sha256-8+6EFc7FdYKZBr17x3I7J6nVqGARwMaFtheOg6y4RXM=",
+ "System.Threading.wasm": "sha256-ai5Nj2CxdcPydaJjq2S/enCmrgTzG0oYhDMIsqCLG4A=",
+ "System.Transactions.Local.wasm": "sha256-vJQ3iKSWpxaaH9mNZLunnSsSANZoZs01VYz3PiYeRZw=",
+ "System.Transactions.wasm": "sha256-vjITA2hKu39YGd3QvL5m2wGBjcNP2HNPJwa/vjdai2Y=",
+ "System.ValueTuple.wasm": "sha256-mUPXcWePz9cttP4P1+mXHNiJjgUYIcTCM01gcK8jrhE=",
+ "System.Web.HttpUtility.wasm": "sha256-NImjX4HGHFyv0GH62NTSdlNmqV6U5K7gMgcUQ/xii/k=",
+ "System.Web.wasm": "sha256-OoAP59juAIvhHQIPAa2sDYdFQfd/KFNv7DBppPe5pFY=",
+ "System.Windows.wasm": "sha256-RxmbX8I8OcXecPV/udZLhRT62Z+i30qfoWqp99m2+DA=",
+ "System.Xml.Linq.wasm": "sha256-shOsjaS0RtZSLT0L2fChEvgJTNsBwnF5l3eqcllThic=",
+ "System.Xml.ReaderWriter.wasm": "sha256-gcCpclHAdVXghDGfbul3tZh5heiqYdnrSJTQIe04KLs=",
+ "System.Xml.Serialization.wasm": "sha256-FxKwNzYyDQJ5cC6Wm63o10pOGNLRBZDg7gxS/z4XwOo=",
+ "System.Xml.XDocument.wasm": "sha256-ktU/NtH1eF5H+mjkGLGKOTrsaYVlDPyOYF30WSjJCH0=",
+ "System.Xml.XPath.XDocument.wasm": "sha256-49MXC8Y2mPsHMMVhds6D0CxChPejQexSuj+vK38IcPo=",
+ "System.Xml.XPath.wasm": "sha256-ujEsqxLLcW/5bs23VLmb6nqywwZQs/er5k4Kwm6xyHM=",
+ "System.Xml.XmlDocument.wasm": "sha256-LM5UxhZgDDxaINckukvlR3vW2VstUFqx58Sy0i9Moew=",
+ "System.Xml.XmlSerializer.wasm": "sha256-qRZyqw+CaFrfV/1oHypXnYDsWU01u2WfLW+if9D1Wh0=",
+ "System.Xml.wasm": "sha256-3/k8X05OPNLSMiGAnMuNQv6jg1CfEz1Gf+Vh0L+aRuo=",
+ "System.wasm": "sha256-pS2Sog6gDJ6muEWEvLpRp4fG1Kvwtcz/6xD4I993TfM=",
+ "WindowsBase.wasm": "sha256-maV+xv8deA/4cpKXsyNIhhUg6MzPSgWMikX0rEhDiIc=",
+ "mscorlib.wasm": "sha256-KvqZaNpjwhrOuzE4b4aMFsI+VUTyiWfoDI4zn4l9BM8=",
+ "netstandard.wasm": "sha256-v+s7sWxtOM6bnOvC0jFrtnm6uMfbDymwl2nHNgbS2LM=",
+ "System.Private.CoreLib.wasm": "sha256-pklll63uFQoY6vaD3vbluS9osYiJWLLLmob1yHFgepI=",
+ "MimaSim.wasm": "sha256-XMWbLLJQcjxTky/uQjdc1OCK4XNVJfZyqRJMXA1qFEI=",
+ "MimaSim.Browser.wasm": "sha256-IQoEOKkndOBICzSx6WIHK+3lKznyanVn7v+TLWbjJYM="
+ },
+ "pdb": {
+ "HarfBuzzSharp.pdb": "sha256-WXN/xULDD6dTVvs2jiq8zHewEOtqSmaWeqnWa49y5I4=",
+ "Silverfly.pdb": "sha256-igdE9nVJgMmSb9e4dYmaO/i3Ban2nK+AhHI2H2U5DVI=",
+ "SkiaSharp.pdb": "sha256-R3UGotWx+j2aS3JIl6ecMRjcrvyy86DpBlB57Iiy98Y=",
+ "MimaSim.pdb": "sha256-9kGtb2cwMEpOlqsk+ykLXh4M3lU6eVycrtDxVNh5jw4=",
+ "MimaSim.Browser.pdb": "sha256-/lwdcNDUV4RqaS2MaQzSROgsMFHlDD0IT4CnAZgQs7I="
+ },
+ "vfs": {
+ "runtimeconfig.bin": {
+ "supportFiles/0_runtimeconfig.bin": "sha256-3O0xnEdGziwnXI5SfBcEVYfUt1rZ0i2AhzuoQ8zjYOQ="
+ }
+ }
+ },
+ "debugLevel": -1,
+ "globalizationMode": "sharded"
+}
\ No newline at end of file
diff --git a/_framework/dotnet.js b/_framework/dotnet.js
new file mode 100755
index 00000000..1b398aa9
--- /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.
+const e=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])),t=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])),o=Symbol.for("wasm promise_control");function n(e,t){let n=null;const r=new Promise((function(o,r){n={isDone:!1,promise:null,resolve:t=>{n.isDone||(n.isDone=!0,o(t),e&&e())},reject:e=>{n.isDone||(n.isDone=!0,r(e),t&&t())}}}));n.promise=r;const s=r;return s[o]=n,{promise:s,promise_control:n}}function r(e){return e[o]}function s(e){(function(e){return void 0!==e[o]})(e)||Ce(!1,"Promise is not controllable")}const i="MONO_WASM: ";function a(e,...t){je.diagnosticTracing&&console.debug(i+e,...t)}function l(e,...t){console.info(i+e,...t)}function c(e,...t){console.info(e,...t)}function u(e,...t){console.warn(i+e,...t)}function d(e,...t){t&&t.length>0&&t[0]&&"object"==typeof t[0]&&t[0].silent||console.error(i+e,...t)}let f;function m(e,t,o){const n={log:t.log,error:t.error},r=t;function s(t,o,r){return function(...s){try{let n=s[0];if(void 0===n)n="undefined";else if(null===n)n="null";else if("function"==typeof n)n=n.toString();else if("string"!=typeof n)try{n=JSON.stringify(n)}catch(e){n=n.toString()}if("string"==typeof n)if("["==n[0]){const t=(new Date).toISOString();n="main"!==e?`[${e}][${t}] ${n}`:`[${t}] ${n}`}else"main"!==e&&(n=`[${e}] ${n}`);o(r?JSON.stringify({method:t,payload:n,arguments:s}):[t+n,...s.slice(1)])}catch(e){n.error(`proxyConsole failed: ${e}`)}}}const i=["debug","trace","warn","info","error"];for(const e of i)"function"!=typeof r[e]&&(r[e]=s(`console.${e}: `,t.log,!1));const a=`${o}/console`.replace("https://","wss://").replace("http://","ws://");f=new WebSocket(a),f.addEventListener("open",(()=>{n.log(`browser: [${e}] Console websocket connected.`)})),f.addEventListener("error",(t=>{n.error(`[${e}] websocket error: ${t}`,t)})),f.addEventListener("close",(t=>{n.error(`[${e}] websocket closed: ${t}`,t)}));const l=e=>{f.readyState===WebSocket.OPEN?f.send(e):n.log(e)};for(const e of["log",...i])r[e]=s(`console.${e}`,l,!0)}const h={},p={},g={};let b,w,y;function v(){const e=Object.values(g),t=Object.values(p),o=R(e),n=R(t),r=o+n;if(0===r)return;const s=_e?"%c":"",i=_e?["background: purple; color: white; padding: 1px 3px; border-radius: 3px;","font-weight: bold;","font-weight: normal;"]:[],a=je.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(`${s}dotnet${s} Loaded ${j(r)} resources${s}${a}`,...i),e.length&&(console.groupCollapsed(`Loaded ${j(o)} resources from cache`),console.table(g),console.groupEnd()),t.length&&(console.groupCollapsed(`Loaded ${j(n)} resources from network`),console.table(p),console.groupEnd()),console.groupEnd()}async function _(){const e=b;if(e){const t=(await e.keys()).map((async t=>{t.url in h||await e.delete(t)}));await Promise.all(t)}}function E(e){return`${e.resolvedUrl}.${e.hash}`}function R(e){return e.reduce(((e,t)=>e+(t.responseBytes||0)),0)}function j(e){return`${(e/1048576).toFixed(2)} MB`}function S(e){var t;if((null===(t=e.resources)||void 0===t?void 0:t.icu)&&"invariant"!=e.globalizationMode){const t=e.applicationCulture||(_e?navigator.languages&&navigator.languages[0]:Intl.DateTimeFormat().resolvedOptions().locale),o=Object.keys(e.resources.icu);let n=null;if("custom"===e.globalizationMode?1===o.length&&(n=o[0]):"hybrid"===e.globalizationMode?n="icudt_hybrid.dat":t&&"all"!==e.globalizationMode?"sharded"===e.globalizationMode&&(n=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)):n="icudt.dat",n&&o.includes(n))return n}return e.globalizationMode="invariant",null}const x=class{constructor(e){this.url=e}toString(){return this.url}};async function A(e,t){try{const o="function"==typeof globalThis.fetch;if(ye){const n=e.startsWith("file://");if(!n&&o)return globalThis.fetch(e,t||{credentials:"same-origin"});w||(y=xe.require("url"),w=xe.require("fs")),n&&(e=y.fileURLToPath(e));const r=await w.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 D(e){return"string"!=typeof e&&Ce(!1,"url must be a string"),!O(e)&&0!==e.indexOf("./")&&0!==e.indexOf("../")&&globalThis.URL&&globalThis.document&&globalThis.document.baseURI&&(e=new URL(e,globalThis.document.baseURI).toString()),e}const C=/^[a-zA-Z][a-zA-Z\d+\-.]*?:\/\//,T=/[a-zA-Z]:[\\/]/;function O(e){return ye||Ee?e.startsWith("/")||e.startsWith("\\")||-1!==e.indexOf("///")||T.test(e):C.test(e)}let k,M=0;const $=[],I=[],L=new Map,U={"js-module-threads":!0,"js-module-runtime":!0,"js-module-dotnet":!0,"js-module-native":!0},N={...U,"js-module-library-initializer":!0},P={...U,dotnetwasm:!0,heap:!0,manifest:!0},z={...N,manifest:!0},F={...N,dotnetwasm:!0},W={dotnetwasm:!0,symbols:!0},B={resource:!0,assembly:!0,pdb:!0,heap:!0,icu:!0},V={...N,dotnetwasm:!0,symbols:!0};function q(e){return!("icu"==e.behavior&&e.name!=je.preferredIcuAsset)}function J(e,t,o){const n=Object.keys(t||{});Ce(1==n.length,`Expect to have one ${o} asset in resources`);const r=n[0],s={name:r,hash:t[r],behavior:o};return H(s),e.push(s),s}function H(e){P[e.behavior]&&L.set(e.behavior,e)}function Q(e){const t=function(e){Ce(P[e],`Unknown single asset behavior ${e}`);const t=L.get(e);return Ce(t,`Single asset for ${e} not found`),t}(e);if(t.resolvedUrl=je.locateFile(t.name),U[t.behavior]){const e=se(t);e?("string"!=typeof e&&Ce(!1,"loadBootResource response for 'dotnetjs' type should be a URL string"),t.resolvedUrl=e):t.resolvedUrl=ee(t.resolvedUrl,t.behavior)}else if("dotnetwasm"!==t.behavior)throw new Error(`Unknown single asset behavior ${e}`);return t}async function Z(){a("mono_download_assets");try{const e=[],t=t=>{!V[t.behavior]&&q(t)&&je.expected_instantiated_assets_count++,!F[t.behavior]&&q(t)&&(je.expected_downloaded_assets_count++,e.push(Y(t)))};for(const e of I)t(e);await je.memorySnapshotSkippedOrDone.promise;for(const e of $)if(Re.loadedMemorySnapshotSize){if(ie(e),"resource"==e.behavior||"assembly"==e.behavior||"pdb"==e.behavior){const t=X(e,""),o="string"==typeof e.virtualPath?e.virtualPath:e.name;je._loaded_files.push({url:t,file:o})}}else t(e);je.allDownloadsQueued.promise_control.resolve(),await je.runtimeModuleLoaded.promise;const o=[];for(const t of e)o.push((async()=>{const e=await t;if(e.buffer){if(!V[e.behavior]){e.buffer&&"object"==typeof e.buffer||Ce(!1,"asset buffer must be array-like or buffer-like or promise of these"),"string"!=typeof e.resolvedUrl&&Ce(!1,"resolvedUrl must be string");const t=e.resolvedUrl,o=await e.buffer,n=new Uint8Array(o);ie(e),await Re.beforeOnRuntimeInitialized.promise,Re.instantiate_asset(e,t,n)}}else W[e.behavior]?("symbols"===e.behavior&&(await Re.instantiate_symbols_asset(e),ie(e)),W[e.behavior]&&++je.actual_downloaded_assets_count):(e.isOptional||Ce(!1,"Expected asset to have the downloaded buffer"),!F[e.behavior]&&q(e)&&je.expected_downloaded_assets_count--,!V[e.behavior]&&q(e)&&je.expected_instantiated_assets_count--)})());Promise.all(o).then((()=>{Re.allAssetsInMemory.promise_control.resolve()})).catch((e=>{throw je.err("Error in mono_download_assets: "+e),Me(1,e),e}))}catch(e){throw je.err("Error in mono_download_assets: "+e),e}}async function G(e){const t=await Y(e);return await t.pendingDownloadInternal.response,t.buffer}async function Y(e){try{return await K(e)}catch(t){if(!je.enableDownloadRetry)throw t;if(Ee||ye)throw t;if(e.pendingDownload&&e.pendingDownloadInternal==e.pendingDownload)throw t;if(e.resolvedUrl&&-1!=e.resolvedUrl.indexOf("file://"))throw t;if(t&&404==t.status)throw t;e.pendingDownloadInternal=void 0,await je.allDownloadsQueued.promise;try{return a(`Retrying download '${e.name}'`),await K(e)}catch(t){return e.pendingDownloadInternal=void 0,await(100,new Promise((e=>globalThis.setTimeout(e,100)))),a(`Retrying download (2) '${e.name}' after delay`),await K(e)}}}async function K(e){for(;k;)await k.promise;try{++M,M==je.maxParallelDownloads&&(a("Throttling further parallel downloads"),k=n());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&&je.config.remoteSources?je.config.remoteSources:[""];let o;for(let n of t){n=n.trim(),"./"===n&&(n="");const t=X(e,n);e.name===t?a(`Attempting to download '${t}'`):a(`Attempting to download '${t}' for ${e.name}`);try{e.resolvedUrl=t;const n=ne(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$/)&&je.config.ignorePdbLoadErrors;if(o||Ce(!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}l(`optional download '${o.url}' for ${e.name} failed ${o.status} ${o.statusText}`)}(e);return t?(W[e.behavior]||(e.buffer=await t.arrayBuffer(),++je.actual_downloaded_assets_count),e):e}finally{if(--M,k&&M==je.maxParallelDownloads-1){a("Resuming more parallel downloads");const e=k;k=void 0,e.promise_control.resolve()}}}function X(e,t){let o;return null==t&&Ce(!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=ee(je.locateFile(o),e.behavior)),o&&"string"==typeof o||Ce(!1,"attemptUrl need to be path or url string"),o}function ee(e,t){return je.modulesUniqueQuery&&z[t]&&(e+=je.modulesUniqueQuery),e}let te=0;const oe=new Set;function ne(e){try{e.resolvedUrl||Ce(!1,"Request's resolvedUrl must be set");const t=async function(e){let t=await async function(e){const t=b;if(!t||e.noCache||!e.hash||0===e.hash.length)return;const o=E(e);let n;h[o]=!0;try{n=await t.match(o)}catch(e){}if(!n)return;const r=parseInt(n.headers.get("content-length")||"0");return g[e.name]={responseBytes:r},n}(e);return t||(t=await function(e){let t=e.resolvedUrl;if(je.loadBootResource){const o=se(e);if(o instanceof Promise)return o;"string"==typeof o&&(t=o)}const o={};return je.config.disableNoCacheFetch||(o.cache="no-cache"),e.useCredentials?o.credentials="include":!je.config.disableIntegrityCheck&&e.hash&&(o.integrity=e.hash),je.fetch_like(t,o)}(e),function(e,t){const o=b;if(!o||e.noCache||!e.hash||0===e.hash.length)return;const n=t.clone();setTimeout((()=>{const t=E(e);!async function(e,t,o,n){const r=await n.arrayBuffer(),s=function(e){if("undefined"!=typeof performance)return performance.getEntriesByName(e)[0]}(n.url),i=s&&s.encodedBodySize||void 0;p[t]={responseBytes:i};const a=new Response(r,{headers:{"content-type":n.headers.get("content-type")||"","content-length":(i||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 oe.add(e.name),o.response.then((()=>{"assembly"==e.behavior&&je.loadedAssemblies.push(e.name),te++,je.onDownloadResourceProgress&&je.onDownloadResourceProgress(te,oe.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 re={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 se(e){var t;if(je.loadBootResource){const o=null!==(t=e.hash)&&void 0!==t?t:"",n=e.resolvedUrl,r=re[e.behavior];if(r){const t=je.loadBootResource(r,e.name,n,o,e.behavior);return"string"==typeof t?D(t):t}}}function ie(e){e.pendingDownloadInternal=null,e.pendingDownload=null,e.buffer=null,e.moduleExports=null}function ae(e){let t=e.lastIndexOf("/");return t>=0&&t++,e.substring(t)}async function le(e){if(!e)return;const t=Object.keys(e);await Promise.all(t.map((e=>async function(e){try{const t=ee(je.locateFile(e),"js-module-library-initializer");a(`Attempting to import '${t}' for ${e}`);const o=await import(t);je.libraryInitializers.push({scriptName:e,exports:o})}catch(t){u(`Failed to import library initializer '${e}': ${t}`)}}(e))))}async function ce(e,t){if(!je.libraryInitializers)return;const o=[];for(let n=0;nr.exports[e](...t))))}await Promise.all(o)}async function ue(e,t,o){try{await o()}catch(o){throw u(`Failed to invoke '${t}' on library initializer '${e}': ${o}`),Me(1,o),o}}var de="Release";function fe(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=he(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 me(e,t){if(e===t)return e;const o={...t};return o.config&&(e.config||(e.config={}),o.config=fe(e.config,o.config)),Object.assign(e,o)}function he(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.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=pe(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=pe(e.vfs||{},o.vfs||{})),Object.assign(e,o)}function pe(e,t){if(e===t)return e;for(const o in t)e[o]={...e[o],...t[o]};return e}function ge(){const e=je.config;if(e.environmentVariables=e.environmentVariables||{},e.runtimeOptions=e.runtimeOptions||[],e.resources=e.resources||{assembly:{},jsModuleNative:{},jsModuleWorker:{},jsModuleRuntime:{},wasmNative:{},vfs:{},satelliteResources:{}},e.assets){a("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-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}`)}he(e.resources,n)}}je.assertAfterExit=e.assertAfterExit=e.assertAfterExit||!_e,void 0===e.debugLevel&&"Debug"===de&&(e.debugLevel=-1),void 0===e.cachedResourcesPurgeDelay&&(e.cachedResourcesPurgeDelay=1e4),void 0===e.diagnosticTracing&&"Debug"===de&&(e.diagnosticTracing=!0),e.applicationCulture&&(e.environmentVariables.LANG=`${e.applicationCulture}.UTF-8`),Re.diagnosticTracing=je.diagnosticTracing=!!e.diagnosticTracing,Re.waitForDebugger=e.waitForDebugger,e.startupMemoryCache=!!e.startupMemoryCache,e.startupMemoryCache&&Re.waitForDebugger&&(a("Disabling startupMemoryCache because waitForDebugger is set"),e.startupMemoryCache=!1),Re.enablePerfMeasure=!!e.browserProfilerOptions&&globalThis.performance&&"function"==typeof globalThis.performance.measure,je.maxParallelDownloads=e.maxParallelDownloads||je.maxParallelDownloads,je.enableDownloadRetry=void 0!==e.enableDownloadRetry?e.enableDownloadRetry:je.enableDownloadRetry}let be=!1;function we(){return!!globalThis.navigator&&(je.isChromium||je.isFirefox)}const ye="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,ve="function"==typeof importScripts,_e="object"==typeof window||ve&&!ye,Ee=!_e&&!ye&&!ve;let Re={},je={},Se={},xe={},Ae=!1;const De={mono:{},binding:{},internal:xe,module:{},loaderHelpers:je,runtimeHelpers:Re,api:Se};function Ce(e,t){if(e)return;const o="Assert failed: "+("function"==typeof t?t():t),n=new Error(o);Re.abort(n)}function Te(){return void 0!==je.exitCode}function Oe(){return Re.runtimeReady&&!Te()}function ke(){Re.runtimeReady||Ce(!1,"mono runtime didn't start yet"),je.assertAfterExit&&Te()&&Ce(!1,`mono runtime already exited with ${je.exitCode}`)}function Me(e,t){var o;const n=t&&"object"==typeof t;e=n&&"number"==typeof t.status?t.status:e;const r=n&&"string"==typeof t.message?t.message:""+t;if((t=n?t:Re.ExitStatus?new Re.ExitStatus(e):new Error("Exit with code "+e+" "+r)).status=e,t.message||(t.message=r),t.stack||(t.stack=(new Error).stack||""),t.silent=!0,!Te()){try{Re.runtimeReady||(a("abort_startup, reason: "+t),function(e){je.allDownloadsQueued.promise_control.reject(e),je.afterConfigLoaded.promise_control.reject(e),je.wasmDownloadPromise.promise_control.reject(e),je.runtimeModuleLoaded.promise_control.reject(e),je.memorySnapshotSkippedOrDone.promise_control.reject(e),Re.dotnetReady&&(Re.dotnetReady.promise_control.reject(e),Re.afterInstantiateWasm.promise_control.reject(e),Re.beforePreInit.promise_control.reject(e),Re.afterPreInit.promise_control.reject(e),Re.afterPreRun.promise_control.reject(e),Re.beforeOnRuntimeInitialized.promise_control.reject(e),Re.afterOnRuntimeInitialized.promise_control.reject(e),Re.afterPostRun.promise_control.reject(e))}(t)),function(e,t){if(0!==e&&t){const e=Re.ExitStatus&&t instanceof Re.ExitStatus?a:d;"string"==typeof t?e(t):t.stack&&t.message?Re.stringify_as_error_with_stack?e(Re.stringify_as_error_with_stack(t)):e(t.message+"\n"+t.stack):e(JSON.stringify(t))}if(je.config&&je.config.logExitCode)if(f){const t=()=>{0==f.bufferedAmount?c("WASM EXIT "+e):globalThis.setTimeout(t,100)};t()}else c("WASM EXIT "+e)}(e,t),function(e){if(_e&&je.config&&je.config.appendElementOnExit){const t=document.createElement("label");t.id="tests_done",e&&(t.style.background="red"),t.innerHTML=e.toString(),document.body.appendChild(t)}}(e),Re.jiterpreter_dump_stats&&Re.jiterpreter_dump_stats(!1),0===e&&(null===(o=je.config)||void 0===o?void 0:o.interopCleanupOnExit)&&Re.forceDisposeProxies(!0,!0)}catch(e){u("mono_exit failed",e)}je.exitCode=e}if(je.config&&je.config.asyncFlushOnExit&&0===e)throw(async()=>{try{await async function(){try{const e=await import("process"),t=e=>new Promise(((t,o)=>{e.on("error",(e=>o(e))),e.write("",(function(){t()}))})),o=t(e.stderr),n=t(e.stdout);await Promise.all([n,o])}catch(e){d(`flushing std* streams failed: ${e}`)}}()}finally{$e(e,t)}})(),t;$e(e,t)}function $e(e,t){if(Oe()&&Re.mono_wasm_exit&&Re.mono_wasm_exit(e),0!==e||!_e)throw ye&&xe.process?xe.process.exit(e):Re.quit&&Re.quit(e,t),t}!function(o){if(Ae)throw new Error("Loader module already loaded");Ae=!0,Re=o.runtimeHelpers,je=o.loaderHelpers,Se=o.api,xe=o.internal,Object.assign(Se,{INTERNAL:xe,invokeLibraryInitializers:ce}),Object.assign(o.module,{disableDotnet6Compatibility:!0,config:{environmentVariables:{}}}),Object.assign(Re,{mono_wasm_bindings_is_ready:!1,javaScriptExports:{},config:o.module.config,diagnosticTracing:!1,abort:e=>{throw e}}),Object.assign(je,{gitHash:"81cabf2857a01351e5ab578947c7403a5b128ad1",config:o.module.config,diagnosticTracing:!1,maxParallelDownloads:16,enableDownloadRetry:!0,assertAfterExit:!_e,_loaded_files:[],loadedFiles:[],loadedAssemblies:[],libraryInitializers:[],actual_downloaded_assets_count:0,actual_instantiated_assets_count:0,expected_downloaded_assets_count:0,expected_instantiated_assets_count:0,afterConfigLoaded:n(),allDownloadsQueued:n(),wasmDownloadPromise:n(),runtimeModuleLoaded:n(),memorySnapshotSkippedOrDone:n(),is_exited:Te,is_runtime_running:Oe,assert_runtime_running:ke,mono_exit:Me,createPromiseController:n,getPromiseController:r,assertIsControllablePromise:s,mono_download_assets:Z,resolve_single_asset_path:Q,setup_proxy_console:m,logDownloadStatsToConsole:v,purgeUnusedCacheEntriesAsync:_,retrieve_asset_download:G,invokeLibraryInitializers:ce,isDebuggingSupported:we,exceptions:e,simd:t})}(De);const Ie="__mono_message_please_dont_collide__";let Le=!1;const Ue=De.module,Ne=Ue.config;async function Pe(e){if("function"==typeof e){const t=e(De.api);if(t.ready)throw new Error("Module.ready couldn't be redefined.");Object.assign(Ue,t),me(Ue,t)}else{if("object"!=typeof e)throw new Error("Can't use moduleFactory callback of createDotnetRuntime function.");me(Ue,e)}return await async function(e){if(ye){const e=await import("process"),t=14;if(e.versions.node.split(".")[0]0&&(je.modulesUniqueQuery=t.substring(o)),je.scriptUrl=t.replace(/\\/g,"/").replace(/[?#].*/,""),je.scriptDirectory=(n=je.scriptUrl).slice(0,n.lastIndexOf("/"))+"/",je.locateFile=e=>"URL"in globalThis&&globalThis.URL!==x?new URL(e,je.scriptDirectory).toString():O(e)?e:je.scriptDirectory+e,je.fetch_like=A,je.out=console.log,je.err=console.error,je.onDownloadResourceProgress=e.onDownloadResourceProgress,_e&&globalThis.navigator){const e=globalThis.navigator,t=e.userAgentData&&e.userAgentData.brands;t&&t.length>0?je.isChromium=t.some((e=>"Google Chrome"===e.brand||"Microsoft Edge"===e.brand||"Chromium"===e.brand)):e.userAgent&&(je.isChromium=e.userAgent.includes("Chrome"),je.isFirefox=e.userAgent.includes("Firefox"))}xe.require=ye?await import("module").then((e=>e.createRequire(import.meta.url))):Promise.resolve((()=>{throw new Error("require not supported")})),void 0===globalThis.URL&&(globalThis.URL=x)}(Ue),Ue.ENVIRONMENT_IS_PTHREAD?async function(){(function(){const e=new MessageChannel,t=e.port1,o=e.port2;t.addEventListener("message",(e=>{var n;n=JSON.parse(e.data.config),Le?a("mono config already received"):(fe(je.config,n),ge(),a("mono config received"),Le=!0,je.afterConfigLoaded.promise_control.resolve(je.config),_e&&n.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&je.setup_proxy_console("pthread-worker",console,self.location.href)),t.close(),o.close()}),{once:!0}),t.start(),self.postMessage({[Ie]:{monoCmd:"preload",port:o}},[o])})(),await je.afterConfigLoaded.promise,function(){const e=je.config;e.assets||Ce(!1,"config.assets must be defined");for(const t of e.assets)H(t)}();const e=ze(),t=await Promise.all(e);return await Fe(t),Ue}():async function(){var e;Ue.configSrc||je.config&&0!==Object.keys(je.config).length&&(je.config.assets||je.config.resources)||(Ue.configSrc="./blazor.boot.json"),await async function(e){var t;const o=e.configSrc;if(be)await je.afterConfigLoaded.promise;else try{if(be=!0,o&&(a("mono_wasm_load_config"),await async function(e){const t=je.locateFile(e.configSrc),o=void 0!==je.loadBootResource?je.loadBootResource("manifest","blazor.boot.json",t,"","manifest"):s(t);let n;n=o?"string"==typeof o?await s(D(o)):await o:await s(ee(t,"manifest"));const r=await async function(e){const t=je.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 s(e){return je.fetch_like(e,{method:"GET",credentials:"include",cache:"no-cache"})}fe(je.config,r)}(e)),ge(),await le(null===(t=je.config.resources)||void 0===t?void 0:t.modulesAfterConfigLoaded),await ce("onRuntimeConfigLoaded",[je.config]),e.onConfigLoaded)try{await e.onConfigLoaded(je.config,Se),ge()}catch(e){throw d("onConfigLoaded() failed",e),e}ge(),je.config.startupMemoryCache&&e.instantiateWasm&&Ce(!1,"startupMemoryCache is not supported with Module.instantiateWasm"),je.afterConfigLoaded.promise_control.resolve(je.config),je.config.startupMemoryCache||je.memorySnapshotSkippedOrDone.promise_control.resolve()}catch(t){const n=`Failed to load config file ${o} ${t} ${null==t?void 0:t.stack}`;throw je.config=e.config=Object.assign(je.config,{message:n,error:t,isError:!0}),Me(1,new Error(n)),t}}(Ue),function(){const e=je.config,t=[];if(e.assets)for(const t of e.assets)"object"!=typeof t&&Ce(!1,`asset must be object, it was ${typeof t} : ${t}`),"string"!=typeof t.behavior&&Ce(!1,"asset behavior must be known string"),"string"!=typeof t.name&&Ce(!1,"asset name must be string"),t.resolvedUrl&&"string"!=typeof t.resolvedUrl&&Ce(!1,"asset resolvedUrl could be string"),t.hash&&"string"!=typeof t.hash&&Ce(!1,"asset resolvedUrl could be string"),t.pendingDownload&&"object"!=typeof t.pendingDownload&&Ce(!1,"asset pendingDownload could be object"),B[t.behavior]?$.push(t):I.push(t),H(t);else if(e.resources){const o=e.resources;if(o.wasmNative||Ce(!1,"resources.wasmNative must be defined"),o.jsModuleNative||Ce(!1,"resources.jsModuleNative must be defined"),o.jsModuleRuntime||Ce(!1,"resources.jsModuleRuntime must be defined"),J(I,o.wasmNative,"dotnetwasm"),J(t,o.jsModuleNative,"js-module-native"),J(t,o.jsModuleRuntime,"js-module-runtime"),o.assembly)for(const e in o.assembly)$.push({name:e,hash:o.assembly[e],behavior:"assembly"});if(0!=e.debugLevel&&je.isDebuggingSupported()&&o.pdb)for(const e in o.pdb)$.push({name:e,hash:o.pdb[e],behavior:"pdb"});if(e.loadAllSatelliteResources&&o.satelliteResources)for(const e in o.satelliteResources)for(const t in o.satelliteResources[e])$.push({name:t,hash:o.satelliteResources[e][t],behavior:"resource",culture:e});if(o.vfs)for(const e in o.vfs)for(const t in o.vfs[e])I.push({name:t,hash:o.vfs[e][t],behavior:"vfs",virtualPath:e});const n=S(e);if(n&&o.icu)for(const e in o.icu)e===n&&$.push({name:e,hash:o.icu[e],behavior:"icu",loadRemote:!0});if(o.wasmSymbols)for(const e in o.wasmSymbols)I.push({name:e,hash:o.wasmSymbols[e],behavior:"symbols"})}if(e.appsettings)for(let t=0;t{je.wasmDownloadPromise.promise_control.resolve(e)})).catch((e=>{Me(1,e)})),setTimeout((()=>{!function(){if(je.preferredIcuAsset=S(je.config),je.invariantMode="invariant"==je.config.globalizationMode,!je.invariantMode)if(je.preferredIcuAsset)a("ICU data archive(s) available, disabling invariant mode");else{if("custom"===je.config.globalizationMode||"all"===je.config.globalizationMode||"sharded"===je.config.globalizationMode){const e="invariant globalization mode is inactive and no ICU data archives are available";throw d(`ERROR: ${e}`),new Error(e)}a("ICU data archive(s) not available, using invariant globalization mode"),je.invariantMode=!0,je.preferredIcuAsset=null}const e="DOTNET_SYSTEM_GLOBALIZATION_INVARIANT",t="DOTNET_SYSTEM_GLOBALIZATION_HYBRID",o=je.config.environmentVariables;if(void 0===o[t]&&"hybrid"===je.config.globalizationMode?o[t]="1":void 0===o[e]&&je.invariantMode&&(o[e]="1"),void 0===o.TZ)try{const e=Intl.DateTimeFormat().resolvedOptions().timeZone||null;e&&(o.TZ=e)}catch(e){l("failed to detect timezone, will fallback to UTC")}}(),Z()}),0);const o=await Promise.all(t);return await Fe(o),await Re.dotnetReady.promise,await le(null===(e=je.config.resources)||void 0===e?void 0:e.modulesAfterRuntimeReady),await ce("onRuntimeReady",[De.api]),Se}()}function ze(){const e=Q("js-module-runtime"),t=Q("js-module-native");let o,n;return"object"==typeof e.moduleExports?o=e.moduleExports:(a(`Attempting to import '${e.resolvedUrl}' for ${e.name}`),o=import(e.resolvedUrl)),"object"==typeof t.moduleExports?n=t.moduleExports:(a(`Attempting to import '${t.resolvedUrl}' for ${t.name}`),n=import(t.resolvedUrl)),[o,n]}async function Fe(e){const{initializeExports:t,initializeReplacements:o,configureRuntimeStartup:n,configureEmscriptenStartup:r,configureWorkerStartup:s,setRuntimeGlobals:i,passEmscriptenInternals:a}=e[0],{default:l}=e[1];i(De),t(De),await n(De.module),je.runtimeModuleLoaded.promise_control.resolve(),l((e=>(Object.assign(Ue,{ready:e.ready,__dotnet_runtime:{initializeReplacements:o,configureEmscriptenStartup:r,configureWorkerStartup:s,passEmscriptenInternals:a}}),Ue)))}const We=new class{withModuleConfig(e){try{return me(Ue,e),this}catch(e){throw Me(1,e),e}}withOnConfigLoaded(e){try{return me(Ue,{onConfigLoaded:e}),this}catch(e){throw Me(1,e),e}}withConsoleForwarding(){try{return fe(Ne,{forwardConsoleLogsToWS:!0}),this}catch(e){throw Me(1,e),e}}withExitOnUnhandledError(){const e=function(e,t){e.preventDefault();try{t&&t.silent||Me(1,t)}catch(e){}};try{return _e&&(window.addEventListener("unhandledrejection",(t=>e(t,t.reason))),window.addEventListener("error",(t=>e(t,t.error)))),this}catch(e){throw Me(1,e),e}}withAsyncFlushOnExit(){try{return fe(Ne,{asyncFlushOnExit:!0}),this}catch(e){throw Me(1,e),e}}withExitCodeLogging(){try{return fe(Ne,{logExitCode:!0}),this}catch(e){throw Me(1,e),e}}withElementOnExit(){try{return fe(Ne,{appendElementOnExit:!0}),this}catch(e){throw Me(1,e),e}}withInteropCleanupOnExit(){try{return fe(Ne,{interopCleanupOnExit:!0}),this}catch(e){throw Me(1,e),e}}withAssertAfterExit(){try{return fe(Ne,{assertAfterExit:!0}),this}catch(e){throw Me(1,e),e}}withWaitingForDebugger(e){try{return fe(Ne,{waitForDebugger:e}),this}catch(e){throw Me(1,e),e}}withStartupMemoryCache(e){try{return fe(Ne,{startupMemoryCache:e}),this}catch(e){throw Me(1,e),e}}withConfig(e){try{return fe(Ne,e),this}catch(e){throw Me(1,e),e}}withConfigSrc(e){try{return e&&"string"==typeof e||Ce(!1,"must be file path or URL"),me(Ue,{configSrc:e}),this}catch(e){throw Me(1,e),e}}withVirtualWorkingDirectory(e){try{return e&&"string"==typeof e||Ce(!1,"must be directory path"),this.virtualWorkingDirectory=e,this}catch(e){throw Me(1,e),e}}withEnvironmentVariable(e,t){try{const o={};return o[e]=t,fe(Ne,{environmentVariables:o}),this}catch(e){throw Me(1,e),e}}withEnvironmentVariables(e){try{return e&&"object"==typeof e||Ce(!1,"must be dictionary object"),fe(Ne,{environmentVariables:e}),this}catch(e){throw Me(1,e),e}}withDiagnosticTracing(e){try{return"boolean"!=typeof e&&Ce(!1,"must be boolean"),fe(Ne,{diagnosticTracing:e}),this}catch(e){throw Me(1,e),e}}withDebugging(e){try{return e&&"number"==typeof e||Ce(!1,"must be number"),fe(Ne,{debugLevel:e}),this}catch(e){throw Me(1,e),e}}withApplicationArguments(...e){try{return e&&Array.isArray(e)||Ce(!1,"must be array of strings"),this.applicationArguments=e,this}catch(e){throw Me(1,e),e}}withRuntimeOptions(e){try{return e&&Array.isArray(e)||Ce(!1,"must be array of strings"),fe(Ne,{runtimeOptions:e}),this}catch(e){throw Me(1,e),e}}withMainAssembly(e){try{return fe(Ne,{mainAssemblyName:e}),this}catch(e){throw Me(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(window.location.search).getAll("arg");return this.withApplicationArguments(...e)}catch(e){throw Me(1,e),e}}withApplicationEnvironment(e){try{return fe(Ne,{applicationEnvironment:e}),this}catch(e){throw Me(1,e),e}}withApplicationCulture(e){try{return fe(Ne,{applicationCulture:e}),this}catch(e){throw Me(1,e),e}}withResourceLoader(e){try{return je.loadBootResource=e,this}catch(e){throw Me(1,e),e}}async create(){try{if(this.instance||(_e&&Ue.config.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&m("main",globalThis.console,globalThis.location.origin),Ue||Ce(!1,"Null moduleConfig"),Ue.config||Ce(!1,"Null moduleConfig.config"),await Pe(Ue),this.instance=De.api),this.virtualWorkingDirectory){const e=this.instance.Module.FS,t=e.stat(this.virtualWorkingDirectory);t&&e.isDir(t.mode)||Ce(!1,`Could not find working directory ${this.virtualWorkingDirectory}`),e.chdir(this.virtualWorkingDirectory)}return this.instance}catch(e){throw Me(1,e),e}}async run(){try{if(Ue.config||Ce(!1,"Null moduleConfig.config"),this.instance||await this.create(),Ue.config.mainAssemblyName||Ce(!1,"Null moduleConfig.config.mainAssemblyName"),!this.applicationArguments)if(ye){const e=await import("process");this.applicationArguments=e.argv.slice(2)}else this.applicationArguments=[];return this.instance.runMainAndExit(Ue.config.mainAssemblyName,this.applicationArguments)}catch(e){throw Me(1,e),e}}},Be=Me,Ve=Pe;Ee||"function"==typeof globalThis.URL||Ce(!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&&Ce(!1,"This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features");export{Ve as default,We as dotnet,Be as exit};
+//# sourceMappingURL=dotnet.js.map
diff --git a/_framework/dotnet.js.map b/_framework/dotnet.js.map
new file mode 100755
index 00000000..850a0d4b
--- /dev/null
+++ b/_framework/dotnet.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"dotnet.js","sources":["https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/node_modules/wasm-feature-detect/dist/esm/index.js","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/promise-controller.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/logging.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/assetsCache.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/polyfills.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/icu.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/assets.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/libraryInitializers.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/config.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/globals.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/exit.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/worker.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/run.ts","https://raw.githubusercontent.com/dotnet/runtime/81cabf2857a01351e5ab578947c7403a5b128ad1/src/mono/wasm/runtime/loader/index.ts"],"sourcesContent":["export const bigInt=()=>(async e=>{try{return(await WebAssembly.instantiate(e)).instance.exports.b(BigInt(0))===BigInt(0)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,1,126,1,126,3,2,1,0,7,5,1,1,98,0,0,10,6,1,4,0,32,0,11])),bulkMemory=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,3,1,0,1,10,14,1,12,0,65,0,65,0,65,0,252,10,0,0,11])),exceptions=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])),extendedConst=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,5,3,1,0,1,11,9,1,0,65,1,65,2,106,11,0])),gc=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,10,2,95,1,125,0,96,0,1,107,0,3,2,1,1,10,12,1,10,0,67,0,0,0,0,251,7,0,11])),memory64=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,5,3,1,4,1])),multiValue=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,6,1,96,0,2,127,127,3,2,1,0,10,8,1,6,0,65,0,65,0,11])),mutableGlobals=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,2,8,1,1,97,1,98,3,127,1,6,6,1,127,1,65,0,11,7,5,1,1,97,3,1])),referenceTypes=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,7,1,5,0,208,112,26,11])),relaxedSimd=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,15,1,13,0,65,1,253,15,65,2,253,15,253,128,2,11])),saturatedFloatToInt=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,12,1,10,0,67,0,0,0,0,252,0,26,11])),signExtensions=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,65,0,192,26,11])),simd=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])),streamingCompilation=()=>(async()=>\"compileStreaming\"in WebAssembly)(),tailCall=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,6,1,4,0,18,0,11])),threads=()=>(async e=>{try{return\"undefined\"!=typeof MessageChannel&&(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(e)}catch(e){return!1}})(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]));\n",null,null,null,null,null,null,null,null,null,null,null,null,null],"names":["exceptions","async","WebAssembly","validate","Uint8Array","simd","promise_control_symbol","Symbol","for","createPromiseController","afterResolve","afterReject","promise_control","promise","Promise","resolve","reject","isDone","data","reason","controllablePromise","getPromiseController","assertIsControllablePromise","undefined","mono_assert","prefix","mono_log_debug","msg","loaderHelpers","diagnosticTracing","console","debug","mono_log_info","info","mono_log_info_no_prefix","mono_log_warn","warn","mono_log_error","length","silent","error","consoleWebSocket","setup_proxy_console","id","origin","originalConsole","log","anyConsole","proxyConsoleMethod","func","asJson","args","payload","toString","JSON","stringify","e","now","Date","toISOString","method","arguments","slice","err","methods","m","consoleUrl","replace","WebSocket","addEventListener","event","send","readyState","OPEN","usedCacheKeys","networkLoads","cacheLoads","cacheIfUsed","node_fs","node_url","logDownloadStatsToConsole","cacheLoadsEntries","Object","values","networkLoadsEntries","cacheResponseBytes","countTotalBytes","networkResponseBytes","totalResponseBytes","useStyle","ENVIRONMENT_IS_WEB","style","linkerDisabledWarning","config","linkerEnabled","groupCollapsed","toDataSizeString","table","groupEnd","purgeUnusedCacheEntriesAsync","cache","deletionPromises","keys","map","cachedRequest","url","delete","all","getCacheKey","asset","resolvedUrl","hash","loads","reduce","prev","item","responseBytes","byteCount","toFixed","getIcuResourceName","_a","resources","icu","globalizationMode","culture","applicationCulture","navigator","languages","Intl","DateTimeFormat","resolvedOptions","locale","icuFiles","icuFile","split","includes","getShardedIcuResourceName","URLPolyfill","constructor","this","fetch_like","init","hasFetch","globalThis","ENVIRONMENT_IS_NODE","isFileUrl","startsWith","fetch","credentials","INTERNAL","require","fileURLToPath","arrayBuffer","promises","readFile","ok","headers","get","json","parse","text","Error","read","status","statusText","makeURLAbsoluteWithApplicationBase","isPathAbsolute","indexOf","URL","document","baseURI","protocolRx","windowsAbsoluteRx","path","ENVIRONMENT_IS_SHELL","test","throttlingPromise","parallel_count","containedInSnapshotAssets","alwaysLoadedAssets","singleAssets","Map","jsRuntimeModulesAssetTypes","jsModulesAssetTypes","singleAssetTypes","dotnetwasm","heap","manifest","appendQueryAssetTypes","skipDownloadsByAssetTypes","skipBufferByAssetTypes","symbols","containedInSnapshotByAssetTypes","resource","assembly","pdb","skipInstantiateByAssetTypes","shouldLoadIcuAsset","behavior","name","preferredIcuAsset","convert_single_asset","assetsCollection","set_single_asset","push","set","resolve_single_asset_path","get_single_asset","locateFile","customLoadResult","invokeLoadBootResource","appendUniqueQuery","mono_download_assets","promises_of_assets","countAndStartDownload","expected_instantiated_assets_count","expected_downloaded_assets_count","start_asset_download","memorySnapshotSkippedOrDone","runtimeHelpers","loadedMemorySnapshotSize","cleanupAsset","resolve_path","virtualName","virtualPath","_loaded_files","file","allDownloadsQueued","runtimeModuleLoaded","promises_of_asset_instantiation","downloadPromise","buffer","beforeOnRuntimeInitialized","instantiate_asset","instantiate_symbols_asset","actual_downloaded_assets_count","then","allAssetsInMemory","catch","mono_exit","retrieve_asset_download","pendingAsset","pendingDownloadInternal","response","start_asset_download_with_throttle","enableDownloadRetry","pendingDownload","setTimeout","maxParallelDownloads","TextDecoder","decode","sourcesList","loadRemote","remoteSources","sourcePrefix","trim","attemptUrl","loadingResource","download_resource","isOkToFail","isOptional","match","ignorePdbLoadErrors","start_asset_download_sources","old_throttling","modulesUniqueQuery","resourcesLoaded","totalResources","Set","fetchResponse","noCache","cacheKey","cachedResponse","parseInt","findCachedResponse","loadBootResource","fetchOptions","disableNoCacheFetch","useCredentials","disableIntegrityCheck","integrity","fetchResource","networkResponse","clonedResponse","clone","responseData","performanceEntry","performance","getEntriesByName","getPerformanceEntry","encodedBodySize","responseToCache","Response","put","addToCacheAsync","addCachedReponse","download_resource_with_cache","add","loadedAssemblies","onDownloadResourceProgress","size","monoToBlazorAssetTypeMap","vfs","requestHash","resourceType","moduleExports","fileName","lastIndexOfSlash","lastIndexOf","substring","importLibraryInitializers","libraryInitializers","initializerFiles","f","adjustedPath","initializer","import","scriptName","exports","importInitializer","invokeLibraryInitializers","functionName","i","abortStartupOnError","methodName","callback","deep_merge_config","target","source","providedConfig","assets","deep_merge_resources","jsModuleNative","jsModuleRuntime","wasmNative","environmentVariables","runtimeOptions","assign","deep_merge_module","providedResources","lazyAssembly","jsModuleWorker","wasmSymbols","satelliteResources","deep_merge_dict","modulesAfterConfigLoaded","modulesAfterRuntimeReady","extensions","key","normalizeConfig","toMerge","assertAfterExit","debugLevel","BuildConfiguration","cachedResourcesPurgeDelay","waitForDebugger","startupMemoryCache","enablePerfMeasure","browserProfilerOptions","measure","configLoaded","isDebuggingSupported","isChromium","isFirefox","process","versions","node","ENVIRONMENT_IS_WORKER","importScripts","window","exportedRuntimeAPI","_loaderModuleLoaded","globalObjectsRoot","mono","binding","internal","module","api","condition","messageFactory","message","abort","is_exited","exitCode","is_runtime_running","runtimeReady","assert_runtime_running","exit_code","is_object","ExitStatus","stack","afterConfigLoaded","wasmDownloadPromise","dotnetReady","afterInstantiateWasm","beforePreInit","afterPreInit","afterPreRun","afterOnRuntimeInitialized","afterPostRun","abort_promises","mono_log","stringify_as_error_with_stack","logExitCode","stop_when_ws_buffer_empty","bufferedAmount","logOnExit","appendElementOnExit","tests_done_elem","createElement","background","innerHTML","body","appendChild","jiterpreter_dump_stats","interopCleanupOnExit","forceDisposeProxies","asyncFlushOnExit","flushStream","stream","on","write","stderrFlushed","stderr","stdoutFlushed","stdout","flush_node_streams","set_exit_code_and_quit_now","mono_wasm_exit","exit","quit","globalObjects","disableDotnet6Compatibility","mono_wasm_bindings_is_ready","javaScriptExports","gitHash","loadedFiles","actual_instantiated_assets_count","setLoaderGlobals","monoSymbol","workerMonoConfigReceived","monoConfig","createEmscripten","moduleFactory","extension","ready","minNodeVersion","execPath","scriptUrlQuery","queryIndex","dir","scriptUrl","scriptDirectory","out","brands","userAgentData","some","b","brand","userAgent","mod","createRequire","detect_features_and_polyfill","ENVIRONMENT_IS_PTHREAD","channel","MessageChannel","workerPort","port1","mainPort","port2","forwardConsoleLogsToWS","self","location","href","close","once","start","postMessage","monoCmd","port","setupPreloadChannelToMainThread","prepareAssetsWorker","importModules","es6Modules","initializeModules","createEmscriptenWorker","configSrc","configFilePath","defaultConfigSrc","loaderResponse","defaultLoadBootConfig","loadConfigResponse","loadedConfig","applicationEnvironment","modifiableAssemblies","aspnetCoreBrowserTools","readBootConfigResponse","loadBootConfig","onConfigLoaded","instantiateWasm","errMessage","isError","mono_wasm_load_config","modulesAssets","loadAllSatelliteResources","icuDataResourceName","appsettings","configUrl","configFileName","prepareAssets","cacheBootResources","caches","isSecureContext","cacheName","open","getCacheToUseIfEnabled","initCacheToUseIfEnabled","invariantMode","invariantEnv","hybridEnv","env_variables","timezone","timeZone","init_globalization","createEmscriptenMain","jsModuleRuntimeAsset","jsModuleNativeAsset","jsModuleRuntimePromise","jsModuleNativePromise","initializeExports","initializeReplacements","configureRuntimeStartup","configureEmscriptenStartup","configureWorkerStartup","setRuntimeGlobals","passEmscriptenInternals","default","emscriptenFactory","originalModule","__dotnet_runtime","dotnet","withModuleConfig","moduleConfig","withOnConfigLoaded","withConsoleForwarding","withExitOnUnhandledError","handler","preventDefault","withAsyncFlushOnExit","withExitCodeLogging","withElementOnExit","withInteropCleanupOnExit","withAssertAfterExit","withWaitingForDebugger","level","withStartupMemoryCache","value","withConfig","withConfigSrc","withVirtualWorkingDirectory","vfsPath","virtualWorkingDirectory","withEnvironmentVariable","withEnvironmentVariables","variables","withDiagnosticTracing","enabled","withDebugging","withApplicationArguments","Array","isArray","applicationArguments","withRuntimeOptions","withMainAssembly","mainAssemblyName","withApplicationArgumentsFromQuery","URLSearchParams","search","getAll","withApplicationEnvironment","withApplicationCulture","withResourceLoader","instance","FS","Module","wds","stat","isDir","mode","chdir","create","argv","runMainAndExit","legacyEntrypoint","BigInt64Array"],"mappings":"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","x_google_ignoreList":[0]}
\ No newline at end of file
diff --git a/_framework/dotnet.native.js b/_framework/dotnet.native.js
new file mode 100644
index 00000000..521afde0
--- /dev/null
+++ b/_framework/dotnet.native.js
@@ -0,0 +1,10701 @@
+
+var createDotnetRuntime = (() => {
+ var _scriptDir = import.meta.url;
+
+ return (
+async function(createDotnetRuntime = {}) {
+
+// include: shell.js
+// The Module object: Our interface to the outside world. We import
+// and export values on it. There are various ways Module can be used:
+// 1. Not defined. We create it here
+// 2. A function parameter, function(Module) { ..generated code.. }
+// 3. pre-run appended it, var Module = {}; ..generated code..
+// 4. External script tag defines var Module.
+// We need to check if Module already exists (e.g. case 3 above).
+// Substitution will be replaced with actual code on later stage of the build,
+// this way Closure Compiler will not mangle it (e.g. case 4. above).
+// Note that if you want to run closure, and also to use Module
+// after the generated code, you will need to define var Module = {};
+// before the code. Then that object will be used in the code, and you
+// can continue to use Module afterwards as well.
+var Module = typeof createDotnetRuntime != 'undefined' ? createDotnetRuntime : {};
+
+// Set up the promise that indicates the Module is initialized
+var readyPromiseResolve, readyPromiseReject;
+Module['ready'] = new Promise(function(resolve, reject) {
+ readyPromiseResolve = resolve;
+ readyPromiseReject = reject;
+});
+["_free","_htons","_malloc","_memalign","_memset","_ntohs","stackAlloc","stackRestore","stackSave","_fmod","_atan2","_fma","_pow","_fmodf","_atan2f","_fmaf","_powf","_asin","_asinh","_acos","_acosh","_atan","_atanh","_cbrt","_cos","_cosh","_exp","_log","_log2","_log10","_sin","_sinh","_tan","_tanh","_asinf","_asinhf","_acosf","_acoshf","_atanf","_atanhf","_cbrtf","_cosf","_coshf","_expf","_logf","_log2f","_log10f","_sinf","_sinhf","_tanf","_tanhf","getExceptionMessage","___get_exception_message","___cpp_exception","___cxa_increment_exception_refcount","___cxa_decrement_exception_refcount","___thrown_object_from_unwind_exception","_fflush","_mono_wasm_register_root","_mono_wasm_deregister_root","_mono_wasm_add_assembly","_mono_wasm_add_satellite_assembly","_mono_wasm_setenv","_mono_wasm_getenv","_mono_wasm_load_runtime","_mono_wasm_assembly_load","_mono_wasm_get_corlib","_mono_wasm_assembly_find_class","_mono_wasm_runtime_run_module_cctor","_mono_wasm_assembly_find_method","_mono_wasm_invoke_method_ref","_mono_wasm_invoke_method_bound","_mono_wasm_assembly_get_entry_point","_mono_wasm_string_from_utf16_ref","_mono_wasm_typed_array_new_ref","_mono_wasm_get_delegate_invoke_ref","_mono_wasm_box_primitive_ref","_mono_wasm_get_type_name","_mono_wasm_get_type_aqn","_mono_wasm_try_unbox_primitive_and_get_type_ref","_mono_wasm_array_length_ref","_mono_wasm_array_get_ref","_mono_wasm_obj_array_new_ref","_mono_wasm_obj_array_new","_mono_wasm_obj_array_set","_mono_wasm_obj_array_set_ref","_mono_wasm_string_array_new_ref","_mono_wasm_exec_regression","_mono_wasm_exit","_mono_wasm_abort","_mono_wasm_set_main_args","_mono_wasm_strdup","_mono_wasm_parse_runtime_options","_mono_wasm_enable_on_demand_gc","_mono_wasm_intern_string_ref","_mono_wasm_string_get_data_ref","_mono_wasm_class_get_type","_mono_wasm_write_managed_pointer_unsafe","_mono_wasm_copy_managed_pointer","_mono_wasm_i52_to_f64","_mono_wasm_u52_to_f64","_mono_wasm_f64_to_u52","_mono_wasm_f64_to_i52","_mono_wasm_method_get_full_name","_mono_wasm_method_get_name","_mono_wasm_get_f32_unaligned","_mono_wasm_get_f64_unaligned","_mono_wasm_get_i32_unaligned","_mono_wasm_is_zero_page_reserved","_mono_wasm_set_is_debugger_attached","_mono_wasm_change_debugger_log_level","_mono_wasm_send_dbg_command_with_parms","_mono_wasm_send_dbg_command","_mono_wasm_event_pipe_enable","_mono_wasm_event_pipe_session_start_streaming","_mono_wasm_event_pipe_session_disable","_mono_jiterp_register_jit_call_thunk","_mono_jiterp_stackval_to_data","_mono_jiterp_stackval_from_data","_mono_jiterp_get_arg_offset","_mono_jiterp_overflow_check_i4","_mono_jiterp_overflow_check_u4","_mono_jiterp_ld_delegate_method_ptr","_mono_jiterp_interp_entry","_mono_jiterp_get_polling_required_address","_mono_jiterp_do_safepoint","_mono_jiterp_imethod_to_ftnptr","_mono_jiterp_enum_hasflag","_mono_jiterp_get_simd_intrinsic","_mono_jiterp_get_simd_opcode","_mono_jiterp_get_opcode_info","_jiterp_preserve_module","_mono_jiterp_encode_leb64_ref","_mono_jiterp_encode_leb52","_mono_jiterp_encode_leb_signed_boundary","_mono_jiterp_increase_entry_count","_mono_jiterp_object_unbox","_mono_jiterp_type_is_byref","_mono_jiterp_value_copy","_mono_jiterp_try_newobj_inlined","_mono_jiterp_try_newstr","_mono_jiterp_gettype_ref","_mono_jiterp_has_parent_fast","_mono_jiterp_implements_interface","_mono_jiterp_is_special_interface","_mono_jiterp_implements_special_interface","_mono_jiterp_cast_v2","_mono_jiterp_localloc","_mono_jiterp_ldtsflda","_mono_jiterp_box_ref","_mono_jiterp_conv","_mono_jiterp_relop_fp","_mono_jiterp_get_size_of_stackval","_mono_jiterp_type_get_raw_value_size","_mono_jiterp_trace_bailout","_mono_jiterp_get_trace_bailout_count","_mono_jiterp_adjust_abort_count","_mono_jiterp_interp_entry_prologue","_mono_jiterp_cas_i32","_mono_jiterp_cas_i64","_mono_jiterp_get_opcode_value_table_entry","_mono_jiterp_get_trace_hit_count","_mono_jiterp_parse_option","_mono_jiterp_get_options_version","_mono_jiterp_get_options_as_json","_mono_jiterp_update_jit_call_dispatcher","_mono_jiterp_object_has_component_size","_mono_jiterp_get_hashcode","_mono_jiterp_try_get_hashcode","_mono_jiterp_get_signature_has_this","_mono_jiterp_get_signature_return_type","_mono_jiterp_get_signature_param_count","_mono_jiterp_get_signature_params","_mono_jiterp_type_to_ldind","_mono_jiterp_type_to_stind","_mono_jiterp_get_array_rank","_mono_jiterp_get_array_element_size","_mono_jiterp_set_object_field","_mono_jiterp_debug_count","_mono_jiterp_stelem_ref","_mono_jiterp_trace_transfer","_mono_jiterp_get_member_offset","_mono_jiterp_write_number_unaligned","_mono_jiterp_get_rejected_trace_count","_mono_jiterp_boost_back_branch_target","_mono_jiterp_is_imethod_var_address_taken","_mono_background_exec","_mono_wasm_gc_lock","_mono_wasm_gc_unlock","_mono_print_method_from_ip","_mono_wasm_execute_timer","_mono_wasm_load_icu_data","onRuntimeInitialized"].forEach((prop) => {
+ if (!Object.getOwnPropertyDescriptor(Module['ready'], prop)) {
+ Object.defineProperty(Module['ready'], prop, {
+ get: () => abort('You are getting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),
+ set: () => abort('You are setting ' + prop + ' on the Promise object, instead of the instance. Use .then() to get called back with the instance, see the MODULARIZE docs in src/settings.js'),
+ });
+ }
+});
+
+// --pre-jses are emitted after the Module integration code, so that they can
+// refer to Module (if they choose; they can also define Module)
+if (_nativeModuleLoaded) throw new Error("Native module already loaded");
+_nativeModuleLoaded = true;
+createDotnetRuntime = Module = createDotnetRuntime(Module);
+Module["getWasmIndirectFunctionTable"] = function () { return wasmTable; }
+Module["getMemory"] = function () { return wasmMemory; }
+
+
+
+// Sometimes an existing Module object exists with properties
+// meant to overwrite the default module functionality. Here
+// we collect those properties and reapply _after_ we configure
+// the current environment's defaults to avoid having to be so
+// defensive during initialization.
+var moduleOverrides = Object.assign({}, Module);
+
+var arguments_ = [];
+var thisProgram = './this.program';
+var quit_ = (status, toThrow) => {
+ throw toThrow;
+};
+
+// Determine the runtime environment we are in. You can customize this by
+// setting the ENVIRONMENT setting at compile time (see settings.js).
+
+// Attempt to auto-detect the environment
+var ENVIRONMENT_IS_WEB = typeof window == 'object';
+var ENVIRONMENT_IS_WORKER = typeof importScripts == 'function';
+// N.b. Electron.js environment is simultaneously a NODE-environment, but
+// also a web environment.
+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;
+
+if (Module['ENVIRONMENT']) {
+ throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)');
+}
+
+// `/` should be present at the end if `scriptDirectory` is not empty
+var scriptDirectory = '';
+function locateFile(path) {
+ if (Module['locateFile']) {
+ return Module['locateFile'](path, scriptDirectory);
+ }
+ return scriptDirectory + path;
+}
+
+// Hooks that are implemented differently in different runtime environments.
+var read_,
+ readAsync,
+ readBinary,
+ setWindowTitle;
+
+if (ENVIRONMENT_IS_NODE) {
+ if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
+
+ var nodeVersion = process.versions.node;
+ var numericVersion = nodeVersion.split('.').slice(0, 3);
+ numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + numericVersion[2] * 1;
+ var minVersion = 101900;
+ if (numericVersion < 101900) {
+ throw new Error('This emscripten-generated code requires node v10.19.19.0 (detected v' + nodeVersion + ')');
+ }
+
+ // `require()` is no-op in an ESM module, use `createRequire()` to construct
+ // the require()` function. This is only necessary for multi-environment
+ // builds, `-sENVIRONMENT=node` emits a static import declaration instead.
+ // TODO: Swap all `require()`'s with `import()`'s?
+ const { createRequire } = await import('module');
+ /** @suppress{duplicate} */
+ var require = createRequire(import.meta.url);
+ // These modules will usually be used on Node.js. Load them eagerly to avoid
+ // the complexity of lazy-loading.
+ var fs = require('fs');
+ var nodePath = require('path');
+
+ if (ENVIRONMENT_IS_WORKER) {
+ scriptDirectory = nodePath.dirname(scriptDirectory) + '/';
+ } else {
+ // EXPORT_ES6 + ENVIRONMENT_IS_NODE always requires use of import.meta.url,
+ // since there's no way getting the current absolute path of the module when
+ // support for that is not available.
+ scriptDirectory = require('url').fileURLToPath(new URL('./', import.meta.url)); // includes trailing slash
+ }
+
+// include: node_shell_read.js
+read_ = (filename, binary) => {
+ // We need to re-wrap `file://` strings to URLs. Normalizing isn't
+ // necessary in that case, the path should already be absolute.
+ 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);
+ }
+ assert(ret.buffer);
+ return ret;
+};
+
+readAsync = (filename, onload, onerror) => {
+ // See the comment in the `read_` function.
+ filename = isFileURI(filename) ? new URL(filename) : nodePath.normalize(filename);
+ fs.readFile(filename, function(err, data) {
+ if (err) onerror(err);
+ else onload(data.buffer);
+ });
+};
+
+// end include: node_shell_read.js
+ if (process.argv.length > 1) {
+ thisProgram = process.argv[1].replace(/\\/g, '/');
+ }
+
+ arguments_ = process.argv.slice(2);
+
+ // MODULARIZE will export the module in the proper place outside, we don't need to export here
+
+ quit_ = (status, toThrow) => {
+ process.exitCode = status;
+ throw toThrow;
+ };
+
+ Module['inspect'] = function () { return '[Emscripten Module object]'; };
+
+} else
+if (ENVIRONMENT_IS_SHELL) {
+
+ if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof importScripts == 'function') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
+
+ if (typeof read != 'undefined') {
+ read_ = function shell_read(f) {
+ return read(f);
+ };
+ }
+
+ readBinary = function readBinary(f) {
+ let data;
+ if (typeof readbuffer == 'function') {
+ return new Uint8Array(readbuffer(f));
+ }
+ data = read(f, 'binary');
+ assert(typeof data == 'object');
+ return data;
+ };
+
+ readAsync = function readAsync(f, onload, onerror) {
+ setTimeout(() => onload(readBinary(f)), 0);
+ };
+
+ if (typeof clearTimeout == 'undefined') {
+ globalThis.clearTimeout = (id) => {};
+ }
+
+ if (typeof scriptArgs != 'undefined') {
+ arguments_ = scriptArgs;
+ } else if (typeof arguments != 'undefined') {
+ arguments_ = arguments;
+ }
+
+ if (typeof quit == 'function') {
+ quit_ = (status, toThrow) => {
+ // Unlike node which has process.exitCode, d8 has no such mechanism. So we
+ // have no way to set the exit code and then let the program exit with
+ // that code when it naturally stops running (say, when all setTimeouts
+ // have completed). For that reason, we must call `quit` - the only way to
+ // set the exit code - but quit also halts immediately. To increase
+ // consistency with node (and the web) we schedule the actual quit call
+ // using a setTimeout to give the current stack and any exception handlers
+ // a chance to run. This enables features such as addOnPostRun (which
+ // expected to be able to run code after main returns).
+ 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') {
+ // Prefer to use print/printErr where they exist, as they usually work better.
+ if (typeof console == 'undefined') console = /** @type{!Console} */({});
+ console.log = /** @type{!function(this:Console, ...*): undefined} */ (print);
+ console.warn = console.error = /** @type{!function(this:Console, ...*): undefined} */ (typeof printErr != 'undefined' ? printErr : print);
+ }
+
+} else
+
+// Note that this includes Node.js workers when relevant (pthreads is enabled).
+// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and
+// ENVIRONMENT_IS_NODE.
+if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
+ if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled
+ scriptDirectory = self.location.href;
+ } else if (typeof document != 'undefined' && document.currentScript) { // web
+ scriptDirectory = document.currentScript.src;
+ }
+ // When MODULARIZE, this JS may be executed later, after document.currentScript
+ // is gone, so we saved it, and we use it here instead of any other info.
+ if (_scriptDir) {
+ scriptDirectory = _scriptDir;
+ }
+ // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them.
+ // otherwise, slice off the final part of the url to find the script directory.
+ // if scriptDirectory does not contain a slash, lastIndexOf will return -1,
+ // and scriptDirectory will correctly be replaced with an empty string.
+ // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #),
+ // they are removed because they could contain a slash.
+ if (scriptDirectory.indexOf('blob:') !== 0) {
+ scriptDirectory = scriptDirectory.substr(0, scriptDirectory.replace(/[?#].*/, "").lastIndexOf('/')+1);
+ } else {
+ scriptDirectory = '';
+ }
+
+ if (!(typeof window == 'object' || typeof importScripts == 'function')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)');
+
+ // Differentiate the Web Worker from the Node Worker case, as reading must
+ // be done differently.
+ {
+// include: web_or_worker_shell_read.js
+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(/** @type{!ArrayBuffer} */(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)) { // file URLs can return 0
+ onload(xhr.response);
+ return;
+ }
+ onerror();
+ };
+ xhr.onerror = onerror;
+ xhr.send(null);
+ }
+
+// end include: web_or_worker_shell_read.js
+ }
+
+ setWindowTitle = (title) => document.title = title;
+} else
+{
+ throw new Error('environment detection error');
+}
+
+var out = Module['print'] || console.log.bind(console);
+var err = Module['printErr'] || console.warn.bind(console);
+
+// Merge back in the overrides
+Object.assign(Module, moduleOverrides);
+// Free the object hierarchy contained in the overrides, this lets the GC
+// reclaim data used e.g. in memoryInitializerRequest, which is a large typed array.
+moduleOverrides = null;
+checkIncomingModuleAPI();
+
+// Emit code to handle expected values on the Module object. This applies Module.x
+// to the proper local x. This has two benefits: first, we only emit it if it is
+// expected to arrive, and second, by using a local everywhere else that can be
+// minified.
+
+if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_');
+
+if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram');
+
+if (Module['quit']) quit_ = Module['quit'];legacyModuleProp('quit', 'quit_');
+
+// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message
+// Assertions on removed incoming Module JS APIs.
+assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead');
+assert(typeof Module['read'] == 'undefined', 'Module.read option was removed (modify read_ in JS)');
+assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)');
+assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)');
+assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify setWindowTitle in JS)');
+assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY');
+legacyModuleProp('read', 'read_');
+legacyModuleProp('readAsync', 'readAsync');
+legacyModuleProp('readBinary', 'readBinary');
+legacyModuleProp('setWindowTitle', 'setWindowTitle');
+var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js';
+var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js';
+var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js';
+var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js';
+
+
+// end include: shell.js
+// include: preamble.js
+// === Preamble library stuff ===
+
+// Documentation for the public APIs defined in this file must be updated in:
+// site/source/docs/api_reference/preamble.js.rst
+// A prebuilt local version of the documentation is available at:
+// site/build/text/docs/api_reference/preamble.js.txt
+// You can also build docs locally as HTML or other formats in site/
+// An online HTML version (which may be of a different version of Emscripten)
+// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html
+
+var wasmBinary;
+if (Module['wasmBinary']) wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary');
+var noExitRuntime = Module['noExitRuntime'] || true;legacyModuleProp('noExitRuntime', 'noExitRuntime');
+
+if (typeof WebAssembly != 'object') {
+ abort('no native wasm support detected');
+}
+
+// Wasm globals
+
+var wasmMemory;
+
+//========================================
+// Runtime essentials
+//========================================
+
+// whether we are quitting the application. no code should run after this.
+// set in exit() and abort()
+var ABORT = false;
+
+// set by exit() and abort(). Passed to 'onExit' handler.
+// NOTE: This is also used as the process return code code in shell environments
+// but only when noExitRuntime is false.
+var EXITSTATUS;
+
+/** @type {function(*, string=)} */
+function assert(condition, text) {
+ if (!condition) {
+ abort('Assertion failed' + (text ? ': ' + text : ''));
+ }
+}
+
+// We used to include malloc/free by default in the past. Show a helpful error in
+// builds with assertions.
+
+// include: runtime_strings.js
+// runtime_strings.js: String related runtime functions that are part of both
+// MINIMAL_RUNTIME and regular runtime.
+
+var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder('utf8') : undefined;
+
+/**
+ * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given
+ * array that contains uint8 values, returns a copy of that string as a
+ * Javascript String object.
+ * heapOrArray is either a regular array, or a JavaScript typed array view.
+ * @param {number} idx
+ * @param {number=} maxBytesToRead
+ * @return {string}
+ */
+function UTF8ArrayToString(heapOrArray, idx, maxBytesToRead) {
+ var endIdx = idx + maxBytesToRead;
+ var endPtr = idx;
+ // TextDecoder needs to know the byte length in advance, it doesn't stop on
+ // null terminator by itself. Also, use the length info to avoid running tiny
+ // strings through TextDecoder, since .subarray() allocates garbage.
+ // (As a tiny code save trick, compare endPtr against endIdx using a negation,
+ // so that undefined means Infinity)
+ while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr;
+
+ if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) {
+ return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr));
+ }
+ var str = '';
+ // If building with TextDecoder, we have already computed the string length
+ // above, so test loop end condition against that
+ while (idx < endPtr) {
+ // For UTF8 byte structure, see:
+ // http://en.wikipedia.org/wiki/UTF-8#Description
+ // https://www.ietf.org/rfc/rfc2279.txt
+ // https://tools.ietf.org/html/rfc3629
+ var u0 = heapOrArray[idx++];
+ if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; }
+ var u1 = heapOrArray[idx++] & 63;
+ if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; }
+ var u2 = heapOrArray[idx++] & 63;
+ if ((u0 & 0xF0) == 0xE0) {
+ u0 = ((u0 & 15) << 12) | (u1 << 6) | u2;
+ } else {
+ if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!');
+ u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63);
+ }
+
+ if (u0 < 0x10000) {
+ str += String.fromCharCode(u0);
+ } else {
+ var ch = u0 - 0x10000;
+ str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF));
+ }
+ }
+ return str;
+}
+
+/**
+ * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the
+ * emscripten HEAP, returns a copy of that string as a Javascript String object.
+ *
+ * @param {number} ptr
+ * @param {number=} maxBytesToRead - An optional length that specifies the
+ * maximum number of bytes to read. You can omit this parameter to scan the
+ * string until the first \0 byte. If maxBytesToRead is passed, and the string
+ * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the
+ * string will cut short at that byte index (i.e. maxBytesToRead will not
+ * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing
+ * frequent uses of UTF8ToString() with and without maxBytesToRead may throw
+ * JS JIT optimizations off, so it is worth to consider consistently using one
+ * @return {string}
+ */
+function UTF8ToString(ptr, maxBytesToRead) {
+ assert(typeof ptr == 'number');
+ return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : '';
+}
+
+/**
+ * Copies the given Javascript String object 'str' to the given byte array at
+ * address 'outIdx', encoded in UTF8 form and null-terminated. The copy will
+ * require at most str.length*4+1 bytes of space in the HEAP. Use the function
+ * lengthBytesUTF8 to compute the exact number of bytes (excluding null
+ * terminator) that this function will write.
+ *
+ * @param {string} str - The Javascript string to copy.
+ * @param {ArrayBufferView|Array} heap - The array to copy to. Each
+ * index in this array is assumed
+ * to be one 8-byte element.
+ * @param {number} outIdx - The starting offset in the array to begin the copying.
+ * @param {number} maxBytesToWrite - The maximum number of bytes this function
+ * can write to the array. This count should
+ * include the null terminator, i.e. if
+ * maxBytesToWrite=1, only the null terminator
+ * will be written and nothing else.
+ * maxBytesToWrite=0 does not write any bytes
+ * to the output, not even the null
+ * terminator.
+ * @return {number} The number of bytes written, EXCLUDING the null terminator.
+ */
+function stringToUTF8Array(str, heap, outIdx, maxBytesToWrite) {
+ // Parameter maxBytesToWrite is not optional. Negative values, 0, null,
+ // undefined and false each don't write out any bytes.
+ if (!(maxBytesToWrite > 0))
+ return 0;
+
+ var startIdx = outIdx;
+ var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator.
+ for (var i = 0; i < str.length; ++i) {
+ // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
+ // unit, not a Unicode code point of the character! So decode
+ // UTF16->UTF32->UTF8.
+ // See http://unicode.org/faq/utf_bom.html#utf16-3
+ // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description
+ // and https://www.ietf.org/rfc/rfc2279.txt
+ // and https://tools.ietf.org/html/rfc3629
+ var u = str.charCodeAt(i); // possibly a lead surrogate
+ if (u >= 0xD800 && u <= 0xDFFF) {
+ var u1 = str.charCodeAt(++i);
+ u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF);
+ }
+ if (u <= 0x7F) {
+ if (outIdx >= endIdx) break;
+ heap[outIdx++] = u;
+ } else if (u <= 0x7FF) {
+ if (outIdx + 1 >= endIdx) break;
+ heap[outIdx++] = 0xC0 | (u >> 6);
+ heap[outIdx++] = 0x80 | (u & 63);
+ } else if (u <= 0xFFFF) {
+ if (outIdx + 2 >= endIdx) break;
+ heap[outIdx++] = 0xE0 | (u >> 12);
+ heap[outIdx++] = 0x80 | ((u >> 6) & 63);
+ heap[outIdx++] = 0x80 | (u & 63);
+ } else {
+ if (outIdx + 3 >= endIdx) break;
+ if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).');
+ heap[outIdx++] = 0xF0 | (u >> 18);
+ heap[outIdx++] = 0x80 | ((u >> 12) & 63);
+ heap[outIdx++] = 0x80 | ((u >> 6) & 63);
+ heap[outIdx++] = 0x80 | (u & 63);
+ }
+ }
+ // Null-terminate the pointer to the buffer.
+ heap[outIdx] = 0;
+ return outIdx - startIdx;
+}
+
+/**
+ * Copies the given Javascript String object 'str' to the emscripten HEAP at
+ * address 'outPtr', null-terminated and encoded in UTF8 form. The copy will
+ * require at most str.length*4+1 bytes of space in the HEAP.
+ * Use the function lengthBytesUTF8 to compute the exact number of bytes
+ * (excluding null terminator) that this function will write.
+ *
+ * @return {number} The number of bytes written, EXCLUDING the null terminator.
+ */
+function stringToUTF8(str, outPtr, maxBytesToWrite) {
+ assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!');
+ return stringToUTF8Array(str, HEAPU8,outPtr, maxBytesToWrite);
+}
+
+/**
+ * Returns the number of bytes the given Javascript string takes if encoded as a
+ * UTF8 byte array, EXCLUDING the null terminator byte.
+ *
+ * @param {string} str - JavaScript string to operator on
+ * @return {number} Length, in bytes, of the UTF8 encoded string.
+ */
+function lengthBytesUTF8(str) {
+ var len = 0;
+ for (var i = 0; i < str.length; ++i) {
+ // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code
+ // unit, not a Unicode code point of the character! So decode
+ // UTF16->UTF32->UTF8.
+ // See http://unicode.org/faq/utf_bom.html#utf16-3
+ var c = str.charCodeAt(i); // possibly a lead surrogate
+ if (c <= 0x7F) {
+ len++;
+ } else if (c <= 0x7FF) {
+ len += 2;
+ } else if (c >= 0xD800 && c <= 0xDFFF) {
+ len += 4; ++i;
+ } else {
+ len += 3;
+ }
+ }
+ return len;
+}
+
+// end include: runtime_strings.js
+// Memory management
+
+var HEAP,
+/** @type {!Int8Array} */
+ HEAP8,
+/** @type {!Uint8Array} */
+ HEAPU8,
+/** @type {!Int16Array} */
+ HEAP16,
+/** @type {!Uint16Array} */
+ HEAPU16,
+/** @type {!Int32Array} */
+ HEAP32,
+/** @type {!Uint32Array} */
+ HEAPU32,
+/** @type {!Float32Array} */
+ HEAPF32,
+/* BigInt64Array type is not correctly defined in closure
+/** not-@type {!BigInt64Array} */
+ HEAP64,
+/* BigUInt64Array type is not correctly defined in closure
+/** not-t@type {!BigUint64Array} */
+ HEAPU64,
+/** @type {!Float64Array} */
+ HEAPF64;
+
+function updateMemoryViews() {
+ var b = wasmMemory.buffer;
+ Module['HEAP8'] = HEAP8 = new Int8Array(b);
+ Module['HEAP16'] = HEAP16 = new Int16Array(b);
+ Module['HEAP32'] = HEAP32 = new Int32Array(b);
+ Module['HEAPU8'] = HEAPU8 = new Uint8Array(b);
+ Module['HEAPU16'] = HEAPU16 = new Uint16Array(b);
+ Module['HEAPU32'] = HEAPU32 = new Uint32Array(b);
+ Module['HEAPF32'] = HEAPF32 = new Float32Array(b);
+ Module['HEAPF64'] = HEAPF64 = new Float64Array(b);
+ Module['HEAP64'] = HEAP64 = new BigInt64Array(b);
+ Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b);
+}
+
+assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time')
+
+assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined,
+ 'JS engine does not provide full typed array support');
+
+// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY
+assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally');
+assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically');
+
+// include: runtime_init_table.js
+// In regular non-RELOCATABLE mode the table is exported
+// from the wasm module and this will be assigned once
+// the exports are available.
+var wasmTable;
+
+// end include: runtime_init_table.js
+// include: runtime_stack_check.js
+// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode.
+function writeStackCookie() {
+ var max = _emscripten_stack_get_end();
+ assert((max & 3) == 0);
+ // If the stack ends at address zero we write our cookies 4 bytes into the
+ // stack. This prevents interference with the (separate) address-zero check
+ // below.
+ if (max == 0) {
+ max += 4;
+ }
+ // The stack grow downwards towards _emscripten_stack_get_end.
+ // We write cookies to the final two words in the stack and detect if they are
+ // ever overwritten.
+ HEAPU32[((max)>>2)] = 0x02135467;
+ HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE;
+ // Also test the global address 0 for integrity.
+ HEAPU32[0] = 0x63736d65; /* 'emsc' */
+}
+
+function checkStackCookie() {
+ if (ABORT) return;
+ var max = _emscripten_stack_get_end();
+ // See writeStackCookie().
+ if (max == 0) {
+ max += 4;
+ }
+ var cookie1 = HEAPU32[((max)>>2)];
+ var cookie2 = HEAPU32[(((max)+(4))>>2)];
+ if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) {
+ abort('Stack overflow! Stack cookie has been overwritten at ' + ptrToString(max) + ', expected hex dwords 0x89BACDFE and 0x2135467, but received ' + ptrToString(cookie2) + ' ' + ptrToString(cookie1));
+ }
+ // Also test the global address 0 for integrity.
+ if (HEAPU32[0] !== 0x63736d65 /* 'emsc' */) {
+ abort('Runtime error: The application has corrupted its heap memory area (address zero)!');
+ }
+}
+
+// end include: runtime_stack_check.js
+// include: runtime_assertions.js
+// Endianness check
+(function() {
+ var h16 = new Int16Array(1);
+ var h8 = new Int8Array(h16.buffer);
+ h16[0] = 0x6373;
+ if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)';
+})();
+
+// end include: runtime_assertions.js
+var __ATPRERUN__ = []; // functions called before the runtime is initialized
+var __ATINIT__ = []; // functions called during startup
+var __ATEXIT__ = []; // functions called during shutdown
+var __ATPOSTRUN__ = []; // functions called after the main() is called
+
+var runtimeInitialized = false;
+
+var runtimeKeepaliveCounter = 0;
+
+function keepRuntimeAlive() {
+ return noExitRuntime || runtimeKeepaliveCounter > 0;
+}
+
+function preRun() {
+ if (Module['preRun']) {
+ if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']];
+ while (Module['preRun'].length) {
+ addOnPreRun(Module['preRun'].shift());
+ }
+ }
+ callRuntimeCallbacks(__ATPRERUN__);
+}
+
+function initRuntime() {
+ assert(!runtimeInitialized);
+ runtimeInitialized = true;
+
+ checkStackCookie();
+
+
+if (!Module["noFSInit"] && !FS.init.initialized)
+ FS.init();
+FS.ignorePermissions = false;
+
+TTY.init();
+SOCKFS.root = FS.mount(SOCKFS, {}, null);
+ callRuntimeCallbacks(__ATINIT__);
+}
+
+function postRun() {
+ checkStackCookie();
+
+ if (Module['postRun']) {
+ if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']];
+ while (Module['postRun'].length) {
+ addOnPostRun(Module['postRun'].shift());
+ }
+ }
+
+ callRuntimeCallbacks(__ATPOSTRUN__);
+}
+
+function addOnPreRun(cb) {
+ __ATPRERUN__.unshift(cb);
+}
+
+function addOnInit(cb) {
+ __ATINIT__.unshift(cb);
+}
+
+function addOnExit(cb) {
+}
+
+function addOnPostRun(cb) {
+ __ATPOSTRUN__.unshift(cb);
+}
+
+// include: runtime_math.js
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/fround
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/clz32
+
+// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/trunc
+
+assert(Math.imul, 'This browser does not support Math.imul(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
+assert(Math.fround, 'This browser does not support Math.fround(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
+assert(Math.clz32, 'This browser does not support Math.clz32(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
+assert(Math.trunc, 'This browser does not support Math.trunc(), build with LEGACY_VM_SUPPORT or POLYFILL_OLD_MATH_FUNCTIONS to add in a polyfill');
+
+// end include: runtime_math.js
+// A counter of dependencies for calling run(). If we need to
+// do asynchronous work before running, increment this and
+// decrement it. Incrementing must happen in a place like
+// Module.preRun (used by emcc to add file preloading).
+// Note that you can add dependencies in preRun, even though
+// it happens right before run - run will be postponed until
+// the dependencies are met.
+var runDependencies = 0;
+var runDependencyWatcher = null;
+var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled
+var runDependencyTracking = {};
+
+function getUniqueRunDependency(id) {
+ var orig = id;
+ while (1) {
+ if (!runDependencyTracking[id]) return id;
+ id = orig + Math.random();
+ }
+}
+
+function addRunDependency(id) {
+ runDependencies++;
+
+ if (Module['monitorRunDependencies']) {
+ Module['monitorRunDependencies'](runDependencies);
+ }
+
+ if (id) {
+ assert(!runDependencyTracking[id]);
+ runDependencyTracking[id] = 1;
+ if (runDependencyWatcher === null && typeof setInterval != 'undefined') {
+ // Check for missing dependencies every few seconds
+ runDependencyWatcher = setInterval(function() {
+ if (ABORT) {
+ clearInterval(runDependencyWatcher);
+ runDependencyWatcher = null;
+ return;
+ }
+ var shown = false;
+ for (var dep in runDependencyTracking) {
+ if (!shown) {
+ shown = true;
+ err('still waiting on run dependencies:');
+ }
+ err('dependency: ' + dep);
+ }
+ if (shown) {
+ err('(end of list)');
+ }
+ }, 10000);
+ }
+ } else {
+ err('warning: run dependency added without ID');
+ }
+}
+
+function removeRunDependency(id) {
+ runDependencies--;
+
+ if (Module['monitorRunDependencies']) {
+ Module['monitorRunDependencies'](runDependencies);
+ }
+
+ if (id) {
+ assert(runDependencyTracking[id]);
+ delete runDependencyTracking[id];
+ } else {
+ err('warning: run dependency removed without ID');
+ }
+ if (runDependencies == 0) {
+ if (runDependencyWatcher !== null) {
+ clearInterval(runDependencyWatcher);
+ runDependencyWatcher = null;
+ }
+ if (dependenciesFulfilled) {
+ var callback = dependenciesFulfilled;
+ dependenciesFulfilled = null;
+ callback(); // can add another dependenciesFulfilled
+ }
+ }
+}
+
+/** @param {string|number=} what */
+function abort(what) {
+ if (Module['onAbort']) {
+ Module['onAbort'](what);
+ }
+
+ what = 'Aborted(' + what + ')';
+ // TODO(sbc): Should we remove printing and leave it up to whoever
+ // catches the exception?
+ err(what);
+
+ ABORT = true;
+ EXITSTATUS = 1;
+
+ // Use a wasm runtime error, because a JS error might be seen as a foreign
+ // exception, which means we'd run destructors on it. We need the error to
+ // simply make the program stop.
+ // FIXME This approach does not work in Wasm EH because it currently does not assume
+ // all RuntimeErrors are from traps; it decides whether a RuntimeError is from
+ // a trap or not based on a hidden field within the object. So at the moment
+ // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that
+ // allows this in the wasm spec.
+
+ // Suppress closure compiler warning here. Closure compiler's builtin extern
+ // defintion for WebAssembly.RuntimeError claims it takes no arguments even
+ // though it can.
+ // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed.
+ // See above, in the meantime, we resort to wasm code for trapping.
+ //
+ // In case abort() is called before the module is initialized, Module['asm']
+ // and its exported '__trap' function is not available, in which case we throw
+ // a RuntimeError.
+ //
+ // We trap instead of throwing RuntimeError to prevent infinite-looping in
+ // Wasm EH code (because RuntimeError is considered as a foreign exception and
+ // caught by 'catch_all'), but in case throwing RuntimeError is fine because
+ // the module has not even been instantiated, even less running.
+ if (runtimeInitialized) {
+ ___trap();
+ }
+ /** @suppress {checkTypes} */
+ var e = new WebAssembly.RuntimeError(what);
+
+ readyPromiseReject(e);
+ // Throw the error whether or not MODULARIZE is set because abort is used
+ // in code paths apart from instantiation where an exception is expected
+ // to be thrown when abort is called.
+ throw e;
+}
+
+// include: memoryprofiler.js
+// end include: memoryprofiler.js
+// include: URIUtils.js
+// Prefix of data URIs emitted by SINGLE_FILE and related options.
+var dataURIPrefix = 'data:application/octet-stream;base64,';
+
+// Indicates whether filename is a base64 data URI.
+function isDataURI(filename) {
+ // Prefix of data URIs emitted by SINGLE_FILE and related options.
+ return filename.startsWith(dataURIPrefix);
+}
+
+// Indicates whether filename is delivered via file protocol (as opposed to http/https)
+function isFileURI(filename) {
+ return filename.startsWith('file://');
+}
+
+// end include: URIUtils.js
+/** @param {boolean=} fixedasm */
+function createExportWrapper(name, fixedasm) {
+ return function() {
+ var displayName = name;
+ var asm = fixedasm;
+ if (!fixedasm) {
+ asm = Module['asm'];
+ }
+ assert(runtimeInitialized, 'native function `' + displayName + '` called before runtime initialization');
+ if (!asm[name]) {
+ assert(asm[name], 'exported native function `' + displayName + '` not found');
+ }
+ return asm[name].apply(null, arguments);
+ };
+}
+
+// include: runtime_exceptions.js
+// end include: runtime_exceptions.js
+var wasmBinaryFile;
+if (Module['locateFile']) {
+ wasmBinaryFile = 'dotnet.native.wasm';
+ if (!isDataURI(wasmBinaryFile)) {
+ wasmBinaryFile = locateFile(wasmBinaryFile);
+ }
+} else {
+ // Use bundler-friendly `new URL(..., import.meta.url)` pattern; works in browsers too.
+ wasmBinaryFile = new URL('dotnet.native.wasm', import.meta.url).href;
+}
+
+function getBinary(file) {
+ try {
+ if (file == wasmBinaryFile && wasmBinary) {
+ return new Uint8Array(wasmBinary);
+ }
+ if (readBinary) {
+ return readBinary(file);
+ }
+ throw "both async and sync fetching of the wasm failed";
+ }
+ catch (err) {
+ abort(err);
+ }
+}
+
+function getBinaryPromise(binaryFile) {
+ // If we don't have the binary yet, try to to load it asynchronously.
+ // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url.
+ // See https://github.com/github/fetch/pull/92#issuecomment-140665932
+ // Cordova or Electron apps are typically loaded from a file:// url.
+ // So use fetch if it is available and the url is not a file, otherwise fall back to XHR.
+ if (!wasmBinary && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER)) {
+ if (typeof fetch == 'function'
+ && !isFileURI(binaryFile)
+ ) {
+ return fetch(binaryFile, { credentials: 'same-origin' }).then(function(response) {
+ if (!response['ok']) {
+ throw "failed to load wasm binary file at '" + binaryFile + "'";
+ }
+ return response['arrayBuffer']();
+ }).catch(function () {
+ return getBinary(binaryFile);
+ });
+ }
+ else {
+ if (readAsync) {
+ // fetch is not available or url is file => try XHR (readAsync uses XHR internally)
+ return new Promise(function(resolve, reject) {
+ readAsync(binaryFile, function(response) { resolve(new Uint8Array(/** @type{!ArrayBuffer} */(response))) }, reject)
+ });
+ }
+ }
+ }
+
+ // Otherwise, getBinary should be able to get it synchronously
+ return Promise.resolve().then(function() { return getBinary(binaryFile); });
+}
+
+function instantiateArrayBuffer(binaryFile, imports, receiver) {
+ return getBinaryPromise(binaryFile).then(function(binary) {
+ return WebAssembly.instantiate(binary, imports);
+ }).then(function (instance) {
+ return instance;
+ }).then(receiver, function(reason) {
+ err('failed to asynchronously prepare wasm: ' + reason);
+
+ // Warn on some common problems.
+ if (isFileURI(wasmBinaryFile)) {
+ err('warning: Loading from a file URI (' + wasmBinaryFile + ') is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing');
+ }
+ abort(reason);
+ });
+}
+
+function instantiateAsync(binary, binaryFile, imports, callback) {
+ if (!binary &&
+ typeof WebAssembly.instantiateStreaming == 'function' &&
+ !isDataURI(binaryFile) &&
+ // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously.
+ !isFileURI(binaryFile) &&
+ // Avoid instantiateStreaming() on Node.js environment for now, as while
+ // Node.js v18.1.0 implements it, it does not have a full fetch()
+ // implementation yet.
+ //
+ // Reference:
+ // https://github.com/emscripten-core/emscripten/pull/16917
+ !ENVIRONMENT_IS_NODE &&
+ typeof fetch == 'function') {
+ return fetch(binaryFile, { credentials: 'same-origin' }).then(function(response) {
+ // Suppress closure warning here since the upstream definition for
+ // instantiateStreaming only allows Promise rather than
+ // an actual Response.
+ // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure is fixed.
+ /** @suppress {checkTypes} */
+ var result = WebAssembly.instantiateStreaming(response, imports);
+
+ return result.then(
+ callback,
+ function(reason) {
+ // We expect the most common failure cause to be a bad MIME type for the binary,
+ // in which case falling back to ArrayBuffer instantiation should work.
+ err('wasm streaming compile failed: ' + reason);
+ err('falling back to ArrayBuffer instantiation');
+ return instantiateArrayBuffer(binaryFile, imports, callback);
+ });
+ });
+ } else {
+ return instantiateArrayBuffer(binaryFile, imports, callback);
+ }
+}
+
+// Create the wasm instance.
+// Receives the wasm imports, returns the exports.
+function createWasm() {
+ // prepare imports
+ var info = {
+ 'env': wasmImports,
+ 'wasi_snapshot_preview1': wasmImports,
+ };
+ // Load the wasm module and create an instance of using native support in the JS engine.
+ // handle a generated wasm instance, receiving its exports and
+ // performing other necessary setup
+ /** @param {WebAssembly.Module=} module*/
+ function receiveInstance(instance, module) {
+ var exports = instance.exports;
+
+ Module['asm'] = exports;
+
+ wasmMemory = Module['asm']['memory'];
+ assert(wasmMemory, "memory not found in wasm exports");
+ // This assertion doesn't hold when emscripten is run in --post-link
+ // mode.
+ // TODO(sbc): Read INITIAL_MEMORY out of the wasm file in post-link mode.
+ //assert(wasmMemory.buffer.byteLength === 40763392);
+ updateMemoryViews();
+
+ wasmTable = Module['asm']['__indirect_function_table'];
+ assert(wasmTable, "table not found in wasm exports");
+
+ addOnInit(Module['asm']['__wasm_call_ctors']);
+
+ removeRunDependency('wasm-instantiate');
+
+ return exports;
+ }
+ // wait for the pthread pool (if any)
+ addRunDependency('wasm-instantiate');
+
+ // Prefer streaming instantiation if available.
+ // Async compilation can be confusing when an error on the page overwrites Module
+ // (for example, if the order of elements is wrong, and the one defining Module is
+ // later), so we save Module and check it later.
+ var trueModule = Module;
+ function receiveInstantiationResult(result) {
+ // 'result' is a ResultObject object which has both the module and instance.
+ // receiveInstance() will swap in the exports (to Module.asm) so they can be called
+ assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?');
+ trueModule = null;
+ // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line.
+ // When the regression is fixed, can restore the above PTHREADS-enabled path.
+ receiveInstance(result['instance']);
+ }
+
+ // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback
+ // to manually instantiate the Wasm module themselves. This allows pages to run the instantiation parallel
+ // to any other async startup actions they are performing.
+ // Also pthreads and wasm workers initialize the wasm instance through this path.
+ if (Module['instantiateWasm']) {
+ try {
+ return Module['instantiateWasm'](info, receiveInstance);
+ } catch(e) {
+ err('Module.instantiateWasm callback failed with error: ' + e);
+ // If instantiation fails, reject the module ready promise.
+ readyPromiseReject(e);
+ }
+ }
+
+ // If instantiation fails, reject the module ready promise.
+ instantiateAsync(wasmBinary, wasmBinaryFile, info, receiveInstantiationResult).catch(readyPromiseReject);
+ return {}; // no exports yet; we'll fill them in later
+}
+
+// Globals used by JS i64 conversions (see makeSetValue)
+var tempDouble;
+var tempI64;
+
+// include: runtime_debug.js
+function legacyModuleProp(prop, newName) {
+ if (!Object.getOwnPropertyDescriptor(Module, prop)) {
+ Object.defineProperty(Module, prop, {
+ configurable: true,
+ get: function() {
+ abort('Module.' + prop + ' has been replaced with plain ' + newName + ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)');
+ }
+ });
+ }
+}
+
+function ignoredModuleProp(prop) {
+ if (Object.getOwnPropertyDescriptor(Module, prop)) {
+ abort('`Module.' + prop + '` was supplied but `' + prop + '` not included in INCOMING_MODULE_JS_API');
+ }
+}
+
+// forcing the filesystem exports a few things by default
+function isExportedByForceFilesystem(name) {
+ return name === 'FS_createPath' ||
+ name === 'FS_createDataFile' ||
+ name === 'FS_createPreloadedFile' ||
+ name === 'FS_unlink' ||
+ name === 'addRunDependency' ||
+ // The old FS has some functionality that WasmFS lacks.
+ name === 'FS_createLazyFile' ||
+ name === 'FS_createDevice' ||
+ name === 'removeRunDependency';
+}
+
+function missingGlobal(sym, msg) {
+ if (typeof globalThis !== 'undefined') {
+ Object.defineProperty(globalThis, sym, {
+ configurable: true,
+ get: function() {
+ warnOnce('`' + sym + '` is not longer defined by emscripten. ' + msg);
+ return undefined;
+ }
+ });
+ }
+}
+
+missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer');
+
+function missingLibrarySymbol(sym) {
+ if (typeof globalThis !== 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) {
+ Object.defineProperty(globalThis, sym, {
+ configurable: true,
+ get: function() {
+ // Can't `abort()` here because it would break code that does runtime
+ // checks. e.g. `if (typeof SDL === 'undefined')`.
+ var msg = '`' + sym + '` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line';
+ // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in
+ // library.js, which means $name for a JS name with no prefix, or name
+ // for a JS name like _name.
+ var librarySymbol = sym;
+ if (!librarySymbol.startsWith('_')) {
+ librarySymbol = '$' + sym;
+ }
+ msg += " (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE=" + librarySymbol + ")";
+ if (isExportedByForceFilesystem(sym)) {
+ msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';
+ }
+ warnOnce(msg);
+ return undefined;
+ }
+ });
+ }
+ // Any symbol that is not included from the JS libary is also (by definition)
+ // not exported on the Module object.
+ unexportedRuntimeSymbol(sym);
+}
+
+function unexportedRuntimeSymbol(sym) {
+ if (!Object.getOwnPropertyDescriptor(Module, sym)) {
+ Object.defineProperty(Module, sym, {
+ configurable: true,
+ get: function() {
+ var msg = "'" + sym + "' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the FAQ)";
+ if (isExportedByForceFilesystem(sym)) {
+ msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you';
+ }
+ abort(msg);
+ }
+ });
+ }
+}
+
+// Used by XXXXX_DEBUG settings to output debug messages.
+function dbg(text) {
+ // TODO(sbc): Make this configurable somehow. Its not always convenient for
+ // logging to show up as errors.
+ console.error(text);
+}
+
+// end include: runtime_debug.js
+// === Body ===
+
+
+// end include: preamble.js
+
+ /** @constructor */
+ function ExitStatus(status) {
+ this.name = 'ExitStatus';
+ this.message = 'Program terminated with exit(' + status + ')';
+ this.status = status;
+ }
+
+ function callRuntimeCallbacks(callbacks) {
+ while (callbacks.length > 0) {
+ // Pass the module as the first argument.
+ callbacks.shift()(Module);
+ }
+ }
+
+
+ function getCppExceptionTag() {
+ // In static linking, tags are defined within the wasm module and are
+ // exported, whereas in dynamic linking, tags are defined in library.js in
+ // JS code and wasm modules import them.
+ return Module['asm']['__cpp_exception'];
+ }
+
+ function getCppExceptionThrownObjectFromWebAssemblyException(ex) {
+ // In Wasm EH, the value extracted from WebAssembly.Exception is a pointer
+ // to the unwind header. Convert it to the actual thrown value.
+ var unwind_header = ex.getArg(getCppExceptionTag(), 0);
+ return ___thrown_object_from_unwind_exception(unwind_header);
+ }
+ function decrementExceptionRefcount(ex) {
+ var ptr = getCppExceptionThrownObjectFromWebAssemblyException(ex);
+ ___cxa_decrement_exception_refcount(ptr);
+ }
+
+
+
+
+ function withStackSave(f) {
+ var stack = stackSave();
+ var ret = f();
+ stackRestore(stack);
+ return ret;
+ }
+ function getExceptionMessageCommon(ptr) {
+ return withStackSave(function() {
+ 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];
+ });
+ }
+ function getExceptionMessage(ex) {
+ var ptr = getCppExceptionThrownObjectFromWebAssemblyException(ex);
+ return getExceptionMessageCommon(ptr);
+ }
+ Module["getExceptionMessage"] = getExceptionMessage;
+
+
+ /**
+ * @param {number} ptr
+ * @param {string} type
+ */
+ function getValue(ptr, type = 'i8') {
+ if (type.endsWith('*')) type = '*';
+ switch (type) {
+ case 'i1': return HEAP8[((ptr)>>0)];
+ case 'i8': return HEAP8[((ptr)>>0)];
+ 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);
+ }
+ }
+
+
+ function incrementExceptionRefcount(ex) {
+ var ptr = getCppExceptionThrownObjectFromWebAssemblyException(ex);
+ ___cxa_increment_exception_refcount(ptr);
+ }
+
+ function ptrToString(ptr) {
+ assert(typeof ptr === 'number');
+ return '0x' + ptr.toString(16).padStart(8, '0');
+ }
+
+
+ /**
+ * @param {number} ptr
+ * @param {number} value
+ * @param {string} type
+ */
+ function setValue(ptr, value, type = 'i8') {
+ if (type.endsWith('*')) type = '*';
+ switch (type) {
+ case 'i1': HEAP8[((ptr)>>0)] = value; break;
+ case 'i8': HEAP8[((ptr)>>0)] = value; break;
+ case 'i16': HEAP16[((ptr)>>1)] = value; break;
+ case 'i32': HEAP32[((ptr)>>2)] = value; break;
+ case 'i64': (tempI64 = [value>>>0,(tempDouble=value,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((ptr)>>2)] = tempI64[0],HEAP32[(((ptr)+(4))>>2)] = tempI64[1]); 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);
+ }
+ }
+
+ function warnOnce(text) {
+ if (!warnOnce.shown) warnOnce.shown = {};
+ if (!warnOnce.shown[text]) {
+ warnOnce.shown[text] = 1;
+ if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text;
+ err(text);
+ }
+ }
+
+ function ___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) => {
+ // if the path tries to go above the root, `up` ends up > 0
+ 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 the path is allowed to go above the root, restore leading ..s
+ if (allowAboveRoot) {
+ for (; up; up--) {
+ parts.unshift('..');
+ }
+ }
+ return parts;
+ },normalize:(path) => {
+ var isAbsolute = PATH.isAbs(path),
+ trailingSlash = path.substr(-1) === '/';
+ // Normalize the path
+ 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) {
+ // No dirname whatsoever
+ return '.';
+ }
+ if (dir) {
+ // It has a dirname, strip trailing slash
+ dir = dir.substr(0, dir.length - 1);
+ }
+ return root + dir;
+ },basename:(path) => {
+ // EMSCRIPTEN return '/'' for '/', not an empty string
+ 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:function() {
+ var paths = Array.prototype.slice.call(arguments);
+ return PATH.normalize(paths.join('/'));
+ },join2:(l, r) => {
+ return PATH.normalize(l + '/' + r);
+ }};
+
+ function getRandomDevice() {
+ if (typeof crypto == 'object' && typeof crypto['getRandomValues'] == 'function') {
+ // for modern web browsers
+ var randomBuffer = new Uint8Array(1);
+ return () => { crypto.getRandomValues(randomBuffer); return randomBuffer[0]; };
+ } else
+ if (ENVIRONMENT_IS_NODE) {
+ // for nodejs with or without crypto support included
+ try {
+ var crypto_module = require('crypto');
+ // nodejs has crypto support
+ return () => crypto_module['randomBytes'](1)[0];
+ } catch (e) {
+ // nodejs doesn't have crypto support
+ }
+ }
+ // we couldn't find a proper implementation, as Math.random() is not suitable for /dev/random, see emscripten-core/emscripten/pull/7096
+ return () => abort("no cryptographic support found for randomDevice. consider polyfilling it if you want to use something insecure like Math.random(), e.g. put this in a --pre-js: var crypto = { getRandomValues: function(array) { for (var i = 0; i < array.length; i++) array[i] = (Math.random()*256)|0 } };");
+ }
+
+
+
+ var PATH_FS = {resolve:function() {
+ var resolvedPath = '',
+ resolvedAbsolute = false;
+ for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
+ var path = (i >= 0) ? arguments[i] : FS.cwd();
+ // Skip empty and invalid entries
+ if (typeof path != 'string') {
+ throw new TypeError('Arguments to path.resolve must be strings');
+ } else if (!path) {
+ return ''; // an invalid portion invalidates the whole thing
+ }
+ resolvedPath = path + '/' + resolvedPath;
+ resolvedAbsolute = PATH.isAbs(path);
+ }
+ // At this point the path should be resolved to a full absolute path, but
+ // handle relative paths to be safe (might happen when process.cwd() fails)
+ 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 < arr.length; start++) {
+ if (arr[start] !== '') break;
+ }
+ var end = arr.length - 1;
+ for (; end >= 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 < length; i++) {
+ if (fromParts[i] !== toParts[i]) {
+ samePartsLength = i;
+ break;
+ }
+ }
+ var outputParts = [];
+ for (var i = samePartsLength; i < fromParts.length; i++) {
+ outputParts.push('..');
+ }
+ outputParts = outputParts.concat(toParts.slice(samePartsLength));
+ return outputParts.join('/');
+ }};
+
+
+ /** @type {function(string, boolean=, number=)} */
+ 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 TTY = {ttys:[],init:function () {
+ // https://github.com/emscripten-core/emscripten/pull/1555
+ // if (ENVIRONMENT_IS_NODE) {
+ // // currently, FS.init does not distinguish if process.stdin is a file or TTY
+ // // device, it always assumes it's a TTY device. because of this, we're forcing
+ // // process.stdin to UTF8 encoding to at least make stdin reading compatible
+ // // with text files until FS.init can be refactored.
+ // process.stdin.setEncoding('utf8');
+ // }
+ },shutdown:function() {
+ // https://github.com/emscripten-core/emscripten/pull/1555
+ // if (ENVIRONMENT_IS_NODE) {
+ // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)?
+ // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation
+ // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists?
+ // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle
+ // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call
+ // process.stdin.pause();
+ // }
+ },register:function(dev, ops) {
+ TTY.ttys[dev] = { input: [], output: [], ops: ops };
+ FS.registerDevice(dev, TTY.stream_ops);
+ },stream_ops:{open:function(stream) {
+ var tty = TTY.ttys[stream.node.rdev];
+ if (!tty) {
+ throw new FS.ErrnoError(43);
+ }
+ stream.tty = tty;
+ stream.seekable = false;
+ },close:function(stream) {
+ // flush any pending line data
+ stream.tty.ops.fsync(stream.tty);
+ },fsync:function(stream) {
+ stream.tty.ops.fsync(stream.tty);
+ },read:function(stream, buffer, offset, length, pos /* ignored */) {
+ if (!stream.tty || !stream.tty.ops.get_char) {
+ throw new FS.ErrnoError(60);
+ }
+ var bytesRead = 0;
+ for (var i = 0; i < length; i++) {
+ var result;
+ try {
+ result = stream.tty.ops.get_char(stream.tty);
+ } catch (e) {
+ throw new FS.ErrnoError(29);
+ }
+ if (result === undefined && bytesRead === 0) {
+ throw new FS.ErrnoError(6);
+ }
+ if (result === null || result === undefined) break;
+ bytesRead++;
+ buffer[offset+i] = result;
+ }
+ if (bytesRead) {
+ stream.node.timestamp = Date.now();
+ }
+ return bytesRead;
+ },write:function(stream, buffer, offset, length, pos) {
+ if (!stream.tty || !stream.tty.ops.put_char) {
+ throw new FS.ErrnoError(60);
+ }
+ try {
+ for (var i = 0; i < length; i++) {
+ stream.tty.ops.put_char(stream.tty, buffer[offset+i]);
+ }
+ } catch (e) {
+ throw new FS.ErrnoError(29);
+ }
+ if (length) {
+ stream.node.timestamp = Date.now();
+ }
+ return i;
+ }},default_tty_ops:{get_char:function(tty) {
+ if (!tty.input.length) {
+ var result = null;
+ if (ENVIRONMENT_IS_NODE) {
+ // we will read data by chunks of BUFSIZE
+ var BUFSIZE = 256;
+ var buf = Buffer.alloc(BUFSIZE);
+ var bytesRead = 0;
+
+ try {
+ bytesRead = fs.readSync(process.stdin.fd, buf, 0, BUFSIZE, -1);
+ } catch(e) {
+ // Cross-platform differences: on Windows, reading EOF throws an exception, but on other OSes,
+ // reading EOF returns 0. Uniformize behavior by treating the EOF exception to return 0.
+ 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') {
+ // Browser.
+ result = window.prompt('Input: '); // returns null on cancel
+ if (result !== null) {
+ result += '\n';
+ }
+ } else if (typeof readline == 'function') {
+ // Command line.
+ result = readline();
+ if (result !== null) {
+ result += '\n';
+ }
+ }
+ if (!result) {
+ return null;
+ }
+ tty.input = intArrayFromString(result, true);
+ }
+ return tty.input.shift();
+ },put_char:function(tty, val) {
+ if (val === null || val === 10) {
+ out(UTF8ArrayToString(tty.output, 0));
+ tty.output = [];
+ } else {
+ if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle.
+ }
+ },fsync:function(tty) {
+ if (tty.output && tty.output.length > 0) {
+ out(UTF8ArrayToString(tty.output, 0));
+ tty.output = [];
+ }
+ }},default_tty1_ops:{put_char:function(tty, val) {
+ if (val === null || val === 10) {
+ err(UTF8ArrayToString(tty.output, 0));
+ tty.output = [];
+ } else {
+ if (val != 0) tty.output.push(val);
+ }
+ },fsync:function(tty) {
+ if (tty.output && tty.output.length > 0) {
+ err(UTF8ArrayToString(tty.output, 0));
+ tty.output = [];
+ }
+ }}};
+
+
+ function zeroMemory(address, size) {
+ HEAPU8.fill(0, address, address + size);
+ return address;
+ }
+
+ function alignMemory(size, alignment) {
+ assert(alignment, "alignment argument is required");
+ return Math.ceil(size / alignment) * alignment;
+ }
+ function 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:function(mount) {
+ return MEMFS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
+ },createNode:function(parent, name, mode, dev) {
+ if (FS.isBlkdev(mode) || FS.isFIFO(mode)) {
+ // no supported
+ throw new FS.ErrnoError(63);
+ }
+ if (!MEMFS.ops_table) {
+ 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; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity.
+ // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred
+ // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size
+ // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme.
+ 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();
+ // add the new node to the parent
+ if (parent) {
+ parent.contents[name] = node;
+ parent.timestamp = node.timestamp;
+ }
+ return node;
+ },getFileDataAsTypedArray:function(node) {
+ if (!node.contents) return new Uint8Array(0);
+ if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes.
+ return new Uint8Array(node.contents);
+ },expandFileStorage:function(node, newCapacity) {
+ var prevCapacity = node.contents ? node.contents.length : 0;
+ if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough.
+ // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity.
+ // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to
+ // avoid overshooting the allocation cap by a very large margin.
+ var CAPACITY_DOUBLING_MAX = 1024 * 1024;
+ newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0);
+ if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding.
+ var oldContents = node.contents;
+ node.contents = new Uint8Array(newCapacity); // Allocate new storage.
+ if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage.
+ },resizeFileStorage:function(node, newSize) {
+ if (node.usedBytes == newSize) return;
+ if (newSize == 0) {
+ node.contents = null; // Fully decommit when requesting a resize to zero.
+ node.usedBytes = 0;
+ } else {
+ var oldContents = node.contents;
+ node.contents = new Uint8Array(newSize); // Allocate new storage.
+ if (oldContents) {
+ node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage.
+ }
+ node.usedBytes = newSize;
+ }
+ },node_ops:{getattr:function(node) {
+ var attr = {};
+ // device numbers reuse inode numbers.
+ 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);
+ // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize),
+ // but this is not required by the standard.
+ attr.blksize = 4096;
+ attr.blocks = Math.ceil(attr.size / attr.blksize);
+ return attr;
+ },setattr:function(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:function(parent, name) {
+ throw FS.genericErrors[44];
+ },mknod:function(parent, name, mode, dev) {
+ return MEMFS.createNode(parent, name, mode, dev);
+ },rename:function(old_node, new_dir, new_name) {
+ // if we're overwriting a directory at new_name, make sure it's empty.
+ 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);
+ }
+ }
+ }
+ // do the internal rewiring
+ 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:function(parent, name) {
+ delete parent.contents[name];
+ parent.timestamp = Date.now();
+ },rmdir:function(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:function(node) {
+ var entries = ['.', '..'];
+ for (var key in node.contents) {
+ if (!node.contents.hasOwnProperty(key)) {
+ continue;
+ }
+ entries.push(key);
+ }
+ return entries;
+ },symlink:function(parent, newname, oldpath) {
+ var node = MEMFS.createNode(parent, newname, 511 /* 0777 */ | 40960, 0);
+ node.link = oldpath;
+ return node;
+ },readlink:function(node) {
+ if (!FS.isLink(node.mode)) {
+ throw new FS.ErrnoError(28);
+ }
+ return node.link;
+ }},stream_ops:{read:function(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);
+ assert(size >= 0);
+ if (size > 8 && contents.subarray) { // non-trivial, and typed array
+ buffer.set(contents.subarray(position, position + size), offset);
+ } else {
+ for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i];
+ }
+ return size;
+ },write:function(stream, buffer, offset, length, position, canOwn) {
+ // The data buffer should be a typed array view
+ assert(!(buffer instanceof ArrayBuffer));
+ // If the buffer is located in main memory (HEAP), and if
+ // memory can grow, we can't hold on to references of the
+ // memory buffer, as they may get invalidated. That means we
+ // need to do copy its contents.
+ if (buffer.buffer === HEAP8.buffer) {
+ canOwn = false;
+ }
+
+ if (!length) return 0;
+ var node = stream.node;
+ node.timestamp = Date.now();
+
+ if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array?
+ if (canOwn) {
+ assert(position === 0, 'canOwn must imply no weird position inside the file');
+ node.contents = buffer.subarray(offset, offset + length);
+ node.usedBytes = length;
+ return length;
+ } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data.
+ node.contents = buffer.slice(offset, offset + length);
+ node.usedBytes = length;
+ return length;
+ } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file?
+ node.contents.set(buffer.subarray(offset, offset + length), position);
+ return length;
+ }
+ }
+
+ // Appending to an existing file and we need to reallocate, or source data did not come as a typed array.
+ MEMFS.expandFileStorage(node, position+length);
+ if (node.contents.subarray && buffer.subarray) {
+ // Use typed array write which is available.
+ node.contents.set(buffer.subarray(offset, offset + length), position);
+ } else {
+ for (var i = 0; i < length; i++) {
+ node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not.
+ }
+ }
+ node.usedBytes = Math.max(node.usedBytes, position + length);
+ return length;
+ },llseek:function(stream, offset, whence) {
+ var position = offset;
+ if (whence === 1) {
+ position += stream.position;
+ } else if (whence === 2) {
+ if (FS.isFile(stream.node.mode)) {
+ position += stream.node.usedBytes;
+ }
+ }
+ if (position < 0) {
+ throw new FS.ErrnoError(28);
+ }
+ return position;
+ },allocate:function(stream, offset, length) {
+ MEMFS.expandFileStorage(stream.node, offset + length);
+ stream.node.usedBytes = Math.max(stream.node.usedBytes, offset + length);
+ },mmap:function(stream, length, position, prot, flags) {
+ if (!FS.isFile(stream.node.mode)) {
+ throw new FS.ErrnoError(43);
+ }
+ var ptr;
+ var allocated;
+ var contents = stream.node.contents;
+ // Only make a new copy when MAP_PRIVATE is specified.
+ if (!(flags & 2) && contents.buffer === HEAP8.buffer) {
+ // We can't emulate MAP_SHARED when the file is not backed by the
+ // buffer we're mapping to (e.g. the HEAP buffer).
+ allocated = false;
+ ptr = contents.byteOffset;
+ } else {
+ // Try to avoid unnecessary slices.
+ if (position > 0 || position + length < contents.length) {
+ if (contents.subarray) {
+ contents = contents.subarray(position, position + length);
+ } else {
+ contents = Array.prototype.slice.call(contents, position, position + length);
+ }
+ }
+ allocated = true;
+ ptr = mmapAlloc(length);
+ if (!ptr) {
+ throw new FS.ErrnoError(48);
+ }
+ HEAP8.set(contents, ptr);
+ }
+ return { ptr: ptr, allocated: allocated };
+ },msync:function(stream, buffer, offset, length, mmapFlags) {
+ MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false);
+ // should we check if bytesWritten and length are the same?
+ return 0;
+ }}};
+
+ /** @param {boolean=} noRunDep */
+ function asyncLoad(url, onload, onerror, noRunDep) {
+ var dep = !noRunDep ? getUniqueRunDependency('al ' + url) : '';
+ readAsync(url, (arrayBuffer) => {
+ assert(arrayBuffer, 'Loading data file "' + url + '" failed (no 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 ERRNO_MESSAGES = {0:"Success",1:"Arg list too long",2:"Permission denied",3:"Address already in use",4:"Address not available",5:"Address family not supported by protocol family",6:"No more processes",7:"Socket already connected",8:"Bad file number",9:"Trying to read unreadable message",10:"Mount device busy",11:"Operation canceled",12:"No children",13:"Connection aborted",14:"Connection refused",15:"Connection reset by peer",16:"File locking deadlock error",17:"Destination address required",18:"Math arg out of domain of func",19:"Quota exceeded",20:"File exists",21:"Bad address",22:"File too large",23:"Host is unreachable",24:"Identifier removed",25:"Illegal byte sequence",26:"Connection already in progress",27:"Interrupted system call",28:"Invalid argument",29:"I/O error",30:"Socket is already connected",31:"Is a directory",32:"Too many symbolic links",33:"Too many open files",34:"Too many links",35:"Message too long",36:"Multihop attempted",37:"File or path name too long",38:"Network interface is not configured",39:"Connection reset by network",40:"Network is unreachable",41:"Too many open files in system",42:"No buffer space available",43:"No such device",44:"No such file or directory",45:"Exec format error",46:"No record locks available",47:"The link has been severed",48:"Not enough core",49:"No message of desired type",50:"Protocol not available",51:"No space left on device",52:"Function not implemented",53:"Socket is not connected",54:"Not a directory",55:"Directory not empty",56:"State not recoverable",57:"Socket operation on non-socket",59:"Not a typewriter",60:"No such device or address",61:"Value too large for defined data type",62:"Previous owner died",63:"Not super-user",64:"Broken pipe",65:"Protocol error",66:"Unknown protocol",67:"Protocol wrong type for socket",68:"Math result not representable",69:"Read only file system",70:"Illegal seek",71:"No such process",72:"Stale file handle",73:"Connection timed out",74:"Text file busy",75:"Cross-device link",100:"Device not a stream",101:"Bad font file fmt",102:"Invalid slot",103:"Invalid request code",104:"No anode",105:"Block device required",106:"Channel number out of range",107:"Level 3 halted",108:"Level 3 reset",109:"Link number out of range",110:"Protocol driver not attached",111:"No CSI structure available",112:"Level 2 halted",113:"Invalid exchange",114:"Invalid request descriptor",115:"Exchange full",116:"No data (for no delay io)",117:"Timer expired",118:"Out of streams resources",119:"Machine is not on the network",120:"Package not installed",121:"The object is remote",122:"Advertise error",123:"Srmount error",124:"Communication error on send",125:"Cross mount point (not really error)",126:"Given log. name not unique",127:"f.d. invalid for this operation",128:"Remote address changed",129:"Can access a needed shared lib",130:"Accessing a corrupted shared lib",131:".lib section in a.out corrupted",132:"Attempting to link in too many libs",133:"Attempting to exec a shared library",135:"Streams pipe error",136:"Too many users",137:"Socket type not supported",138:"Not supported",139:"Protocol family not supported",140:"Can't send after socket shutdown",141:"Too many references",142:"Host is down",148:"No medium (in tape drive)",156:"Level 2 not synchronized"};
+
+ var ERRNO_CODES = {};
+
+ function demangle(func) {
+ warnOnce('warning: build with -sDEMANGLE_SUPPORT to link in libcxxabi demangling');
+ return func;
+ }
+ function demangleAll(text) {
+ var regex =
+ /\b_Z[\w\d_]+/g;
+ return text.replace(regex,
+ function(x) {
+ var y = demangle(x);
+ return x === y ? x : (y + ' [' + x + ']');
+ });
+ }
+ var FS = {root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,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) { // max recursive lookup of 8
+ throw new FS.ErrnoError(32);
+ }
+
+ // split the absolute path
+ var parts = path.split('/').filter((p) => !!p);
+
+ // start at the root
+ var current = FS.root;
+ var current_path = '/';
+
+ for (var i = 0; i < parts.length; i++) {
+ var islast = (i === parts.length-1);
+ if (islast && opts.parent) {
+ // stop resolving
+ break;
+ }
+
+ current = FS.lookupNode(current, parts[i]);
+ current_path = PATH.join2(current_path, parts[i]);
+
+ // jump to the mount's root node if this is a mountpoint
+ if (FS.isMountpoint(current)) {
+ if (!islast || (islast && opts.follow_mount)) {
+ current = current.mounted.root;
+ }
+ }
+
+ // by default, lookupPath will not follow a symlink if it is the final path component.
+ // setting opts.follow = true will override this behavior.
+ if (!islast || opts.follow) {
+ var count = 0;
+ while (FS.isLink(current.mode)) {
+ var link = FS.readlink(current_path);
+ current_path = PATH_FS.resolve(PATH.dirname(current_path), link);
+
+ var lookup = FS.lookupPath(current_path, { recurse_count: opts.recurse_count + 1 });
+ current = lookup.node;
+
+ if (count++ > 40) { // limit max consecutive symlinks to 40 (SYMLOOP_MAX).
+ 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 < name.length; i++) {
+ hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0;
+ }
+ return ((parentid + hash) >>> 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, parent);
+ }
+ 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;
+ }
+ }
+ // if we failed to find it in the cache, call into the VFS
+ return FS.lookup(parent, name);
+ },createNode:(parent, name, mode, rdev) => {
+ assert(typeof parent == 'object')
+ 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;
+ },flagModes:{"r":0,"r+":2,"w":577,"w+":578,"a":1089,"a+":1090},modeStringToFlags:(str) => {
+ var flags = FS.flagModes[str];
+ if (typeof flags == 'undefined') {
+ throw new Error('Unknown file open mode: ' + str);
+ }
+ return flags;
+ },flagsToPermissionString:(flag) => {
+ var perms = ['r', 'w', 'rw'][flag & 3];
+ if ((flag & 512)) {
+ perms += 'w';
+ }
+ return perms;
+ },nodePermissions:(node, perms) => {
+ if (FS.ignorePermissions) {
+ return 0;
+ }
+ // return 0 if any user, group or owner bits are set.
+ 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) => {
+ 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' || // opening for write
+ (flags & 512)) { // TODO: check for O_SEARCH? (== search for dir only)
+ return 31;
+ }
+ }
+ return FS.nodePermissions(node, FS.flagsToPermissionString(flags));
+ },MAX_OPEN_FDS:4096,nextfd:(fd_start = 0, fd_end = FS.MAX_OPEN_FDS) => {
+ for (var fd = fd_start; fd <= fd_end; fd++) {
+ if (!FS.streams[fd]) {
+ return fd;
+ }
+ }
+ throw new FS.ErrnoError(33);
+ },getStream:(fd) => FS.streams[fd],createStream:(stream, fd_start, fd_end) => {
+ if (!FS.FSStream) {
+ FS.FSStream = /** @constructor */ function() {
+ this.shared = { };
+ };
+ FS.FSStream.prototype = {};
+ Object.defineProperties(FS.FSStream.prototype, {
+ object: {
+ /** @this {FS.FSStream} */
+ get: function() { return this.node; },
+ /** @this {FS.FSStream} */
+ set: function(val) { this.node = val; }
+ },
+ isRead: {
+ /** @this {FS.FSStream} */
+ get: function() { return (this.flags & 2097155) !== 1; }
+ },
+ isWrite: {
+ /** @this {FS.FSStream} */
+ get: function() { return (this.flags & 2097155) !== 0; }
+ },
+ isAppend: {
+ /** @this {FS.FSStream} */
+ get: function() { return (this.flags & 1024); }
+ },
+ flags: {
+ /** @this {FS.FSStream} */
+ get: function() { return this.shared.flags; },
+ /** @this {FS.FSStream} */
+ set: function(val) { this.shared.flags = val; },
+ },
+ position : {
+ /** @this {FS.FSStream} */
+ get: function() { return this.shared.position; },
+ /** @this {FS.FSStream} */
+ set: function(val) { this.shared.position = val; },
+ },
+ });
+ }
+ // clone it, so we can return an instance of FSStream
+ stream = Object.assign(new FS.FSStream(), stream);
+ var fd = FS.nextfd(fd_start, fd_end);
+ stream.fd = fd;
+ FS.streams[fd] = stream;
+ return stream;
+ },closeStream:(fd) => {
+ FS.streams[fd] = null;
+ },chrdev_stream_ops:{open:(stream) => {
+ var device = FS.getDevice(stream.node.rdev);
+ // override node's stream ops with the device's
+ stream.stream_ops = device.stream_ops;
+ // forward the open call
+ if (stream.stream_ops.open) {
+ stream.stream_ops.open(stream);
+ }
+ },llseek:() => {
+ throw new FS.ErrnoError(70);
+ }},major:(dev) => ((dev) >> 8),minor:(dev) => ((dev) & 0xff),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.apply(check, 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) {
+ assert(FS.syncFSRequests > 0);
+ 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);
+ }
+ };
+
+ // sync all mounts
+ mounts.forEach((mount) => {
+ if (!mount.type.syncfs) {
+ return done(null);
+ }
+ mount.type.syncfs(mount, populate, done);
+ });
+ },mount:(type, opts, mountpoint) => {
+ if (typeof type == 'string') {
+ // The filesystem was not included, and instead we have an error
+ // message stored in the variable.
+ throw type;
+ }
+ 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; // use the absolute 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: []
+ };
+
+ // create a root node for the fs
+ var mountRoot = type.mount(mount);
+ mountRoot.mount = mount;
+ mount.root = mountRoot;
+
+ if (root) {
+ FS.root = mountRoot;
+ } else if (node) {
+ // set as a mountpoint
+ node.mounted = mount;
+
+ // add the new mount to the current mount's children
+ 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);
+ }
+
+ // destroy the nodes for this mount, and all its child mounts
+ 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;
+ }
+ });
+
+ // no longer a mountpoint
+ node.mounted = null;
+
+ // remove this mount from the child mounts
+ var idx = node.mount.mounts.indexOf(mount);
+ assert(idx !== -1);
+ 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 /* 0666 */;
+ mode &= 4095;
+ mode |= 32768;
+ return FS.mknod(path, mode, 0);
+ },mkdir:(path, mode) => {
+ mode = mode !== undefined ? mode : 511 /* 0777 */;
+ mode &= 511 | 512;
+ mode |= 16384;
+ return FS.mknod(path, mode, 0);
+ },mkdirTree:(path, mode) => {
+ var dirs = path.split('/');
+ var d = '';
+ for (var i = 0; i < dirs.length; ++i) {
+ if (!dirs[i]) continue;
+ d += '/' + dirs[i];
+ try {
+ FS.mkdir(d, mode);
+ } catch(e) {
+ if (e.errno != 20) throw e;
+ }
+ }
+ },mkdev:(path, mode, dev) => {
+ if (typeof dev == 'undefined') {
+ dev = mode;
+ mode = 438 /* 0666 */;
+ }
+ mode |= 8192;
+ return FS.mknod(path, mode, dev);
+ },symlink:(oldpath, newpath) => {
+ if (!PATH_FS.resolve(oldpath)) {
+ throw new FS.ErrnoError(44);
+ }
+ var lookup = FS.lookupPath(newpath, { parent: true });
+ var parent = lookup.node;
+ if (!parent) {
+ throw new FS.ErrnoError(44);
+ }
+ var newname = PATH.basename(newpath);
+ var errCode = FS.mayCreate(parent, newname);
+ if (errCode) {
+ throw new FS.ErrnoError(errCode);
+ }
+ if (!parent.node_ops.symlink) {
+ throw new FS.ErrnoError(63);
+ }
+ return parent.node_ops.symlink(parent, newname, oldpath);
+ },rename:(old_path, new_path) => {
+ var old_dirname = PATH.dirname(old_path);
+ var new_dirname = PATH.dirname(new_path);
+ var old_name = PATH.basename(old_path);
+ var new_name = PATH.basename(new_path);
+ // parents must exist
+ var lookup, old_dir, new_dir;
+
+ // let the errors from non existant directories percolate up
+ lookup = FS.lookupPath(old_path, { parent: true });
+ old_dir = lookup.node;
+ lookup = FS.lookupPath(new_path, { parent: true });
+ new_dir = lookup.node;
+
+ if (!old_dir || !new_dir) throw new FS.ErrnoError(44);
+ // need to be part of the same mount
+ if (old_dir.mount !== new_dir.mount) {
+ throw new FS.ErrnoError(75);
+ }
+ // source must exist
+ var old_node = FS.lookupNode(old_dir, old_name);
+ // old path should not be an ancestor of the new path
+ var relative = PATH_FS.relative(old_path, new_dirname);
+ if (relative.charAt(0) !== '.') {
+ throw new FS.ErrnoError(28);
+ }
+ // new path should not be an ancestor of the old path
+ relative = PATH_FS.relative(new_path, old_dirname);
+ if (relative.charAt(0) !== '.') {
+ throw new FS.ErrnoError(55);
+ }
+ // see if the new path already exists
+ var new_node;
+ try {
+ new_node = FS.lookupNode(new_dir, new_name);
+ } catch (e) {
+ // not fatal
+ }
+ // early out if nothing needs to change
+ if (old_node === new_node) {
+ return;
+ }
+ // we'll need to delete the old entry
+ var isdir = FS.isDir(old_node.mode);
+ var errCode = FS.mayDelete(old_dir, old_name, isdir);
+ if (errCode) {
+ throw new FS.ErrnoError(errCode);
+ }
+ // need delete permissions if we'll be overwriting.
+ // need create permissions if new doesn't already exist.
+ errCode = new_node ?
+ FS.mayDelete(new_dir, new_name, isdir) :
+ FS.mayCreate(new_dir, new_name);
+ if (errCode) {
+ throw new FS.ErrnoError(errCode);
+ }
+ if (!old_dir.node_ops.rename) {
+ throw new FS.ErrnoError(63);
+ }
+ if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) {
+ throw new FS.ErrnoError(10);
+ }
+ // if we are going to change the parent, check write permissions
+ if (new_dir !== old_dir) {
+ errCode = FS.nodePermissions(old_dir, 'w');
+ if (errCode) {
+ throw new FS.ErrnoError(errCode);
+ }
+ }
+ // remove the node from the lookup hash
+ FS.hashRemoveNode(old_node);
+ // do the underlying fs rename
+ try {
+ old_dir.node_ops.rename(old_node, new_dir, new_name);
+ } catch (e) {
+ throw e;
+ } finally {
+ // add the node back to the hash (in case node_ops.rename
+ // changed its name)
+ FS.hashAddNode(old_node);
+ }
+ },rmdir:(path) => {
+ var lookup = FS.lookupPath(path, { parent: true });
+ var parent = lookup.node;
+ var name = PATH.basename(path);
+ var node = FS.lookupNode(parent, name);
+ var errCode = FS.mayDelete(parent, name, true);
+ if (errCode) {
+ throw new FS.ErrnoError(errCode);
+ }
+ if (!parent.node_ops.rmdir) {
+ throw new FS.ErrnoError(63);
+ }
+ if (FS.isMountpoint(node)) {
+ throw new FS.ErrnoError(10);
+ }
+ parent.node_ops.rmdir(parent, name);
+ FS.destroyNode(node);
+ },readdir:(path) => {
+ var lookup = FS.lookupPath(path, { follow: true });
+ var node = lookup.node;
+ if (!node.node_ops.readdir) {
+ throw new FS.ErrnoError(54);
+ }
+ return node.node_ops.readdir(node);
+ },unlink:(path) => {
+ var lookup = FS.lookupPath(path, { parent: true });
+ var parent = lookup.node;
+ if (!parent) {
+ throw new FS.ErrnoError(44);
+ }
+ var name = PATH.basename(path);
+ var node = FS.lookupNode(parent, name);
+ var errCode = FS.mayDelete(parent, name, false);
+ if (errCode) {
+ // According to POSIX, we should map EISDIR to EPERM, but
+ // we instead do what Linux does (and we must, as we use
+ // the musl linux libc).
+ throw new FS.ErrnoError(errCode);
+ }
+ if (!parent.node_ops.unlink) {
+ throw new FS.ErrnoError(63);
+ }
+ if (FS.isMountpoint(node)) {
+ throw new FS.ErrnoError(10);
+ }
+ parent.node_ops.unlink(parent, name);
+ FS.destroyNode(node);
+ },readlink:(path) => {
+ var lookup = FS.lookupPath(path);
+ var link = lookup.node;
+ if (!link) {
+ throw new FS.ErrnoError(44);
+ }
+ if (!link.node_ops.readlink) {
+ throw new FS.ErrnoError(28);
+ }
+ return PATH_FS.resolve(FS.getPath(link.parent), link.node_ops.readlink(link));
+ },stat:(path, dontFollow) => {
+ var lookup = FS.lookupPath(path, { follow: !dontFollow });
+ var node = lookup.node;
+ if (!node) {
+ throw new FS.ErrnoError(44);
+ }
+ if (!node.node_ops.getattr) {
+ throw new FS.ErrnoError(63);
+ }
+ return node.node_ops.getattr(node);
+ },lstat:(path) => {
+ return FS.stat(path, true);
+ },chmod:(path, mode, dontFollow) => {
+ var node;
+ if (typeof path == 'string') {
+ var lookup = FS.lookupPath(path, { follow: !dontFollow });
+ node = lookup.node;
+ } else {
+ node = path;
+ }
+ if (!node.node_ops.setattr) {
+ throw new FS.ErrnoError(63);
+ }
+ node.node_ops.setattr(node, {
+ mode: (mode & 4095) | (node.mode & ~4095),
+ timestamp: Date.now()
+ });
+ },lchmod:(path, mode) => {
+ FS.chmod(path, mode, true);
+ },fchmod:(fd, mode) => {
+ var stream = FS.getStream(fd);
+ if (!stream) {
+ throw new FS.ErrnoError(8);
+ }
+ FS.chmod(stream.node, mode);
+ },chown:(path, uid, gid, dontFollow) => {
+ var node;
+ if (typeof path == 'string') {
+ var lookup = FS.lookupPath(path, { follow: !dontFollow });
+ node = lookup.node;
+ } else {
+ node = path;
+ }
+ if (!node.node_ops.setattr) {
+ throw new FS.ErrnoError(63);
+ }
+ node.node_ops.setattr(node, {
+ timestamp: Date.now()
+ // we ignore the uid / gid for now
+ });
+ },lchown:(path, uid, gid) => {
+ FS.chown(path, uid, gid, true);
+ },fchown:(fd, uid, gid) => {
+ var stream = FS.getStream(fd);
+ if (!stream) {
+ throw new FS.ErrnoError(8);
+ }
+ FS.chown(stream.node, uid, gid);
+ },truncate:(path, len) => {
+ if (len < 0) {
+ throw new FS.ErrnoError(28);
+ }
+ var node;
+ if (typeof path == 'string') {
+ var lookup = FS.lookupPath(path, { follow: true });
+ node = lookup.node;
+ } else {
+ node = path;
+ }
+ if (!node.node_ops.setattr) {
+ throw new FS.ErrnoError(63);
+ }
+ if (FS.isDir(node.mode)) {
+ throw new FS.ErrnoError(31);
+ }
+ if (!FS.isFile(node.mode)) {
+ throw new FS.ErrnoError(28);
+ }
+ var errCode = FS.nodePermissions(node, 'w');
+ if (errCode) {
+ throw new FS.ErrnoError(errCode);
+ }
+ node.node_ops.setattr(node, {
+ size: len,
+ timestamp: Date.now()
+ });
+ },ftruncate:(fd, len) => {
+ var stream = FS.getStream(fd);
+ if (!stream) {
+ throw new FS.ErrnoError(8);
+ }
+ if ((stream.flags & 2097155) === 0) {
+ throw new FS.ErrnoError(28);
+ }
+ FS.truncate(stream.node, len);
+ },utime:(path, atime, mtime) => {
+ var lookup = FS.lookupPath(path, { follow: true });
+ var node = lookup.node;
+ node.node_ops.setattr(node, {
+ timestamp: Math.max(atime, mtime)
+ });
+ },open:(path, flags, mode) => {
+ if (path === "") {
+ throw new FS.ErrnoError(44);
+ }
+ flags = typeof flags == 'string' ? FS.modeStringToFlags(flags) : flags;
+ mode = typeof mode == 'undefined' ? 438 /* 0666 */ : mode;
+ if ((flags & 64)) {
+ mode = (mode & 4095) | 32768;
+ } else {
+ mode = 0;
+ }
+ var node;
+ if (typeof path == 'object') {
+ node = path;
+ } else {
+ path = PATH.normalize(path);
+ try {
+ var lookup = FS.lookupPath(path, {
+ follow: !(flags & 131072)
+ });
+ node = lookup.node;
+ } catch (e) {
+ // ignore
+ }
+ }
+ // perhaps we need to create the node
+ var created = false;
+ if ((flags & 64)) {
+ if (node) {
+ // if O_CREAT and O_EXCL are set, error out if the node already exists
+ if ((flags & 128)) {
+ throw new FS.ErrnoError(20);
+ }
+ } else {
+ // node doesn't exist, try to create it
+ node = FS.mknod(path, mode, 0);
+ created = true;
+ }
+ }
+ if (!node) {
+ throw new FS.ErrnoError(44);
+ }
+ // can't truncate a device
+ if (FS.isChrdev(node.mode)) {
+ flags &= ~512;
+ }
+ // if asked only for a directory, then this must be one
+ if ((flags & 65536) && !FS.isDir(node.mode)) {
+ throw new FS.ErrnoError(54);
+ }
+ // check permissions, if this is not a file we just created now (it is ok to
+ // create and write to a file with read-only permissions; it is read-only
+ // for later use)
+ if (!created) {
+ var errCode = FS.mayOpen(node, flags);
+ if (errCode) {
+ throw new FS.ErrnoError(errCode);
+ }
+ }
+ // do truncation if necessary
+ if ((flags & 512) && !created) {
+ FS.truncate(node, 0);
+ }
+ // we've already handled these, don't pass down to the underlying vfs
+ flags &= ~(128 | 512 | 131072);
+
+ // register the stream with the filesystem
+ var stream = FS.createStream({
+ node: node,
+ path: FS.getPath(node), // we want the absolute path to the node
+ flags: flags,
+ seekable: true,
+ position: 0,
+ stream_ops: node.stream_ops,
+ // used by the file family libc calls (fopen, fwrite, ferror, etc.)
+ ungotten: [],
+ error: false
+ });
+ // call the new stream's open function
+ if (stream.stream_ops.open) {
+ stream.stream_ops.open(stream);
+ }
+ if (Module['logReadFiles'] && !(flags & 1)) {
+ if (!FS.readFiles) FS.readFiles = {};
+ if (!(path in FS.readFiles)) {
+ FS.readFiles[path] = 1;
+ }
+ }
+ return stream;
+ },close:(stream) => {
+ if (FS.isClosed(stream)) {
+ throw new FS.ErrnoError(8);
+ }
+ if (stream.getdents) stream.getdents = null; // free readdir state
+ try {
+ if (stream.stream_ops.close) {
+ stream.stream_ops.close(stream);
+ }
+ } catch (e) {
+ throw e;
+ } finally {
+ FS.closeStream(stream.fd);
+ }
+ stream.fd = null;
+ },isClosed:(stream) => {
+ return stream.fd === null;
+ },llseek:(stream, offset, whence) => {
+ if (FS.isClosed(stream)) {
+ throw new FS.ErrnoError(8);
+ }
+ if (!stream.seekable || !stream.stream_ops.llseek) {
+ throw new FS.ErrnoError(70);
+ }
+ if (whence != 0 && whence != 1 && whence != 2) {
+ throw new FS.ErrnoError(28);
+ }
+ stream.position = stream.stream_ops.llseek(stream, offset, whence);
+ stream.ungotten = [];
+ return stream.position;
+ },read:(stream, buffer, offset, length, position) => {
+ if (length < 0 || position < 0) {
+ throw new FS.ErrnoError(28);
+ }
+ if (FS.isClosed(stream)) {
+ throw new FS.ErrnoError(8);
+ }
+ if ((stream.flags & 2097155) === 1) {
+ throw new FS.ErrnoError(8);
+ }
+ if (FS.isDir(stream.node.mode)) {
+ throw new FS.ErrnoError(31);
+ }
+ if (!stream.stream_ops.read) {
+ throw new FS.ErrnoError(28);
+ }
+ var seeking = typeof position != 'undefined';
+ if (!seeking) {
+ position = stream.position;
+ } else if (!stream.seekable) {
+ throw new FS.ErrnoError(70);
+ }
+ var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position);
+ if (!seeking) stream.position += bytesRead;
+ return bytesRead;
+ },write:(stream, buffer, offset, length, position, canOwn) => {
+ if (length < 0 || position < 0) {
+ throw new FS.ErrnoError(28);
+ }
+ if (FS.isClosed(stream)) {
+ throw new FS.ErrnoError(8);
+ }
+ if ((stream.flags & 2097155) === 0) {
+ throw new FS.ErrnoError(8);
+ }
+ if (FS.isDir(stream.node.mode)) {
+ throw new FS.ErrnoError(31);
+ }
+ if (!stream.stream_ops.write) {
+ throw new FS.ErrnoError(28);
+ }
+ if (stream.seekable && stream.flags & 1024) {
+ // seek to the end before writing in append mode
+ FS.llseek(stream, 0, 2);
+ }
+ var seeking = typeof position != 'undefined';
+ if (!seeking) {
+ position = stream.position;
+ } else if (!stream.seekable) {
+ throw new FS.ErrnoError(70);
+ }
+ var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn);
+ if (!seeking) stream.position += bytesWritten;
+ return bytesWritten;
+ },allocate:(stream, offset, length) => {
+ if (FS.isClosed(stream)) {
+ throw new FS.ErrnoError(8);
+ }
+ if (offset < 0 || length <= 0) {
+ throw new FS.ErrnoError(28);
+ }
+ if ((stream.flags & 2097155) === 0) {
+ throw new FS.ErrnoError(8);
+ }
+ if (!FS.isFile(stream.node.mode) && !FS.isDir(stream.node.mode)) {
+ throw new FS.ErrnoError(43);
+ }
+ if (!stream.stream_ops.allocate) {
+ throw new FS.ErrnoError(138);
+ }
+ stream.stream_ops.allocate(stream, offset, length);
+ },mmap:(stream, length, position, prot, flags) => {
+ // User requests writing to file (prot & PROT_WRITE != 0).
+ // Checking if we have permissions to write to the file unless
+ // MAP_PRIVATE flag is set. According to POSIX spec it is possible
+ // to write to file opened in read-only mode with MAP_PRIVATE flag,
+ // as all modifications will be visible only in the memory of
+ // the current process.
+ if ((prot & 2) !== 0
+ && (flags & 2) === 0
+ && (stream.flags & 2097155) !== 2) {
+ throw new FS.ErrnoError(2);
+ }
+ if ((stream.flags & 2097155) === 1) {
+ throw new FS.ErrnoError(2);
+ }
+ if (!stream.stream_ops.mmap) {
+ throw new FS.ErrnoError(43);
+ }
+ return stream.stream_ops.mmap(stream, length, position, prot, flags);
+ },msync:(stream, buffer, offset, length, mmapFlags) => {
+ if (!stream.stream_ops.msync) {
+ return 0;
+ }
+ return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags);
+ },munmap:(stream) => 0,ioctl:(stream, cmd, arg) => {
+ if (!stream.stream_ops.ioctl) {
+ throw new FS.ErrnoError(59);
+ }
+ return stream.stream_ops.ioctl(stream, cmd, arg);
+ },readFile:(path, opts = {}) => {
+ opts.flags = opts.flags || 0;
+ opts.encoding = opts.encoding || 'binary';
+ if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') {
+ throw new Error('Invalid encoding type "' + opts.encoding + '"');
+ }
+ var ret;
+ var stream = FS.open(path, opts.flags);
+ var stat = FS.stat(path);
+ var length = stat.size;
+ var buf = new Uint8Array(length);
+ FS.read(stream, buf, 0, length, 0);
+ if (opts.encoding === 'utf8') {
+ ret = UTF8ArrayToString(buf, 0);
+ } else if (opts.encoding === 'binary') {
+ ret = buf;
+ }
+ FS.close(stream);
+ return ret;
+ },writeFile:(path, data, opts = {}) => {
+ opts.flags = opts.flags || 577;
+ var stream = FS.open(path, opts.flags, opts.mode);
+ if (typeof data == 'string') {
+ var buf = new Uint8Array(lengthBytesUTF8(data)+1);
+ var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length);
+ FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn);
+ } else if (ArrayBuffer.isView(data)) {
+ FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn);
+ } else {
+ throw new Error('Unsupported data type');
+ }
+ FS.close(stream);
+ },cwd:() => FS.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:() => {
+ // create /dev
+ FS.mkdir('/dev');
+ // setup /dev/null
+ FS.registerDevice(FS.makedev(1, 3), {
+ read: () => 0,
+ write: (stream, buffer, offset, length, pos) => length,
+ });
+ FS.mkdev('/dev/null', FS.makedev(1, 3));
+ // setup /dev/tty and /dev/tty1
+ // stderr needs to print output using err() rather than out()
+ // so we register a second tty just for it.
+ 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));
+ // setup /dev/[u]random
+ var random_device = getRandomDevice();
+ FS.createDevice('/dev', 'random', random_device);
+ FS.createDevice('/dev', 'urandom', random_device);
+ // we're not going to emulate the actual shm device,
+ // just create the tmp dirs that reside in it commonly
+ FS.mkdir('/dev/shm');
+ FS.mkdir('/dev/shm/tmp');
+ },createSpecialDirectories:() => {
+ // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the
+ // name of the stream for fd 6 (see test_unistd_ttyname)
+ 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 /* 0777 */, 73);
+ node.node_ops = {
+ lookup: (parent, name) => {
+ var fd = +name;
+ var stream = FS.getStream(fd);
+ if (!stream) throw new FS.ErrnoError(8);
+ var ret = {
+ parent: null,
+ mount: { mountpoint: 'fake' },
+ node_ops: { readlink: () => stream.path },
+ };
+ ret.parent = ret; // make it look like a simple root node
+ return ret;
+ }
+ };
+ return node;
+ }
+ }, {}, '/proc/self/fd');
+ },createStandardStreams:() => {
+ // TODO deprecate the old functionality of a single
+ // input / output callback and that utilizes FS.createDevice
+ // and instead require a unique set of stream ops
+
+ // by default, we symlink the standard streams to the
+ // default tty devices. however, if the standard streams
+ // have been overwritten we create a unique device for
+ // them instead.
+ 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');
+ }
+
+ // open default streams for the stdin, stdout and stderr devices
+ var stdin = FS.open('/dev/stdin', 0);
+ var stdout = FS.open('/dev/stdout', 1);
+ var stderr = FS.open('/dev/stderr', 1);
+ assert(stdin.fd === 0, 'invalid handle for stdin (' + stdin.fd + ')');
+ assert(stdout.fd === 1, 'invalid handle for stdout (' + stdout.fd + ')');
+ assert(stderr.fd === 2, 'invalid handle for stderr (' + stderr.fd + ')');
+ },ensureErrnoError:() => {
+ if (FS.ErrnoError) return;
+ FS.ErrnoError = /** @this{Object} */ function ErrnoError(errno, node) {
+ // We set the `name` property to be able to identify `FS.ErrnoError`
+ // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway.
+ // - when using PROXYFS, an error can come from an underlying FS
+ // as different FS objects have their own FS.ErrnoError each,
+ // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs.
+ // we'll use the reliable test `err.name == "ErrnoError"` instead
+ this.name = 'ErrnoError';
+ this.node = node;
+ this.setErrno = /** @this{Object} */ function(errno) {
+ this.errno = errno;
+ for (var key in ERRNO_CODES) {
+ if (ERRNO_CODES[key] === errno) {
+ this.code = key;
+ break;
+ }
+ }
+ };
+ this.setErrno(errno);
+ this.message = ERRNO_MESSAGES[errno];
+
+ // Try to get a maximally helpful stack trace. On Node.js, getting Error.stack
+ // now ensures it shows what we want.
+ if (this.stack) {
+ // Define the stack property for Node.js 4, which otherwise errors on the next line.
+ Object.defineProperty(this, "stack", { value: (new Error).stack, writable: true });
+ this.stack = demangleAll(this.stack);
+ }
+ };
+ FS.ErrnoError.prototype = new Error();
+ FS.ErrnoError.prototype.constructor = FS.ErrnoError;
+ // Some errors may happen quite a bit, to avoid overhead we reuse them (and suffer a lack of stack info)
+ [44].forEach((code) => {
+ FS.genericErrors[code] = new FS.ErrnoError(code);
+ FS.genericErrors[code].stack = '';
+ });
+ },staticInit:() => {
+ FS.ensureErrnoError();
+
+ FS.nameTable = new Array(4096);
+
+ FS.mount(MEMFS, {}, '/');
+
+ FS.createDefaultDirectories();
+ FS.createDefaultDevices();
+ FS.createSpecialDirectories();
+
+ FS.filesystems = {
+ 'MEMFS': MEMFS,
+ };
+ },init:(input, output, error) => {
+ assert(!FS.init.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)');
+ FS.init.initialized = true;
+
+ FS.ensureErrnoError();
+
+ // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here
+ Module['stdin'] = input || Module['stdin'];
+ Module['stdout'] = output || Module['stdout'];
+ Module['stderr'] = error || Module['stderr'];
+
+ FS.createStandardStreams();
+ },quit:() => {
+ FS.init.initialized = false;
+ // force-flush all streams, so we get musl std streams printed out
+ _fflush(0);
+ // close all of our streams
+ for (var i = 0; i < FS.streams.length; i++) {
+ var stream = FS.streams[i];
+ if (!stream) {
+ continue;
+ }
+ FS.close(stream);
+ }
+ },getMode:(canRead, canWrite) => {
+ var mode = 0;
+ if (canRead) mode |= 292 | 73;
+ if (canWrite) mode |= 146;
+ return mode;
+ },findObject:(path, dontResolveLastLink) => {
+ var ret = FS.analyzePath(path, dontResolveLastLink);
+ if (!ret.exists) {
+ return null;
+ }
+ return ret.object;
+ },analyzePath:(path, dontResolveLastLink) => {
+ // operate from within the context of the symlink's target
+ try {
+ var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
+ path = lookup.path;
+ } catch (e) {
+ }
+ var ret = {
+ isRoot: false, exists: false, error: 0, name: null, path: null, object: null,
+ parentExists: false, parentPath: null, parentObject: null
+ };
+ try {
+ var lookup = FS.lookupPath(path, { parent: true });
+ ret.parentExists = true;
+ ret.parentPath = lookup.path;
+ ret.parentObject = lookup.node;
+ ret.name = PATH.basename(path);
+ lookup = FS.lookupPath(path, { follow: !dontResolveLastLink });
+ ret.exists = true;
+ ret.path = lookup.path;
+ ret.object = lookup.node;
+ ret.name = lookup.node.name;
+ ret.isRoot = lookup.path === '/';
+ } catch (e) {
+ ret.error = e.errno;
+ };
+ return ret;
+ },createPath:(parent, path, canRead, canWrite) => {
+ parent = typeof parent == 'string' ? parent : FS.getPath(parent);
+ var parts = path.split('/').reverse();
+ while (parts.length) {
+ var part = parts.pop();
+ if (!part) continue;
+ var current = PATH.join2(parent, part);
+ try {
+ FS.mkdir(current);
+ } catch (e) {
+ // ignore EEXIST
+ }
+ parent = current;
+ }
+ return current;
+ },createFile:(parent, name, properties, canRead, canWrite) => {
+ var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);
+ var mode = FS.getMode(canRead, canWrite);
+ return FS.create(path, mode);
+ },createDataFile:(parent, name, data, canRead, canWrite, canOwn) => {
+ var path = name;
+ if (parent) {
+ parent = typeof parent == 'string' ? parent : FS.getPath(parent);
+ path = name ? PATH.join2(parent, name) : parent;
+ }
+ var mode = FS.getMode(canRead, canWrite);
+ var node = FS.create(path, mode);
+ if (data) {
+ if (typeof data == 'string') {
+ var arr = new Array(data.length);
+ for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i);
+ data = arr;
+ }
+ // make sure we can write to the file
+ FS.chmod(node, mode | 146);
+ var stream = FS.open(node, 577);
+ FS.write(stream, data, 0, data.length, 0, canOwn);
+ FS.close(stream);
+ FS.chmod(node, mode);
+ }
+ return node;
+ },createDevice:(parent, name, input, output) => {
+ var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name);
+ var mode = FS.getMode(!!input, !!output);
+ if (!FS.createDevice.major) FS.createDevice.major = 64;
+ var dev = FS.makedev(FS.createDevice.major++, 0);
+ // Create a fake device that a set of stream ops to emulate
+ // the old behavior.
+ FS.registerDevice(dev, {
+ open: (stream) => {
+ stream.seekable = false;
+ },
+ close: (stream) => {
+ // flush any pending line data
+ if (output && output.buffer && output.buffer.length) {
+ output(10);
+ }
+ },
+ read: (stream, buffer, offset, length, pos /* ignored */) => {
+ var bytesRead = 0;
+ for (var i = 0; i < length; i++) {
+ var result;
+ try {
+ result = input();
+ } catch (e) {
+ throw new FS.ErrnoError(29);
+ }
+ if (result === undefined && bytesRead === 0) {
+ throw new FS.ErrnoError(6);
+ }
+ if (result === null || result === undefined) break;
+ bytesRead++;
+ buffer[offset+i] = result;
+ }
+ if (bytesRead) {
+ stream.node.timestamp = Date.now();
+ }
+ return bytesRead;
+ },
+ write: (stream, buffer, offset, length, pos) => {
+ for (var i = 0; i < length; i++) {
+ try {
+ output(buffer[offset+i]);
+ } catch (e) {
+ throw new FS.ErrnoError(29);
+ }
+ }
+ if (length) {
+ stream.node.timestamp = Date.now();
+ }
+ return i;
+ }
+ });
+ return FS.mkdev(path, mode, dev);
+ },forceLoadFile:(obj) => {
+ if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true;
+ if (typeof XMLHttpRequest != 'undefined') {
+ throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread.");
+ } else if (read_) {
+ // Command-line.
+ try {
+ // WARNING: Can't read binary files in V8's d8 or tracemonkey's js, as
+ // read() will try to parse UTF8.
+ obj.contents = intArrayFromString(read_(obj.url), true);
+ obj.usedBytes = obj.contents.length;
+ } catch (e) {
+ throw new FS.ErrnoError(29);
+ }
+ } else {
+ throw new Error('Cannot load without read() or XMLHttpRequest.');
+ }
+ },createLazyFile:(parent, name, url, canRead, canWrite) => {
+ // Lazy chunked Uint8Array (implements get and length from Uint8Array). Actual getting is abstracted away for eventual reuse.
+ /** @constructor */
+ function LazyUint8Array() {
+ this.lengthKnown = false;
+ this.chunks = []; // Loaded chunks. Index is the chunk number
+ }
+ LazyUint8Array.prototype.get = /** @this{Object} */ function LazyUint8Array_get(idx) {
+ if (idx > this.length-1 || idx < 0) {
+ return undefined;
+ }
+ var chunkOffset = idx % this.chunkSize;
+ var chunkNum = (idx / this.chunkSize)|0;
+ return this.getter(chunkNum)[chunkOffset];
+ };
+ LazyUint8Array.prototype.setDataGetter = function LazyUint8Array_setDataGetter(getter) {
+ this.getter = getter;
+ };
+ LazyUint8Array.prototype.cacheLength = function LazyUint8Array_cacheLength() {
+ // Find length
+ 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; // Chunk size in bytes
+
+ if (!hasByteServing) chunkSize = datalength;
+
+ // Function to get a range from the remote URL.
+ 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!");
+
+ // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available.
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, false);
+ if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to);
+
+ // Some hints to the browser that we want binary data.
+ 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(/** @type{Array} */(xhr.response || []));
+ }
+ return intArrayFromString(xhr.responseText || '', true);
+ };
+ var lazyArray = this;
+ lazyArray.setDataGetter((chunkNum) => {
+ var start = chunkNum * chunkSize;
+ var end = (chunkNum+1) * chunkSize - 1; // including this byte
+ end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block
+ 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) {
+ // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length
+ chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file
+ 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;
+ };
+ 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();
+ Object.defineProperties(lazyArray, {
+ length: {
+ get: /** @this{Object} */ function() {
+ if (!this.lengthKnown) {
+ this.cacheLength();
+ }
+ return this._length;
+ }
+ },
+ chunkSize: {
+ get: /** @this{Object} */ function() {
+ if (!this.lengthKnown) {
+ this.cacheLength();
+ }
+ return this._chunkSize;
+ }
+ }
+ });
+
+ var properties = { isDevice: false, contents: lazyArray };
+ } else {
+ var properties = { isDevice: false, url: url };
+ }
+
+ var node = FS.createFile(parent, name, properties, canRead, canWrite);
+ // This is a total hack, but I want to get this lazy file code out of the
+ // core of MEMFS. If we want to keep this lazy file concept I feel it should
+ // be its own thin LAZYFS proxying calls to MEMFS.
+ if (properties.contents) {
+ node.contents = properties.contents;
+ } else if (properties.url) {
+ node.contents = null;
+ node.url = properties.url;
+ }
+ // Add a function that defers querying the file size until it is asked the first time.
+ Object.defineProperties(node, {
+ usedBytes: {
+ get: /** @this {FSNode} */ function() { return this.contents.length; }
+ }
+ });
+ // override each stream op with one that tries to force load the lazy file first
+ var stream_ops = {};
+ var keys = Object.keys(node.stream_ops);
+ keys.forEach((key) => {
+ var fn = node.stream_ops[key];
+ stream_ops[key] = function forceLoadLazyFile() {
+ FS.forceLoadFile(node);
+ return fn.apply(null, arguments);
+ };
+ });
+ 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);
+ assert(size >= 0);
+ if (contents.slice) { // normal array
+ for (var i = 0; i < size; i++) {
+ buffer[offset + i] = contents[position + i];
+ }
+ } else {
+ for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR
+ buffer[offset + i] = contents.get(position + i);
+ }
+ }
+ return size;
+ }
+ // use a custom read function
+ stream_ops.read = (stream, buffer, offset, length, position) => {
+ FS.forceLoadFile(node);
+ return writeChunks(stream, buffer, offset, length, position)
+ };
+ // use a custom mmap function
+ 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;
+ },createPreloadedFile:(parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => {
+ // TODO we should allow people to just pass in a complete filename instead
+ // of parent and name being that we just join them anyways
+ var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent;
+ var dep = getUniqueRunDependency('cp ' + fullname); // might have several active requests for the same fullname
+ function processData(byteArray) {
+ function finish(byteArray) {
+ if (preFinish) preFinish();
+ if (!dontCreateFile) {
+ FS.createDataFile(parent, name, byteArray, canRead, canWrite, canOwn);
+ }
+ if (onload) onload();
+ removeRunDependency(dep);
+ }
+ if (Browser.handledByPreloadPlugin(byteArray, fullname, finish, () => {
+ if (onerror) onerror();
+ removeRunDependency(dep);
+ })) {
+ return;
+ }
+ finish(byteArray);
+ }
+ addRunDependency(dep);
+ if (typeof url == 'string') {
+ asyncLoad(url, (byteArray) => processData(byteArray), onerror);
+ } else {
+ processData(url);
+ }
+ },indexedDB:() => {
+ return window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
+ },DB_NAME:() => {
+ return 'EM_FS_' + window.location.pathname;
+ },DB_VERSION:20,DB_STORE_NAME:"FILE_DATA",saveFilesToDB:(paths, onload = (() => {}), onerror = (() => {})) => {
+ var indexedDB = FS.indexedDB();
+ try {
+ var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
+ } catch (e) {
+ return onerror(e);
+ }
+ openRequest.onupgradeneeded = () => {
+ out('creating db');
+ var db = openRequest.result;
+ db.createObjectStore(FS.DB_STORE_NAME);
+ };
+ openRequest.onsuccess = () => {
+ var db = openRequest.result;
+ var transaction = db.transaction([FS.DB_STORE_NAME], 'readwrite');
+ var files = transaction.objectStore(FS.DB_STORE_NAME);
+ var ok = 0, fail = 0, total = paths.length;
+ function finish() {
+ if (fail == 0) onload(); else onerror();
+ }
+ paths.forEach((path) => {
+ var putRequest = files.put(FS.analyzePath(path).object.contents, path);
+ putRequest.onsuccess = () => { ok++; if (ok + fail == total) finish() };
+ putRequest.onerror = () => { fail++; if (ok + fail == total) finish() };
+ });
+ transaction.onerror = onerror;
+ };
+ openRequest.onerror = onerror;
+ },loadFilesFromDB:(paths, onload = (() => {}), onerror = (() => {})) => {
+ var indexedDB = FS.indexedDB();
+ try {
+ var openRequest = indexedDB.open(FS.DB_NAME(), FS.DB_VERSION);
+ } catch (e) {
+ return onerror(e);
+ }
+ openRequest.onupgradeneeded = onerror; // no database to load from
+ openRequest.onsuccess = () => {
+ var db = openRequest.result;
+ try {
+ var transaction = db.transaction([FS.DB_STORE_NAME], 'readonly');
+ } catch(e) {
+ onerror(e);
+ return;
+ }
+ var files = transaction.objectStore(FS.DB_STORE_NAME);
+ var ok = 0, fail = 0, total = paths.length;
+ function finish() {
+ if (fail == 0) onload(); else onerror();
+ }
+ paths.forEach((path) => {
+ var getRequest = files.get(path);
+ getRequest.onsuccess = () => {
+ if (FS.analyzePath(path).exists) {
+ FS.unlink(path);
+ }
+ FS.createDataFile(PATH.dirname(path), PATH.basename(path), getRequest.result, true, true, true);
+ ok++;
+ if (ok + fail == total) finish();
+ };
+ getRequest.onerror = () => { fail++; if (ok + fail == total) finish() };
+ });
+ transaction.onerror = onerror;
+ };
+ openRequest.onerror = onerror;
+ },absolutePath:() => {
+ abort('FS.absolutePath has been removed; use PATH_FS.resolve instead');
+ },createFolder:() => {
+ abort('FS.createFolder has been removed; use FS.mkdir instead');
+ },createLink:() => {
+ abort('FS.createLink has been removed; use FS.symlink instead');
+ },joinPath:() => {
+ abort('FS.joinPath has been removed; use PATH.join instead');
+ },mmapAlloc:() => {
+ abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc');
+ },standardizePath:() => {
+ abort('FS.standardizePath has been removed; use PATH.normalize instead');
+ }};
+ var SYSCALLS = {DEFAULT_POLLMASK:5,calculateAt:function(dirfd, path, allowEmpty) {
+ if (PATH.isAbs(path)) {
+ return path;
+ }
+ // relative 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:function(func, path, buf) {
+ try {
+ var stat = func(path);
+ } catch (e) {
+ if (e && e.node && PATH.normalize(path) !== PATH.normalize(FS.getPath(e.node))) {
+ // an error occurred while trying to look up the path; we should just report ENOTDIR
+ return -54;
+ }
+ throw e;
+ }
+ HEAP32[((buf)>>2)] = stat.dev;
+ HEAP32[(((buf)+(8))>>2)] = stat.ino;
+ HEAP32[(((buf)+(12))>>2)] = stat.mode;
+ HEAPU32[(((buf)+(16))>>2)] = stat.nlink;
+ HEAP32[(((buf)+(20))>>2)] = stat.uid;
+ HEAP32[(((buf)+(24))>>2)] = stat.gid;
+ HEAP32[(((buf)+(28))>>2)] = stat.rdev;
+ (tempI64 = [stat.size>>>0,(tempDouble=stat.size,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(40))>>2)] = tempI64[0],HEAP32[(((buf)+(44))>>2)] = tempI64[1]);
+ HEAP32[(((buf)+(48))>>2)] = 4096;
+ HEAP32[(((buf)+(52))>>2)] = stat.blocks;
+ var atime = stat.atime.getTime();
+ var mtime = stat.mtime.getTime();
+ var ctime = stat.ctime.getTime();
+ (tempI64 = [Math.floor(atime / 1000)>>>0,(tempDouble=Math.floor(atime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(56))>>2)] = tempI64[0],HEAP32[(((buf)+(60))>>2)] = tempI64[1]);
+ HEAPU32[(((buf)+(64))>>2)] = (atime % 1000) * 1000;
+ (tempI64 = [Math.floor(mtime / 1000)>>>0,(tempDouble=Math.floor(mtime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(72))>>2)] = tempI64[0],HEAP32[(((buf)+(76))>>2)] = tempI64[1]);
+ HEAPU32[(((buf)+(80))>>2)] = (mtime % 1000) * 1000;
+ (tempI64 = [Math.floor(ctime / 1000)>>>0,(tempDouble=Math.floor(ctime / 1000),(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(88))>>2)] = tempI64[0],HEAP32[(((buf)+(92))>>2)] = tempI64[1]);
+ HEAPU32[(((buf)+(96))>>2)] = (ctime % 1000) * 1000;
+ (tempI64 = [stat.ino>>>0,(tempDouble=stat.ino,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((buf)+(104))>>2)] = tempI64[0],HEAP32[(((buf)+(108))>>2)] = tempI64[1]);
+ return 0;
+ },doMsync:function(addr, stream, len, flags, offset) {
+ if (!FS.isFile(stream.node.mode)) {
+ throw new FS.ErrnoError(43);
+ }
+ if (flags & 2) {
+ // MAP_PRIVATE calls need not to be synced back to underlying fs
+ return 0;
+ }
+ var buffer = HEAPU8.slice(addr, addr + len);
+ FS.msync(stream, buffer, offset, len, flags);
+ },varargs:undefined,get:function() {
+ assert(SYSCALLS.varargs != undefined);
+ SYSCALLS.varargs += 4;
+ var ret = HEAP32[(((SYSCALLS.varargs)-(4))>>2)];
+ return ret;
+ },getStr:function(ptr) {
+ var ret = UTF8ToString(ptr);
+ return ret;
+ },getStreamFromFD:function(fd) {
+ var stream = FS.getStream(fd);
+ if (!stream) throw new FS.ErrnoError(8);
+ return stream;
+ }};
+ function ___syscall_chdir(path) {
+ try {
+
+ path = SYSCALLS.getStr(path);
+ FS.chdir(path);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ function ___syscall_chmod(path, mode) {
+ try {
+
+ path = SYSCALLS.getStr(path);
+ FS.chmod(path, mode);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ var SOCKFS = {mount:function(mount) {
+ // If Module['websocket'] has already been defined (e.g. for configuring
+ // the subprotocol/url) use that, if not initialise it to a new object.
+ Module['websocket'] = (Module['websocket'] &&
+ ('object' === typeof Module['websocket'])) ? Module['websocket'] : {};
+
+ // Add the Event registration mechanism to the exported websocket configuration
+ // object so we can register network callbacks from native JavaScript too.
+ // For more documentation see system/include/emscripten/emscripten.h
+ Module['websocket']._callbacks = {};
+ Module['websocket']['on'] = /** @this{Object} */ function(event, callback) {
+ if ('function' === typeof callback) {
+ this._callbacks[event] = callback;
+ }
+ return this;
+ };
+
+ Module['websocket'].emit = /** @this{Object} */ function(event, param) {
+ if ('function' === typeof this._callbacks[event]) {
+ this._callbacks[event].call(this, param);
+ }
+ };
+
+ // If debug is enabled register simple default logging callbacks for each Event.
+
+ return FS.createNode(null, '/', 16384 | 511 /* 0777 */, 0);
+ },createSocket:function(family, type, protocol) {
+ type &= ~526336; // Some applications may pass it; it makes no sense for a single process.
+ var streaming = type == 1;
+ if (streaming && protocol && protocol != 6) {
+ throw new FS.ErrnoError(66); // if SOCK_STREAM, must be tcp or 0.
+ }
+
+ // create our internal socket structure
+ var sock = {
+ family: family,
+ type: type,
+ protocol: protocol,
+ server: null,
+ error: null, // Used in getsockopt for SOL_SOCKET/SO_ERROR test
+ peers: {},
+ pending: [],
+ recv_queue: [],
+ sock_ops: SOCKFS.websocket_sock_ops
+ };
+
+ // create the filesystem node to store the socket structure
+ var name = SOCKFS.nextname();
+ var node = FS.createNode(SOCKFS.root, name, 49152, 0);
+ node.sock = sock;
+
+ // and the wrapping stream that enables library functions such
+ // as read and write to indirectly interact with the socket
+ var stream = FS.createStream({
+ path: name,
+ node: node,
+ flags: 2,
+ seekable: false,
+ stream_ops: SOCKFS.stream_ops
+ });
+
+ // map the new stream to the socket structure (sockets have a 1:1
+ // relationship with a stream)
+ sock.stream = stream;
+
+ return sock;
+ },getSocket:function(fd) {
+ var stream = FS.getStream(fd);
+ if (!stream || !FS.isSocket(stream.node.mode)) {
+ return null;
+ }
+ return stream.node.sock;
+ },stream_ops:{poll:function(stream) {
+ var sock = stream.node.sock;
+ return sock.sock_ops.poll(sock);
+ },ioctl:function(stream, request, varargs) {
+ var sock = stream.node.sock;
+ return sock.sock_ops.ioctl(sock, request, varargs);
+ },read:function(stream, buffer, offset, length, position /* ignored */) {
+ var sock = stream.node.sock;
+ var msg = sock.sock_ops.recvmsg(sock, length);
+ if (!msg) {
+ // socket is closed
+ return 0;
+ }
+ buffer.set(msg.buffer, offset);
+ return msg.buffer.length;
+ },write:function(stream, buffer, offset, length, position /* ignored */) {
+ var sock = stream.node.sock;
+ return sock.sock_ops.sendmsg(sock, buffer, offset, length);
+ },close:function(stream) {
+ var sock = stream.node.sock;
+ sock.sock_ops.close(sock);
+ }},nextname:function() {
+ if (!SOCKFS.nextname.current) {
+ SOCKFS.nextname.current = 0;
+ }
+ return 'socket[' + (SOCKFS.nextname.current++) + ']';
+ },websocket_sock_ops:{createPeer:function(sock, addr, port) {
+ var ws;
+
+ if (typeof addr == 'object') {
+ ws = addr;
+ addr = null;
+ port = null;
+ }
+
+ if (ws) {
+ // for sockets that've already connected (e.g. we're the server)
+ // we can inspect the _socket property for the address
+ if (ws._socket) {
+ addr = ws._socket.remoteAddress;
+ port = ws._socket.remotePort;
+ }
+ // if we're just now initializing a connection to the remote,
+ // inspect the url property
+ else {
+ var result = /ws[s]?:\/\/([^:]+):(\d+)/.exec(ws.url);
+ if (!result) {
+ throw new Error('WebSocket URL must be in the format ws(s)://address:port');
+ }
+ addr = result[1];
+ port = parseInt(result[2], 10);
+ }
+ } else {
+ // create the actual websocket object and connect
+ try {
+ // runtimeConfig gets set to true if WebSocket runtime configuration is available.
+ var runtimeConfig = (Module['websocket'] && ('object' === typeof Module['websocket']));
+
+ // The default value is 'ws://' the replace is needed because the compiler replaces '//' comments with '#'
+ // comments without checking context, so we'd end up with ws:#, the replace swaps the '#' for '//' again.
+ var url = 'ws:#'.replace('#', '//');
+
+ if (runtimeConfig) {
+ if ('string' === typeof Module['websocket']['url']) {
+ url = Module['websocket']['url']; // Fetch runtime WebSocket URL config.
+ }
+ }
+
+ if (url === 'ws://' || url === 'wss://') { // Is the supplied URL config just a prefix, if so complete it.
+ var parts = addr.split('/');
+ url = url + parts[0] + ":" + port + "/" + parts.slice(1).join('/');
+ }
+
+ // Make the WebSocket subprotocol (Sec-WebSocket-Protocol) default to binary if no configuration is set.
+ var subProtocols = 'binary'; // The default value is 'binary'
+
+ if (runtimeConfig) {
+ if ('string' === typeof Module['websocket']['subprotocol']) {
+ subProtocols = Module['websocket']['subprotocol']; // Fetch runtime WebSocket subprotocol config.
+ }
+ }
+
+ // The default WebSocket options
+ var opts = undefined;
+
+ if (subProtocols !== 'null') {
+ // The regex trims the string (removes spaces at the beginning and end, then splits the string by
+ // , into an Array. Whitespace removal is important for Websockify and ws.
+ subProtocols = subProtocols.replace(/^ +| +$/g,"").split(/ *, */);
+
+ opts = subProtocols;
+ }
+
+ // some webservers (azure) does not support subprotocol header
+ if (runtimeConfig && null === Module['websocket']['subprotocol']) {
+ subProtocols = 'null';
+ opts = undefined;
+ }
+
+ // If node we use the ws library.
+ var WebSocketConstructor;
+ if (ENVIRONMENT_IS_NODE) {
+ WebSocketConstructor = /** @type{(typeof WebSocket)} */(require('ws'));
+ } else
+ {
+ WebSocketConstructor = WebSocket;
+ }
+ ws = new WebSocketConstructor(url, opts);
+ ws.binaryType = 'arraybuffer';
+ } catch (e) {
+ throw new FS.ErrnoError(23);
+ }
+ }
+
+ var peer = {
+ addr: addr,
+ port: port,
+ socket: ws,
+ dgram_send_queue: []
+ };
+
+ SOCKFS.websocket_sock_ops.addPeer(sock, peer);
+ SOCKFS.websocket_sock_ops.handlePeerEvents(sock, peer);
+
+ // if this is a bound dgram socket, send the port number first to allow
+ // us to override the ephemeral port reported to us by remotePort on the
+ // remote end.
+ if (sock.type === 2 && typeof sock.sport != 'undefined') {
+ peer.dgram_send_queue.push(new Uint8Array([
+ 255, 255, 255, 255,
+ 'p'.charCodeAt(0), 'o'.charCodeAt(0), 'r'.charCodeAt(0), 't'.charCodeAt(0),
+ ((sock.sport & 0xff00) >> 8) , (sock.sport & 0xff)
+ ]));
+ }
+
+ return peer;
+ },getPeer:function(sock, addr, port) {
+ return sock.peers[addr + ':' + port];
+ },addPeer:function(sock, peer) {
+ sock.peers[peer.addr + ':' + peer.port] = peer;
+ },removePeer:function(sock, peer) {
+ delete sock.peers[peer.addr + ':' + peer.port];
+ },handlePeerEvents:function(sock, peer) {
+ var first = true;
+
+ var handleOpen = function () {
+
+ Module['websocket'].emit('open', sock.stream.fd);
+
+ try {
+ var queued = peer.dgram_send_queue.shift();
+ while (queued) {
+ peer.socket.send(queued);
+ queued = peer.dgram_send_queue.shift();
+ }
+ } catch (e) {
+ // not much we can do here in the way of proper error handling as we've already
+ // lied and said this data was sent. shut it down.
+ peer.socket.close();
+ }
+ };
+
+ function handleMessage(data) {
+ if (typeof data == 'string') {
+ var encoder = new TextEncoder(); // should be utf-8
+ data = encoder.encode(data); // make a typed array from the string
+ } else {
+ assert(data.byteLength !== undefined); // must receive an ArrayBuffer
+ if (data.byteLength == 0) {
+ // An empty ArrayBuffer will emit a pseudo disconnect event
+ // as recv/recvmsg will return zero which indicates that a socket
+ // has performed a shutdown although the connection has not been disconnected yet.
+ return;
+ }
+ data = new Uint8Array(data); // make a typed array view on the array buffer
+ }
+
+ // if this is the port message, override the peer's port with it
+ var wasfirst = first;
+ first = false;
+ if (wasfirst &&
+ data.length === 10 &&
+ data[0] === 255 && data[1] === 255 && data[2] === 255 && data[3] === 255 &&
+ data[4] === 'p'.charCodeAt(0) && data[5] === 'o'.charCodeAt(0) && data[6] === 'r'.charCodeAt(0) && data[7] === 't'.charCodeAt(0)) {
+ // update the peer's port and it's key in the peer map
+ var newport = ((data[8] << 8) | data[9]);
+ SOCKFS.websocket_sock_ops.removePeer(sock, peer);
+ peer.port = newport;
+ SOCKFS.websocket_sock_ops.addPeer(sock, peer);
+ return;
+ }
+
+ sock.recv_queue.push({ addr: peer.addr, port: peer.port, data: data });
+ Module['websocket'].emit('message', sock.stream.fd);
+ };
+
+ if (ENVIRONMENT_IS_NODE) {
+ peer.socket.on('open', handleOpen);
+ peer.socket.on('message', function(data, isBinary) {
+ if (!isBinary) {
+ return;
+ }
+ handleMessage((new Uint8Array(data)).buffer); // copy from node Buffer -> ArrayBuffer
+ });
+ peer.socket.on('close', function() {
+ Module['websocket'].emit('close', sock.stream.fd);
+ });
+ peer.socket.on('error', function(error) {
+ // Although the ws library may pass errors that may be more descriptive than
+ // ECONNREFUSED they are not necessarily the expected error code e.g.
+ // ENOTFOUND on getaddrinfo seems to be node.js specific, so using ECONNREFUSED
+ // is still probably the most useful thing to do.
+ sock.error = 14; // Used in getsockopt for SOL_SOCKET/SO_ERROR test.
+ Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']);
+ // don't throw
+ });
+ } else {
+ peer.socket.onopen = handleOpen;
+ peer.socket.onclose = function() {
+ Module['websocket'].emit('close', sock.stream.fd);
+ };
+ peer.socket.onmessage = function peer_socket_onmessage(event) {
+ handleMessage(event.data);
+ };
+ peer.socket.onerror = function(error) {
+ // The WebSocket spec only allows a 'simple event' to be thrown on error,
+ // so we only really know as much as ECONNREFUSED.
+ sock.error = 14; // Used in getsockopt for SOL_SOCKET/SO_ERROR test.
+ Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'ECONNREFUSED: Connection refused']);
+ };
+ }
+ },poll:function(sock) {
+ if (sock.type === 1 && sock.server) {
+ // listen sockets should only say they're available for reading
+ // if there are pending clients.
+ return sock.pending.length ? (64 | 1) : 0;
+ }
+
+ var mask = 0;
+ var dest = sock.type === 1 ? // we only care about the socket state for connection-based sockets
+ SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport) :
+ null;
+
+ if (sock.recv_queue.length ||
+ !dest || // connection-less sockets are always ready to read
+ (dest && dest.socket.readyState === dest.socket.CLOSING) ||
+ (dest && dest.socket.readyState === dest.socket.CLOSED)) { // let recv return 0 once closed
+ mask |= (64 | 1);
+ }
+
+ if (!dest || // connection-less sockets are always ready to write
+ (dest && dest.socket.readyState === dest.socket.OPEN)) {
+ mask |= 4;
+ }
+
+ if ((dest && dest.socket.readyState === dest.socket.CLOSING) ||
+ (dest && dest.socket.readyState === dest.socket.CLOSED)) {
+ mask |= 16;
+ }
+
+ return mask;
+ },ioctl:function(sock, request, arg) {
+ switch (request) {
+ case 21531:
+ var bytes = 0;
+ if (sock.recv_queue.length) {
+ bytes = sock.recv_queue[0].data.length;
+ }
+ HEAP32[((arg)>>2)] = bytes;
+ return 0;
+ default:
+ return 28;
+ }
+ },close:function(sock) {
+ // if we've spawned a listen server, close it
+ if (sock.server) {
+ try {
+ sock.server.close();
+ } catch (e) {
+ }
+ sock.server = null;
+ }
+ // close any peer connections
+ var peers = Object.keys(sock.peers);
+ for (var i = 0; i < peers.length; i++) {
+ var peer = sock.peers[peers[i]];
+ try {
+ peer.socket.close();
+ } catch (e) {
+ }
+ SOCKFS.websocket_sock_ops.removePeer(sock, peer);
+ }
+ return 0;
+ },bind:function(sock, addr, port) {
+ if (typeof sock.saddr != 'undefined' || typeof sock.sport != 'undefined') {
+ throw new FS.ErrnoError(28); // already bound
+ }
+ sock.saddr = addr;
+ sock.sport = port;
+ // in order to emulate dgram sockets, we need to launch a listen server when
+ // binding on a connection-less socket
+ // note: this is only required on the server side
+ if (sock.type === 2) {
+ // close the existing server if it exists
+ if (sock.server) {
+ sock.server.close();
+ sock.server = null;
+ }
+ // swallow error operation not supported error that occurs when binding in the
+ // browser where this isn't supported
+ try {
+ sock.sock_ops.listen(sock, 0);
+ } catch (e) {
+ if (!(e.name === 'ErrnoError')) throw e;
+ if (e.errno !== 138) throw e;
+ }
+ }
+ },connect:function(sock, addr, port) {
+ if (sock.server) {
+ throw new FS.ErrnoError(138);
+ }
+
+ // TODO autobind
+ // if (!sock.addr && sock.type == 2) {
+ // }
+
+ // early out if we're already connected / in the middle of connecting
+ if (typeof sock.daddr != 'undefined' && typeof sock.dport != 'undefined') {
+ var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
+ if (dest) {
+ if (dest.socket.readyState === dest.socket.CONNECTING) {
+ throw new FS.ErrnoError(7);
+ } else {
+ throw new FS.ErrnoError(30);
+ }
+ }
+ }
+
+ // add the socket to our peer list and set our
+ // destination address / port to match
+ var peer = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
+ sock.daddr = peer.addr;
+ sock.dport = peer.port;
+
+ // always "fail" in non-blocking mode
+ throw new FS.ErrnoError(26);
+ },listen:function(sock, backlog) {
+ if (!ENVIRONMENT_IS_NODE) {
+ throw new FS.ErrnoError(138);
+ }
+ if (sock.server) {
+ throw new FS.ErrnoError(28); // already listening
+ }
+ var WebSocketServer = require('ws').Server;
+ var host = sock.saddr;
+ sock.server = new WebSocketServer({
+ host: host,
+ port: sock.sport
+ // TODO support backlog
+ });
+ Module['websocket'].emit('listen', sock.stream.fd); // Send Event with listen fd.
+
+ sock.server.on('connection', function(ws) {
+ if (sock.type === 1) {
+ var newsock = SOCKFS.createSocket(sock.family, sock.type, sock.protocol);
+
+ // create a peer on the new socket
+ var peer = SOCKFS.websocket_sock_ops.createPeer(newsock, ws);
+ newsock.daddr = peer.addr;
+ newsock.dport = peer.port;
+
+ // push to queue for accept to pick up
+ sock.pending.push(newsock);
+ Module['websocket'].emit('connection', newsock.stream.fd);
+ } else {
+ // create a peer on the listen socket so calling sendto
+ // with the listen socket and an address will resolve
+ // to the correct client
+ SOCKFS.websocket_sock_ops.createPeer(sock, ws);
+ Module['websocket'].emit('connection', sock.stream.fd);
+ }
+ });
+ sock.server.on('close', function() {
+ Module['websocket'].emit('close', sock.stream.fd);
+ sock.server = null;
+ });
+ sock.server.on('error', function(error) {
+ // Although the ws library may pass errors that may be more descriptive than
+ // ECONNREFUSED they are not necessarily the expected error code e.g.
+ // ENOTFOUND on getaddrinfo seems to be node.js specific, so using EHOSTUNREACH
+ // is still probably the most useful thing to do. This error shouldn't
+ // occur in a well written app as errors should get trapped in the compiled
+ // app's own getaddrinfo call.
+ sock.error = 23; // Used in getsockopt for SOL_SOCKET/SO_ERROR test.
+ Module['websocket'].emit('error', [sock.stream.fd, sock.error, 'EHOSTUNREACH: Host is unreachable']);
+ // don't throw
+ });
+ },accept:function(listensock) {
+ if (!listensock.server || !listensock.pending.length) {
+ throw new FS.ErrnoError(28);
+ }
+ var newsock = listensock.pending.shift();
+ newsock.stream.flags = listensock.stream.flags;
+ return newsock;
+ },getname:function(sock, peer) {
+ var addr, port;
+ if (peer) {
+ if (sock.daddr === undefined || sock.dport === undefined) {
+ throw new FS.ErrnoError(53);
+ }
+ addr = sock.daddr;
+ port = sock.dport;
+ } else {
+ // TODO saddr and sport will be set for bind()'d UDP sockets, but what
+ // should we be returning for TCP sockets that've been connect()'d?
+ addr = sock.saddr || 0;
+ port = sock.sport || 0;
+ }
+ return { addr: addr, port: port };
+ },sendmsg:function(sock, buffer, offset, length, addr, port) {
+ if (sock.type === 2) {
+ // connection-less sockets will honor the message address,
+ // and otherwise fall back to the bound destination address
+ if (addr === undefined || port === undefined) {
+ addr = sock.daddr;
+ port = sock.dport;
+ }
+ // if there was no address to fall back to, error out
+ if (addr === undefined || port === undefined) {
+ throw new FS.ErrnoError(17);
+ }
+ } else {
+ // connection-based sockets will only use the bound
+ addr = sock.daddr;
+ port = sock.dport;
+ }
+
+ // find the peer for the destination address
+ var dest = SOCKFS.websocket_sock_ops.getPeer(sock, addr, port);
+
+ // early out if not connected with a connection-based socket
+ if (sock.type === 1) {
+ if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
+ throw new FS.ErrnoError(53);
+ } else if (dest.socket.readyState === dest.socket.CONNECTING) {
+ throw new FS.ErrnoError(6);
+ }
+ }
+
+ // create a copy of the incoming data to send, as the WebSocket API
+ // doesn't work entirely with an ArrayBufferView, it'll just send
+ // the entire underlying buffer
+ if (ArrayBuffer.isView(buffer)) {
+ offset += buffer.byteOffset;
+ buffer = buffer.buffer;
+ }
+
+ var data;
+ data = buffer.slice(offset, offset + length);
+
+ // if we're emulating a connection-less dgram socket and don't have
+ // a cached connection, queue the buffer to send upon connect and
+ // lie, saying the data was sent now.
+ if (sock.type === 2) {
+ if (!dest || dest.socket.readyState !== dest.socket.OPEN) {
+ // if we're not connected, open a new connection
+ if (!dest || dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
+ dest = SOCKFS.websocket_sock_ops.createPeer(sock, addr, port);
+ }
+ dest.dgram_send_queue.push(data);
+ return length;
+ }
+ }
+
+ try {
+ // send the actual data
+ dest.socket.send(data);
+ return length;
+ } catch (e) {
+ throw new FS.ErrnoError(28);
+ }
+ },recvmsg:function(sock, length) {
+ // http://pubs.opengroup.org/onlinepubs/7908799/xns/recvmsg.html
+ if (sock.type === 1 && sock.server) {
+ // tcp servers should not be recv()'ing on the listen socket
+ throw new FS.ErrnoError(53);
+ }
+
+ var queued = sock.recv_queue.shift();
+ if (!queued) {
+ if (sock.type === 1) {
+ var dest = SOCKFS.websocket_sock_ops.getPeer(sock, sock.daddr, sock.dport);
+
+ if (!dest) {
+ // if we have a destination address but are not connected, error out
+ throw new FS.ErrnoError(53);
+ }
+ if (dest.socket.readyState === dest.socket.CLOSING || dest.socket.readyState === dest.socket.CLOSED) {
+ // return null if the socket has closed
+ return null;
+ }
+ // else, our socket is in a valid state but truly has nothing available
+ throw new FS.ErrnoError(6);
+ }
+ throw new FS.ErrnoError(6);
+ }
+
+ // queued.data will be an ArrayBuffer if it's unadulterated, but if it's
+ // requeued TCP data it'll be an ArrayBufferView
+ var queuedLength = queued.data.byteLength || queued.data.length;
+ var queuedOffset = queued.data.byteOffset || 0;
+ var queuedBuffer = queued.data.buffer || queued.data;
+ var bytesRead = Math.min(length, queuedLength);
+ var res = {
+ buffer: new Uint8Array(queuedBuffer, queuedOffset, bytesRead),
+ addr: queued.addr,
+ port: queued.port
+ };
+
+ // push back any unread data for TCP connections
+ if (sock.type === 1 && bytesRead < queuedLength) {
+ var bytesRemaining = queuedLength - bytesRead;
+ queued.data = new Uint8Array(queuedBuffer, queuedOffset + bytesRead, bytesRemaining);
+ sock.recv_queue.unshift(queued);
+ }
+
+ return res;
+ }}};
+
+ function getSocketFromFD(fd) {
+ var socket = SOCKFS.getSocket(fd);
+ if (!socket) throw new FS.ErrnoError(8);
+ return socket;
+ }
+
+ function setErrNo(value) {
+ HEAP32[((___errno_location())>>2)] = value;
+ return value;
+ }
+ var Sockets = {BUFFER_SIZE:10240,MAX_BUFFER_SIZE:10485760,nextFd:1,fds:{},nextport:1,maxport:65535,peer:null,connections:{},portmap:{},localAddr:4261412874,addrPool:[33554442,50331658,67108874,83886090,100663306,117440522,134217738,150994954,167772170,184549386,201326602,218103818,234881034]};
+
+ function inetNtop4(addr) {
+ return (addr & 0xff) + '.' + ((addr >> 8) & 0xff) + '.' + ((addr >> 16) & 0xff) + '.' + ((addr >> 24) & 0xff)
+ }
+
+
+ function inetNtop6(ints) {
+ // ref: http://www.ietf.org/rfc/rfc2373.txt - section 2.5.4
+ // Format for IPv4 compatible and mapped 128-bit IPv6 Addresses
+ // 128-bits are split into eight 16-bit words
+ // stored in network byte order (big-endian)
+ // | 80 bits | 16 | 32 bits |
+ // +-----------------------------------------------------------------+
+ // | 10 bytes | 2 | 4 bytes |
+ // +--------------------------------------+--------------------------+
+ // + 5 words | 1 | 2 words |
+ // +--------------------------------------+--------------------------+
+ // |0000..............................0000|0000| IPv4 ADDRESS | (compatible)
+ // +--------------------------------------+----+---------------------+
+ // |0000..............................0000|FFFF| IPv4 ADDRESS | (mapped)
+ // +--------------------------------------+----+---------------------+
+ var str = "";
+ var word = 0;
+ var longest = 0;
+ var lastzero = 0;
+ var zstart = 0;
+ var len = 0;
+ var i = 0;
+ var parts = [
+ ints[0] & 0xffff,
+ (ints[0] >> 16),
+ ints[1] & 0xffff,
+ (ints[1] >> 16),
+ ints[2] & 0xffff,
+ (ints[2] >> 16),
+ ints[3] & 0xffff,
+ (ints[3] >> 16)
+ ];
+
+ // Handle IPv4-compatible, IPv4-mapped, loopback and any/unspecified addresses
+
+ var hasipv4 = true;
+ var v4part = "";
+ // check if the 10 high-order bytes are all zeros (first 5 words)
+ for (i = 0; i < 5; i++) {
+ if (parts[i] !== 0) { hasipv4 = false; break; }
+ }
+
+ if (hasipv4) {
+ // low-order 32-bits store an IPv4 address (bytes 13 to 16) (last 2 words)
+ v4part = inetNtop4(parts[6] | (parts[7] << 16));
+ // IPv4-mapped IPv6 address if 16-bit value (bytes 11 and 12) == 0xFFFF (6th word)
+ if (parts[5] === -1) {
+ str = "::ffff:";
+ str += v4part;
+ return str;
+ }
+ // IPv4-compatible IPv6 address if 16-bit value (bytes 11 and 12) == 0x0000 (6th word)
+ if (parts[5] === 0) {
+ str = "::";
+ //special case IPv6 addresses
+ if (v4part === "0.0.0.0") v4part = ""; // any/unspecified address
+ if (v4part === "0.0.0.1") v4part = "1";// loopback address
+ str += v4part;
+ return str;
+ }
+ }
+
+ // Handle all other IPv6 addresses
+
+ // first run to find the longest contiguous zero words
+ for (word = 0; word < 8; word++) {
+ if (parts[word] === 0) {
+ if (word - lastzero > 1) {
+ len = 0;
+ }
+ lastzero = word;
+ len++;
+ }
+ if (len > longest) {
+ longest = len;
+ zstart = word - longest + 1;
+ }
+ }
+
+ for (word = 0; word < 8; word++) {
+ if (longest > 1) {
+ // compress contiguous zeros - to produce "::"
+ if (parts[word] === 0 && word >= zstart && word < (zstart + longest) ) {
+ if (word === zstart) {
+ str += ":";
+ if (zstart === 0) str += ":"; //leading zeros case
+ }
+ continue;
+ }
+ }
+ // converts 16-bit words from big-endian to little-endian before converting to hex string
+ str += Number(_ntohs(parts[word] & 0xffff)).toString(16);
+ str += word < 7 ? ":" : "";
+ }
+ return str;
+ }
+
+ function readSockaddr(sa, salen) {
+ // family / port offsets are common to both sockaddr_in and sockaddr_in6
+ var family = HEAP16[((sa)>>1)];
+ var port = _ntohs(HEAPU16[(((sa)+(2))>>1)]);
+ var addr;
+
+ switch (family) {
+ case 2:
+ if (salen !== 16) {
+ return { errno: 28 };
+ }
+ addr = HEAP32[(((sa)+(4))>>2)];
+ addr = inetNtop4(addr);
+ break;
+ case 10:
+ if (salen !== 28) {
+ return { errno: 28 };
+ }
+ addr = [
+ HEAP32[(((sa)+(8))>>2)],
+ HEAP32[(((sa)+(12))>>2)],
+ HEAP32[(((sa)+(16))>>2)],
+ HEAP32[(((sa)+(20))>>2)]
+ ];
+ addr = inetNtop6(addr);
+ break;
+ default:
+ return { errno: 5 };
+ }
+
+ return { family: family, addr: addr, port: port };
+ }
+
+
+ function inetPton4(str) {
+ var b = str.split('.');
+ for (var i = 0; i < 4; i++) {
+ var tmp = Number(b[i]);
+ if (isNaN(tmp)) return null;
+ b[i] = tmp;
+ }
+ return (b[0] | (b[1] << 8) | (b[2] << 16) | (b[3] << 24)) >>> 0;
+ }
+
+
+ /** @suppress {checkTypes} */
+ function jstoi_q(str) {
+ return parseInt(str);
+ }
+ function inetPton6(str) {
+ var words;
+ var w, offset, z, i;
+ /* http://home.deds.nl/~aeron/regex/ */
+ var valid6regx = /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i
+ var parts = [];
+ if (!valid6regx.test(str)) {
+ return null;
+ }
+ if (str === "::") {
+ return [0, 0, 0, 0, 0, 0, 0, 0];
+ }
+ // Z placeholder to keep track of zeros when splitting the string on ":"
+ if (str.startsWith("::")) {
+ str = str.replace("::", "Z:"); // leading zeros case
+ } else {
+ str = str.replace("::", ":Z:");
+ }
+
+ if (str.indexOf(".") > 0) {
+ // parse IPv4 embedded stress
+ str = str.replace(new RegExp('[.]', 'g'), ":");
+ words = str.split(":");
+ words[words.length-4] = jstoi_q(words[words.length-4]) + jstoi_q(words[words.length-3])*256;
+ words[words.length-3] = jstoi_q(words[words.length-2]) + jstoi_q(words[words.length-1])*256;
+ words = words.slice(0, words.length-2);
+ } else {
+ words = str.split(":");
+ }
+
+ offset = 0; z = 0;
+ for (w=0; w < words.length; w++) {
+ if (typeof words[w] == 'string') {
+ if (words[w] === 'Z') {
+ // compressed zeros - write appropriate number of zero words
+ for (z = 0; z < (8 - words.length+1); z++) {
+ parts[w+z] = 0;
+ }
+ offset = z-1;
+ } else {
+ // parse hex to field to 16-bit value and write it in network byte-order
+ parts[w+offset] = _htons(parseInt(words[w],16));
+ }
+ } else {
+ // parsed IPv4 words
+ parts[w+offset] = words[w];
+ }
+ }
+ return [
+ (parts[1] << 16) | parts[0],
+ (parts[3] << 16) | parts[2],
+ (parts[5] << 16) | parts[4],
+ (parts[7] << 16) | parts[6]
+ ];
+ }
+ var DNS = {address_map:{id:1,addrs:{},names:{}},lookup_name:function (name) {
+ // If the name is already a valid ipv4 / ipv6 address, don't generate a fake one.
+ var res = inetPton4(name);
+ if (res !== null) {
+ return name;
+ }
+ res = inetPton6(name);
+ if (res !== null) {
+ return name;
+ }
+
+ // See if this name is already mapped.
+ var addr;
+
+ if (DNS.address_map.addrs[name]) {
+ addr = DNS.address_map.addrs[name];
+ } else {
+ var id = DNS.address_map.id++;
+ assert(id < 65535, 'exceeded max address mappings of 65535');
+
+ addr = '172.29.' + (id & 0xff) + '.' + (id & 0xff00);
+
+ DNS.address_map.names[addr] = name;
+ DNS.address_map.addrs[name] = addr;
+ }
+
+ return addr;
+ },lookup_addr:function (addr) {
+ if (DNS.address_map.names[addr]) {
+ return DNS.address_map.names[addr];
+ }
+
+ return null;
+ }};
+ /** @param {boolean=} allowNull */
+ function getSocketAddress(addrp, addrlen, allowNull) {
+ if (allowNull && addrp === 0) return null;
+ var info = readSockaddr(addrp, addrlen);
+ if (info.errno) throw new FS.ErrnoError(info.errno);
+ info.addr = DNS.lookup_addr(info.addr) || info.addr;
+ return info;
+ }
+
+ function ___syscall_connect(fd, addr, addrlen) {
+ try {
+
+ var sock = getSocketFromFD(fd);
+ var info = getSocketAddress(addr, addrlen);
+ sock.sock_ops.connect(sock, info.addr, info.port);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ function ___syscall_faccessat(dirfd, path, amode, flags) {
+ try {
+
+ path = SYSCALLS.getStr(path);
+ assert(flags === 0);
+ path = SYSCALLS.calculateAt(dirfd, path);
+ if (amode & ~7) {
+ // need a valid mode
+ 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 /* otherwise, they've just passed F_OK */ && FS.nodePermissions(node, perms)) {
+ return -2;
+ }
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ function ___syscall_fadvise64(fd, offset, len, advice) {
+ return 0; // your advice is important to us (but we can't use it)
+ }
+
+ function ___syscall_fchmod(fd, mode) {
+ try {
+
+ FS.fchmod(fd, mode);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+
+ 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;
+ }
+ var newStream;
+ newStream = FS.createStream(stream, arg);
+ return newStream.fd;
+ }
+ case 1:
+ case 2:
+ return 0; // FD_CLOEXEC makes no sense for a single process.
+ case 3:
+ return stream.flags;
+ case 4: {
+ var arg = SYSCALLS.get();
+ stream.flags |= arg;
+ return 0;
+ }
+ case 5:
+ /* case 5: Currently in musl F_GETLK64 has same value as F_GETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */ {
+
+ var arg = SYSCALLS.get();
+ var offset = 0;
+ // We're always unlocked.
+ HEAP16[(((arg)+(offset))>>1)] = 2;
+ return 0;
+ }
+ case 6:
+ case 7:
+ /* case 6: Currently in musl F_SETLK64 has same value as F_SETLK, so omitted to avoid duplicate case blocks. If that changes, uncomment this */
+ /* case 7: Currently in musl F_SETLKW64 has same value as F_SETLKW, so omitted to avoid duplicate case blocks. If that changes, uncomment this */
+
+
+ return 0; // Pretend that the locking is successful.
+ case 16:
+ case 8:
+ return -28; // These are for sockets. We don't have them fully implemented yet.
+ case 9:
+ // musl trusts getown return values, due to a bug where they must be, as they overlap with errors. just return -1 here, so fcntl() returns that, and we set errno ourselves.
+ setErrNo(28);
+ return -1;
+ default: {
+ 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);
+ assert(size === 64);
+ // NOTE: None of the constants here are true. We're just returning safe and
+ // sane values.
+ HEAP32[(((buf)+(4))>>2)] = 4096;
+ HEAP32[(((buf)+(40))>>2)] = 4096;
+ HEAP32[(((buf)+(8))>>2)] = 1000000;
+ HEAP32[(((buf)+(12))>>2)] = 500000;
+ HEAP32[(((buf)+(16))>>2)] = 500000;
+ HEAP32[(((buf)+(20))>>2)] = FS.nextInode;
+ HEAP32[(((buf)+(24))>>2)] = 1000000;
+ HEAP32[(((buf)+(28))>>2)] = 42;
+ HEAP32[(((buf)+(44))>>2)] = 2; // ST_NOSUID
+ 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;
+ function bigintToI53Checked(num) {
+ return (num < MIN_INT53 || num > MAX_INT53) ? NaN : Number(num);
+ }
+
+
+
+
+ function ___syscall_ftruncate64(fd, /** @type {!BigInt} */ length) {
+ try {
+
+ length = bigintToI53Checked(length); 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;
+ }
+ }
+
+ function ___syscall_getcwd(buf, size) {
+ try {
+
+ if (size === 0) return -28;
+ var cwd = FS.cwd();
+ var cwdLengthInBytes = lengthBytesUTF8(cwd) + 1;
+ if (size < cwdLengthInBytes) return -68;
+ stringToUTF8(cwd, buf, size);
+ return cwdLengthInBytes;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ function ___syscall_getdents64(fd, dirp, count) {
+ try {
+
+ var stream = SYSCALLS.getStreamFromFD(fd)
+ if (!stream.getdents) {
+ stream.getdents = FS.readdir(stream.path);
+ }
+
+ var struct_size = 280;
+ var pos = 0;
+ var off = FS.llseek(stream, 0, 1);
+
+ var idx = Math.floor(off / struct_size);
+
+ while (idx < stream.getdents.length && pos + struct_size <= count) {
+ var id;
+ var type;
+ var name = stream.getdents[idx];
+ if (name === '.') {
+ id = stream.node.id;
+ type = 4; // DT_DIR
+ }
+ else if (name === '..') {
+ var lookup = FS.lookupPath(stream.path, { parent: true });
+ id = lookup.node.id;
+ type = 4; // DT_DIR
+ }
+ else {
+ var child = FS.lookupNode(stream.node, name);
+ id = child.id;
+ type = FS.isChrdev(child.mode) ? 2 : // DT_CHR, character device.
+ FS.isDir(child.mode) ? 4 : // DT_DIR, directory.
+ FS.isLink(child.mode) ? 10 : // DT_LNK, symbolic link.
+ 8; // DT_REG, regular file.
+ }
+ assert(id);
+ (tempI64 = [id>>>0,(tempDouble=id,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((dirp + pos)>>2)] = tempI64[0],HEAP32[(((dirp + pos)+(4))>>2)] = tempI64[1]);
+ (tempI64 = [(idx + 1) * struct_size>>>0,(tempDouble=(idx + 1) * struct_size,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((dirp + pos)+(8))>>2)] = tempI64[0],HEAP32[(((dirp + pos)+(12))>>2)] = tempI64[1]);
+ HEAP16[(((dirp + pos)+(16))>>1)] = 280;
+ HEAP8[(((dirp + pos)+(18))>>0)] = 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:
+ case 21505: {
+ if (!stream.tty) return -59;
+ return 0;
+ }
+ case 21510:
+ case 21511:
+ case 21512:
+ case 21506:
+ case 21507:
+ case 21508: {
+ if (!stream.tty) return -59;
+ return 0; // no-op, not actually adjusting terminal settings
+ }
+ case 21519: {
+ if (!stream.tty) return -59;
+ var argp = SYSCALLS.get();
+ HEAP32[((argp)>>2)] = 0;
+ return 0;
+ }
+ case 21520: {
+ if (!stream.tty) return -59;
+ return -28; // not supported
+ }
+ case 21531: {
+ var argp = SYSCALLS.get();
+ return FS.ioctl(stream, op, argp);
+ }
+ case 21523: {
+ // TODO: in theory we should write to the winsize struct that gets
+ // passed in, but for now musl doesn't read anything on it
+ if (!stream.tty) return -59;
+ return 0;
+ }
+ case 21524: {
+ // TODO: technically, this ioctl call should change the window size.
+ // but, since emscripten doesn't have any concept of a terminal window
+ // yet, we'll just silently throw it away as we do TIOCGWINSZ
+ if (!stream.tty) return -59;
+ return 0;
+ }
+ default: return -28; // not supported
+ }
+ } 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_mkdirat(dirfd, path, mode) {
+ try {
+
+ path = SYSCALLS.getStr(path);
+ path = SYSCALLS.calculateAt(dirfd, path);
+ // remove a trailing slash, if one - /a/b/ has basename of '', but
+ // we want to create b in the context of this function
+ path = PATH.normalize(path);
+ if (path[path.length-1] === '/') path = path.substr(0, path.length-1);
+ FS.mkdir(path, mode, 0);
+ return 0;
+ } 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);
+ assert(!flags, 'unknown flags in __syscall_newfstatat: ' + flags);
+ 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);
+ // readlink is one of the rare functions that write out a C string, but does never append a null to the output buffer(!)
+ // stringToUTF8() always appends a null byte, so restore the character under the null byte after the write.
+ HEAP8[buf+len] = endChar;
+ return len;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+
+
+
+
+ /** @param {number=} addrlen */
+ function writeSockaddr(sa, family, addr, port, addrlen) {
+ switch (family) {
+ case 2:
+ addr = inetPton4(addr);
+ zeroMemory(sa, 16);
+ if (addrlen) {
+ HEAP32[((addrlen)>>2)] = 16;
+ }
+ HEAP16[((sa)>>1)] = family;
+ HEAP32[(((sa)+(4))>>2)] = addr;
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
+ break;
+ case 10:
+ addr = inetPton6(addr);
+ zeroMemory(sa, 28);
+ if (addrlen) {
+ HEAP32[((addrlen)>>2)] = 28;
+ }
+ HEAP32[((sa)>>2)] = family;
+ HEAP32[(((sa)+(8))>>2)] = addr[0];
+ HEAP32[(((sa)+(12))>>2)] = addr[1];
+ HEAP32[(((sa)+(16))>>2)] = addr[2];
+ HEAP32[(((sa)+(20))>>2)] = addr[3];
+ HEAP16[(((sa)+(2))>>1)] = _htons(port);
+ break;
+ default:
+ return 5;
+ }
+ return 0;
+ }
+
+
+ function ___syscall_recvfrom(fd, buf, len, flags, addr, addrlen) {
+ try {
+
+ var sock = getSocketFromFD(fd);
+ var msg = sock.sock_ops.recvmsg(sock, len);
+ if (!msg) return 0; // socket is closed
+ if (addr) {
+ var errno = writeSockaddr(addr, sock.family, DNS.lookup_name(msg.addr), msg.port, addrlen);
+ assert(!errno);
+ }
+ HEAPU8.set(msg.buffer, buf);
+ return msg.buffer.byteLength;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) {
+ try {
+
+ oldpath = SYSCALLS.getStr(oldpath);
+ newpath = SYSCALLS.getStr(newpath);
+ oldpath = SYSCALLS.calculateAt(olddirfd, oldpath);
+ newpath = SYSCALLS.calculateAt(newdirfd, newpath);
+ FS.rename(oldpath, newpath);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ function ___syscall_rmdir(path) {
+ try {
+
+ path = SYSCALLS.getStr(path);
+ FS.rmdir(path);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+
+
+ function ___syscall_sendto(fd, message, length, flags, addr, addr_len) {
+ try {
+
+ var sock = getSocketFromFD(fd);
+ var dest = getSocketAddress(addr, addr_len, true);
+ if (!dest) {
+ // send, no address provided
+ return FS.write(sock.stream, HEAP8,message, length);
+ }
+ // sendto an address
+ return sock.sock_ops.sendmsg(sock, HEAP8,message, length, dest.addr, dest.port);
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+
+ function ___syscall_socket(domain, type, protocol) {
+ try {
+
+ var sock = SOCKFS.createSocket(domain, type, protocol);
+ assert(sock.stream.fd < 64); // XXX ? select() assumes socket fd values are in 0..63
+ return sock.stream.fd;
+ } 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_symlink(target, linkpath) {
+ try {
+
+ target = SYSCALLS.getStr(target);
+ linkpath = SYSCALLS.getStr(linkpath);
+ FS.symlink(target, linkpath);
+ return 0;
+ } 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;
+ }
+ }
+
+ function readI53FromI64(ptr) {
+ return HEAPU32[ptr>>2] + HEAP32[ptr+4>>2] * 4294967296;
+ }
+
+ function ___syscall_utimensat(dirfd, path, times, flags) {
+ try {
+
+ path = SYSCALLS.getStr(path);
+ assert(flags === 0);
+ path = SYSCALLS.calculateAt(dirfd, path, true);
+ if (!times) {
+ var atime = Date.now();
+ var mtime = atime;
+ } else {
+ var seconds = readI53FromI64(times);
+ var nanoseconds = HEAP32[(((times)+(8))>>2)];
+ atime = (seconds*1000) + (nanoseconds/(1000*1000));
+ times += 16;
+ seconds = readI53FromI64(times);
+ nanoseconds = HEAP32[(((times)+(8))>>2)];
+ mtime = (seconds*1000) + (nanoseconds/(1000*1000));
+ }
+ FS.utime(path, atime, mtime);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+
+ function ___throw_exception_with_stack_trace(ex) {
+ var e = new WebAssembly.Exception(getCppExceptionTag(), [ex], {traceStack: true});
+ e.message = getExceptionMessage(e);
+ // The generated stack trace will be in the form of:
+ //
+ // Error
+ // at ___throw_exception_with_stack_trace(test.js:1139:13)
+ // at __cxa_throw (wasm://wasm/009a7c9a:wasm-function[1551]:0x24367)
+ // ...
+ //
+ // Remove this JS function name, which is in the second line, from the stack
+ // trace. Note that .stack does not yet exist in all browsers (see #18828).
+ if (e.stack) {
+ var arr = e.stack.split('\n');
+ arr.splice(1,1);
+ e.stack = arr.join('\n');
+ }
+ throw e;
+ }
+
+ var nowIsMonotonic = true;;
+ function __emscripten_get_now_is_monotonic() {
+ return nowIsMonotonic;
+ }
+
+ function __gmtime_js(time, tmPtr) {
+ var date = new Date(readI53FromI64(time)*1000);
+ HEAP32[((tmPtr)>>2)] = date.getUTCSeconds();
+ HEAP32[(((tmPtr)+(4))>>2)] = date.getUTCMinutes();
+ HEAP32[(((tmPtr)+(8))>>2)] = date.getUTCHours();
+ HEAP32[(((tmPtr)+(12))>>2)] = date.getUTCDate();
+ HEAP32[(((tmPtr)+(16))>>2)] = date.getUTCMonth();
+ HEAP32[(((tmPtr)+(20))>>2)] = date.getUTCFullYear()-1900;
+ HEAP32[(((tmPtr)+(24))>>2)] = date.getUTCDay();
+ var start = Date.UTC(date.getUTCFullYear(), 0, 1, 0, 0, 0, 0);
+ var yday = ((date.getTime() - start) / (1000 * 60 * 60 * 24))|0;
+ HEAP32[(((tmPtr)+(28))>>2)] = yday;
+ }
+
+
+ function __isLeapYear(year) {
+ return 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];
+ function __yday_from_date(date) {
+ var isLeapYear = __isLeapYear(date.getFullYear());
+ var monthDaysCumulative = (isLeapYear ? __MONTH_DAYS_LEAP_CUMULATIVE : __MONTH_DAYS_REGULAR_CUMULATIVE);
+ var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1
+
+ return yday;
+ }
+ function __localtime_js(time, tmPtr) {
+ var date = new Date(readI53FromI64(time)*1000);
+ 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 = __yday_from_date(date)|0;
+ HEAP32[(((tmPtr)+(28))>>2)] = yday;
+ HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60);
+
+ // Attention: DST is in December in South, and some regions don't have DST at all.
+ 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, off, allocated, addr) {
+ try {
+
+ var stream = SYSCALLS.getStreamFromFD(fd);
+ var res = FS.mmap(stream, len, off, 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 __msync_js(addr, len, prot, flags, fd, offset) {
+ try {
+
+ SYSCALLS.doMsync(addr, SYSCALLS.getStreamFromFD(fd), len, flags, 0);
+ 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) {
+ try {
+
+ var stream = SYSCALLS.getStreamFromFD(fd);
+ if (prot & 2) {
+ SYSCALLS.doMsync(addr, stream, len, flags, offset);
+ }
+ FS.munmap(stream);
+ // implicitly return 0
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return -e.errno;
+ }
+ }
+
+ function allocateUTF8(str) {
+ var size = lengthBytesUTF8(str) + 1;
+ var ret = _malloc(size);
+ if (ret) stringToUTF8Array(str, HEAP8, ret, size);
+ return ret;
+ }
+ function __tzset_js(timezone, daylight, tzname) {
+ // TODO: Use (malleable) environment variables instead of system settings.
+ 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();
+
+ // Local standard timezone offset. Local standard time is not adjusted for daylight savings.
+ // This code uses the fact that getTimezoneOffset returns a greater value during Standard Time versus Daylight Saving Time (DST).
+ // Thus it determines the expected output during Standard Time, and it compares whether the output of the given date the same (Standard) or less (DST).
+ var stdTimezoneOffset = Math.max(winterOffset, summerOffset);
+
+ // timezone is specified as seconds west of UTC ("The external variable
+ // `timezone` shall be set to the difference, in seconds, between
+ // Coordinated Universal Time (UTC) and local standard time."), the same
+ // as returned by stdTimezoneOffset.
+ // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html
+ 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);
+ var winterNamePtr = allocateUTF8(winterName);
+ var summerNamePtr = allocateUTF8(summerName);
+ if (summerOffset < winterOffset) {
+ // Northern hemisphere
+ HEAPU32[((tzname)>>2)] = winterNamePtr;
+ HEAPU32[(((tzname)+(4))>>2)] = summerNamePtr;
+ } else {
+ HEAPU32[((tzname)>>2)] = summerNamePtr;
+ HEAPU32[(((tzname)+(4))>>2)] = winterNamePtr;
+ }
+ }
+
+ function _abort() {
+ abort('native code called abort()');
+ }
+
+ var dlopenMissingError = 'To use dlopen, you need enable dynamic linking, see https://github.com/emscripten-core/emscripten/wiki/Linking';
+ function _dlopen(handle) {
+ abort(dlopenMissingError);
+ }
+
+ var DOTNETENTROPY = {getBatchedRandomValues:function (buffer, bufferLength) {
+ // batchedQuotaMax is the max number of bytes as specified by the api spec.
+ // If the byteLength of array is greater than 65536, throw a QuotaExceededError and terminate the algorithm.
+ // https://www.w3.org/TR/WebCryptoAPI/#Crypto-method-getRandomValues
+ const batchedQuotaMax = 65536;
+
+ // Chrome doesn't want SharedArrayBuffer to be passed to crypto APIs
+ const needTempBuf = typeof SharedArrayBuffer !== 'undefined' && Module.HEAPU8.buffer instanceof SharedArrayBuffer;
+ // if we need a temporary buffer, make one that is big enough and write into it from the beginning
+ // otherwise, use the wasm instance memory and write at the given 'buffer' pointer offset.
+ const buf = needTempBuf ? new ArrayBuffer(bufferLength) : Module.HEAPU8.buffer;
+ const offset = needTempBuf ? 0 : buffer;
+ // for modern web browsers
+ // map the work array to the memory buffer passed with the length
+ for (let i = 0; i < bufferLength; i += batchedQuotaMax) {
+ const view = new Uint8Array(buf, offset + i, Math.min(bufferLength - i, batchedQuotaMax));
+ crypto.getRandomValues(view)
+ }
+ if (needTempBuf) {
+ // copy data out of the temporary buffer into the wasm instance memory
+ const heapView = new Uint8Array(Module.HEAPU8.buffer, buffer, bufferLength);
+ heapView.set(new Uint8Array(buf));
+ }
+ }};
+ function _dotnet_browser_entropy(buffer, bufferLength) {
+ // check that we have crypto available
+ if (typeof crypto === 'object' && typeof crypto['getRandomValues'] === 'function') {
+ DOTNETENTROPY.getBatchedRandomValues(buffer, bufferLength)
+ return 0;
+ } else {
+ // we couldn't find a proper implementation, as Math.random() is not suitable
+ // instead of aborting here we will return and let managed code handle the message
+ return -1;
+ }
+ }
+
+ function _emscripten_console_error(str) {
+ assert(typeof str == 'number');
+ console.error(UTF8ToString(str));
+ }
+
+ function _emscripten_date_now() {
+ return Date.now();
+ }
+
+ function getHeapMax() {
+ // Stay one Wasm page short of 4GB: while e.g. Chrome is able to allocate
+ // full 4GB Wasm memories, the size will wrap back to 0 bytes in Wasm side
+ // for any code that deals with heap sizes, which would require special
+ // casing all heap size related code to treat 0 specially.
+ return 2147483648;
+ }
+ function _emscripten_get_heap_max() {
+ return getHeapMax();
+ }
+
+ var _emscripten_get_now;if (ENVIRONMENT_IS_NODE) {
+ _emscripten_get_now = () => {
+ var t = process.hrtime();
+ return t[0] * 1e3 + t[1] / 1e6;
+ };
+ } else if (typeof dateNow != 'undefined') {
+ _emscripten_get_now = dateNow;
+ } else _emscripten_get_now = () => performance.now();
+ ;
+
+ function _emscripten_get_now_res() { // return resolution of get_now, in nanoseconds
+ if (ENVIRONMENT_IS_NODE) {
+ return 1; // nanoseconds
+ } else
+ if (typeof dateNow != 'undefined') {
+ return 1000; // microseconds (1/1000 of a millisecond)
+ } else
+ // Modern environment where performance.now() is supported:
+ return 1000; // microseconds (1/1000 of a millisecond)
+ }
+
+ function __webgl_enable_ANGLE_instanced_arrays(ctx) {
+ // Extension available in WebGL 1 from Firefox 26 and Google Chrome 30 onwards. Core feature in WebGL 2.
+ var ext = ctx.getExtension('ANGLE_instanced_arrays');
+ if (ext) {
+ ctx['vertexAttribDivisor'] = function(index, divisor) { ext['vertexAttribDivisorANGLE'](index, divisor); };
+ ctx['drawArraysInstanced'] = function(mode, first, count, primcount) { ext['drawArraysInstancedANGLE'](mode, first, count, primcount); };
+ ctx['drawElementsInstanced'] = function(mode, count, type, indices, primcount) { ext['drawElementsInstancedANGLE'](mode, count, type, indices, primcount); };
+ return 1;
+ }
+ }
+
+ function __webgl_enable_OES_vertex_array_object(ctx) {
+ // Extension available in WebGL 1 from Firefox 25 and WebKit 536.28/desktop Safari 6.0.3 onwards. Core feature in WebGL 2.
+ var ext = ctx.getExtension('OES_vertex_array_object');
+ if (ext) {
+ ctx['createVertexArray'] = function() { return ext['createVertexArrayOES'](); };
+ ctx['deleteVertexArray'] = function(vao) { ext['deleteVertexArrayOES'](vao); };
+ ctx['bindVertexArray'] = function(vao) { ext['bindVertexArrayOES'](vao); };
+ ctx['isVertexArray'] = function(vao) { return ext['isVertexArrayOES'](vao); };
+ return 1;
+ }
+ }
+
+ function __webgl_enable_WEBGL_draw_buffers(ctx) {
+ // Extension available in WebGL 1 from Firefox 28 onwards. Core feature in WebGL 2.
+ var ext = ctx.getExtension('WEBGL_draw_buffers');
+ if (ext) {
+ ctx['drawBuffers'] = function(n, bufs) { ext['drawBuffersWEBGL'](n, bufs); };
+ return 1;
+ }
+ }
+
+ function __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(ctx) {
+ // Closure is expected to be allowed to minify the '.dibvbi' property, so not accessing it quoted.
+ return !!(ctx.dibvbi = ctx.getExtension('WEBGL_draw_instanced_base_vertex_base_instance'));
+ }
+
+ function __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(ctx) {
+ // Closure is expected to be allowed to minify the '.mdibvbi' property, so not accessing it quoted.
+ return !!(ctx.mdibvbi = ctx.getExtension('WEBGL_multi_draw_instanced_base_vertex_base_instance'));
+ }
+
+ function __webgl_enable_WEBGL_multi_draw(ctx) {
+ // Closure is expected to be allowed to minify the '.multiDrawWebgl' property, so not accessing it quoted.
+ return !!(ctx.multiDrawWebgl = ctx.getExtension('WEBGL_multi_draw'));
+ }
+
+ var GL = {counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],samplers:[],transformFeedbacks:[],syncs:[],stringCache:{},stringiCache:{},unpackAlignment:4,recordError:function recordError(errorCode) {
+ if (!GL.lastError) {
+ GL.lastError = errorCode;
+ }
+ },getNewId:function(table) {
+ var ret = GL.counter++;
+ for (var i = table.length; i < ret; i++) {
+ table[i] = null;
+ }
+ return ret;
+ },getSource:function(shader, count, string, length) {
+ var source = '';
+ for (var i = 0; i < count; ++i) {
+ var len = length ? HEAP32[(((length)+(i*4))>>2)] : -1;
+ source += UTF8ToString(HEAP32[(((string)+(i*4))>>2)], len < 0 ? undefined : len);
+ }
+ return source;
+ },createContext:function(/** @type {HTMLCanvasElement} */ canvas, webGLContextAttributes) {
+
+ // BUG: Workaround Safari WebGL issue: After successfully acquiring WebGL context on a canvas,
+ // calling .getContext() will always return that context independent of which 'webgl' or 'webgl2'
+ // context version was passed. See https://bugs.webkit.org/show_bug.cgi?id=222758 and
+ // https://github.com/emscripten-core/emscripten/issues/13295.
+ // TODO: Once the bug is fixed and shipped in Safari, adjust the Safari version field in above check.
+ if (!canvas.getContextSafariWebGL2Fixed) {
+ canvas.getContextSafariWebGL2Fixed = canvas.getContext;
+ /** @type {function(this:HTMLCanvasElement, string, (Object|null)=): (Object|null)} */
+ function fixedGetContext(ver, attrs) {
+ var gl = canvas.getContextSafariWebGL2Fixed(ver, attrs);
+ return ((ver == 'webgl') == (gl instanceof WebGLRenderingContext)) ? gl : null;
+ }
+ canvas.getContext = fixedGetContext;
+ }
+
+ var ctx =
+ (webGLContextAttributes.majorVersion > 1)
+ ?
+ canvas.getContext("webgl2", webGLContextAttributes)
+ :
+ (canvas.getContext("webgl", webGLContextAttributes)
+ // https://caniuse.com/#feat=webgl
+ );
+
+ if (!ctx) return 0;
+
+ var handle = GL.registerContext(ctx, webGLContextAttributes);
+
+ return handle;
+ },registerContext:function(ctx, webGLContextAttributes) {
+ // without pthreads a context is just an integer ID
+ var handle = GL.getNewId(GL.contexts);
+
+ var context = {
+ handle: handle,
+ attributes: webGLContextAttributes,
+ version: webGLContextAttributes.majorVersion,
+ GLctx: ctx
+ };
+
+ // Store the created context object so that we can access the context given a canvas without having to pass the parameters again.
+ if (ctx.canvas) ctx.canvas.GLctxObject = context;
+ GL.contexts[handle] = context;
+ if (typeof webGLContextAttributes.enableExtensionsByDefault == 'undefined' || webGLContextAttributes.enableExtensionsByDefault) {
+ GL.initExtensions(context);
+ }
+
+ return handle;
+ },makeContextCurrent:function(contextHandle) {
+
+ GL.currentContext = GL.contexts[contextHandle]; // Active Emscripten GL layer context object.
+ Module.ctx = GLctx = GL.currentContext && GL.currentContext.GLctx; // Active WebGL context object.
+ return !(contextHandle && !GLctx);
+ },getContext:function(contextHandle) {
+ return GL.contexts[contextHandle];
+ },deleteContext:function(contextHandle) {
+ if (GL.currentContext === GL.contexts[contextHandle]) GL.currentContext = null;
+ if (typeof JSEvents == 'object') JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas); // Release all JS event handlers on the DOM element that the GL context is associated with since the context is now deleted.
+ if (GL.contexts[contextHandle] && GL.contexts[contextHandle].GLctx.canvas) GL.contexts[contextHandle].GLctx.canvas.GLctxObject = undefined; // Make sure the canvas object no longer refers to the context object so there are no GC surprises.
+ GL.contexts[contextHandle] = null;
+ },initExtensions:function(context) {
+ // If this function is called without a specific context object, init the extensions of the currently active context.
+ if (!context) context = GL.currentContext;
+
+ if (context.initExtensionsDone) return;
+ context.initExtensionsDone = true;
+
+ var GLctx = context.GLctx;
+
+ // Detect the presence of a few extensions manually, this GL interop layer itself will need to know if they exist.
+
+ // Extensions that are only available in WebGL 1 (the calls will be no-ops if called on a WebGL 2 context active)
+ __webgl_enable_ANGLE_instanced_arrays(GLctx);
+ __webgl_enable_OES_vertex_array_object(GLctx);
+ __webgl_enable_WEBGL_draw_buffers(GLctx);
+ // Extensions that are available from WebGL >= 2 (no-op if called on a WebGL 1 context active)
+ __webgl_enable_WEBGL_draw_instanced_base_vertex_base_instance(GLctx);
+ __webgl_enable_WEBGL_multi_draw_instanced_base_vertex_base_instance(GLctx);
+
+ // On WebGL 2, EXT_disjoint_timer_query is replaced with an alternative
+ // that's based on core APIs, and exposes only the queryCounterEXT()
+ // entrypoint.
+ if (context.version >= 2) {
+ GLctx.disjointTimerQueryExt = GLctx.getExtension("EXT_disjoint_timer_query_webgl2");
+ }
+
+ // However, Firefox exposes the WebGL 1 version on WebGL 2 as well and
+ // thus we look for the WebGL 1 version again if the WebGL 2 version
+ // isn't present. https://bugzilla.mozilla.org/show_bug.cgi?id=1328882
+ if (context.version < 2 || !GLctx.disjointTimerQueryExt)
+ {
+ GLctx.disjointTimerQueryExt = GLctx.getExtension("EXT_disjoint_timer_query");
+ }
+
+ __webgl_enable_WEBGL_multi_draw(GLctx);
+
+ // .getSupportedExtensions() can return null if context is lost, so coerce to empty array.
+ var exts = GLctx.getSupportedExtensions() || [];
+ exts.forEach(function(ext) {
+ // WEBGL_lose_context, WEBGL_debug_renderer_info and WEBGL_debug_shaders are not enabled by default.
+ if (!ext.includes('lose_context') && !ext.includes('debug')) {
+ // Call .getExtension() to enable that extension permanently.
+ GLctx.getExtension(ext);
+ }
+ });
+ }};
+ function _emscripten_glActiveTexture(x0) { GLctx['activeTexture'](x0) }
+
+ function _emscripten_glAttachShader(program, shader) {
+ GLctx.attachShader(GL.programs[program], GL.shaders[shader]);
+ }
+
+ function _emscripten_glBeginQuery(target, id) {
+ GLctx['beginQuery'](target, GL.queries[id]);
+ }
+
+ function _emscripten_glBeginQueryEXT(target, id) {
+ GLctx.disjointTimerQueryExt['beginQueryEXT'](target, GL.queries[id]);
+ }
+
+ function _emscripten_glBeginTransformFeedback(x0) { GLctx['beginTransformFeedback'](x0) }
+
+ function _emscripten_glBindAttribLocation(program, index, name) {
+ GLctx.bindAttribLocation(GL.programs[program], index, UTF8ToString(name));
+ }
+
+ function _emscripten_glBindBuffer(target, buffer) {
+
+ if (target == 0x88EB /*GL_PIXEL_PACK_BUFFER*/) {
+ // In WebGL 2 glReadPixels entry point, we need to use a different WebGL 2 API function call when a buffer is bound to
+ // GL_PIXEL_PACK_BUFFER_BINDING point, so must keep track whether that binding point is non-null to know what is
+ // the proper API function to call.
+ GLctx.currentPixelPackBufferBinding = buffer;
+ } else if (target == 0x88EC /*GL_PIXEL_UNPACK_BUFFER*/) {
+ // In WebGL 2 gl(Compressed)Tex(Sub)Image[23]D entry points, we need to
+ // use a different WebGL 2 API function call when a buffer is bound to
+ // GL_PIXEL_UNPACK_BUFFER_BINDING point, so must keep track whether that
+ // binding point is non-null to know what is the proper API function to
+ // call.
+ GLctx.currentPixelUnpackBufferBinding = buffer;
+ }
+ GLctx.bindBuffer(target, GL.buffers[buffer]);
+ }
+
+ function _emscripten_glBindBufferBase(target, index, buffer) {
+ GLctx['bindBufferBase'](target, index, GL.buffers[buffer]);
+ }
+
+ function _emscripten_glBindBufferRange(target, index, buffer, offset, ptrsize) {
+ GLctx['bindBufferRange'](target, index, GL.buffers[buffer], offset, ptrsize);
+ }
+
+ function _emscripten_glBindFramebuffer(target, framebuffer) {
+
+ GLctx.bindFramebuffer(target, GL.framebuffers[framebuffer]);
+
+ }
+
+ function _emscripten_glBindRenderbuffer(target, renderbuffer) {
+ GLctx.bindRenderbuffer(target, GL.renderbuffers[renderbuffer]);
+ }
+
+ function _emscripten_glBindSampler(unit, sampler) {
+ GLctx['bindSampler'](unit, GL.samplers[sampler]);
+ }
+
+ function _emscripten_glBindTexture(target, texture) {
+ GLctx.bindTexture(target, GL.textures[texture]);
+ }
+
+ function _emscripten_glBindTransformFeedback(target, id) {
+ GLctx['bindTransformFeedback'](target, GL.transformFeedbacks[id]);
+ }
+
+ function _emscripten_glBindVertexArray(vao) {
+ GLctx['bindVertexArray'](GL.vaos[vao]);
+ }
+
+ function _emscripten_glBindVertexArrayOES(vao) {
+ GLctx['bindVertexArray'](GL.vaos[vao]);
+ }
+
+ function _emscripten_glBlendColor(x0, x1, x2, x3) { GLctx['blendColor'](x0, x1, x2, x3) }
+
+ function _emscripten_glBlendEquation(x0) { GLctx['blendEquation'](x0) }
+
+ function _emscripten_glBlendEquationSeparate(x0, x1) { GLctx['blendEquationSeparate'](x0, x1) }
+
+ function _emscripten_glBlendFunc(x0, x1) { GLctx['blendFunc'](x0, x1) }
+
+ function _emscripten_glBlendFuncSeparate(x0, x1, x2, x3) { GLctx['blendFuncSeparate'](x0, x1, x2, x3) }
+
+ function _emscripten_glBlitFramebuffer(x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) { GLctx['blitFramebuffer'](x0, x1, x2, x3, x4, x5, x6, x7, x8, x9) }
+
+ function _emscripten_glBufferData(target, size, data, usage) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ // If size is zero, WebGL would interpret uploading the whole input arraybuffer (starting from given offset), which would
+ // not make sense in WebAssembly, so avoid uploading if size is zero. However we must still call bufferData to establish a
+ // backing storage of zero bytes.
+ if (data && size) {
+ GLctx.bufferData(target, HEAPU8, usage, data, size);
+ } else {
+ GLctx.bufferData(target, size, usage);
+ }
+ } else {
+ // N.b. here first form specifies a heap subarray, second form an integer size, so the ?: code here is polymorphic. It is advised to avoid
+ // randomly mixing both uses in calling code, to avoid any potential JS engine JIT issues.
+ GLctx.bufferData(target, data ? HEAPU8.subarray(data, data+size) : size, usage);
+ }
+ }
+
+ function _emscripten_glBufferSubData(target, offset, size, data) {
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ size && GLctx.bufferSubData(target, offset, HEAPU8, data, size);
+ return;
+ }
+ GLctx.bufferSubData(target, offset, HEAPU8.subarray(data, data+size));
+ }
+
+ function _emscripten_glCheckFramebufferStatus(x0) { return GLctx['checkFramebufferStatus'](x0) }
+
+ function _emscripten_glClear(x0) { GLctx['clear'](x0) }
+
+ function _emscripten_glClearBufferfi(x0, x1, x2, x3) { GLctx['clearBufferfi'](x0, x1, x2, x3) }
+
+ function _emscripten_glClearBufferfv(buffer, drawbuffer, value) {
+
+ GLctx['clearBufferfv'](buffer, drawbuffer, HEAPF32, value>>2);
+ }
+
+ function _emscripten_glClearBufferiv(buffer, drawbuffer, value) {
+
+ GLctx['clearBufferiv'](buffer, drawbuffer, HEAP32, value>>2);
+ }
+
+ function _emscripten_glClearBufferuiv(buffer, drawbuffer, value) {
+
+ GLctx['clearBufferuiv'](buffer, drawbuffer, HEAPU32, value>>2);
+ }
+
+ function _emscripten_glClearColor(x0, x1, x2, x3) { GLctx['clearColor'](x0, x1, x2, x3) }
+
+ function _emscripten_glClearDepthf(x0) { GLctx['clearDepth'](x0) }
+
+ function _emscripten_glClearStencil(x0) { GLctx['clearStencil'](x0) }
+
+ function _emscripten_glClientWaitSync(sync, flags, /** @type {!BigInt} */ timeout) {
+ // WebGL2 vs GLES3 differences: in GLES3, the timeout parameter is a uint64, where 0xFFFFFFFFFFFFFFFFULL means GL_TIMEOUT_IGNORED.
+ // In JS, there's no 64-bit value types, so instead timeout is taken to be signed, and GL_TIMEOUT_IGNORED is given value -1.
+ // Inherently the value accepted in the timeout is lossy, and can't take in arbitrary u64 bit pattern (but most likely doesn't matter)
+ // See https://www.khronos.org/registry/webgl/specs/latest/2.0/#5.15
+ timeout = Number(timeout);
+ return GLctx.clientWaitSync(GL.syncs[sync], flags, timeout);
+ }
+
+ function _emscripten_glColorMask(red, green, blue, alpha) {
+ GLctx.colorMask(!!red, !!green, !!blue, !!alpha);
+ }
+
+ function _emscripten_glCompileShader(shader) {
+ GLctx.compileShader(GL.shaders[shader]);
+ }
+
+ function _emscripten_glCompressedTexImage2D(target, level, internalFormat, width, height, border, imageSize, data) {
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ if (GLctx.currentPixelUnpackBufferBinding || !imageSize) {
+ GLctx['compressedTexImage2D'](target, level, internalFormat, width, height, border, imageSize, data);
+ } else {
+ GLctx['compressedTexImage2D'](target, level, internalFormat, width, height, border, HEAPU8, data, imageSize);
+ }
+ return;
+ }
+ GLctx['compressedTexImage2D'](target, level, internalFormat, width, height, border, data ? HEAPU8.subarray((data), (data+imageSize)) : null);
+ }
+
+ function _emscripten_glCompressedTexImage3D(target, level, internalFormat, width, height, depth, border, imageSize, data) {
+ if (GLctx.currentPixelUnpackBufferBinding) {
+ GLctx['compressedTexImage3D'](target, level, internalFormat, width, height, depth, border, imageSize, data);
+ } else {
+ GLctx['compressedTexImage3D'](target, level, internalFormat, width, height, depth, border, HEAPU8, data, imageSize);
+ }
+ }
+
+ function _emscripten_glCompressedTexSubImage2D(target, level, xoffset, yoffset, width, height, format, imageSize, data) {
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ if (GLctx.currentPixelUnpackBufferBinding || !imageSize) {
+ GLctx['compressedTexSubImage2D'](target, level, xoffset, yoffset, width, height, format, imageSize, data);
+ } else {
+ GLctx['compressedTexSubImage2D'](target, level, xoffset, yoffset, width, height, format, HEAPU8, data, imageSize);
+ }
+ return;
+ }
+ GLctx['compressedTexSubImage2D'](target, level, xoffset, yoffset, width, height, format, data ? HEAPU8.subarray((data), (data+imageSize)) : null);
+ }
+
+ function _emscripten_glCompressedTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data) {
+ if (GLctx.currentPixelUnpackBufferBinding) {
+ GLctx['compressedTexSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data);
+ } else {
+ GLctx['compressedTexSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, HEAPU8, data, imageSize);
+ }
+ }
+
+ function _emscripten_glCopyBufferSubData(x0, x1, x2, x3, x4) { GLctx['copyBufferSubData'](x0, x1, x2, x3, x4) }
+
+ function _emscripten_glCopyTexImage2D(x0, x1, x2, x3, x4, x5, x6, x7) { GLctx['copyTexImage2D'](x0, x1, x2, x3, x4, x5, x6, x7) }
+
+ function _emscripten_glCopyTexSubImage2D(x0, x1, x2, x3, x4, x5, x6, x7) { GLctx['copyTexSubImage2D'](x0, x1, x2, x3, x4, x5, x6, x7) }
+
+ function _emscripten_glCopyTexSubImage3D(x0, x1, x2, x3, x4, x5, x6, x7, x8) { GLctx['copyTexSubImage3D'](x0, x1, x2, x3, x4, x5, x6, x7, x8) }
+
+ function _emscripten_glCreateProgram() {
+ var id = GL.getNewId(GL.programs);
+ var program = GLctx.createProgram();
+ // Store additional information needed for each shader program:
+ program.name = id;
+ // Lazy cache results of glGetProgramiv(GL_ACTIVE_UNIFORM_MAX_LENGTH/GL_ACTIVE_ATTRIBUTE_MAX_LENGTH/GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH)
+ program.maxUniformLength = program.maxAttributeLength = program.maxUniformBlockNameLength = 0;
+ program.uniformIdCounter = 1;
+ GL.programs[id] = program;
+ return id;
+ }
+
+ function _emscripten_glCreateShader(shaderType) {
+ var id = GL.getNewId(GL.shaders);
+ GL.shaders[id] = GLctx.createShader(shaderType);
+
+ return id;
+ }
+
+ function _emscripten_glCullFace(x0) { GLctx['cullFace'](x0) }
+
+ function _emscripten_glDeleteBuffers(n, buffers) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((buffers)+(i*4))>>2)];
+ var buffer = GL.buffers[id];
+
+ // From spec: "glDeleteBuffers silently ignores 0's and names that do not
+ // correspond to existing buffer objects."
+ if (!buffer) continue;
+
+ GLctx.deleteBuffer(buffer);
+ buffer.name = 0;
+ GL.buffers[id] = null;
+
+ if (id == GLctx.currentPixelPackBufferBinding) GLctx.currentPixelPackBufferBinding = 0;
+ if (id == GLctx.currentPixelUnpackBufferBinding) GLctx.currentPixelUnpackBufferBinding = 0;
+ }
+ }
+
+ function _emscripten_glDeleteFramebuffers(n, framebuffers) {
+ for (var i = 0; i < n; ++i) {
+ var id = HEAP32[(((framebuffers)+(i*4))>>2)];
+ var framebuffer = GL.framebuffers[id];
+ if (!framebuffer) continue; // GL spec: "glDeleteFramebuffers silently ignores 0s and names that do not correspond to existing framebuffer objects".
+ GLctx.deleteFramebuffer(framebuffer);
+ framebuffer.name = 0;
+ GL.framebuffers[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteProgram(id) {
+ if (!id) return;
+ var program = GL.programs[id];
+ if (!program) { // glDeleteProgram actually signals an error when deleting a nonexisting object, unlike some other GL delete functions.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ GLctx.deleteProgram(program);
+ program.name = 0;
+ GL.programs[id] = null;
+ }
+
+ function _emscripten_glDeleteQueries(n, ids) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((ids)+(i*4))>>2)];
+ var query = GL.queries[id];
+ if (!query) continue; // GL spec: "unused names in ids are ignored, as is the name zero."
+ GLctx['deleteQuery'](query);
+ GL.queries[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteQueriesEXT(n, ids) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((ids)+(i*4))>>2)];
+ var query = GL.queries[id];
+ if (!query) continue; // GL spec: "unused names in ids are ignored, as is the name zero."
+ GLctx.disjointTimerQueryExt['deleteQueryEXT'](query);
+ GL.queries[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteRenderbuffers(n, renderbuffers) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((renderbuffers)+(i*4))>>2)];
+ var renderbuffer = GL.renderbuffers[id];
+ if (!renderbuffer) continue; // GL spec: "glDeleteRenderbuffers silently ignores 0s and names that do not correspond to existing renderbuffer objects".
+ GLctx.deleteRenderbuffer(renderbuffer);
+ renderbuffer.name = 0;
+ GL.renderbuffers[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteSamplers(n, samplers) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((samplers)+(i*4))>>2)];
+ var sampler = GL.samplers[id];
+ if (!sampler) continue;
+ GLctx['deleteSampler'](sampler);
+ sampler.name = 0;
+ GL.samplers[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteShader(id) {
+ if (!id) return;
+ var shader = GL.shaders[id];
+ if (!shader) { // glDeleteShader actually signals an error when deleting a nonexisting object, unlike some other GL delete functions.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ GLctx.deleteShader(shader);
+ GL.shaders[id] = null;
+ }
+
+ function _emscripten_glDeleteSync(id) {
+ if (!id) return;
+ var sync = GL.syncs[id];
+ if (!sync) { // glDeleteSync signals an error when deleting a nonexisting object, unlike some other GL delete functions.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ GLctx.deleteSync(sync);
+ sync.name = 0;
+ GL.syncs[id] = null;
+ }
+
+ function _emscripten_glDeleteTextures(n, textures) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((textures)+(i*4))>>2)];
+ var texture = GL.textures[id];
+ if (!texture) continue; // GL spec: "glDeleteTextures silently ignores 0s and names that do not correspond to existing textures".
+ GLctx.deleteTexture(texture);
+ texture.name = 0;
+ GL.textures[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteTransformFeedbacks(n, ids) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((ids)+(i*4))>>2)];
+ var transformFeedback = GL.transformFeedbacks[id];
+ if (!transformFeedback) continue; // GL spec: "unused names in ids are ignored, as is the name zero."
+ GLctx['deleteTransformFeedback'](transformFeedback);
+ transformFeedback.name = 0;
+ GL.transformFeedbacks[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteVertexArrays(n, vaos) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((vaos)+(i*4))>>2)];
+ GLctx['deleteVertexArray'](GL.vaos[id]);
+ GL.vaos[id] = null;
+ }
+ }
+
+ function _emscripten_glDeleteVertexArraysOES(n, vaos) {
+ for (var i = 0; i < n; i++) {
+ var id = HEAP32[(((vaos)+(i*4))>>2)];
+ GLctx['deleteVertexArray'](GL.vaos[id]);
+ GL.vaos[id] = null;
+ }
+ }
+
+ function _emscripten_glDepthFunc(x0) { GLctx['depthFunc'](x0) }
+
+ function _emscripten_glDepthMask(flag) {
+ GLctx.depthMask(!!flag);
+ }
+
+ function _emscripten_glDepthRangef(x0, x1) { GLctx['depthRange'](x0, x1) }
+
+ function _emscripten_glDetachShader(program, shader) {
+ GLctx.detachShader(GL.programs[program], GL.shaders[shader]);
+ }
+
+ function _emscripten_glDisable(x0) { GLctx['disable'](x0) }
+
+ function _emscripten_glDisableVertexAttribArray(index) {
+ GLctx.disableVertexAttribArray(index);
+ }
+
+ function _emscripten_glDrawArrays(mode, first, count) {
+
+ GLctx.drawArrays(mode, first, count);
+
+ }
+
+ function _emscripten_glDrawArraysInstanced(mode, first, count, primcount) {
+ GLctx['drawArraysInstanced'](mode, first, count, primcount);
+ }
+
+ function _emscripten_glDrawArraysInstancedANGLE(mode, first, count, primcount) {
+ GLctx['drawArraysInstanced'](mode, first, count, primcount);
+ }
+
+ function _emscripten_glDrawArraysInstancedARB(mode, first, count, primcount) {
+ GLctx['drawArraysInstanced'](mode, first, count, primcount);
+ }
+
+ function _emscripten_glDrawArraysInstancedEXT(mode, first, count, primcount) {
+ GLctx['drawArraysInstanced'](mode, first, count, primcount);
+ }
+
+ function _emscripten_glDrawArraysInstancedNV(mode, first, count, primcount) {
+ GLctx['drawArraysInstanced'](mode, first, count, primcount);
+ }
+
+ var tempFixedLengthArray = [];
+
+ function _emscripten_glDrawBuffers(n, bufs) {
+
+ var bufArray = tempFixedLengthArray[n];
+ for (var i = 0; i < n; i++) {
+ bufArray[i] = HEAP32[(((bufs)+(i*4))>>2)];
+ }
+
+ GLctx['drawBuffers'](bufArray);
+ }
+
+
+ function _emscripten_glDrawBuffersEXT(n, bufs) {
+
+ var bufArray = tempFixedLengthArray[n];
+ for (var i = 0; i < n; i++) {
+ bufArray[i] = HEAP32[(((bufs)+(i*4))>>2)];
+ }
+
+ GLctx['drawBuffers'](bufArray);
+ }
+
+
+ function _emscripten_glDrawBuffersWEBGL(n, bufs) {
+
+ var bufArray = tempFixedLengthArray[n];
+ for (var i = 0; i < n; i++) {
+ bufArray[i] = HEAP32[(((bufs)+(i*4))>>2)];
+ }
+
+ GLctx['drawBuffers'](bufArray);
+ }
+
+ function _emscripten_glDrawElements(mode, count, type, indices) {
+
+ GLctx.drawElements(mode, count, type, indices);
+
+ }
+
+ function _emscripten_glDrawElementsInstanced(mode, count, type, indices, primcount) {
+ GLctx['drawElementsInstanced'](mode, count, type, indices, primcount);
+ }
+
+ function _emscripten_glDrawElementsInstancedANGLE(mode, count, type, indices, primcount) {
+ GLctx['drawElementsInstanced'](mode, count, type, indices, primcount);
+ }
+
+ function _emscripten_glDrawElementsInstancedARB(mode, count, type, indices, primcount) {
+ GLctx['drawElementsInstanced'](mode, count, type, indices, primcount);
+ }
+
+ function _emscripten_glDrawElementsInstancedEXT(mode, count, type, indices, primcount) {
+ GLctx['drawElementsInstanced'](mode, count, type, indices, primcount);
+ }
+
+ function _emscripten_glDrawElementsInstancedNV(mode, count, type, indices, primcount) {
+ GLctx['drawElementsInstanced'](mode, count, type, indices, primcount);
+ }
+
+ function _glDrawElements(mode, count, type, indices) {
+
+ GLctx.drawElements(mode, count, type, indices);
+
+ }
+ function _emscripten_glDrawRangeElements(mode, start, end, count, type, indices) {
+ // TODO: This should be a trivial pass-though function registered at the bottom of this page as
+ // glFuncs[6][1] += ' drawRangeElements';
+ // but due to https://bugzilla.mozilla.org/show_bug.cgi?id=1202427,
+ // we work around by ignoring the range.
+ _glDrawElements(mode, count, type, indices);
+ }
+
+ function _emscripten_glEnable(x0) { GLctx['enable'](x0) }
+
+ function _emscripten_glEnableVertexAttribArray(index) {
+ GLctx.enableVertexAttribArray(index);
+ }
+
+ function _emscripten_glEndQuery(x0) { GLctx['endQuery'](x0) }
+
+ function _emscripten_glEndQueryEXT(target) {
+ GLctx.disjointTimerQueryExt['endQueryEXT'](target);
+ }
+
+ function _emscripten_glEndTransformFeedback() { GLctx['endTransformFeedback']() }
+
+ function _emscripten_glFenceSync(condition, flags) {
+ var sync = GLctx.fenceSync(condition, flags);
+ if (sync) {
+ var id = GL.getNewId(GL.syncs);
+ sync.name = id;
+ GL.syncs[id] = sync;
+ return id;
+ }
+ return 0; // Failed to create a sync object
+ }
+
+ function _emscripten_glFinish() { GLctx['finish']() }
+
+ function _emscripten_glFlush() { GLctx['flush']() }
+
+ function _emscripten_glFramebufferRenderbuffer(target, attachment, renderbuffertarget, renderbuffer) {
+ GLctx.framebufferRenderbuffer(target, attachment, renderbuffertarget,
+ GL.renderbuffers[renderbuffer]);
+ }
+
+ function _emscripten_glFramebufferTexture2D(target, attachment, textarget, texture, level) {
+ GLctx.framebufferTexture2D(target, attachment, textarget,
+ GL.textures[texture], level);
+ }
+
+ function _emscripten_glFramebufferTextureLayer(target, attachment, texture, level, layer) {
+ GLctx.framebufferTextureLayer(target, attachment, GL.textures[texture], level, layer);
+ }
+
+ function _emscripten_glFrontFace(x0) { GLctx['frontFace'](x0) }
+
+ function __glGenObject(n, buffers, createFunction, objectTable
+ ) {
+ for (var i = 0; i < n; i++) {
+ var buffer = GLctx[createFunction]();
+ var id = buffer && GL.getNewId(objectTable);
+ if (buffer) {
+ buffer.name = id;
+ objectTable[id] = buffer;
+ } else {
+ GL.recordError(0x502 /* GL_INVALID_OPERATION */);
+ }
+ HEAP32[(((buffers)+(i*4))>>2)] = id;
+ }
+ }
+
+ function _emscripten_glGenBuffers(n, buffers) {
+ __glGenObject(n, buffers, 'createBuffer', GL.buffers
+ );
+ }
+
+
+ function _emscripten_glGenFramebuffers(n, ids) {
+ __glGenObject(n, ids, 'createFramebuffer', GL.framebuffers
+ );
+ }
+
+ function _emscripten_glGenQueries(n, ids) {
+ __glGenObject(n, ids, 'createQuery', GL.queries
+ );
+ }
+
+ function _emscripten_glGenQueriesEXT(n, ids) {
+ for (var i = 0; i < n; i++) {
+ var query = GLctx.disjointTimerQueryExt['createQueryEXT']();
+ if (!query) {
+ GL.recordError(0x502 /* GL_INVALID_OPERATION */);
+ while (i < n) HEAP32[(((ids)+(i++*4))>>2)] = 0;
+ return;
+ }
+ var id = GL.getNewId(GL.queries);
+ query.name = id;
+ GL.queries[id] = query;
+ HEAP32[(((ids)+(i*4))>>2)] = id;
+ }
+ }
+
+
+ function _emscripten_glGenRenderbuffers(n, renderbuffers) {
+ __glGenObject(n, renderbuffers, 'createRenderbuffer', GL.renderbuffers
+ );
+ }
+
+ function _emscripten_glGenSamplers(n, samplers) {
+ __glGenObject(n, samplers, 'createSampler', GL.samplers
+ );
+ }
+
+
+ function _emscripten_glGenTextures(n, textures) {
+ __glGenObject(n, textures, 'createTexture', GL.textures
+ );
+ }
+
+ function _emscripten_glGenTransformFeedbacks(n, ids) {
+ __glGenObject(n, ids, 'createTransformFeedback', GL.transformFeedbacks
+ );
+ }
+
+
+ function _emscripten_glGenVertexArrays(n, arrays) {
+ __glGenObject(n, arrays, 'createVertexArray', GL.vaos
+ );
+ }
+
+
+ function _emscripten_glGenVertexArraysOES(n, arrays) {
+ __glGenObject(n, arrays, 'createVertexArray', GL.vaos
+ );
+ }
+
+ function _emscripten_glGenerateMipmap(x0) { GLctx['generateMipmap'](x0) }
+
+ function __glGetActiveAttribOrUniform(funcName, program, index, bufSize, length, size, type, name) {
+ program = GL.programs[program];
+ var info = GLctx[funcName](program, index);
+ if (info) { // If an error occurs, nothing will be written to length, size and type and name.
+ var numBytesWrittenExclNull = name && stringToUTF8(info.name, name, bufSize);
+ if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;
+ if (size) HEAP32[((size)>>2)] = info.size;
+ if (type) HEAP32[((type)>>2)] = info.type;
+ }
+ }
+
+ function _emscripten_glGetActiveAttrib(program, index, bufSize, length, size, type, name) {
+ __glGetActiveAttribOrUniform('getActiveAttrib', program, index, bufSize, length, size, type, name);
+ }
+
+
+ function _emscripten_glGetActiveUniform(program, index, bufSize, length, size, type, name) {
+ __glGetActiveAttribOrUniform('getActiveUniform', program, index, bufSize, length, size, type, name);
+ }
+
+ function _emscripten_glGetActiveUniformBlockName(program, uniformBlockIndex, bufSize, length, uniformBlockName) {
+ program = GL.programs[program];
+
+ var result = GLctx['getActiveUniformBlockName'](program, uniformBlockIndex);
+ if (!result) return; // If an error occurs, nothing will be written to uniformBlockName or length.
+ if (uniformBlockName && bufSize > 0) {
+ var numBytesWrittenExclNull = stringToUTF8(result, uniformBlockName, bufSize);
+ if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;
+ } else {
+ if (length) HEAP32[((length)>>2)] = 0;
+ }
+ }
+
+ function _emscripten_glGetActiveUniformBlockiv(program, uniformBlockIndex, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if params == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ program = GL.programs[program];
+
+ if (pname == 0x8A41 /* GL_UNIFORM_BLOCK_NAME_LENGTH */) {
+ var name = GLctx['getActiveUniformBlockName'](program, uniformBlockIndex);
+ HEAP32[((params)>>2)] = name.length+1;
+ return;
+ }
+
+ var result = GLctx['getActiveUniformBlockParameter'](program, uniformBlockIndex, pname);
+ if (result === null) return; // If an error occurs, nothing should be written to params.
+ if (pname == 0x8A43 /*GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES*/) {
+ for (var i = 0; i < result.length; i++) {
+ HEAP32[(((params)+(i*4))>>2)] = result[i];
+ }
+ } else {
+ HEAP32[((params)>>2)] = result;
+ }
+ }
+
+ function _emscripten_glGetActiveUniformsiv(program, uniformCount, uniformIndices, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if params == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ if (uniformCount > 0 && uniformIndices == 0) {
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ program = GL.programs[program];
+ var ids = [];
+ for (var i = 0; i < uniformCount; i++) {
+ ids.push(HEAP32[(((uniformIndices)+(i*4))>>2)]);
+ }
+
+ var result = GLctx['getActiveUniforms'](program, ids, pname);
+ if (!result) return; // GL spec: If an error is generated, nothing is written out to params.
+
+ var len = result.length;
+ for (var i = 0; i < len; i++) {
+ HEAP32[(((params)+(i*4))>>2)] = result[i];
+ }
+ }
+
+ function _emscripten_glGetAttachedShaders(program, maxCount, count, shaders) {
+ var result = GLctx.getAttachedShaders(GL.programs[program]);
+ var len = result.length;
+ if (len > maxCount) {
+ len = maxCount;
+ }
+ HEAP32[((count)>>2)] = len;
+ for (var i = 0; i < len; ++i) {
+ var id = GL.shaders.indexOf(result[i]);
+ HEAP32[(((shaders)+(i*4))>>2)] = id;
+ }
+ }
+
+ function _emscripten_glGetAttribLocation(program, name) {
+ return GLctx.getAttribLocation(GL.programs[program], UTF8ToString(name));
+ }
+
+
+ function readI53FromU64(ptr) {
+ return HEAPU32[ptr>>2] + HEAPU32[ptr+4>>2] * 4294967296;
+ }
+ function writeI53ToI64(ptr, num) {
+ HEAPU32[ptr>>2] = num;
+ HEAPU32[ptr+4>>2] = (num - HEAPU32[ptr>>2])/4294967296;
+ var deserialized = (num >= 0) ? readI53FromU64(ptr) : readI53FromI64(ptr);
+ if (deserialized != num) warnOnce('writeI53ToI64() out of range: serialized JS Number ' + num + ' to Wasm heap as bytes lo=' + ptrToString(HEAPU32[ptr>>2]) + ', hi=' + ptrToString(HEAPU32[ptr+4>>2]) + ', which deserializes back to ' + deserialized + ' instead!');
+ }
+
+ function emscriptenWebGLGet(name_, p, type) {
+ // Guard against user passing a null pointer.
+ // Note that GLES2 spec does not say anything about how passing a null pointer should be treated.
+ // Testing on desktop core GL 3, the application crashes on glGetIntegerv to a null pointer, but
+ // better to report an error instead of doing anything random.
+ if (!p) {
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var ret = undefined;
+ switch (name_) { // Handle a few trivial GLES values
+ case 0x8DFA: // GL_SHADER_COMPILER
+ ret = 1;
+ break;
+ case 0x8DF8: // GL_SHADER_BINARY_FORMATS
+ if (type != 0 && type != 1) {
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ }
+ return; // Do not write anything to the out pointer, since no binary formats are supported.
+ case 0x87FE: // GL_NUM_PROGRAM_BINARY_FORMATS
+ case 0x8DF9: // GL_NUM_SHADER_BINARY_FORMATS
+ ret = 0;
+ break;
+ case 0x86A2: // GL_NUM_COMPRESSED_TEXTURE_FORMATS
+ // WebGL doesn't have GL_NUM_COMPRESSED_TEXTURE_FORMATS (it's obsolete since GL_COMPRESSED_TEXTURE_FORMATS returns a JS array that can be queried for length),
+ // so implement it ourselves to allow C++ GLES2 code get the length.
+ var formats = GLctx.getParameter(0x86A3 /*GL_COMPRESSED_TEXTURE_FORMATS*/);
+ ret = formats ? formats.length : 0;
+ break;
+
+ case 0x821D: // GL_NUM_EXTENSIONS
+ if (GL.currentContext.version < 2) {
+ GL.recordError(0x502 /* GL_INVALID_OPERATION */); // Calling GLES3/WebGL2 function with a GLES2/WebGL1 context
+ return;
+ }
+ // .getSupportedExtensions() can return null if context is lost, so coerce to empty array.
+ var exts = GLctx.getSupportedExtensions() || [];
+ ret = 2 * exts.length; // each extension is duplicated, first in unprefixed WebGL form, and then a second time with "GL_" prefix.
+ break;
+ case 0x821B: // GL_MAJOR_VERSION
+ case 0x821C: // GL_MINOR_VERSION
+ if (GL.currentContext.version < 2) {
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ return;
+ }
+ ret = name_ == 0x821B ? 3 : 0; // return version 3.0
+ break;
+ }
+
+ if (ret === undefined) {
+ var result = GLctx.getParameter(name_);
+ switch (typeof result) {
+ case "number":
+ ret = result;
+ break;
+ case "boolean":
+ ret = result ? 1 : 0;
+ break;
+ case "string":
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ return;
+ case "object":
+ if (result === null) {
+ // null is a valid result for some (e.g., which buffer is bound - perhaps nothing is bound), but otherwise
+ // can mean an invalid name_, which we need to report as an error
+ switch (name_) {
+ case 0x8894: // ARRAY_BUFFER_BINDING
+ case 0x8B8D: // CURRENT_PROGRAM
+ case 0x8895: // ELEMENT_ARRAY_BUFFER_BINDING
+ case 0x8CA6: // FRAMEBUFFER_BINDING or DRAW_FRAMEBUFFER_BINDING
+ case 0x8CA7: // RENDERBUFFER_BINDING
+ case 0x8069: // TEXTURE_BINDING_2D
+ case 0x85B5: // WebGL 2 GL_VERTEX_ARRAY_BINDING, or WebGL 1 extension OES_vertex_array_object GL_VERTEX_ARRAY_BINDING_OES
+ case 0x8F36: // COPY_READ_BUFFER_BINDING or COPY_READ_BUFFER
+ case 0x8F37: // COPY_WRITE_BUFFER_BINDING or COPY_WRITE_BUFFER
+ case 0x88ED: // PIXEL_PACK_BUFFER_BINDING
+ case 0x88EF: // PIXEL_UNPACK_BUFFER_BINDING
+ case 0x8CAA: // READ_FRAMEBUFFER_BINDING
+ case 0x8919: // SAMPLER_BINDING
+ case 0x8C1D: // TEXTURE_BINDING_2D_ARRAY
+ case 0x806A: // TEXTURE_BINDING_3D
+ case 0x8E25: // TRANSFORM_FEEDBACK_BINDING
+ case 0x8C8F: // TRANSFORM_FEEDBACK_BUFFER_BINDING
+ case 0x8A28: // UNIFORM_BUFFER_BINDING
+ case 0x8514: { // TEXTURE_BINDING_CUBE_MAP
+ ret = 0;
+ break;
+ }
+ default: {
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ return;
+ }
+ }
+ } else if (result instanceof Float32Array ||
+ result instanceof Uint32Array ||
+ result instanceof Int32Array ||
+ result instanceof Array) {
+ for (var i = 0; i < result.length; ++i) {
+ switch (type) {
+ case 0: HEAP32[(((p)+(i*4))>>2)] = result[i]; break;
+ case 2: HEAPF32[(((p)+(i*4))>>2)] = result[i]; break;
+ case 4: HEAP8[(((p)+(i))>>0)] = result[i] ? 1 : 0; break;
+ }
+ }
+ return;
+ } else {
+ try {
+ ret = result.name | 0;
+ } catch(e) {
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ err('GL_INVALID_ENUM in glGet' + type + 'v: Unknown object returned from WebGL getParameter(' + name_ + ')! (error: ' + e + ')');
+ return;
+ }
+ }
+ break;
+ default:
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ err('GL_INVALID_ENUM in glGet' + type + 'v: Native code calling glGet' + type + 'v(' + name_ + ') and it returns ' + result + ' of type ' + typeof(result) + '!');
+ return;
+ }
+ }
+
+ switch (type) {
+ case 1: writeI53ToI64(p, ret); break;
+ case 0: HEAP32[((p)>>2)] = ret; break;
+ case 2: HEAPF32[((p)>>2)] = ret; break;
+ case 4: HEAP8[((p)>>0)] = ret ? 1 : 0; break;
+ }
+ }
+
+ function _emscripten_glGetBooleanv(name_, p) {
+ emscriptenWebGLGet(name_, p, 4);
+ }
+
+ function _emscripten_glGetBufferParameteri64v(target, value, data) {
+ if (!data) {
+ // GLES2 specification does not specify how to behave if data is a null pointer. Since calling this function does not make sense
+ // if data == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ writeI53ToI64(data, GLctx.getBufferParameter(target, value));
+ }
+
+ function _emscripten_glGetBufferParameteriv(target, value, data) {
+ if (!data) {
+ // GLES2 specification does not specify how to behave if data is a null pointer. Since calling this function does not make sense
+ // if data == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAP32[((data)>>2)] = GLctx.getBufferParameter(target, value);
+ }
+
+ function _emscripten_glGetError() {
+ var error = GLctx.getError() || GL.lastError;
+ GL.lastError = 0/*GL_NO_ERROR*/;
+ return error;
+ }
+
+
+ function _emscripten_glGetFloatv(name_, p) {
+ emscriptenWebGLGet(name_, p, 2);
+ }
+
+ function _emscripten_glGetFragDataLocation(program, name) {
+ return GLctx['getFragDataLocation'](GL.programs[program], UTF8ToString(name));
+ }
+
+ function _emscripten_glGetFramebufferAttachmentParameteriv(target, attachment, pname, params) {
+ var result = GLctx.getFramebufferAttachmentParameter(target, attachment, pname);
+ if (result instanceof WebGLRenderbuffer ||
+ result instanceof WebGLTexture) {
+ result = result.name | 0;
+ }
+ HEAP32[((params)>>2)] = result;
+ }
+
+ function emscriptenWebGLGetIndexed(target, index, data, type) {
+ if (!data) {
+ // GLES2 specification does not specify how to behave if data is a null pointer. Since calling this function does not make sense
+ // if data == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var result = GLctx['getIndexedParameter'](target, index);
+ var ret;
+ switch (typeof result) {
+ case 'boolean':
+ ret = result ? 1 : 0;
+ break;
+ case 'number':
+ ret = result;
+ break;
+ case 'object':
+ if (result === null) {
+ switch (target) {
+ case 0x8C8F: // TRANSFORM_FEEDBACK_BUFFER_BINDING
+ case 0x8A28: // UNIFORM_BUFFER_BINDING
+ ret = 0;
+ break;
+ default: {
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ return;
+ }
+ }
+ } else if (result instanceof WebGLBuffer) {
+ ret = result.name | 0;
+ } else {
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ return;
+ }
+ break;
+ default:
+ GL.recordError(0x500); // GL_INVALID_ENUM
+ return;
+ }
+
+ switch (type) {
+ case 1: writeI53ToI64(data, ret); break;
+ case 0: HEAP32[((data)>>2)] = ret; break;
+ case 2: HEAPF32[((data)>>2)] = ret; break;
+ case 4: HEAP8[((data)>>0)] = ret ? 1 : 0; break;
+ default: throw 'internal emscriptenWebGLGetIndexed() error, bad type: ' + type;
+ }
+ }
+ function _emscripten_glGetInteger64i_v(target, index, data) {
+ emscriptenWebGLGetIndexed(target, index, data, 1);
+ }
+
+ function _emscripten_glGetInteger64v(name_, p) {
+ emscriptenWebGLGet(name_, p, 1);
+ }
+
+ function _emscripten_glGetIntegeri_v(target, index, data) {
+ emscriptenWebGLGetIndexed(target, index, data, 0);
+ }
+
+
+ function _emscripten_glGetIntegerv(name_, p) {
+ emscriptenWebGLGet(name_, p, 0);
+ }
+
+ function _emscripten_glGetInternalformativ(target, internalformat, pname, bufSize, params) {
+ if (bufSize < 0) {
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ if (!params) {
+ // GLES3 specification does not specify how to behave if values is a null pointer. Since calling this function does not make sense
+ // if values == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var ret = GLctx['getInternalformatParameter'](target, internalformat, pname);
+ if (ret === null) return;
+ for (var i = 0; i < ret.length && i < bufSize; ++i) {
+ HEAP32[(((params)+(i*4))>>2)] = ret[i];
+ }
+ }
+
+ function _emscripten_glGetProgramBinary(program, bufSize, length, binaryFormat, binary) {
+ GL.recordError(0x502/*GL_INVALID_OPERATION*/);
+ }
+
+ function _emscripten_glGetProgramInfoLog(program, maxLength, length, infoLog) {
+ var log = GLctx.getProgramInfoLog(GL.programs[program]);
+ if (log === null) log = '(unknown error)';
+ var numBytesWrittenExclNull = (maxLength > 0 && infoLog) ? stringToUTF8(log, infoLog, maxLength) : 0;
+ if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;
+ }
+
+ function _emscripten_glGetProgramiv(program, pname, p) {
+ if (!p) {
+ // GLES2 specification does not specify how to behave if p is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+
+ if (program >= GL.counter) {
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+
+ program = GL.programs[program];
+
+ if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH
+ var log = GLctx.getProgramInfoLog(program);
+ if (log === null) log = '(unknown error)';
+ HEAP32[((p)>>2)] = log.length + 1;
+ } else if (pname == 0x8B87 /* GL_ACTIVE_UNIFORM_MAX_LENGTH */) {
+ if (!program.maxUniformLength) {
+ for (var i = 0; i < GLctx.getProgramParameter(program, 0x8B86/*GL_ACTIVE_UNIFORMS*/); ++i) {
+ program.maxUniformLength = Math.max(program.maxUniformLength, GLctx.getActiveUniform(program, i).name.length+1);
+ }
+ }
+ HEAP32[((p)>>2)] = program.maxUniformLength;
+ } else if (pname == 0x8B8A /* GL_ACTIVE_ATTRIBUTE_MAX_LENGTH */) {
+ if (!program.maxAttributeLength) {
+ for (var i = 0; i < GLctx.getProgramParameter(program, 0x8B89/*GL_ACTIVE_ATTRIBUTES*/); ++i) {
+ program.maxAttributeLength = Math.max(program.maxAttributeLength, GLctx.getActiveAttrib(program, i).name.length+1);
+ }
+ }
+ HEAP32[((p)>>2)] = program.maxAttributeLength;
+ } else if (pname == 0x8A35 /* GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH */) {
+ if (!program.maxUniformBlockNameLength) {
+ for (var i = 0; i < GLctx.getProgramParameter(program, 0x8A36/*GL_ACTIVE_UNIFORM_BLOCKS*/); ++i) {
+ program.maxUniformBlockNameLength = Math.max(program.maxUniformBlockNameLength, GLctx.getActiveUniformBlockName(program, i).length+1);
+ }
+ }
+ HEAP32[((p)>>2)] = program.maxUniformBlockNameLength;
+ } else {
+ HEAP32[((p)>>2)] = GLctx.getProgramParameter(program, pname);
+ }
+ }
+
+
+ function _emscripten_glGetQueryObjecti64vEXT(id, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var query = GL.queries[id];
+ var param;
+ if (GL.currentContext.version < 2)
+ {
+ param = GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query, pname);
+ }
+ else {
+ param = GLctx['getQueryParameter'](query, pname);
+ }
+ var ret;
+ if (typeof param == 'boolean') {
+ ret = param ? 1 : 0;
+ } else {
+ ret = param;
+ }
+ writeI53ToI64(params, ret);
+ }
+
+ function _emscripten_glGetQueryObjectivEXT(id, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var query = GL.queries[id];
+ var param = GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query, pname);
+ var ret;
+ if (typeof param == 'boolean') {
+ ret = param ? 1 : 0;
+ } else {
+ ret = param;
+ }
+ HEAP32[((params)>>2)] = ret;
+ }
+
+
+ function _emscripten_glGetQueryObjectui64vEXT(id, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var query = GL.queries[id];
+ var param;
+ if (GL.currentContext.version < 2)
+ {
+ param = GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query, pname);
+ }
+ else {
+ param = GLctx['getQueryParameter'](query, pname);
+ }
+ var ret;
+ if (typeof param == 'boolean') {
+ ret = param ? 1 : 0;
+ } else {
+ ret = param;
+ }
+ writeI53ToI64(params, ret);
+ }
+
+ function _emscripten_glGetQueryObjectuiv(id, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var query = GL.queries[id];
+ var param = GLctx['getQueryParameter'](query, pname);
+ var ret;
+ if (typeof param == 'boolean') {
+ ret = param ? 1 : 0;
+ } else {
+ ret = param;
+ }
+ HEAP32[((params)>>2)] = ret;
+ }
+
+ function _emscripten_glGetQueryObjectuivEXT(id, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var query = GL.queries[id];
+ var param = GLctx.disjointTimerQueryExt['getQueryObjectEXT'](query, pname);
+ var ret;
+ if (typeof param == 'boolean') {
+ ret = param ? 1 : 0;
+ } else {
+ ret = param;
+ }
+ HEAP32[((params)>>2)] = ret;
+ }
+
+ function _emscripten_glGetQueryiv(target, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAP32[((params)>>2)] = GLctx['getQuery'](target, pname);
+ }
+
+ function _emscripten_glGetQueryivEXT(target, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAP32[((params)>>2)] = GLctx.disjointTimerQueryExt['getQueryEXT'](target, pname);
+ }
+
+ function _emscripten_glGetRenderbufferParameteriv(target, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if params == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAP32[((params)>>2)] = GLctx.getRenderbufferParameter(target, pname);
+ }
+
+ function _emscripten_glGetSamplerParameterfv(sampler, pname, params) {
+ if (!params) {
+ // GLES3 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAPF32[((params)>>2)] = GLctx['getSamplerParameter'](GL.samplers[sampler], pname);
+ }
+
+ function _emscripten_glGetSamplerParameteriv(sampler, pname, params) {
+ if (!params) {
+ // GLES3 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAP32[((params)>>2)] = GLctx['getSamplerParameter'](GL.samplers[sampler], pname);
+ }
+
+ function _emscripten_glGetShaderInfoLog(shader, maxLength, length, infoLog) {
+ var log = GLctx.getShaderInfoLog(GL.shaders[shader]);
+ if (log === null) log = '(unknown error)';
+ var numBytesWrittenExclNull = (maxLength > 0 && infoLog) ? stringToUTF8(log, infoLog, maxLength) : 0;
+ if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;
+ }
+
+ function _emscripten_glGetShaderPrecisionFormat(shaderType, precisionType, range, precision) {
+ var result = GLctx.getShaderPrecisionFormat(shaderType, precisionType);
+ HEAP32[((range)>>2)] = result.rangeMin;
+ HEAP32[(((range)+(4))>>2)] = result.rangeMax;
+ HEAP32[((precision)>>2)] = result.precision;
+ }
+
+ function _emscripten_glGetShaderSource(shader, bufSize, length, source) {
+ var result = GLctx.getShaderSource(GL.shaders[shader]);
+ if (!result) return; // If an error occurs, nothing will be written to length or source.
+ var numBytesWrittenExclNull = (bufSize > 0 && source) ? stringToUTF8(result, source, bufSize) : 0;
+ if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;
+ }
+
+ function _emscripten_glGetShaderiv(shader, pname, p) {
+ if (!p) {
+ // GLES2 specification does not specify how to behave if p is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ if (pname == 0x8B84) { // GL_INFO_LOG_LENGTH
+ var log = GLctx.getShaderInfoLog(GL.shaders[shader]);
+ if (log === null) log = '(unknown error)';
+ // The GLES2 specification says that if the shader has an empty info log,
+ // a value of 0 is returned. Otherwise the log has a null char appended.
+ // (An empty string is falsey, so we can just check that instead of
+ // looking at log.length.)
+ var logLength = log ? log.length + 1 : 0;
+ HEAP32[((p)>>2)] = logLength;
+ } else if (pname == 0x8B88) { // GL_SHADER_SOURCE_LENGTH
+ var source = GLctx.getShaderSource(GL.shaders[shader]);
+ // source may be a null, or the empty string, both of which are falsey
+ // values that we report a 0 length for.
+ var sourceLength = source ? source.length + 1 : 0;
+ HEAP32[((p)>>2)] = sourceLength;
+ } else {
+ HEAP32[((p)>>2)] = GLctx.getShaderParameter(GL.shaders[shader], pname);
+ }
+ }
+
+ function stringToNewUTF8(jsString) {
+ var length = lengthBytesUTF8(jsString)+1;
+ var cString = _malloc(length);
+ stringToUTF8(jsString, cString, length);
+ return cString;
+ }
+
+ function _emscripten_glGetString(name_) {
+ var ret = GL.stringCache[name_];
+ if (!ret) {
+ switch (name_) {
+ case 0x1F03 /* GL_EXTENSIONS */:
+ var exts = GLctx.getSupportedExtensions() || []; // .getSupportedExtensions() can return null if context is lost, so coerce to empty array.
+ exts = exts.concat(exts.map(function(e) { return "GL_" + e; }));
+ ret = stringToNewUTF8(exts.join(' '));
+ break;
+ case 0x1F00 /* GL_VENDOR */:
+ case 0x1F01 /* GL_RENDERER */:
+ case 0x9245 /* UNMASKED_VENDOR_WEBGL */:
+ case 0x9246 /* UNMASKED_RENDERER_WEBGL */:
+ var s = GLctx.getParameter(name_);
+ if (!s) {
+ GL.recordError(0x500/*GL_INVALID_ENUM*/);
+ }
+ ret = s && stringToNewUTF8(s);
+ break;
+
+ case 0x1F02 /* GL_VERSION */:
+ var glVersion = GLctx.getParameter(0x1F02 /*GL_VERSION*/);
+ // return GLES version string corresponding to the version of the WebGL context
+ if (GL.currentContext.version >= 2) glVersion = 'OpenGL ES 3.0 (' + glVersion + ')';
+ else
+ {
+ glVersion = 'OpenGL ES 2.0 (' + glVersion + ')';
+ }
+ ret = stringToNewUTF8(glVersion);
+ break;
+ case 0x8B8C /* GL_SHADING_LANGUAGE_VERSION */:
+ var glslVersion = GLctx.getParameter(0x8B8C /*GL_SHADING_LANGUAGE_VERSION*/);
+ // extract the version number 'N.M' from the string 'WebGL GLSL ES N.M ...'
+ var ver_re = /^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;
+ var ver_num = glslVersion.match(ver_re);
+ if (ver_num !== null) {
+ if (ver_num[1].length == 3) ver_num[1] = ver_num[1] + '0'; // ensure minor version has 2 digits
+ glslVersion = 'OpenGL ES GLSL ES ' + ver_num[1] + ' (' + glslVersion + ')';
+ }
+ ret = stringToNewUTF8(glslVersion);
+ break;
+ default:
+ GL.recordError(0x500/*GL_INVALID_ENUM*/);
+ // fall through
+ }
+ GL.stringCache[name_] = ret;
+ }
+ return ret;
+ }
+
+ function _emscripten_glGetStringi(name, index) {
+ if (GL.currentContext.version < 2) {
+ GL.recordError(0x502 /* GL_INVALID_OPERATION */); // Calling GLES3/WebGL2 function with a GLES2/WebGL1 context
+ return 0;
+ }
+ var stringiCache = GL.stringiCache[name];
+ if (stringiCache) {
+ if (index < 0 || index >= stringiCache.length) {
+ GL.recordError(0x501/*GL_INVALID_VALUE*/);
+ return 0;
+ }
+ return stringiCache[index];
+ }
+ switch (name) {
+ case 0x1F03 /* GL_EXTENSIONS */:
+ var exts = GLctx.getSupportedExtensions() || []; // .getSupportedExtensions() can return null if context is lost, so coerce to empty array.
+ exts = exts.concat(exts.map(function(e) { return "GL_" + e; }));
+ exts = exts.map(function(e) { return stringToNewUTF8(e); });
+
+ stringiCache = GL.stringiCache[name] = exts;
+ if (index < 0 || index >= stringiCache.length) {
+ GL.recordError(0x501/*GL_INVALID_VALUE*/);
+ return 0;
+ }
+ return stringiCache[index];
+ default:
+ GL.recordError(0x500/*GL_INVALID_ENUM*/);
+ return 0;
+ }
+ }
+
+ function _emscripten_glGetSynciv(sync, pname, bufSize, length, values) {
+ if (bufSize < 0) {
+ // GLES3 specification does not specify how to behave if bufSize < 0, however in the spec wording for glGetInternalformativ, it does say that GL_INVALID_VALUE should be raised,
+ // so raise GL_INVALID_VALUE here as well.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ if (!values) {
+ // GLES3 specification does not specify how to behave if values is a null pointer. Since calling this function does not make sense
+ // if values == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var ret = GLctx.getSyncParameter(GL.syncs[sync], pname);
+ if (ret !== null) {
+ HEAP32[((values)>>2)] = ret;
+ if (length) HEAP32[((length)>>2)] = 1; // Report a single value outputted.
+ }
+ }
+
+ function _emscripten_glGetTexParameterfv(target, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAPF32[((params)>>2)] = GLctx.getTexParameter(target, pname);
+ }
+
+ function _emscripten_glGetTexParameteriv(target, pname, params) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if p == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAP32[((params)>>2)] = GLctx.getTexParameter(target, pname);
+ }
+
+ function _emscripten_glGetTransformFeedbackVarying(program, index, bufSize, length, size, type, name) {
+ program = GL.programs[program];
+ var info = GLctx['getTransformFeedbackVarying'](program, index);
+ if (!info) return; // If an error occurred, the return parameters length, size, type and name will be unmodified.
+
+ if (name && bufSize > 0) {
+ var numBytesWrittenExclNull = stringToUTF8(info.name, name, bufSize);
+ if (length) HEAP32[((length)>>2)] = numBytesWrittenExclNull;
+ } else {
+ if (length) HEAP32[((length)>>2)] = 0;
+ }
+
+ if (size) HEAP32[((size)>>2)] = info.size;
+ if (type) HEAP32[((type)>>2)] = info.type;
+ }
+
+ function _emscripten_glGetUniformBlockIndex(program, uniformBlockName) {
+ return GLctx['getUniformBlockIndex'](GL.programs[program], UTF8ToString(uniformBlockName));
+ }
+
+ function _emscripten_glGetUniformIndices(program, uniformCount, uniformNames, uniformIndices) {
+ if (!uniformIndices) {
+ // GLES2 specification does not specify how to behave if uniformIndices is a null pointer. Since calling this function does not make sense
+ // if uniformIndices == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ if (uniformCount > 0 && (uniformNames == 0 || uniformIndices == 0)) {
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ program = GL.programs[program];
+ var names = [];
+ for (var i = 0; i < uniformCount; i++)
+ names.push(UTF8ToString(HEAP32[(((uniformNames)+(i*4))>>2)]));
+
+ var result = GLctx['getUniformIndices'](program, names);
+ if (!result) return; // GL spec: If an error is generated, nothing is written out to uniformIndices.
+
+ var len = result.length;
+ for (var i = 0; i < len; i++) {
+ HEAP32[(((uniformIndices)+(i*4))>>2)] = result[i];
+ }
+ }
+
+
+ /** @noinline */
+ function webglGetLeftBracePos(name) {
+ return name.slice(-1) == ']' && name.lastIndexOf('[');
+ }
+
+ function webglPrepareUniformLocationsBeforeFirstUse(program) {
+ var uniformLocsById = program.uniformLocsById, // Maps GLuint -> WebGLUniformLocation
+ uniformSizeAndIdsByName = program.uniformSizeAndIdsByName, // Maps name -> [uniform array length, GLuint]
+ i, j;
+
+ // On the first time invocation of glGetUniformLocation on this shader program:
+ // initialize cache data structures and discover which uniforms are arrays.
+ if (!uniformLocsById) {
+ // maps GLint integer locations to WebGLUniformLocations
+ program.uniformLocsById = uniformLocsById = {};
+ // maps integer locations back to uniform name strings, so that we can lazily fetch uniform array locations
+ program.uniformArrayNamesById = {};
+
+ for (i = 0; i < GLctx.getProgramParameter(program, 0x8B86/*GL_ACTIVE_UNIFORMS*/); ++i) {
+ var u = GLctx.getActiveUniform(program, i);
+ var nm = u.name;
+ var sz = u.size;
+ var lb = webglGetLeftBracePos(nm);
+ var arrayName = lb > 0 ? nm.slice(0, lb) : nm;
+
+ // Assign a new location.
+ var id = program.uniformIdCounter;
+ program.uniformIdCounter += sz;
+ // Eagerly get the location of the uniformArray[0] base element.
+ // The remaining indices >0 will be left for lazy evaluation to
+ // improve performance. Those may never be needed to fetch, if the
+ // application fills arrays always in full starting from the first
+ // element of the array.
+ uniformSizeAndIdsByName[arrayName] = [sz, id];
+
+ // Store placeholder integers in place that highlight that these
+ // >0 index locations are array indices pending population.
+ for(j = 0; j < sz; ++j) {
+ uniformLocsById[id] = j;
+ program.uniformArrayNamesById[id++] = arrayName;
+ }
+ }
+ }
+ }
+
+
+ function _emscripten_glGetUniformLocation(program, name) {
+
+ name = UTF8ToString(name);
+
+ if (program = GL.programs[program]) {
+ webglPrepareUniformLocationsBeforeFirstUse(program);
+ var uniformLocsById = program.uniformLocsById; // Maps GLuint -> WebGLUniformLocation
+ var arrayIndex = 0;
+ var uniformBaseName = name;
+
+ // Invariant: when populating integer IDs for uniform locations, we must maintain the precondition that
+ // arrays reside in contiguous addresses, i.e. for a 'vec4 colors[10];', colors[4] must be at location colors[0]+4.
+ // However, user might call glGetUniformLocation(program, "colors") for an array, so we cannot discover based on the user
+ // input arguments whether the uniform we are dealing with is an array. The only way to discover which uniforms are arrays
+ // is to enumerate over all the active uniforms in the program.
+ var leftBrace = webglGetLeftBracePos(name);
+
+ // If user passed an array accessor "[index]", parse the array index off the accessor.
+ if (leftBrace > 0) {
+ arrayIndex = jstoi_q(name.slice(leftBrace + 1)) >>> 0; // "index]", coerce parseInt(']') with >>>0 to treat "foo[]" as "foo[0]" and foo[-1] as unsigned out-of-bounds.
+ uniformBaseName = name.slice(0, leftBrace);
+ }
+
+ // Have we cached the location of this uniform before?
+ var sizeAndId = program.uniformSizeAndIdsByName[uniformBaseName]; // A pair [array length, GLint of the uniform location]
+
+ // If an uniform with this name exists, and if its index is within the array limits (if it's even an array),
+ // query the WebGLlocation, or return an existing cached location.
+ if (sizeAndId && arrayIndex < sizeAndId[0]) {
+ arrayIndex += sizeAndId[1]; // Add the base location of the uniform to the array index offset.
+ if ((uniformLocsById[arrayIndex] = uniformLocsById[arrayIndex] || GLctx.getUniformLocation(program, name))) {
+ return arrayIndex;
+ }
+ }
+ }
+ else {
+ // N.b. we are currently unable to distinguish between GL program IDs that never existed vs GL program IDs that have been deleted,
+ // so report GL_INVALID_VALUE in both cases.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ }
+ return -1;
+ }
+
+ function webglGetUniformLocation(location) {
+ var p = GLctx.currentProgram;
+
+ if (p) {
+ var webglLoc = p.uniformLocsById[location];
+ // p.uniformLocsById[location] stores either an integer, or a WebGLUniformLocation.
+
+ // If an integer, we have not yet bound the location, so do it now. The integer value specifies the array index
+ // we should bind to.
+ if (typeof webglLoc == 'number') {
+ p.uniformLocsById[location] = webglLoc = GLctx.getUniformLocation(p, p.uniformArrayNamesById[location] + (webglLoc > 0 ? '[' + webglLoc + ']' : ''));
+ }
+ // Else an already cached WebGLUniformLocation, return it.
+ return webglLoc;
+ } else {
+ GL.recordError(0x502/*GL_INVALID_OPERATION*/);
+ }
+ }
+
+
+ /** @suppress{checkTypes} */
+ function emscriptenWebGLGetUniform(program, location, params, type) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if params == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ program = GL.programs[program];
+ webglPrepareUniformLocationsBeforeFirstUse(program);
+ var data = GLctx.getUniform(program, webglGetUniformLocation(location));
+ if (typeof data == 'number' || typeof data == 'boolean') {
+ switch (type) {
+ case 0: HEAP32[((params)>>2)] = data; break;
+ case 2: HEAPF32[((params)>>2)] = data; break;
+ }
+ } else {
+ for (var i = 0; i < data.length; i++) {
+ switch (type) {
+ case 0: HEAP32[(((params)+(i*4))>>2)] = data[i]; break;
+ case 2: HEAPF32[(((params)+(i*4))>>2)] = data[i]; break;
+ }
+ }
+ }
+ }
+
+ function _emscripten_glGetUniformfv(program, location, params) {
+ emscriptenWebGLGetUniform(program, location, params, 2);
+ }
+
+
+ function _emscripten_glGetUniformiv(program, location, params) {
+ emscriptenWebGLGetUniform(program, location, params, 0);
+ }
+
+ function _emscripten_glGetUniformuiv(program, location, params) {
+ emscriptenWebGLGetUniform(program, location, params, 0);
+ }
+
+ /** @suppress{checkTypes} */
+ function emscriptenWebGLGetVertexAttrib(index, pname, params, type) {
+ if (!params) {
+ // GLES2 specification does not specify how to behave if params is a null pointer. Since calling this function does not make sense
+ // if params == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ var data = GLctx.getVertexAttrib(index, pname);
+ if (pname == 0x889F/*VERTEX_ATTRIB_ARRAY_BUFFER_BINDING*/) {
+ HEAP32[((params)>>2)] = data && data["name"];
+ } else if (typeof data == 'number' || typeof data == 'boolean') {
+ switch (type) {
+ case 0: HEAP32[((params)>>2)] = data; break;
+ case 2: HEAPF32[((params)>>2)] = data; break;
+ case 5: HEAP32[((params)>>2)] = Math.fround(data); break;
+ }
+ } else {
+ for (var i = 0; i < data.length; i++) {
+ switch (type) {
+ case 0: HEAP32[(((params)+(i*4))>>2)] = data[i]; break;
+ case 2: HEAPF32[(((params)+(i*4))>>2)] = data[i]; break;
+ case 5: HEAP32[(((params)+(i*4))>>2)] = Math.fround(data[i]); break;
+ }
+ }
+ }
+ }
+ function _emscripten_glGetVertexAttribIiv(index, pname, params) {
+ // N.B. This function may only be called if the vertex attribute was specified using the function glVertexAttribI4iv(),
+ // otherwise the results are undefined. (GLES3 spec 6.1.12)
+ emscriptenWebGLGetVertexAttrib(index, pname, params, 0);
+ }
+
+ function _emscripten_glGetVertexAttribIuiv(index, pname, params) {
+ // N.B. This function may only be called if the vertex attribute was specified using the function glVertexAttribI4iv(),
+ // otherwise the results are undefined. (GLES3 spec 6.1.12)
+ emscriptenWebGLGetVertexAttrib(index, pname, params, 0);
+ }
+
+ function _emscripten_glGetVertexAttribPointerv(index, pname, pointer) {
+ if (!pointer) {
+ // GLES2 specification does not specify how to behave if pointer is a null pointer. Since calling this function does not make sense
+ // if pointer == null, issue a GL error to notify user about it.
+ GL.recordError(0x501 /* GL_INVALID_VALUE */);
+ return;
+ }
+ HEAP32[((pointer)>>2)] = GLctx.getVertexAttribOffset(index, pname);
+ }
+
+
+ function _emscripten_glGetVertexAttribfv(index, pname, params) {
+ // N.B. This function may only be called if the vertex attribute was specified using the function glVertexAttrib*f(),
+ // otherwise the results are undefined. (GLES3 spec 6.1.12)
+ emscriptenWebGLGetVertexAttrib(index, pname, params, 2);
+ }
+
+
+ function _emscripten_glGetVertexAttribiv(index, pname, params) {
+ // N.B. This function may only be called if the vertex attribute was specified using the function glVertexAttrib*f(),
+ // otherwise the results are undefined. (GLES3 spec 6.1.12)
+ emscriptenWebGLGetVertexAttrib(index, pname, params, 5);
+ }
+
+ function _emscripten_glHint(x0, x1) { GLctx['hint'](x0, x1) }
+
+ function _emscripten_glInvalidateFramebuffer(target, numAttachments, attachments) {
+ var list = tempFixedLengthArray[numAttachments];
+ for (var i = 0; i < numAttachments; i++) {
+ list[i] = HEAP32[(((attachments)+(i*4))>>2)];
+ }
+
+ GLctx['invalidateFramebuffer'](target, list);
+ }
+
+ function _emscripten_glInvalidateSubFramebuffer(target, numAttachments, attachments, x, y, width, height) {
+ var list = tempFixedLengthArray[numAttachments];
+ for (var i = 0; i < numAttachments; i++) {
+ list[i] = HEAP32[(((attachments)+(i*4))>>2)];
+ }
+
+ GLctx['invalidateSubFramebuffer'](target, list, x, y, width, height);
+ }
+
+ function _emscripten_glIsBuffer(buffer) {
+ var b = GL.buffers[buffer];
+ if (!b) return 0;
+ return GLctx.isBuffer(b);
+ }
+
+ function _emscripten_glIsEnabled(x0) { return GLctx['isEnabled'](x0) }
+
+ function _emscripten_glIsFramebuffer(framebuffer) {
+ var fb = GL.framebuffers[framebuffer];
+ if (!fb) return 0;
+ return GLctx.isFramebuffer(fb);
+ }
+
+ function _emscripten_glIsProgram(program) {
+ program = GL.programs[program];
+ if (!program) return 0;
+ return GLctx.isProgram(program);
+ }
+
+ function _emscripten_glIsQuery(id) {
+ var query = GL.queries[id];
+ if (!query) return 0;
+ return GLctx['isQuery'](query);
+ }
+
+ function _emscripten_glIsQueryEXT(id) {
+ var query = GL.queries[id];
+ if (!query) return 0;
+ return GLctx.disjointTimerQueryExt['isQueryEXT'](query);
+ }
+
+ function _emscripten_glIsRenderbuffer(renderbuffer) {
+ var rb = GL.renderbuffers[renderbuffer];
+ if (!rb) return 0;
+ return GLctx.isRenderbuffer(rb);
+ }
+
+ function _emscripten_glIsSampler(id) {
+ var sampler = GL.samplers[id];
+ if (!sampler) return 0;
+ return GLctx['isSampler'](sampler);
+ }
+
+ function _emscripten_glIsShader(shader) {
+ var s = GL.shaders[shader];
+ if (!s) return 0;
+ return GLctx.isShader(s);
+ }
+
+ function _emscripten_glIsSync(sync) {
+ return GLctx.isSync(GL.syncs[sync]);
+ }
+
+ function _emscripten_glIsTexture(id) {
+ var texture = GL.textures[id];
+ if (!texture) return 0;
+ return GLctx.isTexture(texture);
+ }
+
+ function _emscripten_glIsTransformFeedback(id) {
+ return GLctx['isTransformFeedback'](GL.transformFeedbacks[id]);
+ }
+
+ function _emscripten_glIsVertexArray(array) {
+
+ var vao = GL.vaos[array];
+ if (!vao) return 0;
+ return GLctx['isVertexArray'](vao);
+ }
+
+ function _emscripten_glIsVertexArrayOES(array) {
+
+ var vao = GL.vaos[array];
+ if (!vao) return 0;
+ return GLctx['isVertexArray'](vao);
+ }
+
+ function _emscripten_glLineWidth(x0) { GLctx['lineWidth'](x0) }
+
+ function _emscripten_glLinkProgram(program) {
+ program = GL.programs[program];
+ GLctx.linkProgram(program);
+ // Invalidate earlier computed uniform->ID mappings, those have now become stale
+ program.uniformLocsById = 0; // Mark as null-like so that glGetUniformLocation() knows to populate this again.
+ program.uniformSizeAndIdsByName = {};
+
+ }
+
+ function _emscripten_glPauseTransformFeedback() { GLctx['pauseTransformFeedback']() }
+
+ function _emscripten_glPixelStorei(pname, param) {
+ if (pname == 0xCF5 /* GL_UNPACK_ALIGNMENT */) {
+ GL.unpackAlignment = param;
+ }
+ GLctx.pixelStorei(pname, param);
+ }
+
+ function _emscripten_glPolygonOffset(x0, x1) { GLctx['polygonOffset'](x0, x1) }
+
+ function _emscripten_glProgramBinary(program, binaryFormat, binary, length) {
+ GL.recordError(0x500/*GL_INVALID_ENUM*/);
+ }
+
+ function _emscripten_glProgramParameteri(program, pname, value) {
+ GL.recordError(0x500/*GL_INVALID_ENUM*/);
+ }
+
+ function _emscripten_glQueryCounterEXT(id, target) {
+ GLctx.disjointTimerQueryExt['queryCounterEXT'](GL.queries[id], target);
+ }
+
+ function _emscripten_glReadBuffer(x0) { GLctx['readBuffer'](x0) }
+
+ function computeUnpackAlignedImageSize(width, height, sizePerPixel, alignment) {
+ function roundedToNextMultipleOf(x, y) {
+ return (x + y - 1) & -y;
+ }
+ var plainRowSize = width * sizePerPixel;
+ var alignedRowSize = roundedToNextMultipleOf(plainRowSize, alignment);
+ return height * alignedRowSize;
+ }
+
+ function __colorChannelsInGlTextureFormat(format) {
+ // Micro-optimizations for size: map format to size by subtracting smallest enum value (0x1902) from all values first.
+ // Also omit the most common size value (1) from the list, which is assumed by formats not on the list.
+ var colorChannels = {
+ // 0x1902 /* GL_DEPTH_COMPONENT */ - 0x1902: 1,
+ // 0x1906 /* GL_ALPHA */ - 0x1902: 1,
+ 5: 3,
+ 6: 4,
+ // 0x1909 /* GL_LUMINANCE */ - 0x1902: 1,
+ 8: 2,
+ 29502: 3,
+ 29504: 4,
+ // 0x1903 /* GL_RED */ - 0x1902: 1,
+ 26917: 2,
+ 26918: 2,
+ // 0x8D94 /* GL_RED_INTEGER */ - 0x1902: 1,
+ 29846: 3,
+ 29847: 4
+ };
+ return colorChannels[format - 0x1902]||1;
+ }
+
+ function heapObjectForWebGLType(type) {
+ // Micro-optimization for size: Subtract lowest GL enum number (0x1400/* GL_BYTE */) from type to compare
+ // smaller values for the heap, for shorter generated code size.
+ // Also the type HEAPU16 is not tested for explicitly, but any unrecognized type will return out HEAPU16.
+ // (since most types are HEAPU16)
+ type -= 0x1400;
+ if (type == 0) return HEAP8;
+
+ if (type == 1) return HEAPU8;
+
+ if (type == 2) return HEAP16;
+
+ if (type == 4) return HEAP32;
+
+ if (type == 6) return HEAPF32;
+
+ if (type == 5
+ || type == 28922
+ || type == 28520
+ || type == 30779
+ || type == 30782
+ )
+ return HEAPU32;
+
+ return HEAPU16;
+ }
+
+ function heapAccessShiftForWebGLHeap(heap) {
+ return 31 - Math.clz32(heap.BYTES_PER_ELEMENT);
+ }
+
+ function emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, internalFormat) {
+ var heap = heapObjectForWebGLType(type);
+ var shift = heapAccessShiftForWebGLHeap(heap);
+ var byteSize = 1<> shift, pixels + bytes >> shift);
+ }
+
+
+
+ function _emscripten_glReadPixels(x, y, width, height, format, type, pixels) {
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ if (GLctx.currentPixelPackBufferBinding) {
+ GLctx.readPixels(x, y, width, height, format, type, pixels);
+ } else {
+ var heap = heapObjectForWebGLType(type);
+ GLctx.readPixels(x, y, width, height, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));
+ }
+ return;
+ }
+ var pixelData = emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, format);
+ if (!pixelData) {
+ GL.recordError(0x500/*GL_INVALID_ENUM*/);
+ return;
+ }
+ GLctx.readPixels(x, y, width, height, format, type, pixelData);
+ }
+
+ function _emscripten_glReleaseShaderCompiler() {
+ // NOP (as allowed by GLES 2.0 spec)
+ }
+
+ function _emscripten_glRenderbufferStorage(x0, x1, x2, x3) { GLctx['renderbufferStorage'](x0, x1, x2, x3) }
+
+ function _emscripten_glRenderbufferStorageMultisample(x0, x1, x2, x3, x4) { GLctx['renderbufferStorageMultisample'](x0, x1, x2, x3, x4) }
+
+ function _emscripten_glResumeTransformFeedback() { GLctx['resumeTransformFeedback']() }
+
+ function _emscripten_glSampleCoverage(value, invert) {
+ GLctx.sampleCoverage(value, !!invert);
+ }
+
+ function _emscripten_glSamplerParameterf(sampler, pname, param) {
+ GLctx['samplerParameterf'](GL.samplers[sampler], pname, param);
+ }
+
+ function _emscripten_glSamplerParameterfv(sampler, pname, params) {
+ var param = HEAPF32[((params)>>2)];
+ GLctx['samplerParameterf'](GL.samplers[sampler], pname, param);
+ }
+
+ function _emscripten_glSamplerParameteri(sampler, pname, param) {
+ GLctx['samplerParameteri'](GL.samplers[sampler], pname, param);
+ }
+
+ function _emscripten_glSamplerParameteriv(sampler, pname, params) {
+ var param = HEAP32[((params)>>2)];
+ GLctx['samplerParameteri'](GL.samplers[sampler], pname, param);
+ }
+
+ function _emscripten_glScissor(x0, x1, x2, x3) { GLctx['scissor'](x0, x1, x2, x3) }
+
+ function _emscripten_glShaderBinary() {
+ GL.recordError(0x500/*GL_INVALID_ENUM*/);
+ }
+
+ function _emscripten_glShaderSource(shader, count, string, length) {
+ var source = GL.getSource(shader, count, string, length);
+
+ GLctx.shaderSource(GL.shaders[shader], source);
+ }
+
+ function _emscripten_glStencilFunc(x0, x1, x2) { GLctx['stencilFunc'](x0, x1, x2) }
+
+ function _emscripten_glStencilFuncSeparate(x0, x1, x2, x3) { GLctx['stencilFuncSeparate'](x0, x1, x2, x3) }
+
+ function _emscripten_glStencilMask(x0) { GLctx['stencilMask'](x0) }
+
+ function _emscripten_glStencilMaskSeparate(x0, x1) { GLctx['stencilMaskSeparate'](x0, x1) }
+
+ function _emscripten_glStencilOp(x0, x1, x2) { GLctx['stencilOp'](x0, x1, x2) }
+
+ function _emscripten_glStencilOpSeparate(x0, x1, x2, x3) { GLctx['stencilOpSeparate'](x0, x1, x2, x3) }
+
+
+
+
+ function _emscripten_glTexImage2D(target, level, internalFormat, width, height, border, format, type, pixels) {
+ if (GL.currentContext.version >= 2) {
+ // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ if (GLctx.currentPixelUnpackBufferBinding) {
+ GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels);
+ } else if (pixels) {
+ var heap = heapObjectForWebGLType(type);
+ GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));
+ } else {
+ GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, null);
+ }
+ return;
+ }
+ GLctx.texImage2D(target, level, internalFormat, width, height, border, format, type, pixels ? emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, internalFormat) : null);
+ }
+
+
+ function _emscripten_glTexImage3D(target, level, internalFormat, width, height, depth, border, format, type, pixels) {
+ if (GLctx.currentPixelUnpackBufferBinding) {
+ GLctx['texImage3D'](target, level, internalFormat, width, height, depth, border, format, type, pixels);
+ } else if (pixels) {
+ var heap = heapObjectForWebGLType(type);
+ GLctx['texImage3D'](target, level, internalFormat, width, height, depth, border, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));
+ } else {
+ GLctx['texImage3D'](target, level, internalFormat, width, height, depth, border, format, type, null);
+ }
+ }
+
+ function _emscripten_glTexParameterf(x0, x1, x2) { GLctx['texParameterf'](x0, x1, x2) }
+
+ function _emscripten_glTexParameterfv(target, pname, params) {
+ var param = HEAPF32[((params)>>2)];
+ GLctx.texParameterf(target, pname, param);
+ }
+
+ function _emscripten_glTexParameteri(x0, x1, x2) { GLctx['texParameteri'](x0, x1, x2) }
+
+ function _emscripten_glTexParameteriv(target, pname, params) {
+ var param = HEAP32[((params)>>2)];
+ GLctx.texParameteri(target, pname, param);
+ }
+
+ function _emscripten_glTexStorage2D(x0, x1, x2, x3, x4) { GLctx['texStorage2D'](x0, x1, x2, x3, x4) }
+
+ function _emscripten_glTexStorage3D(x0, x1, x2, x3, x4, x5) { GLctx['texStorage3D'](x0, x1, x2, x3, x4, x5) }
+
+
+
+
+ function _emscripten_glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels) {
+ if (GL.currentContext.version >= 2) {
+ // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ if (GLctx.currentPixelUnpackBufferBinding) {
+ GLctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixels);
+ } else if (pixels) {
+ var heap = heapObjectForWebGLType(type);
+ GLctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));
+ } else {
+ GLctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, null);
+ }
+ return;
+ }
+ var pixelData = null;
+ if (pixels) pixelData = emscriptenWebGLGetTexPixelData(type, format, width, height, pixels, 0);
+ GLctx.texSubImage2D(target, level, xoffset, yoffset, width, height, format, type, pixelData);
+ }
+
+
+ function _emscripten_glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels) {
+ if (GLctx.currentPixelUnpackBufferBinding) {
+ GLctx['texSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, pixels);
+ } else if (pixels) {
+ var heap = heapObjectForWebGLType(type);
+ GLctx['texSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, heap, pixels >> heapAccessShiftForWebGLHeap(heap));
+ } else {
+ GLctx['texSubImage3D'](target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, null);
+ }
+ }
+
+ function _emscripten_glTransformFeedbackVaryings(program, count, varyings, bufferMode) {
+ program = GL.programs[program];
+ var vars = [];
+ for (var i = 0; i < count; i++)
+ vars.push(UTF8ToString(HEAP32[(((varyings)+(i*4))>>2)]));
+
+ GLctx['transformFeedbackVaryings'](program, vars, bufferMode);
+ }
+
+
+ function _emscripten_glUniform1f(location, v0) {
+ GLctx.uniform1f(webglGetUniformLocation(location), v0);
+ }
+
+
+ var miniTempWebGLFloatBuffers = [];
+
+ function _emscripten_glUniform1fv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform1fv(webglGetUniformLocation(location), HEAPF32, value>>2, count);
+ return;
+ }
+
+ if (count <= 288) {
+ // avoid allocation when uploading few enough uniforms
+ var view = miniTempWebGLFloatBuffers[count-1];
+ for (var i = 0; i < count; ++i) {
+ view[i] = HEAPF32[(((value)+(4*i))>>2)];
+ }
+ } else
+ {
+ var view = HEAPF32.subarray((value)>>2, (value+count*4)>>2);
+ }
+ GLctx.uniform1fv(webglGetUniformLocation(location), view);
+ }
+
+
+ function _emscripten_glUniform1i(location, v0) {
+ GLctx.uniform1i(webglGetUniformLocation(location), v0);
+ }
+
+
+ var __miniTempWebGLIntBuffers = [];
+
+ function _emscripten_glUniform1iv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform1iv(webglGetUniformLocation(location), HEAP32, value>>2, count);
+ return;
+ }
+
+ if (count <= 288) {
+ // avoid allocation when uploading few enough uniforms
+ var view = __miniTempWebGLIntBuffers[count-1];
+ for (var i = 0; i < count; ++i) {
+ view[i] = HEAP32[(((value)+(4*i))>>2)];
+ }
+ } else
+ {
+ var view = HEAP32.subarray((value)>>2, (value+count*4)>>2);
+ }
+ GLctx.uniform1iv(webglGetUniformLocation(location), view);
+ }
+
+ function _emscripten_glUniform1ui(location, v0) {
+ GLctx.uniform1ui(webglGetUniformLocation(location), v0);
+ }
+
+ function _emscripten_glUniform1uiv(location, count, value) {
+ count && GLctx.uniform1uiv(webglGetUniformLocation(location), HEAPU32, value>>2, count);
+ }
+
+
+ function _emscripten_glUniform2f(location, v0, v1) {
+ GLctx.uniform2f(webglGetUniformLocation(location), v0, v1);
+ }
+
+
+
+ function _emscripten_glUniform2fv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform2fv(webglGetUniformLocation(location), HEAPF32, value>>2, count*2);
+ return;
+ }
+
+ if (count <= 144) {
+ // avoid allocation when uploading few enough uniforms
+ var view = miniTempWebGLFloatBuffers[2*count-1];
+ for (var i = 0; i < 2*count; i += 2) {
+ view[i] = HEAPF32[(((value)+(4*i))>>2)];
+ view[i+1] = HEAPF32[(((value)+(4*i+4))>>2)];
+ }
+ } else
+ {
+ var view = HEAPF32.subarray((value)>>2, (value+count*8)>>2);
+ }
+ GLctx.uniform2fv(webglGetUniformLocation(location), view);
+ }
+
+
+ function _emscripten_glUniform2i(location, v0, v1) {
+ GLctx.uniform2i(webglGetUniformLocation(location), v0, v1);
+ }
+
+
+
+ function _emscripten_glUniform2iv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform2iv(webglGetUniformLocation(location), HEAP32, value>>2, count*2);
+ return;
+ }
+
+ if (count <= 144) {
+ // avoid allocation when uploading few enough uniforms
+ var view = __miniTempWebGLIntBuffers[2*count-1];
+ for (var i = 0; i < 2*count; i += 2) {
+ view[i] = HEAP32[(((value)+(4*i))>>2)];
+ view[i+1] = HEAP32[(((value)+(4*i+4))>>2)];
+ }
+ } else
+ {
+ var view = HEAP32.subarray((value)>>2, (value+count*8)>>2);
+ }
+ GLctx.uniform2iv(webglGetUniformLocation(location), view);
+ }
+
+ function _emscripten_glUniform2ui(location, v0, v1) {
+ GLctx.uniform2ui(webglGetUniformLocation(location), v0, v1);
+ }
+
+ function _emscripten_glUniform2uiv(location, count, value) {
+ count && GLctx.uniform2uiv(webglGetUniformLocation(location), HEAPU32, value>>2, count*2);
+ }
+
+
+ function _emscripten_glUniform3f(location, v0, v1, v2) {
+ GLctx.uniform3f(webglGetUniformLocation(location), v0, v1, v2);
+ }
+
+
+
+ function _emscripten_glUniform3fv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform3fv(webglGetUniformLocation(location), HEAPF32, value>>2, count*3);
+ return;
+ }
+
+ if (count <= 96) {
+ // avoid allocation when uploading few enough uniforms
+ var view = miniTempWebGLFloatBuffers[3*count-1];
+ for (var i = 0; i < 3*count; i += 3) {
+ view[i] = HEAPF32[(((value)+(4*i))>>2)];
+ view[i+1] = HEAPF32[(((value)+(4*i+4))>>2)];
+ view[i+2] = HEAPF32[(((value)+(4*i+8))>>2)];
+ }
+ } else
+ {
+ var view = HEAPF32.subarray((value)>>2, (value+count*12)>>2);
+ }
+ GLctx.uniform3fv(webglGetUniformLocation(location), view);
+ }
+
+
+ function _emscripten_glUniform3i(location, v0, v1, v2) {
+ GLctx.uniform3i(webglGetUniformLocation(location), v0, v1, v2);
+ }
+
+
+
+ function _emscripten_glUniform3iv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform3iv(webglGetUniformLocation(location), HEAP32, value>>2, count*3);
+ return;
+ }
+
+ if (count <= 96) {
+ // avoid allocation when uploading few enough uniforms
+ var view = __miniTempWebGLIntBuffers[3*count-1];
+ for (var i = 0; i < 3*count; i += 3) {
+ view[i] = HEAP32[(((value)+(4*i))>>2)];
+ view[i+1] = HEAP32[(((value)+(4*i+4))>>2)];
+ view[i+2] = HEAP32[(((value)+(4*i+8))>>2)];
+ }
+ } else
+ {
+ var view = HEAP32.subarray((value)>>2, (value+count*12)>>2);
+ }
+ GLctx.uniform3iv(webglGetUniformLocation(location), view);
+ }
+
+ function _emscripten_glUniform3ui(location, v0, v1, v2) {
+ GLctx.uniform3ui(webglGetUniformLocation(location), v0, v1, v2);
+ }
+
+ function _emscripten_glUniform3uiv(location, count, value) {
+ count && GLctx.uniform3uiv(webglGetUniformLocation(location), HEAPU32, value>>2, count*3);
+ }
+
+
+ function _emscripten_glUniform4f(location, v0, v1, v2, v3) {
+ GLctx.uniform4f(webglGetUniformLocation(location), v0, v1, v2, v3);
+ }
+
+
+
+ function _emscripten_glUniform4fv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform4fv(webglGetUniformLocation(location), HEAPF32, value>>2, count*4);
+ return;
+ }
+
+ if (count <= 72) {
+ // avoid allocation when uploading few enough uniforms
+ var view = miniTempWebGLFloatBuffers[4*count-1];
+ // hoist the heap out of the loop for size and for pthreads+growth.
+ var heap = HEAPF32;
+ value >>= 2;
+ for (var i = 0; i < 4 * count; i += 4) {
+ var dst = value + i;
+ view[i] = heap[dst];
+ view[i + 1] = heap[dst + 1];
+ view[i + 2] = heap[dst + 2];
+ view[i + 3] = heap[dst + 3];
+ }
+ } else
+ {
+ var view = HEAPF32.subarray((value)>>2, (value+count*16)>>2);
+ }
+ GLctx.uniform4fv(webglGetUniformLocation(location), view);
+ }
+
+
+ function _emscripten_glUniform4i(location, v0, v1, v2, v3) {
+ GLctx.uniform4i(webglGetUniformLocation(location), v0, v1, v2, v3);
+ }
+
+
+
+ function _emscripten_glUniform4iv(location, count, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniform4iv(webglGetUniformLocation(location), HEAP32, value>>2, count*4);
+ return;
+ }
+
+ if (count <= 72) {
+ // avoid allocation when uploading few enough uniforms
+ var view = __miniTempWebGLIntBuffers[4*count-1];
+ for (var i = 0; i < 4*count; i += 4) {
+ view[i] = HEAP32[(((value)+(4*i))>>2)];
+ view[i+1] = HEAP32[(((value)+(4*i+4))>>2)];
+ view[i+2] = HEAP32[(((value)+(4*i+8))>>2)];
+ view[i+3] = HEAP32[(((value)+(4*i+12))>>2)];
+ }
+ } else
+ {
+ var view = HEAP32.subarray((value)>>2, (value+count*16)>>2);
+ }
+ GLctx.uniform4iv(webglGetUniformLocation(location), view);
+ }
+
+ function _emscripten_glUniform4ui(location, v0, v1, v2, v3) {
+ GLctx.uniform4ui(webglGetUniformLocation(location), v0, v1, v2, v3);
+ }
+
+ function _emscripten_glUniform4uiv(location, count, value) {
+ count && GLctx.uniform4uiv(webglGetUniformLocation(location), HEAPU32, value>>2, count*4);
+ }
+
+ function _emscripten_glUniformBlockBinding(program, uniformBlockIndex, uniformBlockBinding) {
+ program = GL.programs[program];
+
+ GLctx['uniformBlockBinding'](program, uniformBlockIndex, uniformBlockBinding);
+ }
+
+
+
+ function _emscripten_glUniformMatrix2fv(location, count, transpose, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniformMatrix2fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*4);
+ return;
+ }
+
+ if (count <= 72) {
+ // avoid allocation when uploading few enough uniforms
+ var view = miniTempWebGLFloatBuffers[4*count-1];
+ for (var i = 0; i < 4*count; i += 4) {
+ view[i] = HEAPF32[(((value)+(4*i))>>2)];
+ view[i+1] = HEAPF32[(((value)+(4*i+4))>>2)];
+ view[i+2] = HEAPF32[(((value)+(4*i+8))>>2)];
+ view[i+3] = HEAPF32[(((value)+(4*i+12))>>2)];
+ }
+ } else
+ {
+ var view = HEAPF32.subarray((value)>>2, (value+count*16)>>2);
+ }
+ GLctx.uniformMatrix2fv(webglGetUniformLocation(location), !!transpose, view);
+ }
+
+ function _emscripten_glUniformMatrix2x3fv(location, count, transpose, value) {
+ count && GLctx.uniformMatrix2x3fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*6);
+ }
+
+ function _emscripten_glUniformMatrix2x4fv(location, count, transpose, value) {
+ count && GLctx.uniformMatrix2x4fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*8);
+ }
+
+
+
+ function _emscripten_glUniformMatrix3fv(location, count, transpose, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniformMatrix3fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*9);
+ return;
+ }
+
+ if (count <= 32) {
+ // avoid allocation when uploading few enough uniforms
+ var view = miniTempWebGLFloatBuffers[9*count-1];
+ for (var i = 0; i < 9*count; i += 9) {
+ view[i] = HEAPF32[(((value)+(4*i))>>2)];
+ view[i+1] = HEAPF32[(((value)+(4*i+4))>>2)];
+ view[i+2] = HEAPF32[(((value)+(4*i+8))>>2)];
+ view[i+3] = HEAPF32[(((value)+(4*i+12))>>2)];
+ view[i+4] = HEAPF32[(((value)+(4*i+16))>>2)];
+ view[i+5] = HEAPF32[(((value)+(4*i+20))>>2)];
+ view[i+6] = HEAPF32[(((value)+(4*i+24))>>2)];
+ view[i+7] = HEAPF32[(((value)+(4*i+28))>>2)];
+ view[i+8] = HEAPF32[(((value)+(4*i+32))>>2)];
+ }
+ } else
+ {
+ var view = HEAPF32.subarray((value)>>2, (value+count*36)>>2);
+ }
+ GLctx.uniformMatrix3fv(webglGetUniformLocation(location), !!transpose, view);
+ }
+
+ function _emscripten_glUniformMatrix3x2fv(location, count, transpose, value) {
+ count && GLctx.uniformMatrix3x2fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*6);
+ }
+
+ function _emscripten_glUniformMatrix3x4fv(location, count, transpose, value) {
+ count && GLctx.uniformMatrix3x4fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*12);
+ }
+
+
+
+ function _emscripten_glUniformMatrix4fv(location, count, transpose, value) {
+
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ count && GLctx.uniformMatrix4fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*16);
+ return;
+ }
+
+ if (count <= 18) {
+ // avoid allocation when uploading few enough uniforms
+ var view = miniTempWebGLFloatBuffers[16*count-1];
+ // hoist the heap out of the loop for size and for pthreads+growth.
+ var heap = HEAPF32;
+ value >>= 2;
+ for (var i = 0; i < 16 * count; i += 16) {
+ var dst = value + i;
+ view[i] = heap[dst];
+ view[i + 1] = heap[dst + 1];
+ view[i + 2] = heap[dst + 2];
+ view[i + 3] = heap[dst + 3];
+ view[i + 4] = heap[dst + 4];
+ view[i + 5] = heap[dst + 5];
+ view[i + 6] = heap[dst + 6];
+ view[i + 7] = heap[dst + 7];
+ view[i + 8] = heap[dst + 8];
+ view[i + 9] = heap[dst + 9];
+ view[i + 10] = heap[dst + 10];
+ view[i + 11] = heap[dst + 11];
+ view[i + 12] = heap[dst + 12];
+ view[i + 13] = heap[dst + 13];
+ view[i + 14] = heap[dst + 14];
+ view[i + 15] = heap[dst + 15];
+ }
+ } else
+ {
+ var view = HEAPF32.subarray((value)>>2, (value+count*64)>>2);
+ }
+ GLctx.uniformMatrix4fv(webglGetUniformLocation(location), !!transpose, view);
+ }
+
+ function _emscripten_glUniformMatrix4x2fv(location, count, transpose, value) {
+ count && GLctx.uniformMatrix4x2fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*8);
+ }
+
+ function _emscripten_glUniformMatrix4x3fv(location, count, transpose, value) {
+ count && GLctx.uniformMatrix4x3fv(webglGetUniformLocation(location), !!transpose, HEAPF32, value>>2, count*12);
+ }
+
+ function _emscripten_glUseProgram(program) {
+ program = GL.programs[program];
+ GLctx.useProgram(program);
+ // Record the currently active program so that we can access the uniform
+ // mapping table of that program.
+ GLctx.currentProgram = program;
+ }
+
+ function _emscripten_glValidateProgram(program) {
+ GLctx.validateProgram(GL.programs[program]);
+ }
+
+ function _emscripten_glVertexAttrib1f(x0, x1) { GLctx['vertexAttrib1f'](x0, x1) }
+
+ function _emscripten_glVertexAttrib1fv(index, v) {
+
+ GLctx.vertexAttrib1f(index, HEAPF32[v>>2]);
+ }
+
+ function _emscripten_glVertexAttrib2f(x0, x1, x2) { GLctx['vertexAttrib2f'](x0, x1, x2) }
+
+ function _emscripten_glVertexAttrib2fv(index, v) {
+
+ GLctx.vertexAttrib2f(index, HEAPF32[v>>2], HEAPF32[v+4>>2]);
+ }
+
+ function _emscripten_glVertexAttrib3f(x0, x1, x2, x3) { GLctx['vertexAttrib3f'](x0, x1, x2, x3) }
+
+ function _emscripten_glVertexAttrib3fv(index, v) {
+
+ GLctx.vertexAttrib3f(index, HEAPF32[v>>2], HEAPF32[v+4>>2], HEAPF32[v+8>>2]);
+ }
+
+ function _emscripten_glVertexAttrib4f(x0, x1, x2, x3, x4) { GLctx['vertexAttrib4f'](x0, x1, x2, x3, x4) }
+
+ function _emscripten_glVertexAttrib4fv(index, v) {
+
+ GLctx.vertexAttrib4f(index, HEAPF32[v>>2], HEAPF32[v+4>>2], HEAPF32[v+8>>2], HEAPF32[v+12>>2]);
+ }
+
+ function _emscripten_glVertexAttribDivisor(index, divisor) {
+ GLctx['vertexAttribDivisor'](index, divisor);
+ }
+
+ function _emscripten_glVertexAttribDivisorANGLE(index, divisor) {
+ GLctx['vertexAttribDivisor'](index, divisor);
+ }
+
+ function _emscripten_glVertexAttribDivisorARB(index, divisor) {
+ GLctx['vertexAttribDivisor'](index, divisor);
+ }
+
+ function _emscripten_glVertexAttribDivisorEXT(index, divisor) {
+ GLctx['vertexAttribDivisor'](index, divisor);
+ }
+
+ function _emscripten_glVertexAttribDivisorNV(index, divisor) {
+ GLctx['vertexAttribDivisor'](index, divisor);
+ }
+
+ function _emscripten_glVertexAttribI4i(x0, x1, x2, x3, x4) { GLctx['vertexAttribI4i'](x0, x1, x2, x3, x4) }
+
+ function _emscripten_glVertexAttribI4iv(index, v) {
+ GLctx.vertexAttribI4i(index, HEAP32[v>>2], HEAP32[v+4>>2], HEAP32[v+8>>2], HEAP32[v+12>>2]);
+ }
+
+ function _emscripten_glVertexAttribI4ui(x0, x1, x2, x3, x4) { GLctx['vertexAttribI4ui'](x0, x1, x2, x3, x4) }
+
+ function _emscripten_glVertexAttribI4uiv(index, v) {
+ GLctx.vertexAttribI4ui(index, HEAPU32[v>>2], HEAPU32[v+4>>2], HEAPU32[v+8>>2], HEAPU32[v+12>>2]);
+ }
+
+ function _emscripten_glVertexAttribIPointer(index, size, type, stride, ptr) {
+ GLctx['vertexAttribIPointer'](index, size, type, stride, ptr);
+ }
+
+ function _emscripten_glVertexAttribPointer(index, size, type, normalized, stride, ptr) {
+ GLctx.vertexAttribPointer(index, size, type, !!normalized, stride, ptr);
+ }
+
+ function _emscripten_glViewport(x0, x1, x2, x3) { GLctx['viewport'](x0, x1, x2, x3) }
+
+ function _emscripten_glWaitSync(sync, flags, /** @type {!BigInt} */ timeout) {
+ // See WebGL2 vs GLES3 difference on GL_TIMEOUT_IGNORED above (https://www.khronos.org/registry/webgl/specs/latest/2.0/#5.15)
+ timeout = Number(timeout);
+ GLctx.waitSync(GL.syncs[sync], flags, timeout);
+ }
+
+ function _emscripten_memcpy_big(dest, src, num) {
+ HEAPU8.copyWithin(dest, src, src + num);
+ }
+
+
+ function emscripten_realloc_buffer(size) {
+ var b = wasmMemory.buffer;
+ try {
+ // round size grow request up to wasm page size (fixed 64KB per spec)
+ wasmMemory.grow((size - b.byteLength + 65535) >>> 16); // .grow() takes a delta compared to the previous size
+ updateMemoryViews();
+ return 1 /*success*/;
+ } catch(e) {
+ err('emscripten_realloc_buffer: Attempted to grow heap from ' + b.byteLength + ' bytes to ' + size + ' bytes, but got error: ' + e);
+ }
+ // implicit 0 return to save code size (caller will cast "undefined" into 0
+ // anyhow)
+ }
+ function _emscripten_resize_heap(requestedSize) {
+ var oldSize = HEAPU8.length;
+ requestedSize = requestedSize >>> 0;
+ // With multithreaded builds, races can happen (another thread might increase the size
+ // in between), so return a failure, and let the caller retry.
+ assert(requestedSize > oldSize);
+
+ // Memory resize rules:
+ // 1. Always increase heap size to at least the requested size, rounded up
+ // to next page multiple.
+ // 2a. If MEMORY_GROWTH_LINEAR_STEP == -1, excessively resize the heap
+ // geometrically: increase the heap size according to
+ // MEMORY_GROWTH_GEOMETRIC_STEP factor (default +20%), At most
+ // overreserve by MEMORY_GROWTH_GEOMETRIC_CAP bytes (default 96MB).
+ // 2b. If MEMORY_GROWTH_LINEAR_STEP != -1, excessively resize the heap
+ // linearly: increase the heap size by at least
+ // MEMORY_GROWTH_LINEAR_STEP bytes.
+ // 3. Max size for the heap is capped at 2048MB-WASM_PAGE_SIZE, or by
+ // MAXIMUM_MEMORY, or by ASAN limit, depending on which is smallest
+ // 4. If we were unable to allocate as much memory, it may be due to
+ // over-eager decision to excessively reserve due to (3) above.
+ // Hence if an allocation fails, cut down on the amount of excess
+ // growth, in an attempt to succeed to perform a smaller allocation.
+
+ // A limit is set for how much we can grow. We should not exceed that
+ // (the wasm binary specifies it, so if we tried, we'd fail anyhow).
+ var maxHeapSize = getHeapMax();
+ if (requestedSize > maxHeapSize) {
+ err('Cannot enlarge memory, asked to go up to ' + requestedSize + ' bytes, but the limit is ' + maxHeapSize + ' bytes!');
+ return false;
+ }
+
+ let alignUp = (x, multiple) => x + (multiple - x % multiple) % multiple;
+
+ // Loop through potential heap size increases. If we attempt a too eager
+ // reservation that fails, cut down on the attempted size and reserve a
+ // smaller bump instead. (max 3 times, chosen somewhat arbitrarily)
+ for (var cutDown = 1; cutDown <= 4; cutDown *= 2) {
+ var overGrownHeapSize = oldSize * (1 + 0.2 / cutDown); // ensure geometric growth
+ // but limit overreserving (default to capping at +96MB overgrowth at most)
+ overGrownHeapSize = Math.min(overGrownHeapSize, requestedSize + 100663296 );
+
+ var newSize = Math.min(maxHeapSize, alignUp(Math.max(requestedSize, overGrownHeapSize), 65536));
+
+ var replacement = emscripten_realloc_buffer(newSize);
+ if (replacement) {
+
+ return true;
+ }
+ }
+ err('Failed to grow the heap from ' + oldSize + ' bytes to ' + newSize + ' bytes, not enough memory!');
+ return false;
+ }
+
+ var ENV = {};
+
+ function getExecutableName() {
+ return thisProgram || './this.program';
+ }
+ function getEnvStrings() {
+ if (!getEnvStrings.strings) {
+ // Default values.
+ // Browser language detection #8751
+ 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()
+ };
+ // Apply the user-provided values, if any.
+ for (var x in ENV) {
+ // x is a key in ENV; if ENV[x] is undefined, that means it was
+ // explicitly set to be so. We allow user code to do that to
+ // force variables with default values to remain unset.
+ 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;
+ }
+
+ /** @param {boolean=} dontAddNull */
+ function writeAsciiToMemory(str, buffer, dontAddNull) {
+ for (var i = 0; i < str.length; ++i) {
+ assert(str.charCodeAt(i) === (str.charCodeAt(i) & 0xff));
+ HEAP8[((buffer++)>>0)] = str.charCodeAt(i);
+ }
+ // Null-terminate the pointer to the HEAP.
+ if (!dontAddNull) HEAP8[((buffer)>>0)] = 0;
+ }
+
+ function _environ_get(__environ, environ_buf) {
+ var bufSize = 0;
+ getEnvStrings().forEach(function(string, i) {
+ var ptr = environ_buf + bufSize;
+ HEAPU32[(((__environ)+(i*4))>>2)] = ptr;
+ writeAsciiToMemory(string, ptr);
+ bufSize += string.length + 1;
+ });
+ return 0;
+ }
+
+
+ function _environ_sizes_get(penviron_count, penviron_buf_size) {
+ var strings = getEnvStrings();
+ HEAPU32[((penviron_count)>>2)] = strings.length;
+ var bufSize = 0;
+ strings.forEach(function(string) {
+ bufSize += string.length + 1;
+ });
+ HEAPU32[((penviron_buf_size)>>2)] = bufSize;
+ return 0;
+ }
+
+
+ function _proc_exit(code) {
+ EXITSTATUS = code;
+ if (!keepRuntimeAlive()) {
+ if (Module['onExit']) Module['onExit'](code);
+ ABORT = true;
+ }
+ quit_(code, new ExitStatus(code));
+ }
+ /** @param {boolean|number=} implicit */
+ function exitJS(status, implicit) {
+ EXITSTATUS = status;
+
+ checkUnflushedContent();
+
+ // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down
+ if (keepRuntimeAlive() && !implicit) {
+ var msg = 'program exited (with status: ' + status + '), but keepRuntimeAlive() is set (counter=' + runtimeKeepaliveCounter + ') due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)';
+ readyPromiseReject(msg);
+ err(msg);
+ }
+
+ _proc_exit(status);
+ }
+ var _exit = exitJS;
+
+ 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;
+ }
+ }
+
+ function _fd_fdstat_get(fd, pbuf) {
+ try {
+
+ var stream = SYSCALLS.getStreamFromFD(fd);
+ // All character devices are terminals (other things a Linux system would
+ // assume is a character device, like the mouse, we have special APIs for).
+ var type = stream.tty ? 2 :
+ FS.isDir(stream.mode) ? 3 :
+ FS.isLink(stream.mode) ? 7 :
+ 4;
+ HEAP8[((pbuf)>>0)] = type;
+ // TODO HEAP16[(((pbuf)+(2))>>1)] = ?;
+ // TODO (tempI64 = [?>>>0,(tempDouble=?,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((pbuf)+(8))>>2)] = tempI64[0],HEAP32[(((pbuf)+(12))>>2)] = tempI64[1]);
+ // TODO (tempI64 = [?>>>0,(tempDouble=?,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[(((pbuf)+(16))>>2)] = tempI64[0],HEAP32[(((pbuf)+(20))>>2)] = tempI64[1]);
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return e.errno;
+ }
+ }
+
+ /** @param {number=} offset */
+ function doReadv(stream, iov, iovcnt, offset) {
+ var ret = 0;
+ for (var i = 0; i < iovcnt; i++) {
+ var ptr = HEAPU32[((iov)>>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 < len) break; // nothing more to read
+ if (typeof offset !== 'undefined') {
+ offset += curr;
+ }
+ }
+ return ret;
+ }
+
+
+
+
+
+ function _fd_pread(fd, iov, iovcnt, /** @type {!BigInt} */ offset, pnum) {
+ try {
+
+ offset = bigintToI53Checked(offset); if (isNaN(offset)) return 61;
+ var stream = SYSCALLS.getStreamFromFD(fd)
+ var num = doReadv(stream, iov, iovcnt, offset);
+ HEAPU32[((pnum)>>2)] = num;
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return e.errno;
+ }
+ }
+
+ /** @param {number=} offset */
+ function doWritev(stream, iov, iovcnt, offset) {
+ var ret = 0;
+ for (var i = 0; i < iovcnt; i++) {
+ var ptr = HEAPU32[((iov)>>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_pwrite(fd, iov, iovcnt, /** @type {!BigInt} */ offset, pnum) {
+ try {
+
+ offset = bigintToI53Checked(offset); if (isNaN(offset)) return 61;
+ var stream = SYSCALLS.getStreamFromFD(fd)
+ var num = doWritev(stream, iov, iovcnt, offset);
+ HEAPU32[((pnum)>>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, /** @type {!BigInt} */ offset, whence, newOffset) {
+ try {
+
+ offset = bigintToI53Checked(offset); if (isNaN(offset)) return 61;
+ var stream = SYSCALLS.getStreamFromFD(fd);
+ FS.llseek(stream, offset, whence);
+ (tempI64 = [stream.position>>>0,(tempDouble=stream.position,(+(Math.abs(tempDouble))) >= 1.0 ? (tempDouble > 0.0 ? ((Math.min((+(Math.floor((tempDouble)/4294967296.0))), 4294967295.0))|0)>>>0 : (~~((+(Math.ceil((tempDouble - +(((~~(tempDouble)))>>>0))/4294967296.0)))))>>>0) : 0)],HEAP32[((newOffset)>>2)] = tempI64[0],HEAP32[(((newOffset)+(4))>>2)] = tempI64[1]);
+ if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state
+ return 0;
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return e.errno;
+ }
+ }
+
+ function _fd_sync(fd) {
+ try {
+
+ var stream = SYSCALLS.getStreamFromFD(fd);
+ if (stream.stream_ops && stream.stream_ops.fsync) {
+ return stream.stream_ops.fsync(stream);
+ }
+ return 0; // we can't do anything synchronously; the in-memory FS is already synced to
+ } catch (e) {
+ if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e;
+ return e.errno;
+ }
+ }
+
+
+ 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(linkerSetup) {
+ const pthreadReplacements = {};
+ const dotnet_replacements = {
+ fetch: globalThis.fetch,
+ require,
+ updateMemoryViews,
+ pthreadReplacements,
+ scriptDirectory,
+ noExitRuntime
+ };
+ // USE_PTHREADS is emscripten's define symbol, which is passed to acorn optimizer, so we could use it here
+ const ENVIRONMENT_IS_PTHREAD = false;
+
+ Module.__dotnet_runtime.passEmscriptenInternals({
+ isPThread: ENVIRONMENT_IS_PTHREAD,
+ quit_, ExitStatus,
+ ...linkerSetup
+ });
+ Module.__dotnet_runtime.initializeReplacements(dotnet_replacements);
+
+ Module.__dotnet_runtime.configureEmscriptenStartup(Module);
+
+ updateMemoryViews = dotnet_replacements.updateMemoryViews;
+ noExitRuntime = dotnet_replacements.noExitRuntime;
+ fetch = dotnet_replacements.fetch;
+ require = dotnet_replacements.require;
+ _scriptDir = __dirname = scriptDirectory = dotnet_replacements.scriptDirectory;
+ }};
+ function _mono_interp_flush_jitcall_queue(
+ ) {
+ return {runtime_idx:12};//mono_interp_flush_jitcall_queue
+ }
+
+ function _mono_interp_invoke_wasm_jit_call_trampoline(
+ ) {
+ return {runtime_idx:11};//mono_interp_invoke_wasm_jit_call_trampoline
+ }
+
+ function _mono_interp_jit_wasm_entry_trampoline(
+ ) {
+ return {runtime_idx:9};//mono_interp_jit_wasm_entry_trampoline
+ }
+
+ function _mono_interp_jit_wasm_jit_call_trampoline(
+ ) {
+ return {runtime_idx:10};//mono_interp_jit_wasm_jit_call_trampoline
+ }
+
+ function _mono_interp_record_interp_entry(
+ ) {
+ return {runtime_idx:8};//mono_interp_record_interp_entry
+ }
+
+ function _mono_interp_tier_prepare_jiterpreter(
+ ) {
+ return {runtime_idx:7};//mono_interp_tier_prepare_jiterpreter
+ }
+
+ function _mono_wasm_add_dbg_command_received(
+ ) {
+ return {runtime_idx:3};//mono_wasm_add_dbg_command_received
+ }
+
+ function _mono_wasm_asm_loaded(
+ ) {
+ return {runtime_idx:1};//mono_wasm_asm_loaded
+ }
+
+ function _mono_wasm_bind_cs_function(
+ ) {
+ return {runtime_idx:23};//mono_wasm_bind_cs_function
+ }
+
+ function _mono_wasm_bind_js_function(
+ ) {
+ return {runtime_idx:20};//mono_wasm_bind_js_function
+ }
+
+ function _mono_wasm_change_case(
+ ) {
+ return {runtime_idx:26};//mono_wasm_change_case
+ }
+
+ function _mono_wasm_change_case_invariant(
+ ) {
+ return {runtime_idx:25};//mono_wasm_change_case_invariant
+ }
+
+ function _mono_wasm_compare_string(
+ ) {
+ return {runtime_idx:27};//mono_wasm_compare_string
+ }
+
+ function _mono_wasm_create_cs_owned_object_ref(
+ ) {
+ return {runtime_idx:41};//mono_wasm_create_cs_owned_object_ref
+ }
+
+ function _mono_wasm_debugger_log(
+ ) {
+ return {runtime_idx:2};//mono_wasm_debugger_log
+ }
+
+ function _mono_wasm_ends_with(
+ ) {
+ return {runtime_idx:29};//mono_wasm_ends_with
+ }
+
+ function _mono_wasm_fire_debugger_agent_message_with_data(
+ ) {
+ return {runtime_idx:4};//mono_wasm_fire_debugger_agent_message_with_data
+ }
+
+ function _mono_wasm_get_by_index_ref(
+ ) {
+ return {runtime_idx:38};//mono_wasm_get_by_index_ref
+ }
+
+ function _mono_wasm_get_calendar_info(
+ ) {
+ return {runtime_idx:31};//mono_wasm_get_calendar_info
+ }
+
+ function _mono_wasm_get_culture_info(
+ ) {
+ return {runtime_idx:32};//mono_wasm_get_culture_info
+ }
+
+ function _mono_wasm_get_first_day_of_week(
+ ) {
+ return {runtime_idx:33};//mono_wasm_get_first_day_of_week
+ }
+
+ function _mono_wasm_get_first_week_of_year(
+ ) {
+ return {runtime_idx:34};//mono_wasm_get_first_week_of_year
+ }
+
+ function _mono_wasm_get_global_object_ref(
+ ) {
+ return {runtime_idx:40};//mono_wasm_get_global_object_ref
+ }
+
+ function _mono_wasm_get_object_property_ref(
+ ) {
+ return {runtime_idx:36};//mono_wasm_get_object_property_ref
+ }
+
+ function _mono_wasm_index_of(
+ ) {
+ return {runtime_idx:30};//mono_wasm_index_of
+ }
+
+ function _mono_wasm_invoke_bound_function(
+ ) {
+ return {runtime_idx:21};//mono_wasm_invoke_bound_function
+ }
+
+ function _mono_wasm_invoke_import(
+ ) {
+ return {runtime_idx:22};//mono_wasm_invoke_import
+ }
+
+ function _mono_wasm_invoke_js_blazor(
+ ) {
+ return {runtime_idx:44};//mono_wasm_invoke_js_blazor
+ }
+
+ function _mono_wasm_invoke_js_with_args_ref(
+ ) {
+ return {runtime_idx:35};//mono_wasm_invoke_js_with_args_ref
+ }
+
+ function _mono_wasm_marshal_promise(
+ ) {
+ return {runtime_idx:24};//mono_wasm_marshal_promise
+ }
+
+ function _mono_wasm_release_cs_owned_object(
+ ) {
+ return {runtime_idx:19};//mono_wasm_release_cs_owned_object
+ }
+
+ function _mono_wasm_schedule_timer(
+ ) {
+ return {runtime_idx:0};//mono_wasm_schedule_timer
+ }
+
+ function _mono_wasm_set_by_index_ref(
+ ) {
+ return {runtime_idx:39};//mono_wasm_set_by_index_ref
+ }
+
+ function _mono_wasm_set_entrypoint_breakpoint(
+ ) {
+ return {runtime_idx:17};//mono_wasm_set_entrypoint_breakpoint
+ }
+
+ function _mono_wasm_set_object_property_ref(
+ ) {
+ return {runtime_idx:37};//mono_wasm_set_object_property_ref
+ }
+
+ function _mono_wasm_starts_with(
+ ) {
+ return {runtime_idx:28};//mono_wasm_starts_with
+ }
+
+ function _mono_wasm_trace_logger(
+ ) {
+ return {runtime_idx:16};//mono_wasm_trace_logger
+ }
+
+ function _mono_wasm_typed_array_from_ref(
+ ) {
+ return {runtime_idx:43};//mono_wasm_typed_array_from_ref
+ }
+
+ function _mono_wasm_typed_array_to_array_ref(
+ ) {
+ return {runtime_idx:42};//mono_wasm_typed_array_to_array_ref
+ }
+
+ function _schedule_background_exec(
+ ) {
+ return {runtime_idx:6};//schedule_background_exec
+ }
+
+
+ function __arraySum(array, index) {
+ var sum = 0;
+ for (var i = 0; i <= index; sum += array[i++]) {
+ // no-op
+ }
+ 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];
+ function __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()) {
+ // we spill over to next month
+ 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 {
+ // we stay in current month
+ newDate.setDate(newDate.getDate()+days);
+ return newDate;
+ }
+ }
+
+ return newDate;
+ }
+
+
+
+
+ function writeArrayToMemory(array, buffer) {
+ assert(array.length >= 0, 'writeArrayToMemory array must have a length (should be an array or typed array)')
+ HEAP8.set(array, buffer);
+ }
+ function _strftime(s, maxsize, format, tm) {
+ // size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict timeptr);
+ // http://pubs.opengroup.org/onlinepubs/009695399/functions/strftime.html
+
+ var tm_zone = HEAP32[(((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);
+
+ // expand format
+ var EXPANSION_RULES_1 = {
+ '%c': '%a %b %d %H:%M:%S %Y', // Replaced by the locale's appropriate date and time representation - e.g., Mon Aug 3 14:02:01 2013
+ '%D': '%m/%d/%y', // Equivalent to %m / %d / %y
+ '%F': '%Y-%m-%d', // Equivalent to %Y - %m - %d
+ '%h': '%b', // Equivalent to %b
+ '%r': '%I:%M:%S %p', // Replaced by the time in a.m. and p.m. notation
+ '%R': '%H:%M', // Replaced by the time in 24-hour notation
+ '%T': '%H:%M:%S', // Replaced by the time
+ '%x': '%m/%d/%y', // Replaced by the locale's appropriate date representation
+ '%X': '%H:%M:%S', // Replaced by the locale's appropriate time representation
+ // Modified Conversion Specifiers
+ '%Ec': '%c', // Replaced by the locale's alternative appropriate date and time representation.
+ '%EC': '%C', // Replaced by the name of the base year (period) in the locale's alternative representation.
+ '%Ex': '%m/%d/%y', // Replaced by the locale's alternative date representation.
+ '%EX': '%H:%M:%S', // Replaced by the locale's alternative time representation.
+ '%Ey': '%y', // Replaced by the offset from %EC (year only) in the locale's alternative representation.
+ '%EY': '%Y', // Replaced by the full alternative year representation.
+ '%Od': '%d', // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading zeros if there is any alternative symbol for zero; otherwise, with leading characters.
+ '%Oe': '%e', // Replaced by the day of the month, using the locale's alternative numeric symbols, filled as needed with leading characters.
+ '%OH': '%H', // Replaced by the hour (24-hour clock) using the locale's alternative numeric symbols.
+ '%OI': '%I', // Replaced by the hour (12-hour clock) using the locale's alternative numeric symbols.
+ '%Om': '%m', // Replaced by the month using the locale's alternative numeric symbols.
+ '%OM': '%M', // Replaced by the minutes using the locale's alternative numeric symbols.
+ '%OS': '%S', // Replaced by the seconds using the locale's alternative numeric symbols.
+ '%Ou': '%u', // Replaced by the weekday as a number in the locale's alternative representation (Monday=1).
+ '%OU': '%U', // Replaced by the week number of the year (Sunday as the first day of the week, rules corresponding to %U ) using the locale's alternative numeric symbols.
+ '%OV': '%V', // Replaced by the week number of the year (Monday as the first day of the week, rules corresponding to %V ) using the locale's alternative numeric symbols.
+ '%Ow': '%w', // Replaced by the number of the weekday (Sunday=0) using the locale's alternative numeric symbols.
+ '%OW': '%W', // Replaced by the week number of the year (Monday as the first day of the week) using the locale's alternative numeric symbols.
+ '%Oy': '%y', // Replaced by the year (offset from %C ) using the locale's alternative numeric symbols.
+ };
+ 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.length < digits) {
+ str = character[0]+str;
+ }
+ return str;
+ }
+
+ function leadingNulls(value, digits) {
+ return leadingSomething(value, digits, '0');
+ }
+
+ function compareByDay(date1, date2) {
+ function sgn(value) {
+ return value < 0 ? -1 : (value > 0 ? 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: // Sunday
+ return new Date(janFourth.getFullYear()-1, 11, 29);
+ case 1: // Monday
+ return janFourth;
+ case 2: // Tuesday
+ return new Date(janFourth.getFullYear(), 0, 3);
+ case 3: // Wednesday
+ return new Date(janFourth.getFullYear(), 0, 2);
+ case 4: // Thursday
+ return new Date(janFourth.getFullYear(), 0, 1);
+ case 5: // Friday
+ return new Date(janFourth.getFullYear()-1, 11, 31);
+ case 6: // Saturday
+ 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) {
+ // this date is after the start of the first week of this year
+ if (compareByDay(firstWeekStartNextYear, thisDate) <= 0) {
+ return thisDate.getFullYear()+1;
+ }
+ return thisDate.getFullYear();
+ }
+ return thisDate.getFullYear()-1;
+ }
+
+ var EXPANSION_RULES_2 = {
+ '%a': function(date) {
+ return WEEKDAYS[date.tm_wday].substring(0,3);
+ },
+ '%A': function(date) {
+ return WEEKDAYS[date.tm_wday];
+ },
+ '%b': function(date) {
+ return MONTHS[date.tm_mon].substring(0,3);
+ },
+ '%B': function(date) {
+ return MONTHS[date.tm_mon];
+ },
+ '%C': function(date) {
+ var year = date.tm_year+1900;
+ return leadingNulls((year/100)|0,2);
+ },
+ '%d': function(date) {
+ return leadingNulls(date.tm_mday, 2);
+ },
+ '%e': function(date) {
+ return leadingSomething(date.tm_mday, 2, ' ');
+ },
+ '%g': function(date) {
+ // %g, %G, and %V give values according to the ISO 8601:2000 standard week-based year.
+ // In this system, weeks begin on a Monday and week 1 of the year is the week that includes
+ // January 4th, which is also the week that includes the first Thursday of the year, and
+ // is also the first week that contains at least four days in the year.
+ // If the first Monday of January is the 2nd, 3rd, or 4th, the preceding days are part of
+ // the last week of the preceding year; thus, for Saturday 2nd January 1999,
+ // %G is replaced by 1998 and %V is replaced by 53. If December 29th, 30th,
+ // or 31st is a Monday, it and any following days are part of week 1 of the following year.
+ // Thus, for Tuesday 30th December 1997, %G is replaced by 1998 and %V is replaced by 01.
+
+ return getWeekBasedYear(date).toString().substring(2);
+ },
+ '%G': function(date) {
+ return getWeekBasedYear(date);
+ },
+ '%H': function(date) {
+ return leadingNulls(date.tm_hour, 2);
+ },
+ '%I': function(date) {
+ var twelveHour = date.tm_hour;
+ if (twelveHour == 0) twelveHour = 12;
+ else if (twelveHour > 12) twelveHour -= 12;
+ return leadingNulls(twelveHour, 2);
+ },
+ '%j': function(date) {
+ // Day of the year (001-366)
+ return leadingNulls(date.tm_mday+__arraySum(__isLeapYear(date.tm_year+1900) ? __MONTH_DAYS_LEAP : __MONTH_DAYS_REGULAR, date.tm_mon-1), 3);
+ },
+ '%m': function(date) {
+ return leadingNulls(date.tm_mon+1, 2);
+ },
+ '%M': function(date) {
+ return leadingNulls(date.tm_min, 2);
+ },
+ '%n': function() {
+ return '\n';
+ },
+ '%p': function(date) {
+ if (date.tm_hour >= 0 && date.tm_hour < 12) {
+ return 'AM';
+ }
+ return 'PM';
+ },
+ '%S': function(date) {
+ return leadingNulls(date.tm_sec, 2);
+ },
+ '%t': function() {
+ return '\t';
+ },
+ '%u': function(date) {
+ return date.tm_wday || 7;
+ },
+ '%U': function(date) {
+ var days = date.tm_yday + 7 - date.tm_wday;
+ return leadingNulls(Math.floor(days / 7), 2);
+ },
+ '%V': function(date) {
+ // Replaced by the week number of the year (Monday as the first day of the week)
+ // as a decimal number [01,53]. If the week containing 1 January has four
+ // or more days in the new year, then it is considered week 1.
+ // Otherwise, it is the last week of the previous year, and the next week is week 1.
+ // Both January 4th and the first Thursday of January are always in week 1. [ tm_year, tm_wday, tm_yday]
+ var val = Math.floor((date.tm_yday + 7 - (date.tm_wday + 6) % 7 ) / 7);
+ // If 1 Jan is just 1-3 days past Monday, the previous week
+ // is also in this year.
+ if ((date.tm_wday + 371 - date.tm_yday - 2) % 7 <= 2) {
+ val++;
+ }
+ if (!val) {
+ val = 52;
+ // If 31 December of prev year a Thursday, or Friday of a
+ // leap year, then the prev year has 53 weeks.
+ 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) {
+ // If 1 January is not a Thursday, and not a Wednesday of a
+ // leap year, then this year has only 52 weeks.
+ 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': function(date) {
+ return date.tm_wday;
+ },
+ '%W': function(date) {
+ var days = date.tm_yday + 7 - ((date.tm_wday + 6) % 7);
+ return leadingNulls(Math.floor(days / 7), 2);
+ },
+ '%y': function(date) {
+ // Replaced by the last two digits of the year as a decimal number [00,99]. [ tm_year]
+ return (date.tm_year+1900).toString().substring(2);
+ },
+ '%Y': function(date) {
+ // Replaced by the year as a decimal number (for example, 1997). [ tm_year]
+ return date.tm_year+1900;
+ },
+ '%z': function(date) {
+ // Replaced by the offset from UTC in the ISO 8601:2000 standard format ( +hhmm or -hhmm ).
+ // For example, "-0430" means 4 hours 30 minutes behind UTC (west of Greenwich).
+ var off = date.tm_gmtoff;
+ var ahead = off >= 0;
+ off = Math.abs(off) / 60;
+ // convert from minutes into hhmm format (which means 60 minutes = 100 units)
+ off = (off / 60)*100 + (off % 60);
+ return (ahead ? '+' : '-') + String("0000" + off).slice(-4);
+ },
+ '%Z': function(date) {
+ return date.tm_zone;
+ },
+ '%%': function() {
+ return '%';
+ }
+ };
+
+ // Replace %% with a pair of NULLs (which cannot occur in a C string), then
+ // re-inject them after processing.
+ 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;
+ }
+
+ function _strftime_l(s, maxsize, format, tm, loc) {
+ return _strftime(s, maxsize, format, tm); // no locale support yet
+ }
+
+
+
+
+ function getCFunc(ident) {
+ var func = Module['_' + ident]; // closure exported function
+ assert(func, 'Cannot call unknown function ' + ident + ', make sure it is exported');
+ return func;
+ }
+
+
+ /**
+ * @param {string|null=} returnType
+ * @param {Array=} argTypes
+ * @param {Arguments|Array=} args
+ * @param {Object=} opts
+ */
+ function ccall(ident, returnType, argTypes, args, opts) {
+ // For fast lookup of conversion functions
+ var toC = {
+ 'string': (str) => {
+ var ret = 0;
+ if (str !== null && str !== undefined && str !== 0) { // null string
+ // at most 4 bytes per UTF-8 code point, +1 for the trailing '\0'
+ var len = (str.length << 2) + 1;
+ ret = stackAlloc(len);
+ stringToUTF8(str, ret, len);
+ }
+ 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;
+ assert(returnType !== 'array', 'Return type should not be "array".');
+ if (args) {
+ for (var i = 0; i < args.length; i++) {
+ var converter = toC[argTypes[i]];
+ if (converter) {
+ if (stack === 0) stack = stackSave();
+ cArgs[i] = converter(args[i]);
+ } else {
+ cArgs[i] = args[i];
+ }
+ }
+ }
+ var ret = func.apply(null, cArgs);
+ function onDone(ret) {
+ if (stack !== 0) stackRestore(stack);
+ return convertReturnValue(ret);
+ }
+
+ ret = onDone(ret);
+ return ret;
+ }
+
+
+
+ /**
+ * @param {string=} returnType
+ * @param {Array=} argTypes
+ * @param {Object=} opts
+ */
+ function cwrap(ident, returnType, argTypes, opts) {
+ return function() {
+ return ccall(ident, returnType, argTypes, arguments, opts);
+ }
+ }
+
+
+
+ function uleb128Encode(n, target) {
+ assert(n < 16384);
+ if (n < 128) {
+ target.push(n);
+ } else {
+ target.push((n % 128) | 128, n >> 7);
+ }
+ }
+
+ function sigToWasmTypes(sig) {
+ var typeNames = {
+ 'i': 'i32',
+ // i64 values will be split into two i32s.
+ 'j': 'i32',
+ 'f': 'f32',
+ 'd': 'f64',
+ 'p': 'i32',
+ };
+ var type = {
+ parameters: [],
+ results: sig[0] == 'v' ? [] : [typeNames[sig[0]]]
+ };
+ for (var i = 1; i < sig.length; ++i) {
+ assert(sig[i] in typeNames, 'invalid signature char: ' + sig[i]);
+ type.parameters.push(typeNames[sig[i]]);
+ if (sig[i] === 'j') {
+ type.parameters.push('i32');
+ }
+ }
+ return type;
+ }
+
+ function generateFuncType(sig, target){
+ var sigRet = sig.slice(0, 1);
+ var sigParam = sig.slice(1);
+ var typeCodes = {
+ 'i': 0x7f, // i32
+ 'p': 0x7f, // i32
+ 'j': 0x7e, // i64
+ 'f': 0x7d, // f32
+ 'd': 0x7c, // f64
+ };
+
+ // Parameters, length + signatures
+ target.push(0x60 /* form: func */);
+ uleb128Encode(sigParam.length, target);
+ for (var i = 0; i < sigParam.length; ++i) {
+ assert(sigParam[i] in typeCodes, 'invalid signature char: ' + sigParam[i]);
+ target.push(typeCodes[sigParam[i]]);
+ }
+
+ // Return values, length + signatures
+ // With no multi-return in MVP, either 0 (void) or 1 (anything else)
+ if (sigRet == 'v') {
+ target.push(0x00);
+ } else {
+ target.push(0x01, typeCodes[sigRet]);
+ }
+ }
+ function convertJsFunctionToWasm(func, sig) {
+
+ // If the type reflection proposal is available, use the new
+ // "WebAssembly.Function" constructor.
+ // Otherwise, construct a minimal wasm module importing the JS function and
+ // re-exporting it.
+ if (typeof WebAssembly.Function == "function") {
+ return new WebAssembly.Function(sigToWasmTypes(sig), func);
+ }
+
+ // The module is static, with the exception of the type section, which is
+ // generated based on the signature passed in.
+ var typeSectionBody = [
+ 0x01, // count: 1
+ ];
+ generateFuncType(sig, typeSectionBody);
+
+ // Rest of the module is static
+ var bytes = [
+ 0x00, 0x61, 0x73, 0x6d, // magic ("\0asm")
+ 0x01, 0x00, 0x00, 0x00, // version: 1
+ 0x01, // Type section code
+ ];
+ // Write the overall length of the type section followed by the body
+ uleb128Encode(typeSectionBody.length, bytes);
+ bytes.push.apply(bytes, typeSectionBody);
+
+ // The rest of the module is static
+ bytes.push(
+ 0x02, 0x07, // import section
+ // (import "e" "f" (func 0 (type 0)))
+ 0x01, 0x01, 0x65, 0x01, 0x66, 0x00, 0x00,
+ 0x07, 0x05, // export section
+ // (export "f" (func 0 (type 0)))
+ 0x01, 0x01, 0x66, 0x00, 0x00,
+ );
+
+ // We can compile this wasm module synchronously because it is very small.
+ // This accepts an import (at "e.f"), that it reroutes to an export (at "f")
+ 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 = [];
+
+ function getWasmTableEntry(funcPtr) {
+ var func = wasmTableMirror[funcPtr];
+ if (!func) {
+ if (funcPtr >= wasmTableMirror.length) wasmTableMirror.length = funcPtr + 1;
+ wasmTableMirror[funcPtr] = func = wasmTable.get(funcPtr);
+ }
+ assert(wasmTable.get(funcPtr) == func, "JavaScript-side Wasm function table mirror is out of date!");
+ return func;
+ }
+
+ function updateTableMap(offset, count) {
+ if (functionsInTableMap) {
+ for (var i = offset; i < offset + count; i++) {
+ var item = getWasmTableEntry(i);
+ // Ignore null values.
+ if (item) {
+ functionsInTableMap.set(item, i);
+ }
+ }
+ }
+ }
+
+ var functionsInTableMap = undefined;
+ function getFunctionAddress(func) {
+ // First, create the map if this is the first use.
+ if (!functionsInTableMap) {
+ functionsInTableMap = new WeakMap();
+ updateTableMap(0, wasmTable.length);
+ }
+ return functionsInTableMap.get(func) || 0;
+ }
+
+
+ var freeTableIndexes = [];
+ function getEmptyTableSlot() {
+ // Reuse a free index if there is one, otherwise grow.
+ if (freeTableIndexes.length) {
+ return freeTableIndexes.pop();
+ }
+ // Grow the table
+ 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;
+ }
+
+
+ function setWasmTableEntry(idx, func) {
+ wasmTable.set(idx, func);
+ // With ABORT_ON_WASM_EXCEPTIONS wasmTable.get is overriden to return wrapped
+ // functions so we need to call it here to retrieve the potential wrapper correctly
+ // instead of just storing 'func' directly into wasmTableMirror
+ wasmTableMirror[idx] = wasmTable.get(idx);
+ }
+ /** @param {string=} sig */
+ function addFunction(func, sig) {
+ assert(typeof func != 'undefined');
+ // Check if the function is already in the table, to ensure each function
+ // gets a unique index.
+ var rtn = getFunctionAddress(func);
+ if (rtn) {
+ return rtn;
+ }
+
+ // It's not in the table, add it now.
+
+ var ret = getEmptyTableSlot();
+
+ // Set the new value.
+ try {
+ // Attempting to call this with JS function will cause of table.set() to fail
+ setWasmTableEntry(ret, func);
+ } catch (err) {
+ if (!(err instanceof TypeError)) {
+ throw err;
+ }
+ assert(typeof sig != 'undefined', 'Missing signature argument to addFunction: ' + func);
+ var wrapped = convertJsFunctionToWasm(func, sig);
+ setWasmTableEntry(ret, wrapped);
+ }
+
+ functionsInTableMap.set(func, ret);
+
+ return ret;
+ }
+
+ function handleException(e) {
+ // Certain exception types we do not treat as errors since they are used for
+ // internal control flow.
+ // 1. ExitStatus, which is thrown by exit()
+ // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others
+ // that wish to return to JS event loop.
+ if (e instanceof ExitStatus || e == 'unwind') {
+ return EXITSTATUS;
+ }
+ checkStackCookie();
+ if (e instanceof WebAssembly.RuntimeError) {
+ if (_emscripten_stack_get_current() <= 0) {
+ err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to ' + 5242880 + ')');
+ }
+ }
+ quit_(1, e);
+ }
+
+
+ function maybeExit() {
+ if (!keepRuntimeAlive()) {
+ try {
+ _exit(EXITSTATUS);
+ } catch (e) {
+ handleException(e);
+ }
+ }
+ }
+ function callUserCallback(func) {
+ if (ABORT) {
+ err('user callback triggered after runtime exited or application aborted. Ignoring.');
+ return;
+ }
+ try {
+ func();
+ maybeExit();
+ } catch (e) {
+ handleException(e);
+ }
+ }
+ /** @param {number=} timeout */
+ function safeSetTimeout(func, timeout) {
+
+ return setTimeout(function() {
+
+ callUserCallback(func);
+ }, timeout);
+ }
+
+ function runtimeKeepalivePush() {
+ runtimeKeepaliveCounter += 1;
+ }
+
+ function runtimeKeepalivePop() {
+ assert(runtimeKeepaliveCounter > 0);
+ runtimeKeepaliveCounter -= 1;
+ }
+
+
+ var FSNode = /** @constructor */ function(parent, name, mode, rdev) {
+ if (!parent) {
+ parent = this; // root node sets parent to itself
+ }
+ 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;
+ };
+ var readMode = 292/*292*/ | 73/*73*/;
+ var writeMode = 146/*146*/;
+ Object.defineProperties(FSNode.prototype, {
+ read: {
+ get: /** @this{FSNode} */function() {
+ return (this.mode & readMode) === readMode;
+ },
+ set: /** @this{FSNode} */function(val) {
+ val ? this.mode |= readMode : this.mode &= ~readMode;
+ }
+ },
+ write: {
+ get: /** @this{FSNode} */function() {
+ return (this.mode & writeMode) === writeMode;
+ },
+ set: /** @this{FSNode} */function(val) {
+ val ? this.mode |= writeMode : this.mode &= ~writeMode;
+ }
+ },
+ isFolder: {
+ get: /** @this{FSNode} */function() {
+ return FS.isDir(this.mode);
+ }
+ },
+ isDevice: {
+ get: /** @this{FSNode} */function() {
+ return FS.isChrdev(this.mode);
+ }
+ }
+ });
+ FS.FSNode = FSNode;
+ 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;;
+ERRNO_CODES = {
+ 'EPERM': 63,
+ 'ENOENT': 44,
+ 'ESRCH': 71,
+ 'EINTR': 27,
+ 'EIO': 29,
+ 'ENXIO': 60,
+ 'E2BIG': 1,
+ 'ENOEXEC': 45,
+ 'EBADF': 8,
+ 'ECHILD': 12,
+ 'EAGAIN': 6,
+ 'EWOULDBLOCK': 6,
+ 'ENOMEM': 48,
+ 'EACCES': 2,
+ 'EFAULT': 21,
+ 'ENOTBLK': 105,
+ 'EBUSY': 10,
+ 'EEXIST': 20,
+ 'EXDEV': 75,
+ 'ENODEV': 43,
+ 'ENOTDIR': 54,
+ 'EISDIR': 31,
+ 'EINVAL': 28,
+ 'ENFILE': 41,
+ 'EMFILE': 33,
+ 'ENOTTY': 59,
+ 'ETXTBSY': 74,
+ 'EFBIG': 22,
+ 'ENOSPC': 51,
+ 'ESPIPE': 70,
+ 'EROFS': 69,
+ 'EMLINK': 34,
+ 'EPIPE': 64,
+ 'EDOM': 18,
+ 'ERANGE': 68,
+ 'ENOMSG': 49,
+ 'EIDRM': 24,
+ 'ECHRNG': 106,
+ 'EL2NSYNC': 156,
+ 'EL3HLT': 107,
+ 'EL3RST': 108,
+ 'ELNRNG': 109,
+ 'EUNATCH': 110,
+ 'ENOCSI': 111,
+ 'EL2HLT': 112,
+ 'EDEADLK': 16,
+ 'ENOLCK': 46,
+ 'EBADE': 113,
+ 'EBADR': 114,
+ 'EXFULL': 115,
+ 'ENOANO': 104,
+ 'EBADRQC': 103,
+ 'EBADSLT': 102,
+ 'EDEADLOCK': 16,
+ 'EBFONT': 101,
+ 'ENOSTR': 100,
+ 'ENODATA': 116,
+ 'ETIME': 117,
+ 'ENOSR': 118,
+ 'ENONET': 119,
+ 'ENOPKG': 120,
+ 'EREMOTE': 121,
+ 'ENOLINK': 47,
+ 'EADV': 122,
+ 'ESRMNT': 123,
+ 'ECOMM': 124,
+ 'EPROTO': 65,
+ 'EMULTIHOP': 36,
+ 'EDOTDOT': 125,
+ 'EBADMSG': 9,
+ 'ENOTUNIQ': 126,
+ 'EBADFD': 127,
+ 'EREMCHG': 128,
+ 'ELIBACC': 129,
+ 'ELIBBAD': 130,
+ 'ELIBSCN': 131,
+ 'ELIBMAX': 132,
+ 'ELIBEXEC': 133,
+ 'ENOSYS': 52,
+ 'ENOTEMPTY': 55,
+ 'ENAMETOOLONG': 37,
+ 'ELOOP': 32,
+ 'EOPNOTSUPP': 138,
+ 'EPFNOSUPPORT': 139,
+ 'ECONNRESET': 15,
+ 'ENOBUFS': 42,
+ 'EAFNOSUPPORT': 5,
+ 'EPROTOTYPE': 67,
+ 'ENOTSOCK': 57,
+ 'ENOPROTOOPT': 50,
+ 'ESHUTDOWN': 140,
+ 'ECONNREFUSED': 14,
+ 'EADDRINUSE': 3,
+ 'ECONNABORTED': 13,
+ 'ENETUNREACH': 40,
+ 'ENETDOWN': 38,
+ 'ETIMEDOUT': 73,
+ 'EHOSTDOWN': 142,
+ 'EHOSTUNREACH': 23,
+ 'EINPROGRESS': 26,
+ 'EALREADY': 7,
+ 'EDESTADDRREQ': 17,
+ 'EMSGSIZE': 35,
+ 'EPROTONOSUPPORT': 66,
+ 'ESOCKTNOSUPPORT': 137,
+ 'EADDRNOTAVAIL': 4,
+ 'ENETRESET': 39,
+ 'EISCONN': 30,
+ 'ENOTCONN': 53,
+ 'ETOOMANYREFS': 141,
+ 'EUSERS': 136,
+ 'EDQUOT': 19,
+ 'ESTALE': 72,
+ 'ENOTSUP': 138,
+ 'ENOMEDIUM': 148,
+ 'EILSEQ': 25,
+ 'EOVERFLOW': 61,
+ 'ECANCELED': 11,
+ 'ENOTRECOVERABLE': 56,
+ 'EOWNERDEAD': 62,
+ 'ESTRPIPE': 135,
+ };;
+var GLctx;;
+for (var i = 0; i < 32; ++i) tempFixedLengthArray.push(new Array(i));;
+var miniTempWebGLFloatBuffersStorage = new Float32Array(288);
+ for (/**@suppress{duplicate}*/var i = 0; i < 288; ++i) {
+ miniTempWebGLFloatBuffers[i] = miniTempWebGLFloatBuffersStorage.subarray(0, i+1);
+ }
+ ;
+var __miniTempWebGLIntBuffersStorage = new Int32Array(288);
+ for (/**@suppress{duplicate}*/var i = 0; i < 288; ++i) {
+ __miniTempWebGLIntBuffers[i] = __miniTempWebGLIntBuffersStorage.subarray(0, i+1);
+ }
+ ;
+DOTNET.setup({ linkerDisableLegacyJsInterop: false,linkerWasmEnableSIMD: true,linkerWasmEnableEH: true,linkerEnableAotProfiler: false, linkerEnableBrowserProfiler: false, gitHash: "81cabf2857a01351e5ab578947c7403a5b128ad1", });;
+// include: base64Utils.js
+// Copied from https://github.com/strophe/strophejs/blob/e06d027/src/polyfills.js#L149
+
+// This code was written by Tyler Akins and has been placed in the
+// public domain. It would be nice if you left this header intact.
+// Base64 code from Tyler Akins -- http://rumkin.com
+
+/**
+ * Decodes a base64 string.
+ * @param {string} input The string to decode.
+ */
+var decodeBase64 = typeof atob == 'function' ? atob : function (input) {
+ var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
+
+ var output = '';
+ var chr1, chr2, chr3;
+ var enc1, enc2, enc3, enc4;
+ var i = 0;
+ // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
+ 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 (i < input.length);
+ return output;
+};
+
+// Converts a string of base64 into a byte array.
+// Throws error on invalid input.
+function intArrayFromBase64(s) {
+ if (typeof ENVIRONMENT_IS_NODE == 'boolean' && ENVIRONMENT_IS_NODE) {
+ var buf = Buffer.from(s, 'base64');
+ return new Uint8Array(buf['buffer'], buf['byteOffset'], buf['byteLength']);
+ }
+
+ try {
+ var decoded = decodeBase64(s);
+ var bytes = new Uint8Array(decoded.length);
+ for (var i = 0 ; i < decoded.length ; ++i) {
+ bytes[i] = decoded.charCodeAt(i);
+ }
+ return bytes;
+ } catch (_) {
+ throw new Error('Converting base64 string to bytes failed.');
+ }
+}
+
+// If filename is a base64 data URI, parses and returns data (Buffer on node,
+// Uint8Array otherwise). If filename is not a base64 data URI, returns undefined.
+function tryParseAsDataURI(filename) {
+ if (!isDataURI(filename)) {
+ return;
+ }
+
+ return intArrayFromBase64(filename.slice(dataURIPrefix.length));
+}
+
+
+// end include: base64Utils.js
+function checkIncomingModuleAPI() {
+ ignoredModuleProp('fetchSettings');
+}
+var wasmImports = {
+ "__assert_fail": ___assert_fail,
+ "__syscall_chdir": ___syscall_chdir,
+ "__syscall_chmod": ___syscall_chmod,
+ "__syscall_connect": ___syscall_connect,
+ "__syscall_faccessat": ___syscall_faccessat,
+ "__syscall_fadvise64": ___syscall_fadvise64,
+ "__syscall_fchmod": ___syscall_fchmod,
+ "__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_mkdirat": ___syscall_mkdirat,
+ "__syscall_newfstatat": ___syscall_newfstatat,
+ "__syscall_openat": ___syscall_openat,
+ "__syscall_readlinkat": ___syscall_readlinkat,
+ "__syscall_recvfrom": ___syscall_recvfrom,
+ "__syscall_renameat": ___syscall_renameat,
+ "__syscall_rmdir": ___syscall_rmdir,
+ "__syscall_sendto": ___syscall_sendto,
+ "__syscall_socket": ___syscall_socket,
+ "__syscall_stat64": ___syscall_stat64,
+ "__syscall_symlink": ___syscall_symlink,
+ "__syscall_unlinkat": ___syscall_unlinkat,
+ "__syscall_utimensat": ___syscall_utimensat,
+ "__throw_exception_with_stack_trace": ___throw_exception_with_stack_trace,
+ "_emscripten_get_now_is_monotonic": __emscripten_get_now_is_monotonic,
+ "_gmtime_js": __gmtime_js,
+ "_localtime_js": __localtime_js,
+ "_mmap_js": __mmap_js,
+ "_msync_js": __msync_js,
+ "_munmap_js": __munmap_js,
+ "_tzset_js": __tzset_js,
+ "abort": _abort,
+ "dlopen": _dlopen,
+ "dotnet_browser_entropy": _dotnet_browser_entropy,
+ "emscripten_console_error": _emscripten_console_error,
+ "emscripten_date_now": _emscripten_date_now,
+ "emscripten_get_heap_max": _emscripten_get_heap_max,
+ "emscripten_get_now": _emscripten_get_now,
+ "emscripten_get_now_res": _emscripten_get_now_res,
+ "emscripten_glActiveTexture": _emscripten_glActiveTexture,
+ "emscripten_glAttachShader": _emscripten_glAttachShader,
+ "emscripten_glBeginQuery": _emscripten_glBeginQuery,
+ "emscripten_glBeginQueryEXT": _emscripten_glBeginQueryEXT,
+ "emscripten_glBeginTransformFeedback": _emscripten_glBeginTransformFeedback,
+ "emscripten_glBindAttribLocation": _emscripten_glBindAttribLocation,
+ "emscripten_glBindBuffer": _emscripten_glBindBuffer,
+ "emscripten_glBindBufferBase": _emscripten_glBindBufferBase,
+ "emscripten_glBindBufferRange": _emscripten_glBindBufferRange,
+ "emscripten_glBindFramebuffer": _emscripten_glBindFramebuffer,
+ "emscripten_glBindRenderbuffer": _emscripten_glBindRenderbuffer,
+ "emscripten_glBindSampler": _emscripten_glBindSampler,
+ "emscripten_glBindTexture": _emscripten_glBindTexture,
+ "emscripten_glBindTransformFeedback": _emscripten_glBindTransformFeedback,
+ "emscripten_glBindVertexArray": _emscripten_glBindVertexArray,
+ "emscripten_glBindVertexArrayOES": _emscripten_glBindVertexArrayOES,
+ "emscripten_glBlendColor": _emscripten_glBlendColor,
+ "emscripten_glBlendEquation": _emscripten_glBlendEquation,
+ "emscripten_glBlendEquationSeparate": _emscripten_glBlendEquationSeparate,
+ "emscripten_glBlendFunc": _emscripten_glBlendFunc,
+ "emscripten_glBlendFuncSeparate": _emscripten_glBlendFuncSeparate,
+ "emscripten_glBlitFramebuffer": _emscripten_glBlitFramebuffer,
+ "emscripten_glBufferData": _emscripten_glBufferData,
+ "emscripten_glBufferSubData": _emscripten_glBufferSubData,
+ "emscripten_glCheckFramebufferStatus": _emscripten_glCheckFramebufferStatus,
+ "emscripten_glClear": _emscripten_glClear,
+ "emscripten_glClearBufferfi": _emscripten_glClearBufferfi,
+ "emscripten_glClearBufferfv": _emscripten_glClearBufferfv,
+ "emscripten_glClearBufferiv": _emscripten_glClearBufferiv,
+ "emscripten_glClearBufferuiv": _emscripten_glClearBufferuiv,
+ "emscripten_glClearColor": _emscripten_glClearColor,
+ "emscripten_glClearDepthf": _emscripten_glClearDepthf,
+ "emscripten_glClearStencil": _emscripten_glClearStencil,
+ "emscripten_glClientWaitSync": _emscripten_glClientWaitSync,
+ "emscripten_glColorMask": _emscripten_glColorMask,
+ "emscripten_glCompileShader": _emscripten_glCompileShader,
+ "emscripten_glCompressedTexImage2D": _emscripten_glCompressedTexImage2D,
+ "emscripten_glCompressedTexImage3D": _emscripten_glCompressedTexImage3D,
+ "emscripten_glCompressedTexSubImage2D": _emscripten_glCompressedTexSubImage2D,
+ "emscripten_glCompressedTexSubImage3D": _emscripten_glCompressedTexSubImage3D,
+ "emscripten_glCopyBufferSubData": _emscripten_glCopyBufferSubData,
+ "emscripten_glCopyTexImage2D": _emscripten_glCopyTexImage2D,
+ "emscripten_glCopyTexSubImage2D": _emscripten_glCopyTexSubImage2D,
+ "emscripten_glCopyTexSubImage3D": _emscripten_glCopyTexSubImage3D,
+ "emscripten_glCreateProgram": _emscripten_glCreateProgram,
+ "emscripten_glCreateShader": _emscripten_glCreateShader,
+ "emscripten_glCullFace": _emscripten_glCullFace,
+ "emscripten_glDeleteBuffers": _emscripten_glDeleteBuffers,
+ "emscripten_glDeleteFramebuffers": _emscripten_glDeleteFramebuffers,
+ "emscripten_glDeleteProgram": _emscripten_glDeleteProgram,
+ "emscripten_glDeleteQueries": _emscripten_glDeleteQueries,
+ "emscripten_glDeleteQueriesEXT": _emscripten_glDeleteQueriesEXT,
+ "emscripten_glDeleteRenderbuffers": _emscripten_glDeleteRenderbuffers,
+ "emscripten_glDeleteSamplers": _emscripten_glDeleteSamplers,
+ "emscripten_glDeleteShader": _emscripten_glDeleteShader,
+ "emscripten_glDeleteSync": _emscripten_glDeleteSync,
+ "emscripten_glDeleteTextures": _emscripten_glDeleteTextures,
+ "emscripten_glDeleteTransformFeedbacks": _emscripten_glDeleteTransformFeedbacks,
+ "emscripten_glDeleteVertexArrays": _emscripten_glDeleteVertexArrays,
+ "emscripten_glDeleteVertexArraysOES": _emscripten_glDeleteVertexArraysOES,
+ "emscripten_glDepthFunc": _emscripten_glDepthFunc,
+ "emscripten_glDepthMask": _emscripten_glDepthMask,
+ "emscripten_glDepthRangef": _emscripten_glDepthRangef,
+ "emscripten_glDetachShader": _emscripten_glDetachShader,
+ "emscripten_glDisable": _emscripten_glDisable,
+ "emscripten_glDisableVertexAttribArray": _emscripten_glDisableVertexAttribArray,
+ "emscripten_glDrawArrays": _emscripten_glDrawArrays,
+ "emscripten_glDrawArraysInstanced": _emscripten_glDrawArraysInstanced,
+ "emscripten_glDrawArraysInstancedANGLE": _emscripten_glDrawArraysInstancedANGLE,
+ "emscripten_glDrawArraysInstancedARB": _emscripten_glDrawArraysInstancedARB,
+ "emscripten_glDrawArraysInstancedEXT": _emscripten_glDrawArraysInstancedEXT,
+ "emscripten_glDrawArraysInstancedNV": _emscripten_glDrawArraysInstancedNV,
+ "emscripten_glDrawBuffers": _emscripten_glDrawBuffers,
+ "emscripten_glDrawBuffersEXT": _emscripten_glDrawBuffersEXT,
+ "emscripten_glDrawBuffersWEBGL": _emscripten_glDrawBuffersWEBGL,
+ "emscripten_glDrawElements": _emscripten_glDrawElements,
+ "emscripten_glDrawElementsInstanced": _emscripten_glDrawElementsInstanced,
+ "emscripten_glDrawElementsInstancedANGLE": _emscripten_glDrawElementsInstancedANGLE,
+ "emscripten_glDrawElementsInstancedARB": _emscripten_glDrawElementsInstancedARB,
+ "emscripten_glDrawElementsInstancedEXT": _emscripten_glDrawElementsInstancedEXT,
+ "emscripten_glDrawElementsInstancedNV": _emscripten_glDrawElementsInstancedNV,
+ "emscripten_glDrawRangeElements": _emscripten_glDrawRangeElements,
+ "emscripten_glEnable": _emscripten_glEnable,
+ "emscripten_glEnableVertexAttribArray": _emscripten_glEnableVertexAttribArray,
+ "emscripten_glEndQuery": _emscripten_glEndQuery,
+ "emscripten_glEndQueryEXT": _emscripten_glEndQueryEXT,
+ "emscripten_glEndTransformFeedback": _emscripten_glEndTransformFeedback,
+ "emscripten_glFenceSync": _emscripten_glFenceSync,
+ "emscripten_glFinish": _emscripten_glFinish,
+ "emscripten_glFlush": _emscripten_glFlush,
+ "emscripten_glFramebufferRenderbuffer": _emscripten_glFramebufferRenderbuffer,
+ "emscripten_glFramebufferTexture2D": _emscripten_glFramebufferTexture2D,
+ "emscripten_glFramebufferTextureLayer": _emscripten_glFramebufferTextureLayer,
+ "emscripten_glFrontFace": _emscripten_glFrontFace,
+ "emscripten_glGenBuffers": _emscripten_glGenBuffers,
+ "emscripten_glGenFramebuffers": _emscripten_glGenFramebuffers,
+ "emscripten_glGenQueries": _emscripten_glGenQueries,
+ "emscripten_glGenQueriesEXT": _emscripten_glGenQueriesEXT,
+ "emscripten_glGenRenderbuffers": _emscripten_glGenRenderbuffers,
+ "emscripten_glGenSamplers": _emscripten_glGenSamplers,
+ "emscripten_glGenTextures": _emscripten_glGenTextures,
+ "emscripten_glGenTransformFeedbacks": _emscripten_glGenTransformFeedbacks,
+ "emscripten_glGenVertexArrays": _emscripten_glGenVertexArrays,
+ "emscripten_glGenVertexArraysOES": _emscripten_glGenVertexArraysOES,
+ "emscripten_glGenerateMipmap": _emscripten_glGenerateMipmap,
+ "emscripten_glGetActiveAttrib": _emscripten_glGetActiveAttrib,
+ "emscripten_glGetActiveUniform": _emscripten_glGetActiveUniform,
+ "emscripten_glGetActiveUniformBlockName": _emscripten_glGetActiveUniformBlockName,
+ "emscripten_glGetActiveUniformBlockiv": _emscripten_glGetActiveUniformBlockiv,
+ "emscripten_glGetActiveUniformsiv": _emscripten_glGetActiveUniformsiv,
+ "emscripten_glGetAttachedShaders": _emscripten_glGetAttachedShaders,
+ "emscripten_glGetAttribLocation": _emscripten_glGetAttribLocation,
+ "emscripten_glGetBooleanv": _emscripten_glGetBooleanv,
+ "emscripten_glGetBufferParameteri64v": _emscripten_glGetBufferParameteri64v,
+ "emscripten_glGetBufferParameteriv": _emscripten_glGetBufferParameteriv,
+ "emscripten_glGetError": _emscripten_glGetError,
+ "emscripten_glGetFloatv": _emscripten_glGetFloatv,
+ "emscripten_glGetFragDataLocation": _emscripten_glGetFragDataLocation,
+ "emscripten_glGetFramebufferAttachmentParameteriv": _emscripten_glGetFramebufferAttachmentParameteriv,
+ "emscripten_glGetInteger64i_v": _emscripten_glGetInteger64i_v,
+ "emscripten_glGetInteger64v": _emscripten_glGetInteger64v,
+ "emscripten_glGetIntegeri_v": _emscripten_glGetIntegeri_v,
+ "emscripten_glGetIntegerv": _emscripten_glGetIntegerv,
+ "emscripten_glGetInternalformativ": _emscripten_glGetInternalformativ,
+ "emscripten_glGetProgramBinary": _emscripten_glGetProgramBinary,
+ "emscripten_glGetProgramInfoLog": _emscripten_glGetProgramInfoLog,
+ "emscripten_glGetProgramiv": _emscripten_glGetProgramiv,
+ "emscripten_glGetQueryObjecti64vEXT": _emscripten_glGetQueryObjecti64vEXT,
+ "emscripten_glGetQueryObjectivEXT": _emscripten_glGetQueryObjectivEXT,
+ "emscripten_glGetQueryObjectui64vEXT": _emscripten_glGetQueryObjectui64vEXT,
+ "emscripten_glGetQueryObjectuiv": _emscripten_glGetQueryObjectuiv,
+ "emscripten_glGetQueryObjectuivEXT": _emscripten_glGetQueryObjectuivEXT,
+ "emscripten_glGetQueryiv": _emscripten_glGetQueryiv,
+ "emscripten_glGetQueryivEXT": _emscripten_glGetQueryivEXT,
+ "emscripten_glGetRenderbufferParameteriv": _emscripten_glGetRenderbufferParameteriv,
+ "emscripten_glGetSamplerParameterfv": _emscripten_glGetSamplerParameterfv,
+ "emscripten_glGetSamplerParameteriv": _emscripten_glGetSamplerParameteriv,
+ "emscripten_glGetShaderInfoLog": _emscripten_glGetShaderInfoLog,
+ "emscripten_glGetShaderPrecisionFormat": _emscripten_glGetShaderPrecisionFormat,
+ "emscripten_glGetShaderSource": _emscripten_glGetShaderSource,
+ "emscripten_glGetShaderiv": _emscripten_glGetShaderiv,
+ "emscripten_glGetString": _emscripten_glGetString,
+ "emscripten_glGetStringi": _emscripten_glGetStringi,
+ "emscripten_glGetSynciv": _emscripten_glGetSynciv,
+ "emscripten_glGetTexParameterfv": _emscripten_glGetTexParameterfv,
+ "emscripten_glGetTexParameteriv": _emscripten_glGetTexParameteriv,
+ "emscripten_glGetTransformFeedbackVarying": _emscripten_glGetTransformFeedbackVarying,
+ "emscripten_glGetUniformBlockIndex": _emscripten_glGetUniformBlockIndex,
+ "emscripten_glGetUniformIndices": _emscripten_glGetUniformIndices,
+ "emscripten_glGetUniformLocation": _emscripten_glGetUniformLocation,
+ "emscripten_glGetUniformfv": _emscripten_glGetUniformfv,
+ "emscripten_glGetUniformiv": _emscripten_glGetUniformiv,
+ "emscripten_glGetUniformuiv": _emscripten_glGetUniformuiv,
+ "emscripten_glGetVertexAttribIiv": _emscripten_glGetVertexAttribIiv,
+ "emscripten_glGetVertexAttribIuiv": _emscripten_glGetVertexAttribIuiv,
+ "emscripten_glGetVertexAttribPointerv": _emscripten_glGetVertexAttribPointerv,
+ "emscripten_glGetVertexAttribfv": _emscripten_glGetVertexAttribfv,
+ "emscripten_glGetVertexAttribiv": _emscripten_glGetVertexAttribiv,
+ "emscripten_glHint": _emscripten_glHint,
+ "emscripten_glInvalidateFramebuffer": _emscripten_glInvalidateFramebuffer,
+ "emscripten_glInvalidateSubFramebuffer": _emscripten_glInvalidateSubFramebuffer,
+ "emscripten_glIsBuffer": _emscripten_glIsBuffer,
+ "emscripten_glIsEnabled": _emscripten_glIsEnabled,
+ "emscripten_glIsFramebuffer": _emscripten_glIsFramebuffer,
+ "emscripten_glIsProgram": _emscripten_glIsProgram,
+ "emscripten_glIsQuery": _emscripten_glIsQuery,
+ "emscripten_glIsQueryEXT": _emscripten_glIsQueryEXT,
+ "emscripten_glIsRenderbuffer": _emscripten_glIsRenderbuffer,
+ "emscripten_glIsSampler": _emscripten_glIsSampler,
+ "emscripten_glIsShader": _emscripten_glIsShader,
+ "emscripten_glIsSync": _emscripten_glIsSync,
+ "emscripten_glIsTexture": _emscripten_glIsTexture,
+ "emscripten_glIsTransformFeedback": _emscripten_glIsTransformFeedback,
+ "emscripten_glIsVertexArray": _emscripten_glIsVertexArray,
+ "emscripten_glIsVertexArrayOES": _emscripten_glIsVertexArrayOES,
+ "emscripten_glLineWidth": _emscripten_glLineWidth,
+ "emscripten_glLinkProgram": _emscripten_glLinkProgram,
+ "emscripten_glPauseTransformFeedback": _emscripten_glPauseTransformFeedback,
+ "emscripten_glPixelStorei": _emscripten_glPixelStorei,
+ "emscripten_glPolygonOffset": _emscripten_glPolygonOffset,
+ "emscripten_glProgramBinary": _emscripten_glProgramBinary,
+ "emscripten_glProgramParameteri": _emscripten_glProgramParameteri,
+ "emscripten_glQueryCounterEXT": _emscripten_glQueryCounterEXT,
+ "emscripten_glReadBuffer": _emscripten_glReadBuffer,
+ "emscripten_glReadPixels": _emscripten_glReadPixels,
+ "emscripten_glReleaseShaderCompiler": _emscripten_glReleaseShaderCompiler,
+ "emscripten_glRenderbufferStorage": _emscripten_glRenderbufferStorage,
+ "emscripten_glRenderbufferStorageMultisample": _emscripten_glRenderbufferStorageMultisample,
+ "emscripten_glResumeTransformFeedback": _emscripten_glResumeTransformFeedback,
+ "emscripten_glSampleCoverage": _emscripten_glSampleCoverage,
+ "emscripten_glSamplerParameterf": _emscripten_glSamplerParameterf,
+ "emscripten_glSamplerParameterfv": _emscripten_glSamplerParameterfv,
+ "emscripten_glSamplerParameteri": _emscripten_glSamplerParameteri,
+ "emscripten_glSamplerParameteriv": _emscripten_glSamplerParameteriv,
+ "emscripten_glScissor": _emscripten_glScissor,
+ "emscripten_glShaderBinary": _emscripten_glShaderBinary,
+ "emscripten_glShaderSource": _emscripten_glShaderSource,
+ "emscripten_glStencilFunc": _emscripten_glStencilFunc,
+ "emscripten_glStencilFuncSeparate": _emscripten_glStencilFuncSeparate,
+ "emscripten_glStencilMask": _emscripten_glStencilMask,
+ "emscripten_glStencilMaskSeparate": _emscripten_glStencilMaskSeparate,
+ "emscripten_glStencilOp": _emscripten_glStencilOp,
+ "emscripten_glStencilOpSeparate": _emscripten_glStencilOpSeparate,
+ "emscripten_glTexImage2D": _emscripten_glTexImage2D,
+ "emscripten_glTexImage3D": _emscripten_glTexImage3D,
+ "emscripten_glTexParameterf": _emscripten_glTexParameterf,
+ "emscripten_glTexParameterfv": _emscripten_glTexParameterfv,
+ "emscripten_glTexParameteri": _emscripten_glTexParameteri,
+ "emscripten_glTexParameteriv": _emscripten_glTexParameteriv,
+ "emscripten_glTexStorage2D": _emscripten_glTexStorage2D,
+ "emscripten_glTexStorage3D": _emscripten_glTexStorage3D,
+ "emscripten_glTexSubImage2D": _emscripten_glTexSubImage2D,
+ "emscripten_glTexSubImage3D": _emscripten_glTexSubImage3D,
+ "emscripten_glTransformFeedbackVaryings": _emscripten_glTransformFeedbackVaryings,
+ "emscripten_glUniform1f": _emscripten_glUniform1f,
+ "emscripten_glUniform1fv": _emscripten_glUniform1fv,
+ "emscripten_glUniform1i": _emscripten_glUniform1i,
+ "emscripten_glUniform1iv": _emscripten_glUniform1iv,
+ "emscripten_glUniform1ui": _emscripten_glUniform1ui,
+ "emscripten_glUniform1uiv": _emscripten_glUniform1uiv,
+ "emscripten_glUniform2f": _emscripten_glUniform2f,
+ "emscripten_glUniform2fv": _emscripten_glUniform2fv,
+ "emscripten_glUniform2i": _emscripten_glUniform2i,
+ "emscripten_glUniform2iv": _emscripten_glUniform2iv,
+ "emscripten_glUniform2ui": _emscripten_glUniform2ui,
+ "emscripten_glUniform2uiv": _emscripten_glUniform2uiv,
+ "emscripten_glUniform3f": _emscripten_glUniform3f,
+ "emscripten_glUniform3fv": _emscripten_glUniform3fv,
+ "emscripten_glUniform3i": _emscripten_glUniform3i,
+ "emscripten_glUniform3iv": _emscripten_glUniform3iv,
+ "emscripten_glUniform3ui": _emscripten_glUniform3ui,
+ "emscripten_glUniform3uiv": _emscripten_glUniform3uiv,
+ "emscripten_glUniform4f": _emscripten_glUniform4f,
+ "emscripten_glUniform4fv": _emscripten_glUniform4fv,
+ "emscripten_glUniform4i": _emscripten_glUniform4i,
+ "emscripten_glUniform4iv": _emscripten_glUniform4iv,
+ "emscripten_glUniform4ui": _emscripten_glUniform4ui,
+ "emscripten_glUniform4uiv": _emscripten_glUniform4uiv,
+ "emscripten_glUniformBlockBinding": _emscripten_glUniformBlockBinding,
+ "emscripten_glUniformMatrix2fv": _emscripten_glUniformMatrix2fv,
+ "emscripten_glUniformMatrix2x3fv": _emscripten_glUniformMatrix2x3fv,
+ "emscripten_glUniformMatrix2x4fv": _emscripten_glUniformMatrix2x4fv,
+ "emscripten_glUniformMatrix3fv": _emscripten_glUniformMatrix3fv,
+ "emscripten_glUniformMatrix3x2fv": _emscripten_glUniformMatrix3x2fv,
+ "emscripten_glUniformMatrix3x4fv": _emscripten_glUniformMatrix3x4fv,
+ "emscripten_glUniformMatrix4fv": _emscripten_glUniformMatrix4fv,
+ "emscripten_glUniformMatrix4x2fv": _emscripten_glUniformMatrix4x2fv,
+ "emscripten_glUniformMatrix4x3fv": _emscripten_glUniformMatrix4x3fv,
+ "emscripten_glUseProgram": _emscripten_glUseProgram,
+ "emscripten_glValidateProgram": _emscripten_glValidateProgram,
+ "emscripten_glVertexAttrib1f": _emscripten_glVertexAttrib1f,
+ "emscripten_glVertexAttrib1fv": _emscripten_glVertexAttrib1fv,
+ "emscripten_glVertexAttrib2f": _emscripten_glVertexAttrib2f,
+ "emscripten_glVertexAttrib2fv": _emscripten_glVertexAttrib2fv,
+ "emscripten_glVertexAttrib3f": _emscripten_glVertexAttrib3f,
+ "emscripten_glVertexAttrib3fv": _emscripten_glVertexAttrib3fv,
+ "emscripten_glVertexAttrib4f": _emscripten_glVertexAttrib4f,
+ "emscripten_glVertexAttrib4fv": _emscripten_glVertexAttrib4fv,
+ "emscripten_glVertexAttribDivisor": _emscripten_glVertexAttribDivisor,
+ "emscripten_glVertexAttribDivisorANGLE": _emscripten_glVertexAttribDivisorANGLE,
+ "emscripten_glVertexAttribDivisorARB": _emscripten_glVertexAttribDivisorARB,
+ "emscripten_glVertexAttribDivisorEXT": _emscripten_glVertexAttribDivisorEXT,
+ "emscripten_glVertexAttribDivisorNV": _emscripten_glVertexAttribDivisorNV,
+ "emscripten_glVertexAttribI4i": _emscripten_glVertexAttribI4i,
+ "emscripten_glVertexAttribI4iv": _emscripten_glVertexAttribI4iv,
+ "emscripten_glVertexAttribI4ui": _emscripten_glVertexAttribI4ui,
+ "emscripten_glVertexAttribI4uiv": _emscripten_glVertexAttribI4uiv,
+ "emscripten_glVertexAttribIPointer": _emscripten_glVertexAttribIPointer,
+ "emscripten_glVertexAttribPointer": _emscripten_glVertexAttribPointer,
+ "emscripten_glViewport": _emscripten_glViewport,
+ "emscripten_glWaitSync": _emscripten_glWaitSync,
+ "emscripten_memcpy_big": _emscripten_memcpy_big,
+ "emscripten_resize_heap": _emscripten_resize_heap,
+ "environ_get": _environ_get,
+ "environ_sizes_get": _environ_sizes_get,
+ "exit": _exit,
+ "fd_close": _fd_close,
+ "fd_fdstat_get": _fd_fdstat_get,
+ "fd_pread": _fd_pread,
+ "fd_pwrite": _fd_pwrite,
+ "fd_read": _fd_read,
+ "fd_seek": _fd_seek,
+ "fd_sync": _fd_sync,
+ "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_wasm_add_dbg_command_received": _mono_wasm_add_dbg_command_received,
+ "mono_wasm_asm_loaded": _mono_wasm_asm_loaded,
+ "mono_wasm_bind_cs_function": _mono_wasm_bind_cs_function,
+ "mono_wasm_bind_js_function": _mono_wasm_bind_js_function,
+ "mono_wasm_change_case": _mono_wasm_change_case,
+ "mono_wasm_change_case_invariant": _mono_wasm_change_case_invariant,
+ "mono_wasm_compare_string": _mono_wasm_compare_string,
+ "mono_wasm_create_cs_owned_object_ref": _mono_wasm_create_cs_owned_object_ref,
+ "mono_wasm_debugger_log": _mono_wasm_debugger_log,
+ "mono_wasm_ends_with": _mono_wasm_ends_with,
+ "mono_wasm_fire_debugger_agent_message_with_data": _mono_wasm_fire_debugger_agent_message_with_data,
+ "mono_wasm_get_by_index_ref": _mono_wasm_get_by_index_ref,
+ "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_global_object_ref": _mono_wasm_get_global_object_ref,
+ "mono_wasm_get_object_property_ref": _mono_wasm_get_object_property_ref,
+ "mono_wasm_index_of": _mono_wasm_index_of,
+ "mono_wasm_invoke_bound_function": _mono_wasm_invoke_bound_function,
+ "mono_wasm_invoke_import": _mono_wasm_invoke_import,
+ "mono_wasm_invoke_js_blazor": _mono_wasm_invoke_js_blazor,
+ "mono_wasm_invoke_js_with_args_ref": _mono_wasm_invoke_js_with_args_ref,
+ "mono_wasm_marshal_promise": _mono_wasm_marshal_promise,
+ "mono_wasm_release_cs_owned_object": _mono_wasm_release_cs_owned_object,
+ "mono_wasm_schedule_timer": _mono_wasm_schedule_timer,
+ "mono_wasm_set_by_index_ref": _mono_wasm_set_by_index_ref,
+ "mono_wasm_set_entrypoint_breakpoint": _mono_wasm_set_entrypoint_breakpoint,
+ "mono_wasm_set_object_property_ref": _mono_wasm_set_object_property_ref,
+ "mono_wasm_starts_with": _mono_wasm_starts_with,
+ "mono_wasm_trace_logger": _mono_wasm_trace_logger,
+ "mono_wasm_typed_array_from_ref": _mono_wasm_typed_array_from_ref,
+ "mono_wasm_typed_array_to_array_ref": _mono_wasm_typed_array_to_array_ref,
+ "schedule_background_exec": _schedule_background_exec,
+ "strftime": _strftime,
+ "strftime_l": _strftime_l
+};
+var asm = createWasm();
+/** @type {function(...*):?} */
+var ___wasm_call_ctors = createExportWrapper("__wasm_call_ctors");
+/** @type {function(...*):?} */
+var _free = Module["_free"] = createExportWrapper("free");
+/** @type {function(...*):?} */
+var _malloc = Module["_malloc"] = createExportWrapper("malloc");
+/** @type {function(...*):?} */
+var _fmaf = Module["_fmaf"] = createExportWrapper("fmaf");
+/** @type {function(...*):?} */
+var ___errno_location = createExportWrapper("__errno_location");
+/** @type {function(...*):?} */
+var _memset = Module["_memset"] = createExportWrapper("memset");
+/** @type {function(...*):?} */
+var _fflush = Module["_fflush"] = createExportWrapper("fflush");
+/** @type {function(...*):?} */
+var _log2f = Module["_log2f"] = createExportWrapper("log2f");
+/** @type {function(...*):?} */
+var _cosf = Module["_cosf"] = createExportWrapper("cosf");
+/** @type {function(...*):?} */
+var _sinf = Module["_sinf"] = createExportWrapper("sinf");
+/** @type {function(...*):?} */
+var _acosf = Module["_acosf"] = createExportWrapper("acosf");
+/** @type {function(...*):?} */
+var _powf = Module["_powf"] = createExportWrapper("powf");
+/** @type {function(...*):?} */
+var _acos = Module["_acos"] = createExportWrapper("acos");
+/** @type {function(...*):?} */
+var _cos = Module["_cos"] = createExportWrapper("cos");
+/** @type {function(...*):?} */
+var _atan2f = Module["_atan2f"] = createExportWrapper("atan2f");
+/** @type {function(...*):?} */
+var _tanf = Module["_tanf"] = createExportWrapper("tanf");
+/** @type {function(...*):?} */
+var _fmodf = Module["_fmodf"] = createExportWrapper("fmodf");
+/** @type {function(...*):?} */
+var _pow = Module["_pow"] = createExportWrapper("pow");
+/** @type {function(...*):?} */
+var _exp = Module["_exp"] = createExportWrapper("exp");
+/** @type {function(...*):?} */
+var _expf = Module["_expf"] = createExportWrapper("expf");
+/** @type {function(...*):?} */
+var _cbrtf = Module["_cbrtf"] = createExportWrapper("cbrtf");
+/** @type {function(...*):?} */
+var _log = Module["_log"] = createExportWrapper("log");
+/** @type {function(...*):?} */
+var _log10 = Module["_log10"] = createExportWrapper("log10");
+/** @type {function(...*):?} */
+var _atanf = Module["_atanf"] = createExportWrapper("atanf");
+/** @type {function(...*):?} */
+var _mono_wasm_register_root = Module["_mono_wasm_register_root"] = createExportWrapper("mono_wasm_register_root");
+/** @type {function(...*):?} */
+var _mono_wasm_deregister_root = Module["_mono_wasm_deregister_root"] = createExportWrapper("mono_wasm_deregister_root");
+/** @type {function(...*):?} */
+var _mono_wasm_add_assembly = Module["_mono_wasm_add_assembly"] = createExportWrapper("mono_wasm_add_assembly");
+/** @type {function(...*):?} */
+var _mono_wasm_add_satellite_assembly = Module["_mono_wasm_add_satellite_assembly"] = createExportWrapper("mono_wasm_add_satellite_assembly");
+/** @type {function(...*):?} */
+var _mono_wasm_setenv = Module["_mono_wasm_setenv"] = createExportWrapper("mono_wasm_setenv");
+/** @type {function(...*):?} */
+var _mono_wasm_getenv = Module["_mono_wasm_getenv"] = createExportWrapper("mono_wasm_getenv");
+/** @type {function(...*):?} */
+var _mono_wasm_load_runtime = Module["_mono_wasm_load_runtime"] = createExportWrapper("mono_wasm_load_runtime");
+/** @type {function(...*):?} */
+var _mono_wasm_assembly_load = Module["_mono_wasm_assembly_load"] = createExportWrapper("mono_wasm_assembly_load");
+/** @type {function(...*):?} */
+var _mono_wasm_get_corlib = Module["_mono_wasm_get_corlib"] = createExportWrapper("mono_wasm_get_corlib");
+/** @type {function(...*):?} */
+var _mono_wasm_assembly_find_class = Module["_mono_wasm_assembly_find_class"] = createExportWrapper("mono_wasm_assembly_find_class");
+/** @type {function(...*):?} */
+var _mono_wasm_runtime_run_module_cctor = Module["_mono_wasm_runtime_run_module_cctor"] = createExportWrapper("mono_wasm_runtime_run_module_cctor");
+/** @type {function(...*):?} */
+var _mono_wasm_assembly_find_method = Module["_mono_wasm_assembly_find_method"] = createExportWrapper("mono_wasm_assembly_find_method");
+/** @type {function(...*):?} */
+var _mono_wasm_invoke_method_ref = Module["_mono_wasm_invoke_method_ref"] = createExportWrapper("mono_wasm_invoke_method_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_invoke_method_bound = Module["_mono_wasm_invoke_method_bound"] = createExportWrapper("mono_wasm_invoke_method_bound");
+/** @type {function(...*):?} */
+var _mono_wasm_assembly_get_entry_point = Module["_mono_wasm_assembly_get_entry_point"] = createExportWrapper("mono_wasm_assembly_get_entry_point");
+/** @type {function(...*):?} */
+var _mono_wasm_string_from_utf16_ref = Module["_mono_wasm_string_from_utf16_ref"] = createExportWrapper("mono_wasm_string_from_utf16_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_typed_array_new_ref = Module["_mono_wasm_typed_array_new_ref"] = createExportWrapper("mono_wasm_typed_array_new_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_get_delegate_invoke_ref = Module["_mono_wasm_get_delegate_invoke_ref"] = createExportWrapper("mono_wasm_get_delegate_invoke_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_box_primitive_ref = Module["_mono_wasm_box_primitive_ref"] = createExportWrapper("mono_wasm_box_primitive_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_get_type_name = Module["_mono_wasm_get_type_name"] = createExportWrapper("mono_wasm_get_type_name");
+/** @type {function(...*):?} */
+var _mono_wasm_get_type_aqn = Module["_mono_wasm_get_type_aqn"] = createExportWrapper("mono_wasm_get_type_aqn");
+/** @type {function(...*):?} */
+var _mono_wasm_try_unbox_primitive_and_get_type_ref = Module["_mono_wasm_try_unbox_primitive_and_get_type_ref"] = createExportWrapper("mono_wasm_try_unbox_primitive_and_get_type_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_array_length_ref = Module["_mono_wasm_array_length_ref"] = createExportWrapper("mono_wasm_array_length_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_array_get_ref = Module["_mono_wasm_array_get_ref"] = createExportWrapper("mono_wasm_array_get_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_obj_array_new_ref = Module["_mono_wasm_obj_array_new_ref"] = createExportWrapper("mono_wasm_obj_array_new_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_obj_array_new = Module["_mono_wasm_obj_array_new"] = createExportWrapper("mono_wasm_obj_array_new");
+/** @type {function(...*):?} */
+var _mono_wasm_obj_array_set = Module["_mono_wasm_obj_array_set"] = createExportWrapper("mono_wasm_obj_array_set");
+/** @type {function(...*):?} */
+var _mono_wasm_obj_array_set_ref = Module["_mono_wasm_obj_array_set_ref"] = createExportWrapper("mono_wasm_obj_array_set_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_string_array_new_ref = Module["_mono_wasm_string_array_new_ref"] = createExportWrapper("mono_wasm_string_array_new_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_exec_regression = Module["_mono_wasm_exec_regression"] = createExportWrapper("mono_wasm_exec_regression");
+/** @type {function(...*):?} */
+var _mono_wasm_exit = Module["_mono_wasm_exit"] = createExportWrapper("mono_wasm_exit");
+/** @type {function(...*):?} */
+var _mono_wasm_abort = Module["_mono_wasm_abort"] = createExportWrapper("mono_wasm_abort");
+/** @type {function(...*):?} */
+var _mono_wasm_set_main_args = Module["_mono_wasm_set_main_args"] = createExportWrapper("mono_wasm_set_main_args");
+/** @type {function(...*):?} */
+var _mono_wasm_strdup = Module["_mono_wasm_strdup"] = createExportWrapper("mono_wasm_strdup");
+/** @type {function(...*):?} */
+var _mono_wasm_parse_runtime_options = Module["_mono_wasm_parse_runtime_options"] = createExportWrapper("mono_wasm_parse_runtime_options");
+/** @type {function(...*):?} */
+var _mono_wasm_enable_on_demand_gc = Module["_mono_wasm_enable_on_demand_gc"] = createExportWrapper("mono_wasm_enable_on_demand_gc");
+/** @type {function(...*):?} */
+var _mono_wasm_intern_string_ref = Module["_mono_wasm_intern_string_ref"] = createExportWrapper("mono_wasm_intern_string_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_string_get_data_ref = Module["_mono_wasm_string_get_data_ref"] = createExportWrapper("mono_wasm_string_get_data_ref");
+/** @type {function(...*):?} */
+var _mono_wasm_class_get_type = Module["_mono_wasm_class_get_type"] = createExportWrapper("mono_wasm_class_get_type");
+/** @type {function(...*):?} */
+var _mono_wasm_write_managed_pointer_unsafe = Module["_mono_wasm_write_managed_pointer_unsafe"] = createExportWrapper("mono_wasm_write_managed_pointer_unsafe");
+/** @type {function(...*):?} */
+var _mono_wasm_copy_managed_pointer = Module["_mono_wasm_copy_managed_pointer"] = createExportWrapper("mono_wasm_copy_managed_pointer");
+/** @type {function(...*):?} */
+var _mono_wasm_i52_to_f64 = Module["_mono_wasm_i52_to_f64"] = createExportWrapper("mono_wasm_i52_to_f64");
+/** @type {function(...*):?} */
+var _mono_wasm_u52_to_f64 = Module["_mono_wasm_u52_to_f64"] = createExportWrapper("mono_wasm_u52_to_f64");
+/** @type {function(...*):?} */
+var _mono_wasm_f64_to_u52 = Module["_mono_wasm_f64_to_u52"] = createExportWrapper("mono_wasm_f64_to_u52");
+/** @type {function(...*):?} */
+var _mono_wasm_f64_to_i52 = Module["_mono_wasm_f64_to_i52"] = createExportWrapper("mono_wasm_f64_to_i52");
+/** @type {function(...*):?} */
+var _mono_wasm_method_get_full_name = Module["_mono_wasm_method_get_full_name"] = createExportWrapper("mono_wasm_method_get_full_name");
+/** @type {function(...*):?} */
+var _mono_wasm_method_get_name = Module["_mono_wasm_method_get_name"] = createExportWrapper("mono_wasm_method_get_name");
+/** @type {function(...*):?} */
+var _mono_wasm_get_f32_unaligned = Module["_mono_wasm_get_f32_unaligned"] = createExportWrapper("mono_wasm_get_f32_unaligned");
+/** @type {function(...*):?} */
+var _mono_wasm_get_f64_unaligned = Module["_mono_wasm_get_f64_unaligned"] = createExportWrapper("mono_wasm_get_f64_unaligned");
+/** @type {function(...*):?} */
+var _mono_wasm_get_i32_unaligned = Module["_mono_wasm_get_i32_unaligned"] = createExportWrapper("mono_wasm_get_i32_unaligned");
+/** @type {function(...*):?} */
+var _mono_wasm_is_zero_page_reserved = Module["_mono_wasm_is_zero_page_reserved"] = createExportWrapper("mono_wasm_is_zero_page_reserved");
+/** @type {function(...*):?} */
+var _emscripten_stack_get_base = function() {
+ return (_emscripten_stack_get_base = Module["asm"]["emscripten_stack_get_base"]).apply(null, arguments);
+};
+
+/** @type {function(...*):?} */
+var _emscripten_stack_get_end = function() {
+ return (_emscripten_stack_get_end = Module["asm"]["emscripten_stack_get_end"]).apply(null, arguments);
+};
+
+/** @type {function(...*):?} */
+var _mono_wasm_set_is_debugger_attached = Module["_mono_wasm_set_is_debugger_attached"] = createExportWrapper("mono_wasm_set_is_debugger_attached");
+/** @type {function(...*):?} */
+var _mono_wasm_change_debugger_log_level = Module["_mono_wasm_change_debugger_log_level"] = createExportWrapper("mono_wasm_change_debugger_log_level");
+/** @type {function(...*):?} */
+var _mono_wasm_send_dbg_command_with_parms = Module["_mono_wasm_send_dbg_command_with_parms"] = createExportWrapper("mono_wasm_send_dbg_command_with_parms");
+/** @type {function(...*):?} */
+var _mono_wasm_send_dbg_command = Module["_mono_wasm_send_dbg_command"] = createExportWrapper("mono_wasm_send_dbg_command");
+/** @type {function(...*):?} */
+var _mono_wasm_event_pipe_enable = Module["_mono_wasm_event_pipe_enable"] = createExportWrapper("mono_wasm_event_pipe_enable");
+/** @type {function(...*):?} */
+var _mono_wasm_event_pipe_session_start_streaming = Module["_mono_wasm_event_pipe_session_start_streaming"] = createExportWrapper("mono_wasm_event_pipe_session_start_streaming");
+/** @type {function(...*):?} */
+var _mono_wasm_event_pipe_session_disable = Module["_mono_wasm_event_pipe_session_disable"] = createExportWrapper("mono_wasm_event_pipe_session_disable");
+/** @type {function(...*):?} */
+var _mono_jiterp_register_jit_call_thunk = Module["_mono_jiterp_register_jit_call_thunk"] = createExportWrapper("mono_jiterp_register_jit_call_thunk");
+/** @type {function(...*):?} */
+var _mono_jiterp_stackval_to_data = Module["_mono_jiterp_stackval_to_data"] = createExportWrapper("mono_jiterp_stackval_to_data");
+/** @type {function(...*):?} */
+var _mono_jiterp_stackval_from_data = Module["_mono_jiterp_stackval_from_data"] = createExportWrapper("mono_jiterp_stackval_from_data");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_arg_offset = Module["_mono_jiterp_get_arg_offset"] = createExportWrapper("mono_jiterp_get_arg_offset");
+/** @type {function(...*):?} */
+var _mono_jiterp_overflow_check_i4 = Module["_mono_jiterp_overflow_check_i4"] = createExportWrapper("mono_jiterp_overflow_check_i4");
+/** @type {function(...*):?} */
+var _mono_jiterp_overflow_check_u4 = Module["_mono_jiterp_overflow_check_u4"] = createExportWrapper("mono_jiterp_overflow_check_u4");
+/** @type {function(...*):?} */
+var _mono_jiterp_ld_delegate_method_ptr = Module["_mono_jiterp_ld_delegate_method_ptr"] = createExportWrapper("mono_jiterp_ld_delegate_method_ptr");
+/** @type {function(...*):?} */
+var _mono_jiterp_interp_entry = Module["_mono_jiterp_interp_entry"] = createExportWrapper("mono_jiterp_interp_entry");
+/** @type {function(...*):?} */
+var _fmod = Module["_fmod"] = createExportWrapper("fmod");
+/** @type {function(...*):?} */
+var _asin = Module["_asin"] = createExportWrapper("asin");
+/** @type {function(...*):?} */
+var _asinh = Module["_asinh"] = createExportWrapper("asinh");
+/** @type {function(...*):?} */
+var _acosh = Module["_acosh"] = createExportWrapper("acosh");
+/** @type {function(...*):?} */
+var _atan = Module["_atan"] = createExportWrapper("atan");
+/** @type {function(...*):?} */
+var _atanh = Module["_atanh"] = createExportWrapper("atanh");
+/** @type {function(...*):?} */
+var _cbrt = Module["_cbrt"] = createExportWrapper("cbrt");
+/** @type {function(...*):?} */
+var _cosh = Module["_cosh"] = createExportWrapper("cosh");
+/** @type {function(...*):?} */
+var _log2 = Module["_log2"] = createExportWrapper("log2");
+/** @type {function(...*):?} */
+var _sin = Module["_sin"] = createExportWrapper("sin");
+/** @type {function(...*):?} */
+var _sinh = Module["_sinh"] = createExportWrapper("sinh");
+/** @type {function(...*):?} */
+var _tan = Module["_tan"] = createExportWrapper("tan");
+/** @type {function(...*):?} */
+var _tanh = Module["_tanh"] = createExportWrapper("tanh");
+/** @type {function(...*):?} */
+var _atan2 = Module["_atan2"] = createExportWrapper("atan2");
+/** @type {function(...*):?} */
+var _fma = Module["_fma"] = createExportWrapper("fma");
+/** @type {function(...*):?} */
+var _asinf = Module["_asinf"] = createExportWrapper("asinf");
+/** @type {function(...*):?} */
+var _asinhf = Module["_asinhf"] = createExportWrapper("asinhf");
+/** @type {function(...*):?} */
+var _acoshf = Module["_acoshf"] = createExportWrapper("acoshf");
+/** @type {function(...*):?} */
+var _atanhf = Module["_atanhf"] = createExportWrapper("atanhf");
+/** @type {function(...*):?} */
+var _coshf = Module["_coshf"] = createExportWrapper("coshf");
+/** @type {function(...*):?} */
+var _logf = Module["_logf"] = createExportWrapper("logf");
+/** @type {function(...*):?} */
+var _log10f = Module["_log10f"] = createExportWrapper("log10f");
+/** @type {function(...*):?} */
+var _sinhf = Module["_sinhf"] = createExportWrapper("sinhf");
+/** @type {function(...*):?} */
+var _tanhf = Module["_tanhf"] = createExportWrapper("tanhf");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_polling_required_address = Module["_mono_jiterp_get_polling_required_address"] = createExportWrapper("mono_jiterp_get_polling_required_address");
+/** @type {function(...*):?} */
+var _mono_jiterp_do_safepoint = Module["_mono_jiterp_do_safepoint"] = createExportWrapper("mono_jiterp_do_safepoint");
+/** @type {function(...*):?} */
+var _mono_jiterp_imethod_to_ftnptr = Module["_mono_jiterp_imethod_to_ftnptr"] = createExportWrapper("mono_jiterp_imethod_to_ftnptr");
+/** @type {function(...*):?} */
+var _mono_jiterp_enum_hasflag = Module["_mono_jiterp_enum_hasflag"] = createExportWrapper("mono_jiterp_enum_hasflag");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_simd_intrinsic = Module["_mono_jiterp_get_simd_intrinsic"] = createExportWrapper("mono_jiterp_get_simd_intrinsic");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_simd_opcode = Module["_mono_jiterp_get_simd_opcode"] = createExportWrapper("mono_jiterp_get_simd_opcode");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_opcode_info = Module["_mono_jiterp_get_opcode_info"] = createExportWrapper("mono_jiterp_get_opcode_info");
+/** @type {function(...*):?} */
+var _jiterp_preserve_module = Module["_jiterp_preserve_module"] = createExportWrapper("jiterp_preserve_module");
+/** @type {function(...*):?} */
+var _mono_jiterp_encode_leb64_ref = Module["_mono_jiterp_encode_leb64_ref"] = createExportWrapper("mono_jiterp_encode_leb64_ref");
+/** @type {function(...*):?} */
+var _mono_jiterp_encode_leb52 = Module["_mono_jiterp_encode_leb52"] = createExportWrapper("mono_jiterp_encode_leb52");
+/** @type {function(...*):?} */
+var _mono_jiterp_encode_leb_signed_boundary = Module["_mono_jiterp_encode_leb_signed_boundary"] = createExportWrapper("mono_jiterp_encode_leb_signed_boundary");
+/** @type {function(...*):?} */
+var _mono_jiterp_increase_entry_count = Module["_mono_jiterp_increase_entry_count"] = createExportWrapper("mono_jiterp_increase_entry_count");
+/** @type {function(...*):?} */
+var _mono_jiterp_object_unbox = Module["_mono_jiterp_object_unbox"] = createExportWrapper("mono_jiterp_object_unbox");
+/** @type {function(...*):?} */
+var _mono_jiterp_type_is_byref = Module["_mono_jiterp_type_is_byref"] = createExportWrapper("mono_jiterp_type_is_byref");
+/** @type {function(...*):?} */
+var _mono_jiterp_value_copy = Module["_mono_jiterp_value_copy"] = createExportWrapper("mono_jiterp_value_copy");
+/** @type {function(...*):?} */
+var _mono_jiterp_try_newobj_inlined = Module["_mono_jiterp_try_newobj_inlined"] = createExportWrapper("mono_jiterp_try_newobj_inlined");
+/** @type {function(...*):?} */
+var _mono_jiterp_try_newstr = Module["_mono_jiterp_try_newstr"] = createExportWrapper("mono_jiterp_try_newstr");
+/** @type {function(...*):?} */
+var _mono_jiterp_gettype_ref = Module["_mono_jiterp_gettype_ref"] = createExportWrapper("mono_jiterp_gettype_ref");
+/** @type {function(...*):?} */
+var _mono_jiterp_has_parent_fast = Module["_mono_jiterp_has_parent_fast"] = createExportWrapper("mono_jiterp_has_parent_fast");
+/** @type {function(...*):?} */
+var _mono_jiterp_implements_interface = Module["_mono_jiterp_implements_interface"] = createExportWrapper("mono_jiterp_implements_interface");
+/** @type {function(...*):?} */
+var _mono_jiterp_is_special_interface = Module["_mono_jiterp_is_special_interface"] = createExportWrapper("mono_jiterp_is_special_interface");
+/** @type {function(...*):?} */
+var _mono_jiterp_implements_special_interface = Module["_mono_jiterp_implements_special_interface"] = createExportWrapper("mono_jiterp_implements_special_interface");
+/** @type {function(...*):?} */
+var _mono_jiterp_cast_v2 = Module["_mono_jiterp_cast_v2"] = createExportWrapper("mono_jiterp_cast_v2");
+/** @type {function(...*):?} */
+var _mono_jiterp_localloc = Module["_mono_jiterp_localloc"] = createExportWrapper("mono_jiterp_localloc");
+/** @type {function(...*):?} */
+var _mono_jiterp_ldtsflda = Module["_mono_jiterp_ldtsflda"] = createExportWrapper("mono_jiterp_ldtsflda");
+/** @type {function(...*):?} */
+var _mono_jiterp_box_ref = Module["_mono_jiterp_box_ref"] = createExportWrapper("mono_jiterp_box_ref");
+/** @type {function(...*):?} */
+var _mono_jiterp_conv = Module["_mono_jiterp_conv"] = createExportWrapper("mono_jiterp_conv");
+/** @type {function(...*):?} */
+var _mono_jiterp_relop_fp = Module["_mono_jiterp_relop_fp"] = createExportWrapper("mono_jiterp_relop_fp");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_size_of_stackval = Module["_mono_jiterp_get_size_of_stackval"] = createExportWrapper("mono_jiterp_get_size_of_stackval");
+/** @type {function(...*):?} */
+var _mono_jiterp_type_get_raw_value_size = Module["_mono_jiterp_type_get_raw_value_size"] = createExportWrapper("mono_jiterp_type_get_raw_value_size");
+/** @type {function(...*):?} */
+var _mono_jiterp_trace_bailout = Module["_mono_jiterp_trace_bailout"] = createExportWrapper("mono_jiterp_trace_bailout");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_trace_bailout_count = Module["_mono_jiterp_get_trace_bailout_count"] = createExportWrapper("mono_jiterp_get_trace_bailout_count");
+/** @type {function(...*):?} */
+var _mono_jiterp_adjust_abort_count = Module["_mono_jiterp_adjust_abort_count"] = createExportWrapper("mono_jiterp_adjust_abort_count");
+/** @type {function(...*):?} */
+var _mono_jiterp_interp_entry_prologue = Module["_mono_jiterp_interp_entry_prologue"] = createExportWrapper("mono_jiterp_interp_entry_prologue");
+/** @type {function(...*):?} */
+var _mono_jiterp_cas_i32 = Module["_mono_jiterp_cas_i32"] = createExportWrapper("mono_jiterp_cas_i32");
+/** @type {function(...*):?} */
+var _mono_jiterp_cas_i64 = Module["_mono_jiterp_cas_i64"] = createExportWrapper("mono_jiterp_cas_i64");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_opcode_value_table_entry = Module["_mono_jiterp_get_opcode_value_table_entry"] = createExportWrapper("mono_jiterp_get_opcode_value_table_entry");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_trace_hit_count = Module["_mono_jiterp_get_trace_hit_count"] = createExportWrapper("mono_jiterp_get_trace_hit_count");
+/** @type {function(...*):?} */
+var _mono_jiterp_parse_option = Module["_mono_jiterp_parse_option"] = createExportWrapper("mono_jiterp_parse_option");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_options_version = Module["_mono_jiterp_get_options_version"] = createExportWrapper("mono_jiterp_get_options_version");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_options_as_json = Module["_mono_jiterp_get_options_as_json"] = createExportWrapper("mono_jiterp_get_options_as_json");
+/** @type {function(...*):?} */
+var _mono_jiterp_update_jit_call_dispatcher = Module["_mono_jiterp_update_jit_call_dispatcher"] = createExportWrapper("mono_jiterp_update_jit_call_dispatcher");
+/** @type {function(...*):?} */
+var _mono_jiterp_object_has_component_size = Module["_mono_jiterp_object_has_component_size"] = createExportWrapper("mono_jiterp_object_has_component_size");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_hashcode = Module["_mono_jiterp_get_hashcode"] = createExportWrapper("mono_jiterp_get_hashcode");
+/** @type {function(...*):?} */
+var _mono_jiterp_try_get_hashcode = Module["_mono_jiterp_try_get_hashcode"] = createExportWrapper("mono_jiterp_try_get_hashcode");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_signature_has_this = Module["_mono_jiterp_get_signature_has_this"] = createExportWrapper("mono_jiterp_get_signature_has_this");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_signature_return_type = Module["_mono_jiterp_get_signature_return_type"] = createExportWrapper("mono_jiterp_get_signature_return_type");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_signature_param_count = Module["_mono_jiterp_get_signature_param_count"] = createExportWrapper("mono_jiterp_get_signature_param_count");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_signature_params = Module["_mono_jiterp_get_signature_params"] = createExportWrapper("mono_jiterp_get_signature_params");
+/** @type {function(...*):?} */
+var _mono_jiterp_type_to_ldind = Module["_mono_jiterp_type_to_ldind"] = createExportWrapper("mono_jiterp_type_to_ldind");
+/** @type {function(...*):?} */
+var _mono_jiterp_type_to_stind = Module["_mono_jiterp_type_to_stind"] = createExportWrapper("mono_jiterp_type_to_stind");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_array_rank = Module["_mono_jiterp_get_array_rank"] = createExportWrapper("mono_jiterp_get_array_rank");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_array_element_size = Module["_mono_jiterp_get_array_element_size"] = createExportWrapper("mono_jiterp_get_array_element_size");
+/** @type {function(...*):?} */
+var _mono_jiterp_set_object_field = Module["_mono_jiterp_set_object_field"] = createExportWrapper("mono_jiterp_set_object_field");
+/** @type {function(...*):?} */
+var _mono_jiterp_debug_count = Module["_mono_jiterp_debug_count"] = createExportWrapper("mono_jiterp_debug_count");
+/** @type {function(...*):?} */
+var _mono_jiterp_stelem_ref = Module["_mono_jiterp_stelem_ref"] = createExportWrapper("mono_jiterp_stelem_ref");
+/** @type {function(...*):?} */
+var _mono_jiterp_trace_transfer = Module["_mono_jiterp_trace_transfer"] = createExportWrapper("mono_jiterp_trace_transfer");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_member_offset = Module["_mono_jiterp_get_member_offset"] = createExportWrapper("mono_jiterp_get_member_offset");
+/** @type {function(...*):?} */
+var _mono_jiterp_write_number_unaligned = Module["_mono_jiterp_write_number_unaligned"] = createExportWrapper("mono_jiterp_write_number_unaligned");
+/** @type {function(...*):?} */
+var _mono_jiterp_get_rejected_trace_count = Module["_mono_jiterp_get_rejected_trace_count"] = createExportWrapper("mono_jiterp_get_rejected_trace_count");
+/** @type {function(...*):?} */
+var _mono_jiterp_boost_back_branch_target = Module["_mono_jiterp_boost_back_branch_target"] = createExportWrapper("mono_jiterp_boost_back_branch_target");
+/** @type {function(...*):?} */
+var _mono_jiterp_is_imethod_var_address_taken = Module["_mono_jiterp_is_imethod_var_address_taken"] = createExportWrapper("mono_jiterp_is_imethod_var_address_taken");
+/** @type {function(...*):?} */
+var _mono_background_exec = Module["_mono_background_exec"] = createExportWrapper("mono_background_exec");
+/** @type {function(...*):?} */
+var _htons = Module["_htons"] = createExportWrapper("htons");
+/** @type {function(...*):?} */
+var _mono_wasm_gc_lock = Module["_mono_wasm_gc_lock"] = createExportWrapper("mono_wasm_gc_lock");
+/** @type {function(...*):?} */
+var _mono_wasm_gc_unlock = Module["_mono_wasm_gc_unlock"] = createExportWrapper("mono_wasm_gc_unlock");
+/** @type {function(...*):?} */
+var _mono_print_method_from_ip = Module["_mono_print_method_from_ip"] = createExportWrapper("mono_print_method_from_ip");
+/** @type {function(...*):?} */
+var _mono_wasm_execute_timer = Module["_mono_wasm_execute_timer"] = createExportWrapper("mono_wasm_execute_timer");
+/** @type {function(...*):?} */
+var _mono_wasm_load_icu_data = Module["_mono_wasm_load_icu_data"] = createExportWrapper("mono_wasm_load_icu_data");
+/** @type {function(...*):?} */
+var _ntohs = Module["_ntohs"] = createExportWrapper("ntohs");
+/** @type {function(...*):?} */
+var ___dl_seterr = createExportWrapper("__dl_seterr");
+/** @type {function(...*):?} */
+var _htonl = createExportWrapper("htonl");
+/** @type {function(...*):?} */
+var _emscripten_builtin_memalign = createExportWrapper("emscripten_builtin_memalign");
+/** @type {function(...*):?} */
+var _memalign = Module["_memalign"] = createExportWrapper("memalign");
+/** @type {function(...*):?} */
+var ___trap = function() {
+ return (___trap = Module["asm"]["__trap"]).apply(null, arguments);
+};
+
+/** @type {function(...*):?} */
+var _emscripten_stack_init = function() {
+ return (_emscripten_stack_init = Module["asm"]["emscripten_stack_init"]).apply(null, arguments);
+};
+
+/** @type {function(...*):?} */
+var _emscripten_stack_get_free = function() {
+ return (_emscripten_stack_get_free = Module["asm"]["emscripten_stack_get_free"]).apply(null, arguments);
+};
+
+/** @type {function(...*):?} */
+var stackSave = Module["stackSave"] = createExportWrapper("stackSave");
+/** @type {function(...*):?} */
+var stackRestore = Module["stackRestore"] = createExportWrapper("stackRestore");
+/** @type {function(...*):?} */
+var stackAlloc = Module["stackAlloc"] = createExportWrapper("stackAlloc");
+/** @type {function(...*):?} */
+var _emscripten_stack_get_current = function() {
+ return (_emscripten_stack_get_current = Module["asm"]["emscripten_stack_get_current"]).apply(null, arguments);
+};
+
+/** @type {function(...*):?} */
+var ___cxa_decrement_exception_refcount = Module["___cxa_decrement_exception_refcount"] = createExportWrapper("__cxa_decrement_exception_refcount");
+/** @type {function(...*):?} */
+var ___cxa_increment_exception_refcount = Module["___cxa_increment_exception_refcount"] = createExportWrapper("__cxa_increment_exception_refcount");
+/** @type {function(...*):?} */
+var ___thrown_object_from_unwind_exception = Module["___thrown_object_from_unwind_exception"] = createExportWrapper("__thrown_object_from_unwind_exception");
+/** @type {function(...*):?} */
+var ___get_exception_message = Module["___get_exception_message"] = createExportWrapper("__get_exception_message");
+
+
+// include: postamble.js
+// === Auto-generated postamble setup entry stuff ===
+
+Module["UTF8ArrayToString"] = UTF8ArrayToString;
+Module["UTF8ToString"] = UTF8ToString;
+Module["stringToUTF8Array"] = stringToUTF8Array;
+Module["addRunDependency"] = addRunDependency;
+Module["removeRunDependency"] = removeRunDependency;
+Module["FS_createPath"] = FS.createPath;
+Module["FS_createDataFile"] = FS.createDataFile;
+Module["FS_createPreloadedFile"] = FS.createPreloadedFile;
+Module["FS_createLazyFile"] = FS.createLazyFile;
+Module["FS_createDevice"] = FS.createDevice;
+Module["FS_unlink"] = FS.unlink;
+Module["out"] = out;
+Module["err"] = err;
+Module["abort"] = abort;
+Module["runtimeKeepalivePush"] = runtimeKeepalivePush;
+Module["runtimeKeepalivePop"] = runtimeKeepalivePop;
+Module["maybeExit"] = maybeExit;
+Module["safeSetTimeout"] = safeSetTimeout;
+Module["ccall"] = ccall;
+Module["cwrap"] = cwrap;
+Module["addFunction"] = addFunction;
+Module["setValue"] = setValue;
+Module["getValue"] = getValue;
+Module["FS"] = FS;
+Module["GL"] = GL;
+var missingLibrarySymbols = [
+ 'getHostByName',
+ 'traverseStack',
+ 'convertPCtoSourceLocation',
+ 'readEmAsmArgs',
+ 'jstoi_s',
+ 'listenOnce',
+ 'autoResumeAudioContext',
+ 'getDynCaller',
+ 'dynCall',
+ 'asmjsMangle',
+ 'HandleAllocator',
+ 'getNativeTypeSize',
+ 'STACK_SIZE',
+ 'STACK_ALIGN',
+ 'POINTER_SIZE',
+ 'ASSERTIONS',
+ 'writeI53ToI64Clamped',
+ 'writeI53ToI64Signaling',
+ 'writeI53ToU64Clamped',
+ 'writeI53ToU64Signaling',
+ 'convertI32PairToI53',
+ 'convertI32PairToI53Checked',
+ 'convertU32PairToI53',
+ 'removeFunction',
+ 'reallyNegative',
+ 'unSign',
+ 'strLen',
+ 'reSign',
+ 'formatString',
+ 'intArrayToString',
+ 'AsciiToString',
+ 'stringToAscii',
+ 'UTF16ToString',
+ 'stringToUTF16',
+ 'lengthBytesUTF16',
+ 'UTF32ToString',
+ 'stringToUTF32',
+ 'lengthBytesUTF32',
+ 'allocateUTF8OnStack',
+ 'writeStringToMemory',
+ 'registerKeyEventCallback',
+ 'maybeCStringToJsString',
+ 'findEventTarget',
+ 'findCanvasEventTarget',
+ 'getBoundingClientRect',
+ 'fillMouseEventData',
+ 'registerMouseEventCallback',
+ 'registerWheelEventCallback',
+ 'registerUiEventCallback',
+ 'registerFocusEventCallback',
+ 'fillDeviceOrientationEventData',
+ 'registerDeviceOrientationEventCallback',
+ 'fillDeviceMotionEventData',
+ 'registerDeviceMotionEventCallback',
+ 'screenOrientation',
+ 'fillOrientationChangeEventData',
+ 'registerOrientationChangeEventCallback',
+ 'fillFullscreenChangeEventData',
+ 'registerFullscreenChangeEventCallback',
+ 'JSEvents_requestFullscreen',
+ 'JSEvents_resizeCanvasForFullscreen',
+ 'registerRestoreOldStyle',
+ 'hideEverythingExceptGivenElement',
+ 'restoreHiddenElements',
+ 'setLetterbox',
+ 'softFullscreenResizeWebGLRenderTarget',
+ 'doRequestFullscreen',
+ 'fillPointerlockChangeEventData',
+ 'registerPointerlockChangeEventCallback',
+ 'registerPointerlockErrorEventCallback',
+ 'requestPointerLock',
+ 'fillVisibilityChangeEventData',
+ 'registerVisibilityChangeEventCallback',
+ 'registerTouchEventCallback',
+ 'fillGamepadEventData',
+ 'registerGamepadEventCallback',
+ 'registerBeforeUnloadEventCallback',
+ 'fillBatteryEventData',
+ 'battery',
+ 'registerBatteryEventCallback',
+ 'setCanvasElementSize',
+ 'getCanvasElementSize',
+ 'jsStackTrace',
+ 'stackTrace',
+ 'checkWasiClock',
+ 'createDyncallWrapper',
+ 'setImmediateWrapped',
+ 'clearImmediateWrapped',
+ 'polyfillSetImmediate',
+ 'getPromise',
+ 'makePromise',
+ 'makePromiseCallback',
+ 'setMainLoop',
+ '_setNetworkCallback',
+ 'writeGLArray',
+ 'SDL_unicode',
+ 'SDL_ttfContext',
+ 'SDL_audio',
+ 'GLFW_Window',
+ 'runAndAbortIfError',
+ 'ALLOC_NORMAL',
+ 'ALLOC_STACK',
+ 'allocate',
+];
+missingLibrarySymbols.forEach(missingLibrarySymbol)
+
+var unexportedSymbols = [
+ 'run',
+ 'stringToUTF8',
+ 'lengthBytesUTF8',
+ 'addOnPreRun',
+ 'addOnInit',
+ 'addOnPreMain',
+ 'addOnExit',
+ 'addOnPostRun',
+ 'FS_createFolder',
+ 'FS_createLink',
+ 'callMain',
+ 'keepRuntimeAlive',
+ 'wasmMemory',
+ 'stackAlloc',
+ 'stackSave',
+ 'stackRestore',
+ 'getTempRet0',
+ 'setTempRet0',
+ 'writeStackCookie',
+ 'checkStackCookie',
+ 'ptrToString',
+ 'zeroMemory',
+ 'stringToNewUTF8',
+ 'exitJS',
+ 'getHeapMax',
+ 'emscripten_realloc_buffer',
+ 'ENV',
+ 'ERRNO_CODES',
+ 'ERRNO_MESSAGES',
+ 'setErrNo',
+ 'inetPton4',
+ 'inetNtop4',
+ 'inetPton6',
+ 'inetNtop6',
+ 'readSockaddr',
+ 'writeSockaddr',
+ 'DNS',
+ 'Protocols',
+ 'Sockets',
+ 'getRandomDevice',
+ 'timers',
+ 'warnOnce',
+ 'UNWIND_CACHE',
+ 'readEmAsmArgsArray',
+ 'jstoi_q',
+ 'getExecutableName',
+ 'handleException',
+ 'callUserCallback',
+ 'asyncLoad',
+ 'alignMemory',
+ 'mmapAlloc',
+ 'writeI53ToI64',
+ 'readI53FromI64',
+ 'readI53FromU64',
+ 'MAX_INT53',
+ 'MIN_INT53',
+ 'bigintToI53Checked',
+ 'getCFunc',
+ 'uleb128Encode',
+ 'sigToWasmTypes',
+ 'generateFuncType',
+ 'convertJsFunctionToWasm',
+ 'freeTableIndexes',
+ 'functionsInTableMap',
+ 'getEmptyTableSlot',
+ 'updateTableMap',
+ 'getFunctionAddress',
+ 'PATH',
+ 'PATH_FS',
+ 'intArrayFromString',
+ 'UTF16Decoder',
+ 'allocateUTF8',
+ 'writeArrayToMemory',
+ 'writeAsciiToMemory',
+ 'SYSCALLS',
+ 'getSocketFromFD',
+ 'getSocketAddress',
+ 'JSEvents',
+ 'specialHTMLTargets',
+ 'currentFullscreenStrategy',
+ 'restoreOldWindowedStyle',
+ 'demangle',
+ 'demangleAll',
+ 'ExitStatus',
+ 'getEnvStrings',
+ 'doReadv',
+ 'doWritev',
+ 'dlopenMissingError',
+ 'promiseMap',
+ 'getExceptionMessageCommon',
+ 'getCppExceptionTag',
+ 'getCppExceptionThrownObjectFromWebAssemblyException',
+ 'incrementExceptionRefcount',
+ 'decrementExceptionRefcount',
+ 'getExceptionMessage',
+ 'Browser',
+ 'wget',
+ 'MEMFS',
+ 'TTY',
+ 'PIPEFS',
+ 'SOCKFS',
+ 'tempFixedLengthArray',
+ 'miniTempWebGLFloatBuffers',
+ 'heapObjectForWebGLType',
+ 'heapAccessShiftForWebGLHeap',
+ 'emscriptenWebGLGet',
+ 'computeUnpackAlignedImageSize',
+ 'emscriptenWebGLGetTexPixelData',
+ 'emscriptenWebGLGetUniform',
+ 'webglGetUniformLocation',
+ 'webglPrepareUniformLocationsBeforeFirstUse',
+ 'webglGetLeftBracePos',
+ 'emscriptenWebGLGetVertexAttrib',
+ 'AL',
+ 'SDL',
+ 'SDL_gfx',
+ 'GLUT',
+ 'EGL',
+ 'GLFW',
+ 'GLEW',
+ 'IDBStore',
+ 'emscriptenWebGLGetIndexed',
+ 'DOTNETENTROPY',
+ 'DOTNET',
+];
+unexportedSymbols.forEach(unexportedRuntimeSymbol);
+
+
+
+var calledRun;
+
+dependenciesFulfilled = function runCaller() {
+ // If run has never been called, and we should call run (INVOKE_RUN is true, and Module.noInitialRun is not false)
+ if (!calledRun) run();
+ if (!calledRun) dependenciesFulfilled = runCaller; // try this again later, after new deps are fulfilled
+};
+
+function stackCheckInit() {
+ // This is normally called automatically during __wasm_call_ctors but need to
+ // get these values before even running any of the ctors so we call it redundantly
+ // here.
+ _emscripten_stack_init();
+ // TODO(sbc): Move writeStackCookie to native to to avoid this.
+ writeStackCookie();
+}
+
+function run() {
+
+ if (runDependencies > 0) {
+ return;
+ }
+
+ stackCheckInit();
+
+ preRun();
+
+ // a preRun added a dependency, run will be called later
+ if (runDependencies > 0) {
+ return;
+ }
+
+ function doRun() {
+ // run may have just been called through dependencies being fulfilled just in this very frame,
+ // or while the async setStatus time below was happening
+ if (calledRun) return;
+ calledRun = true;
+ Module['calledRun'] = true;
+
+ if (ABORT) return;
+
+ initRuntime();
+
+ readyPromiseResolve(Module);
+ if (Module['onRuntimeInitialized']) Module['onRuntimeInitialized']();
+
+ assert(!Module['_main'], 'compiled without a main, but one is present. if you added it from JS, use Module["onRuntimeInitialized"]');
+
+ postRun();
+ }
+
+ if (Module['setStatus']) {
+ Module['setStatus']('Running...');
+ setTimeout(function() {
+ setTimeout(function() {
+ Module['setStatus']('');
+ }, 1);
+ doRun();
+ }, 1);
+ } else
+ {
+ doRun();
+ }
+ checkStackCookie();
+}
+
+function checkUnflushedContent() {
+ // Compiler settings do not allow exiting the runtime, so flushing
+ // the streams is not possible. but in ASSERTIONS mode we check
+ // if there was something to flush, and if so tell the user they
+ // should request that the runtime be exitable.
+ // Normally we would not even include flush() at all, but in ASSERTIONS
+ // builds we do so just for this check, and here we see if there is any
+ // content to flush, that is, we check if there would have been
+ // something a non-ASSERTIONS build would have not seen.
+ // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0
+ // mode (which has its own special function for this; otherwise, all
+ // the code is inside libc)
+ var oldOut = out;
+ var oldErr = err;
+ var has = false;
+ out = err = (x) => {
+ has = true;
+ }
+ try { // it doesn't matter if it fails
+ _fflush(0);
+ // also flush in the JS FS layer
+ ['stdout', 'stderr'].forEach(function(name) {
+ var info = FS.analyzePath('/dev/' + name);
+ if (!info) return;
+ var stream = info.object;
+ var rdev = stream.rdev;
+ var tty = TTY.ttys[rdev];
+ if (tty && tty.output && tty.output.length) {
+ has = true;
+ }
+ });
+ } catch(e) {}
+ out = oldOut;
+ err = oldErr;
+ if (has) {
+ warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the FAQ), or make sure to emit a newline when you printf etc.');
+ }
+}
+
+if (Module['preInit']) {
+ if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']];
+ while (Module['preInit'].length > 0) {
+ Module['preInit'].pop()();
+ }
+}
+
+run();
+
+
+// end include: postamble.js
+
+
+ return createDotnetRuntime.ready
+}
+
+);
+})();
+export default createDotnetRuntime;
+var fetch = fetch || undefined; var require = require || undefined; var __dirname = __dirname || ''; var _nativeModuleLoaded = false;
diff --git a/_framework/dotnet.native.js.symbols b/_framework/dotnet.native.js.symbols
new file mode 100644
index 00000000..b8fd0c61
--- /dev/null
+++ b/_framework/dotnet.native.js.symbols
@@ -0,0 +1,31180 @@
+0:abort
+1:exit
+2:__assert_fail
+3:mono_wasm_set_entrypoint_breakpoint
+4:mono_wasm_trace_logger
+5:mono_wasm_release_cs_owned_object
+6:mono_wasm_bind_js_function
+7:mono_wasm_invoke_bound_function
+8:mono_wasm_invoke_import
+9:mono_wasm_bind_cs_function
+10:mono_wasm_marshal_promise
+11:mono_wasm_invoke_js_with_args_ref
+12:mono_wasm_get_object_property_ref
+13:mono_wasm_set_object_property_ref
+14:mono_wasm_get_by_index_ref
+15:mono_wasm_set_by_index_ref
+16:mono_wasm_get_global_object_ref
+17:mono_wasm_typed_array_to_array_ref
+18:mono_wasm_create_cs_owned_object_ref
+19:mono_wasm_typed_array_from_ref
+20:mono_wasm_invoke_js_blazor
+21:mono_wasm_change_case_invariant
+22:mono_wasm_change_case
+23:mono_wasm_compare_string
+24:mono_wasm_starts_with
+25:mono_wasm_ends_with
+26:mono_wasm_index_of
+27:mono_wasm_get_calendar_info
+28:mono_wasm_get_culture_info
+29:mono_wasm_get_first_day_of_week
+30:mono_wasm_get_first_week_of_year
+31:mono_interp_jit_wasm_entry_trampoline
+32:mono_interp_record_interp_entry
+33:mono_interp_jit_wasm_jit_call_trampoline
+34:mono_interp_flush_jitcall_queue
+35:mono_interp_invoke_wasm_jit_call_trampoline
+36:mono_interp_tier_prepare_jiterpreter
+37:strftime
+38:schedule_background_exec
+39:mono_wasm_debugger_log
+40:mono_wasm_asm_loaded
+41:mono_wasm_add_dbg_command_received
+42:mono_wasm_fire_debugger_agent_message_with_data
+43:mono_wasm_schedule_timer
+44:dotnet_browser_entropy
+45:dlopen
+46:emscripten_glGenQueriesEXT
+47:emscripten_glDeleteQueriesEXT
+48:emscripten_glIsQueryEXT
+49:emscripten_glBeginQueryEXT
+50:emscripten_glEndQueryEXT
+51:emscripten_glQueryCounterEXT
+52:emscripten_glGetQueryivEXT
+53:emscripten_glGetQueryObjectivEXT
+54:emscripten_glGetQueryObjectuivEXT
+55:emscripten_glGetQueryObjecti64vEXT
+56:emscripten_glGetQueryObjectui64vEXT
+57:emscripten_glBindVertexArrayOES
+58:emscripten_glDeleteVertexArraysOES
+59:emscripten_glGenVertexArraysOES
+60:emscripten_glIsVertexArrayOES
+61:emscripten_glDrawBuffersWEBGL
+62:emscripten_glDrawArraysInstancedANGLE
+63:emscripten_glDrawElementsInstancedANGLE
+64:emscripten_glVertexAttribDivisorANGLE
+65:emscripten_glActiveTexture
+66:emscripten_glAttachShader
+67:emscripten_glBindAttribLocation
+68:emscripten_glBindBuffer
+69:emscripten_glBindFramebuffer
+70:emscripten_glBindRenderbuffer
+71:emscripten_glBindTexture
+72:emscripten_glBlendColor
+73:emscripten_glBlendEquation
+74:emscripten_glBlendEquationSeparate
+75:emscripten_glBlendFunc
+76:emscripten_glBlendFuncSeparate
+77:emscripten_glBufferData
+78:emscripten_glBufferSubData
+79:emscripten_glCheckFramebufferStatus
+80:emscripten_glClear
+81:emscripten_glClearColor
+82:emscripten_glClearDepthf
+83:emscripten_glClearStencil
+84:emscripten_glColorMask
+85:emscripten_glCompileShader
+86:emscripten_glCompressedTexImage2D
+87:emscripten_glCompressedTexSubImage2D
+88:emscripten_glCopyTexImage2D
+89:emscripten_glCopyTexSubImage2D
+90:emscripten_glCreateProgram
+91:emscripten_glCreateShader
+92:emscripten_glCullFace
+93:emscripten_glDeleteBuffers
+94:emscripten_glDeleteFramebuffers
+95:emscripten_glDeleteProgram
+96:emscripten_glDeleteRenderbuffers
+97:emscripten_glDeleteShader
+98:emscripten_glDeleteTextures
+99:emscripten_glDepthFunc
+100:emscripten_glDepthMask
+101:emscripten_glDepthRangef
+102:emscripten_glDetachShader
+103:emscripten_glDisable
+104:emscripten_glDisableVertexAttribArray
+105:emscripten_glDrawArrays
+106:emscripten_glDrawElements
+107:emscripten_glEnable
+108:emscripten_glEnableVertexAttribArray
+109:emscripten_glFinish
+110:emscripten_glFlush
+111:emscripten_glFramebufferRenderbuffer
+112:emscripten_glFramebufferTexture2D
+113:emscripten_glFrontFace
+114:emscripten_glGenBuffers
+115:emscripten_glGenerateMipmap
+116:emscripten_glGenFramebuffers
+117:emscripten_glGenRenderbuffers
+118:emscripten_glGenTextures
+119:emscripten_glGetActiveAttrib
+120:emscripten_glGetActiveUniform
+121:emscripten_glGetAttachedShaders
+122:emscripten_glGetAttribLocation
+123:emscripten_glGetBooleanv
+124:emscripten_glGetBufferParameteriv
+125:emscripten_glGetError
+126:emscripten_glGetFloatv
+127:emscripten_glGetFramebufferAttachmentParameteriv
+128:emscripten_glGetIntegerv
+129:emscripten_glGetProgramiv
+130:emscripten_glGetProgramInfoLog
+131:emscripten_glGetRenderbufferParameteriv
+132:emscripten_glGetShaderiv
+133:emscripten_glGetShaderInfoLog
+134:emscripten_glGetShaderPrecisionFormat
+135:emscripten_glGetShaderSource
+136:emscripten_glGetString
+137:emscripten_glGetTexParameterfv
+138:emscripten_glGetTexParameteriv
+139:emscripten_glGetUniformfv
+140:emscripten_glGetUniformiv
+141:emscripten_glGetUniformLocation
+142:emscripten_glGetVertexAttribfv
+143:emscripten_glGetVertexAttribiv
+144:emscripten_glGetVertexAttribPointerv
+145:emscripten_glHint
+146:emscripten_glIsBuffer
+147:emscripten_glIsEnabled
+148:emscripten_glIsFramebuffer
+149:emscripten_glIsProgram
+150:emscripten_glIsRenderbuffer
+151:emscripten_glIsShader
+152:emscripten_glIsTexture
+153:emscripten_glLineWidth
+154:emscripten_glLinkProgram
+155:emscripten_glPixelStorei
+156:emscripten_glPolygonOffset
+157:emscripten_glReadPixels
+158:emscripten_glReleaseShaderCompiler
+159:emscripten_glRenderbufferStorage
+160:emscripten_glSampleCoverage
+161:emscripten_glScissor
+162:emscripten_glShaderBinary
+163:emscripten_glShaderSource
+164:emscripten_glStencilFunc
+165:emscripten_glStencilFuncSeparate
+166:emscripten_glStencilMask
+167:emscripten_glStencilMaskSeparate
+168:emscripten_glStencilOp
+169:emscripten_glStencilOpSeparate
+170:emscripten_glTexImage2D
+171:emscripten_glTexParameterf
+172:emscripten_glTexParameterfv
+173:emscripten_glTexParameteri
+174:emscripten_glTexParameteriv
+175:emscripten_glTexSubImage2D
+176:emscripten_glUniform1f
+177:emscripten_glUniform1fv
+178:emscripten_glUniform1i
+179:emscripten_glUniform1iv
+180:emscripten_glUniform2f
+181:emscripten_glUniform2fv
+182:emscripten_glUniform2i
+183:emscripten_glUniform2iv
+184:emscripten_glUniform3f
+185:emscripten_glUniform3fv
+186:emscripten_glUniform3i
+187:emscripten_glUniform3iv
+188:emscripten_glUniform4f
+189:emscripten_glUniform4fv
+190:emscripten_glUniform4i
+191:emscripten_glUniform4iv
+192:emscripten_glUniformMatrix2fv
+193:emscripten_glUniformMatrix3fv
+194:emscripten_glUniformMatrix4fv
+195:emscripten_glUseProgram
+196:emscripten_glValidateProgram
+197:emscripten_glVertexAttrib1f
+198:emscripten_glVertexAttrib1fv
+199:emscripten_glVertexAttrib2f
+200:emscripten_glVertexAttrib2fv
+201:emscripten_glVertexAttrib3f
+202:emscripten_glVertexAttrib3fv
+203:emscripten_glVertexAttrib4f
+204:emscripten_glVertexAttrib4fv
+205:emscripten_glVertexAttribPointer
+206:emscripten_glViewport
+207:emscripten_glVertexAttribDivisorEXT
+208:emscripten_glDrawArraysInstancedEXT
+209:emscripten_glDrawElementsInstancedNV
+210:emscripten_glDrawBuffersEXT
+211:emscripten_glReadBuffer
+212:emscripten_glDrawRangeElements
+213:emscripten_glTexImage3D
+214:emscripten_glTexSubImage3D
+215:emscripten_glCopyTexSubImage3D
+216:emscripten_glCompressedTexImage3D
+217:emscripten_glCompressedTexSubImage3D
+218:emscripten_glGenQueries
+219:emscripten_glDeleteQueries
+220:emscripten_glIsQuery
+221:emscripten_glBeginQuery
+222:emscripten_glEndQuery
+223:emscripten_glGetQueryiv
+224:emscripten_glGetQueryObjectuiv
+225:emscripten_glDrawBuffers
+226:emscripten_glUniformMatrix2x3fv
+227:emscripten_glUniformMatrix3x2fv
+228:emscripten_glUniformMatrix2x4fv
+229:emscripten_glUniformMatrix4x2fv
+230:emscripten_glUniformMatrix3x4fv
+231:emscripten_glUniformMatrix4x3fv
+232:emscripten_glBlitFramebuffer
+233:emscripten_glRenderbufferStorageMultisample
+234:emscripten_glFramebufferTextureLayer
+235:emscripten_glBindVertexArray
+236:emscripten_glDeleteVertexArrays
+237:emscripten_glGenVertexArrays
+238:emscripten_glIsVertexArray
+239:emscripten_glGetIntegeri_v
+240:emscripten_glBeginTransformFeedback
+241:emscripten_glEndTransformFeedback
+242:emscripten_glBindBufferRange
+243:emscripten_glBindBufferBase
+244:emscripten_glTransformFeedbackVaryings
+245:emscripten_glGetTransformFeedbackVarying
+246:emscripten_glVertexAttribIPointer
+247:emscripten_glGetVertexAttribIiv
+248:emscripten_glGetVertexAttribIuiv
+249:emscripten_glVertexAttribI4i
+250:emscripten_glVertexAttribI4ui
+251:emscripten_glVertexAttribI4iv
+252:emscripten_glVertexAttribI4uiv
+253:emscripten_glGetUniformuiv
+254:emscripten_glGetFragDataLocation
+255:emscripten_glUniform1ui
+256:emscripten_glUniform2ui
+257:emscripten_glUniform3ui
+258:emscripten_glUniform4ui
+259:emscripten_glUniform1uiv
+260:emscripten_glUniform2uiv
+261:emscripten_glUniform3uiv
+262:emscripten_glUniform4uiv
+263:emscripten_glClearBufferiv
+264:emscripten_glClearBufferuiv
+265:emscripten_glClearBufferfv
+266:emscripten_glClearBufferfi
+267:emscripten_glGetStringi
+268:emscripten_glCopyBufferSubData
+269:emscripten_glGetUniformIndices
+270:emscripten_glGetActiveUniformsiv
+271:emscripten_glGetUniformBlockIndex
+272:emscripten_glGetActiveUniformBlockiv
+273:emscripten_glGetActiveUniformBlockName
+274:emscripten_glUniformBlockBinding
+275:emscripten_glDrawArraysInstanced
+276:emscripten_glDrawElementsInstanced
+277:emscripten_glFenceSync
+278:emscripten_glIsSync
+279:emscripten_glDeleteSync
+280:emscripten_glClientWaitSync
+281:emscripten_glWaitSync
+282:emscripten_glGetInteger64v
+283:emscripten_glGetSynciv
+284:emscripten_glGetInteger64i_v
+285:emscripten_glGetBufferParameteri64v
+286:emscripten_glGenSamplers
+287:emscripten_glDeleteSamplers
+288:emscripten_glIsSampler
+289:emscripten_glBindSampler
+290:emscripten_glSamplerParameteri
+291:emscripten_glSamplerParameteriv
+292:emscripten_glSamplerParameterf
+293:emscripten_glSamplerParameterfv
+294:emscripten_glGetSamplerParameteriv
+295:emscripten_glGetSamplerParameterfv
+296:emscripten_glVertexAttribDivisor
+297:emscripten_glBindTransformFeedback
+298:emscripten_glDeleteTransformFeedbacks
+299:emscripten_glGenTransformFeedbacks
+300:emscripten_glIsTransformFeedback
+301:emscripten_glPauseTransformFeedback
+302:emscripten_glResumeTransformFeedback
+303:emscripten_glGetProgramBinary
+304:emscripten_glProgramBinary
+305:emscripten_glProgramParameteri
+306:emscripten_glInvalidateFramebuffer
+307:emscripten_glInvalidateSubFramebuffer
+308:emscripten_glTexStorage2D
+309:emscripten_glTexStorage3D
+310:emscripten_glGetInternalformativ
+311:emscripten_glVertexAttribDivisorNV
+312:emscripten_glVertexAttribDivisorARB
+313:emscripten_glDrawArraysInstancedNV
+314:emscripten_glDrawArraysInstancedARB
+315:emscripten_glDrawElementsInstancedEXT
+316:emscripten_glDrawElementsInstancedARB
+317:__wasi_environ_sizes_get
+318:__wasi_environ_get
+319:__syscall_faccessat
+320:__syscall_chdir
+321:__syscall_chmod
+322:__wasi_fd_close
+323:emscripten_memcpy_big
+324:emscripten_date_now
+325:_emscripten_get_now_is_monotonic
+326:emscripten_get_now
+327:emscripten_get_now_res
+328:__syscall_fchmod
+329:__syscall_fcntl64
+330:__syscall_openat
+331:__syscall_ioctl
+332:__wasi_fd_write
+333:__wasi_fd_read
+334:__syscall_fstat64
+335:__syscall_stat64
+336:__syscall_newfstatat
+337:__syscall_lstat64
+338:__wasi_fd_sync
+339:__syscall_ftruncate64
+340:__syscall_getcwd
+341:emscripten_console_error
+342:__wasi_fd_seek
+343:__syscall_mkdirat
+344:_localtime_js
+345:_gmtime_js
+346:_munmap_js
+347:_msync_js
+348:_mmap_js
+349:__syscall_fadvise64
+350:__wasi_fd_pread
+351:__wasi_fd_pwrite
+352:__syscall_getdents64
+353:__syscall_readlinkat
+354:__syscall_unlinkat
+355:__syscall_rmdir
+356:__syscall_renameat
+357:__syscall_fstatfs64
+358:__syscall_symlink
+359:emscripten_get_heap_max
+360:_tzset_js
+361:__syscall_utimensat
+362:__wasi_fd_fdstat_get
+363:emscripten_resize_heap
+364:strftime_l
+365:__throw_exception_with_stack_trace
+366:__syscall_connect
+367:__syscall_recvfrom
+368:__syscall_sendto
+369:__syscall_socket
+370:__wasm_call_ctors
+371:sk_abort_no_print\28\29
+372:sk_realloc_throw\28void*\2c\20unsigned\20long\29
+373:sk_free\28void*\29
+374:sk_malloc_flags\28unsigned\20long\2c\20unsigned\20int\29
+375:SkDebugf\28char\20const*\2c\20...\29
+376:SkPreMultiplyARGB\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+377:SkPreMultiplyColor\28unsigned\20int\29
+378:SkRGBA4f<\28SkAlphaType\293>::FromColor\28unsigned\20int\29
+379:SkRGBA4f<\28SkAlphaType\293>::toSkColor\28\29\20const
+380:SkRGBA4f<\28SkAlphaType\293>::toBytes_RGBA\28\29\20const
+381:SkRGBA4f<\28SkAlphaType\292>::FromPMColor\28unsigned\20int\29
+382:SkRGBA4f<\28SkAlphaType\292>::toBytes_RGBA\28\29\20const
+383:SkRGBA4f<\28SkAlphaType\292>::FromBytes_RGBA\28unsigned\20int\29
+384:portable::create_xfermode\28SkBlendMode\29
+385:portable::blit_mask_d32_a8\28unsigned\20int*\2c\20unsigned\20long\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20unsigned\20int\2c\20int\2c\20int\29
+386:portable::blit_mask_d32_a8_black\28unsigned\20int*\2c\20unsigned\20long\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20int\2c\20int\29::$_0::operator\28\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\20const
+387:portable::blit_mask_d32_a8_opaque\28unsigned\20int*\2c\20unsigned\20long\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20unsigned\20int\2c\20int\2c\20int\29::$_0::operator\28\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\20const
+388:portable::blit_mask_d32_a8_general\28unsigned\20int*\2c\20unsigned\20long\2c\20unsigned\20char\20const*\2c\20unsigned\20long\2c\20unsigned\20int\2c\20int\2c\20int\29::$_0::operator\28\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\20const
+389:portable::blit_row_color32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+390:portable::blit_row_color32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29::'lambda'\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29::operator\28\29\28skvx::Vec<4\2c\20unsigned\20int>\20const&\29\20const
+391:portable::blit_row_s32a_opaque\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int\29
+392:portable::RGBA_to_BGRA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+393:portable::RGBA_to_rgbA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+394:portable::RGBA_to_bgrA\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+395:portable::RGB_to_RGB1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+396:portable::RGB_to_BGR1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+397:portable::gray_to_RGB1\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+398:portable::grayA_to_RGBA\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+399:portable::grayA_to_rgbA\28unsigned\20int*\2c\20unsigned\20char\20const*\2c\20int\29
+400:portable::inverted_CMYK_to_RGB1\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+401:portable::inverted_CMYK_to_BGR1\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\29
+402:portable::memset16\28unsigned\20short*\2c\20unsigned\20short\2c\20int\29
+403:portable::memset32\28unsigned\20int*\2c\20unsigned\20int\2c\20int\29
+404:portable::memset64\28unsigned\20long\20long*\2c\20unsigned\20long\20long\2c\20int\29
+405:portable::rect_memset16\28unsigned\20short*\2c\20unsigned\20short\2c\20int\2c\20unsigned\20long\2c\20int\29
+406:portable::rect_memset32\28unsigned\20int*\2c\20unsigned\20int\2c\20int\2c\20unsigned\20long\2c\20int\29
+407:portable::rect_memset64\28unsigned\20long\20long*\2c\20unsigned\20long\20long\2c\20int\2c\20unsigned\20long\2c\20int\29
+408:portable::hash_fn\28void\20const*\2c\20unsigned\20long\2c\20unsigned\20int\29
+409:portable::S32_alpha_D32_filter_DX\28SkBitmapProcState\20const&\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\29
+410:portable::interpret_skvm\28skvm::InterpreterInstruction\20const*\2c\20int\2c\20int\2c\20int\2c\20int\20const*\2c\20int\2c\20int\2c\20void**\29
+411:portable::callback\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+412:portable::move_src_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+413:portable::move_dst_src\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+414:portable::clamp_0\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+415:portable::clamp_1\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+416:portable::clamp_a\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+417:portable::clamp_gamut\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+418:portable::unpremul\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+419:portable::premul\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+420:portable::premul_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+421:portable::force_opaque\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+422:portable::force_opaque_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+423:portable::set_rgb\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+424:portable::unbounded_set_rgb\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+425:portable::swap_rb\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+426:portable::swap_rb_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+427:portable::black_color\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+428:portable::white_color\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+429:portable::uniform_color\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+430:portable::unbounded_uniform_color\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+431:portable::uniform_color_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+432:portable::seed_shader\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+433:portable::dither\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+434:portable::load_a8\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+435:portable::load_a8_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+436:portable::store_a8\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+437:portable::gather_a8\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+438:portable::load_565\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+439:portable::load_565_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+440:portable::store_565\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+441:portable::gather_565\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+442:portable::load_4444\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+443:portable::load_4444_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+444:portable::store_4444\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+445:portable::gather_4444\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+446:portable::load_f16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+447:portable::load_f16_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+448:portable::store_f16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+449:portable::gather_f16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+450:portable::load_af16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+451:portable::load_af16_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+452:portable::store_af16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+453:portable::gather_af16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+454:portable::load_rgf16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+455:portable::load_rgf16_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+456:portable::store_rgf16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+457:portable::gather_rgf16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+458:portable::load_f32\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+459:portable::load_f32_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+460:portable::store_f32\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+461:portable::gather_f32\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+462:portable::load_rgf32\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+463:portable::store_rgf32\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+464:portable::load_8888\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+465:portable::load_8888_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+466:portable::store_8888\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+467:portable::gather_8888\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+468:portable::load_rg88\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+469:portable::load_rg88_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+470:portable::store_rg88\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+471:portable::gather_rg88\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+472:portable::load_a16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+473:portable::load_a16_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+474:portable::store_a16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+475:portable::gather_a16\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+476:portable::load_rg1616\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+477:portable::load_rg1616_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+478:portable::store_rg1616\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+479:portable::gather_rg1616\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+480:portable::load_16161616\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+481:portable::load_16161616_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+482:portable::store_16161616\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+483:portable::gather_16161616\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+484:portable::load_1010102\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+485:portable::load_1010102_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+486:portable::store_1010102\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+487:portable::gather_1010102\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+488:portable::alpha_to_gray\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+489:portable::alpha_to_gray_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+490:portable::bt709_luminance_or_luma_to_alpha\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+491:portable::bilerp_clamp_8888\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+492:portable::bicubic_clamp_8888\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+493:portable::store_u16_be\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+494:portable::load_src\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+495:portable::store_src\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+496:portable::store_src_a\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+497:portable::load_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+498:portable::store_dst\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+499:portable::scale_u8\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+500:portable::scale_565\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+501:portable::scale_1_float\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+502:portable::scale_native\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+503:portable::lerp_u8\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+504:portable::lerp_565\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+505:portable::lerp_1_float\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+506:portable::lerp_native\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+507:portable::dstatop\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+508:portable::dstin\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+509:portable::dstout\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+510:portable::dstover\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+511:portable::srcatop\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+512:portable::srcin\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+513:portable::srcout\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+514:portable::srcover\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+515:portable::clear\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+516:portable::modulate\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+517:portable::multiply\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+518:portable::plus_\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+519:portable::screen\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+520:portable::xor_\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+521:portable::colorburn\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+522:portable::colordodge\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+523:portable::darken\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+524:portable::difference\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+525:portable::exclusion\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+526:portable::hardlight\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+527:portable::lighten\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+528:portable::overlay\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+529:portable::softlight\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+530:portable::hue\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+531:portable::saturation\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+532:portable::color\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+533:portable::luminosity\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+534:portable::srcover_rgba_8888\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+535:portable::matrix_translate\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+536:portable::matrix_scale_translate\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+537:portable::matrix_2x3\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+538:portable::matrix_3x3\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+539:portable::matrix_3x4\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+540:portable::matrix_4x5\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+541:portable::matrix_4x3\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+542:portable::matrix_perspective\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+543:portable::parametric\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+544:portable::gamma_\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+545:portable::PQish\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+546:portable::HLGish\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+547:portable::HLGinvish\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+548:portable::mirror_x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+549:portable::repeat_x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+550:portable::mirror_y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+551:portable::repeat_y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+552:portable::decal_x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+553:portable::decal_y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+554:portable::decal_x_and_y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+555:portable::check_decal_mask\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+556:portable::negate_x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+557:portable::bilinear\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+558:portable::bicubic\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+559:portable::bilinear_nx\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+560:portable::bilinear_px\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+561:portable::bilinear_ny\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+562:portable::bilinear_py\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+563:portable::bicubic_n3x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+564:portable::bicubic_n1x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+565:portable::bicubic_p1x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+566:portable::bicubic_p3x\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+567:portable::bicubic_n3y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+568:portable::bicubic_n1y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+569:portable::bicubic_p1y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+570:portable::bicubic_p3y\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+571:portable::save_xy\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+572:portable::accumulate\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+573:portable::clamp_x_1\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+574:portable::mirror_x_1\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+575:portable::repeat_x_1\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+576:portable::evenly_spaced_gradient\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+577:portable::gradient\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+578:portable::evenly_spaced_2_stop_gradient\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+579:portable::xy_to_unit_angle\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+580:portable::xy_to_radius\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+581:portable::xy_to_2pt_conical_strip\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+582:portable::xy_to_2pt_conical_focal_on_circle\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+583:portable::xy_to_2pt_conical_well_behaved\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+584:portable::xy_to_2pt_conical_smaller\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+585:portable::xy_to_2pt_conical_greater\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+586:portable::alter_2pt_conical_compensate_focal\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+587:portable::alter_2pt_conical_unswap\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+588:portable::mask_2pt_conical_nan\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+589:portable::mask_2pt_conical_degenerates\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+590:portable::apply_vector_mask\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+591:portable::byte_tables\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+592:portable::rgb_to_hsl\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+593:portable::hsl_to_rgb\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+594:portable::gauss_a_to_rgba\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+595:portable::emboss\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+596:portable::swizzle\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+597:portable::just_return\28portable::Params*\2c\20void**\2c\20float\2c\20float\2c\20float\2c\20float\29
+598:portable::start_pipeline\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20void**\29
+599:portable::lowp::start_pipeline\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20void**\29
+600:SkOpts::Init\28\29
+601:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Clear>::~Sk4pxXfermode\28\29
+602:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Clear>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+603:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::Clear>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+604:void\20\28anonymous\20namespace\29::Sk4px::MapDstSrcAlpha<\28anonymous\20namespace\29::Sk4px\20\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29>\28int\2c\20unsigned\20int*\2c\20unsigned\20int\20const*\2c\20unsigned\20char\20const*\2c\20\28anonymous\20namespace\29::Sk4px\20\20const\28&\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\29
+605:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Src>::~Sk4pxXfermode\28\29
+606:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Src>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+607:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::Src>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+608:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Dst>::~Sk4pxXfermode\28\29
+609:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Dst>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+610:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::Dst>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+611:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcOver>::~Sk4pxXfermode\28\29
+612:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcOver>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+613:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::SrcOver>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+614:\28anonymous\20namespace\29::SrcOver::operator\28\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\20const
+615:\28anonymous\20namespace\29::Sk4px::approxMulDiv255\28\28anonymous\20namespace\29::SkNx<16\2c\20unsigned\20char>\20const&\29\20const
+616:SkRefCntBase::~SkRefCntBase\28\29
+617:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstOver>::~Sk4pxXfermode\28\29
+618:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstOver>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+619:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::DstOver>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+620:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcIn>::~Sk4pxXfermode\28\29
+621:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcIn>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+622:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::SrcIn>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+623:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstIn>::~Sk4pxXfermode\28\29
+624:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstIn>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+625:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::DstIn>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+626:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcOut>::~Sk4pxXfermode\28\29
+627:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcOut>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+628:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::SrcOut>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+629:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstOut>::~Sk4pxXfermode\28\29
+630:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstOut>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+631:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::DstOut>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+632:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcATop>::~Sk4pxXfermode\28\29
+633:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::SrcATop>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+634:\28anonymous\20namespace\29::SrcATop::operator\28\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\20const
+635:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::SrcATop>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+636:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstATop>::~Sk4pxXfermode\28\29
+637:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::DstATop>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+638:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::DstATop>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+639:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Xor>::~Sk4pxXfermode\28\29
+640:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Xor>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+641:\28anonymous\20namespace\29::Xor::operator\28\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\20const
+642:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::Xor>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+643:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Plus>::~Sk4pxXfermode\28\29
+644:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Plus>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+645:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Modulate>::~Sk4pxXfermode\28\29
+646:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Modulate>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+647:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::Modulate>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+648:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Screen>::~Sk4pxXfermode\28\29
+649:\28anonymous\20namespace\29::Sk4pxXfermode<\28anonymous\20namespace\29::Screen>::xfer32\28unsigned\20int*\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20char\20const*\29\20const
+650:\28anonymous\20namespace\29::Screen::operator\28\29\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29\20const
+651:\28anonymous\20namespace\29::Sk4px\20\28anonymous\20namespace\29::xfer_aa<\28anonymous\20namespace\29::Screen>\28\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\2c\20\28anonymous\20namespace\29::Sk4px\20const&\29
+652:SkSemaphore::~SkSemaphore\28\29
+653:SkSemaphore::osSignal\28int\29
+654:SkSemaphore::osWait\28\29
+655:GrGLTextureParameters::SamplerOverriddenState::SamplerOverriddenState\28\29
+656:GrGLTextureParameters::NonsamplerState::NonsamplerState\28\29
+657:GrGLTextureParameters::invalidate\28\29
+658:GrGLTextureParameters::set\28GrGLTextureParameters::SamplerOverriddenState\20const*\2c\20GrGLTextureParameters::NonsamplerState\20const&\2c\20unsigned\20long\20long\29
+659:GrGLBackendTextureInfo::assign\28GrGLBackendTextureInfo\20const&\2c\20bool\29
+660:GrGLBackendTextureInfo::cleanup\28\29
+661:GrMockRenderTargetInfo::getBackendFormat\28\29\20const
+662:GrMockTextureInfo::getBackendFormat\28\29\20const
+663:GrBackendFormat::GrBackendFormat\28GrBackendFormat\20const&\29
+664:GrBackendFormat::operator=\28GrBackendFormat\20const&\29
+665:GrBackendFormat::GrBackendFormat\28unsigned\20int\2c\20unsigned\20int\29
+666:GrBackendFormat::asGLFormat\28\29\20const
+667:GrGLFormatFromGLEnum\28unsigned\20int\29
+668:GrBackendFormat::asMockColorType\28\29\20const
+669:GrBackendFormat::asMockCompressionType\28\29\20const
+670:GrBackendFormat::isMockStencilFormat\28\29\20const
+671:GrBackendFormat::makeTexture2D\28\29\20const
+672:GrBackendFormat::MakeMock\28GrColorType\2c\20SkImage::CompressionType\2c\20bool\29
+673:GrBackendFormat::operator==\28GrBackendFormat\20const&\29\20const
+674:GrBackendTexture::GrBackendTexture\28\29
+675:GrBackendTexture::GrBackendTexture\28int\2c\20int\2c\20GrMipmapped\2c\20GrGLTextureInfo\2c\20sk_sp\29
+676:GrBackendTexture::getGLTextureParams\28\29\20const
+677:GrBackendTexture::GrBackendTexture\28int\2c\20int\2c\20GrMipmapped\2c\20GrGLTextureInfo\20const&\29
+678:GrBackendTexture::~GrBackendTexture\28\29
+679:GrBackendTexture::GrBackendTexture\28GrBackendTexture\20const&\29
+680:GrBackendTexture::operator=\28GrBackendTexture\20const&\29
+681:GrBackendTexture::getGLTextureInfo\28GrGLTextureInfo*\29\20const
+682:GrBackendTexture::isProtected\28\29\20const
+683:GrBackendTexture::isSameTexture\28GrBackendTexture\20const&\29
+684:GrBackendTexture::getBackendFormat\28\29\20const
+685:GrBackendRenderTarget::GrBackendRenderTarget\28\29
+686:GrBackendRenderTarget::GrBackendRenderTarget\28int\2c\20int\2c\20int\2c\20int\2c\20GrGLFramebufferInfo\20const&\29
+687:GrBackendRenderTarget::~GrBackendRenderTarget\28\29
+688:GrBackendRenderTarget::getGLFramebufferInfo\28GrGLFramebufferInfo*\29\20const
+689:GrBackendRenderTarget::getBackendFormat\28\29\20const
+690:GrBackendRenderTarget::isProtected\28\29\20const
+691:GrDriverBugWorkarounds::GrDriverBugWorkarounds\28\29
+692:GrDriverBugWorkarounds::applyOverrides\28GrDriverBugWorkarounds\20const&\29
+693:GrDriverBugWorkarounds::~GrDriverBugWorkarounds\28\29
+694:GrShaderCaps::GrShaderCaps\28GrContextOptions\20const&\29
+695:GrShaderCaps::applyOptionsOverrides\28GrContextOptions\20const&\29
+696:GrShaderCaps::~GrShaderCaps\28\29
+697:SkEventTracer::GetInstance\28\29
+698:SkEventTracer::~SkEventTracer\28\29
+699:SkDefaultEventTracer::~SkDefaultEventTracer\28\29
+700:SkDefaultEventTracer::getCategoryGroupEnabled\28char\20const*\29
+701:SkDefaultEventTracer::getCategoryGroupName\28unsigned\20char\20const*\29
+702:SkDefaultEventTracer::addTraceEvent\28char\2c\20unsigned\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\20long\2c\20int\2c\20char\20const**\2c\20unsigned\20char\20const*\2c\20unsigned\20long\20long\20const*\2c\20unsigned\20char\29
+703:SkDefaultEventTracer::updateTraceEventDuration\28unsigned\20char\20const*\2c\20char\20const*\2c\20unsigned\20long\20long\29
+704:powf_
+705:classify\28skcms_TransferFunction\20const&\2c\20TF_PQish*\2c\20TF_HLGish*\29
+706:skcms_TransferFunction_eval
+707:skcms_MaxRoundtripError
+708:skcms_GetTagBySignature
+709:skcms_Parse
+710:read_curve\28unsigned\20char\20const*\2c\20unsigned\20int\2c\20skcms_Curve*\2c\20unsigned\20int*\29
+711:read_to_XYZD50\28skcms_ICCTag\20const*\2c\20skcms_ICCTag\20const*\2c\20skcms_ICCTag\20const*\2c\20skcms_Matrix3x3*\29
+712:read_a2b\28skcms_ICCTag\20const*\2c\20skcms_A2B*\2c\20bool\29
+713:fit_linear\28skcms_Curve\20const*\2c\20int\2c\20float\2c\20float*\2c\20float*\2c\20float*\29
+714:skcms_sRGB_profile
+715:skcms_sRGB_TransferFunction
+716:skcms_sRGB_Inverse_TransferFunction
+717:skcms_ApproximatelyEqualProfiles
+718:skcms_TransformWithPalette
+719:skcms_Transform
+720:skcms_TRCs_AreApproximateInverse
+721:skcms_AdaptToXYZD50
+722:skcms_Matrix3x3_concat
+723:skcms_PrimariesToXYZD50
+724:skcms_Matrix3x3_invert
+725:skcms_TransferFunction_invert
+726:select_curve_op\28skcms_Curve\20const*\2c\20int\29
+727:baseline::exec_ops\28Op\20const*\2c\20void\20const**\2c\20char\20const*\2c\20char*\2c\20int\29
+728:SkUTF::CountUTF8\28char\20const*\2c\20unsigned\20long\29
+729:SkUTF::CountUTF16\28unsigned\20short\20const*\2c\20unsigned\20long\29
+730:SkUTF::NextUTF8\28char\20const**\2c\20char\20const*\29
+731:SkUTF::NextUTF16\28unsigned\20short\20const**\2c\20unsigned\20short\20const*\29
+732:SkUTF::NextUTF32\28int\20const**\2c\20int\20const*\29
+733:SkUTF::ToUTF8\28int\2c\20char*\29
+734:SkUTF::ToUTF16\28int\2c\20unsigned\20short*\29
+735:SkSqrtBits\28int\2c\20int\29
+736:SkSafeMath::Add\28unsigned\20long\2c\20unsigned\20long\29
+737:SkSafeMath::Mul\28unsigned\20long\2c\20unsigned\20long\29
+738:sk_malloc_throw\28unsigned\20long\2c\20unsigned\20long\29
+739:sk_malloc_canfail\28unsigned\20long\2c\20unsigned\20long\29
+740:SkStrEndsWith\28char\20const*\2c\20char\29
+741:SkStrAppendU32\28char*\2c\20unsigned\20int\29
+742:SkStrAppendS32\28char*\2c\20int\29
+743:SkStrAppendU64\28char*\2c\20unsigned\20long\20long\2c\20int\29
+744:SkStrAppendScalar\28char*\2c\20float\29
+745:SkString::SkString\28\29
+746:SkString::SkString\28unsigned\20long\29
+747:SkString::SkString\28char\20const*\29
+748:SkString::SkString\28char\20const*\2c\20unsigned\20long\29
+749:SkString::SkString\28SkString\20const&\29
+750:SkString::SkString\28SkString&&\29
+751:SkString::SkString\28std::__2::basic_string\2c\20std::__2::allocator>\20const&\29
+752:SkString::~SkString\28\29
+753:SkString::equals\28SkString\20const&\29\20const
+754:SkString::equals\28char\20const*\29\20const
+755:SkString::operator=\28SkString\20const&\29
+756:SkString::operator=\28SkString&&\29
+757:SkString::swap\28SkString&\29
+758:SkString::operator=\28char\20const*\29
+759:SkString::reset\28\29
+760:SkString::writable_str\28\29
+761:SkString::resize\28unsigned\20long\29
+762:SkString::set\28char\20const*\29
+763:SkString::set\28char\20const*\2c\20unsigned\20long\29
+764:SkString::insert\28unsigned\20long\2c\20char\20const*\29
+765:SkString::insert\28unsigned\20long\2c\20char\20const*\2c\20unsigned\20long\29
+766:SkString::insertUnichar\28unsigned\20long\2c\20int\29
+767:SkString::insertS32\28unsigned\20long\2c\20int\29
+768:SkString::insertU32\28unsigned\20long\2c\20unsigned\20int\29
+769:SkString::insertHex\28unsigned\20long\2c\20unsigned\20int\2c\20int\29
+770:SkString::insertScalar\28unsigned\20long\2c\20float\29
+771:SkString::printf\28char\20const*\2c\20...\29
+772:SkString::printVAList\28char\20const*\2c\20void*\29
+773:SkString::appendf\28char\20const*\2c\20...\29
+774:SkString::appendVAList\28char\20const*\2c\20void*\29
+775:SkString::prependVAList\28char\20const*\2c\20void*\29
+776:SkString::remove\28unsigned\20long\2c\20unsigned\20long\29
+777:SkStringPrintf\28char\20const*\2c\20...\29
+778:SkStrSplit\28char\20const*\2c\20char\20const*\2c\20SkStrSplitMode\2c\20SkTArray*\29
+779:SkTArray::checkRealloc\28int\2c\20SkTArray::ReallocType\29
+780:sk_fmunmap\28void\20const*\2c\20unsigned\20long\29
+781:sk_fmmap\28_IO_FILE*\2c\20unsigned\20long*\29
+782:sk_qread\28_IO_FILE*\2c\20void*\2c\20unsigned\20long\2c\20unsigned\20long\29
+783:sk_fopen\28char\20const*\2c\20SkFILE_Flags\29
+784:sk_fgetsize\28_IO_FILE*\29
+785:sk_fwrite\28void\20const*\2c\20unsigned\20long\2c\20_IO_FILE*\29
+786:sk_fflush\28_IO_FILE*\29
+787:sk_ftell\28_IO_FILE*\29
+788:sk_fclose\28_IO_FILE*\29
+789:SkData::~SkData\28\29
+790:SkData::equals\28SkData\20const*\29\20const
+791:SkData::operator\20delete\28void*\29
+792:SkData::PrivateNewWithCopy\28void\20const*\2c\20unsigned\20long\29
+793:SkData::MakeEmpty\28\29
+794:SkData::DummyReleaseProc\28void\20const*\2c\20void*\29
+795:SkData::MakeFromMalloc\28void\20const*\2c\20unsigned\20long\29
+796:sk_free_releaseproc\28void\20const*\2c\20void*\29
+797:SkData::MakeWithCopy\28void\20const*\2c\20unsigned\20long\29
+798:SkData::MakeUninitialized\28unsigned\20long\29
+799:SkData::MakeWithProc\28void\20const*\2c\20unsigned\20long\2c\20void\20\28*\29\28void\20const*\2c\20void*\29\2c\20void*\29
+800:SkData::MakeFromFILE\28_IO_FILE*\29
+801:sk_mmap_releaseproc\28void\20const*\2c\20void*\29
+802:SkData::MakeFromFileName\28char\20const*\29
+803:SkData::MakeSubset\28SkData\20const*\2c\20unsigned\20long\2c\20unsigned\20long\29
+804:sk_dataref_releaseproc\28void\20const*\2c\20void*\29
+805:SkData::MakeFromStream\28SkStream*\2c\20unsigned\20long\29
+806:SkColorSpacePrimaries::toXYZD50\28skcms_Matrix3x3*\29\20const
+807:SkColorSpace::MakeRGB\28skcms_TransferFunction\20const&\2c\20skcms_Matrix3x3\20const&\29
+808:xyz_almost_equal\28skcms_Matrix3x3\20const&\2c\20skcms_Matrix3x3\20const&\29
+809:SkColorSpace::MakeSRGB\28\29
+810:SkColorSpace::MakeSRGBLinear\28\29
+811:sk_srgb_singleton\28\29
+812:SkColorSpaceSingletonFactory::Make\28skcms_TransferFunction\20const&\2c\20skcms_Matrix3x3\20const&\29
+813:sk_srgb_linear_singleton\28\29
+814:SkColorSpace::isNumericalTransferFn\28skcms_TransferFunction*\29\20const
+815:SkColorSpace::transferFn\28skcms_TransferFunction*\29\20const
+816:SkColorSpace::invTransferFn\28skcms_TransferFunction*\29\20const
+817:SkColorSpace::toXYZD50\28skcms_Matrix3x3*\29\20const
+818:SkColorSpace::gamutTransformTo\28SkColorSpace\20const*\2c\20skcms_Matrix3x3*\29\20const
+819:SkColorSpace::isSRGB\28\29\20const
+820:SkColorSpace::gammaCloseToSRGB\28\29\20const
+821:SkColorSpace::gammaIsLinear\28\29\20const
+822:SkColorSpace::makeLinearGamma\28\29\20const
+823:SkColorSpace::makeSRGBGamma\28\29\20const
+824:SkColorSpace::toProfile\28skcms_ICCProfile*\29\20const
+825:SkColorSpace::Make\28skcms_ICCProfile\20const&\29
+826:SkColorSpace::serialize\28\29\20const
+827:SkColorSpace::Deserialize\28void\20const*\2c\20unsigned\20long\29
+828:SkColorSpace::Equals\28SkColorSpace\20const*\2c\20SkColorSpace\20const*\29
+829:SkIRect::intersect\28SkIRect\20const&\2c\20SkIRect\20const&\29
+830:SkIRect::join\28SkIRect\20const&\29
+831:SkRect::toQuad\28SkPoint*\29\20const
+832:SkRect::setBoundsCheck\28SkPoint\20const*\2c\20int\29
+833:SkRect::setBoundsNoCheck\28SkPoint\20const*\2c\20int\29
+834:SkRect::intersect\28SkRect\20const&\29
+835:SkRect::intersect\28SkRect\20const&\2c\20SkRect\20const&\29
+836:SkRect::join\28SkRect\20const&\29
+837:SkRectPriv::Subtract\28SkIRect\20const&\2c\20SkIRect\20const&\2c\20SkIRect*\29
+838:SkColorTypeBytesPerPixel\28SkColorType\29
+839:SkColorTypeIsAlwaysOpaque\28SkColorType\29
+840:SkColorInfo::bytesPerPixel\28\29\20const
+841:SkColorInfo::shiftPerPixel\28\29\20const
+842:SkImageInfo::computeOffset\28int\2c\20int\2c\20unsigned\20long\29\20const
+843:SkImageInfo::computeByteSize\28unsigned\20long\29\20const
+844:SkColorTypeValidateAlphaType\28SkColorType\2c\20SkAlphaType\2c\20SkAlphaType*\29
+845:SkReadPixelsRec::trim\28int\2c\20int\29
+846:SkWritePixelsRec::trim\28int\2c\20int\29
+847:SkCachedData::SkCachedData\28void*\2c\20unsigned\20long\29
+848:SkCachedData::SkCachedData\28unsigned\20long\2c\20SkDiscardableMemory*\29
+849:SkCachedData::~SkCachedData\28\29
+850:SkCachedData::~SkCachedData\28\29.1
+851:SkCachedData::internalRef\28bool\29\20const
+852:SkCachedData::inMutexRef\28bool\29
+853:SkCachedData::internalUnref\28bool\29\20const
+854:SkCachedData::inMutexUnref\28bool\29
+855:SkCachedData::onDataChange\28void*\2c\20void*\29
+856:SkFloatToHalf\28float\29
+857:SkHalfToFloat\28unsigned\20short\29
+858:SkArenaAlloc::SkArenaAlloc\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29
+859:end_chain\28char*\29
+860:SkArenaAlloc::installFooter\28char*\20\28*\29\28char*\29\2c\20unsigned\20int\29
+861:SkArenaAlloc::SkipPod\28char*\29
+862:SkArenaAlloc::NextBlock\28char*\29
+863:SkArenaAlloc::ensureSpace\28unsigned\20int\2c\20unsigned\20int\29
+864:SkArenaAlloc::allocObjectWithFooter\28unsigned\20int\2c\20unsigned\20int\29
+865:SkArenaAllocWithReset::SkArenaAllocWithReset\28char*\2c\20unsigned\20long\2c\20unsigned\20long\29
+866:SkArenaAllocWithReset::reset\28\29
+867:SkArenaAlloc::~SkArenaAlloc\28\29
+868:SkIDChangeListener::SkIDChangeListener\28\29
+869:SkIDChangeListener::~SkIDChangeListener\28\29
+870:SkIDChangeListener::~SkIDChangeListener\28\29.1
+871:SkIDChangeListener::List::List\28\29
+872:SkIDChangeListener::List::~List\28\29
+873:SkIDChangeListener::List::add\28sk_sp\2c\20bool\29
+874:SkTDArray::append\28int\2c\20SkIDChangeListener*\20const*\29
+875:SkIDChangeListener::List::changed\28bool\29
+876:SkIDChangeListener::List::reset\28bool\29
+877:SkRBuffer::skip\28unsigned\20long\29
+878:SkRBuffer::read\28void*\2c\20unsigned\20long\29
+879:SkRBuffer::skipToAlign4\28\29
+880:SkWBuffer::writeNoSizeCheck\28void\20const*\2c\20unsigned\20long\29
+881:SkWBuffer::padToAlign4\28\29
+882:SkRRect::setRectXY\28SkRect\20const&\2c\20float\2c\20float\29
+883:SkRRect::initializeRect\28SkRect\20const&\29
+884:SkRRect::setNinePatch\28SkRect\20const&\2c\20float\2c\20float\2c\20float\2c\20float\29
+885:SkRRect::setRectRadii\28SkRect\20const&\2c\20SkPoint\20const*\29
+886:SkRRect::scaleRadii\28\29
+887:SkRRect::isValid\28\29\20const
+888:SkRRect::computeType\28\29
+889:SkRRect::AreRectAndRadiiValid\28SkRect\20const&\2c\20SkPoint\20const*\29
+890:SkRRect::checkCornerContainment\28float\2c\20float\29\20const
+891:SkRRectPriv::AllCornersCircular\28SkRRect\20const&\2c\20float\29
+892:SkRRect::contains\28SkRect\20const&\29\20const
+893:SkRRect::transform\28SkMatrix\20const&\2c\20SkRRect*\29\20const
+894:SkRRect::inset\28float\2c\20float\2c\20SkRRect*\29\20const
+895:SkRRect::writeToMemory\28void*\29\20const
+896:SkRRectPriv::WriteToBuffer\28SkRRect\20const&\2c\20SkWBuffer*\29
+897:SkRRect::readFromMemory\28void\20const*\2c\20unsigned\20long\29
+898:SkRRectPriv::ReadFromBuffer\28SkRBuffer*\2c\20SkRRect*\29
+899:SkRRectPriv::InnerBounds\28SkRRect\20const&\29
+900:SkRRectPriv::ConservativeIntersect\28SkRRect\20const&\2c\20SkRRect\20const&\29
+901:SkPathRef::Editor::Editor\28sk_sp*\2c\20int\2c\20int\29
+902:SkPathRef::incReserve\28int\2c\20int\29
+903:SkPathRef::copy\28SkPathRef\20const&\2c\20int\2c\20int\29
+904:SkPathRef::resetToSize\28int\2c\20int\2c\20int\2c\20int\2c\20int\29
+905:SkPathRef::approximateBytesUsed\28\29\20const
+906:SkPathRef::~SkPathRef\28\29
+907:SkPathRef::CreateEmpty\28\29
+908:SkPathRef::CreateTransformedCopy\28sk_sp*\2c\20SkPathRef\20const&\2c\20SkMatrix\20const&\29
+909:SkPathRef::Rewind\28sk_sp*\29
+910:SkPathRef::operator==\28SkPathRef\20const&\29\20const
+911:SkPathRef::growForVerbsInPath\28SkPathRef\20const&\29
+912:SkTDArray::append\28int\2c\20unsigned\20char\20const*\29
+913:SkTDArray::append\28int\2c\20float\20const*\29
+914:SkPathRef::growForRepeatedVerb\28int\2c\20int\2c\20float**\29
+915:SkPathRef::growForVerb\28int\2c\20float\29
+916:SkTDArray::append\28\29
+917:SkPathRef::genID\28\29\20const
+918:SkPathRef::addGenIDChangeListener\28sk_sp\29
+919:SkPathRef::getRRect\28\29\20const
+920:SkPathEdgeIter::SkPathEdgeIter\28SkPath\20const&\29
+921:AlmostBequalUlps\28float\2c\20float\29
+922:AlmostPequalUlps\28float\2c\20float\29
+923:AlmostDequalUlps\28double\2c\20double\29
+924:AlmostEqualUlps\28float\2c\20float\29
+925:AlmostEqualUlpsNoNormalCheck\28float\2c\20float\29
+926:AlmostEqualUlps_Pin\28float\2c\20float\29
+927:NotAlmostEqualUlps\28float\2c\20float\29
+928:NotAlmostEqualUlps_Pin\28float\2c\20float\29
+929:NotAlmostDequalUlps\28float\2c\20float\29
+930:RoughlyEqualUlps\28float\2c\20float\29
+931:AlmostBetweenUlps\28float\2c\20float\2c\20float\29
+932:AlmostLessUlps\28float\2c\20float\29
+933:AlmostLessOrEqualUlps\28float\2c\20float\29
+934:SkDCubeRoot\28double\29
+935:SkOpGlobalState::SkOpGlobalState\28SkOpContourHead*\2c\20SkArenaAlloc*\29
+936:SkDLine::ptAtT\28double\29\20const
+937:SkDLine::exactPoint\28SkDPoint\20const&\29\20const
+938:SkDLine::nearPoint\28SkDPoint\20const&\2c\20bool*\29\20const
+939:SkDLine::nearRay\28SkDPoint\20const&\29\20const
+940:SkDLine::ExactPointH\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+941:SkDLine::NearPointH\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+942:SkDLine::ExactPointV\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+943:SkDLine::NearPointV\28SkDPoint\20const&\2c\20double\2c\20double\2c\20double\29
+944:SkIntersections::closestTo\28double\2c\20double\2c\20SkDPoint\20const&\2c\20double*\29\20const
+945:SkIntersections::flip\28\29
+946:SkIntersections::insert\28double\2c\20double\2c\20SkDPoint\20const&\29
+947:SkIntersections::insertNear\28double\2c\20double\2c\20SkDPoint\20const&\2c\20SkDPoint\20const&\29
+948:SkIntersections::insertCoincident\28double\2c\20double\2c\20SkDPoint\20const&\29
+949:SkIntersections::setCoincident\28int\29
+950:SkIntersections::merge\28SkIntersections\20const&\2c\20int\2c\20SkIntersections\20const&\2c\20int\29
+951:SkIntersections::mostOutside\28double\2c\20double\2c\20SkDPoint\20const&\29\20const
+952:SkIntersections::removeOne\28int\29
+953:SkDCubic::convexHull\28char*\29\20const
+954:rotate\28SkDCubic\20const&\2c\20int\2c\20int\2c\20SkDCubic&\29
+955:SkIntersections::cleanUpParallelLines\28bool\29
+956:SkIntersections::intersectRay\28SkDLine\20const&\2c\20SkDLine\20const&\29
+957:SkIntersections::intersect\28SkDLine\20const&\2c\20SkDLine\20const&\29
+958:SkIntersections::HorizontalIntercept\28SkDLine\20const&\2c\20double\29
+959:SkIntersections::horizontal\28SkDLine\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+960:SkIntersections::VerticalIntercept\28SkDLine\20const&\2c\20double\29
+961:SkIntersections::vertical\28SkDLine\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+962:SkIntersections::horizontal\28SkDConic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+963:LineConicIntersections::horizontalIntersect\28double\2c\20double\2c\20double\2c\20bool\29
+964:LineConicIntersections::addNearHorizontalEndPoints\28double\2c\20double\2c\20double\29
+965:LineConicIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineConicIntersections::PinTPoint\29
+966:LineConicIntersections::checkCoincident\28\29
+967:SkIntersections::vertical\28SkDConic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+968:LineConicIntersections::verticalIntersect\28double\2c\20double\2c\20double\2c\20bool\29
+969:LineConicIntersections::addNearVerticalEndPoints\28double\2c\20double\2c\20double\29
+970:SkIntersections::intersect\28SkDConic\20const&\2c\20SkDLine\20const&\29
+971:LineConicIntersections::intersect\28\29
+972:LineConicIntersections::addNearEndPoints\28\29
+973:SkIntersections::intersectRay\28SkDConic\20const&\2c\20SkDLine\20const&\29
+974:SkIntersections::HorizontalIntercept\28SkDConic\20const&\2c\20float\2c\20double*\29
+975:SkIntersections::VerticalIntercept\28SkDConic\20const&\2c\20float\2c\20double*\29
+976:LineConicIntersections::addLineNearEndPoints\28\29
+977:SkDConic::FindExtrema\28double\20const*\2c\20float\2c\20double*\29
+978:SkDConic::dxdyAtT\28double\29\20const
+979:SkDConic::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+980:SkDConic::ptAtT\28double\29\20const
+981:SkDConic::subDivide\28double\2c\20double\29\20const
+982:SkDConic::subDivide\28SkDPoint\20const&\2c\20SkDPoint\20const&\2c\20double\2c\20double\2c\20float*\29\20const
+983:SkTConic::intersectRay\28SkIntersections*\2c\20SkDLine\20const&\29\20const
+984:SkTConic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+985:SkTConic::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+986:SkTConic::setBounds\28SkDRect*\29\20const
+987:SkTConic::~SkTConic\28\29
+988:SkTConic::operator\5b\5d\28int\29\20const
+989:SkTConic::operator\5b\5d\28int\29
+990:SkTConic::collapsed\28\29\20const
+991:SkTConic::controlsInside\28\29\20const
+992:SkTConic::debugInit\28\29
+993:SkTConic::dxdyAtT\28double\29\20const
+994:SkTConic::hullIntersects\28SkDConic\20const&\2c\20bool*\29\20const
+995:SkTConic::hullIntersects\28SkTCurve\20const&\2c\20bool*\29\20const
+996:SkTConic::IsConic\28\29\20const
+997:SkTConic::make\28SkArenaAlloc&\29\20const
+998:SkTConic*\20SkArenaAlloc::make\28\29::'lambda'\28char*\29::__invoke\28char*\29
+999:SkTConic::maxIntersections\28\29\20const
+1000:SkTConic::otherPts\28int\2c\20SkDPoint\20const**\29\20const
+1001:SkTConic::pointCount\28\29\20const
+1002:SkTConic::pointLast\28\29\20const
+1003:SkTConic::ptAtT\28double\29\20const
+1004:SkTConic::subDivide\28double\2c\20double\2c\20SkTCurve*\29\20const
+1005:SkDRect::setBounds\28SkDQuad\20const&\2c\20SkDQuad\20const&\2c\20double\2c\20double\29
+1006:SkDRect::setBounds\28SkDConic\20const&\2c\20SkDConic\20const&\2c\20double\2c\20double\29
+1007:SkDRect::setBounds\28SkDCubic\20const&\2c\20SkDCubic\20const&\2c\20double\2c\20double\29
+1008:SkDRect::setBounds\28SkTCurve\20const&\29
+1009:SkDCurve::nearPoint\28SkPath::Verb\2c\20SkDPoint\20const&\2c\20SkDPoint\20const&\29\20const
+1010:SkDCurve::offset\28SkPath::Verb\2c\20SkDVector\20const&\29
+1011:SkDCurve::setConicBounds\28SkPoint\20const*\2c\20float\2c\20double\2c\20double\2c\20SkPathOpsBounds*\29
+1012:SkDCurve::setCubicBounds\28SkPoint\20const*\2c\20float\2c\20double\2c\20double\2c\20SkPathOpsBounds*\29
+1013:SkDCurve::setQuadBounds\28SkPoint\20const*\2c\20float\2c\20double\2c\20double\2c\20SkPathOpsBounds*\29
+1014:SkDCurveSweep::setCurveHullSweep\28SkPath::Verb\29
+1015:dline_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+1016:dquad_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+1017:dconic_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+1018:dcubic_intersect_ray\28SkDCurve\20const&\2c\20SkDLine\20const&\2c\20SkIntersections*\29
+1019:SkIntersections::horizontal\28SkDQuad\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+1020:LineQuadraticIntersections::horizontalIntersect\28double\2c\20double\2c\20double\2c\20bool\29
+1021:LineQuadraticIntersections::addNearHorizontalEndPoints\28double\2c\20double\2c\20double\29
+1022:LineQuadraticIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineQuadraticIntersections::PinTPoint\29
+1023:LineQuadraticIntersections::checkCoincident\28\29
+1024:SkIntersections::vertical\28SkDQuad\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+1025:LineQuadraticIntersections::verticalIntersect\28double\2c\20double\2c\20double\2c\20bool\29
+1026:LineQuadraticIntersections::addNearVerticalEndPoints\28double\2c\20double\2c\20double\29
+1027:SkIntersections::intersect\28SkDQuad\20const&\2c\20SkDLine\20const&\29
+1028:LineQuadraticIntersections::intersect\28\29
+1029:LineQuadraticIntersections::addNearEndPoints\28\29
+1030:SkIntersections::intersectRay\28SkDQuad\20const&\2c\20SkDLine\20const&\29
+1031:SkIntersections::HorizontalIntercept\28SkDQuad\20const&\2c\20float\2c\20double*\29
+1032:SkIntersections::VerticalIntercept\28SkDQuad\20const&\2c\20float\2c\20double*\29
+1033:SkDQuad::horizontalIntersect\28double\2c\20double*\29\20const
+1034:LineQuadraticIntersections::addLineNearEndPoints\28\29
+1035:SkDPoint::ApproximatelyEqual\28SkPoint\20const&\2c\20SkPoint\20const&\29
+1036:SkDQuad::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+1037:SkDQuad::otherPts\28int\2c\20SkDPoint\20const**\29\20const
+1038:SkDQuad::hullIntersects\28SkDConic\20const&\2c\20bool*\29\20const
+1039:SkDQuad::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+1040:SkDQuad::AddValidTs\28double*\2c\20int\2c\20double*\29
+1041:SkDQuad::RootsValidT\28double\2c\20double\2c\20double\2c\20double*\29
+1042:SkDQuad::RootsReal\28double\2c\20double\2c\20double\2c\20double*\29
+1043:SkDQuad::isLinear\28int\2c\20int\29\20const
+1044:SkDQuad::dxdyAtT\28double\29\20const
+1045:SkDQuad::ptAtT\28double\29\20const
+1046:SkDQuad::monotonicInX\28\29\20const
+1047:SkDQuad::monotonicInY\28\29\20const
+1048:SkDQuad::subDivide\28double\2c\20double\29\20const
+1049:SkDQuad::subDivide\28SkDPoint\20const&\2c\20SkDPoint\20const&\2c\20double\2c\20double\29\20const
+1050:SkDQuad::FindExtrema\28double\20const*\2c\20double*\29
+1051:SkTQuad::intersectRay\28SkIntersections*\2c\20SkDLine\20const&\29\20const
+1052:SkTQuad::hullIntersects\28SkDConic\20const&\2c\20bool*\29\20const
+1053:SkTQuad::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+1054:SkTQuad::setBounds\28SkDRect*\29\20const
+1055:SkTQuad::~SkTQuad\28\29
+1056:SkTQuad::operator\5b\5d\28int\29\20const
+1057:SkTQuad::operator\5b\5d\28int\29
+1058:SkTQuad::collapsed\28\29\20const
+1059:SkTQuad::controlsInside\28\29\20const
+1060:SkTQuad::debugInit\28\29
+1061:SkTQuad::dxdyAtT\28double\29\20const
+1062:SkTQuad::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+1063:SkTQuad::hullIntersects\28SkTCurve\20const&\2c\20bool*\29\20const
+1064:SkTQuad::IsConic\28\29\20const
+1065:SkTQuad::make\28SkArenaAlloc&\29\20const
+1066:SkTQuad*\20SkArenaAlloc::make\28\29::'lambda'\28char*\29::__invoke\28char*\29
+1067:SkTQuad::maxIntersections\28\29\20const
+1068:SkTQuad::otherPts\28int\2c\20SkDPoint\20const**\29\20const
+1069:SkTQuad::pointCount\28\29\20const
+1070:SkTQuad::pointLast\28\29\20const
+1071:SkTQuad::ptAtT\28double\29\20const
+1072:SkTQuad::subDivide\28double\2c\20double\2c\20SkTCurve*\29\20const
+1073:SkDCubic::binarySearch\28double\2c\20double\2c\20double\2c\20SkDCubic::SearchAxis\29\20const
+1074:SkDCubic::ptAtT\28double\29\20const
+1075:SkDCubic::chopAt\28double\29\20const
+1076:SkDCubic::Coefficients\28double\20const*\2c\20double*\2c\20double*\2c\20double*\2c\20double*\29
+1077:SkDCubic::hullIntersects\28SkDPoint\20const*\2c\20int\2c\20bool*\29\20const
+1078:SkDCubic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+1079:SkDCubic::hullIntersects\28SkDConic\20const&\2c\20bool*\29\20const
+1080:SkDCubic::isLinear\28int\2c\20int\29\20const
+1081:SkDPoint::approximatelyDEqual\28SkDPoint\20const&\29\20const
+1082:SkDCubic::ComplexBreak\28SkPoint\20const*\2c\20float*\29
+1083:SkDCubic::RootsValidT\28double\2c\20double\2c\20double\2c\20double\2c\20double*\29
+1084:SkDCubic::monotonicInX\28\29\20const
+1085:SkDCubic::monotonicInY\28\29\20const
+1086:SkDCubic::findInflections\28double*\29\20const
+1087:SkDCubic::searchRoots\28double*\2c\20int\2c\20double\2c\20SkDCubic::SearchAxis\2c\20double*\29\20const
+1088:void\20SkTIntroSort\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29>\28int\2c\20double*\2c\20int\2c\20void\20SkTQSort\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29\20const&\29
+1089:SkDCubic::RootsReal\28double\2c\20double\2c\20double\2c\20double\2c\20double*\29
+1090:SkDCubic::dxdyAtT\28double\29\20const
+1091:SkDCubic::FindExtrema\28double\20const*\2c\20double*\29
+1092:SkDCubic::subDivide\28double\2c\20double\29\20const
+1093:SkDCubic::subDivide\28SkDPoint\20const&\2c\20SkDPoint\20const&\2c\20double\2c\20double\2c\20SkDPoint*\29\20const
+1094:SkDCubic::toFloatPoints\28SkPoint*\29\20const
+1095:SkTCubic::intersectRay\28SkIntersections*\2c\20SkDLine\20const&\29\20const
+1096:SkTCubic::hullIntersects\28SkDQuad\20const&\2c\20bool*\29\20const
+1097:SkTCubic::hullIntersects\28SkDConic\20const&\2c\20bool*\29\20const
+1098:SkTCubic::setBounds\28SkDRect*\29\20const
+1099:SkTCubic::~SkTCubic\28\29
+1100:SkTCubic::operator\5b\5d\28int\29\20const
+1101:SkTCubic::operator\5b\5d\28int\29
+1102:SkTCubic::collapsed\28\29\20const
+1103:SkDPoint::approximatelyEqual\28SkDPoint\20const&\29\20const
+1104:SkTCubic::controlsInside\28\29\20const
+1105:SkTCubic::debugInit\28\29
+1106:SkTCubic::dxdyAtT\28double\29\20const
+1107:SkTCubic::hullIntersects\28SkDCubic\20const&\2c\20bool*\29\20const
+1108:SkTCubic::hullIntersects\28SkTCurve\20const&\2c\20bool*\29\20const
+1109:SkTCubic::IsConic\28\29\20const
+1110:SkTCubic::make\28SkArenaAlloc&\29\20const
+1111:SkTCubic*\20SkArenaAlloc::make\28\29::'lambda'\28char*\29::__invoke\28char*\29
+1112:SkTCubic::maxIntersections\28\29\20const
+1113:SkTCubic::otherPts\28int\2c\20SkDPoint\20const**\29\20const
+1114:SkTCubic::pointCount\28\29\20const
+1115:SkTCubic::pointLast\28\29\20const
+1116:SkTCubic::ptAtT\28double\29\20const
+1117:SkTCubic::subDivide\28double\2c\20double\2c\20SkTCurve*\29\20const
+1118:SkTCurve::~SkTCurve\28\29
+1119:void\20SkTHeapSort\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29>\28double*\2c\20unsigned\20long\2c\20void\20SkTQSort\28double*\2c\20double*\29::'lambda'\28double\20const&\2c\20double\20const&\29\20const&\29
+1120:SkIntersections::horizontal\28SkDCubic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+1121:LineCubicIntersections::horizontalIntersect\28double\2c\20double\2c\20double\2c\20bool\29
+1122:LineCubicIntersections::addNearHorizontalEndPoints\28double\2c\20double\2c\20double\29
+1123:LineCubicIntersections::HorizontalIntersect\28SkDCubic\20const&\2c\20double\2c\20double*\29
+1124:LineCubicIntersections::pinTs\28double*\2c\20double*\2c\20SkDPoint*\2c\20LineCubicIntersections::PinTPoint\29
+1125:LineCubicIntersections::checkCoincident\28\29
+1126:SkIntersections::vertical\28SkDCubic\20const&\2c\20double\2c\20double\2c\20double\2c\20bool\29
+1127:LineCubicIntersections::verticalIntersect\28double\2c\20double\2c\20double\2c\20bool\29
+1128:LineCubicIntersections::addNearVerticalEndPoints\28double\2c\20double\2c\20double\29
+1129:LineCubicIntersections::VerticalIntersect\28SkDCubic\20const&\2c\20double\2c\20double*\29
+1130:SkIntersections::intersect\28SkDCubic\20const&\2c\20SkDLine\20const&\29
+1131:LineCubicIntersections::intersect\28\29
+1132:LineCubicIntersections::addNearEndPoints\28\29
+1133:LineCubicIntersections::intersectRay\28double*\29
+1134:SkIntersections::intersectRay\28SkDCubic\20const&\2c\20SkDLine\20const&\29
+1135:SkDCubic::horizontalIntersect\28double\2c\20double*\29\20const
+1136:SkDCubic::verticalIntersect\28double\2c\20double*\29\20const
+1137:LineCubicIntersections::addLineNearEndPoints\28\29
+1138:SkPoint::scale\28float\2c\20SkPoint*\29\20const
+1139:SkPoint::normalize\28\29
+1140:SkPoint::setLength\28float\2c\20float\2c\20float\29
+1141:SkPoint::setNormalize\28float\2c\20float\29
+1142:SkPoint::setLength\28float\29
+1143:SkPoint::Normalize\28SkPoint*\29
+1144:SkPoint::Length\28float\2c\20float\29
+1145:SkPointPriv::SetLengthFast\28SkPoint*\2c\20float\29
+1146:SkPointPriv::DistanceToLineBetweenSqd\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPointPriv::Side*\29
+1147:SkPointPriv::DistanceToLineSegmentBetweenSqd\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\29
+1148:SkFindUnitQuadRoots\28float\2c\20float\2c\20float\2c\20float*\29
+1149:SkEvalQuadAt\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\29
+1150:SkEvalQuadAt\28SkPoint\20const*\2c\20float\29
+1151:SkEvalQuadTangentAt\28SkPoint\20const*\2c\20float\29
+1152:SkChopQuadAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\29
+1153:SkChopQuadAtHalf\28SkPoint\20const*\2c\20SkPoint*\29
+1154:SkMeasureAngleBetweenVectors\28SkPoint\2c\20SkPoint\29
+1155:SkFindBisector\28SkPoint\2c\20SkPoint\29
+1156:SkFindQuadMidTangent\28SkPoint\20const*\29
+1157:SkFindQuadExtrema\28float\2c\20float\2c\20float\2c\20float*\29
+1158:SkChopQuadAtYExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+1159:SkChopQuadAtXExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+1160:SkFindQuadMaxCurvature\28SkPoint\20const*\29
+1161:SkChopQuadAtMaxCurvature\28SkPoint\20const*\2c\20SkPoint*\29
+1162:SkConvertQuadToCubic\28SkPoint\20const*\2c\20SkPoint*\29
+1163:SkEvalCubicAt\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20SkPoint*\2c\20SkPoint*\29
+1164:SkFindCubicExtrema\28float\2c\20float\2c\20float\2c\20float\2c\20float*\29
+1165:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\29
+1166:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\2c\20float\29
+1167:SkChopCubicAt\28SkPoint\20const*\2c\20SkPoint*\2c\20float\20const*\2c\20int\29
+1168:SkChopCubicAtHalf\28SkPoint\20const*\2c\20SkPoint*\29
+1169:SkMeasureNonInflectCubicRotation\28SkPoint\20const*\29
+1170:SkFindCubicMidTangent\28SkPoint\20const*\29
+1171:SkChopCubicAtYExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+1172:SkChopCubicAtXExtrema\28SkPoint\20const*\2c\20SkPoint*\29
+1173:SkFindCubicInflections\28SkPoint\20const*\2c\20float*\29
+1174:SkChopCubicAtInflections\28SkPoint\20const*\2c\20SkPoint*\29
+1175:SkClassifyCubic\28SkPoint\20const*\2c\20double*\2c\20double*\2c\20double*\29
+1176:SkFindCubicMaxCurvature\28SkPoint\20const*\2c\20float*\29
+1177:SkChopCubicAtMaxCurvature\28SkPoint\20const*\2c\20SkPoint*\2c\20float*\29
+1178:SkFindCubicCusp\28SkPoint\20const*\29
+1179:SkChopMonoCubicAtY\28SkPoint*\2c\20float\2c\20SkPoint*\29
+1180:cubic_dchop_at_intercept\28SkPoint\20const*\2c\20float\2c\20SkPoint*\2c\20int\20\28SkDCubic::*\29\28double\2c\20double*\29\20const\29
+1181:SkChopMonoCubicAtX\28SkPoint*\2c\20float\2c\20SkPoint*\29
+1182:SkConic::chopAt\28float\2c\20SkConic*\29\20const
+1183:SkConic::chopAt\28float\2c\20float\2c\20SkConic*\29\20const
+1184:SkConic::evalAt\28float\29\20const
+1185:SkConic::evalTangentAt\28float\29\20const
+1186:SkConic::evalAt\28float\2c\20SkPoint*\2c\20SkPoint*\29\20const
+1187:SkConic::chop\28SkConic*\29\20const
+1188:SkConic::computeQuadPOW2\28float\29\20const
+1189:SkConic::chopIntoQuadsPOW2\28SkPoint*\2c\20int\29\20const
+1190:subdivide\28SkConic\20const&\2c\20SkPoint*\2c\20int\29
+1191:SkConic::findXExtrema\28float*\29\20const
+1192:SkConic::findYExtrema\28float*\29\20const
+1193:SkConic::chopAtYExtrema\28SkConic*\29\20const
+1194:SkConic::TransformW\28SkPoint\20const*\2c\20float\2c\20SkMatrix\20const&\29
+1195:SkConic::BuildUnitArc\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkRotationDirection\2c\20SkMatrix\20const*\2c\20SkConic*\29
+1196:SkPathBuilder::SkPathBuilder\28\29
+1197:SkPathBuilder::~SkPathBuilder\28\29
+1198:SkPathBuilder::moveTo\28SkPoint\29
+1199:SkPathBuilder::lineTo\28SkPoint\29
+1200:SkPathBuilder::quadTo\28SkPoint\2c\20SkPoint\29
+1201:SkPathBuilder::conicTo\28SkPoint\2c\20SkPoint\2c\20float\29
+1202:SkPathBuilder::cubicTo\28SkPoint\2c\20SkPoint\2c\20SkPoint\29
+1203:SkPathBuilder::close\28\29
+1204:SkPathBuilder::incReserve\28int\2c\20int\29
+1205:SkPathBuilder::make\28sk_sp\29\20const
+1206:SkPathBuilder::detach\28\29
+1207:SkPathBuilder::addOval\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1208:SkPathBuilder::addRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1209:SkPathBuilder::addRRect\28SkRRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1210:SkPathBuilder::addPolygon\28SkPoint\20const*\2c\20int\2c\20bool\29
+1211:SkPathBuilder::polylineTo\28SkPoint\20const*\2c\20int\29
+1212:SkPathBuilder::privateReverseAddPath\28SkPath\20const&\29
+1213:SkLineClipper::IntersectLine\28SkPoint\20const*\2c\20SkRect\20const&\2c\20SkPoint*\29
+1214:sect_with_horizontal\28SkPoint\20const*\2c\20float\29
+1215:sect_with_vertical\28SkPoint\20const*\2c\20float\29
+1216:SkLineClipper::ClipLine\28SkPoint\20const*\2c\20SkRect\20const&\2c\20SkPoint*\2c\20bool\29
+1217:SkEdgeClipper::clipMonoQuad\28SkPoint\20const*\2c\20SkRect\20const&\29
+1218:SkEdgeClipper::clipQuad\28SkPoint\20const*\2c\20SkRect\20const&\29
+1219:SkEdgeClipper::clipMonoCubic\28SkPoint\20const*\2c\20SkRect\20const&\29
+1220:SkEdgeClipper::clipCubic\28SkPoint\20const*\2c\20SkRect\20const&\29
+1221:SkEdgeClipper::next\28SkPoint*\29
+1222:SkEdgeClipper::ClipPath\28SkPath\20const&\2c\20SkRect\20const&\2c\20bool\2c\20void\20\28*\29\28SkEdgeClipper*\2c\20bool\2c\20void*\29\2c\20void*\29
+1223:SkCubicClipper::ChopMonoAtY\28SkPoint\20const*\2c\20float\2c\20float*\29
+1224:SkPath::SkPath\28\29
+1225:SkPath::SkPath\28sk_sp\2c\20SkPathFillType\2c\20bool\2c\20SkPathConvexity\2c\20SkPathFirstDirection\29
+1226:SkPath::SkPath\28SkPath\20const&\29
+1227:SkPath::~SkPath\28\29
+1228:SkPath::operator=\28SkPath\20const&\29
+1229:operator==\28SkPath\20const&\2c\20SkPath\20const&\29
+1230:SkPath::swap\28SkPath&\29
+1231:SkPath::addPath\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPath::AddPathMode\29
+1232:SkPath::reset\28\29
+1233:SkPath::conservativelyContainsRect\28SkRect\20const&\29\20const
+1234:SkPath::computeConvexity\28\29\20const
+1235:SkPathPriv::ComputeFirstDirection\28SkPath\20const&\29
+1236:SkPath::Iter::next\28SkPoint*\29
+1237:SkPath::getGenerationID\28\29\20const
+1238:SkPath::rewind\28\29
+1239:SkPath::isLastContourClosed\28\29\20const
+1240:SkPath::isLine\28SkPoint*\29\20const
+1241:SkPath::isRect\28SkRect*\2c\20bool*\2c\20SkPathDirection*\29\20const
+1242:SkPathPriv::IsRectContour\28SkPath\20const&\2c\20bool\2c\20int*\2c\20SkPoint\20const**\2c\20bool*\2c\20SkPathDirection*\2c\20SkRect*\29
+1243:SkPath::isOval\28SkRect*\29\20const
+1244:SkPath::isRRect\28SkRRect*\29\20const
+1245:SkPath::countPoints\28\29\20const
+1246:SkPath::getPoints\28SkPoint*\2c\20int\29\20const
+1247:SkPath::getPoint\28int\29\20const
+1248:SkPath::countVerbs\28\29\20const
+1249:SkPath::getVerbs\28unsigned\20char*\2c\20int\29\20const
+1250:SkPath::approximateBytesUsed\28\29\20const
+1251:SkPath::getLastPt\28SkPoint*\29\20const
+1252:SkPath::setLastPt\28float\2c\20float\29
+1253:SkPath::moveTo\28float\2c\20float\29
+1254:SkPath::setConvexity\28SkPathConvexity\29\20const
+1255:SkPath::incReserve\28int\29
+1256:SkPath::rMoveTo\28float\2c\20float\29
+1257:SkPath::lineTo\28float\2c\20float\29
+1258:SkPath::rLineTo\28float\2c\20float\29
+1259:SkPath::quadTo\28float\2c\20float\2c\20float\2c\20float\29
+1260:SkPath::rQuadTo\28float\2c\20float\2c\20float\2c\20float\29
+1261:SkPath::conicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\29
+1262:SkPath::rConicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\29
+1263:SkPath::cubicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+1264:SkPath::rCubicTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\2c\20float\29
+1265:SkPath::close\28\29
+1266:SkPath::addRect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1267:SkPath::addPoly\28SkPoint\20const*\2c\20int\2c\20bool\29
+1268:SkPath::addRRect\28SkRRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1269:SkPath::addRRect\28SkRRect\20const&\2c\20SkPathDirection\29
+1270:SkPath::addOval\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1271:SkPath::isZeroLengthSincePoint\28int\29\20const
+1272:SkPath::addRoundRect\28SkRect\20const&\2c\20float\2c\20float\2c\20SkPathDirection\29
+1273:SkPath::addOval\28SkRect\20const&\2c\20SkPathDirection\29
+1274:SkPath::addCircle\28float\2c\20float\2c\20float\2c\20SkPathDirection\29
+1275:SkPath::arcTo\28SkRect\20const&\2c\20float\2c\20float\2c\20bool\29
+1276:SkPath::arcTo\28float\2c\20float\2c\20float\2c\20SkPath::ArcSize\2c\20SkPathDirection\2c\20float\2c\20float\29
+1277:SkPath::rArcTo\28float\2c\20float\2c\20float\2c\20SkPath::ArcSize\2c\20SkPathDirection\2c\20float\2c\20float\29
+1278:SkPath::addArc\28SkRect\20const&\2c\20float\2c\20float\29
+1279:SkPath::arcTo\28float\2c\20float\2c\20float\2c\20float\2c\20float\29
+1280:SkPath::addPath\28SkPath\20const&\2c\20float\2c\20float\2c\20SkPath::AddPathMode\29
+1281:SkTLazy::set\28SkPath\20const&\29
+1282:SkPath::reversePathTo\28SkPath\20const&\29
+1283:SkPath::reverseAddPath\28SkPath\20const&\29
+1284:SkPath::offset\28float\2c\20float\2c\20SkPath*\29\20const
+1285:SkPath::transform\28SkMatrix\20const&\2c\20SkPath*\2c\20SkApplyPerspectiveClip\29\20const
+1286:SkPathPriv::PerspectiveClip\28SkPath\20const&\2c\20SkMatrix\20const&\2c\20SkPath*\29
+1287:subdivide_cubic_to\28SkPath*\2c\20SkPoint\20const*\2c\20int\29
+1288:clip\28SkPath\20const&\2c\20SkHalfPlane\20const&\29::$_0::__invoke\28SkEdgeClipper*\2c\20bool\2c\20void*\29
+1289:SkPath::Iter::Iter\28SkPath\20const&\2c\20bool\29
+1290:SkPath::Iter::isClosedContour\28\29\20const
+1291:SkPath::RawIter::setPath\28SkPath\20const&\29
+1292:SkPath::RawIter::next\28SkPoint*\29
+1293:Convexicator::BySign\28SkPoint\20const*\2c\20int\29
+1294:Convexicator::addPt\28SkPoint\20const&\29
+1295:Convexicator::directionChange\28SkPoint\20const&\29
+1296:SkPath::contains\28float\2c\20float\29\20const
+1297:winding_mono_quad\28SkPoint\20const*\2c\20float\2c\20float\2c\20int*\29
+1298:winding_mono_conic\28SkConic\20const&\2c\20float\2c\20float\2c\20int*\29
+1299:SkTDArray::append\28int\2c\20SkPoint\20const*\29
+1300:SkPath::ConvertConicToQuads\28SkPoint\20const&\2c\20SkPoint\20const&\2c\20SkPoint\20const&\2c\20float\2c\20SkPoint*\2c\20int\29
+1301:SkPathPriv::IsSimpleRect\28SkPath\20const&\2c\20bool\2c\20SkRect*\2c\20SkPathDirection*\2c\20unsigned\20int*\29
+1302:SkPathPriv::DrawArcIsConvex\28float\2c\20bool\2c\20bool\29
+1303:SkPathPriv::CreateDrawArcPath\28SkPath*\2c\20SkRect\20const&\2c\20float\2c\20float\2c\20bool\2c\20bool\29
+1304:SkPath::computeTightBounds\28\29\20const
+1305:SkPath::Rect\28SkRect\20const&\2c\20SkPathDirection\2c\20unsigned\20int\29
+1306:SkPath::Oval\28SkRect\20const&\2c\20SkPathDirection\29
+1307:SkPath::RRect\28SkRRect\20const&\2c\20SkPathDirection\29
+1308:SkPath::Polygon\28SkPoint\20const*\2c\20int\2c\20bool\2c\20SkPathFillType\2c\20bool\29
+1309:SkPathPriv::IsNestedFillRects\28SkPath\20const&\2c\20SkRect*\2c\20SkPathDirection*\29
+1310:SkMatrix::doNormalizePerspective\28\29
+1311:SkMatrix::reset\28\29
+1312:SkMatrix::computePerspectiveTypeMask\28\29\20const
+1313:SkMatrix::computeTypeMask\28\29\20const
+1314:operator==\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+1315:SkMatrix::isSimilarity\28float\29\20const
+1316:SkMatrix::preservesRightAngles\28float\29\20const
+1317:SkMatrix::setTranslate\28float\2c\20float\29
+1318:SkMatrix::preTranslate\28float\2c\20float\29
+1319:SkMatrix::setConcat\28SkMatrix\20const&\2c\20SkMatrix\20const&\29
+1320:SkMatrix::preConcat\28SkMatrix\20const&\29
+1321:SkMatrix::postTranslate\28float\2c\20float\29
+1322:SkMatrix::postConcat\28SkMatrix\20const&\29
+1323:SkMatrix::setScale\28float\2c\20float\29
+1324:SkMatrix::preScale\28float\2c\20float\29
+1325:SkMatrix::postScale\28float\2c\20float\29
+1326:SkMatrix::postIDiv\28int\2c\20int\29
+1327:SkMatrix::setSinCos\28float\2c\20float\2c\20float\2c\20float\29
+1328:SkMatrix::setRSXform\28SkRSXform\20const&\29
+1329:SkMatrix::setSinCos\28float\2c\20float\29
+1330:SkMatrix::setRotate\28float\29
+1331:SkMatrix::preRotate\28float\29
+1332:SkMatrix::setSkew\28float\2c\20float\29
+1333:SkMatrix::postSkew\28float\2c\20float\29
+1334:SkMatrix::setRectToRect\28SkRect\20const&\2c\20SkRect\20const&\2c\20SkMatrix::ScaleToFit\29
+1335:SkMatrix::SetAffineIdentity\28float*\29
+1336:SkMatrix::asAffine\28float*\29\20const
+1337:SkMatrix::mapPoints\28SkPoint*\2c\20SkPoint\20const*\2c\20int\29\20const
+1338:SkMatrix::mapXY\28float\2c\20float\2c\20SkPoint*\29\20const
+1339:SkMatrix::ComputeInv\28float*\2c\20float\20const*\2c\20double\2c\20bool\29
+1340:SkMatrix::invertNonIdentity\28SkMatrix*\29\20const
+1341:SkMatrix::Identity_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+1342:SkMatrix::Trans_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+1343:SkMatrix::Scale_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+1344:SkMatrix::Persp_pts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+1345:SkMatrix::Affine_vpts\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint\20const*\2c\20int\29
+1346:SkMatrix::mapHomogeneousPoints\28SkPoint3*\2c\20SkPoint3\20const*\2c\20int\29\20const
+1347:SkMatrix::mapHomogeneousPoints\28SkPoint3*\2c\20SkPoint\20const*\2c\20int\29\20const
+1348:SkMatrix::mapVectors\28SkPoint*\2c\20SkPoint\20const*\2c\20int\29\20const
+1349:SkMatrix::mapRectScaleTranslate\28SkRect*\2c\20SkRect\20const&\29\20const
+1350:SkMatrix::mapRect\28SkRect*\2c\20SkRect\20const&\2c\20SkApplyPerspectiveClip\29\20const
+1351:SkMatrix::mapRadius\28float\29\20const
+1352:SkMatrix::Persp_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+1353:SkMatrix::RotTrans_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+1354:SkMatrix::Rot_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+1355:SkMatrix::ScaleTrans_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+1356:SkMatrix::Scale_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+1357:SkMatrix::Trans_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+1358:SkMatrix::Identity_xy\28SkMatrix\20const&\2c\20float\2c\20float\2c\20SkPoint*\29
+1359:SkMatrix::Poly2Proc\28SkPoint\20const*\2c\20SkMatrix*\29
+1360:SkMatrix::Poly3Proc\28SkPoint\20const*\2c\20SkMatrix*\29
+1361:SkMatrix::Poly4Proc\28SkPoint\20const*\2c\20SkMatrix*\29
+1362:SkMatrix::setPolyToPoly\28SkPoint\20const*\2c\20SkPoint\20const*\2c\20int\29
+1363:SkMatrix::getMinScale\28\29\20const
+1364:SkMatrix::getMaxScale\28\29\20const
+1365:SkMatrix::getMinMaxScales\28float*\29\20const
+1366:bool\20get_scale_factor<\28MinMaxOrBoth\292>\28SkMatrix::TypeMask\2c\20float\20const*\2c\20float*\29
+1367:SkMatrix::I\28\29
+1368:SkMatrix::InvalidMatrix\28\29
+1369:SkMatrix::decomposeScale\28SkSize*\2c\20SkMatrix*\29\20const
+1370:SkMatrix::writeToMemory\28void*\29\20const
+1371:SkMatrix::readFromMemory\28void\20const*\2c\20unsigned\20long\29
+1372:SkTreatAsSprite\28SkMatrix\20const&\2c\20SkISize\20const&\2c\20SkPaint\20const&\29
+1373:SkDecomposeUpper2x2\28SkMatrix\20const&\2c\20SkPoint*\2c\20SkPoint*\2c\20SkPoint*\29
+1374:SkRSXform::toQuad\28float\2c\20float\2c\20SkPoint*\29\20const
+1375:SkRSXform::toTriStrip\28float\2c\20float\2c\20SkPoint*\29\20const
+1376:SkMatrixPriv::AdjustHighQualityFilterLevel\28SkMatrix\20const&\2c\20bool\29
+1377:SkRasterPipeline::SkRasterPipeline\28SkArenaAlloc*\29
+1378:SkRasterPipeline::reset\28\29
+1379:SkRasterPipeline::append\28SkRasterPipeline::StockStage\2c\20void*\29
+1380:SkRasterPipeline::append\28SkRasterPipeline::StockStage\2c\20unsigned\20long\29
+1381:SkRasterPipeline::extend\28SkRasterPipeline\20const&\29
+1382:SkRasterPipeline::append_set_rgb\28SkArenaAlloc*\2c\20float\20const*\29
+1383:SkRasterPipeline::append_constant_color\28SkArenaAlloc*\2c\20float\20const*\29
+1384:SkRasterPipeline::append_matrix\28SkArenaAlloc*\2c\20SkMatrix\20const&\29
+1385:SkRasterPipeline::append_load\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+1386:SkRasterPipeline::append_load_dst\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+1387:SkRasterPipeline::append_store\28SkColorType\2c\20SkRasterPipeline_MemoryCtx\20const*\29
+1388:SkRasterPipeline::append_transfer_function\28skcms_TransferFunction\20const&\29
+1389:SkRasterPipeline::append_gamut_clamp_if_normalized\28SkImageInfo\20const&\29
+1390:SkRasterPipeline::run\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29\20const
+1391:SkRasterPipeline::compile\28\29\20const
+1392:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::~__func\28\29
+1393:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+1394:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base*\29\20const
+1395:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::destroy\28\29
+1396:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::destroy_deallocate\28\29
+1397:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::operator\28\29\28unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\29
+1398:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::target\28std::type_info\20const&\29\20const
+1399:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::target_type\28\29\20const
+1400:std::__2::__function::__base::~__base\5babi:v15007\5d\28\29
+1401:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::~__func\28\29
+1402:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28\29\20const
+1403:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::__clone\28std::__2::__function::__base*\29\20const
+1404:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::destroy\28\29
+1405:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::destroy_deallocate\28\29
+1406:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::operator\28\29\28unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\2c\20unsigned\20long&&\29
+1407:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::target\28std::type_info\20const&\29\20const
+1408:std::__2::__function::__func\2c\20void\20\28unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\2c\20unsigned\20long\29>::target_type\28\29\20const
+1409:SkStream::readS8\28signed\20char*\29
+1410:SkStream::readS16\28short*\29
+1411:SkStream::readS32\28int*\29
+1412:SkStream::readScalar\28float*\29
+1413:SkStream::readPackedUInt\28unsigned\20long*\29
+1414:SkWStream::~SkWStream\28\29
+1415:SkWStream::flush\28\29
+1416:SkWStream::writeDecAsText\28int\29
+1417:SkWStream::writeBigDecAsText\28long\20long\2c\20int\29
+1418:SkWStream::writeHexAsText\28unsigned\20int\2c\20int\29
+1419:SkWStream::writeScalarAsText\28float\29
+1420:SkWStream::writeScalar\28float\29
+1421:SkWStream::SizeOfPackedUInt\28unsigned\20long\29
+1422:SkWStream::writePackedUInt\28unsigned\20long\29
+1423:SkWStream::writeStream\28SkStream*\2c\20unsigned\20long\29
+1424:SkFILEStream::SkFILEStream\28char\20const*\29
+1425:SkFILEStream::~SkFILEStream\28\29
+1426:SkFILEStream::~SkFILEStream\28\29.1
+1427:SkFILEStream::read\28void*\2c\20unsigned\20long\29
+1428:SkFILEStream::isAtEnd\28\29\20const
+1429:SkFILEStream::rewind\28\29
+1430:SkFILEStream::onDuplicate\28\29\20const
+1431:SkFILEStream::getPosition\28\29\20const
+1432:SkFILEStream::seek\28unsigned\20long\29
+1433:SkFILEStream::move\28long\29
+1434:SkFILEStream::onFork\28\29\20const
+1435:SkFILEStream::getLength\28\29\20const
+1436:SkMemoryStream::SkMemoryStream\28\29
+1437:SkMemoryStream::SkMemoryStream\28unsigned\20long\29
+1438:SkMemoryStream::SkMemoryStream\28void\20const*\2c\20unsigned\20long\2c\20bool\29
+1439:SkMemoryStream::SkMemoryStream\28sk_sp\29
+1440:SkMemoryStream::MakeCopy\28void\20const*\2c\20unsigned\20long\29
+1441:SkMemoryStream::Make\28sk_sp\29
+1442:SkMemoryStream::setMemory\28void\20const*\2c\20unsigned\20long\2c\20bool\29
+1443:SkMemoryStream::read\28void*\2c\20unsigned\20long\29
+1444:SkMemoryStream::peek\28void*\2c\20unsigned\20long\29\20const
+1445:SkMemoryStream::isAtEnd\28\29\20const
+1446:SkMemoryStream::rewind\28\29
+1447:SkMemoryStream::onDuplicate\28\29\20const
+1448:SkMemoryStream::getPosition\28\29\20const
+1449:SkMemoryStream::seek\28unsigned\20long\29
+1450:SkMemoryStream::move\28long\29
+1451:SkMemoryStream::onFork\28\29\20const
+1452:SkMemoryStream::getLength\28\29\20const
+1453:SkMemoryStream::getMemoryBase\28\29
+1454:SkFILEWStream::SkFILEWStream\28char\20const*\29
+1455:SkFILEWStream::~SkFILEWStream\28\29
+1456:SkFILEWStream::~SkFILEWStream\28\29.1
+1457:SkFILEWStream::bytesWritten\28\29\20const
+1458:SkFILEWStream::write\28void\20const*\2c\20unsigned\20long\29
+1459:SkFILEWStream::flush\28\29
+1460:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\28\29
+1461:SkDynamicMemoryWStream::reset\28\29
+1462:SkDynamicMemoryWStream::~SkDynamicMemoryWStream\28\29.1
+1463:SkDynamicMemoryWStream::bytesWritten\28\29\20const
+1464:SkDynamicMemoryWStream::write\28void\20const*\2c\20unsigned\20long\29
+1465:SkDynamicMemoryWStream::writeToAndReset\28SkDynamicMemoryWStream*\29
+1466:SkDynamicMemoryWStream::prependToAndReset\28SkDynamicMemoryWStream*\29
+1467:SkDynamicMemoryWStream::copyTo\28void*\29\20const
+1468:SkDynamicMemoryWStream::writeToStream\28SkWStream*\29\20const
+1469:SkDynamicMemoryWStream::writeToAndReset\28SkWStream*\29
+1470:SkDynamicMemoryWStream::detachAsData\28\29
+1471:SkDynamicMemoryWStream::detachAsStream\28\29
+1472:SkStream::MakeFromFile\28char\20const*\29
+1473:SkCopyStreamToData\28SkStream*\29
+1474:SkStreamCopy\28SkWStream*\2c\20SkStream*\29
+1475:SkStream::peek\28void*\2c\20unsigned\20long\29\20const
+1476:SkStreamSeekable::hasPosition\28\29\20const
+1477:SkStreamAsset::hasLength\28\29\20const
+1478:SkStream::getMemoryBase\28\29
+1479:SkMemoryStream::~SkMemoryStream\28\29
+1480:SkMemoryStream::~SkMemoryStream\28\29.1
+1481:std::__2::__shared_ptr_pointer<_IO_FILE*\2c\20void\20\28*\29\28_IO_FILE*\29\2c\20std::__2::allocator<_IO_FILE>>::~__shared_ptr_pointer\28\29
+1482:std::__2::__shared_ptr_pointer<_IO_FILE*\2c\20void\20\28*\29\28_IO_FILE*\29\2c\20std::__2::allocator<_IO_FILE>>::__on_zero_shared\28\29
+1483:std::__2::__shared_ptr_pointer<_IO_FILE*\2c\20void\20\28*\29\28_IO_FILE*\29\2c\20std::__2::allocator<_IO_FILE>>::__get_deleter\28std::type_info\20const&\29\20const
+1484:std::__2::__shared_ptr_pointer<_IO_FILE*\2c\20void\20\28*\29\28_IO_FILE*\29\2c\20std::__2::allocator<_IO_FILE>>::__on_zero_shared_weak\28\29
+1485:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\28\29
+1486:SkBlockMemoryRefCnt::~SkBlockMemoryRefCnt\28\29.1
+1487:SkBlockMemoryStream::~SkBlockMemoryStream\28\29
+1488:SkBlockMemoryStream::~SkBlockMemoryStream\28\29.1
+1489:SkBlockMemoryStream::read\28void*\2c\20unsigned\20long\29
+1490:SkBlockMemoryStream::peek\28void*\2c\20unsigned\20long\29\20const
+1491:SkBlockMemoryStream::isAtEnd\28\29\20const
+1492:SkBlockMemoryStream::rewind\28\29
+1493:SkBlockMemoryStream::getPosition\28\29\20const
+1494:SkBlockMemoryStream::seek\28unsigned\20long\29
+1495:SkBlockMemoryStream::move\28long\29
+1496:SkBlockMemoryStream::getLength\28\29\20const
+1497:SkBlockMemoryStream::getMemoryBase\28\29
+1498:SkBlockMemoryStream::onDuplicate\28\29\20const
+1499:SkBlockMemoryStream::onFork\28\29\20const
+1500:skvm::Builder::optimize\28\29\20const
+1501:skvm::eliminate_dead_code\28std::__2::vector>\29
+1502:skvm::schedule\28std::__2::vector>\29
+1503:skvm::finalize\28std::__2::vector>\29
+1504:std::__2::vector>::__construct_at_end\5babi:v15007\5d\28unsigned\20long\2c\20bool\29
+1505:void\20skvm::eliminate_dead_code\28std::__2::vector>\29::$_0::operator\28\29<$_0>\28int\2c\20$_0&\29\20const
+1506:void\20skvm::schedule\28std::__2::vector>\29::$_0::operator\28\29<$_0>\28int\2c\20$_0&\29\20const
+1507:skvm::Builder::done\28char\20const*\29\20const
+1508:std::__2::enable_if<__is_cpp17_forward_iterator::value\20&&\20is_constructible::reference>::value\2c\20void>::type\20std::__2::vector>::assign\28int*\2c\20int*\29
+1509:skvm::Program::setupInterpreter\28std::__2::vector>\20const&\29
+1510:skvm::Builder::hash\28\29\20const
+1511:skvm::Builder::push\28skvm::Instruction\29
+1512:SkTHashTable::Pair\2c\20skvm::Instruction\2c\20SkTHashMap::Pair>::set\28SkTHashMap::Pair\29
+1513:skvm::Builder::arg\28int\29
+1514:skvm::Builder::assert_true\28skvm::I32\2c\20skvm::I32\29
+1515:skvm::Builder::index\28\29
+1516:skvm::Builder::load8\28skvm::Arg\29
+1517:skvm::Builder::gather8\28skvm::Arg\2c\20int\2c\20skvm::I32\29
+1518:skvm::Builder::gather32\28skvm::Arg\2c\20int\2c\20skvm::I32\29
+1519:skvm::Builder::uniform8\28skvm::Arg\2c\20int\29
+1520:skvm::Builder::uniform32\28skvm::Arg\2c\20int\29
+1521:skvm::Builder::splat\28int\29
+1522:skvm::Builder::add\28skvm::F32\2c\20skvm::F32\29
+1523:skvm::Builder::sub\28skvm::F32\2c\20skvm::F32\29
+1524:skvm::Builder::mul\28skvm::F32\2c\20skvm::F32\29
+1525:skvm::Builder::div\28skvm::F32\2c\20skvm::F32\29
+1526:skvm::Builder::sqrt\28skvm::F32\29
+1527:skvm::Builder::approx_log2\28skvm::F32\29
+1528:skvm::Builder::bit_and\28skvm::I32\2c\20skvm::I32\29
+1529:skvm::Builder::bit_or\28skvm::I32\2c\20skvm::I32\29
+1530:skvm::Builder::sub\28skvm::F32a\2c\20skvm::F32a\29
+1531:skvm::Builder::mul\28skvm::F32a\2c\20skvm::F32a\29
+1532:skvm::Builder::add\28skvm::F32a\2c\20skvm::F32a\29
+1533:skvm::Builder::div\28skvm::F32a\2c\20skvm::F32\29
+1534:skvm::Builder::to_F32\28skvm::I32\29
+1535:skvm::Builder::approx_pow2\28skvm::F32\29
+1536:skvm::Builder::fract\28skvm::F32\29
+1537:skvm::Builder::approx_powf\28skvm::F32\2c\20skvm::F32\29
+1538:skvm::Builder::max\28skvm::F32a\2c\20skvm::F32a\29
+1539:skvm::Builder::eq\28skvm::F32a\2c\20skvm::F32a\29
+1540:skvm::Builder::select\28skvm::I32\2c\20skvm::I32\2c\20skvm::I32\29
+1541:skvm::Builder::approx_sin\28skvm::F32\29
+1542:skvm::Builder::gt\28skvm::F32a\2c\20skvm::F32a\29
+1543:skvm::Builder::approx_tan\28skvm::F32\29
+1544:skvm::Builder::lt\28skvm::F32a\2c\20skvm::F32a\29
+1545:skvm::F32\20skvm::poly\28skvm::F32\2c\20skvm::F32a\2c\20skvm::F32a\2c\20float\2c\20float\2c\20float\29
+1546:skvm::Builder::approx_asin\28skvm::F32\29
+1547:skvm::Builder::approx_atan\28skvm::F32\29
+1548:skvm::approx_atan_unit\28skvm::F32\29
+1549:skvm::Builder::gte\28skvm::F32a\2c\20skvm::F32a\29
+1550:skvm::Builder::lte\28skvm::F32a\2c\20skvm::F32a\29
+1551:skvm::Builder::min\28skvm::F32\2c\20skvm::F32\29
+1552:skvm::Builder::max\28skvm::F32\2c\20skvm::F32\29
+1553:skvm::Builder::trunc\28skvm::F32\29
+1554:skvm::Builder::add\28skvm::I32\2c\20skvm::I32\29
+1555:skvm::Builder::sub\28skvm::I32\2c\20skvm::I32\29
+1556:skvm::Builder::mul\28skvm::I32\2c\20skvm::I32\29
+1557:skvm::Builder::shl\28skvm::I32\2c\20int\29
+1558:skvm::Builder::shr\28skvm::I32\2c\20int\29
+1559:skvm::Builder::eq\28skvm::F32\2c\20skvm::F32\29
+1560:skvm::Builder::neq\28skvm::F32\2c\20skvm::F32\29
+1561:skvm::Builder::lt\28skvm::F32\2c\20skvm::F32\29
+1562:skvm::Builder::lte\28skvm::F32\2c\20skvm::F32\29
+1563:skvm::Builder::gt\28skvm::F32\2c\20skvm::F32\29
+1564:skvm::Builder::gte\28skvm::F32\2c\20skvm::F32\29
+1565:skvm::Builder::bit_xor\28skvm::I32\2c\20skvm::I32\29
+1566:skvm::Builder::lt\28skvm::I32a\2c\20skvm::I32a\29
+1567:skvm::Builder::bit_clear\28skvm::I32\2c\20skvm::I32\29
+1568:skvm::Builder::extract\28skvm::I32\2c\20int\2c\20skvm::I32\29
+1569:skvm::Builder::ceil\28skvm::F32\29
+1570:skvm::Builder::floor\28skvm::F32\29
+1571:skvm::Builder::from_unorm\28int\2c\20skvm::I32\29
+1572:skvm::Builder::to_unorm\28int\2c\20skvm::F32\29
+1573:skvm::SkColorType_to_PixelFormat\28SkColorType\2c\20skvm::PixelFormat*\29
+1574:skvm::Builder::load\28skvm::PixelFormat\2c\20skvm::Arg\29
+1575:skvm::unpack\28skvm::PixelFormat\2c\20skvm::I32\29
+1576:skvm::unpack\28skvm::PixelFormat\2c\20skvm::I32\29::$_0::operator\28\29\28int\2c\20int\29\20const
+1577:skvm::Builder::gather\28skvm::PixelFormat\2c\20skvm::Arg\2c\20int\2c\20skvm::I32\29
+1578:skvm::Builder::add\28skvm::I32a\2c\20skvm::I32a\29
+1579:skvm::Builder::store\28skvm::PixelFormat\2c\20skvm::Arg\2c\20skvm::Color\29
+1580:skvm::pack32\28skvm::PixelFormat\2c\20skvm::Color\29::$_0::operator\28\29\28skvm::F32\2c\20int\2c\20int\29\20const
+1581:skvm::Builder::unpremul\28skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32\29
+1582:skvm::Builder::select\28skvm::I32a\2c\20skvm::F32a\2c\20skvm::F32a\29
+1583:skvm::Builder::premul\28skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32\29
+1584:skvm::Builder::uniformColor\28SkRGBA4f<\28SkAlphaType\293>\2c\20skvm::Uniforms*\29
+1585:skvm::Builder::lerp\28skvm::F32\2c\20skvm::F32\2c\20skvm::F32\29
+1586:skvm::Builder::mad\28skvm::F32\2c\20skvm::F32\2c\20skvm::F32\29
+1587:skvm::Builder::lerp\28skvm::Color\2c\20skvm::Color\2c\20skvm::F32\29
+1588:skvm::Builder::to_hsla\28skvm::Color\29
+1589:skvm::Builder::to_rgba\28skvm::HSLA\29
+1590:auto\20skvm::Builder::to_rgba\28skvm::HSLA\29::$_0::operator\28\29\28skvm::F32\29\20const
+1591:skvm::Builder::clamp\28skvm::F32a\2c\20skvm::F32a\2c\20skvm::F32a\29
+1592:skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29
+1593:skvm::Builder::min\28skvm::F32a\2c\20skvm::F32a\29
+1594:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_9::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1595:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_11::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1596:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_12::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1597:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_14::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1598:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_15::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1599:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_16::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1600:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_17::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1601:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_18::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1602:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_19::operator\28\29\28skvm::F32\2c\20skvm::F32\29\20const
+1603:skvm::saturation\28skvm::F32\2c\20skvm::F32\2c\20skvm::F32\29
+1604:skvm::set_sat\28skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32\29
+1605:skvm::luminance\28skvm::F32\2c\20skvm::F32\2c\20skvm::F32\29
+1606:skvm::set_lum\28skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32\29
+1607:skvm::clip_color\28skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32\29
+1608:auto\20skvm::Builder::blend\28SkBlendMode\2c\20skvm::Color\2c\20skvm::Color\29::$_20::operator\28\29\28skvm::F32\2c\20skvm::F32\2c\20skvm::F32\29\20const
+1609:skvm::set_sat\28skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32\29::$_0::operator\28\29\28skvm::F32\29\20const
+1610:auto\20skvm::clip_color\28skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32*\2c\20skvm::F32\29::$_0::operator\28\29\28skvm::F32\29\20const
+1611:SkTArray::checkRealloc\28int\2c\20SkTArray::ReallocType\29
+1612:skvm::Program::eval\28int\2c\20void**\29\20const
+1613:skvm::Program::Program\28\29
+1614:skvm::Program::~Program\28\29
+1615:skvm::Program::operator=\28skvm::Program&&\29
+1616:skvm::Program::setupInterpreter\28std::__2::vector>\20const&\29::$_0::operator\28\29\28int\29\20const
+1617:skvm::Program::setupInterpreter\28std::__2::vector>\20const&\29::$_2::operator\28\29\28int\2c\20skvm::OptimizedInstruction\20const&\29\20const
+1618:skvm::Program::empty\28\29\20const
+1619:skvm::Builder::pack\28skvm::I32a\2c\20skvm::I32a\2c\20int\29
+1620:skvm::Builder::clamp\28skvm::F32\2c\20skvm::F32\2c\20skvm::F32\29
+1621:skvm::Builder::is_finite\28skvm::F32\29
+1622:SkTHashTable::Pair\2c\20skvm::Instruction\2c\20SkTHashMap::Pair>::resize\28int\29
+1623:SkColorSpaceXformSteps::SkColorSpaceXformSteps\28SkColorSpace\20const*\2c\20SkAlphaType\2c\20SkColorSpace\20const*\2c\20SkAlphaType\29
+1624:SkColorSpaceXformSteps::apply\28float*\29\20const
+1625:SkColorSpaceXformSteps::apply\28SkRasterPipeline*\29\20const
+1626:sk_program_transfer_fn\28skvm::Builder*\2c\20skvm::Uniforms*\2c\20skcms_TransferFunction\20const&\2c\20skvm::Color\29
+1627:skvm::Uniforms::push\28int\29
+1628:sk_program_transfer_fn\28skvm::Builder*\2c\20skvm::Uniforms*\2c\20skcms_TransferFunction\20const&\2c\20skvm::Color\29::$_0::operator\28\29\28skvm::F32\29\20const
+1629:SkColorSpaceXformSteps::program\28skvm::Builder*\2c\20skvm::Uniforms*\2c\20skvm::Color\29\20const
+1630:std::__throw_bad_array_new_length\5babi:v15007\5d\28\29
+1631:SkConvertPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkImageInfo\20const&\2c\20void\20const*\2c\20unsigned\20long\29
+1632:SkRegion::SkRegion\28\29
+1633:SkRegion::SkRegion\28SkRegion\20const&\29
+1634:SkRegion::setRegion\28SkRegion\20const&\29
+1635:SkRegion::SkRegion\28SkIRect\20const&\29
+1636:SkRegion::setRect\28SkIRect\20const&\29
+1637:SkRegion::~SkRegion\28\29
+1638:SkRegion::allocateRuns\28int\2c\20int\2c\20int\29
+1639:SkRegion::operator=\28SkRegion\20const&\29
+1640:SkRegion::swap\28SkRegion&\29
+1641:SkRegion::computeRegionComplexity\28\29\20const
+1642:SkRegion::setEmpty\28\29
+1643:SkRegion::Oper\28SkRegion\20const&\2c\20SkRegion\20const&\2c\20SkRegion::Op\2c\20SkRegion*\29
+1644:SkRegion::op\28SkRegion\20const&\2c\20SkRegion\20const&\2c\20SkRegion::Op\29
+1645:SkRegion::op\28SkRegion\20const&\2c\20SkIRect\20const&\2c\20SkRegion::Op\29
+1646:SkRegion::count_runtype_values\28int*\2c\20int*\29\20const
+1647:SkRegion::setRuns\28int*\2c\20int\29
+1648:SkRegion::contains\28int\2c\20int\29\20const
+1649:SkRegion::contains\28SkIRect\20const&\29\20const
+1650:SkIRect::contains\28SkIRect\20const&\29\20const
+1651:SkRegion::contains\28SkRegion\20const&\29\20const
+1652:setRectCheck\28SkRegion*\2c\20SkIRect\20const&\29
+1653:setRegionCheck\28SkRegion*\2c\20SkRegion\20const&\29
+1654:setEmptyCheck\28SkRegion*\29
+1655:RgnOper::addSpan\28int\2c\20int\20const*\2c\20int\20const*\29
+1656:SkRegion::intersects\28SkIRect\20const&\29\20const
+1657:SkRegion::intersects\28SkRegion\20const&\29\20const
+1658:SkRegion::translate\28int\2c\20int\2c\20SkRegion*\29\20const
+1659:SkRegion::setRects\28SkIRect\20const*\2c\20int\29
+1660:SkRegion::writeToMemory\28void*\29\20const
+1661:SkRegion::readFromMemory\28void\20const*\2c\20unsigned\20long\29
+1662:validate_run\28int\20const*\2c\20int\2c\20SkIRect\20const&\2c\20int\2c\20int\29
+1663:SkRegion::Iterator::Iterator\28SkRegion\20const&\29
+1664:SkRegion::Iterator::rewind\28\29
+1665:SkRegion::Iterator::next\28\29
+1666:SkRegion::Cliperator::Cliperator\28SkRegion\20const&\2c\20SkIRect\20const&\29
+1667:SkRegion::Cliperator::next\28\29
+1668:SkRegion::Spanerator::Spanerator\28SkRegion\20const&\2c\20int\2c\20int\2c\20int\29
+1669:SkRegion::Spanerator::next\28int*\2c\20int*\29
+1670:SkRegionPriv::VisitSpans\28SkRegion\20const&\2c\20std::__2::function\20const&\29
+1671:SkPath::writeToMemoryAsRRect\28void*\29\20const
+1672:SkPath::writeToMemory\28void*\29\20const
+1673:SkPath::serialize\28\29\20const
+1674:SkPath::readFromMemory\28void\20const*\2c\20unsigned\20long\29
+1675:SkPath::readFromMemory_EQ4Or5\28void\20const*\2c\20unsigned\20long\29
+1676:SkPath::readAsRRect\28void\20const*\2c\20unsigned\20long\29
+1677:SkIRect\20skif::Mapping::map\28SkIRect\20const&\2c\20SkMatrix\20const&\29
+1678:SkRect\20skif::Mapping::map\28SkRect\20const&\2c\20SkMatrix\20const&\29
+1679:SkPtrSet::reset\28\29
+1680:SkPtrSet::add\28void*\29
+1681:SkTDArray::insert\28int\2c\20int\2c\20SkPtrSet::Pair\20const*\29
+1682:SkPtrSet::copyToArray\28void**\29\20const
+1683:SkMallocPixelRef::MakeAllocate\28SkImageInfo\20const&\2c\20unsigned\20long\29
+1684:SkMallocPixelRef::MakeAllocate\28SkImageInfo\20const&\2c\20unsigned\20long\29::PixelRef::~PixelRef\28\29
+1685:SkMallocPixelRef::MakeAllocate\28SkImageInfo\20const&\2c\20unsigned\20long\29::PixelRef::~PixelRef\28\29.1
+1686:SkMask::computeImageSize\28\29\20const
+1687:SkMask::computeTotalImageSize\28\29\20const
+1688:SkMask::AllocImage\28unsigned\20long\2c\20SkMask::AllocType\29
+1689:SkMask::FreeImage\28void*\29
+1690:SkMask::PrepareDestination\28int\2c\20int\2c\20SkMask\20const&\29
+1691:SkMask::getAddr\28int\2c\20int\29\20const
+1692:SkBitmap::SkBitmap\28\29
+1693:SkBitmap::SkBitmap\28SkBitmap\20const&\29
+1694:SkBitmap::~SkBitmap\28\29
+1695:SkBitmap::operator=\28SkBitmap\20const&\29
+1696:SkBitmap::operator=\28SkBitmap&&\29
+1697:SkBitmap::swap\28SkBitmap&\29
+1698:std::__2::enable_if::value\20&&\20is_move_assignable::value\2c\20void>::type\20std::__2::swap\5babi:v15007\5d\28SkBitmap&\2c\20SkBitmap&\29
+1699:SkBitmap::reset\28\29
+1700:SkBitmap::setInfo\28SkImageInfo\20const&\2c\20unsigned\20long\29
+1701:SkImageInfo::validRowBytes\28unsigned\20long\29\20const
+1702:reset_return_false\28SkBitmap*\29
+1703:SkBitmap::pixelRefOrigin\28\29\20const
+1704:SkBitmap::setPixelRef\28sk_sp\2c\20int\2c\20int\29
+1705:SkBitmap::setPixels\28void*\29
+1706:SkBitmap::tryAllocPixels\28SkImageInfo\20const&\2c\20unsigned\20long\29
+1707:SkBitmap::allocN32Pixels\28int\2c\20int\2c\20bool\29
+1708:SkBitmap::allocPixels\28SkImageInfo\20const&\29
+1709:SkBitmap::allocPixels\28\29
+1710:SkBitmap::HeapAllocator::allocPixelRef\28SkBitmap*\29
+1711:SkBitmap::tryAllocPixelsFlags\28SkImageInfo\20const&\2c\20unsigned\20int\29
+1712:SkBitmap::allocPixels\28SkImageInfo\20const&\2c\20unsigned\20long\29
+1713:SkBitmap::installPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20void\20\28*\29\28void*\2c\20void*\29\2c\20void*\29
+1714:SkBitmap::installPixels\28SkPixmap\20const&\29
+1715:SkBitmap::installMaskPixels\28SkMask\20const&\29
+1716:SkBitmap::getGenerationID\28\29\20const
+1717:SkBitmap::notifyPixelsChanged\28\29\20const
+1718:SkBitmap::isImmutable\28\29\20const
+1719:SkBitmap::setImmutable\28\29
+1720:SkBitmap::getAddr\28int\2c\20int\29\20const
+1721:SkBitmap::erase\28unsigned\20int\2c\20SkIRect\20const&\29\20const
+1722:SkBitmap::peekPixels\28SkPixmap*\29\20const
+1723:SkBitmap::eraseColor\28unsigned\20int\29\20const
+1724:SkBitmap::extractSubset\28SkBitmap*\2c\20SkIRect\20const&\29\20const
+1725:SkBitmap::readPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20int\29\20const
+1726:SkBitmap::readPixels\28SkPixmap\20const&\2c\20int\2c\20int\29\20const
+1727:SkBitmap::writePixels\28SkPixmap\20const&\2c\20int\2c\20int\29
+1728:SkBitmap::extractAlpha\28SkBitmap*\2c\20SkPaint\20const*\2c\20SkBitmap::Allocator*\2c\20SkIPoint*\29\20const
+1729:GetBitmapAlpha\28SkBitmap\20const&\2c\20unsigned\20char*\2c\20int\29
+1730:SkBitmap::HeapAllocator::~HeapAllocator\28\29
+1731:SkBitmapController::RequestBitmap\28SkImage_Base\20const*\2c\20SkMatrix\20const&\2c\20SkFilterQuality\2c\20SkArenaAlloc*\29
+1732:SkBitmapController::State*\20SkArenaAlloc::make\28SkImage_Base\20const*&\2c\20SkMatrix\20const&\2c\20SkFilterQuality&\29::'lambda'\28char*\29::__invoke\28char*\29
+1733:SkBitmapController::State::State\28SkImage_Base\20const*\2c\20SkMatrix\20const&\2c\20SkFilterQuality\29
+1734:SkBitmapController::State::processMediumRequest\28SkImage_Base\20const*\29
+1735:SkMipmapAccessor::SkMipmapAccessor\28SkImage_Base\20const*\2c\20SkMatrix\20const&\2c\20SkMipmapMode\29
+1736:SkBitmapProcState::chooseMatrixProc\28bool\29
+1737:void\20mirrorx_nofilter_trans<&int_mirror\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1738:void\20repeatx_nofilter_trans<&int_repeat\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1739:void\20clampx_nofilter_trans<&int_clamp\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1740:void\20nofilter_scale<&clamp\28int\2c\20int\29\2c\20&clamp\28int\2c\20int\29\2c\20true>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1741:void\20filter_scale<&clamp\28int\2c\20int\29\2c\20&clamp\28int\2c\20int\29\2c\20&extract_low_bits_clamp_clamp\28int\2c\20int\29\2c\20true>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1742:void\20nofilter_affine<&clamp\28int\2c\20int\29\2c\20&clamp\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1743:void\20filter_affine<&clamp\28int\2c\20int\29\2c\20&clamp\28int\2c\20int\29\2c\20&extract_low_bits_clamp_clamp\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1744:void\20nofilter_scale<&repeat\28int\2c\20int\29\2c\20&repeat\28int\2c\20int\29\2c\20false>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1745:void\20filter_scale<&repeat\28int\2c\20int\29\2c\20&repeat\28int\2c\20int\29\2c\20&extract_low_bits_general\28int\2c\20int\29\2c\20false>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1746:void\20nofilter_affine<&repeat\28int\2c\20int\29\2c\20&repeat\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1747:void\20filter_affine<&repeat\28int\2c\20int\29\2c\20&repeat\28int\2c\20int\29\2c\20&extract_low_bits_general\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1748:void\20nofilter_scale<&mirror\28int\2c\20int\29\2c\20&mirror\28int\2c\20int\29\2c\20false>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1749:void\20filter_scale<&mirror\28int\2c\20int\29\2c\20&mirror\28int\2c\20int\29\2c\20&extract_low_bits_general\28int\2c\20int\29\2c\20false>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1750:void\20nofilter_affine<&mirror\28int\2c\20int\29\2c\20&mirror\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1751:void\20filter_affine<&mirror\28int\2c\20int\29\2c\20&mirror\28int\2c\20int\29\2c\20&extract_low_bits_general\28int\2c\20int\29>\28SkBitmapProcState\20const&\2c\20unsigned\20int*\2c\20int\2c\20int\2c\20int\29
+1752:SkBitmapProcState::SkBitmapProcState\28SkImage_Base\20const*\2c\20SkTileMode\2c\20SkTileMode\29
+1753:SkBitmapProcState::init\28SkMatrix\20const&\2c\20SkPaint\20const&\29
+1754:SkBitmapProcState::chooseProcs\28\29
+1755:S32_alpha_D32_nofilter_DXDY\28SkBitmapProcState\20const&\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\29
+1756:S32_alpha_D32_nofilter_DX\28SkBitmapProcState\20const&\2c\20unsigned\20int\20const*\2c\20int\2c\20unsigned\20int*\29
+1757:Clamp_S32_opaque_D32_nofilter_DX_shaderproc\28void\20const*\2c\20int\2c\20int\2c\20unsigned\20int*\2c\20int\29
+1758:SkBitmapProcState::chooseShaderProc32\28\29
+1759:S32_D32_constX_shaderproc\28void\20const*\2c\20int\2c\20int\2c\20unsigned\20int*\2c\20int\29
+1760:DoNothing_shaderproc\28void\20const*\2c\20int\2c\20int\2c\20unsigned\20int*\2c\20int\29
+1761:Clamp_S32_D32_nofilter_trans_shaderproc\28void\20const*\2c\20int\2c\20int\2c\20unsigned\20int*\2c\20int\29
+1762:Repeat_S32_D32_nofilter_trans_shaderproc\28void\20const*\2c\20int\2c\20int\2c\20unsigned\20int*\2c\20int\29
+1763:SkBitmapProcState::maxCountForBufferSize\28unsigned\20long\29\20const
+1764:SkBitmapProcLegacyShader::MakeContext\28SkShaderBase\20const&\2c\20SkTileMode\2c\20SkTileMode\2c\20SkImage_Base\20const*\2c\20SkShaderBase::ContextRec\20const&\2c\20SkArenaAlloc*\29
+1765:SkBitmapProcState*\20SkArenaAlloc::make\28SkImage_Base\20const*&\2c\20SkTileMode&\2c\20SkTileMode&\29::'lambda'\28char*\29::__invoke\28char*\29
+1766:BitmapProcShaderContext*\20SkArenaAlloc::make\28SkShaderBase\20const&\2c\20SkShaderBase::ContextRec\20const&\2c\20SkBitmapProcState*&\29
+1767:BitmapProcShaderContext*\20SkArenaAlloc::make\28SkShaderBase\20const&\2c\20SkShaderBase::ContextRec\20const&\2c\20SkBitmapProcState*&\29::'lambda'\28char*\29::__invoke\28char*\29
+1768:BitmapProcShaderContext::~BitmapProcShaderContext\28\29
+1769:BitmapProcShaderContext::getFlags\28\29\20const
+1770:BitmapProcShaderContext::shadeSpan\28int\2c\20int\2c\20unsigned\20int*\2c\20int\29
+1771:SkYUVAInfo::PlaneDimensions\28SkISize\2c\20SkYUVAInfo::PlaneConfig\2c\20SkYUVAInfo::Subsampling\2c\20SkEncodedOrigin\2c\20SkISize*\29
+1772:SkYUVAInfo::GetYUVAIndices\28SkYUVAInfo::PlaneConfig\2c\20unsigned\20int\20const*\2c\20SkYUVAIndex*\29
+1773:SkYUVAInfo::SkYUVAInfo\28SkISize\2c\20SkYUVAInfo::PlaneConfig\2c\20SkYUVAInfo::Subsampling\2c\20SkYUVColorSpace\2c\20SkEncodedOrigin\2c\20SkYUVAInfo::Siting\2c\20SkYUVAInfo::Siting\29
+1774:SkYUVAInfo::computeTotalBytes\28unsigned\20long\20const*\2c\20unsigned\20long*\29\20const
+1775:SkYUVAPixmapInfo::SupportedDataTypes::SupportedDataTypes\28GrImageContext\20const&\29
+1776:SkYUVAPixmapInfo::SkYUVAPixmapInfo\28SkYUVAInfo\20const&\2c\20SkColorType\20const*\2c\20unsigned\20long\20const*\29
+1777:std::__2::array::operator=\28std::__2::array\20const&\29
+1778:SkYUVAPixmapInfo::computeTotalBytes\28unsigned\20long*\29\20const
+1779:SkYUVAPixmapInfo::initPixmapsFromSingleAllocation\28void*\2c\20SkPixmap*\29\20const
+1780:SkYUVAPixmapInfo::isSupported\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\29\20const
+1781:SkYUVAPixmapInfo::SupportedDataTypes::supported\28SkYUVAInfo::PlaneConfig\2c\20SkYUVAPixmapInfo::DataType\29\20const
+1782:SkYUVAPixmaps::FromExternalMemory\28SkYUVAPixmapInfo\20const&\2c\20void*\29
+1783:SkYUVAPixmaps::toYUVAIndices\28SkYUVAIndex*\29\20const
+1784:png_destroy_png_struct
+1785:png_free
+1786:png_calloc
+1787:png_malloc
+1788:png_malloc_base
+1789:png_malloc_array
+1790:png_realloc_array
+1791:png_malloc_warn
+1792:png_set_mem_fn
+1793:Cr_z_crc32_z
+1794:Cr_z_crc32
+1795:Cr_z_crc_reset
+1796:Cr_z_crc_finalize
+1797:Cr_z_copy_with_crc
+1798:png_write_data
+1799:png_default_write_data
+1800:png_flush
+1801:png_default_flush
+1802:png_set_write_fn
+1803:Cr_z_zcalloc
+1804:Cr_z_zcfree
+1805:Cr_z_adler32_z
+1806:Cr_z_adler32
+1807:Cr_z__tr_init
+1808:init_block
+1809:Cr_z__tr_stored_block
+1810:Cr_z__tr_flush_bits
+1811:Cr_z__tr_align
+1812:Cr_z__tr_flush_block
+1813:build_tree
+1814:compress_block
+1815:send_tree
+1816:Cr_z_deflateInit2_
+1817:Cr_z_deflateEnd
+1818:Cr_z_deflateReset
+1819:Cr_z_deflateResetKeep
+1820:fill_window
+1821:Cr_z_deflate
+1822:flush_pending
+1823:deflate_stored
+1824:deflate_huff
+1825:deflate_rle
+1826:deflate_fast
+1827:longest_match
+1828:deflate_slow
+1829:png_set_bKGD
+1830:png_set_eXIf_1
+1831:png_set_hIST
+1832:png_set_IHDR
+1833:png_set_oFFs
+1834:png_set_pCAL
+1835:png_set_sCAL_s
+1836:png_set_pHYs
+1837:png_set_PLTE
+1838:png_set_sBIT
+1839:png_set_sRGB
+1840:png_set_iCCP
+1841:png_set_text
+1842:png_set_text_2
+1843:png_set_tIME
+1844:png_set_tRNS
+1845:png_set_sPLT
+1846:png_set_unknown_chunks
+1847:png_set_keep_unknown_chunks
+1848:png_set_read_user_chunk_fn
+1849:png_check_keyword
+1850:png_set_packing
+1851:png_set_interlace_handling
+1852:png_set_filler
+1853:png_do_invert
+1854:png_do_swap
+1855:png_do_packswap
+1856:png_do_strip_channel
+1857:png_do_bgr
+1858:png_do_check_palette_indexes
+1859:png_do_write_transformations
+1860:png_get_valid
+1861:png_get_rowbytes
+1862:png_get_cHRM_fixed
+1863:png_get_gAMA_fixed
+1864:png_get_iCCP
+1865:png_get_IHDR
+1866:png_get_PLTE
+1867:png_get_sBIT
+1868:png_get_tRNS
+1869:png_get_user_chunk_ptr
+1870:png_write_info_before_PLTE
+1871:png_write_info
+1872:png_write_end
+1873:png_create_write_struct
+1874:png_write_rows
+1875:png_write_row
+1876:png_write_flush
+1877:png_destroy_write_struct
+1878:png_set_filter
+1879:png_set_compression_level
+1880:png_save_uint_32
+1881:png_write_sig
+1882:png_write_chunk
+1883:png_write_complete_chunk
+1884:png_free_buffer_list
+1885:png_write_IHDR
+1886:png_write_PLTE
+1887:png_compress_IDAT
+1888:png_image_size
+1889:png_deflate_claim
+1890:png_write_IEND
+1891:png_write_gAMA_fixed
+1892:png_write_sRGB
+1893:png_write_iCCP
+1894:png_text_compress
+1895:png_write_sPLT
+1896:png_write_sBIT
+1897:png_write_cHRM_fixed
+1898:png_write_tRNS
+1899:png_write_bKGD
+1900:png_write_eXIf
+1901:png_write_hIST
+1902:png_write_tEXt
+1903:png_write_zTXt
+1904:png_write_iTXt
+1905:png_write_oFFs
+1906:png_write_pCAL
+1907:png_write_sCAL_s
+1908:png_write_pHYs
+1909:png_write_tIME
+1910:png_write_start_row
+1911:png_write_finish_row
+1912:png_do_write_interlace
+1913:png_write_find_filter
+1914:Cr_z_inflate_table
+1915:Cr_z_inflate_fast
+1916:Cr_z_inflateReset
+1917:Cr_z_inflateReset2
+1918:Cr_z_inflateInit2_
+1919:Cr_z_inflate
+1920:updatewindow
+1921:Cr_z_inflateEnd
+1922:Cr_z_inflateValidate
+1923:png_read_data
+1924:png_default_read_data
+1925:png_set_read_fn
+1926:png_set_strip_16
+1927:png_set_palette_to_rgb
+1928:png_set_expand_gray_1_2_4_to_8
+1929:png_set_tRNS_to_alpha
+1930:png_set_gray_to_rgb
+1931:png_set_read_user_transform_fn
+1932:png_init_read_transformations
+1933:png_read_transform_info
+1934:png_do_read_transformations
+1935:png_do_expand
+1936:png_do_gray_to_rgb
+1937:png_get_uint_31
+1938:png_read_sig
+1939:png_read_chunk_header
+1940:png_check_chunk_name
+1941:png_check_chunk_length
+1942:png_crc_read
+1943:png_crc_finish
+1944:png_zlib_inflate
+1945:png_handle_IHDR
+1946:png_handle_PLTE
+1947:png_handle_IEND
+1948:png_handle_gAMA
+1949:png_handle_sBIT
+1950:png_handle_cHRM
+1951:png_handle_sRGB
+1952:png_handle_iCCP
+1953:png_inflate_claim
+1954:png_inflate_read
+1955:png_read_buffer
+1956:png_handle_sPLT
+1957:png_handle_tRNS
+1958:png_handle_bKGD
+1959:png_handle_eXIf
+1960:png_handle_hIST
+1961:png_handle_pHYs
+1962:png_handle_oFFs
+1963:png_handle_pCAL
+1964:png_handle_sCAL
+1965:png_handle_tIME
+1966:png_handle_tEXt
+1967:png_handle_zTXt
+1968:png_decompress_chunk
+1969:png_inflate
+1970:png_handle_iTXt
+1971:png_handle_unknown
+1972:png_cache_unknown_chunk
+1973:png_combine_row
+1974:png_do_read_interlace
+1975:png_read_filter_row
+1976:png_read_filter_row_sub
+1977:png_read_filter_row_avg
+1978:png_read_filter_row_up
+1979:png_read_filter_row_paeth_1byte_pixel
+1980:png_read_filter_row_paeth_multibyte_pixel
+1981:png_read_IDAT_data
+1982:png_read_finish_IDAT
+1983:png_read_finish_row
+1984:png_read_start_row
+1985:png_create_read_struct
+1986:png_read_info
+1987:png_read_update_info
+1988:png_read_row
+1989:png_read_image
+1990:png_read_end
+1991:png_destroy_read_struct
+1992:png_sig_cmp
+1993:png_zalloc
+1994:png_zfree
+1995:png_reset_crc
+1996:png_calculate_crc
+1997:png_user_version_check
+1998:png_create_png_struct
+1999:png_create_info_struct
+2000:png_destroy_info_struct
+2001:png_free_data
+2002:png_get_io_ptr
+2003:png_save_int_32
+2004:png_handle_as_unknown
+2005:png_chunk_unknown_handling
+2006:png_zstream_error
+2007:png_colorspace_set_gamma
+2008:png_colorspace_sync_info
+2009:png_colorspace_sync
+2010:png_colorspace_set_chromaticities
+2011:png_colorspace_check_xy
+2012:png_colorspace_endpoints_match
+2013:png_xy_from_XYZ
+2014:png_colorspace_set_sRGB
+2015:png_icc_profile_error
+2016:png_icc_check_length
+2017:png_icc_check_header
+2018:png_icc_check_tag_table
+2019:png_icc_set_sRGB
+2020:png_colorspace_set_ICC
+2021:png_colorspace_set_rgb_coefficients
+2022:png_muldiv
+2023:png_check_IHDR
+2024:png_check_fp_number
+2025:png_check_fp_string
+2026:png_reciprocal
+2027:png_gamma_significant
+2028:png_reciprocal2
+2029:png_gamma_8bit_correct
+2030:png_gamma_correct
+2031:png_destroy_gamma_table
+2032:png_build_gamma_table
+2033:png_build_16bit_table
+2034:png_set_option
+2035:png_error
+2036:png_default_error
+2037:png_longjmp
+2038:png_safecat
+2039:png_format_number
+2040:png_warning
+2041:png_warning_parameter
+2042:png_warning_parameter_signed
+2043:png_formatted_warning
+2044:png_benign_error
+2045:png_format_buffer
+2046:png_chunk_error
+2047:png_chunk_warning
+2048:png_app_warning
+2049:png_app_error
+2050:png_chunk_benign_error
+2051:png_chunk_report
+2052:png_set_longjmp_fn
+2053:png_free_jmpbuf
+2054:png_set_error_fn
+2055:png_get_error_ptr
+2056:png_process_data
+2057:png_push_read_chunk
+2058:png_push_read_IDAT
+2059:png_push_read_sig
+2060:png_push_save_buffer
+2061:png_process_IDAT_data
+2062:png_push_fill_buffer
+2063:png_push_process_row
+2064:png_read_push_finish_row
+2065:png_progressive_combine_row
+2066:png_set_progressive_read_fn
+2067:png_get_progressive_ptr
+2068:SkColorTable::SkColorTable\28unsigned\20int\20const*\2c\20int\29
+2069:SkColorTable::~SkColorTable\28\29
+2070:SkColorTable::~SkColorTable\28\29.1
+2071:SkEncodedInfo::ICCProfile::Make\28sk_sp\29
+2072:SkEncodedInfo::ICCProfile::Make\28skcms_ICCProfile\20const&\29
+2073:SkSwizzler::MakeSimple\28int\2c\20SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+2074:copy\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2075:sample1\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2076:sample2\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2077:sample4\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2078:sample6\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2079:sample8\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2080:SkSwizzler::Make\28SkEncodedInfo\20const&\2c\20unsigned\20int\20const*\2c\20SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20SkIRect\20const*\29
+2081:swizzle_grayalpha_to_a8\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2082:fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2083:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2084:swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2085:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2086:swizzle_small_index_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2087:swizzle_small_index_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2088:swizzle_index_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2089:swizzle_index_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2090:swizzle_index_to_n32_skipZ\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2091:fast_swizzle_rgb_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2092:swizzle_rgb16_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2093:swizzle_rgb_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2094:fast_swizzle_rgb_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2095:swizzle_rgb16_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2096:swizzle_rgb_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2097:swizzle_rgb16_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2098:swizzle_rgb_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2099:swizzle_rgba16_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2100:swizzle_rgba16_to_rgba_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2101:fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2102:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2103:swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2104:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_rgba_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2105:swizzle_rgba16_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2106:swizzle_rgba16_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2107:fast_swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2108:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2109:swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2110:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_premul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2111:fast_swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2112:void\20SkSwizzler::SkipLeading8888ZerosThen<&fast_swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2113:swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2114:void\20SkSwizzler::SkipLeading8888ZerosThen<&swizzle_rgba_to_bgra_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2115:swizzle_bgr_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2116:void\20SkSwizzler::SkipLeading8888ZerosThen<©\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2117:void\20SkSwizzler::SkipLeading8888ZerosThen<&sample4\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2118:swizzle_cmyk_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2119:fast_swizzle_cmyk_to_rgba\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2120:swizzle_cmyk_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2121:fast_swizzle_cmyk_to_bgra\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2122:swizzle_cmyk_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2123:fast_swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2124:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&fast_swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2125:swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2126:void\20SkSwizzler::SkipLeadingGrayAlphaZerosThen<&swizzle_grayalpha_to_n32_unpremul\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29>\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2127:swizzle_bit_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2128:swizzle_bit_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2129:swizzle_bit_to_grayscale\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2130:swizzle_bit_to_f16\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2131:swizzle_gray_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2132:fast_swizzle_gray_to_n32\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2133:swizzle_gray_to_565\28void*\2c\20unsigned\20char\20const*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20unsigned\20int\20const*\29
+2134:SkSwizzler::onSetSampleX\28int\29
+2135:SkSwizzler::swizzle\28void*\2c\20unsigned\20char\20const*\29
+2136:SkSwizzler::fillWidth\28\29\20const
+2137:SkSampler::~SkSampler\28\29
+2138:SkSwizzler::~SkSwizzler\28\29
+2139:sk_warning_fn\28png_struct_def*\2c\20char\20const*\29
+2140:AutoCleanPng::decodeBounds\28\29
+2141:AutoCleanPng::infoCallback\28unsigned\20long\29
+2142:read_color_profile\28png_struct_def*\2c\20png_info_def*\29
+2143:SkPngCodec::processData\28\29
+2144:SkPngCodec::createColorTable\28SkImageInfo\20const&\29
+2145:premultiply_argb_as_bgra\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+2146:premultiply_argb_as_rgba\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+2147:SkPackARGB_as_BGRA\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+2148:SkPackARGB_as_RGBA\28unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\2c\20unsigned\20int\29
+2149:SkPngCodec::IsPng\28void\20const*\2c\20unsigned\20long\29
+2150:SkPngCodec::allocateStorage\28SkImageInfo\20const&\29
+2151:SkPngCodec::~SkPngCodec\28\29
+2152:SkPngCodec::initializeXforms\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+2153:SkPngCodec::initializeSwizzler\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20bool\29
+2154:SkPngCodec::getSampler\28bool\29
+2155:SkPngCodec::onRewind\28\29
+2156:read_header\28SkStream*\2c\20SkPngChunkReader*\2c\20SkCodec**\2c\20png_struct_def**\2c\20png_info_def**\29
+2157:sk_error_fn\28png_struct_def*\2c\20char\20const*\29
+2158:sk_read_user_chunk\28png_struct_def*\2c\20png_unknown_chunk_t*\29
+2159:SkPngCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+2160:SkPngCodec::onStartIncrementalDecode\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\29
+2161:SkPngCodec::onIncrementalDecode\28int*\29
+2162:SkPngCodec::MakeFromStream\28std::__2::unique_ptr>\2c\20SkCodec::Result*\2c\20SkPngChunkReader*\29
+2163:SkPngCodec::onGetEncodedFormat\28\29\20const
+2164:SkPngCodec::~SkPngCodec\28\29.1
+2165:SkPngNormalDecoder::~SkPngNormalDecoder\28\29
+2166:SkPngNormalDecoder::decodeAllRows\28void*\2c\20unsigned\20long\2c\20int*\29
+2167:SkPngNormalDecoder::AllRowsCallback\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20int\2c\20int\29
+2168:SkPngNormalDecoder::setRange\28int\2c\20int\2c\20void*\2c\20unsigned\20long\29
+2169:SkPngNormalDecoder::RowCallback\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20int\2c\20int\29
+2170:SkPngNormalDecoder::decode\28int*\29
+2171:SkPngNormalDecoder::allRowsCallback\28unsigned\20char*\2c\20int\29
+2172:SkPngNormalDecoder::rowCallback\28unsigned\20char*\2c\20int\29
+2173:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\28\29
+2174:SkPngInterlacedDecoder::~SkPngInterlacedDecoder\28\29.1
+2175:SkPngInterlacedDecoder::decodeAllRows\28void*\2c\20unsigned\20long\2c\20int*\29
+2176:SkPngInterlacedDecoder::InterlacedRowCallback\28png_struct_def*\2c\20unsigned\20char*\2c\20unsigned\20int\2c\20int\29
+2177:SkPngInterlacedDecoder::setRange\28int\2c\20int\2c\20void*\2c\20unsigned\20long\29
+2178:SkPngInterlacedDecoder::decode\28int*\29
+2179:SkPngInterlacedDecoder::interlacedRowCallback\28unsigned\20char*\2c\20int\2c\20int\29
+2180:SkSampler::Fill\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::ZeroInitialized\29
+2181:jpeg_abort
+2182:jpeg_destroy
+2183:jpeg_alloc_quant_table
+2184:jpeg_alloc_huff_table
+2185:jdiv_round_up
+2186:jround_up
+2187:jcopy_sample_rows
+2188:jcopy_block_row
+2189:jzero_far
+2190:jpeg_resync_to_restart
+2191:next_marker
+2192:jinit_marker_reader
+2193:skip_variable
+2194:read_restart_marker
+2195:read_markers
+2196:reset_marker_reader
+2197:get_interesting_appn
+2198:get_sof
+2199:examine_app0
+2200:jpeg_save_markers
+2201:save_marker
+2202:skjpeg_err_exit\28jpeg_common_struct*\29
+2203:skjpeg_source_mgr::skjpeg_source_mgr\28SkStream*\29
+2204:sk_term_source\28jpeg_decompress_struct*\29
+2205:sk_skip_mem_input_data\28jpeg_decompress_struct*\2c\20long\29
+2206:sk_fill_mem_input_buffer\28jpeg_decompress_struct*\29
+2207:sk_init_mem_source\28jpeg_decompress_struct*\29
+2208:sk_skip_buffered_input_data\28jpeg_decompress_struct*\2c\20long\29
+2209:sk_fill_buffered_input_buffer\28jpeg_decompress_struct*\29
+2210:sk_init_buffered_source\28jpeg_decompress_struct*\29
+2211:jpeg_std_error
+2212:reset_error_mgr
+2213:format_message
+2214:output_message
+2215:emit_message
+2216:error_exit
+2217:jpeg_get_small
+2218:jpeg_free_small
+2219:jpeg_get_large
+2220:jpeg_free_large
+2221:jpeg_mem_available
+2222:jpeg_open_backing_store
+2223:jpeg_mem_init
+2224:jpeg_mem_term
+2225:jinit_memory_mgr
+2226:self_destruct
+2227:free_pool
+2228:access_virt_barray
+2229:access_virt_sarray
+2230:realize_virt_arrays
+2231:request_virt_barray
+2232:request_virt_sarray
+2233:alloc_barray
+2234:alloc_sarray
+2235:alloc_large
+2236:alloc_small
+2237:jinit_input_controller
+2238:finish_input_pass
+2239:start_input_pass
+2240:reset_input_controller
+2241:consume_markers
+2242:jpeg_CreateDecompress
+2243:jpeg_destroy_decompress
+2244:jpeg_read_header
+2245:jpeg_consume_input
+2246:JpegDecoderMgr::returnFalse\28char\20const*\29
+2247:JpegDecoderMgr::returnFailure\28char\20const*\2c\20SkCodec::Result\29
+2248:JpegDecoderMgr::getEncodedColor\28SkEncodedInfo::Color*\29
+2249:JpegDecoderMgr::JpegDecoderMgr\28SkStream*\29
+2250:JpegDecoderMgr::init\28\29
+2251:output_message\28jpeg_common_struct*\29
+2252:progress_monitor\28jpeg_common_struct*\29
+2253:JpegDecoderMgr::~JpegDecoderMgr\28\29
+2254:SkParseEncodedOrigin\28unsigned\20char\20const*\2c\20unsigned\20long\2c\20SkEncodedOrigin*\29
+2255:parse_encoded_origin\28unsigned\20char\20const*\2c\20unsigned\20long\2c\20unsigned\20long\20long\2c\20bool\2c\20bool\2c\20SkEncodedOrigin*\29
+2256:jinit_1pass_quantizer
+2257:new_color_map_1_quant
+2258:finish_pass_1_quant
+2259:start_pass_1_quant
+2260:create_colorindex
+2261:color_quantize3
+2262:color_quantize
+2263:quantize3_ord_dither
+2264:quantize_ord_dither
+2265:quantize_fs_dither
+2266:jinit_2pass_quantizer
+2267:new_color_map_2_quant
+2268:start_pass_2_quant
+2269:init_error_limit
+2270:pass2_no_dither
+2271:pass2_fs_dither
+2272:finish_pass2
+2273:finish_pass1
+2274:prescan_quantize
+2275:update_box
+2276:fill_inverse_cmap
+2277:jsimd_can_rgb_ycc
+2278:jsimd_can_rgb_gray
+2279:jsimd_can_ycc_rgb
+2280:jsimd_can_ycc_rgb565
+2281:jsimd_rgb_ycc_convert
+2282:jsimd_rgb_gray_convert
+2283:jsimd_ycc_rgb_convert
+2284:jsimd_ycc_rgb565_convert
+2285:jsimd_can_h2v2_downsample
+2286:jsimd_can_h2v1_downsample
+2287:jsimd_h2v2_downsample
+2288:jsimd_h2v1_downsample
+2289:jsimd_can_h2v2_upsample
+2290:jsimd_can_h2v1_upsample
+2291:jsimd_h2v2_upsample
+2292:jsimd_h2v1_upsample
+2293:jsimd_can_h2v2_fancy_upsample
+2294:jsimd_can_h2v1_fancy_upsample
+2295:jsimd_h2v2_fancy_upsample
+2296:jsimd_h2v1_fancy_upsample
+2297:jsimd_can_h2v2_merged_upsample
+2298:jsimd_can_h2v1_merged_upsample
+2299:jsimd_h2v2_merged_upsample
+2300:jsimd_h2v1_merged_upsample
+2301:jsimd_can_convsamp
+2302:jsimd_can_convsamp_float
+2303:jsimd_convsamp
+2304:jsimd_convsamp_float
+2305:jsimd_can_fdct_islow
+2306:jsimd_can_fdct_ifast
+2307:jsimd_can_fdct_float
+2308:jsimd_fdct_islow
+2309:jsimd_fdct_ifast
+2310:jsimd_fdct_float
+2311:jsimd_can_quantize
+2312:jsimd_can_quantize_float
+2313:jsimd_quantize
+2314:jsimd_quantize_float
+2315:jsimd_can_idct_2x2
+2316:jsimd_can_idct_4x4
+2317:jsimd_idct_2x2
+2318:jsimd_idct_4x4
+2319:jsimd_can_idct_islow
+2320:jsimd_can_idct_ifast
+2321:jsimd_can_idct_float
+2322:jsimd_idct_islow
+2323:jsimd_idct_ifast
+2324:jsimd_idct_float
+2325:jsimd_can_huff_encode_one_block
+2326:jsimd_huff_encode_one_block
+2327:jsimd_can_encode_mcu_AC_first_prepare
+2328:jsimd_encode_mcu_AC_first_prepare
+2329:jsimd_can_encode_mcu_AC_refine_prepare
+2330:jsimd_encode_mcu_AC_refine_prepare
+2331:jinit_merged_upsampler
+2332:start_pass_merged_upsample
+2333:merged_2v_upsample
+2334:h2v2_merged_upsample
+2335:h2v2_merged_upsample_565D
+2336:h2v2_merged_upsample_565
+2337:merged_1v_upsample
+2338:h2v1_merged_upsample
+2339:h2v1_merged_upsample_565D
+2340:h2v1_merged_upsample_565
+2341:jinit_color_deconverter
+2342:start_pass_dcolor
+2343:grayscale_convert
+2344:rgb_gray_convert
+2345:build_rgb_y_table
+2346:ycc_rgb_convert
+2347:gray_rgb_convert
+2348:null_convert
+2349:rgb_rgb_convert
+2350:ycc_rgb565_convert
+2351:build_ycc_rgb_table
+2352:gray_rgb565_convert
+2353:rgb_rgb565_convert
+2354:ycc_rgb565D_convert
+2355:gray_rgb565D_convert
+2356:rgb_rgb565D_convert
+2357:ycck_cmyk_convert
+2358:jinit_upsampler
+2359:sep_upsample
+2360:start_pass_upsample
+2361:noop_upsample
+2362:fullsize_upsample
+2363:h2v1_fancy_upsample
+2364:h2v1_upsample
+2365:h1v2_fancy_upsample
+2366:h2v2_fancy_upsample
+2367:h2v2_upsample
+2368:int_upsample
+2369:jinit_d_post_controller
+2370:start_pass_dpost
+2371:post_process_1pass
+2372:post_process_prepass
+2373:post_process_2pass
+2374:jpeg_idct_4x4
+2375:jpeg_idct_2x2
+2376:jpeg_idct_1x1
+2377:jpeg_idct_islow
+2378:jpeg_idct_7x7
+2379:jpeg_idct_6x6
+2380:jpeg_idct_5x5
+2381:jpeg_idct_3x3
+2382:jpeg_idct_9x9
+2383:jpeg_idct_10x10
+2384:jpeg_idct_11x11
+2385:jpeg_idct_12x12
+2386:jpeg_idct_13x13
+2387:jpeg_idct_14x14
+2388:jpeg_idct_15x15
+2389:jpeg_idct_16x16
+2390:jpeg_idct_ifast
+2391:jpeg_idct_float
+2392:jinit_inverse_dct
+2393:start_pass
+2394:jinit_arith_decoder
+2395:start_pass.1
+2396:decode_mcu_DC_first
+2397:decode_mcu_AC_first
+2398:decode_mcu_DC_refine
+2399:decode_mcu_AC_refine
+2400:decode_mcu
+2401:arith_decode
+2402:jpeg_make_d_derived_tbl
+2403:jpeg_fill_bit_buffer
+2404:jpeg_huff_decode
+2405:jinit_huff_decoder
+2406:decode_mcu.1
+2407:start_pass_huff_decoder
+2408:jinit_phuff_decoder
+2409:start_pass_phuff_decoder
+2410:decode_mcu_AC_refine.1
+2411:decode_mcu_DC_refine.1
+2412:decode_mcu_AC_first.1
+2413:decode_mcu_DC_first.1
+2414:jinit_d_coef_controller
+2415:start_output_pass
+2416:start_input_pass.1
+2417:decompress_data
+2418:consume_data
+2419:decompress_onepass
+2420:dummy_consume_data
+2421:decompress_smooth_data
+2422:jinit_d_main_controller
+2423:start_pass_main
+2424:process_data_context_main
+2425:process_data_simple_main
+2426:process_data_crank_post
+2427:jpeg_calc_output_dimensions
+2428:jinit_master_decompress
+2429:finish_output_pass
+2430:prepare_for_output_pass
+2431:jpeg_start_decompress
+2432:jpeg_crop_scanline
+2433:jpeg_read_scanlines
+2434:jpeg_skip_scanlines
+2435:read_and_discard_scanlines
+2436:increment_simple_rowgroup_ctr
+2437:noop_convert
+2438:noop_quantize
+2439:jpeg_read_raw_data
+2440:SkJpegCodec::IsJpeg\28void\20const*\2c\20unsigned\20long\29
+2441:SkJpegCodec::ReadHeader\28SkStream*\2c\20SkCodec**\2c\20JpegDecoderMgr**\2c\20std::__2::unique_ptr>\29
+2442:SkTArray<__jmp_buf_tag\20\28*\29\20\5b1\5d\2c\20false>::checkRealloc\28int\2c\20SkTArray<__jmp_buf_tag\20\28*\29\20\5b1\5d\2c\20false>::ReallocType\29
+2443:std::__2::unique_ptr>::operator=\5babi:v15007\5d\28std::nullptr_t\29
+2444:std::__2::unique_ptr>::operator=\5babi:v15007\5d\28std::__2::unique_ptr>&&\29
+2445:SkJpegCodec::MakeFromStream\28std::__2::unique_ptr>\2c\20SkCodec::Result*\29
+2446:SkJpegCodec::onGetScaledDimensions\28float\29\20const
+2447:SkJpegCodec::onRewind\28\29
+2448:SkJpegCodec::conversionSupported\28SkImageInfo\20const&\2c\20bool\2c\20bool\29
+2449:SkJpegCodec::onDimensionsSupported\28SkISize\20const&\29
+2450:SkJpegCodec::readRows\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20int\2c\20SkCodec::Options\20const&\29
+2451:SkJpegCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+2452:SkJpegCodec::initializeSwizzler\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\2c\20bool\29
+2453:SkJpegCodec::getSampler\28bool\29
+2454:SkJpegCodec::onStartScanlineDecode\28SkImageInfo\20const&\2c\20SkCodec::Options\20const&\29
+2455:SkJpegCodec::onGetScanlines\28void*\2c\20int\2c\20unsigned\20long\29
+2456:SkJpegCodec::onSkipScanlines\28int\29
+2457:SkJpegCodec::onQueryYUVAInfo\28SkYUVAPixmapInfo::SupportedDataTypes\20const&\2c\20SkYUVAPixmapInfo*\29\20const
+2458:SkJpegCodec::onGetYUVAPlanes\28SkYUVAPixmaps\20const&\29
+2459:SkGetJpegInfo\28void\20const*\2c\20unsigned\20long\2c\20SkISize*\2c\20SkEncodedInfo::Color*\2c\20SkEncodedOrigin*\29
+2460:SkJpegCodec::~SkJpegCodec\28\29
+2461:SkJpegCodec::~SkJpegCodec\28\29.1
+2462:SkJpegCodec::onGetEncodedFormat\28\29\20const
+2463:WebPSafeMalloc
+2464:WebPSafeCalloc
+2465:WebPSafeFree
+2466:WebPMalloc
+2467:WebPFree
+2468:WebPCopyPlane
+2469:WebPGetColorPalette
+2470:WebPGetWorkerInterface
+2471:Init
+2472:Reset
+2473:Sync
+2474:Launch
+2475:Execute
+2476:End
+2477:wasmCPUInfo
+2478:VP8BitReaderSetBuffer
+2479:VP8InitBitReader
+2480:VP8RemapBitReader
+2481:VP8LoadFinalBytes
+2482:VP8GetValue
+2483:VP8GetSignedValue
+2484:VP8LInitBitReader
+2485:VP8LBitReaderSetBuffer
+2486:VP8LDoFillBitWindow
+2487:VP8LReadBits
+2488:WebPMultARGBRow_C
+2489:WebPMultRow_C
+2490:WebPMultARGBRows
+2491:WebPMultRows
+2492:WebPInitAlphaProcessing
+2493:ApplyAlphaMultiply_16b_C
+2494:PackRGB_C
+2495:ApplyAlphaMultiply_C
+2496:DispatchAlpha_C
+2497:DispatchAlphaToGreen_C
+2498:ExtractAlpha_C
+2499:ExtractGreen_C
+2500:HasAlpha8b_C
+2501:HasAlpha32b_C
+2502:AlphaReplace_C
+2503:VP8LPredictor0_C
+2504:VP8LPredictor1_C
+2505:VP8LPredictor2_C
+2506:VP8LPredictor3_C
+2507:VP8LPredictor4_C
+2508:VP8LPredictor5_C
+2509:VP8LPredictor6_C
+2510:VP8LPredictor7_C
+2511:VP8LPredictor8_C
+2512:VP8LPredictor9_C
+2513:VP8LPredictor10_C
+2514:VP8LPredictor11_C
+2515:VP8LPredictor12_C
+2516:VP8LPredictor13_C
+2517:VP8LAddGreenToBlueAndRed_C
+2518:VP8LTransformColorInverse_C
+2519:VP8LColorIndexInverseTransformAlpha
+2520:VP8LInverseTransform
+2521:VP8LConvertBGRAToRGB_C
+2522:VP8LConvertBGRAToRGBA_C
+2523:VP8LConvertBGRAToRGBA4444_C
+2524:VP8LConvertBGRAToRGB565_C
+2525:VP8LConvertBGRAToBGR_C
+2526:VP8LConvertFromBGRA
+2527:VP8LDspInit
+2528:PredictorAdd0_C
+2529:PredictorAdd13_C
+2530:PredictorAdd12_C
+2531:PredictorAdd11_C
+2532:PredictorAdd10_C
+2533:PredictorAdd9_C
+2534:PredictorAdd8_C
+2535:PredictorAdd7_C
+2536:PredictorAdd6_C
+2537:PredictorAdd5_C
+2538:PredictorAdd4_C
+2539:PredictorAdd3_C
+2540:PredictorAdd2_C
+2541:PredictorAdd1_C
+2542:MapARGB_C
+2543:MapAlpha_C
+2544:VP8LHtreeGroupsNew
+2545:VP8LHtreeGroupsFree
+2546:VP8LBuildHuffmanTable
+2547:BuildHuffmanTable
+2548:VP8LHuffmanTablesAllocate
+2549:VP8LHuffmanTablesDeallocate
+2550:VP8LColorCacheInit
+2551:VP8LColorCacheClear
+2552:VP8LColorCacheCopy
+2553:VP8FiltersInit
+2554:GradientUnfilter_C
+2555:VerticalUnfilter_C
+2556:HorizontalUnfilter_C
+2557:GradientFilter_C
+2558:VerticalFilter_C
+2559:HorizontalFilter_C
+2560:WebPRescalerImportRowExpand_C
+2561:WebPRescalerImportRowShrink_C
+2562:WebPRescalerExportRowExpand_C
+2563:WebPRescalerExportRowShrink_C
+2564:WebPRescalerImportRow
+2565:WebPRescalerExportRow
+2566:WebPRescalerDspInit
+2567:WebPRescalerInit
+2568:WebPRescalerGetScaledDimensions
+2569:WebPRescaleNeededLines
+2570:WebPRescalerImport
+2571:WebPRescalerExport
+2572:WebPSamplerProcessPlane
+2573:WebPInitSamplers
+2574:YuvToRgba4444Row
+2575:YuvToArgbRow
+2576:YuvToBgraRow
+2577:YuvToRgbaRow
+2578:YuvToRgb565Row
+2579:YuvToBgrRow
+2580:YuvToRgbRow
+2581:WebPConvertARGBToUV_C
+2582:WebPConvertRGBA32ToUV_C
+2583:WebPInitConvertARGBToYUV
+2584:ConvertARGBToY_C
+2585:ConvertRGB24ToY_C
+2586:ConvertBGR24ToY_C
+2587:VP8LCheckSignature
+2588:VP8LGetInfo
+2589:VP8LNew
+2590:VP8LClear
+2591:VP8LDelete
+2592:VP8LDecodeAlphaHeader
+2593:DecodeImageStream
+2594:ReadHuffmanCode
+2595:DecodeImageData
+2596:VP8LDecodeAlphaImageStream
+2597:ExtractAlphaRows
+2598:CopyBlock32b
+2599:VP8LDecodeHeader
+2600:VP8LDecodeImage
+2601:ProcessRows
+2602:WebPGetLinePairConverter
+2603:UpsampleBgraLinePair_C
+2604:UpsampleRgbaLinePair_C
+2605:UpsampleRgba4444LinePair_C
+2606:UpsampleArgbLinePair_C
+2607:UpsampleRgb565LinePair_C
+2608:UpsampleBgrLinePair_C
+2609:UpsampleRgbLinePair_C
+2610:WebPInitUpsamplers
+2611:WebPYuv444ToRgba_C
+2612:WebPYuv444ToBgra_C
+2613:WebPYuv444ToRgb_C
+2614:WebPYuv444ToBgr_C
+2615:WebPYuv444ToArgb_C
+2616:WebPYuv444ToRgba4444_C
+2617:WebPYuv444ToRgb565_C
+2618:WebPInitYUV444Converters
+2619:WebPInitCustomIo
+2620:CustomTeardown
+2621:CustomSetup
+2622:CustomPut
+2623:EmitSampledRGB
+2624:EmitFancyRGB
+2625:EmitYUV
+2626:EmitAlphaRGBA4444
+2627:EmitAlphaYUV
+2628:EmitAlphaRGB
+2629:EmitRescaledYUV
+2630:EmitRescaledAlphaYUV
+2631:EmitRescaledRGB
+2632:EmitRescaledAlphaRGB
+2633:ExportAlphaRGBA4444
+2634:ExportAlpha
+2635:WebPDequantizeLevels
+2636:WebPDeallocateAlphaMemory
+2637:VP8DecompressAlphaRows
+2638:VP8ResetProba
+2639:VP8ParseIntraModeRow
+2640:VP8ParseProba
+2641:VP8ParseQuant
+2642:VP8InitClipTables
+2643:VP8DspInit
+2644:TransformTwo_C
+2645:TransformWHT_C
+2646:TransformDC_C
+2647:TransformAC3_C
+2648:TransformUV_C
+2649:TransformDCUV_C
+2650:VFilter16_C
+2651:VFilter16i_C
+2652:HFilter16_C
+2653:VFilter8_C
+2654:VFilter8i_C
+2655:SimpleVFilter16_C
+2656:SimpleHFilter16_C
+2657:SimpleVFilter16i_C
+2658:SimpleHFilter16i_C
+2659:HFilter16i_C
+2660:HFilter8_C
+2661:HFilter8i_C
+2662:LD4_C
+2663:RD4_C
+2664:VE4_C
+2665:TM4_C
+2666:DC4_C
+2667:HU4_C
+2668:HD4_C
+2669:VL4_C
+2670:VR4_C
+2671:HE4_C
+2672:DC16NoTopLeft_C
+2673:DC16NoLeft_C
+2674:DC16NoTop_C
+2675:HE16_C
+2676:VE16_C
+2677:TM16_C
+2678:DC16_C
+2679:DC8uvNoTopLeft_C
+2680:DC8uvNoLeft_C
+2681:DC8uvNoTop_C
+2682:HE8uv_C
+2683:VE8uv_C
+2684:TM8uv_C
+2685:DC8uv_C
+2686:DitherCombine8x8_C
+2687:TransformOne_C
+2688:FilterLoop26_C
+2689:FilterLoop24_C
+2690:VP8InitRandom
+2691:VP8InitDithering
+2692:VP8ProcessRow
+2693:ReconstructRow
+2694:FinishRow
+2695:VP8EnterCritical
+2696:VP8ExitCritical
+2697:VP8GetThreadMethod
+2698:VP8InitFrame
+2699:VP8InitIoInternal
+2700:VP8New
+2701:GetCoeffsAlt
+2702:GetCoeffsFast
+2703:VP8Delete
+2704:VP8SetError
+2705:VP8GetInfo
+2706:VP8GetHeaders
+2707:ParseFilterHeader
+2708:ParsePartitions
+2709:VP8DecodeMB
+2710:VP8InitScanline
+2711:GetLargeValue
+2712:WebPFlipBuffer
+2713:WebPAllocateDecBuffer
+2714:CheckDecBuffer
+2715:WebPInitDecBufferInternal
+2716:WebPFreeDecBuffer
+2717:WebPCopyDecBufferPixels
+2718:WebPAvoidSlowMemory
+2719:WebPParseHeaders
+2720:ParseHeadersInternal
+2721:ParseOptionalChunks
+2722:ParseVP8Header
+2723:WebPResetDecParams
+2724:WebPInitDecoderConfigInternal
+2725:WebPGetFeaturesInternal
+2726:WebPCheckCropDimensions
+2727:WebPIoInitFromOptions
+2728:WebPDemuxInternal
+2729:ParseSingleImage
+2730:ParseVP8X
+2731:WebPDemuxDelete
+2732:WebPDemuxGetI
+2733:WebPDemuxGetFrame
+2734:WebPDemuxReleaseIterator
+2735:WebPDemuxGetChunk
+2736:SetChunk
+2737:WebPDemuxReleaseChunkIterator
+2738:StoreFrame
+2739:IsValidSimpleFormat
+2740:ParseVP8XChunks
+2741:IsValidExtendedFormat
+2742:NewDecoder
+2743:WebPIDecode
+2744:WebPIDelete
+2745:DoRemap
+2746:IDecode
+2747:WebPIUpdate
+2748:WebPIDecGetRGB
+2749:SkWebpCodec::IsWebp\28void\20const*\2c\20unsigned\20long\29
+2750:SkWebpCodec::MakeFromStream\28std::__2::unique_ptr>\2c\20SkCodec::Result*\29
+2751:SkEncodedInfo::~SkEncodedInfo\28\29
+2752:void\20std::__2::vector>::__emplace_back_slow_path\28int\20const&\2c\20SkEncodedInfo::Alpha&&\29
+2753:SkWebpCodec::onGetValidSubset\28SkIRect*\29\20const
+2754:SkWebpCodec::onGetRepetitionCount\28\29
+2755:SkWebpCodec::onGetFrameCount\28\29
+2756:SkWebpCodec::FrameHolder::onGetFrame\28int\29\20const
+2757:SkWebpCodec::onGetFrameInfo\28int\2c\20SkCodec::FrameInfo*\29\20const
+2758:SkWebpCodec::onGetPixels\28SkImageInfo\20const&\2c\20void*\2c\20unsigned\20long\2c\20SkCodec::Options\20const&\2c\20int*\29
+2759:blend_line\28SkColorType\2c\20void*\2c\20SkColorType\2c\20void\20const*\2c\20SkAlphaType\2c\20bool\2c\20int\29
+2760:SkWebpCodec::FrameHolder::~FrameHolder\28\29
+2761:SkWebpCodec::FrameHolder::~FrameHolder\28\29.1
+2762:SkWebpCodec::~SkWebpCodec\28\29
+2763:SkWebpCodec::~SkWebpCodec\28\29.1
+2764:SkScalingCodec::onGetScaledDimensions\28float\29\20const
+2765:SkScalingCodec::onDimensionsSupported\28SkISize\20const&\29
+2766:SkWebpCodec::onGetEncodedFormat\28\29\20const
+2767:SkWebpCodec::getFrameHolder\28\29\20const
+2768:SkFrame::~SkFrame\28\29
+2769:SkWebpCodec::Frame::~Frame\28\29
+2770:SkWebpCodec::Frame::onReportedAlpha\28\29\20const
+2771:wuffs_base__pixel_swizzler__prepare
+2772:wuffs_base__pixel_swizzler__bgr__bgra_nonpremul__src_over
+2773:wuffs_base__pixel_swizzler__bgr__bgra_nonpremul__src
+2774:wuffs_base__pixel_swizzler__bgr_565__y
+2775:wuffs_base__pixel_swizzler__xxxx__y
+2776:wuffs_base__pixel_swizzler__bgr_565__index_binary_alpha__src_over
+2777:wuffs_base__pixel_swizzler__bgr_565__index__src
+2778:wuffs_base__pixel_swizzler__xxx__index_binary_alpha__src_over
+2779:wuffs_base__pixel_swizzler__xxx__index__src
+2780:wuffs_base__pixel_swizzler__xxxx__index_binary_alpha__src_over
+2781:wuffs_base__pixel_swizzler__xxxx__index__src
+2782:wuffs_base__pixel_swizzler__bgr_565__bgr
+2783:wuffs_base__pixel_swizzler__xxxx__xxx
+2784:wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src_over
+2785:wuffs_base__pixel_swizzler__bgra_premul__bgra_nonpremul__src
+2786:wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul__src_over
+2787:wuffs_base__pixel_swizzler__bgr_565__bgra_nonpremul__src
+2788:wuffs_base__pixel_swizzler__bgra_nonpremul__bgra_nonpremul__src_over
+2789:wuffs_base__pixel_swizzler__copy_4_4
+2790:wuffs_base__pixel_swizzler__copy_3_3
+2791:wuffs_base__pixel_swizzler__copy_1_1
+2792:wuffs_base__pixel_swizzler__xxx__y
+2793:wuffs_lzw__decoder__set_quirk_enabled
+2794:wuffs_lzw__decoder__transform_io
+2795:wuffs_lzw__decoder__workbuf_len
+2796:wuffs_gif__decoder__decode_frame
+2797:wuffs_gif__decoder__decode_frame_config
+2798:wuffs_gif__decoder__decode_image_config
+2799:wuffs_gif__decoder__decode_up_to_id_part1
+2800:wuffs_gif__decoder__frame_dirty_rect
+2801:wuffs_gif__decoder__num_animation_loops
+2802:wuffs_gif__decoder__num_decoded_frame_configs
+2803:wuffs_gif__decoder__num_decoded_frames
+2804:wuffs_gif__decoder__restart_frame
+2805:wuffs_gif__decoder__set_quirk_enabled
+2806:wuffs_gif__decoder__set_report_metadata
+2807:wuffs_gif__decoder__tell_me_more
+2808:wuffs_gif__decoder__workbuf_len
+2809:wuffs_gif__decoder__initialize
+2810:sizeof__wuffs_gif__decoder
+2811:SkInterpretXfermode\28SkPaint\20const&\2c\20bool\29
+2812:SkBlendMode_ShouldPreScaleCoverage\28SkBlendMode\2c\20bool\29
+2813:SkBlendMode_SupportsCoverageAsAlpha\28SkBlendMode\29
+2814:SkBlendMode_AsCoeff\28SkBlendMode\2c\20SkBlendModeCoeff*\2c\20SkBlendModeCoeff*\29
+2815:SkBlendMode_AppendStages\28SkBlendMode\2c\20SkRasterPipeline*\29
+2816:SkBlendMode_Apply\28SkBlendMode\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29
+2817:GrXferProcessor::GrXferProcessor\28GrProcessor::ClassID\29
+2818:GrXferProcessor::GrXferProcessor\28GrProcessor::ClassID\2c\20bool\2c\20bool\2c\20GrProcessorAnalysisCoverage\29
+2819:GrXferProcessor::hasSecondaryOutput\28\29\20const
+2820:GrXferProcessor::getGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\2c\20GrSurfaceOrigin\20const*\2c\20GrDstSampleType\29\20const
+2821:GrXPFactory::GetAnalysisProperties\28GrXPFactory\20const*\2c\20GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\20const&\2c\20GrCaps\20const&\2c\20GrClampType\29
+2822:GrXPFactory::MakeXferProcessor\28GrXPFactory\20const*\2c\20GrProcessorAnalysisColor\20const&\2c\20GrProcessorAnalysisCoverage\2c\20bool\2c\20GrCaps\20const&\2c\20GrClampType\29
+2823:GrXferProcessor::~GrXferProcessor\28\29
+2824:SkSpinlock::contendedAcquire\28\29
+2825:GrBlockAllocator::GrBlockAllocator\28GrBlockAllocator::GrowthPolicy\2c\20unsigned\20long\2c\20unsigned\20long\29
+2826:GrBlockAllocator::Block::~Block\28\29
+2827:GrBlockAllocator::releaseBlock\28GrBlockAllocator::Block*\29
+2828:GrBlockAllocator::stealHeapBlocks\28GrBlockAllocator*\29
+2829:GrBlockAllocator::reset\28\29
+2830:GrBlockAllocator::resetScratchSpace\28\29
+2831:GrBlockAllocator::addBlock\28int\2c\20int\29
+2832:GrMemoryPool::Make\28unsigned\20long\2c\20unsigned\20long\29
+2833:GrMemoryPool::~GrMemoryPool\28\29
+2834:GrMemoryPool::reportLeaks\28\29\20const
+2835:GrMemoryPool::allocate\28unsigned\20long\29
+2836:GrMemoryPool::release\28void*\29
+2837:GrProcessor::operator\20new\28unsigned\20long\29
+2838:GrProcessor::operator\20delete\28void*\29
+2839:GrGLSLBlend::BlendFuncName\28SkBlendMode\29
+2840:GrGLSLBlend::AppendMode\28GrGLSLShaderBuilder*\2c\20char\20const*\2c\20char\20const*\2c\20char\20const*\2c\20SkBlendMode\29
+2841:GrGLSLTypeString\28GrSLType\29
+2842:GrShaderVar::appendDecl\28GrShaderCaps\20const*\2c\20SkString*\29\20const
+2843:GrGLSLVaryingHandler::addPassThroughAttribute\28GrPrimitiveProcessor::Attribute\20const&\2c\20char\20const*\2c\20GrGLSLVaryingHandler::Interpolation\29
+2844:GrGLSLVaryingHandler::addVarying\28char\20const*\2c\20GrGLSLVarying*\2c\20GrGLSLVaryingHandler::Interpolation\29
+2845:GrGLSLVaryingHandler::emitAttributes\28GrGeometryProcessor\20const&\29
+2846:GrGLSLVaryingHandler::addAttribute\28GrShaderVar\20const&\29
+2847:GrGLSLVaryingHandler::setNoPerspective\28\29
+2848:GrGLSLVaryingHandler::finalize\28\29
+2849:GrShaderVar&\20GrTBlockList::emplace_back\28SkString\20const&\2c\20GrSLType\20const&\2c\20GrShaderVar::TypeModifier&&\2c\20GrShaderVar::'unnamed'&&\2c\20SkString&&\2c\20SkString&&\29
+2850:GrShaderVar&\20GrTBlockList::emplace_back\28SkString&&\2c\20GrSLType\20const&\2c\20GrShaderVar::TypeModifier&&\2c\20GrShaderVar::'unnamed'&&\2c\20SkString&&\2c\20SkString&&\29
+2851:GrGLSLVaryingHandler::getVertexDecls\28SkString*\2c\20SkString*\29\20const
+2852:GrGLSLVaryingHandler::getGeomDecls\28SkString*\2c\20SkString*\29\20const
+2853:GrGLSLVaryingHandler::getFragDecls\28SkString*\2c\20SkString*\29\20const
+2854:GrGLSLVertexGeoBuilder::emitNormalizedSkPosition\28SkString*\2c\20char\20const*\2c\20GrSLType\29
+2855:GrGLSLVertexBuilder::onFinalize\28\29
+2856:GrGLSLGeometryBuilder::onFinalize\28\29
+2857:GrGLSLVertexBuilder::~GrGLSLVertexBuilder\28\29
+2858:GrGLSLGeometryBuilder::~GrGLSLGeometryBuilder\28\29
+2859:SkCompressedDataSize\28SkImage::CompressionType\2c\20SkISize\2c\20SkTArray*\2c\20bool\29
+2860:SkCompressedFormatDataSize\28SkImage::CompressionType\2c\20SkISize\2c\20bool\29
+2861:GrSurface::ComputeSize\28GrBackendFormat\20const&\2c\20SkISize\2c\20int\2c\20GrMipmapped\2c\20bool\29
+2862:GrSurface::onRelease\28\29
+2863:GrSurface::onAbandon\28\29
+2864:GrSurface::~GrSurface\28\29
+2865:GrSurface::~GrSurface\28\29.1
+2866:GrSurface::asRenderTarget\28\29
+2867:GrSurface::asRenderTarget\28\29\20const
+2868:GrTexture::markMipmapsDirty\28\29
+2869:GrTexture::markMipmapsClean\28\29
+2870:GrTexture::onGpuMemorySize\28\29\20const
+2871:virtual\20thunk\20to\20GrTexture::onGpuMemorySize\28\29\20const
+2872:GrTexture::GrTexture\28GrGpu*\2c\20SkISize\20const&\2c\20GrProtected\2c\20GrTextureType\2c\20GrMipmapStatus\29
+2873:GrTexture::computeScratchKey\28GrScratchKey*\29\20const
+2874:GrTexture::ComputeScratchKey\28GrCaps\20const&\2c\20GrBackendFormat\20const&\2c\20SkISize\2c\20GrRenderable\2c\20int\2c\20GrMipmapped\2c\20GrProtected\2c\20GrScratchKey*\29
+2875:virtual\20thunk\20to\20GrTexture::computeScratchKey\28GrScratchKey*\29\20const
+2876:GrTexture::asTexture\28\29
+2877:GrTexture::asTexture\28\29\20const
+2878:GrTexture::addIdleProc\28sk_sp\29
+2879:SkTArray\2c\20false>::checkRealloc\28int\2c\20SkTArray\2c\20false>::ReallocType\29
+2880:GrTexture::willRemoveLastRef\28\29
+2881:GrTexture::callIdleProcsOnBehalfOfResource\28\29
+2882:GrTexture::~GrTexture\28\29
+2883:GrTexture::~GrTexture\28\29.1
+2884:virtual\20thunk\20to\20GrTexture::~GrTexture\28\29
+2885:virtual\20thunk\20to\20GrTexture::~GrTexture\28\29.1
+2886:virtual\20thunk\20to\20GrTexture::willRemoveLastRef\28\29
+2887:virtual\20thunk\20to\20GrTexture::asTexture\28\29
+2888:virtual\20thunk\20to\20GrTexture::asTexture\28\29\20const
+2889:GrSamplePatternDictionary::findOrAssignSamplePatternKey\28SkTArray\20const&\29
+2890:std::__2::pair\2c\20int>\2c\20std::__2::__tree_node\2c\20int>\2c\20void*>*\2c\20long>\2c\20bool>\20std::__2::__tree\2c\20int>\2c\20std::__2::__map_value_compare\2c\20std::__2::__value_type\2c\20int>\2c\20GrSamplePatternDictionary::LessThan\2c\20true>\2c\20std::__2::allocator\2c\20int>>>::__emplace_unique_key_args\2c\20std::__2::pair\20const\2c\20int>>\28SkTArray\20const&\2c\20std::__2::pair\20const\2c\20int>&&\29
+2891:SkTArray\20const*\2c\20false>::checkRealloc\28int\2c\20SkTArray\20const*\2c\20false>::ReallocType\29
+2892:std::__2::__tree_node_base*&\20std::__2::__tree\2c\20int>\2c\20std::__2::__map_value_compare\2c\20std::__2::__value_type\2c\20int>\2c\20GrSamplePatternDictionary::LessThan\2c\20true>\2c\20std::__2::allocator\2c\20int>>>::__find_equal>\28std::__2::__tree_end_node*>*&\2c\20SkTArray\20const&\29
+2893:void\20std::__2::__tree_balance_after_insert*>\28std::__2::__tree_node_base*\2c\20std::__2::__tree_node_base*\29
+2894:GrGpuBuffer::GrGpuBuffer\28GrGpu*\2c\20unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\29
+2895:GrGpuBuffer::map\28\29
+2896:GrGpuBuffer::unmap\28\29
+2897:GrGpuBuffer::isMapped\28\29\20const
+2898:GrGpuBuffer::updateData\28void\20const*\2c\20unsigned\20long\29
+2899:GrGpuBuffer::ComputeScratchKeyForDynamicVBO\28unsigned\20long\2c\20GrGpuBufferType\2c\20GrScratchKey*\29
+2900:GrGpuBuffer::computeScratchKey\28GrScratchKey*\29\20const
+2901:GrGpuBuffer::getResourceType\28\29\20const
+2902:GrGpuBuffer::~GrGpuBuffer\28\29
+2903:GrGpuBuffer::~GrGpuBuffer\28\29.1
+2904:GrGpuBuffer::onGpuMemorySize\28\29\20const
+2905:GrGpuBuffer::size\28\29\20const
+2906:GrGpuBuffer::ref\28\29\20const
+2907:GrGpuBuffer::unref\28\29\20const
+2908:GrGpuBuffer::isCpuBuffer\28\29\20const
+2909:non-virtual\20thunk\20to\20GrGpuBuffer::~GrGpuBuffer\28\29
+2910:non-virtual\20thunk\20to\20GrGpuBuffer::~GrGpuBuffer\28\29.1
+2911:non-virtual\20thunk\20to\20GrGpuBuffer::ref\28\29\20const
+2912:non-virtual\20thunk\20to\20GrGpuBuffer::unref\28\29\20const
+2913:non-virtual\20thunk\20to\20GrGpuBuffer::size\28\29\20const
+2914:non-virtual\20thunk\20to\20GrGpuBuffer::isCpuBuffer\28\29\20const
+2915:GrStagingBufferManager::detachBuffers\28\29
+2916:void\20std::__2::vector\2c\20std::__2::allocator>>::__push_back_slow_path\20const&>\28sk_sp\20const&\29
+2917:GrRingBuffer::startSubmit\28GrGpu*\29
+2918:GrRingBuffer::FinishSubmit\28void*\29
+2919:GrGpu::GrGpu\28GrDirectContext*\29
+2920:GrGpu::~GrGpu\28\29
+2921:SkTArray::checkRealloc\28int\2c\20SkTArray::ReallocType\29
+2922:std::__2::__tree\2c\20int>\2c\20std::__2::__map_value_compare\2c\20std::__2::__value_type\2c\20int>\2c\20GrSamplePatternDictionary::LessThan\2c\20true>\2c\20std::__2::allocator\2c\20int>>>::destroy\28std::__2::__tree_node\2c\20int>\2c\20void*>*\29
+2923:GrGpu::~GrGpu\28\29.1
+2924:GrGpu::disconnect\28GrGpu::DisconnectType\29
+2925:GrGpu::createTextureCommon\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrRenderable\2c\20int\2c\20SkBudgeted\2c\20GrProtected\2c\20int\2c\20unsigned\20int\29
+2926:GrGpu::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrRenderable\2c\20int\2c\20GrMipmapped\2c\20SkBudgeted\2c\20GrProtected\29
+2927:GrGpu::createTexture\28SkISize\2c\20GrBackendFormat\20const&\2c\20GrRenderable\2c\20int\2c\20SkBudgeted\2c\20GrProtected\2c\20GrColorType\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\29
+2928:validate_texel_levels\28SkISize\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\2c\20GrCaps\20const*\29
+2929:GrGpu::writePixels\28GrSurface*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20GrColorType\2c\20GrColorType\2c\20GrMipLevel\20const*\2c\20int\2c\20bool\29
+2930:GrGpu::wrapBackendTexture\28GrBackendTexture\20const&\2c\20GrWrapOwnership\2c\20GrWrapCacheable\2c\20GrIOType\29
+2931:GrGpu::wrapRenderableBackendTexture\28GrBackendTexture\20const&\2c\20int\2c\20GrWrapOwnership\2c\20GrWrapCacheable\29
+2932:GrGpu::wrapBackendRenderTarget\28GrBackendRenderTarget\20const&\29
+2933:GrGpu::onWrapVulkanSecondaryCBAsRenderTarget\28SkImageInfo\20const&\2c\20GrVkDrawableInfo\20const&\29
+2934:GrGpu::createBuffer\28unsigned\20long\2c\20GrGpuBufferType\2c\20GrAccessPattern\2c\20void\20const*\29
+2935:GrGpu::copySurface\28GrSurface*\2c\20GrSurface*\2c\20SkIRect\20const&\2c\20SkIPoint\20const&\29
+2936:GrGpu::readPixels\28GrSurface*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20GrColorType\2c\20GrColorType\2c\20void*\2c\20unsigned\20long\29
+2937:GrGpu::didWriteToSurface\28GrSurface*\2c\20GrSurfaceOrigin\2c\20SkIRect\20const*\2c\20unsigned\20int\29\20const
+2938:GrGpu::transferPixelsFrom\28GrSurface*\2c\20int\2c\20int\2c\20int\2c\20int\2c\20GrColorType\2c\20GrColorType\2c\20GrGpuBuffer*\2c\20unsigned\20long\29
+2939:GrGpu::regenerateMipMapLevels\28GrTexture*\29
+2940:GrGpu::resolveRenderTarget\28GrRenderTarget*\2c\20SkIRect\20const&\29
+2941:GrGpu::findOrAssignSamplePatternKey\28GrRenderTarget*\29
+2942:GrGpu::executeFlushInfo\28SkSpan\2c\20SkSurface::BackendSurfaceAccess\2c\20GrFlushInfo\20const&\2c\20GrBackendSurfaceMutableState\20const*\29
+2943:GrGpu::getOpsRenderPass\28GrRenderTarget*\2c\20GrAttachment*\2c\20GrSurfaceOrigin\2c\20SkIRect\20const&\2c\20GrOpsRenderPass::LoadAndStoreInfo\20const&\2c\20GrOpsRenderPass::StencilLoadAndStoreInfo\20const&\2c\20SkTArray\20const&\2c\20GrXferBarrierFlags\29
+2944:GrGpu::submitToGpu\28bool\29
+2945:GrGpu::checkAndResetOOMed\28\29
+2946:GrGpu::stagingBufferManager\28\29
+2947:GrGpu::uniformsRingBuffer\28\29
+2948:GrGpu::isDeviceLost\28\29\20const
+2949:GrGpu::takeOwnershipOfBuffer\28sk_sp\29
+2950:GrGpu::setBackendTextureState\28GrBackendTexture\20const&\2c\20GrBackendSurfaceMutableState\20const&\2c\20GrBackendSurfaceMutableState*\2c\20sk_sp\29
+2951:GrGpu::setBackendRenderTargetState\28GrBackendRenderTarget\20const&\2c\20GrBackendSurfaceMutableState\20const&\2c\20GrBackendSurfaceMutableState*\2c\20sk_sp\29
+2952:GrGpu::precompileShader\28SkData\20const&\2c\20SkData\20const&\29
+2953:GrGpu::storeVkPipelineCacheData\28\29
+2954:GrGpu::insertManualFramebufferBarrier\28\29
+2955:GrGpu::onResetTextureBindings\28\29
+2956:GrGpu::prepareSurfacesForBackendAccessAndStateUpdates\28SkSpan\2c\20SkSurface::BackendSurfaceAccess\2c\20GrBackendSurfaceMutableState\20const*\29
+2957:GrRenderTarget::GrRenderTarget\28GrGpu*\2c\20SkISize\20const&\2c\20int\2c\20GrProtected\2c\20GrAttachment*\29
+2958:GrRenderTarget::~GrRenderTarget\28\29
+2959:GrRenderTarget::~GrRenderTarget\28\29.1
+2960:virtual\20thunk\20to\20GrRenderTarget::~GrRenderTarget\28\29
+2961:GrRenderTarget::~GrRenderTarget\28\29.2
+2962:virtual\20thunk\20to\20GrRenderTarget::~GrRenderTarget\28\29.1
+2963:GrRenderTarget::onRelease\28\29
+2964:virtual\20thunk\20to\20GrRenderTarget::onRelease\28\29
+2965:GrRenderTarget::onAbandon\28\29
+2966:virtual\20thunk\20to\20GrRenderTarget::onAbandon\28\29
+2967:GrRenderTarget::attachStencilAttachment\28sk_sp\29
+2968:GrRenderTarget::numStencilBits\28\29\20const
+2969:GrRenderTarget::getSamplePatternKey\28\29
+2970:GrRenderTarget::getSampleLocations\28\29
+2971:GrRenderTarget::alwaysClearStencil\28\29\20const
+2972:GrRenderTarget::asRenderTarget\28\29
+2973:GrRenderTarget::asRenderTarget\28\29\20const
+2974:GrSurface::getResourceType\28\29\20const
+2975:GrSurface::asTexture\28\29
+2976:GrSurface::asTexture\28\29\20const
+2977:virtual\20thunk\20to\20GrRenderTarget::asRenderTarget\28\29
+2978:virtual\20thunk\20to\20GrRenderTarget::asRenderTarget\28\29\20const
+2979:GrSurface::onSetRelease\28sk_sp\29
+2980:GrGLSLFragmentShaderBuilder::KeyForSurfaceOrigin\28GrSurfaceOrigin\29
+2981:GrGLSLFragmentShaderBuilder::GrGLSLFragmentShaderBuilder\28GrGLSLProgramBuilder*\29
+2982:GrGLSLFragmentShaderBuilder::sampleOffsets\28\29
+2983:GrGLSLFragmentShaderBuilder::maskOffMultisampleCoverage\28char\20const*\2c\20GrGLSLFPFragmentBuilder::ScopeFlags\29
+2984:GrGLSLShaderBuilder::codePrependf\28char\20const*\2c\20...\29
+2985:GrGLSLFragmentShaderBuilder::applyFnToMultisampleMask\28char\20const*\2c\20char\20const*\2c\20GrGLSLFPFragmentBuilder::ScopeFlags\29
+2986:GrGLSLFPFragmentBuilder::writeProcessorFunction\28GrGLSLFragmentProcessor*\2c\20GrGLSLFragmentProcessor::EmitArgs&\29
+2987:GrGLSLFragmentShaderBuilder::dstColor\28\29
+2988:GrShaderVar&\20GrTBlockList::emplace_back\28char\20const*&&\2c\20GrSLType&&\2c\20GrShaderVar::TypeModifier&&\29
+2989:GrGLSLFragmentShaderBuilder::enableCustomOutput\28\29
+2990:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::dstColor\28\29
+2991:GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\28GrBlendEquation\29
+2992:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::enableAdvancedBlendEquationIfNeeded\28GrBlendEquation\29
+2993:GrGLSLFragmentShaderBuilder::enableSecondaryOutput\28\29
+2994:GrGLSLFragmentShaderBuilder::getPrimaryColorOutputName\28\29\20const
+2995:GrGLSLFragmentShaderBuilder::primaryColorOutputIsInOut\28\29\20const
+2996:GrGLSLFragmentShaderBuilder::getSecondaryColorOutputName\28\29\20const
+2997:GrGLSLFragmentShaderBuilder::onFinalize\28\29
+2998:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::onFinalize\28\29
+2999:GrGLSLFragmentShaderBuilder::onBeforeChildProcEmitCode\28\29
+3000:GrGLSLFragmentShaderBuilder::onAfterChildProcEmitCode\28\29
+3001:GrGLSLFPFragmentBuilder::~GrGLSLFPFragmentBuilder\28\29
+3002:GrGLSLFPFragmentBuilder::~GrGLSLFPFragmentBuilder\28\29.1
+3003:virtual\20thunk\20to\20GrGLSLFPFragmentBuilder::~GrGLSLFPFragmentBuilder\28\29
+3004:virtual\20thunk\20to\20GrGLSLFPFragmentBuilder::~GrGLSLFPFragmentBuilder\28\29.1
+3005:GrGLSLXPFragmentBuilder::~GrGLSLXPFragmentBuilder\28\29
+3006:GrGLSLXPFragmentBuilder::~GrGLSLXPFragmentBuilder\28\29.1
+3007:virtual\20thunk\20to\20GrGLSLXPFragmentBuilder::~GrGLSLXPFragmentBuilder\28\29
+3008:virtual\20thunk\20to\20GrGLSLXPFragmentBuilder::~GrGLSLXPFragmentBuilder\28\29.1
+3009:GrGLSLFragmentShaderBuilder::forceHighPrecision\28\29
+3010:GrGLSLFragmentShaderBuilder::getMangleString\28\29\20const
+3011:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+3012:GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+3013:GrGLSLFragmentShaderBuilder::hasCustomColorOutput\28\29\20const
+3014:GrGLSLFragmentShaderBuilder::hasSecondaryOutput\28\29\20const
+3015:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::hasCustomColorOutput\28\29\20const
+3016:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::hasSecondaryOutput\28\29\20const
+3017:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+3018:non-virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+3019:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29
+3020:virtual\20thunk\20to\20GrGLSLFragmentShaderBuilder::~GrGLSLFragmentShaderBuilder\28\29.1
+3021:GrPrimitiveProcessor::GrPrimitiveProcessor\28GrProcessor::ClassID\29
+3022:GrPrimitiveProcessor::textureSampler\28int\29\20const
+3023:GrPrimitiveProcessor::computeCoordTransformsKey\28GrFragmentProcessor\20const&\29\20const
+3024:GrPrimitiveProcessor::TextureSampler::TextureSampler\28GrSamplerState\2c\20GrBackendFormat\20const&\2c\20GrSwizzle\20const&\29
+3025:GrPrimitiveProcessor::TextureSampler::reset\28GrSamplerState\2c\20GrBackendFormat\20const&\2c\20GrSwizzle\20const&\29
+3026:GrPrimitiveProcessor::~GrPrimitiveProcessor\28\29
+3027:GrPrimitiveProcessor::isPathRendering\28\29\20const
+3028:GrPrimitiveProcessor::getTessControlShaderGLSL\28GrGLSLPrimitiveProcessor\20const*\2c\20char\20const*\2c\20GrGLSLUniformHandler\20const&\2c\20GrShaderCaps\20const&\29\20const
+3029:GrPrimitiveProcessor::getTessEvaluationShaderGLSL\28GrGLSLPrimitiveProcessor\20const*\2c\20char\20const*\2c\20GrGLSLUniformHandler\20const&\2c\20GrShaderCaps\20const&\29\20const
+3030:GrPrimitiveProcessor::onTextureSampler\28int\29\20const
+3031:GrGLSLUniformHandler::getUniformMapping\28GrFragmentProcessor\20const&\2c\20SkString\29\20const
+3032:GrGLSLUniformHandler::liftUniformToVertexShader\28GrFragmentProcessor\20const&\2c\20SkString\29
+3033:GrGLSLFragmentProcessor::setData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+3034:GrGLSLFragmentProcessor::emitChildFunction\28int\2c\20GrGLSLFragmentProcessor::EmitArgs&\29
+3035:GrGLSLFragmentProcessor::BuilderInputProvider::childInputs\28int\29\20const
+3036:GrGLSLFragmentProcessor::invokeChild\28int\2c\20char\20const*\2c\20GrGLSLFragmentProcessor::EmitArgs&\2c\20SkSL::String\29
+3037:GrGLSLFragmentProcessor::invokeChildWithMatrix\28int\2c\20char\20const*\2c\20GrGLSLFragmentProcessor::EmitArgs&\2c\20SkSL::String\29
+3038:GrGLSLFragmentProcessor::ParallelIter::ParallelIter\28GrFragmentProcessor\20const&\2c\20GrGLSLFragmentProcessor&\29
+3039:GrGLSLFragmentProcessor::ParallelIter::operator++\28\29
+3040:GrGLSLFragmentProcessor::ParallelIter::operator*\28\29\20const
+3041:GrGLSLFragmentProcessor::ParallelIter::operator==\28GrGLSLFragmentProcessor::ParallelIterEnd\20const&\29\20const
+3042:GrGLSLFragmentProcessor::ParallelRange::ParallelRange\28GrFragmentProcessor\20const&\2c\20GrGLSLFragmentProcessor&\29
+3043:GrConstColorProcessor::onCreateGLSLInstance\28\29\20const
+3044:GrConstColorProcessor::onGetGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\29\20const
+3045:GrConstColorProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+3046:GrConstColorProcessor::usesExplicitReturn\28\29\20const
+3047:GrConstColorProcessor::clone\28\29\20const
+3048:GrConstColorProcessor::~GrConstColorProcessor\28\29
+3049:GrConstColorProcessor::name\28\29\20const
+3050:GrConstColorProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3051:GrGLSLConstColorProcessor::~GrGLSLConstColorProcessor\28\29
+3052:GrGLSLConstColorProcessor::emitCode\28GrGLSLFragmentProcessor::EmitArgs&\29
+3053:GrGLSLConstColorProcessor::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+3054:BlendFragmentProcessor::clone\28\29\20const
+3055:BlendFragmentProcessor::onCreateGLSLInstance\28\29\20const
+3056:GLBlendFragmentProcessor::emitCode\28GrGLSLFragmentProcessor::EmitArgs&\29
+3057:GrBlendFragmentProcessor::Make\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\2c\20SkBlendMode\2c\20GrBlendFragmentProcessor::BlendBehavior\29
+3058:BlendFragmentProcessor::BlendFragmentProcessor\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\2c\20SkBlendMode\2c\20GrBlendFragmentProcessor::BlendBehavior\29
+3059:BlendFragmentProcessor::~BlendFragmentProcessor\28\29
+3060:BlendFragmentProcessor::name\28\29\20const
+3061:BlendFragmentProcessor::usesExplicitReturn\28\29\20const
+3062:BlendFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3063:BlendFragmentProcessor::onGetGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\29\20const
+3064:BlendFragmentProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+3065:GLBlendFragmentProcessor::~GLBlendFragmentProcessor\28\29
+3066:BlendFragmentProcessor::OptFlags\28GrFragmentProcessor\20const*\2c\20GrFragmentProcessor\20const*\2c\20SkBlendMode\29
+3067:GrClampFragmentProcessor::onCreateGLSLInstance\28\29\20const
+3068:GrClampFragmentProcessor::onGetGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\29\20const
+3069:GrClampFragmentProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+3070:GrClampFragmentProcessor::usesExplicitReturn\28\29\20const
+3071:GrClampFragmentProcessor::clone\28\29\20const
+3072:GrClampFragmentProcessor::~GrClampFragmentProcessor\28\29
+3073:GrClampFragmentProcessor::name\28\29\20const
+3074:GrClampFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3075:GrGLSLClampFragmentProcessor::~GrGLSLClampFragmentProcessor\28\29
+3076:GrGLSLClampFragmentProcessor::emitCode\28GrGLSLFragmentProcessor::EmitArgs&\29
+3077:GrGLSLClampFragmentProcessor::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+3078:GrOverrideInputFragmentProcessor::onCreateGLSLInstance\28\29\20const
+3079:GrOverrideInputFragmentProcessor::onGetGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\29\20const
+3080:GrOverrideInputFragmentProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+3081:GrOverrideInputFragmentProcessor::usesExplicitReturn\28\29\20const
+3082:GrOverrideInputFragmentProcessor::clone\28\29\20const
+3083:GrOverrideInputFragmentProcessor::~GrOverrideInputFragmentProcessor\28\29
+3084:GrOverrideInputFragmentProcessor::name\28\29\20const
+3085:GrOverrideInputFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3086:GrGLSLOverrideInputFragmentProcessor::~GrGLSLOverrideInputFragmentProcessor\28\29
+3087:GrGLSLOverrideInputFragmentProcessor::emitCode\28GrGLSLFragmentProcessor::EmitArgs&\29
+3088:GrGLSLOverrideInputFragmentProcessor::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+3089:GrColorFragmentProcessorAnalysis::GrColorFragmentProcessorAnalysis\28GrProcessorAnalysisColor\20const&\2c\20std::__2::unique_ptr>\20const*\2c\20int\29
+3090:GrSwizzle::apply\28SkRasterPipeline*\29\20const
+3091:GrSwizzle::asString\28\29\20const
+3092:GrFragmentProcessor::isEqual\28GrFragmentProcessor\20const&\29\20const
+3093:GrFragmentProcessor::visitProxies\28std::__2::function\20const&\29\20const
+3094:GrFragmentProcessor::visitTextureEffects\28std::__2::function\20const&\29\20const
+3095:GrFragmentProcessor::asTextureEffect\28\29\20const
+3096:GrFragmentProcessor::createGLSLInstance\28\29\20const
+3097:SkTArray::checkRealloc\28int\2c\20SkTArray::ReallocType\29
+3098:GrFragmentProcessor::addAndPushFlagToChildren\28GrFragmentProcessor::PrivateFlags\29
+3099:GrFragmentProcessor::registerChild\28std::__2::unique_ptr>\2c\20SkSL::SampleUsage\29
+3100:SkTArray>\2c\20true>::checkRealloc\28int\2c\20SkTArray>\2c\20true>::ReallocType\29
+3101:GrFragmentProcessor::cloneAndRegisterAllChildProcessors\28GrFragmentProcessor\20const&\29
+3102:GrFragmentProcessor::MulChildByInputAlpha\28std::__2::unique_ptr>\29
+3103:GrFragmentProcessor::MulInputByChildAlpha\28std::__2::unique_ptr>\29
+3104:GrFragmentProcessor::ModulateAlpha\28std::__2::unique_ptr>\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29
+3105:GrFragmentProcessor::ModulateRGBA\28std::__2::unique_ptr>\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\29
+3106:GrFragmentProcessor::ClampPremulOutput\28std::__2::unique_ptr>\29
+3107:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29
+3108:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29
+3109:GrFragmentProcessor::OverrideInput\28std::__2::unique_ptr>\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\29
+3110:GrOverrideInputFragmentProcessor::Make\28std::__2::unique_ptr>\2c\20SkRGBA4f<\28SkAlphaType\292>\20const&\2c\20bool\29
+3111:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29
+3112:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::Make\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29
+3113:SkTArray::checkRealloc\28int\2c\20SkTArray::ReallocType\29
+3114:GrFragmentProcessor::CIter::CIter\28GrPipeline\20const&\29
+3115:GrFragmentProcessor::CIter::operator++\28\29
+3116:GrFragmentProcessor::~GrFragmentProcessor\28\29
+3117:GrFragmentProcessor::usesExplicitReturn\28\29\20const
+3118:GrFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3119:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::~SwizzleFragmentProcessor\28\29
+3120:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::name\28\29\20const
+3121:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::clone\28\29\20const
+3122:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3123:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::onCreateGLSLInstance\28\29\20const
+3124:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::onGetGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\29\20const
+3125:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+3126:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::onCreateGLSLInstance\28\29\20const::GLFP::~GLFP\28\29
+3127:GrGLSLFragmentProcessor::~GrGLSLFragmentProcessor\28\29
+3128:GrFragmentProcessor::SwizzleOutput\28std::__2::unique_ptr>\2c\20GrSwizzle\20const&\29::SwizzleFragmentProcessor::onCreateGLSLInstance\28\29\20const::GLFP::emitCode\28GrGLSLFragmentProcessor::EmitArgs&\29
+3129:GrGLSLFragmentProcessor::onSetData\28GrGLSLProgramDataManager\20const&\2c\20GrFragmentProcessor\20const&\29
+3130:GrGLSLFragmentProcessor::~GrGLSLFragmentProcessor\28\29.1
+3131:GrFragmentProcessor::~GrFragmentProcessor\28\29.1
+3132:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::~PremulFragmentProcessor\28\29
+3133:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::name\28\29\20const
+3134:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::clone\28\29\20const
+3135:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3136:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::onCreateGLSLInstance\28\29\20const
+3137:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::onGetGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\29\20const
+3138:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+3139:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::onCreateGLSLInstance\28\29\20const::GLFP::~GLFP\28\29
+3140:GrFragmentProcessor::MakeInputPremulAndMulByOutput\28std::__2::unique_ptr>\29::PremulFragmentProcessor::onCreateGLSLInstance\28\29\20const::GLFP::emitCode\28GrGLSLFragmentProcessor::EmitArgs&\29
+3141:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::~ComposeProcessor\28\29
+3142:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::name\28\29\20const
+3143:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::clone\28\29\20const
+3144:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::usesExplicitReturn\28\29\20const
+3145:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::constantOutputForConstantInput\28SkRGBA4f<\28SkAlphaType\292>\20const&\29\20const
+3146:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::onCreateGLSLInstance\28\29\20const
+3147:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::onGetGLSLProcessorKey\28GrShaderCaps\20const&\2c\20GrProcessorKeyBuilder*\29\20const
+3148:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::onIsEqual\28GrFragmentProcessor\20const&\29\20const
+3149:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::onCreateGLSLInstance\28\29\20const::GLFP::~GLFP\28\29
+3150:GrFragmentProcessor::Compose\28std::__2::unique_ptr>\2c\20std::__2::unique_ptr>\29::ComposeProcessor::onCreateGLSLInstance\28\29\20const::GLFP::emitCode\28GrGLSLFragmentProcessor::EmitArgs&\29
+3151:std::__2::__function::__base::~__base\5babi:v15007\5d\28\29
+3152:std::__2::__function::__func\20const&\29\20const::$_0\2c\20std::__2::allocator\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::~__func\28\29
+3153:std::__2::__function::__func\20const&\29\20const::$_0\2c\20std::__2::allocator\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28\29\20const
+3154:std::__2::__function::__func\20const&\29\20const::$_0\2c\20std::__2::allocator\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::__clone\28std::__2::__function::__base*\29\20const
+3155:std::__2::__function::__func\20const&\29\20const::$_0\2c\20std::__2::allocator\20const&\29\20const::$_0>\2c\20void\20\28GrTextureEffect\20const&\29>::destroy\28\29
+3156:std::__2::__function::__func\20const&\29\20const::$_0\2c\20std::__2::allocator