From 5c831b4deb85c5a7523325bbf685ebf6a3f5df42 Mon Sep 17 00:00:00 2001 From: mrange Date: Sun, 23 Oct 2022 13:40:00 +0200 Subject: [PATCH 1/9] Fixing spelling complaints --- .github/actions/spelling/allow/allow.txt | 4 +++ .github/actions/spelling/allow/apis.txt | 31 ++++++++++++++++--- .github/actions/spelling/allow/names.txt | 1 + src/cascadia/TerminalCore/Terminal.cpp | 2 +- .../Resources/en-US/Resources.resw | 2 +- src/cascadia/WindowsTerminal/IslandWindow.cpp | 2 +- 6 files changed, 35 insertions(+), 7 deletions(-) diff --git a/.github/actions/spelling/allow/allow.txt b/.github/actions/spelling/allow/allow.txt index 8ac4135781e..780c8e7ad98 100644 --- a/.github/actions/spelling/allow/allow.txt +++ b/.github/actions/spelling/allow/allow.txt @@ -32,10 +32,12 @@ ftp fvar gantt gcc +Geddy geeksforgeeks ghe gje godbolt +hardcode hostname hostnames hyperlink @@ -68,6 +70,7 @@ ok'd overlined pipeline postmodern +Premultiplied ptys qof qps @@ -98,6 +101,7 @@ vsdevcmd We'd wildcards XBox +XTK YBox yeru zhe diff --git a/.github/actions/spelling/allow/apis.txt b/.github/actions/spelling/allow/apis.txt index e7b0749498c..9e339c1c170 100644 --- a/.github/actions/spelling/allow/apis.txt +++ b/.github/actions/spelling/allow/apis.txt @@ -1,3 +1,4 @@ +ABORTIFHUNG ACCEPTFILES ACCESSDENIED acl @@ -6,6 +7,7 @@ alignas alignof APPLYTOSUBMENUS appxrecipe +Bgra bitfield bitfields BUILDBRANCH @@ -22,28 +24,34 @@ colspan COMDLG commandlinetoargv comparand +cosf cstdint +CUsers CXICON CYICON Dacl dataobject dcomp +DECARM +DECXCPR DERR dlldata DNE DONTADDTORECENT -DWMWA -DWORDLONG DWMSBT DWMWA +DWMWA +DWORDLONG endfor ENDSESSION enumset environstrings EXPCMDFLAGS EXPCMDSTATE +fenv filetime FILTERSPEC +FMA FORCEFILESYSTEM FORCEMINIMIZE frac @@ -51,8 +59,10 @@ fullkbd futex GETDESKWALLPAPER GETHIGHCONTRAST +GETKEYSTATE GETMOUSEHOVERTIME Hashtable +hicon HIGHCONTRASTON HIGHCONTRASTW hotkeys @@ -77,6 +87,7 @@ IDirect IExplorer IFACEMETHOD IFile +IFolder IGraphics IInheritable IMap @@ -85,7 +96,9 @@ IObject iosfwd IPackage IPeasant +IService ISetup +ISoftware isspace IStorage istream @@ -95,23 +108,26 @@ ITaskbar itow IUri IVirtual +IWIC KEYSELECT LCID llabs llu localtime lround +lroundf Lsa lsass LSHIFT LTGRAY MAINWINDOW +MAPVIRTUALKEY memchr memicmp MENUCOMMAND MENUDATA -MENUITEMINFOW MENUINFO +MENUITEMINFOW mmeapi MOUSELEAVE mov @@ -134,6 +150,7 @@ NOREPEAT NOTIFYBYPOS NOTIFYICON NOTIFYICONDATA +NOTIMEOUTIFNOTHUNG ntprivapi oaidl ocidl @@ -158,14 +175,15 @@ rcx REGCLS RETURNCMD rfind -roundf ROOTOWNER +roundf RSHIFT SACL schandle semver serializer SETVERSION +SFolder SHELLEXECUTEINFOW shobjidl SHOWHIDE @@ -210,9 +228,14 @@ UOI UPDATEINIFILE userenv USEROBJECTFLAGS +versionf Viewbox +VKKEYSCAN wcsstr wcstoui +wic +WIC +wincodec winmain winsta winstamin diff --git a/.github/actions/spelling/allow/names.txt b/.github/actions/spelling/allow/names.txt index 1c6ef9a373c..c34ad1589b3 100644 --- a/.github/actions/spelling/allow/names.txt +++ b/.github/actions/spelling/allow/names.txt @@ -82,6 +82,7 @@ WDX Wellons Wirt Wojciech +XTK zadjii Zamor Zamora diff --git a/src/cascadia/TerminalCore/Terminal.cpp b/src/cascadia/TerminalCore/Terminal.cpp index 30e20985296..1ed2c57f1af 100644 --- a/src/cascadia/TerminalCore/Terminal.cpp +++ b/src/cascadia/TerminalCore/Terminal.cpp @@ -1716,7 +1716,7 @@ til::point Terminal::GetViewportRelativeCursorPosition() const noexcept // These functions are used by TerminalInput, which must build in conhost // against OneCore compatible signatures. See the definitions in // VtApiRedirection.hpp (which we cannot include cross-project.) -// Since we do nto run on OneCore, we can dispense with the compatibility +// Since we don't run on OneCore, we can dispense with the compatibility // shims. extern "C" UINT OneCoreSafeMapVirtualKeyW(_In_ UINT uCode, _In_ UINT uMapType) { diff --git a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw index f37004e8089..048339a1f77 100644 --- a/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw +++ b/src/cascadia/TerminalSettingsEditor/Resources/en-US/Resources.resw @@ -380,7 +380,7 @@ Launch parameters - Header for a set of settings that determine how terminal launches. These settings include the launch mode, launch position and whether the teminal should center itself on launch. + Header for a set of settings that determine how terminal launches. These settings include the launch mode, launch position and whether the terminal should center itself on launch. Settings that control how the terminal launches diff --git a/src/cascadia/WindowsTerminal/IslandWindow.cpp b/src/cascadia/WindowsTerminal/IslandWindow.cpp index cb3425c1eff..7a44546e0a1 100644 --- a/src/cascadia/WindowsTerminal/IslandWindow.cpp +++ b/src/cascadia/WindowsTerminal/IslandWindow.cpp @@ -1509,7 +1509,7 @@ void IslandWindow::_globalActivateWindow(const uint32_t dropdownDuration, else { // Try first to send a message to the current foreground window. If it's not responding, it may - // be waiting on us to finsh launching. Passing SMTO_NOTIMEOUTIFNOTHUNG means that we get the same + // be waiting on us to finish launching. Passing SMTO_NOTIMEOUTIFNOTHUNG means that we get the same // behavior as before--that is, waiting for the message loop--but we've done an early return if // it turns out that it was hung. // SendMessageTimeoutW returns nonzero if it succeeds. From 052d11242ec0dab3b0a51cff96e88b0266349eaf Mon Sep 17 00:00:00 2001 From: mrange Date: Sun, 23 Oct 2022 13:44:18 +0200 Subject: [PATCH 2/9] Adding git submodule to DirectX ToolKit --- .gitmodules | 3 +++ dep/DirectXTK | 1 + src/renderer/atlas/atlas.vcxproj | 6 +++++- src/renderer/atlas/pch.h | 3 +++ 4 files changed, 12 insertions(+), 1 deletion(-) create mode 160000 dep/DirectXTK diff --git a/.gitmodules b/.gitmodules index 94c5e259626..3414aa80e2f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "dep/gsl"] path = dep/gsl url = https://github.com/microsoft/gsl +[submodule "dep/DirectXTK"] + path = dep/DirectXTK + url = https://github.com/microsoft/DirectXTK.git diff --git a/dep/DirectXTK b/dep/DirectXTK new file mode 160000 index 00000000000..d1d5e731891 --- /dev/null +++ b/dep/DirectXTK @@ -0,0 +1 @@ +Subproject commit d1d5e731891b0f6be3ba4238c16ac99d1c3ff367 diff --git a/src/renderer/atlas/atlas.vcxproj b/src/renderer/atlas/atlas.vcxproj index e9907d15490..3ea9955dd80 100644 --- a/src/renderer/atlas/atlas.vcxproj +++ b/src/renderer/atlas/atlas.vcxproj @@ -7,10 +7,12 @@ RendererAtlas ConRenderAtlas StaticLibrary + $(SolutionDir)\dep\DirectXTK\Inc;$(IncludePath) + @@ -19,12 +21,14 @@ Create + + @@ -83,4 +87,4 @@ $(OutDir)$(ProjectName)\;%(AdditionalIncludeDirectories) - + \ No newline at end of file diff --git a/src/renderer/atlas/pch.h b/src/renderer/atlas/pch.h index a436ae580af..9711d943365 100644 --- a/src/renderer/atlas/pch.h +++ b/src/renderer/atlas/pch.h @@ -25,6 +25,9 @@ #include #include +#include +#include + #include #include #include From ee9cc96c9e1778faaa633970723a071f2aaa07b7 Mon Sep 17 00:00:00 2001 From: mrange Date: Sun, 23 Oct 2022 19:16:16 +0200 Subject: [PATCH 3/9] Added support for loading pixes shader texture to Atlas. Loaded using DirectX ToolKit which in turn relies on WIC. Should enable new classes of pixel shader backgrounds as texture can be logos but also noise like perlin noise which is very useful in many shader scenarios. --- src/cascadia/TerminalControl/ControlCore.cpp | 2 + .../TerminalControl/IControlAppearance.idl | 1 + .../IAppearanceConfig.idl | 1 + .../TerminalSettingsModel/MTSMSettings.h | 1 + .../TerminalSettings.cpp | 1 + .../TerminalSettingsModel/TerminalSettings.h | 1 + src/cascadia/inc/ControlProperties.h | 3 +- src/renderer/atlas/AtlasEngine.api.cpp | 15 +++++++ src/renderer/atlas/AtlasEngine.cpp | 8 ++++ src/renderer/atlas/AtlasEngine.h | 6 +++ src/renderer/atlas/AtlasEngine.r.cpp | 10 ++++- src/renderer/atlas/TextureLoader.cpp | 40 +++++++++++++++++++ src/renderer/atlas/TextureLoader.h | 17 ++++++++ src/renderer/inc/IRenderEngine.hpp | 2 + 14 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 src/renderer/atlas/TextureLoader.cpp create mode 100644 src/renderer/atlas/TextureLoader.h diff --git a/src/cascadia/TerminalControl/ControlCore.cpp b/src/cascadia/TerminalControl/ControlCore.cpp index dba86643b6b..fcb694a021a 100644 --- a/src/cascadia/TerminalControl/ControlCore.cpp +++ b/src/cascadia/TerminalControl/ControlCore.cpp @@ -330,6 +330,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _renderEngine->SetRetroTerminalEffect(_settings->RetroTerminalEffect()); _renderEngine->SetPixelShaderPath(_settings->PixelShaderPath()); + _renderEngine->SetPixelShaderImagePath(_settings->PixelShaderImagePath()); _renderEngine->SetForceFullRepaintRendering(_settings->ForceFullRepaintRendering()); _renderEngine->SetSoftwareRendering(_settings->SoftwareRendering()); @@ -762,6 +763,7 @@ namespace winrt::Microsoft::Terminal::Control::implementation _renderEngine->SetSelectionBackground(til::color{ newAppearance->SelectionBackground() }); _renderEngine->SetRetroTerminalEffect(newAppearance->RetroTerminalEffect()); _renderEngine->SetPixelShaderPath(newAppearance->PixelShaderPath()); + _renderEngine->SetPixelShaderImagePath(newAppearance->PixelShaderImagePath()); _renderer->TriggerRedrawAll(); } } diff --git a/src/cascadia/TerminalControl/IControlAppearance.idl b/src/cascadia/TerminalControl/IControlAppearance.idl index 96c3db75a11..419f2c51892 100644 --- a/src/cascadia/TerminalControl/IControlAppearance.idl +++ b/src/cascadia/TerminalControl/IControlAppearance.idl @@ -17,5 +17,6 @@ namespace Microsoft.Terminal.Control // Experimental settings Boolean RetroTerminalEffect { get; }; String PixelShaderPath { get; }; + String PixelShaderImagePath { get; }; }; } diff --git a/src/cascadia/TerminalSettingsModel/IAppearanceConfig.idl b/src/cascadia/TerminalSettingsModel/IAppearanceConfig.idl index 2cfa305dec4..7423d4844e0 100644 --- a/src/cascadia/TerminalSettingsModel/IAppearanceConfig.idl +++ b/src/cascadia/TerminalSettingsModel/IAppearanceConfig.idl @@ -50,6 +50,7 @@ namespace Microsoft.Terminal.Settings.Model INHERITABLE_APPEARANCE_SETTING(Boolean, RetroTerminalEffect); INHERITABLE_APPEARANCE_SETTING(String, PixelShaderPath); + INHERITABLE_APPEARANCE_SETTING(String, PixelShaderImagePath); INHERITABLE_APPEARANCE_SETTING(IntenseStyle, IntenseTextStyle); INHERITABLE_APPEARANCE_SETTING(Microsoft.Terminal.Core.AdjustTextMode, AdjustIndistinguishableColors); INHERITABLE_APPEARANCE_SETTING(Double, Opacity); diff --git a/src/cascadia/TerminalSettingsModel/MTSMSettings.h b/src/cascadia/TerminalSettingsModel/MTSMSettings.h index 3cae1919883..b7ec40562bf 100644 --- a/src/cascadia/TerminalSettingsModel/MTSMSettings.h +++ b/src/cascadia/TerminalSettingsModel/MTSMSettings.h @@ -108,6 +108,7 @@ Author(s): X(winrt::Windows::UI::Xaml::Media::Stretch, BackgroundImageStretchMode, "backgroundImageStretchMode", winrt::Windows::UI::Xaml::Media::Stretch::UniformToFill) \ X(bool, RetroTerminalEffect, "experimental.retroTerminalEffect", false) \ X(hstring, PixelShaderPath, "experimental.pixelShaderPath") \ + X(hstring, PixelShaderImagePath, "experimental.pixelShaderImagePath") \ X(ConvergedAlignment, BackgroundImageAlignment, "backgroundImageAlignment", ConvergedAlignment::Horizontal_Center | ConvergedAlignment::Vertical_Center) \ X(hstring, ColorSchemeName, "colorScheme", L"Campbell") \ X(hstring, BackgroundImagePath, "backgroundImage") \ diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp index 0ba57857303..46500353060 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.cpp @@ -221,6 +221,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation _RetroTerminalEffect = appearance.RetroTerminalEffect(); _PixelShaderPath = winrt::hstring{ wil::ExpandEnvironmentStringsW(appearance.PixelShaderPath().c_str()) }; + _PixelShaderImagePath = winrt::hstring{ wil::ExpandEnvironmentStringsW(appearance.PixelShaderImagePath().c_str()) }; _IntenseIsBold = WI_IsFlagSet(appearance.IntenseTextStyle(), Microsoft::Terminal::Settings::Model::IntenseStyle::Bold); _IntenseIsBright = WI_IsFlagSet(appearance.IntenseTextStyle(), Microsoft::Terminal::Settings::Model::IntenseStyle::Bright); diff --git a/src/cascadia/TerminalSettingsModel/TerminalSettings.h b/src/cascadia/TerminalSettingsModel/TerminalSettings.h index 0dd65cdfbb7..604b6428571 100644 --- a/src/cascadia/TerminalSettingsModel/TerminalSettings.h +++ b/src/cascadia/TerminalSettingsModel/TerminalSettings.h @@ -155,6 +155,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation INHERITABLE_SETTING(Model::TerminalSettings, bool, ForceVTInput, false); INHERITABLE_SETTING(Model::TerminalSettings, hstring, PixelShaderPath); + INHERITABLE_SETTING(Model::TerminalSettings, hstring, PixelShaderImagePath); INHERITABLE_SETTING(Model::TerminalSettings, bool, Elevate, false); diff --git a/src/cascadia/inc/ControlProperties.h b/src/cascadia/inc/ControlProperties.h index 5911fa26183..1be31521439 100644 --- a/src/cascadia/inc/ControlProperties.h +++ b/src/cascadia/inc/ControlProperties.h @@ -26,7 +26,8 @@ X(winrt::Windows::UI::Xaml::HorizontalAlignment, BackgroundImageHorizontalAlignment, winrt::Windows::UI::Xaml::HorizontalAlignment::Center) \ X(winrt::Windows::UI::Xaml::VerticalAlignment, BackgroundImageVerticalAlignment, winrt::Windows::UI::Xaml::VerticalAlignment::Center) \ X(bool, RetroTerminalEffect, false) \ - X(winrt::hstring, PixelShaderPath) + X(winrt::hstring, PixelShaderPath) \ + X(winrt::hstring, PixelShaderImagePath) // --------------------------- Core Settings --------------------------- // All of these settings are defined in ICoreSettings. diff --git a/src/renderer/atlas/AtlasEngine.api.cpp b/src/renderer/atlas/AtlasEngine.api.cpp index 1e1776559bc..d048151ddf0 100644 --- a/src/renderer/atlas/AtlasEngine.api.cpp +++ b/src/renderer/atlas/AtlasEngine.api.cpp @@ -296,6 +296,11 @@ HRESULT AtlasEngine::Enable() noexcept return _api.customPixelShaderPath; } +[[nodiscard]] std::wstring_view AtlasEngine::GetPixelShaderImagePath() noexcept +{ + return _api.customPixelShaderImagePath; +} + [[nodiscard]] bool AtlasEngine::GetRetroTerminalEffect() const noexcept { return _api.useRetroTerminalEffect; @@ -370,6 +375,16 @@ void AtlasEngine::SetPixelShaderPath(std::wstring_view value) noexcept } } +void AtlasEngine::SetPixelShaderImagePath(std::wstring_view value) noexcept +{ + if (_api.customPixelShaderImagePath != value) + { + _api.customPixelShaderImagePath = value; + _resolveTransparencySettings(); + WI_SetFlag(_api.invalidations, ApiInvalidations::Device); + } +} + void AtlasEngine::SetRetroTerminalEffect(bool enable) noexcept { if (_api.useRetroTerminalEffect != enable) diff --git a/src/renderer/atlas/AtlasEngine.cpp b/src/renderer/atlas/AtlasEngine.cpp index c99c9303b21..182f8df11a1 100644 --- a/src/renderer/atlas/AtlasEngine.cpp +++ b/src/renderer/atlas/AtlasEngine.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include "../../interactivity/win32/CustomWindowMessages.h" @@ -676,6 +677,13 @@ void AtlasEngine::_createResources() THROW_IF_FAILED(_r.device->CreateBuffer(&desc, nullptr, _r.constantBuffer.put())); } + if (!_api.customPixelShaderImagePath.empty()) + { + _r.customShaderTexture = LoadShaderTextureFromFile( + _r.device.get(), + _api.customPixelShaderImagePath); + } + THROW_IF_FAILED(_r.device->CreateVertexShader(&shader_vs[0], sizeof(shader_vs), nullptr, _r.vertexShader.put())); THROW_IF_FAILED(_r.device->CreatePixelShader(&shader_ps[0], sizeof(shader_ps), nullptr, _r.pixelShader.put())); diff --git a/src/renderer/atlas/AtlasEngine.h b/src/renderer/atlas/AtlasEngine.h index 6a1533b4f6e..b61cb09034a 100644 --- a/src/renderer/atlas/AtlasEngine.h +++ b/src/renderer/atlas/AtlasEngine.h @@ -10,6 +10,8 @@ #include "../../renderer/inc/IRenderEngine.hpp" #include "DWriteTextAnalysis.h" +#include "TextureLoader.h" + namespace Microsoft::Console::Render { struct TextAnalysisSinkResult; @@ -61,6 +63,7 @@ namespace Microsoft::Console::Render // DxRenderer - getter HRESULT Enable() noexcept override; [[nodiscard]] std::wstring_view GetPixelShaderPath() noexcept override; + [[nodiscard]] std::wstring_view GetPixelShaderImagePath() noexcept override; [[nodiscard]] bool GetRetroTerminalEffect() const noexcept override; [[nodiscard]] float GetScaling() const noexcept override; [[nodiscard]] Types::Viewport GetViewportInCharacters(const Types::Viewport& viewInPixels) const noexcept override; @@ -72,6 +75,7 @@ namespace Microsoft::Console::Render void SetForceFullRepaintRendering(bool enable) noexcept override; [[nodiscard]] HRESULT SetHwnd(HWND hwnd) noexcept override; void SetPixelShaderPath(std::wstring_view value) noexcept override; + void SetPixelShaderImagePath(std::wstring_view value) noexcept override; void SetRetroTerminalEffect(bool enable) noexcept override; void SetSelectionBackground(COLORREF color, float alpha = 0.5f) noexcept override; void SetSoftwareRendering(bool enable) noexcept override; @@ -1004,6 +1008,7 @@ namespace Microsoft::Console::Render wil::com_ptr customPixelShader; wil::com_ptr customShaderConstantBuffer; wil::com_ptr customShaderSamplerState; + ShaderTexture customShaderTexture; std::chrono::steady_clock::time_point customShaderStartTime; // D2D resources @@ -1105,6 +1110,7 @@ namespace Microsoft::Console::Render bool enableTransparentBackground = false; std::wstring customPixelShaderPath; // changes are flagged as ApiInvalidations::Device + std::wstring customPixelShaderImagePath; bool useRetroTerminalEffect = false; // changes are flagged as ApiInvalidations::Device bool useSoftwareRendering = false; // changes are flagged as ApiInvalidations::Device diff --git a/src/renderer/atlas/AtlasEngine.r.cpp b/src/renderer/atlas/AtlasEngine.r.cpp index a8bc092c0b8..74882fd742c 100644 --- a/src/renderer/atlas/AtlasEngine.r.cpp +++ b/src/renderer/atlas/AtlasEngine.r.cpp @@ -243,7 +243,15 @@ void AtlasEngine::_renderWithCustomShader() const // PS: Pixel Shader _r.deviceContext->PSSetShader(_r.customPixelShader.get(), nullptr, 0); _r.deviceContext->PSSetConstantBuffers(0, 1, _r.customShaderConstantBuffer.addressof()); - _r.deviceContext->PSSetShaderResources(0, 1, _r.customOffscreenTextureView.addressof()); + + ID3D11ShaderResourceView* const resourceViews[]{ + _r.customOffscreenTextureView.get(), + _r.customShaderTexture.TextureView.get(), + }; + // Checking if customer shader texture is set + const UINT numViews = resourceViews[1] ? 2 : 1; + _r.deviceContext->PSSetShaderResources(0, numViews, &resourceViews[0]); + _r.deviceContext->PSSetSamplers(0, 1, _r.customShaderSamplerState.addressof()); _r.deviceContext->Draw(4, 0); diff --git a/src/renderer/atlas/TextureLoader.cpp b/src/renderer/atlas/TextureLoader.cpp new file mode 100644 index 00000000000..c9c8ff39b34 --- /dev/null +++ b/src/renderer/atlas/TextureLoader.cpp @@ -0,0 +1,40 @@ +#include "pch.h" + +#include "TextureLoader.h" + +#include "WICTextureLoader.h" + +namespace Microsoft::Console::Render +{ + Microsoft::Console::Render::ShaderTexture LoadShaderTextureFromFile( + ID3D11Device* d3dDevice, + const std::wstring& fileName) + { + Microsoft::Console::Render::ShaderTexture result; + + const auto hr = DirectX::CreateWICTextureFromFileEx( + d3dDevice, + fileName.c_str(), + 0, + D3D11_USAGE_DEFAULT, + D3D11_BIND_SHADER_RESOURCE, + 0, + 0, + DirectX::WIC_LOADER_DEFAULT + // TODO: Should we ignore SRGB conversion? + // If we use the default settings the texture is converted + // from SRGB into linear RGB which do make a lot of sense but + // can also be a somewhat surprising to devs not used to it. + | DirectX::WIC_LOADER_IGNORE_SRGB, + result.Texture.addressof(), + result.TextureView.addressof()); + + if (FAILED(hr)) + { + LOG_HR(hr); + return Microsoft::Console::Render::ShaderTexture(); + } + + return result; + } +} diff --git a/src/renderer/atlas/TextureLoader.h b/src/renderer/atlas/TextureLoader.h new file mode 100644 index 00000000000..cf742b13547 --- /dev/null +++ b/src/renderer/atlas/TextureLoader.h @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT license. + +#pragma once + +namespace Microsoft::Console::Render +{ + struct ShaderTexture + { + wil::com_ptr Texture; + wil::com_ptr TextureView; + }; + + Microsoft::Console::Render::ShaderTexture LoadShaderTextureFromFile( + ID3D11Device* d3dDevice, + const std::wstring& fileName); +} diff --git a/src/renderer/inc/IRenderEngine.hpp b/src/renderer/inc/IRenderEngine.hpp index 06a756c627c..4a7732cc3d8 100644 --- a/src/renderer/inc/IRenderEngine.hpp +++ b/src/renderer/inc/IRenderEngine.hpp @@ -93,6 +93,7 @@ namespace Microsoft::Console::Render // DxRenderer - getter virtual HRESULT Enable() noexcept { return S_OK; } virtual [[nodiscard]] std::wstring_view GetPixelShaderPath() noexcept { return {}; } + virtual [[nodiscard]] std::wstring_view GetPixelShaderImagePath() noexcept { return {}; } virtual [[nodiscard]] bool GetRetroTerminalEffect() const noexcept { return false; } virtual [[nodiscard]] float GetScaling() const noexcept { return 1; } virtual [[nodiscard]] Types::Viewport GetViewportInCharacters(const Types::Viewport& viewInPixels) const noexcept { return Types::Viewport::Empty(); } @@ -104,6 +105,7 @@ namespace Microsoft::Console::Render virtual void SetForceFullRepaintRendering(bool enable) noexcept {} virtual [[nodiscard]] HRESULT SetHwnd(const HWND hwnd) noexcept { return E_NOTIMPL; } virtual void SetPixelShaderPath(std::wstring_view value) noexcept {} + virtual void SetPixelShaderImagePath(std::wstring_view value) noexcept {} virtual void SetRetroTerminalEffect(bool enable) noexcept {} virtual void SetSelectionBackground(const COLORREF color, const float alpha = 0.5f) noexcept {} virtual void SetSoftwareRendering(bool enable) noexcept {} From 44a86995e93196edfb5123a9aecb8aa46c785a84 Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Thu, 22 Feb 2024 10:30:51 -0600 Subject: [PATCH 4/9] Squashed commit of the following: commit fc0e142505333582ba26b0b0047b5b5b6762f83f Author: Mike Griese Date: Thu Feb 22 10:28:52 2024 -0600 actually put this in the right place in atlas commit aa3df882a9a86cad528951ad3dedff044e635dbf Merge: ee9cc96c9 ec434e3fb Author: Mike Griese Date: Thu Feb 22 09:51:15 2024 -0600 Merge remote-tracking branch 'origin/main' into pull/14073 and like 900 other commits --- .clang-format | 60 +- .config/dotnet-tools.json | 2 +- .git-blame-ignore-revs | 15 + .github/ISSUE_TEMPLATE/Bug_Report.yml | 2 +- .github/PULL_REQUEST_TEMPLATE.md | 22 +- .github/actions/spelling/README.md | 1 + .github/actions/spelling/advice.md | 8 +- .github/actions/spelling/allow/allow.txt | 37 +- .github/actions/spelling/allow/apis.txt | 47 +- .github/actions/spelling/allow/microsoft.txt | 15 + .github/actions/spelling/allow/names.txt | 14 +- .github/actions/spelling/candidate.patterns | 643 ++++ .github/actions/spelling/excludes.txt | 75 +- ...cdb9b77d6827c0202f51acd4205b017015bfff.txt | 5 + .github/actions/spelling/expect/alphabet.txt | 13 +- .github/actions/spelling/expect/expect.txt | 1067 ++---- .github/actions/spelling/expect/web.txt | 4 +- .../actions/spelling/line_forbidden.patterns | 93 +- .github/actions/spelling/patterns/0_n.txt | 2 - .github/actions/spelling/patterns/0_r.txt | 8 - .github/actions/spelling/patterns/0_t.txt | 13 - .github/actions/spelling/patterns/README.md | 4 - .../actions/spelling/patterns/patterns.txt | 137 +- .github/actions/spelling/reject.txt | 28 +- .github/fabricbot.json | 3156 ---------------- .github/policies/resourceManagement.yml | 751 ++++ .github/workflows/addToProject.yml | 3 +- .github/workflows/similarIssues.yml | 32 + .github/workflows/spelling2.yml | 171 +- .github/workflows/winget.yml | 24 + .vscode/settings.json | 8 +- CONTRIBUTING.md | 4 +- NOTICE.md | 68 +- OpenConsole.sln | 1294 +------ README.md | 60 +- SUPPORT.md | 2 +- build/Helix/AzurePipelinesHelperScripts.ps1 | 175 - build/Helix/ConvertWttLogToXUnit.ps1 | 4 +- build/Helix/EnsureMachineState.ps1 | 112 - build/Helix/GenerateTestProjFile.ps1 | 336 -- build/Helix/HelixTestHelpers.cs | 56 +- build/Helix/InstallTestAppDependencies.ps1 | 12 - build/Helix/OutputFailedTestQuery.ps1 | 8 - build/Helix/OutputSubResultsJsonFiles.ps1 | 32 - .../Helix/OutputTestErrorsForAzureDevops.ps1 | 38 + build/Helix/OutputTestResults.ps1 | 131 - build/Helix/PrepareHelixPayload.ps1 | 68 - build/Helix/ProcessHelixFiles.ps1 | 130 - build/Helix/RunTestsInHelix.proj | 20 - build/Helix/UpdateUnreliableTests.ps1 | 136 - build/Helix/global.json | 5 - build/Helix/packages.config | 9 - build/Helix/readme.md | 32 - build/Helix/runtests.cmd | 105 - build/config/ESRPSigning_ConPTY.json | 51 - build/config/esrp.build.batch.conpty.json | 47 + ...srp.build.batch.terminal_constituents.json | 65 + build/config/esrp.build.batch.wpf.json | 46 + build/config/esrp.build.batch.wpfdotnet.json | 47 + build/config/release.gdnbaselines | 1127 ++++++ build/config/template.appinstaller | 38 + build/config/tsa.json | 6 + build/packages.config | 2 - build/pgo/PGO.DB.proj | 3 +- build/pgo/Terminal.PGO.DB.nuspec | 1 + build/pgo/Terminal.PGO.props | 11 +- build/pipelines/ci.yml | 136 +- build/pipelines/daily-loc-submission.yml | 1 + build/pipelines/feature-flag-ci.yml | 21 +- build/pipelines/fuzz.yml | 80 +- build/pipelines/ob-nightly.yml | 53 + build/pipelines/ob-release.yml | 83 + build/pipelines/pgo.yml | 79 +- build/pipelines/release.yml | 723 ---- .../templates-v2/job-build-package-wpf.yml | 144 + .../templates-v2/job-build-project.yml | 298 ++ .../templates-v2/job-check-code-format.yml | 15 + .../job-deploy-to-azure-storage.yml | 92 + .../templates-v2/job-index-github-codenav.yml | 16 + .../job-merge-msix-into-bundle.yml | 152 + .../templates-v2/job-package-conpty.yml | 129 + .../job-pgo-build-nuget-and-publish.yml} | 54 +- .../templates-v2/job-pgo-merge-pgd.yml | 75 + .../templates-v2/job-publish-symbols.yml | 97 + .../templates-v2/job-run-pgo-tests.yml | 82 + .../templates-v2/job-submit-windows-vpack.yml | 81 + .../job-test-project.yml} | 75 +- .../pipeline-full-release-build.yml | 181 + .../pipeline-onebranch-full-release-build.yml | 268 ++ .../steps-create-signing-config.yml | 35 + .../steps-download-bin-dir-artifact.yml | 24 + .../steps-ensure-nuget-version.yml | 5 + .../steps-fetch-and-prepare-localizations.yml | 27 + .../steps-restore-nuget.yml} | 10 +- .../variables-nuget-package-version.yml | 27 + .../variables-onebranch-config.yml | 2 + .../templates/build-console-audit-job.yml | 34 - .../pipelines/templates/build-console-ci.yml | 31 - .../build-console-compliance-job.yml | 203 -- .../templates/build-console-fuzzing.yml | 90 - .../pipelines/templates/build-console-pgo.yml | 55 - .../templates/build-console-steps.yml | 130 - .../pipelines/templates/check-formatting.yml | 17 - build/pipelines/templates/codenav-indexer.yml | 22 - .../templates/console-ci-helix-job.yml | 25 - .../templates/helix-createprojfile-steps.yml | 15 - .../helix-processtestresults-job.yml | 71 - .../templates/helix-runtests-job.yml | 164 - .../pipelines/templates/pgo-merge-pgd-job.yml | 70 - build/rules/Branding.targets | 1 + .../GenerateSxsManifestsFromWinmds.targets | 2 +- .../Microsoft.UI.Xaml.Additional.targets | 16 + build/scripts/Invoke-FormattingCheck.ps1 | 2 +- build/scripts/Merge-PriFiles.ps1 | 78 + .../Merge-TerminalAndXamlResources.ps1 | 47 + .../New-AppInstallerFromTemplateAndBundle.ps1 | 42 + .../New-UnpackagedTerminalDistribution.ps1 | 150 + .../Patch-ManifestsToWindowsVersion.ps1 | 14 - build/scripts/Run-Tests.ps1 | 42 +- build/scripts/Test-WindowsTerminalPackage.ps1 | 30 +- common.openconsole.props | 18 - custom.props | 16 +- dep/nuget/packages.config | 12 +- doc/AddASetting.md | 16 +- doc/COOKED_READ_DATA.md | 96 + doc/ConsoleHostSettings.md | 2 +- doc/Niksa.md | 6 +- doc/ORGANIZATION.md | 3 - doc/cascadia/profiles.schema.json | 678 +++- doc/color_nudging.html | 235 ++ doc/roadmap-2022.md | 8 +- doc/roadmap-2023.md | 76 + .../#11000 - Marks/Shell-Integration-Marks.md | 499 +++ doc/specs/#11000 - Marks/ftcs-diagram.png | Bin 0 -> 205790 bytes .../vscode-shell-integration-gutter-mark.png | Bin 0 -> 38829 bytes .../#1571 - New Tab Menu Customization.md | 150 +- .../3121-suggestion-menu-2023-000.gif | Bin 0 -> 599320 bytes .../#1595 - Suggestions UI/Suggestions-UI.md | 744 ++++ .../command-history-suggestions.gif | Bin 0 -> 987735 bytes .../shell-autocomplete-july-2022-000.gif | Bin 0 -> 1073979 bytes .../tasks-suggestions.gif | Bin 0 -> 1469143 bytes .../vscode-shell-suggestions.gif | Bin 0 -> 441609 bytes ... commands, and synthesized action names.md | 2 +- doc/specs/#492 - Default Terminal/spec.md | 2 +- .../Keyboard-Selection.md | 2 +- ... Elevation Quality of Life Improvements.md | 6 +- ...2 - Windows Terminal Session Management.md | 2 +- .../#653 - Quake Mode/#653 - Quake Mode.md | 2 +- .../#6899 - Action IDs/#6899 - Action IDs.md | 4 +- .../#7335 - Console Allocation Policy.md | 396 ++ .../#754 - Cascading Default Settings.md | 8 +- .../#885 - Terminal Settings Model.md | 4 +- .../#2634 - Broadcast Input.md | 410 +++ .../broadcast-input-borders.gif | Bin 0 -> 343868 bytes .../broadcast-segoe-icon.png | Bin 0 -> 3080 bytes .../#3327 - Application Theming.md | 2 +- .../#642 - Buffer Exporting and Logging.md | 380 ++ .../ConEmu-logging-settings.png | Bin 0 -> 74280 bytes .../PuTTY-logging-settings.png | Bin 0 -> 14035 bytes .../SecureCRT-logging-settings.png | Bin 0 -> 58924 bytes .../securecrt-context-menu.png | Bin 0 -> 42835 bytes doc/specs/drafts/#997 Non-Terminal-Panes.md | 2 +- doc/specs/portable-mode-spec.md | 90 + doc/terminal-a11y-2023.md | 217 ++ doc/terminal-v2-roadmap.md | 2 +- oss/libpopcnt/libpopcnt.h | 2 +- oss/stb/LICENSE | 37 + oss/stb/MAINTAINER_README.md | 4 + oss/stb/cgmanifest.json | 15 + oss/stb/stb_rect_pack.h | 623 ++++ res/terminal/Terminal_Can.svg | 407 +++ res/terminal/Terminal_Can_HC.svg | 17 + .../images-Can/LargeTile.scale-100.png | Bin 0 -> 4199 bytes .../LargeTile.scale-100_contrast-black.png | Bin 0 -> 1779 bytes .../LargeTile.scale-100_contrast-white.png | Bin 0 -> 1682 bytes .../images-Can/LargeTile.scale-125.png | Bin 0 -> 5391 bytes .../LargeTile.scale-125_contrast-black.png | Bin 0 -> 2101 bytes .../LargeTile.scale-125_contrast-white.png | Bin 0 -> 2057 bytes .../images-Can/LargeTile.scale-150.png | Bin 0 -> 6604 bytes .../LargeTile.scale-150_contrast-black.png | Bin 0 -> 2358 bytes .../LargeTile.scale-150_contrast-white.png | Bin 0 -> 2367 bytes .../images-Can/LargeTile.scale-200.png | Bin 0 -> 9248 bytes .../LargeTile.scale-200_contrast-black.png | Bin 0 -> 3152 bytes .../LargeTile.scale-200_contrast-white.png | Bin 0 -> 3108 bytes .../images-Can/LargeTile.scale-400.png | Bin 0 -> 21726 bytes .../LargeTile.scale-400_contrast-black.png | Bin 0 -> 7162 bytes .../LargeTile.scale-400_contrast-white.png | Bin 0 -> 7154 bytes .../images-Can/LockScreenLogo.scale-100.png | Bin 0 -> 834 bytes ...ockScreenLogo.scale-100_contrast-black.png | Bin 0 -> 595 bytes ...ockScreenLogo.scale-100_contrast-white.png | Bin 0 -> 586 bytes .../images-Can/LockScreenLogo.scale-125.png | Bin 0 -> 1002 bytes ...ockScreenLogo.scale-125_contrast-black.png | Bin 0 -> 770 bytes ...ockScreenLogo.scale-125_contrast-white.png | Bin 0 -> 680 bytes .../images-Can/LockScreenLogo.scale-150.png | Bin 0 -> 1204 bytes ...ockScreenLogo.scale-150_contrast-black.png | Bin 0 -> 842 bytes ...ockScreenLogo.scale-150_contrast-white.png | Bin 0 -> 730 bytes .../images-Can/LockScreenLogo.scale-200.png | Bin 0 -> 1524 bytes ...ockScreenLogo.scale-200_contrast-black.png | Bin 0 -> 963 bytes ...ockScreenLogo.scale-200_contrast-white.png | Bin 0 -> 792 bytes .../images-Can/LockScreenLogo.scale-400.png | Bin 0 -> 3180 bytes ...ockScreenLogo.scale-400_contrast-black.png | Bin 0 -> 1721 bytes ...ockScreenLogo.scale-400_contrast-white.png | Bin 0 -> 1298 bytes .../images-Can/SmallTile.scale-100.png | Bin 0 -> 1520 bytes .../SmallTile.scale-100_contrast-black.png | Bin 0 -> 805 bytes .../SmallTile.scale-100_contrast-white.png | Bin 0 -> 798 bytes .../images-Can/SmallTile.scale-125.png | Bin 0 -> 1827 bytes .../SmallTile.scale-125_contrast-black.png | Bin 0 -> 906 bytes .../SmallTile.scale-125_contrast-white.png | Bin 0 -> 904 bytes .../images-Can/SmallTile.scale-150.png | Bin 0 -> 1987 bytes .../SmallTile.scale-150_contrast-black.png | Bin 0 -> 1026 bytes .../SmallTile.scale-150_contrast-white.png | Bin 0 -> 1026 bytes .../images-Can/SmallTile.scale-200.png | Bin 0 -> 2945 bytes .../SmallTile.scale-200_contrast-black.png | Bin 0 -> 1236 bytes .../SmallTile.scale-200_contrast-white.png | Bin 0 -> 1174 bytes .../images-Can/SmallTile.scale-400.png | Bin 0 -> 5908 bytes .../SmallTile.scale-400_contrast-black.png | Bin 0 -> 2082 bytes .../SmallTile.scale-400_contrast-white.png | Bin 0 -> 2100 bytes .../images-Can/SplashScreen.scale-100.png | Bin 0 -> 4613 bytes .../SplashScreen.scale-100_contrast-black.png | Bin 0 -> 1940 bytes .../SplashScreen.scale-100_contrast-white.png | Bin 0 -> 1847 bytes .../images-Can/SplashScreen.scale-125.png | Bin 0 -> 6058 bytes .../SplashScreen.scale-125_contrast-black.png | Bin 0 -> 2408 bytes .../SplashScreen.scale-125_contrast-white.png | Bin 0 -> 2363 bytes .../images-Can/SplashScreen.scale-150.png | Bin 0 -> 7480 bytes .../SplashScreen.scale-150_contrast-black.png | Bin 0 -> 2777 bytes .../SplashScreen.scale-150_contrast-white.png | Bin 0 -> 2780 bytes .../images-Can/SplashScreen.scale-200.png | Bin 0 -> 10851 bytes .../SplashScreen.scale-200_contrast-black.png | Bin 0 -> 3898 bytes .../SplashScreen.scale-200_contrast-white.png | Bin 0 -> 3848 bytes .../images-Can/SplashScreen.scale-400.png | Bin 0 -> 27860 bytes .../SplashScreen.scale-400_contrast-black.png | Bin 0 -> 10033 bytes .../SplashScreen.scale-400_contrast-white.png | Bin 0 -> 10012 bytes .../Square150x150Logo.scale-100.png | Bin 0 -> 1801 bytes ...re150x150Logo.scale-100_contrast-black.png | Bin 0 -> 954 bytes ...re150x150Logo.scale-100_contrast-white.png | Bin 0 -> 936 bytes .../Square150x150Logo.scale-125.png | Bin 0 -> 2321 bytes ...re150x150Logo.scale-125_contrast-black.png | Bin 0 -> 1208 bytes ...re150x150Logo.scale-125_contrast-white.png | Bin 0 -> 1152 bytes .../Square150x150Logo.scale-150.png | Bin 0 -> 3150 bytes ...re150x150Logo.scale-150_contrast-black.png | Bin 0 -> 1374 bytes ...re150x150Logo.scale-150_contrast-white.png | Bin 0 -> 1302 bytes .../Square150x150Logo.scale-200.png | Bin 0 -> 4165 bytes ...re150x150Logo.scale-200_contrast-black.png | Bin 0 -> 1764 bytes ...re150x150Logo.scale-200_contrast-white.png | Bin 0 -> 1670 bytes .../Square150x150Logo.scale-400.png | Bin 0 -> 9151 bytes ...re150x150Logo.scale-400_contrast-black.png | Bin 0 -> 3117 bytes ...re150x150Logo.scale-400_contrast-white.png | Bin 0 -> 3073 bytes .../images-Can/Square44x44Logo.scale-100.png | Bin 0 -> 1331 bytes ...uare44x44Logo.scale-100_contrast-black.png | Bin 0 -> 667 bytes ...uare44x44Logo.scale-100_contrast-white.png | Bin 0 -> 670 bytes .../images-Can/Square44x44Logo.scale-125.png | Bin 0 -> 1585 bytes ...uare44x44Logo.scale-125_contrast-black.png | Bin 0 -> 775 bytes ...uare44x44Logo.scale-125_contrast-white.png | Bin 0 -> 777 bytes .../images-Can/Square44x44Logo.scale-150.png | Bin 0 -> 1732 bytes ...uare44x44Logo.scale-150_contrast-black.png | Bin 0 -> 841 bytes ...uare44x44Logo.scale-150_contrast-white.png | Bin 0 -> 828 bytes .../images-Can/Square44x44Logo.scale-200.png | Bin 0 -> 2207 bytes ...uare44x44Logo.scale-200_contrast-black.png | Bin 0 -> 1032 bytes ...uare44x44Logo.scale-200_contrast-white.png | Bin 0 -> 1010 bytes .../images-Can/Square44x44Logo.scale-400.png | Bin 0 -> 4821 bytes ...uare44x44Logo.scale-400_contrast-black.png | Bin 0 -> 1803 bytes ...uare44x44Logo.scale-400_contrast-white.png | Bin 0 -> 1726 bytes .../Square44x44Logo.targetsize-16.png | Bin 0 -> 554 bytes ...x44Logo.targetsize-16_altform-unplated.png | Bin 0 -> 554 bytes ...ize-16_altform-unplated_contrast-black.png | Bin 0 -> 404 bytes ...ize-16_altform-unplated_contrast-white.png | Bin 0 -> 485 bytes ...44x44Logo.targetsize-16_contrast-black.png | Bin 0 -> 404 bytes ...44x44Logo.targetsize-16_contrast-white.png | Bin 0 -> 485 bytes .../Square44x44Logo.targetsize-20.png | Bin 0 -> 669 bytes ...x44Logo.targetsize-20_altform-unplated.png | Bin 0 -> 669 bytes ...ize-20_altform-unplated_contrast-black.png | Bin 0 -> 509 bytes ...ize-20_altform-unplated_contrast-white.png | Bin 0 -> 546 bytes ...44x44Logo.targetsize-20_contrast-black.png | Bin 0 -> 509 bytes ...44x44Logo.targetsize-20_contrast-white.png | Bin 0 -> 546 bytes .../Square44x44Logo.targetsize-24.png | Bin 0 -> 834 bytes ...x44Logo.targetsize-24_altform-unplated.png | Bin 0 -> 834 bytes ...ize-24_altform-unplated_contrast-black.png | Bin 0 -> 595 bytes ...ize-24_altform-unplated_contrast-white.png | Bin 0 -> 586 bytes ...44x44Logo.targetsize-24_contrast-black.png | Bin 0 -> 595 bytes ...44x44Logo.targetsize-24_contrast-white.png | Bin 0 -> 586 bytes .../Square44x44Logo.targetsize-256.png | Bin 0 -> 9204 bytes ...44Logo.targetsize-256_altform-unplated.png | Bin 0 -> 9204 bytes ...ze-256_altform-unplated_contrast-black.png | Bin 0 -> 4062 bytes ...ze-256_altform-unplated_contrast-white.png | Bin 0 -> 3009 bytes ...4x44Logo.targetsize-256_contrast-black.png | Bin 0 -> 4062 bytes ...4x44Logo.targetsize-256_contrast-white.png | Bin 0 -> 3009 bytes .../Square44x44Logo.targetsize-30.png | Bin 0 -> 1002 bytes ...x44Logo.targetsize-30_altform-unplated.png | Bin 0 -> 1002 bytes ...ize-30_altform-unplated_contrast-black.png | Bin 0 -> 770 bytes ...ize-30_altform-unplated_contrast-white.png | Bin 0 -> 680 bytes ...44x44Logo.targetsize-30_contrast-black.png | Bin 0 -> 770 bytes ...44x44Logo.targetsize-30_contrast-white.png | Bin 0 -> 680 bytes .../Square44x44Logo.targetsize-32.png | Bin 0 -> 1039 bytes ...x44Logo.targetsize-32_altform-unplated.png | Bin 0 -> 1039 bytes ...ize-32_altform-unplated_contrast-black.png | Bin 0 -> 681 bytes ...ize-32_altform-unplated_contrast-white.png | Bin 0 -> 647 bytes ...44x44Logo.targetsize-32_contrast-black.png | Bin 0 -> 681 bytes ...44x44Logo.targetsize-32_contrast-white.png | Bin 0 -> 647 bytes .../Square44x44Logo.targetsize-36.png | Bin 0 -> 1204 bytes ...x44Logo.targetsize-36_altform-unplated.png | Bin 0 -> 1204 bytes ...ize-36_altform-unplated_contrast-black.png | Bin 0 -> 842 bytes ...ize-36_altform-unplated_contrast-white.png | Bin 0 -> 730 bytes ...44x44Logo.targetsize-36_contrast-black.png | Bin 0 -> 842 bytes ...44x44Logo.targetsize-36_contrast-white.png | Bin 0 -> 730 bytes .../Square44x44Logo.targetsize-40.png | Bin 0 -> 1346 bytes ...x44Logo.targetsize-40_altform-unplated.png | Bin 0 -> 1346 bytes ...ize-40_altform-unplated_contrast-black.png | Bin 0 -> 867 bytes ...ize-40_altform-unplated_contrast-white.png | Bin 0 -> 741 bytes ...44x44Logo.targetsize-40_contrast-black.png | Bin 0 -> 867 bytes ...44x44Logo.targetsize-40_contrast-white.png | Bin 0 -> 741 bytes .../Square44x44Logo.targetsize-48.png | Bin 0 -> 1524 bytes ...x44Logo.targetsize-48_altform-unplated.png | Bin 0 -> 1524 bytes ...ize-48_altform-unplated_contrast-black.png | Bin 0 -> 963 bytes ...ize-48_altform-unplated_contrast-white.png | Bin 0 -> 792 bytes ...44x44Logo.targetsize-48_contrast-black.png | Bin 0 -> 963 bytes ...44x44Logo.targetsize-48_contrast-white.png | Bin 0 -> 792 bytes .../Square44x44Logo.targetsize-60.png | Bin 0 -> 2019 bytes ...x44Logo.targetsize-60_altform-unplated.png | Bin 0 -> 2019 bytes ...ize-60_altform-unplated_contrast-black.png | Bin 0 -> 1234 bytes ...ize-60_altform-unplated_contrast-white.png | Bin 0 -> 953 bytes ...44x44Logo.targetsize-60_contrast-black.png | Bin 0 -> 1234 bytes ...44x44Logo.targetsize-60_contrast-white.png | Bin 0 -> 953 bytes .../Square44x44Logo.targetsize-64.png | Bin 0 -> 2141 bytes ...x44Logo.targetsize-64_altform-unplated.png | Bin 0 -> 2141 bytes ...ize-64_altform-unplated_contrast-black.png | Bin 0 -> 1260 bytes ...ize-64_altform-unplated_contrast-white.png | Bin 0 -> 963 bytes ...44x44Logo.targetsize-64_contrast-black.png | Bin 0 -> 1260 bytes ...44x44Logo.targetsize-64_contrast-white.png | Bin 0 -> 963 bytes .../Square44x44Logo.targetsize-72.png | Bin 0 -> 2433 bytes ...x44Logo.targetsize-72_altform-unplated.png | Bin 0 -> 2433 bytes ...ize-72_altform-unplated_contrast-black.png | Bin 0 -> 1322 bytes ...ize-72_altform-unplated_contrast-white.png | Bin 0 -> 1027 bytes ...44x44Logo.targetsize-72_contrast-black.png | Bin 0 -> 1322 bytes ...44x44Logo.targetsize-72_contrast-white.png | Bin 0 -> 1027 bytes .../Square44x44Logo.targetsize-80.png | Bin 0 -> 2671 bytes ...x44Logo.targetsize-80_altform-unplated.png | Bin 0 -> 2671 bytes ...ize-80_altform-unplated_contrast-black.png | Bin 0 -> 1563 bytes ...ize-80_altform-unplated_contrast-white.png | Bin 0 -> 1150 bytes ...44x44Logo.targetsize-80_contrast-black.png | Bin 0 -> 1563 bytes ...44x44Logo.targetsize-80_contrast-white.png | Bin 0 -> 1150 bytes .../Square44x44Logo.targetsize-96.png | Bin 0 -> 3180 bytes ...x44Logo.targetsize-96_altform-unplated.png | Bin 0 -> 3180 bytes ...ize-96_altform-unplated_contrast-black.png | Bin 0 -> 1721 bytes ...ize-96_altform-unplated_contrast-white.png | Bin 0 -> 1298 bytes ...44x44Logo.targetsize-96_contrast-black.png | Bin 0 -> 1721 bytes ...44x44Logo.targetsize-96_contrast-white.png | Bin 0 -> 1298 bytes .../images-Can/StoreLogo.scale-100.png | Bin 0 -> 1496 bytes .../StoreLogo.scale-100_contrast-black.png | Bin 0 -> 780 bytes .../StoreLogo.scale-100_contrast-white.png | Bin 0 -> 777 bytes .../images-Can/StoreLogo.scale-125.png | Bin 0 -> 1797 bytes .../StoreLogo.scale-125_contrast-black.png | Bin 0 -> 877 bytes .../StoreLogo.scale-125_contrast-white.png | Bin 0 -> 878 bytes .../images-Can/StoreLogo.scale-150.png | Bin 0 -> 1957 bytes .../StoreLogo.scale-150_contrast-black.png | Bin 0 -> 979 bytes .../StoreLogo.scale-150_contrast-white.png | Bin 0 -> 975 bytes .../images-Can/StoreLogo.scale-200.png | Bin 0 -> 2745 bytes .../StoreLogo.scale-200_contrast-black.png | Bin 0 -> 1135 bytes .../StoreLogo.scale-200_contrast-white.png | Bin 0 -> 1099 bytes .../images-Can/StoreLogo.scale-400.png | Bin 0 -> 5571 bytes .../StoreLogo.scale-400_contrast-black.png | Bin 0 -> 1906 bytes .../StoreLogo.scale-400_contrast-white.png | Bin 0 -> 1880 bytes .../images-Can/Wide310x150Logo.scale-100.png | Bin 0 -> 1907 bytes ...de310x150Logo.scale-100_contrast-black.png | Bin 0 -> 1053 bytes ...de310x150Logo.scale-100_contrast-white.png | Bin 0 -> 1014 bytes .../images-Can/Wide310x150Logo.scale-125.png | Bin 0 -> 2438 bytes ...de310x150Logo.scale-125_contrast-black.png | Bin 0 -> 1320 bytes ...de310x150Logo.scale-125_contrast-white.png | Bin 0 -> 1275 bytes .../images-Can/Wide310x150Logo.scale-150.png | Bin 0 -> 3430 bytes ...de310x150Logo.scale-150_contrast-black.png | Bin 0 -> 1496 bytes ...de310x150Logo.scale-150_contrast-white.png | Bin 0 -> 1402 bytes .../images-Can/Wide310x150Logo.scale-200.png | Bin 0 -> 4613 bytes ...de310x150Logo.scale-200_contrast-black.png | Bin 0 -> 1940 bytes ...de310x150Logo.scale-200_contrast-white.png | Bin 0 -> 1847 bytes .../images-Can/Wide310x150Logo.scale-400.png | Bin 0 -> 10851 bytes ...de310x150Logo.scale-400_contrast-black.png | Bin 0 -> 3898 bytes ...de310x150Logo.scale-400_contrast-white.png | Bin 0 -> 3848 bytes res/terminal/images-Can/terminal.ico | Bin 0 -> 45274 bytes .../images-Can/terminal_contrast-black.ico | Bin 0 -> 38858 bytes .../images-Can/terminal_contrast-white.ico | Bin 0 -> 39006 bytes samples/PixelShaders/BackgroundImage.hlsl | 26 + samples/PixelShaders/Outlines.hlsl | 51 +- scratch/ScratchIslandApp/SampleApp/App.cpp | 49 +- scratch/ScratchIslandApp/SampleApp/App.h | 10 + scratch/ScratchIslandApp/SampleApp/App.idl | 4 +- scratch/ScratchIslandApp/SampleApp/App.xaml | 23 +- .../SampleApp/SampleAppLib.vcxproj | 13 +- .../SampleApp/dll/SampleApp.vcxproj | 3 +- .../SampleApp/packages.config | 2 +- scratch/ScratchIslandApp/SampleApp/pch.h | 1 - .../WindowExe/WindowExe.vcxproj | 24 +- .../WindowExe/packages.config | 3 +- src/audio/midi/MidiAudio.cpp | 67 +- src/audio/midi/MidiAudio.hpp | 27 +- src/audio/midi/precomp.h | 4 +- src/buffer/out/AttrRow.cpp | 134 - src/buffer/out/AttrRow.hpp | 68 - src/buffer/out/CharRow.cpp | 281 -- src/buffer/out/CharRow.hpp | 117 - src/buffer/out/CharRowCell.cpp | 73 - src/buffer/out/CharRowCell.hpp | 65 - src/buffer/out/CharRowCellReference.cpp | 136 - src/buffer/out/CharRowCellReference.hpp | 63 - src/buffer/out/DbcsAttribute.hpp | 135 +- src/buffer/out/LineRendition.hpp | 8 +- src/buffer/out/OutputCell.hpp | 2 +- src/buffer/out/OutputCellIterator.cpp | 86 +- src/buffer/out/OutputCellIterator.hpp | 31 +- src/buffer/out/OutputCellRect.cpp | 6 +- src/buffer/out/OutputCellRect.hpp | 2 +- src/buffer/out/OutputCellView.cpp | 15 +- src/buffer/out/OutputCellView.hpp | 2 +- src/buffer/out/Row.cpp | 1151 +++++- src/buffer/out/Row.hpp | 327 +- src/buffer/out/TextAttribute.cpp | 59 +- src/buffer/out/TextAttribute.hpp | 49 +- src/buffer/out/TextColor.cpp | 7 +- src/buffer/out/TextColor.h | 11 +- src/buffer/out/UTextAdapter.cpp | 329 ++ src/buffer/out/UTextAdapter.h | 17 + src/buffer/out/UnicodeStorage.cpp | 98 - src/buffer/out/UnicodeStorage.hpp | 65 - src/buffer/out/cursor.cpp | 23 +- src/buffer/out/cursor.h | 2 +- src/buffer/out/lib/bufferout.vcxproj | 12 +- src/buffer/out/precomp.h | 42 +- src/buffer/out/search.cpp | 361 +- src/buffer/out/search.h | 77 +- src/buffer/out/sources.inc | 8 +- src/buffer/out/textBuffer.cpp | 2594 ++++++------- src/buffer/out/textBuffer.hpp | 352 +- src/buffer/out/textBufferCellIterator.cpp | 44 +- src/buffer/out/textBufferCellIterator.hpp | 9 +- src/buffer/out/textBufferTextIterator.cpp | 1 - src/buffer/out/ut_textbuffer/ReflowTests.cpp | 292 +- .../TextBuffer.Unit.Tests.vcxproj | 7 +- .../out/ut_textbuffer/UnicodeStorageTests.cpp | 51 - .../CascadiaPackage/CascadiaPackage.wapproj | 10 + .../CascadiaPackage/Package-Can.appxmanifest | 160 + .../CascadiaPackage/Package-Dev.appxmanifest | 15 +- .../CascadiaPackage/Package-Pre.appxmanifest | 15 +- .../CascadiaPackage/Package.appxmanifest | 15 +- ...4e3d-5e58-b989-0a998ec441b8}.scale-100.png | Bin 314 -> 480 bytes ...4e3d-5e58-b989-0a998ec441b8}.scale-200.png | Bin 573 -> 943 bytes .../Resources/en-US/Resources.resw | 16 + src/cascadia/ElevateShim/elevate-shim.cpp | 73 +- .../ColorSchemeTests.cpp | 100 +- .../DeserializationTests.cpp | 52 +- .../LocalTests_SettingsModel/JsonTestClass.h | 4 +- .../NewTabMenuTests.cpp | 107 + .../LocalTests_SettingsModel/ProfileTests.cpp | 47 + .../SerializationTests.cpp | 143 +- .../SettingsModel.LocalTests.vcxproj | 17 +- .../TerminalSettingsTests.cpp | 17 +- .../LocalTests_SettingsModel/ThemeTests.cpp | 19 +- src/cascadia/LocalTests_SettingsModel/pch.h | 7 +- .../LocalTests_TerminalApp/SettingsTests.cpp | 128 +- .../LocalTests_TerminalApp/TabTests.cpp | 48 +- .../TerminalApp.LocalTests.vcxproj | 15 +- .../TestHostApp/TestHostApp.vcxproj | 5 +- src/cascadia/LocalTests_TerminalApp/pch.h | 4 + .../PublicTerminalCore.vcxproj | 63 - src/cascadia/PublicTerminalCore/pch.h | 12 - src/cascadia/Remoting/CommandlineArgs.h | 12 +- src/cascadia/Remoting/Monarch.cpp | 117 + src/cascadia/Remoting/Monarch.h | 44 + src/cascadia/Remoting/Monarch.idl | 23 +- src/cascadia/Remoting/Peasant.cpp | 25 +- src/cascadia/Remoting/Peasant.h | 35 + src/cascadia/Remoting/Peasant.idl | 28 +- .../Remoting/ProposeCommandlineResult.h | 2 +- src/cascadia/Remoting/WindowManager.cpp | 842 ++--- src/cascadia/Remoting/WindowManager.h | 62 +- src/cascadia/Remoting/WindowManager.idl | 33 +- .../dll/Microsoft.Terminal.Remoting.vcxproj | 2 +- src/cascadia/Remoting/pch.h | 1 + .../ShellExtension/OpenTerminalHere.cpp | 35 +- .../ShellExtension/OpenTerminalHere.h | 3 + src/cascadia/TerminalApp/AboutDialog.cpp | 150 + src/cascadia/TerminalApp/AboutDialog.h | 36 + src/cascadia/TerminalApp/AboutDialog.idl | 16 + src/cascadia/TerminalApp/AboutDialog.xaml | 62 + .../TerminalApp/ActionPaletteItem.cpp | 22 - src/cascadia/TerminalApp/App.base.h | 21 +- src/cascadia/TerminalApp/App.cpp | 98 +- src/cascadia/TerminalApp/App.h | 14 +- src/cascadia/TerminalApp/App.idl | 4 +- src/cascadia/TerminalApp/App.xaml | 58 +- .../TerminalApp/AppActionHandlers.cpp | 360 +- .../TerminalApp/AppCommandlineArgs.cpp | 27 +- src/cascadia/TerminalApp/AppCommandlineArgs.h | 4 + src/cascadia/TerminalApp/AppLogic.cpp | 1296 +------ src/cascadia/TerminalApp/AppLogic.h | 173 +- src/cascadia/TerminalApp/AppLogic.idl | 126 +- src/cascadia/TerminalApp/ColorHelper.cpp | 2 - src/cascadia/TerminalApp/ColorHelper.h | 3 +- .../TerminalApp/ColorPickupFlyout.cpp | 3 - .../TerminalApp/ColorPickupFlyout.xaml | 3 +- src/cascadia/TerminalApp/CommandPalette.h | 12 +- src/cascadia/TerminalApp/CommandPalette.xaml | 8 + src/cascadia/TerminalApp/ContentManager.cpp | 60 + src/cascadia/TerminalApp/ContentManager.h | 49 + .../TerminalApp/DebugTapConnection.cpp | 10 + src/cascadia/TerminalApp/DebugTapConnection.h | 2 + src/cascadia/TerminalApp/Jumplist.cpp | 33 +- .../TerminalApp/MinMaxCloseControl.xaml | 4 +- .../TerminalApp/Pane.LayoutSizeNode.cpp | 35 +- src/cascadia/TerminalApp/Pane.cpp | 611 ++-- src/cascadia/TerminalApp/Pane.h | 57 +- .../Resources/en-US/ContextMenu.resw | 20 + .../Resources/en-US/Resources.resw | 137 +- .../TerminalApp/SettingsLoadEventArgs.h | 30 + src/cascadia/TerminalApp/SettingsTab.cpp | 35 +- src/cascadia/TerminalApp/SettingsTab.h | 4 +- .../TerminalApp/ShortcutActionDispatch.cpp | 17 +- .../TerminalApp/ShortcutActionDispatch.h | 4 +- .../TerminalApp/ShortcutActionDispatch.idl | 3 +- .../TerminalApp/SuggestionsControl.cpp | 1107 ++++++ src/cascadia/TerminalApp/SuggestionsControl.h | 133 + .../TerminalApp/SuggestionsControl.idl | 48 + .../TerminalApp/SuggestionsControl.xaml | 214 ++ src/cascadia/TerminalApp/TabBase.cpp | 294 +- src/cascadia/TerminalApp/TabBase.h | 15 +- src/cascadia/TerminalApp/TabBase.idl | 2 +- .../TerminalApp/TabHeaderControl.xaml | 12 + src/cascadia/TerminalApp/TabManagement.cpp | 200 +- src/cascadia/TerminalApp/TabRowControl.xaml | 12 +- .../TerminalApp/TerminalAppLib.vcxproj | 62 +- src/cascadia/TerminalApp/TerminalPage.cpp | 2541 +++++++++---- src/cascadia/TerminalApp/TerminalPage.h | 194 +- src/cascadia/TerminalApp/TerminalPage.idl | 58 +- src/cascadia/TerminalApp/TerminalPage.xaml | 54 +- src/cascadia/TerminalApp/TerminalTab.cpp | 664 +++- src/cascadia/TerminalApp/TerminalTab.h | 64 +- src/cascadia/TerminalApp/TerminalTabStatus.h | 2 + .../TerminalApp/TerminalTabStatus.idl | 2 + src/cascadia/TerminalApp/TerminalWindow.cpp | 1410 +++++++ src/cascadia/TerminalApp/TerminalWindow.h | 251 ++ src/cascadia/TerminalApp/TerminalWindow.idl | 148 + src/cascadia/TerminalApp/Toast.h | 2 +- .../TerminalApp/dll/TerminalApp.vcxproj | 3 +- src/cascadia/TerminalApp/packages.config | 4 - src/cascadia/TerminalApp/pch.h | 7 +- .../TerminalAzBridge/TerminalAzBridge.vcxproj | 2 +- src/cascadia/TerminalAzBridge/main.cpp | 8 +- src/cascadia/TerminalAzBridge/pch.h | 2 - src/cascadia/TerminalConnection/AzureClient.h | 22 +- .../TerminalConnection/AzureClientID.h | 2 +- .../TerminalConnection/AzureConnection.cpp | 487 +-- .../TerminalConnection/AzureConnection.h | 46 +- ...StateHolder.h => BaseTerminalConnection.h} | 21 +- .../TerminalConnection/CTerminalHandoff.h | 2 + .../ConnectionInformation.cpp | 2 +- .../TerminalConnection/ConptyConnection.cpp | 309 +- .../TerminalConnection/ConptyConnection.h | 36 +- .../TerminalConnection/ConptyConnection.idl | 8 +- .../TerminalConnection/EchoConnection.h | 1 + .../ITerminalConnection.idl | 3 +- .../Resources/en-US/Resources.resw | 4 + .../TerminalConnection.vcxproj | 37 +- .../TerminalConnection.vcxproj.filters | 5 +- src/cascadia/TerminalConnection/pch.h | 6 + src/cascadia/TerminalControl/ControlCore.cpp | 1342 +++++-- src/cascadia/TerminalControl/ControlCore.h | 154 +- src/cascadia/TerminalControl/ControlCore.idl | 53 +- .../TerminalControl/ControlInteractivity.cpp | 112 +- .../TerminalControl/ControlInteractivity.h | 16 +- .../TerminalControl/ControlInteractivity.idl | 13 + .../TerminalControl/ControlSettings.h | 12 +- src/cascadia/TerminalControl/EventArgs.cpp | 6 + src/cascadia/TerminalControl/EventArgs.h | 91 +- src/cascadia/TerminalControl/EventArgs.idl | 44 +- .../HwndTerminal.cpp | 426 ++- .../HwndTerminal.hpp | 42 +- .../HwndTerminalAutomationPeer.cpp | 32 +- .../HwndTerminalAutomationPeer.hpp | 2 + .../TerminalControl/IControlAppearance.idl | 1 + .../TerminalControl/IControlSettings.idl | 11 +- src/cascadia/TerminalControl/ICoreState.idl | 6 + .../InteractivityAutomationPeer.cpp | 4 +- .../Resources/en-US/Resources.resw | 142 +- .../TerminalControl/SearchBoxControl.cpp | 158 + .../TerminalControl/SearchBoxControl.h | 18 +- .../TerminalControl/SearchBoxControl.idl | 4 + .../TerminalControl/SearchBoxControl.xaml | 13 +- src/cascadia/TerminalControl/TermControl.cpp | 1140 ++++-- src/cascadia/TerminalControl/TermControl.h | 151 +- src/cascadia/TerminalControl/TermControl.idl | 44 +- src/cascadia/TerminalControl/TermControl.xaml | 153 +- .../TermControlAutomationPeer.cpp | 48 +- .../TermControlAutomationPeer.h | 3 +- .../TerminalControlLib.vcxproj | 8 +- .../TerminalControl/XamlUiaTextRange.cpp | 10 +- .../dll/Microsoft.Terminal.Control.def | 27 +- .../dll/TerminalControl.vcxproj | 6 +- src/cascadia/TerminalControl/init.cpp | 4 + src/cascadia/TerminalControl/pch.h | 12 +- src/cascadia/TerminalCore/ITerminalInput.hpp | 9 +- src/cascadia/TerminalCore/Terminal.cpp | 1010 +++--- src/cascadia/TerminalCore/Terminal.hpp | 247 +- src/cascadia/TerminalCore/TerminalApi.cpp | 343 +- .../TerminalCore/TerminalSelection.cpp | 169 +- .../TerminalCore/lib/terminalcore-lib.vcxproj | 9 +- src/cascadia/TerminalCore/pch.h | 1 + .../TerminalCore/terminalcore-common.vcxitems | 1 + .../TerminalCore/terminalrenderdata.cpp | 80 +- src/cascadia/TerminalCore/tracing.hpp | 19 + .../TerminalSettingsEditor/Actions.cpp | 376 +- src/cascadia/TerminalSettingsEditor/Actions.h | 116 +- .../TerminalSettingsEditor/Actions.idl | 54 +- .../TerminalSettingsEditor/Actions.xaml | 50 +- .../ActionsViewModel.cpp | 380 ++ .../TerminalSettingsEditor/ActionsViewModel.h | 131 + .../ActionsViewModel.idl | 60 + .../TerminalSettingsEditor/AddProfile.xaml | 112 +- .../TerminalSettingsEditor/Appearances.cpp | 203 +- .../TerminalSettingsEditor/Appearances.h | 52 +- .../TerminalSettingsEditor/Appearances.idl | 21 +- .../TerminalSettingsEditor/Appearances.xaml | 163 +- .../ColorSchemeViewModel.cpp | 46 +- .../ColorSchemeViewModel.h | 27 +- .../ColorSchemeViewModel.idl | 4 + .../TerminalSettingsEditor/ColorSchemes.cpp | 63 +- .../TerminalSettingsEditor/ColorSchemes.h | 7 +- .../TerminalSettingsEditor/ColorSchemes.xaml | 387 +- .../ColorSchemesPageViewModel.cpp | 18 +- .../ColorSchemesPageViewModel.h | 2 + .../ColorSchemesPageViewModel.idl | 2 + .../CommonResources.xaml | 3 +- .../EditColorScheme.cpp | 4 +- .../EditColorScheme.xaml | 759 ++-- .../GlobalAppearance.xaml | 184 +- .../GlobalAppearanceViewModel.cpp | 21 +- .../TerminalSettingsEditor/Interaction.xaml | 119 +- .../InteractionViewModel.h | 1 + .../InteractionViewModel.idl | 1 + .../TerminalSettingsEditor/Launch.xaml | 417 ++- .../LaunchViewModel.cpp | 8 +- .../TerminalSettingsEditor/MainPage.cpp | 257 +- .../TerminalSettingsEditor/MainPage.h | 10 +- .../TerminalSettingsEditor/MainPage.xaml | 62 +- ...Microsoft.Terminal.Settings.Editor.vcxproj | 17 +- ...t.Terminal.Settings.Editor.vcxproj.filters | 1 + .../PreviewConnection.cpp | 30 +- .../PreviewConnection.h | 6 + .../ProfileViewModel.cpp | 85 +- .../TerminalSettingsEditor/ProfileViewModel.h | 48 +- .../ProfileViewModel.idl | 13 +- .../TerminalSettingsEditor/Profiles.h | 38 - .../TerminalSettingsEditor/Profiles.idl | 14 - .../Profiles_Advanced.cpp | 4 +- .../Profiles_Advanced.idl | 2 +- .../Profiles_Advanced.xaml | 188 +- .../Profiles_Appearance.cpp | 64 +- .../Profiles_Appearance.h | 10 +- .../Profiles_Appearance.idl | 3 +- .../Profiles_Appearance.xaml | 244 +- .../TerminalSettingsEditor/Profiles_Base.cpp | 20 +- .../TerminalSettingsEditor/Profiles_Base.h | 1 + .../TerminalSettingsEditor/Profiles_Base.idl | 2 +- .../TerminalSettingsEditor/Profiles_Base.xaml | 295 +- .../TerminalSettingsEditor/Rendering.xaml | 36 +- .../RenderingViewModel.h | 1 - .../RenderingViewModel.idl | 1 - .../Resources/en-US/Resources.resw | 156 +- .../SettingContainer.cpp | 23 +- .../SettingContainerStyle.xaml | 3 +- src/cascadia/TerminalSettingsEditor/Utils.h | 2 +- .../TerminalSettingsEditor/ViewModelHelpers.h | 42 +- .../ViewModelHelpers.idl.h | 5 +- .../TerminalSettingsEditor/packages.config | 4 - .../TerminalSettingsModel/ActionAndArgs.cpp | 92 +- .../TerminalSettingsModel/ActionAndArgs.h | 3 + .../TerminalSettingsModel/ActionArgs.cpp | 122 +- .../TerminalSettingsModel/ActionArgs.h | 113 +- .../TerminalSettingsModel/ActionArgs.idl | 54 +- .../TerminalSettingsModel/ActionArgsMagic.h | 2 +- .../TerminalSettingsModel/ActionMap.cpp | 153 +- .../TerminalSettingsModel/ActionMap.h | 10 + .../TerminalSettingsModel/ActionMap.idl | 4 + .../AllShortcutActions.h | 17 +- .../AppearanceConfig.cpp | 29 + .../TerminalSettingsModel/AppearanceConfig.h | 3 + .../ApplicationState.cpp | 50 +- .../TerminalSettingsModel/ApplicationState.h | 5 +- .../ApplicationState.idl | 4 +- .../AzureCloudShellGenerator.cpp | 3 +- .../CascadiaSettings.cpp | 155 +- .../TerminalSettingsModel/CascadiaSettings.h | 12 +- .../CascadiaSettings.idl | 5 +- .../CascadiaSettingsSerialization.cpp | 350 +- .../TerminalSettingsModel/Command.cpp | 189 +- src/cascadia/TerminalSettingsModel/Command.h | 15 +- .../TerminalSettingsModel/Command.idl | 12 +- .../TerminalSettingsModel/DefaultTerminal.cpp | 4 +- .../DynamicProfileUtils.cpp | 2 +- .../DynamicProfileUtils.h | 2 +- .../TerminalSettingsModel/FileUtils.cpp | 22 +- .../TerminalSettingsModel/FileUtils.h | 1 + .../TerminalSettingsModel/FolderEntry.cpp | 124 + .../TerminalSettingsModel/FolderEntry.h | 55 + .../TerminalSettingsModel/FontConfig.cpp | 5 - .../TerminalSettingsModel/FontConfig.h | 1 - .../TerminalSettingsModel/FontConfig.idl | 3 +- .../GlobalAppSettings.cpp | 31 +- .../TerminalSettingsModel/GlobalAppSettings.h | 11 +- .../GlobalAppSettings.idl | 11 +- .../IAppearanceConfig.idl | 12 +- .../TerminalSettingsModel/IInheritable.idl.h | 5 +- .../IconPathConverter.cpp | 53 +- .../TerminalSettingsModel/IconPathConverter.h | 2 +- .../IconPathConverter.idl | 2 +- .../TerminalSettingsModel/JsonUtils.h | 148 +- .../KeyChordSerialization.cpp | 9 +- .../LegacyProfileGeneratorNamespaces.h | 6 +- .../TerminalSettingsModel/MTSMSettings.h | 131 +- .../MatchProfilesEntry.cpp | 73 + .../MatchProfilesEntry.h | 42 + ...crosoft.Terminal.Settings.ModelLib.vcxproj | 58 +- ...Terminal.Settings.ModelLib.vcxproj.filters | 8 + .../TerminalSettingsModel/NewTabMenuEntry.cpp | 58 + .../TerminalSettingsModel/NewTabMenuEntry.h | 72 + .../TerminalSettingsModel/NewTabMenuEntry.idl | 74 + .../PowershellCoreProfileGenerator.cpp | 5 +- .../TerminalSettingsModel/Profile.cpp | 10 +- src/cascadia/TerminalSettingsModel/Profile.h | 2 + .../TerminalSettingsModel/Profile.idl | 13 +- .../ProfileCollectionEntry.cpp | 16 + .../ProfileCollectionEntry.h | 39 + .../TerminalSettingsModel/ProfileEntry.cpp | 59 + .../TerminalSettingsModel/ProfileEntry.h | 53 + .../RemainingProfilesEntry.cpp | 22 + .../RemainingProfilesEntry.h | 35 + .../Resources/en-US/Resources.resw | 63 + .../TerminalSettingsModel/SeparatorEntry.cpp | 21 + .../TerminalSettingsModel/SeparatorEntry.h | 34 + .../SshHostGenerator.cpp | 161 + .../TerminalSettingsModel/SshHostGenerator.h | 40 + .../TerminalSettings.cpp | 91 +- .../TerminalSettingsModel/TerminalSettings.h | 17 +- .../TerminalSettings.idl | 6 +- .../TerminalSettingsSerializationHelpers.h | 52 +- .../TerminalWarnings.idl | 3 + src/cascadia/TerminalSettingsModel/Theme.cpp | 101 +- src/cascadia/TerminalSettingsModel/Theme.h | 53 + src/cascadia/TerminalSettingsModel/Theme.idl | 26 +- .../VsDevCmdGenerator.cpp | 10 +- .../VsDevShellGenerator.cpp | 2 +- .../WslDistroGenerator.cpp | 8 +- .../defaults-universal.json | 224 -- .../TerminalSettingsModel/defaults.json | 46 +- .../Microsoft.Terminal.Settings.Model.vcxproj | 21 +- src/cascadia/TerminalSettingsModel/pch.h | 2 + .../Control.UnitTests.vcxproj | 2 +- .../UnitTests_Control/ControlCoreTests.cpp | 245 +- .../ControlInteractivityTests.cpp | 102 +- .../UnitTests_Control/MockConnection.h | 1 + src/cascadia/UnitTests_Control/pch.h | 2 + .../Remoting.UnitTests.vcxproj | 2 +- .../UnitTests_Remoting/RemotingTests.cpp | 41 +- src/cascadia/UnitTests_Remoting/pch.h | 1 + .../ConptyRoundtripTests.cpp | 130 +- .../UnitTests_TerminalCore/InputTest.cpp | 43 +- .../UnitTests_TerminalCore/MockTermSettings.h | 10 +- .../ScreenSizeLimitsTest.cpp | 24 +- .../UnitTests_TerminalCore/ScrollTest.cpp | 40 +- .../UnitTests_TerminalCore/SelectionTest.cpp | 44 +- .../TerminalApiTest.cpp | 24 +- .../TerminalBufferTests.cpp | 26 +- .../TilWinRtHelpersTests.cpp | 245 ++ .../UnitTests_TerminalCore/UnitTests.vcxproj | 1 + src/cascadia/UnitTests_TerminalCore/pch.h | 26 +- src/cascadia/WinRTUtils/WinRTUtils.vcxproj | 4 +- .../WinRTUtils/WinRTUtils.vcxproj.filters | 8 +- .../WinRTUtils/inc/SafeDispatcherTimer.h | 92 + src/cascadia/WinRTUtils/inc/Utils.h | 2 + src/cascadia/WinRTUtils/inc/WtExeUtils.h | 1 + src/cascadia/WindowsTerminal/AppHost.cpp | 1572 ++++---- src/cascadia/WindowsTerminal/AppHost.h | 186 +- src/cascadia/WindowsTerminal/BaseWindow.h | 14 +- src/cascadia/WindowsTerminal/IslandWindow.cpp | 353 +- src/cascadia/WindowsTerminal/IslandWindow.h | 36 +- .../WindowsTerminal/NonClientIslandWindow.cpp | 123 +- .../WindowsTerminal/NonClientIslandWindow.h | 20 +- .../WindowsTerminal/NotificationIcon.h | 1 + .../WindowsTerminal/WindowEmperor.cpp | 875 +++++ src/cascadia/WindowsTerminal/WindowEmperor.h | 95 + src/cascadia/WindowsTerminal/WindowThread.cpp | 242 ++ src/cascadia/WindowsTerminal/WindowThread.h | 48 + .../WindowsTerminal/WindowsTerminal.rc | 4 + .../WindowsTerminal/WindowsTerminal.vcxproj | 9 +- src/cascadia/WindowsTerminal/main.cpp | 83 +- src/cascadia/WindowsTerminal/packages.config | 4 - src/cascadia/WindowsTerminal/pch.h | 10 +- .../Common/NativeMethods.cs | 26 +- .../Elements/TerminalApp.cs | 16 +- src/cascadia/WindowsTerminal_UIATests/Init.cs | 7 +- .../WindowsTerminal_UIATests/SmokeTests.cs | 15 + .../WindowsTerminal.UIA.Tests.csproj | 4 +- .../WpfTerminalControl/NativeMethods.cs | 54 +- .../WpfTerminalControl/TerminalContainer.cs | 134 +- .../TerminalControl.xaml.cs | 53 +- .../WpfTerminalControl.csproj | 19 +- .../WpfTerminalTestNetCore.csproj | 9 +- src/cascadia/inc/ControlProperties.h | 16 +- src/cascadia/inc/WindowingBehavior.h | 20 +- src/cascadia/inc/cppwinrt_utils.h | 158 +- .../ut_app/TerminalApp.UnitTests.vcxproj | 9 - src/common.build.post.props | 36 + src/common.build.pre.props | 42 +- src/common.nugetversions.props | 10 +- src/common.nugetversions.targets | 55 +- src/cppwinrt.build.pre.props | 5 +- src/features.xml | 98 +- src/host/ApiRoutines.h | 108 +- src/host/CommandListPopup.cpp | 549 --- src/host/CommandListPopup.hpp | 50 - src/host/CommandNumberPopup.cpp | 196 - src/host/CommandNumberPopup.hpp | 45 - src/host/ConsoleArguments.cpp | 11 - src/host/ConsoleArguments.hpp | 3 - src/host/CopyFromCharPopup.cpp | 63 - src/host/CopyFromCharPopup.hpp | 29 - src/host/CopyToCharPopup.cpp | 84 - src/host/CopyToCharPopup.hpp | 32 - src/host/CursorBlinker.cpp | 10 +- src/host/PtySignalInputThread.cpp | 209 +- src/host/PtySignalInputThread.hpp | 8 +- src/host/VtApiRoutines.cpp | 151 +- src/host/VtApiRoutines.h | 108 +- src/host/VtInputThread.cpp | 99 +- src/host/VtInputThread.hpp | 8 +- src/host/VtIo.cpp | 103 +- src/host/VtIo.hpp | 14 +- src/host/_output.cpp | 9 +- src/host/_stream.cpp | 1071 +----- src/host/_stream.h | 71 +- src/host/alias.cpp | 114 +- src/host/alias.h | 17 +- src/host/cmdline.cpp | 1284 +------ src/host/cmdline.h | 152 +- src/host/conareainfo.cpp | 44 +- src/host/conddkrefs.h | 103 +- src/host/conimeinfo.cpp | 64 +- src/host/conimeinfo.h | 16 +- src/host/conserv.h | 3 +- src/host/consoleInformation.cpp | 129 +- src/host/convarea.cpp | 28 +- src/host/dbcs.cpp | 76 +- src/host/dbcs.h | 9 +- src/host/directio.cpp | 553 +-- src/host/exe/CConsoleHandoff.h | 2 + src/host/exe/Host.EXE.vcxproj | 3 - src/host/exe/exemain.cpp | 50 +- src/host/ft_fuzzer/Host.FuzzWrapper.vcxproj | 3 - src/host/ft_fuzzer/fuzzmain.cpp | 20 +- src/host/ft_host/API_BufferTests.cpp | 37 + src/host/ft_host/API_ModeTests.cpp | 50 + src/host/ft_host/CJK_DbcsTests.cpp | 157 +- src/host/ft_host/InitTests.cpp | 17 +- src/host/ft_host/Message_KeyPressTests.cpp | 99 +- src/host/ft_host/sources | 1 + src/host/ft_host/sources.dep | 3 - src/host/ft_integrity/IntegrityTest.cpp | 2 +- src/host/ft_integrity/sources | 1 - src/host/ft_integrity/sources.dep | 6 - src/host/ft_uia/Common/NativeMethods.cs | 26 +- src/host/ft_uia/Common/ShortcutHelper.cs | 2 +- src/host/ft_uia/Elements/CmdApp.cs | 2 +- src/host/ft_uia/Host.Tests.UIA.csproj | 4 +- src/host/ft_uia/Init.cs | 7 +- src/host/getset.cpp | 154 +- src/host/globals.cpp | 4 + src/host/history.cpp | 246 +- src/host/history.h | 58 +- src/host/host-common.vcxitems | 14 - src/host/init.cpp | 2 +- src/host/input.cpp | 110 +- src/host/input.h | 7 +- src/host/inputBuffer.cpp | 931 +++-- src/host/inputBuffer.hpp | 104 +- src/host/inputReadHandleData.cpp | 2 +- src/host/lib/hostlib.vcxproj.filters | 42 +- src/host/misc.cpp | 239 +- src/host/misc.h | 23 - src/host/ntprivapi.cpp | 24 +- src/host/ntprivapi.hpp | 26 +- src/host/output.cpp | 92 +- src/host/output.h | 2 - src/host/outputStream.cpp | 233 +- src/host/outputStream.hpp | 20 +- src/host/popup.cpp | 317 -- src/host/popup.h | 82 - src/host/precomp.h | 4 +- src/host/proxy/Host.Proxy.vcxproj | 49 +- src/host/readData.hpp | 13 +- src/host/readDataCooked.cpp | 2133 ++++++----- src/host/readDataCooked.hpp | 312 +- src/host/readDataDirect.cpp | 140 +- src/host/readDataDirect.hpp | 8 +- src/host/readDataRaw.cpp | 131 +- src/host/registry.cpp | 20 +- src/host/renderData.cpp | 74 +- src/host/renderData.hpp | 24 +- src/host/res.rc | 3 - src/host/resource.h | 1 - src/host/screenInfo.cpp | 678 ++-- src/host/screenInfo.hpp | 28 +- src/host/scrolling.cpp | 34 +- src/host/selection.cpp | 74 +- src/host/selection.hpp | 1 + src/host/selectionInput.cpp | 193 +- src/host/selectionState.cpp | 32 + src/host/server.h | 62 +- src/host/settings.cpp | 39 +- src/host/settings.hpp | 23 +- src/host/sources.inc | 10 +- src/host/srvinit.cpp | 43 +- src/host/stream.cpp | 673 ++-- src/host/stream.h | 18 +- src/host/telemetry.cpp | 595 --- src/host/telemetry.hpp | 199 - src/host/tracing.cpp | 259 +- src/host/tracing.hpp | 27 +- src/host/ut_host/AliasTests.cpp | 250 +- src/host/ut_host/ApiRoutinesTests.cpp | 32 +- src/host/ut_host/ClipboardTests.cpp | 298 +- .../ut_host/CodepointWidthDetectorTests.cpp | 18 +- src/host/ut_host/CommandLineTests.cpp | 539 --- src/host/ut_host/CommandListPopupTests.cpp | 538 --- src/host/ut_host/CommandNumberPopupTests.cpp | 297 -- src/host/ut_host/CopyFromCharPopupTests.cpp | 165 - src/host/ut_host/CopyToCharPopupTests.cpp | 243 -- src/host/ut_host/DbcsTests.cpp | 2 +- src/host/ut_host/HistoryTests.cpp | 22 +- src/host/ut_host/Host.UnitTests.vcxproj | 13 - .../ut_host/Host.UnitTests.vcxproj.filters | 30 - src/host/ut_host/InputBufferTests.cpp | 352 +- src/host/ut_host/OutputCellIteratorTests.cpp | 22 +- src/host/ut_host/PopupTestHelper.hpp | 84 - src/host/ut_host/ReadWaitTests.cpp | 129 - src/host/ut_host/ScreenBufferTests.cpp | 2289 ++++++++---- src/host/ut_host/SearchTests.cpp | 114 +- src/host/ut_host/SelectionTests.cpp | 306 +- src/host/ut_host/TextBufferIteratorTests.cpp | 51 +- src/host/ut_host/TextBufferTests.cpp | 714 ++-- src/host/ut_host/Utf16ParserTests.cpp | 211 -- .../ut_host/Utf8ToWideCharParserTests.cpp | 405 --- src/host/ut_host/UtilsTests.cpp | 34 +- src/host/ut_host/ViewportTests.cpp | 716 ++-- src/host/ut_host/VtIoTests.cpp | 81 +- src/host/ut_host/VtRendererTests.cpp | 217 +- src/host/ut_host/sources | 7 - src/host/utf8ToWideCharParser.cpp | 520 --- src/host/utf8ToWideCharParser.hpp | 64 - src/host/utils.cpp | 32 +- src/inc/HostAndPropsheetIncludes.h | 12 +- src/inc/LibraryIncludes.h | 21 +- src/inc/conattrs.hpp | 18 +- src/inc/conime.h | 4 +- src/inc/conint.h | 11 - src/inc/conpty-static.h | 9 +- src/inc/conpty.h | 2 +- src/inc/test/CommonState.hpp | 127 +- src/inc/til.h | 9 + src/inc/til/at.h | 40 +- src/inc/til/bitmap.h | 34 +- src/inc/til/bytes.h | 57 + src/inc/til/coalesce.h | 2 +- src/inc/til/color.h | 3 +- src/inc/til/env.h | 483 +++ src/inc/til/flat_set.h | 205 ++ src/inc/til/generational.h | 69 + src/inc/til/math.h | 2 +- src/inc/til/mutex.h | 9 +- src/inc/til/pmr.h | 4 +- src/inc/til/point.h | 17 +- src/inc/til/rect.h | 58 +- src/inc/til/rle.h | 32 +- src/inc/til/size.h | 23 +- src/inc/til/small_vector.h | 114 +- src/inc/til/spsc.h | 6 +- src/inc/til/static_map.h | 45 +- src/inc/til/string.h | 54 +- src/inc/til/ticket_lock.h | 100 + src/inc/til/type_traits.h | 48 + src/inc/til/unicode.h | 190 + src/inc/til/winrt.h | 113 + src/interactivity/base/ApiDetector.cpp | 6 +- src/interactivity/base/EventSynthesis.cpp | 203 +- .../base/HostSignalInputThread.cpp | 8 +- .../base/HostSignalInputThread.hpp | 2 +- .../base/InteractivityFactory.cpp | 48 +- .../base/InteractivityFactory.hpp | 4 + ...eudoConsoleWindowAccessibilityProvider.cpp | 79 + ...eudoConsoleWindowAccessibilityProvider.hpp | 34 + .../base/RemoteConsoleControl.cpp | 10 +- .../base/RemoteConsoleControl.hpp | 1 + src/interactivity/base/ServiceLocator.cpp | 28 +- .../base/lib/InteractivityBase.vcxproj | 4 +- .../lib/InteractivityBase.vcxproj.filters | 9 + src/interactivity/base/sources.inc | 5 +- src/interactivity/inc/EventSynthesis.hpp | 12 +- src/interactivity/inc/IConsoleControl.hpp | 1 + src/interactivity/inc/IConsoleWindow.hpp | 7 - src/interactivity/onecore/BgfxEngine.cpp | 32 +- src/interactivity/onecore/BgfxEngine.hpp | 7 +- src/interactivity/onecore/ConIoSrvComm.cpp | 45 +- src/interactivity/onecore/ConsoleControl.cpp | 5 + src/interactivity/onecore/ConsoleControl.hpp | 1 + .../onecore/ConsoleInputThread.cpp | 8 +- src/interactivity/onecore/ConsoleWindow.cpp | 14 - src/interactivity/onecore/ConsoleWindow.hpp | 3 - src/interactivity/onecore/WindowMetrics.cpp | 16 +- src/interactivity/onecore/precomp.h | 3 + src/interactivity/win32/Clipboard.cpp | 305 +- src/interactivity/win32/ConsoleControl.cpp | 12 + src/interactivity/win32/ConsoleControl.hpp | 1 + .../win32/SystemConfigurationProvider.cpp | 4 +- src/interactivity/win32/WindowIme.cpp | 12 +- src/interactivity/win32/clipboard.hpp | 16 +- src/interactivity/win32/consoleKeyInfo.cpp | 2 +- src/interactivity/win32/find.cpp | 55 +- src/interactivity/win32/lib/win32.LIB.vcxproj | 3 - src/interactivity/win32/menu.cpp | 29 +- src/interactivity/win32/resource.h | 1 - .../win32/screenInfoUiaProvider.cpp | 2 +- .../win32/screenInfoUiaProvider.hpp | 2 +- src/interactivity/win32/uiaTextRange.cpp | 8 +- src/interactivity/win32/uiaTextRange.hpp | 8 +- .../Interactivity.Win32.UnitTests.vcxproj | 3 - .../UiaTextRangeTests.cpp | 119 +- .../win32/ut_interactivity_win32/sources | 3 +- src/interactivity/win32/window.cpp | 225 +- src/interactivity/win32/window.hpp | 19 +- src/interactivity/win32/windowUiaProvider.cpp | 6 +- src/interactivity/win32/windowio.cpp | 237 +- src/interactivity/win32/windowproc.cpp | 62 +- src/internal/stubs.cpp | 19 - src/project.inc | 5 +- src/propsheet/ColorsPage.cpp | 2 +- src/propsheet/OptionsPage.cpp | 19 +- src/propsheet/console.cpp | 27 +- src/propsheet/console.def | 4 +- src/propsheet/console.rc | 6 + src/propsheet/dialogs.h | 1 + src/propsheet/fontdlg.cpp | 6 +- src/propsheet/misc.cpp | 6 +- src/propsheet/registry.cpp | 66 +- src/propsheet/sources | 2 - src/propsheet/util.cpp | 2 +- src/propslib/DelegationConfig.cpp | 81 +- src/propslib/DelegationConfig.hpp | 8 +- src/propslib/RegistrySerialization.cpp | 157 +- src/propslib/ShortcutSerialization.cpp | 10 +- src/propslib/TrueTypeFontList.cpp | 4 +- src/propslib/precomp.h | 8 +- src/renderer/atlas/AtlasEngine.api.cpp | 465 +-- src/renderer/atlas/AtlasEngine.cpp | 1920 ++++------ src/renderer/atlas/AtlasEngine.h | 1059 +----- src/renderer/atlas/AtlasEngine.r.cpp | 1279 ++----- src/renderer/atlas/Backend.cpp | 107 + src/renderer/atlas/Backend.h | 90 + src/renderer/atlas/BackendD2D.cpp | 687 ++++ src/renderer/atlas/BackendD2D.h | 68 + src/renderer/atlas/BackendD3D.cpp | 2281 ++++++++++++ src/renderer/atlas/BackendD3D.h | 321 ++ src/renderer/atlas/DWriteTextAnalysis.cpp | 17 +- src/renderer/atlas/DWriteTextAnalysis.h | 20 +- src/renderer/atlas/README.md | 118 + src/renderer/atlas/atlas.vcxproj | 29 +- src/renderer/atlas/colorbrewer.h | 36 + src/renderer/atlas/common.h | 566 +++ src/renderer/atlas/custom_shader_ps.hlsl | 3 + src/renderer/atlas/custom_shader_vs.hlsl | 3 + src/renderer/atlas/pch.h | 9 +- src/renderer/atlas/shader_common.hlsl | 49 + src/renderer/atlas/shader_ps.hlsl | 257 +- src/renderer/atlas/shader_vs.hlsl | 28 +- src/renderer/atlas/stb_rect_pack.cpp | 14 + src/renderer/atlas/wic.h | 57 + src/renderer/base/CSSLengthPercentage.cpp | 68 + src/renderer/base/FontCache.h | 60 +- src/renderer/base/FontInfoDesired.cpp | 18 +- src/renderer/base/FontResource.cpp | 6 +- src/renderer/base/RenderEngineBase.cpp | 2 +- src/renderer/base/RenderSettings.cpp | 164 +- src/renderer/base/fontinfo.cpp | 10 +- src/renderer/base/lib/base.vcxproj | 2 + src/renderer/base/lib/base.vcxproj.filters | 8 +- src/renderer/base/precomp.h | 7 - src/renderer/base/renderer.cpp | 220 +- src/renderer/base/renderer.hpp | 14 +- src/renderer/base/sources.inc | 1 + src/renderer/base/thread.cpp | 8 +- src/renderer/dx/BoxDrawingEffect.cpp | 30 - src/renderer/dx/BoxDrawingEffect.h | 30 - src/renderer/dx/CustomTextLayout.cpp | 1757 --------- src/renderer/dx/CustomTextLayout.h | 216 -- src/renderer/dx/CustomTextRenderer.cpp | 979 ----- src/renderer/dx/CustomTextRenderer.h | 153 - src/renderer/dx/DxFontInfo.cpp | 291 -- src/renderer/dx/DxFontInfo.h | 72 - src/renderer/dx/DxFontRenderData.cpp | 923 ----- src/renderer/dx/DxFontRenderData.h | 143 - src/renderer/dx/DxRenderer.cpp | 2390 ------------ src/renderer/dx/DxRenderer.hpp | 327 -- src/renderer/dx/DxSoftFont.cpp | 256 -- src/renderer/dx/DxSoftFont.h | 55 - src/renderer/dx/IBoxDrawingEffect.idl | 20 - src/renderer/dx/ScreenPixelShader.h | 91 - src/renderer/dx/ScreenVertexShader.h | 20 - src/renderer/dx/dirs | 2 - src/renderer/dx/lib/dx.vcxproj | 48 - src/renderer/dx/lib/dx.vcxproj.filters | 31 - src/renderer/dx/lib/sources | 8 - src/renderer/dx/precomp.cpp | 4 - src/renderer/dx/precomp.h | 41 - src/renderer/dx/sources.inc | 42 - .../dx/ut_dx/CustomTextLayoutTests.cpp | 100 - src/renderer/dx/ut_dx/DefaultResource.rc | 12 - src/renderer/dx/ut_dx/Dx.Unit.Tests.vcxproj | 42 - src/renderer/dx/ut_dx/product.pbxproj | 4 - src/renderer/dx/ut_dx/sources | 36 - src/renderer/gdi/gdirenderer.hpp | 19 +- src/renderer/gdi/invalidate.cpp | 2 +- src/renderer/gdi/math.cpp | 10 +- src/renderer/gdi/paint.cpp | 188 +- src/renderer/gdi/precomp.h | 18 - src/renderer/gdi/state.cpp | 155 +- src/renderer/inc/CSSLengthPercentage.h | 31 + src/renderer/inc/FontInfoBase.hpp | 4 +- src/renderer/inc/FontInfoDesired.hpp | 7 + src/renderer/inc/FontResource.hpp | 4 +- src/renderer/inc/IRenderData.hpp | 49 +- src/renderer/inc/IRenderEngine.hpp | 60 +- src/renderer/inc/RenderEngineBase.hpp | 4 +- src/renderer/inc/RenderSettings.hpp | 3 +- src/renderer/uia/UiaRenderer.cpp | 32 +- src/renderer/uia/UiaRenderer.hpp | 7 +- src/renderer/vt/VtSequences.cpp | 97 +- src/renderer/vt/Xterm256Engine.cpp | 36 +- src/renderer/vt/XtermEngine.cpp | 50 +- src/renderer/vt/XtermEngine.hpp | 2 +- src/renderer/vt/invalidate.cpp | 29 +- src/renderer/vt/math.cpp | 12 +- src/renderer/vt/paint.cpp | 81 +- src/renderer/vt/precomp.h | 18 - src/renderer/vt/state.cpp | 89 +- src/renderer/vt/tracing.cpp | 32 +- src/renderer/vt/vtrenderer.hpp | 32 +- src/renderer/wddmcon/WddmConRenderer.cpp | 22 +- src/renderer/wddmcon/WddmConRenderer.hpp | 7 +- src/renderer/wddmcon/oss_shim.h | 2 - src/server/ApiDispatchers.cpp | 439 +-- src/server/ApiDispatchersInternal.cpp | 5 - src/server/ApiMessage.cpp | 28 +- src/server/ApiMessage.h | 3 - src/server/ApiSorter.cpp | 1 - src/server/IApiRoutines.h | 108 +- src/server/IWaitRoutine.h | 5 + src/server/IoDispatchers.cpp | 50 +- src/server/ProcessHandle.cpp | 30 +- src/server/ProcessHandle.h | 22 +- src/server/ProcessList.cpp | 268 +- src/server/ProcessList.h | 17 +- src/server/WaitBlock.cpp | 12 +- src/server/precomp.h | 40 +- src/terminal/adapter/DispatchTypes.hpp | 230 +- src/terminal/adapter/FontBuffer.cpp | 8 +- src/terminal/adapter/FontBuffer.hpp | 8 +- src/terminal/adapter/IInteractDispatch.hpp | 4 +- src/terminal/adapter/ITermDispatch.hpp | 58 +- src/terminal/adapter/ITerminalApi.hpp | 25 +- src/terminal/adapter/InteractDispatch.cpp | 26 +- src/terminal/adapter/InteractDispatch.hpp | 4 +- src/terminal/adapter/MacroBuffer.cpp | 270 ++ src/terminal/adapter/MacroBuffer.hpp | 79 + src/terminal/adapter/adaptDispatch.cpp | 3226 +++++++++++++---- src/terminal/adapter/adaptDispatch.hpp | 155 +- .../adapter/adaptDispatchGraphics.cpp | 537 ++- src/terminal/adapter/lib/adapter.vcxproj | 8 +- .../adapter/lib/adapter.vcxproj.filters | 19 +- src/terminal/adapter/precomp.h | 3 - src/terminal/adapter/sources.inc | 3 +- src/terminal/adapter/telemetry.cpp | 6 - src/terminal/adapter/telemetry.hpp | 20 - src/terminal/adapter/termDispatch.hpp | 58 +- src/terminal/adapter/terminalOutput.cpp | 128 +- src/terminal/adapter/terminalOutput.hpp | 23 +- src/terminal/adapter/tracing.cpp | 5 - src/terminal/adapter/tracing.hpp | 18 - .../adapter/ut_adapter/MouseInputTest.cpp | 439 +-- .../adapter/ut_adapter/WexHelpers.hpp | 32 +- .../adapter/ut_adapter/adapterTest.cpp | 1511 ++++++-- src/terminal/adapter/ut_adapter/inputTest.cpp | 699 ++-- src/terminal/adapter/ut_adapter/sources | 4 +- src/terminal/input/mouseInput.cpp | 245 +- src/terminal/input/terminalInput.cpp | 1183 +++--- src/terminal/input/terminalInput.hpp | 113 +- src/terminal/parser/IStateMachineEngine.hpp | 2 + .../parser/InputStateMachineEngine.cpp | 102 +- .../parser/InputStateMachineEngine.hpp | 11 +- .../parser/OutputStateMachineEngine.cpp | 247 +- .../parser/OutputStateMachineEngine.hpp | 38 +- .../parser/ft_fuzzer/fuzzing_directed.h | 15 +- .../parser/lib/parser.vcxproj.filters | 6 - src/terminal/parser/parser-common.vcxitems | 2 - src/terminal/parser/precomp.h | 1 - src/terminal/parser/sources.inc | 1 - src/terminal/parser/stateMachine.cpp | 552 ++- src/terminal/parser/stateMachine.hpp | 26 +- src/terminal/parser/telemetry.cpp | 294 -- src/terminal/parser/telemetry.hpp | 147 - src/terminal/parser/tracing.cpp | 13 + src/terminal/parser/tracing.hpp | 4 +- .../parser/ut_parser/InputEngineTest.cpp | 212 +- .../parser/ut_parser/OutputEngineTest.cpp | 651 ++-- .../parser/ut_parser/StateMachineTest.cpp | 42 + src/terminal/parser/ut_parser/sources | 3 +- src/til/ut_til/BitmapTests.cpp | 21 +- src/til/ut_til/EnvTests.cpp | 89 + src/til/ut_til/FlatSetTests.cpp | 68 + src/til/ut_til/GenerationalTests.cpp | 42 + src/til/ut_til/RunLengthEncodingTests.cpp | 2 +- src/til/ut_til/SizeTests.cpp | 4 +- src/til/ut_til/SmallVectorTests.cpp | 20 + src/til/ut_til/UnicodeTests.cpp | 82 + src/til/ut_til/sources | 2 + src/til/ut_til/til.unit.tests.vcxproj | 15 + src/til/ut_til/til.unit.tests.vcxproj.filters | 19 + .../ColorTool/schemes/OneHalfDark.itermcolors | 750 ++-- .../schemes/OneHalfLight.itermcolors | 750 ++-- .../ColorTool/schemes/campbell-absolute.ini | 29 + .../ColorTool/schemes/campbell-legacy.ini | 58 +- src/tools/ColorTool/schemes/campbell.ini | 58 +- src/tools/ColorTool/schemes/cmd-legacy.ini | 58 +- .../schemes/deuteranopia.itermcolors | 586 +-- .../schemes/solarized_dark.itermcolors | 484 +-- .../schemes/solarized_light.itermcolors | 578 +-- .../ColorTool/schemes/tango_dark.itermcolors | 448 +-- .../ColorTool/schemes/tango_light.itermcolors | 448 +-- src/tools/ConsoleBench/ConsoleBench.vcxproj | 39 + .../ConsoleBench.vcxproj.filters} | 28 +- src/tools/ConsoleBench/arena.cpp | 268 ++ src/tools/ConsoleBench/arena.h | 111 + src/tools/ConsoleBench/conhost.cpp | 170 + src/tools/ConsoleBench/conhost.h | 20 + src/tools/ConsoleBench/main.cpp | 555 +++ .../ConsoleBench}/pch.cpp | 0 src/tools/ConsoleBench/pch.h | 17 + src/tools/ConsoleBench/utils.cpp | 108 + src/tools/ConsoleBench/utils.h | 47 + .../ConsoleMonitor.exe.manifest | 21 + .../ConsoleMonitor/ConsoleMonitor.vcxproj | 32 + .../ConsoleMonitor.vcxproj.filters | 4 + src/tools/ConsoleMonitor/main.cpp | 251 ++ src/tools/ConsoleMonitor/pch.cpp | 1 + src/tools/ConsoleMonitor/pch.h | 12 + .../MonarchPeasantPackage.wapproj | 8 - .../RenderingTests/RenderingTests.vcxproj | 27 + .../RenderingTests.vcxproj.filters | 4 + src/tools/RenderingTests/main.cpp | 355 ++ src/tools/TerminalStress/Program.cs | 83 + .../TerminalStress/TerminalStress.csproj | 12 + src/tools/benchcat/benchcat.vcxproj | 45 + src/tools/benchcat/crt.cpp | 22 + src/tools/benchcat/main.cpp | 692 ++++ src/tools/integrity/lib/util.cpp | 2 +- src/tools/lnkd/main.cpp | 2 +- src/tools/pixels/main.cpp | 2 +- src/tools/test/main.cpp | 2 +- src/tools/vtapp/Program.cs | 19 +- src/tools/vtapp/sources.dep | 3 - src/tsf/TfConvArea.cpp | 4 +- src/tsf/sources | 1 - src/types/CodepointWidthDetector.cpp | 812 ++--- src/types/ColorFix.cpp | 373 +- src/types/Environment.cpp | 132 - src/types/FocusEvent.cpp | 38 - src/types/GlyphWidth.cpp | 8 +- src/types/IBaseData.h | 50 - src/types/IInputEvent.cpp | 68 - src/types/IInputEventStreams.cpp | 113 - src/types/IUiaData.h | 49 - src/types/KeyEvent.cpp | 181 - src/types/MenuEvent.cpp | 25 - src/types/ModifierKeyState.cpp | 137 - src/types/MouseEvent.cpp | 43 - src/types/ScreenInfoUiaProviderBase.cpp | 6 +- src/types/ScreenInfoUiaProviderBase.h | 15 +- src/types/TermControlUiaProvider.cpp | 6 +- src/types/TermControlUiaProvider.hpp | 2 +- src/types/TermControlUiaTextRange.cpp | 8 +- src/types/TermControlUiaTextRange.hpp | 9 +- src/types/UiaTextRangeBase.cpp | 308 +- src/types/UiaTextRangeBase.hpp | 24 +- src/types/UiaTracing.cpp | 24 +- src/types/UiaTracing.h | 16 +- src/types/Utf16Parser.cpp | 91 - src/types/WindowBufferSizeEvent.cpp | 26 - src/types/colorTable.cpp | 10 +- src/types/convert.cpp | 34 - src/types/inc/CodepointWidthDetector.hpp | 30 +- src/types/inc/ColorFix.hpp | 60 +- src/types/inc/Environment.hpp | 31 - src/types/inc/GlyphWidth.hpp | 7 +- src/types/inc/IInputEvent.hpp | 608 +--- src/types/inc/Utf16Parser.hpp | 46 - src/types/inc/colorTable.hpp | 4 +- src/types/inc/convert.hpp | 5 +- src/types/inc/utils.hpp | 14 +- src/types/lib/types.vcxproj | 15 +- src/types/lib/types.vcxproj.filters | 60 - src/types/sgrStack.cpp | 60 +- src/types/sources.inc | 8 - src/types/ut_types/UtilsTests.cpp | 82 +- src/types/ut_types/UuidTests.cpp | 4 +- src/types/utils.cpp | 145 +- src/types/viewport.cpp | 162 +- src/winconpty/dll/winconpty.def | 3 +- src/winconpty/ft_pty/ConPtyTests.cpp | 175 +- .../ft_pty/winconpty.FeatureTests.vcxproj | 4 + src/winconpty/precomp.h | 10 +- src/winconpty/winconpty.cpp | 103 +- src/winconpty/winconpty.h | 53 +- tools/CheckPSVersion.ps1 | 4 + tools/ConsoleTypes.natvis | 135 +- tools/FeatureStagingSchema.xsd | 2 +- tools/Generate-CodepointWidthsFromUCD.ps1 | 32 +- tools/Generate-FeatureStagingHeader.ps1 | 2 +- tools/Get-OSSConhostLog.ps1 | 2 +- tools/OpenConsole.psm1 | 2 +- .../New-TerminalStackedChangelog.ps1 | 29 +- .../ReleaseEngineering/ServicingPipeline.ps1 | 2 +- tools/WindowsCheckPSVersion.ps1 | 3 + tools/bcz.cmd | 4 + tools/packages.config | 2 +- tools/runut.cmd | 2 +- 1338 files changed, 71253 insertions(+), 63563 deletions(-) create mode 100644 .git-blame-ignore-revs create mode 100644 .github/actions/spelling/candidate.patterns create mode 100644 .github/actions/spelling/expect/04cdb9b77d6827c0202f51acd4205b017015bfff.txt delete mode 100644 .github/actions/spelling/patterns/0_n.txt delete mode 100644 .github/actions/spelling/patterns/0_r.txt delete mode 100644 .github/actions/spelling/patterns/0_t.txt delete mode 100644 .github/fabricbot.json create mode 100644 .github/policies/resourceManagement.yml create mode 100644 .github/workflows/similarIssues.yml create mode 100644 .github/workflows/winget.yml delete mode 100644 build/Helix/AzurePipelinesHelperScripts.ps1 delete mode 100644 build/Helix/EnsureMachineState.ps1 delete mode 100644 build/Helix/GenerateTestProjFile.ps1 delete mode 100644 build/Helix/InstallTestAppDependencies.ps1 delete mode 100644 build/Helix/OutputFailedTestQuery.ps1 delete mode 100644 build/Helix/OutputSubResultsJsonFiles.ps1 create mode 100644 build/Helix/OutputTestErrorsForAzureDevops.ps1 delete mode 100644 build/Helix/OutputTestResults.ps1 delete mode 100644 build/Helix/PrepareHelixPayload.ps1 delete mode 100644 build/Helix/ProcessHelixFiles.ps1 delete mode 100644 build/Helix/RunTestsInHelix.proj delete mode 100644 build/Helix/UpdateUnreliableTests.ps1 delete mode 100644 build/Helix/global.json delete mode 100644 build/Helix/packages.config delete mode 100644 build/Helix/readme.md delete mode 100644 build/Helix/runtests.cmd delete mode 100644 build/config/ESRPSigning_ConPTY.json create mode 100644 build/config/esrp.build.batch.conpty.json create mode 100644 build/config/esrp.build.batch.terminal_constituents.json create mode 100644 build/config/esrp.build.batch.wpf.json create mode 100644 build/config/esrp.build.batch.wpfdotnet.json create mode 100644 build/config/release.gdnbaselines create mode 100644 build/config/template.appinstaller create mode 100644 build/config/tsa.json create mode 100644 build/pipelines/ob-nightly.yml create mode 100644 build/pipelines/ob-release.yml delete mode 100644 build/pipelines/release.yml create mode 100644 build/pipelines/templates-v2/job-build-package-wpf.yml create mode 100644 build/pipelines/templates-v2/job-build-project.yml create mode 100644 build/pipelines/templates-v2/job-check-code-format.yml create mode 100644 build/pipelines/templates-v2/job-deploy-to-azure-storage.yml create mode 100644 build/pipelines/templates-v2/job-index-github-codenav.yml create mode 100644 build/pipelines/templates-v2/job-merge-msix-into-bundle.yml create mode 100644 build/pipelines/templates-v2/job-package-conpty.yml rename build/pipelines/{templates/pgo-build-and-publish-nuget-job.yml => templates-v2/job-pgo-build-nuget-and-publish.yml} (57%) create mode 100644 build/pipelines/templates-v2/job-pgo-merge-pgd.yml create mode 100644 build/pipelines/templates-v2/job-publish-symbols.yml create mode 100644 build/pipelines/templates-v2/job-run-pgo-tests.yml create mode 100644 build/pipelines/templates-v2/job-submit-windows-vpack.yml rename build/pipelines/{templates/test-console-ci.yml => templates-v2/job-test-project.yml} (50%) create mode 100644 build/pipelines/templates-v2/pipeline-full-release-build.yml create mode 100644 build/pipelines/templates-v2/pipeline-onebranch-full-release-build.yml create mode 100644 build/pipelines/templates-v2/steps-create-signing-config.yml create mode 100644 build/pipelines/templates-v2/steps-download-bin-dir-artifact.yml create mode 100644 build/pipelines/templates-v2/steps-ensure-nuget-version.yml create mode 100644 build/pipelines/templates-v2/steps-fetch-and-prepare-localizations.yml rename build/pipelines/{templates/restore-nuget-steps.yml => templates-v2/steps-restore-nuget.yml} (75%) create mode 100644 build/pipelines/templates-v2/variables-nuget-package-version.yml create mode 100644 build/pipelines/templates-v2/variables-onebranch-config.yml delete mode 100644 build/pipelines/templates/build-console-audit-job.yml delete mode 100644 build/pipelines/templates/build-console-ci.yml delete mode 100644 build/pipelines/templates/build-console-compliance-job.yml delete mode 100644 build/pipelines/templates/build-console-fuzzing.yml delete mode 100644 build/pipelines/templates/build-console-pgo.yml delete mode 100644 build/pipelines/templates/build-console-steps.yml delete mode 100644 build/pipelines/templates/check-formatting.yml delete mode 100644 build/pipelines/templates/codenav-indexer.yml delete mode 100644 build/pipelines/templates/console-ci-helix-job.yml delete mode 100644 build/pipelines/templates/helix-createprojfile-steps.yml delete mode 100644 build/pipelines/templates/helix-processtestresults-job.yml delete mode 100644 build/pipelines/templates/helix-runtests-job.yml delete mode 100644 build/pipelines/templates/pgo-merge-pgd-job.yml create mode 100644 build/rules/Microsoft.UI.Xaml.Additional.targets create mode 100644 build/scripts/Merge-PriFiles.ps1 create mode 100644 build/scripts/Merge-TerminalAndXamlResources.ps1 create mode 100644 build/scripts/New-AppInstallerFromTemplateAndBundle.ps1 create mode 100644 build/scripts/New-UnpackagedTerminalDistribution.ps1 delete mode 100644 build/scripts/Patch-ManifestsToWindowsVersion.ps1 create mode 100644 doc/COOKED_READ_DATA.md create mode 100644 doc/color_nudging.html create mode 100644 doc/roadmap-2023.md create mode 100644 doc/specs/#11000 - Marks/Shell-Integration-Marks.md create mode 100644 doc/specs/#11000 - Marks/ftcs-diagram.png create mode 100644 doc/specs/#11000 - Marks/vscode-shell-integration-gutter-mark.png create mode 100644 doc/specs/#1595 - Suggestions UI/3121-suggestion-menu-2023-000.gif create mode 100644 doc/specs/#1595 - Suggestions UI/Suggestions-UI.md create mode 100644 doc/specs/#1595 - Suggestions UI/command-history-suggestions.gif create mode 100644 doc/specs/#1595 - Suggestions UI/shell-autocomplete-july-2022-000.gif create mode 100644 doc/specs/#1595 - Suggestions UI/tasks-suggestions.gif create mode 100644 doc/specs/#1595 - Suggestions UI/vscode-shell-suggestions.gif create mode 100644 doc/specs/#7335 - Console Allocation Policy.md create mode 100644 doc/specs/drafts/#2634 - Broadcast Input/#2634 - Broadcast Input.md create mode 100644 doc/specs/drafts/#2634 - Broadcast Input/broadcast-input-borders.gif create mode 100644 doc/specs/drafts/#2634 - Broadcast Input/broadcast-segoe-icon.png create mode 100644 doc/specs/drafts/#642 - Buffer Exporting and Logging/#642 - Buffer Exporting and Logging.md create mode 100644 doc/specs/drafts/#642 - Buffer Exporting and Logging/ConEmu-logging-settings.png create mode 100644 doc/specs/drafts/#642 - Buffer Exporting and Logging/PuTTY-logging-settings.png create mode 100644 doc/specs/drafts/#642 - Buffer Exporting and Logging/SecureCRT-logging-settings.png create mode 100644 doc/specs/drafts/#642 - Buffer Exporting and Logging/securecrt-context-menu.png create mode 100644 doc/specs/portable-mode-spec.md create mode 100644 doc/terminal-a11y-2023.md create mode 100644 oss/stb/LICENSE create mode 100644 oss/stb/MAINTAINER_README.md create mode 100644 oss/stb/cgmanifest.json create mode 100644 oss/stb/stb_rect_pack.h create mode 100644 res/terminal/Terminal_Can.svg create mode 100644 res/terminal/Terminal_Can_HC.svg create mode 100644 res/terminal/images-Can/LargeTile.scale-100.png create mode 100644 res/terminal/images-Can/LargeTile.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/LargeTile.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/LargeTile.scale-125.png create mode 100644 res/terminal/images-Can/LargeTile.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/LargeTile.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/LargeTile.scale-150.png create mode 100644 res/terminal/images-Can/LargeTile.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/LargeTile.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/LargeTile.scale-200.png create mode 100644 res/terminal/images-Can/LargeTile.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/LargeTile.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/LargeTile.scale-400.png create mode 100644 res/terminal/images-Can/LargeTile.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/LargeTile.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-100.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-125.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-150.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-200.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-400.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/LockScreenLogo.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/SmallTile.scale-100.png create mode 100644 res/terminal/images-Can/SmallTile.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/SmallTile.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/SmallTile.scale-125.png create mode 100644 res/terminal/images-Can/SmallTile.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/SmallTile.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/SmallTile.scale-150.png create mode 100644 res/terminal/images-Can/SmallTile.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/SmallTile.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/SmallTile.scale-200.png create mode 100644 res/terminal/images-Can/SmallTile.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/SmallTile.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/SmallTile.scale-400.png create mode 100644 res/terminal/images-Can/SmallTile.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/SmallTile.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-100.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-125.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-150.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-200.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-400.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/SplashScreen.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-100.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-125.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-150.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-200.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-400.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/Square150x150Logo.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-100.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-125.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-150.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-200.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-400.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-16.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-16_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-16_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-16_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-16_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-16_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-20.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-20_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-20_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-20_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-20_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-20_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-24.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-24_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-24_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-24_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-24_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-24_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-256.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-256_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-256_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-256_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-256_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-256_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-30.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-30_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-30_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-30_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-30_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-30_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-32.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-32_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-32_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-32_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-32_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-32_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-36.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-36_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-36_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-36_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-36_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-36_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-40.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-40_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-40_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-40_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-40_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-40_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-48.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-48_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-48_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-48_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-48_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-48_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-60.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-60_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-60_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-60_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-60_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-60_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-64.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-64_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-64_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-64_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-64_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-64_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-72.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-72_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-72_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-72_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-72_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-72_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-80.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-80_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-80_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-80_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-80_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-80_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-96.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-96_altform-unplated.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-96_altform-unplated_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-96_altform-unplated_contrast-white.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-96_contrast-black.png create mode 100644 res/terminal/images-Can/Square44x44Logo.targetsize-96_contrast-white.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-100.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-125.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-150.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-200.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-400.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/StoreLogo.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-100.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-100_contrast-black.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-100_contrast-white.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-125.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-125_contrast-black.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-125_contrast-white.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-150.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-150_contrast-black.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-150_contrast-white.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-200.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-200_contrast-black.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-200_contrast-white.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-400.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-400_contrast-black.png create mode 100644 res/terminal/images-Can/Wide310x150Logo.scale-400_contrast-white.png create mode 100644 res/terminal/images-Can/terminal.ico create mode 100644 res/terminal/images-Can/terminal_contrast-black.ico create mode 100644 res/terminal/images-Can/terminal_contrast-white.ico create mode 100644 samples/PixelShaders/BackgroundImage.hlsl delete mode 100644 src/buffer/out/AttrRow.cpp delete mode 100644 src/buffer/out/AttrRow.hpp delete mode 100644 src/buffer/out/CharRow.cpp delete mode 100644 src/buffer/out/CharRow.hpp delete mode 100644 src/buffer/out/CharRowCell.cpp delete mode 100644 src/buffer/out/CharRowCell.hpp delete mode 100644 src/buffer/out/CharRowCellReference.cpp delete mode 100644 src/buffer/out/CharRowCellReference.hpp create mode 100644 src/buffer/out/UTextAdapter.cpp create mode 100644 src/buffer/out/UTextAdapter.h delete mode 100644 src/buffer/out/UnicodeStorage.cpp delete mode 100644 src/buffer/out/UnicodeStorage.hpp delete mode 100644 src/buffer/out/ut_textbuffer/UnicodeStorageTests.cpp create mode 100644 src/cascadia/CascadiaPackage/Package-Can.appxmanifest create mode 100644 src/cascadia/LocalTests_SettingsModel/NewTabMenuTests.cpp delete mode 100644 src/cascadia/PublicTerminalCore/PublicTerminalCore.vcxproj delete mode 100644 src/cascadia/PublicTerminalCore/pch.h create mode 100644 src/cascadia/TerminalApp/AboutDialog.cpp create mode 100644 src/cascadia/TerminalApp/AboutDialog.h create mode 100644 src/cascadia/TerminalApp/AboutDialog.idl create mode 100644 src/cascadia/TerminalApp/AboutDialog.xaml create mode 100644 src/cascadia/TerminalApp/ContentManager.cpp create mode 100644 src/cascadia/TerminalApp/ContentManager.h create mode 100644 src/cascadia/TerminalApp/SettingsLoadEventArgs.h create mode 100644 src/cascadia/TerminalApp/SuggestionsControl.cpp create mode 100644 src/cascadia/TerminalApp/SuggestionsControl.h create mode 100644 src/cascadia/TerminalApp/SuggestionsControl.idl create mode 100644 src/cascadia/TerminalApp/SuggestionsControl.xaml create mode 100644 src/cascadia/TerminalApp/TerminalWindow.cpp create mode 100644 src/cascadia/TerminalApp/TerminalWindow.h create mode 100644 src/cascadia/TerminalApp/TerminalWindow.idl delete mode 100644 src/cascadia/TerminalApp/packages.config rename src/cascadia/TerminalConnection/{ConnectionStateHolder.h => BaseTerminalConnection.h} (84%) rename src/cascadia/{PublicTerminalCore => TerminalControl}/HwndTerminal.cpp (71%) rename src/cascadia/{PublicTerminalCore => TerminalControl}/HwndTerminal.hpp (86%) rename src/cascadia/{PublicTerminalCore => TerminalControl}/HwndTerminalAutomationPeer.cpp (82%) rename src/cascadia/{PublicTerminalCore => TerminalControl}/HwndTerminalAutomationPeer.hpp (90%) create mode 100644 src/cascadia/TerminalCore/tracing.hpp create mode 100644 src/cascadia/TerminalSettingsEditor/ActionsViewModel.cpp create mode 100644 src/cascadia/TerminalSettingsEditor/ActionsViewModel.h create mode 100644 src/cascadia/TerminalSettingsEditor/ActionsViewModel.idl delete mode 100644 src/cascadia/TerminalSettingsEditor/Profiles.h delete mode 100644 src/cascadia/TerminalSettingsEditor/Profiles.idl delete mode 100644 src/cascadia/TerminalSettingsEditor/packages.config create mode 100644 src/cascadia/TerminalSettingsModel/FolderEntry.cpp create mode 100644 src/cascadia/TerminalSettingsModel/FolderEntry.h create mode 100644 src/cascadia/TerminalSettingsModel/MatchProfilesEntry.cpp create mode 100644 src/cascadia/TerminalSettingsModel/MatchProfilesEntry.h create mode 100644 src/cascadia/TerminalSettingsModel/NewTabMenuEntry.cpp create mode 100644 src/cascadia/TerminalSettingsModel/NewTabMenuEntry.h create mode 100644 src/cascadia/TerminalSettingsModel/NewTabMenuEntry.idl create mode 100644 src/cascadia/TerminalSettingsModel/ProfileCollectionEntry.cpp create mode 100644 src/cascadia/TerminalSettingsModel/ProfileCollectionEntry.h create mode 100644 src/cascadia/TerminalSettingsModel/ProfileEntry.cpp create mode 100644 src/cascadia/TerminalSettingsModel/ProfileEntry.h create mode 100644 src/cascadia/TerminalSettingsModel/RemainingProfilesEntry.cpp create mode 100644 src/cascadia/TerminalSettingsModel/RemainingProfilesEntry.h create mode 100644 src/cascadia/TerminalSettingsModel/SeparatorEntry.cpp create mode 100644 src/cascadia/TerminalSettingsModel/SeparatorEntry.h create mode 100644 src/cascadia/TerminalSettingsModel/SshHostGenerator.cpp create mode 100644 src/cascadia/TerminalSettingsModel/SshHostGenerator.h delete mode 100644 src/cascadia/TerminalSettingsModel/defaults-universal.json create mode 100644 src/cascadia/UnitTests_TerminalCore/TilWinRtHelpersTests.cpp create mode 100644 src/cascadia/WinRTUtils/inc/SafeDispatcherTimer.h create mode 100644 src/cascadia/WindowsTerminal/WindowEmperor.cpp create mode 100644 src/cascadia/WindowsTerminal/WindowEmperor.h create mode 100644 src/cascadia/WindowsTerminal/WindowThread.cpp create mode 100644 src/cascadia/WindowsTerminal/WindowThread.h delete mode 100644 src/cascadia/WindowsTerminal/packages.config delete mode 100644 src/host/CommandListPopup.cpp delete mode 100644 src/host/CommandListPopup.hpp delete mode 100644 src/host/CommandNumberPopup.cpp delete mode 100644 src/host/CommandNumberPopup.hpp delete mode 100644 src/host/CopyFromCharPopup.cpp delete mode 100644 src/host/CopyFromCharPopup.hpp delete mode 100644 src/host/CopyToCharPopup.cpp delete mode 100644 src/host/CopyToCharPopup.hpp delete mode 100644 src/host/ft_integrity/sources.dep delete mode 100644 src/host/popup.cpp delete mode 100644 src/host/popup.h delete mode 100644 src/host/telemetry.cpp delete mode 100644 src/host/telemetry.hpp delete mode 100644 src/host/ut_host/CommandLineTests.cpp delete mode 100644 src/host/ut_host/CommandListPopupTests.cpp delete mode 100644 src/host/ut_host/CommandNumberPopupTests.cpp delete mode 100644 src/host/ut_host/CopyFromCharPopupTests.cpp delete mode 100644 src/host/ut_host/CopyToCharPopupTests.cpp delete mode 100644 src/host/ut_host/PopupTestHelper.hpp delete mode 100644 src/host/ut_host/ReadWaitTests.cpp delete mode 100644 src/host/ut_host/Utf16ParserTests.cpp delete mode 100644 src/host/ut_host/Utf8ToWideCharParserTests.cpp delete mode 100644 src/host/utf8ToWideCharParser.cpp delete mode 100644 src/host/utf8ToWideCharParser.hpp create mode 100644 src/inc/til/bytes.h create mode 100644 src/inc/til/env.h create mode 100644 src/inc/til/flat_set.h create mode 100644 src/inc/til/generational.h create mode 100644 src/inc/til/type_traits.h create mode 100644 src/inc/til/unicode.h create mode 100644 src/inc/til/winrt.h create mode 100644 src/interactivity/base/PseudoConsoleWindowAccessibilityProvider.cpp create mode 100644 src/interactivity/base/PseudoConsoleWindowAccessibilityProvider.hpp create mode 100644 src/renderer/atlas/Backend.cpp create mode 100644 src/renderer/atlas/Backend.h create mode 100644 src/renderer/atlas/BackendD2D.cpp create mode 100644 src/renderer/atlas/BackendD2D.h create mode 100644 src/renderer/atlas/BackendD3D.cpp create mode 100644 src/renderer/atlas/BackendD3D.h create mode 100644 src/renderer/atlas/README.md create mode 100644 src/renderer/atlas/colorbrewer.h create mode 100644 src/renderer/atlas/common.h create mode 100644 src/renderer/atlas/shader_common.hlsl create mode 100644 src/renderer/atlas/stb_rect_pack.cpp create mode 100644 src/renderer/atlas/wic.h create mode 100644 src/renderer/base/CSSLengthPercentage.cpp delete mode 100644 src/renderer/dx/BoxDrawingEffect.cpp delete mode 100644 src/renderer/dx/BoxDrawingEffect.h delete mode 100644 src/renderer/dx/CustomTextLayout.cpp delete mode 100644 src/renderer/dx/CustomTextLayout.h delete mode 100644 src/renderer/dx/CustomTextRenderer.cpp delete mode 100644 src/renderer/dx/CustomTextRenderer.h delete mode 100644 src/renderer/dx/DxFontInfo.cpp delete mode 100644 src/renderer/dx/DxFontInfo.h delete mode 100644 src/renderer/dx/DxFontRenderData.cpp delete mode 100644 src/renderer/dx/DxFontRenderData.h delete mode 100644 src/renderer/dx/DxRenderer.cpp delete mode 100644 src/renderer/dx/DxRenderer.hpp delete mode 100644 src/renderer/dx/DxSoftFont.cpp delete mode 100644 src/renderer/dx/DxSoftFont.h delete mode 100644 src/renderer/dx/IBoxDrawingEffect.idl delete mode 100644 src/renderer/dx/ScreenPixelShader.h delete mode 100644 src/renderer/dx/ScreenVertexShader.h delete mode 100644 src/renderer/dx/dirs delete mode 100644 src/renderer/dx/lib/dx.vcxproj delete mode 100644 src/renderer/dx/lib/dx.vcxproj.filters delete mode 100644 src/renderer/dx/lib/sources delete mode 100644 src/renderer/dx/precomp.cpp delete mode 100644 src/renderer/dx/precomp.h delete mode 100644 src/renderer/dx/sources.inc delete mode 100644 src/renderer/dx/ut_dx/CustomTextLayoutTests.cpp delete mode 100644 src/renderer/dx/ut_dx/DefaultResource.rc delete mode 100644 src/renderer/dx/ut_dx/Dx.Unit.Tests.vcxproj delete mode 100644 src/renderer/dx/ut_dx/product.pbxproj delete mode 100644 src/renderer/dx/ut_dx/sources create mode 100644 src/renderer/inc/CSSLengthPercentage.h create mode 100644 src/terminal/adapter/MacroBuffer.cpp create mode 100644 src/terminal/adapter/MacroBuffer.hpp delete mode 100644 src/terminal/adapter/telemetry.cpp delete mode 100644 src/terminal/adapter/telemetry.hpp delete mode 100644 src/terminal/adapter/tracing.cpp delete mode 100644 src/terminal/adapter/tracing.hpp delete mode 100644 src/terminal/parser/telemetry.cpp delete mode 100644 src/terminal/parser/telemetry.hpp create mode 100644 src/til/ut_til/EnvTests.cpp create mode 100644 src/til/ut_til/FlatSetTests.cpp create mode 100644 src/til/ut_til/GenerationalTests.cpp create mode 100644 src/til/ut_til/UnicodeTests.cpp create mode 100644 src/tools/ColorTool/schemes/campbell-absolute.ini create mode 100644 src/tools/ConsoleBench/ConsoleBench.vcxproj rename src/{cascadia/PublicTerminalCore/PublicTerminalCore.vcxproj.filters => tools/ConsoleBench/ConsoleBench.vcxproj.filters} (58%) create mode 100644 src/tools/ConsoleBench/arena.cpp create mode 100644 src/tools/ConsoleBench/arena.h create mode 100644 src/tools/ConsoleBench/conhost.cpp create mode 100644 src/tools/ConsoleBench/conhost.h create mode 100644 src/tools/ConsoleBench/main.cpp rename src/{cascadia/PublicTerminalCore => tools/ConsoleBench}/pch.cpp (100%) create mode 100644 src/tools/ConsoleBench/pch.h create mode 100644 src/tools/ConsoleBench/utils.cpp create mode 100644 src/tools/ConsoleBench/utils.h create mode 100644 src/tools/ConsoleMonitor/ConsoleMonitor.exe.manifest create mode 100644 src/tools/ConsoleMonitor/ConsoleMonitor.vcxproj create mode 100644 src/tools/ConsoleMonitor/ConsoleMonitor.vcxproj.filters create mode 100644 src/tools/ConsoleMonitor/main.cpp create mode 100644 src/tools/ConsoleMonitor/pch.cpp create mode 100644 src/tools/ConsoleMonitor/pch.h create mode 100644 src/tools/RenderingTests/RenderingTests.vcxproj create mode 100644 src/tools/RenderingTests/RenderingTests.vcxproj.filters create mode 100644 src/tools/RenderingTests/main.cpp create mode 100644 src/tools/TerminalStress/Program.cs create mode 100644 src/tools/TerminalStress/TerminalStress.csproj create mode 100644 src/tools/benchcat/benchcat.vcxproj create mode 100644 src/tools/benchcat/crt.cpp create mode 100644 src/tools/benchcat/main.cpp delete mode 100644 src/tools/vtapp/sources.dep delete mode 100644 src/types/Environment.cpp delete mode 100644 src/types/FocusEvent.cpp delete mode 100644 src/types/IBaseData.h delete mode 100644 src/types/IInputEvent.cpp delete mode 100644 src/types/IInputEventStreams.cpp delete mode 100644 src/types/IUiaData.h delete mode 100644 src/types/KeyEvent.cpp delete mode 100644 src/types/MenuEvent.cpp delete mode 100644 src/types/ModifierKeyState.cpp delete mode 100644 src/types/MouseEvent.cpp delete mode 100644 src/types/Utf16Parser.cpp delete mode 100644 src/types/WindowBufferSizeEvent.cpp delete mode 100644 src/types/inc/Environment.hpp delete mode 100644 src/types/inc/Utf16Parser.hpp create mode 100644 tools/CheckPSVersion.ps1 create mode 100644 tools/WindowsCheckPSVersion.ps1 diff --git a/.clang-format b/.clang-format index a6db19a0688..1add70421ef 100644 --- a/.clang-format +++ b/.clang-format @@ -1,57 +1,25 @@ - +--- +Language: Cpp +BasedOnStyle: Microsoft AccessModifierOffset: -4 -AlignAfterOpenBracket: Align -AllowAllArgumentsOnNextLine: true -AlignConsecutiveMacros: false -AlignConsecutiveAssignments: false -AlignConsecutiveDeclarations: false -AllowAllConstructorInitializersOnNextLine: true AlignEscapedNewlines: Left -AlignOperands: true AlignTrailingComments: false AllowAllParametersOfDeclarationOnNextLine: false -AllowShortBlocksOnASingleLine: Never AllowShortFunctionsOnASingleLine: All -AllowShortCaseLabelsOnASingleLine: false -AllowShortIfStatementsOnASingleLine: Never -#AllowShortLambdasOnASingleLine: Inline -AllowShortLoopsOnASingleLine: false -AlwaysBreakAfterReturnType: None -AlwaysBreakBeforeMultilineStrings: false AlwaysBreakTemplateDeclarations: Yes BinPackArguments: false BinPackParameters: false BraceWrapping: AfterCaseLabel: true - AfterClass: true - AfterControlStatement: true - AfterEnum: true - AfterFunction: true - AfterNamespace: true - AfterObjCDeclaration: true - AfterStruct: true AfterUnion: true AfterExternBlock: false - BeforeCatch: true - BeforeElse: true - IndentBraces: false - SplitEmptyFunction: true - SplitEmptyRecord: true - SplitEmptyNamespace: true -BreakBeforeBinaryOperators: None -BreakBeforeBraces: Custom BreakBeforeTernaryOperators: false BreakConstructorInitializers: AfterColon BreakInheritanceList: AfterColon ColumnLimit: 0 CommentPragmas: "suppress" -CompactNamespaces: false ConstructorInitializerAllOnOneLineOrOnePerLine: true -ConstructorInitializerIndentWidth: 4 -ContinuationIndentWidth: 4 Cpp11BracedListStyle: false -DeriveLineEnding: true -DerivePointerAlignment: false FixNamespaceComments: false IncludeBlocks: Regroup IncludeCategories: @@ -63,35 +31,13 @@ IncludeCategories: Priority: 2 - Regex: '.*' Priority: 3 -IndentCaseLabels: false -IndentPPDirectives: None -IndentWidth: 4 -IndentWrappedFunctionNames: false KeepEmptyLinesAtTheStartOfBlocks: false MacroBlockBegin: "BEGIN_TEST_METHOD_PROPERTIES|BEGIN_MODULE|BEGIN_TEST_CLASS|BEGIN_TEST_METHOD" MacroBlockEnd: "END_TEST_METHOD_PROPERTIES|END_MODULE|END_TEST_CLASS|END_TEST_METHOD" -MaxEmptyLinesToKeep: 1 NamespaceIndentation: All PointerAlignment: Left ReflowComments: false SortIncludes: false -SortUsingDeclarations: true -SpaceAfterCStyleCast: false -SpaceAfterLogicalNot: false SpaceAfterTemplateKeyword: false -SpaceBeforeAssignmentOperators: true -SpaceBeforeCpp11BracedList: false -SpaceBeforeCtorInitializerColon: true -SpaceBeforeInheritanceColon: true -SpaceBeforeParens: ControlStatements -SpaceBeforeRangeBasedForLoopColon: true -SpaceInEmptyParentheses: false -SpacesBeforeTrailingComments: 1 SpacesInAngles: false -SpacesInCStyleCastParentheses: false SpacesInContainerLiterals: false -SpacesInParentheses: false -SpacesInSquareBrackets: false -Standard: Latest -TabWidth: 4 -UseTab: Never diff --git a/.config/dotnet-tools.json b/.config/dotnet-tools.json index e56b4d46c55..4479fcd4875 100644 --- a/.config/dotnet-tools.json +++ b/.config/dotnet-tools.json @@ -3,7 +3,7 @@ "isRoot": true, "tools": { "XamlStyler.Console": { - "version": "3.2206.4", + "version": "3.2311.2", "commands": [ "xstyler" ] diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000000..f76ffa6c2d3 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,15 @@ +# Commits mentioned in this file will automatically +# be skipped by GitHub's blame view. +# To use it with "git", run +# > git blame --ignore-revs-file ./.git-blame-ignore-revs + +# Reformatted the entire codebase +9b92986b49bed8cc41fde4d6ef080921c41e6d9e + +# Line Endings changes +cb7a76d96c92aa9fc7b03f69148fb0c75dff191d +5bbf61af8c8f12e6c05d07a696bf7d411b330a67 +d07546a6fef73fa4e1fb1c2f01535843d1fcc212 + +# UTF-8 BOM changes +ddae2a1d49d604487d3c963e5eacbeb73861d986 diff --git a/.github/ISSUE_TEMPLATE/Bug_Report.yml b/.github/ISSUE_TEMPLATE/Bug_Report.yml index 749d68e961a..517f2bdc7ea 100644 --- a/.github/ISSUE_TEMPLATE/Bug_Report.yml +++ b/.github/ISSUE_TEMPLATE/Bug_Report.yml @@ -14,7 +14,7 @@ body: label: Windows Terminal version placeholder: "1.7.3651.0" description: | - You can find the version in the about dialog, or by running `wt -v` at the commandline. + You can copy the version number from the About dialog. Open the About dialog by opening the menu with the "V" button (to the right of the "+" button that opens a new tab) and choosing About from the end of the list. validations: required: false diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index d131a7d1f11..d8735c42b4c 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,20 +1,14 @@ - ## Summary of the Pull Request - -## References +## References and Relevant Issues - -## PR Checklist -* [ ] Closes #xxx -* [ ] CLA signed. If not, go over [here](https://cla.opensource.microsoft.com/microsoft/Terminal) and sign the CLA -* [ ] Tests added/passed -* [ ] Documentation updated. If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx -* [ ] Schema updated. -* [ ] I've discussed this with core contributors already. If not checked, I'm ready to accept this work might be rejected in favor of a different grand plan. Issue number where discussion took place: #xxx - - ## Detailed Description of the Pull Request / Additional comments - ## Validation Steps Performed + +## PR Checklist +- [ ] Closes #xxx +- [ ] Tests added/passed +- [ ] Documentation updated + - If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/terminal) and link it here: #xxx +- [ ] Schema updated (if necessary) diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md index 2b1b5828597..4c40f7f02ac 100644 --- a/.github/actions/spelling/README.md +++ b/.github/actions/spelling/README.md @@ -6,6 +6,7 @@ File | Purpose | Format | Info [reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) [excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes) [patterns/*.txt](patterns/) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) +[candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns) [line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) [expect/*.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect) [advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice) diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md index 2c4c5443f8f..536c601aec2 100644 --- a/.github/actions/spelling/advice.md +++ b/.github/actions/spelling/advice.md @@ -6,8 +6,6 @@ By default the command suggestion will generate a file named based on your commit. That's generally ok as long as you add the file to your commit. Someone can reorganize it later. -:warning: The command is written for posix shells. If it doesn't work for you, you can manually _add_ (one word per line) / _remove_ items to `expect.txt` and the `excludes.txt` files. - If the listed items are: * ... **misspelled**, then please *correct* them instead of using the command. @@ -21,7 +19,7 @@ See the `README.md` in each directory for more information. :microscope: You can test your commits **without** *appending* to a PR by creating a new branch with that extra change and pushing it to your fork. The [check-spelling](https://github.com/marketplace/actions/check-spelling) action will run in response to your **push** -- it doesn't require an open pull request. By using such a branch, you can limit the number of typos your peers see you make. :wink: -
:clamp: If the flagged items are false positives +
If the flagged items are :exploding_head: false positives If items relate to a ... * binary file (or some other file you wouldn't want to check at all). @@ -36,7 +34,9 @@ https://www.regexplanet.com/advanced/perl/) yours before committing to verify it * well-formed pattern. - If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it, + If you can write a [pattern]( +https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns +) that would match it, try adding it to the `patterns.txt` file. Patterns are Perl 5 Regular Expressions - you can [test]( diff --git a/.github/actions/spelling/allow/allow.txt b/.github/actions/spelling/allow/allow.txt index 780c8e7ad98..413b47401be 100644 --- a/.github/actions/spelling/allow/allow.txt +++ b/.github/actions/spelling/allow/allow.txt @@ -1,29 +1,39 @@ +aci admins allcolors -apc Apc +apc +backpressure breadcrumb breadcrumbs bsd calt ccmp +ccon changelog clickable clig CMMI copyable +Counterintuitively +CtrlDToClose +CUI cybersecurity dalet -dcs Dcs +dcs +deselection dialytika +diffing dje downside downsides dze dzhe +DTo EDDB EDDC +Emacspeak Enum'd Fitt formattings @@ -35,17 +45,20 @@ gcc Geddy geeksforgeeks ghe +github gje godbolt hardcode hostname hostnames +https hyperlink hyperlinking hyperlinks iconify img inlined +issuetitle It'd kje libfuzzer @@ -56,9 +69,11 @@ Llast llvm Lmid locl +lol lorem Lorigin maxed +megathread minimalistic mkmk mnt @@ -68,10 +83,14 @@ noreply ogonek ok'd overlined +perlw pipeline postmodern Premultiplied +Powerline +powerline ptys +pwshw qof qps rclt @@ -80,10 +99,17 @@ reserialization reserialize reserializes rlig +rubyw runtimes +servicebus shcha +similaritytolerance slnt Sos +ssh +sustainability +stakeholders +sxn timeline timelines timestamped @@ -91,15 +117,22 @@ TLDR tokenizes tonos toolset +truthiness tshe +ubuntu +UEFI uiatextrange UIs und unregister versioned vsdevcmd +walkthrough +walkthroughs We'd +westus wildcards +workarounds XBox XTK YBox diff --git a/.github/actions/spelling/allow/apis.txt b/.github/actions/spelling/allow/apis.txt index 9e339c1c170..5c962358555 100644 --- a/.github/actions/spelling/allow/apis.txt +++ b/.github/actions/spelling/allow/apis.txt @@ -5,6 +5,7 @@ acl aclapi alignas alignof +allocconsolewithoptions APPLYTOSUBMENUS appxrecipe Bgra @@ -32,15 +33,14 @@ CYICON Dacl dataobject dcomp -DECARM -DECXCPR +debugbreak +delayimp DERR dlldata DNE DONTADDTORECENT DWMSBT DWMWA -DWMWA DWORDLONG endfor ENDSESSION @@ -61,10 +61,13 @@ GETDESKWALLPAPER GETHIGHCONTRAST GETKEYSTATE GETMOUSEHOVERTIME +GETTEXTLENGTH Hashtable hicon HIGHCONTRASTON HIGHCONTRASTW +hinternet +HINTERNET hotkeys href hrgn @@ -84,6 +87,7 @@ IConnection ICustom IDialog IDirect +Idn IExplorer IFACEMETHOD IFile @@ -96,7 +100,11 @@ IObject iosfwd IPackage IPeasant +<<<<<<< HEAD IService +======= +isa +>>>>>>> origin/main ISetup ISoftware isspace @@ -121,13 +129,21 @@ lsass LSHIFT LTGRAY MAINWINDOW +<<<<<<< HEAD MAPVIRTUALKEY +======= +MAXIMIZEBOX +>>>>>>> origin/main memchr memicmp MENUCOMMAND MENUDATA MENUINFO MENUITEMINFOW +<<<<<<< HEAD +======= +MINIMIZEBOX +>>>>>>> origin/main mmeapi MOUSELEAVE mov @@ -165,6 +181,7 @@ OUTLINETEXTMETRICW overridable PACL PAGESCROLL +PALLOC PATINVERT PEXPLICIT PICKFOLDERS @@ -175,11 +192,16 @@ rcx REGCLS RETURNCMD rfind +<<<<<<< HEAD +======= +RLO +>>>>>>> origin/main ROOTOWNER roundf RSHIFT SACL schandle +SEH semver serializer SETVERSION @@ -196,6 +218,7 @@ snprintf spsc sregex SRWLOC +srwlock SRWLOCK STDCPP STDMETHOD @@ -212,10 +235,12 @@ TABROW TASKBARCREATED TBPF THEMECHANGED +THICKFRAME tlg TME tmp tmpdir +tokeninfo tolower toupper TRACKMOUSEEVENT @@ -226,8 +251,10 @@ UFIELD ULARGE UOI UPDATEINIFILE +urlmon userenv USEROBJECTFLAGS +<<<<<<< HEAD versionf Viewbox VKKEYSCAN @@ -236,6 +263,18 @@ wcstoui wic WIC wincodec +======= +Vcpp +Viewbox +virtualalloc +vsnwprintf +wcsnlen +wcsstr +wcstoui +WDJ +winhttp +wininet +>>>>>>> origin/main winmain winsta winstamin @@ -243,6 +282,7 @@ wmemcmp wpc WSF wsregex +WWH wwinmain xchg XDocument @@ -268,3 +308,4 @@ xtree xutility YIcon YMax +zwstring diff --git a/.github/actions/spelling/allow/microsoft.txt b/.github/actions/spelling/allow/microsoft.txt index 1f4a28664f2..d14b0a75e3a 100644 --- a/.github/actions/spelling/allow/microsoft.txt +++ b/.github/actions/spelling/allow/microsoft.txt @@ -4,19 +4,23 @@ advapi altform altforms appendwttlogging +appinstaller appx appxbundle appxerror appxmanifest ATL +autoexec backplating bitmaps BOMs +COMPUTERNAME CPLs cpptools cppvsdbg CPRs cryptbase +cscript DACL DACLs defaultlib @@ -26,6 +30,7 @@ dotnetfeed DTDs DWINRT enablewttlogging +HOMESHARE Intelli IVisual libucrt @@ -33,6 +38,7 @@ libucrtd LKG LOCKFILE Lxss +makepri mfcribbon microsoft microsoftonline @@ -50,14 +56,20 @@ pgo pgosweep powerrename powershell +priconfig +PRIINFO propkey pscustomobject QWORD +rdpclip regedit +resfiles robocopy SACLs sdkddkver +segoe Shobjidl +sid Skype SRW sxs @@ -70,14 +82,17 @@ tdbuildteamid ucrt ucrtd unvirtualized +USERDNSDOMAIN VCRT vcruntime Virtualization visualstudio vscode VSTHRD +WINBASEAPI winsdkver wlk +wscript wslpath wtl wtt diff --git a/.github/actions/spelling/allow/names.txt b/.github/actions/spelling/allow/names.txt index c34ad1589b3..bd50c1a7766 100644 --- a/.github/actions/spelling/allow/names.txt +++ b/.github/actions/spelling/allow/names.txt @@ -1,11 +1,12 @@ Anup -austdi arkthur +austdi Ballmer bhoj Bhojwani Bluloco carlos +craigloewen dhowett Diviness dsafa @@ -23,6 +24,7 @@ Griese Hernan Howett Illhardt +Imms iquilezles italo jantari @@ -30,10 +32,11 @@ jerrysh Kaiyu kimwalisch KMehrain -KODELIFE Kodelife +KODELIFE Kourosh kowalczyk +leonardder leonmsft Lepilleur lhecker @@ -52,6 +55,7 @@ mikegr mikemaccana miloush miniksa +nguyen niksa nvaccess nvda @@ -59,6 +63,7 @@ oising oldnewthing opengl osgwiki +Ottosson pabhojwa panos paulcam @@ -77,16 +82,19 @@ sonpham stakx talo thereses +Thysell Walisch WDX Wellons +Westerman Wirt Wojciech XTK zadjii Zamor -Zamora zamora +Zamora +zljubisic Zoey zorio Zverovich diff --git a/.github/actions/spelling/candidate.patterns b/.github/actions/spelling/candidate.patterns new file mode 100644 index 00000000000..80f31f92e4f --- /dev/null +++ b/.github/actions/spelling/candidate.patterns @@ -0,0 +1,643 @@ +# marker to ignore all code on line +^.*/\* #no-spell-check-line \*/.*$ +# marker to ignore all code on line +^.*\bno-spell-check(?:-line|)(?:\s.*|)$ + +# https://cspell.org/configuration/document-settings/ +# cspell inline +^.*\b[Cc][Ss][Pp][Ee][Ll]{2}:\s*[Dd][Ii][Ss][Aa][Bb][Ll][Ee]-[Ll][Ii][Nn][Ee]\b + +# patch hunk comments +^\@\@ -\d+(?:,\d+|) \+\d+(?:,\d+|) \@\@ .* +# git index header +index (?:[0-9a-z]{7,40},|)[0-9a-z]{7,40}\.\.[0-9a-z]{7,40} + +# file permissions +['"`\s][-bcdLlpsw](?:[-r][-w][-Ssx]){2}[-r][-w][-SsTtx]\+?['"`\s] + +# css url wrappings +\burl\([^)]+\) + +# cid urls +(['"])cid:.*?\g{-1} + +# data url in parens +#\(data:(?:[^) ][^)]*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,})[^)]*\) + +# data url in quotes +([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1} +# data url +data:[-a-zA-Z=;:/0-9+]*,\S* + +# https/http/file urls +(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|] + +# mailto urls +mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,} + +# magnet urls +magnet:[?=:\w]+ + +# magnet urls +"magnet:[^"]+" + +# obs: +"obs:[^"]*" + +# The `\b` here means a break, it's the fancy way to handle urls, but it makes things harder to read +# In this examples content, I'm using a number of different ways to match things to show various approaches +# asciinema +\basciinema\.org/a/[0-9a-zA-Z]+ + +# asciinema v2 +^\[\d+\.\d+, "[io]", ".*"\]$ + +# apple +\bdeveloper\.apple\.com/[-\w?=/]+ +# Apple music +\bembed\.music\.apple\.com/fr/playlist/usr-share/[-\w.]+ + +# appveyor api +\bci\.appveyor\.com/api/projects/status/[0-9a-z]+ +# appveyor project +\bci\.appveyor\.com/project/(?:[^/\s"]*/){2}builds?/\d+/job/[0-9a-z]+ + +# Amazon + +# Amazon +\bamazon\.com/[-\w]+/(?:dp/[0-9A-Z]+|) +# AWS S3 +\b\w*\.s3[^.]*\.amazonaws\.com/[-\w/&#%_?:=]* +# AWS execute-api +\b[0-9a-z]{10}\.execute-api\.[-0-9a-z]+\.amazonaws\.com\b +# AWS ELB +\b\w+\.[-0-9a-z]+\.elb\.amazonaws\.com\b +# AWS SNS +\bsns\.[-0-9a-z]+.amazonaws\.com/[-\w/&#%_?:=]* +# AWS VPC +vpc-\w+ + +# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there +# YouTube url +\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]* +# YouTube music +\bmusic\.youtube\.com/youtubei/v1/browse(?:[?&]\w+=[-a-zA-Z0-9?&=_]*) +# YouTube tag +<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"] +# YouTube image +\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]* +# Google Accounts +\baccounts.google.com/[-_/?=.:;+%&0-9a-zA-Z]* +# Google Analytics +\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]* +# Google APIs +\bgoogleapis\.(?:com|dev)/[a-z]+/(?:v\d+/|)[a-z]+/[-@:./?=\w+|&]+ +# Google Storage +\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|) +# Google Calendar +\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+ +\w+\@group\.calendar\.google\.com\b +# Google DataStudio +\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|) +# The leading `/` here is as opposed to the `\b` above +# ... a short way to match `https://` or `http://` since most urls have one of those prefixes +# Google Docs +/docs\.google\.com/[a-z]+/(?:ccc\?key=\w+|(?:u/\d+|d/(?:e/|)[0-9a-zA-Z_-]+/)?(?:edit\?[-\w=#.]*|/\?[\w=&]*|)) +# Google Drive +\bdrive\.google\.com/(?:file/d/|open)[-0-9a-zA-Z_?=]* +# Google Groups +\bgroups\.google\.com(?:/[a-z]+/(?:#!|)[^/\s"]+)* +# Google Maps +\bmaps\.google\.com/maps\?[\w&;=]* +# Google themes +themes\.googleusercontent\.com/static/fonts/[^/\s"]+/v\d+/[^.]+. +# Google CDN +\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]* +# Goo.gl +/goo\.gl/[a-zA-Z0-9]+ +# Google Chrome Store +\bchrome\.google\.com/webstore/detail/[-\w]*(?:/\w*|) +# Google Books +\bgoogle\.(?:\w{2,4})/books(?:/\w+)*\?[-\w\d=&#.]* +# Google Fonts +\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]* +# Google Forms +\bforms\.gle/\w+ +# Google Scholar +\bscholar\.google\.com/citations\?user=[A-Za-z0-9_]+ +# Google Colab Research Drive +\bcolab\.research\.google\.com/drive/[-0-9a-zA-Z_?=]* + +# GitHub SHAs (api) +\bapi.github\.com/repos(?:/[^/\s"]+){3}/[0-9a-f]+\b +# GitHub SHAs (markdown) +(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|) +# GitHub SHAs +\bgithub\.com(?:/[^/\s"]+){2}[@#][0-9a-f]+\b +# GitHub SHA refs +\[([0-9a-f]+)\]\(https://(?:www\.|)github.com/[-\w]+/[-\w]+/commit/\g{-1}[0-9a-f]* +# GitHub wiki +\bgithub\.com/(?:[^/]+/){2}wiki/(?:(?:[^/]+/|)_history|[^/]+(?:/_compare|)/[0-9a-f.]{40,})\b +# githubusercontent +/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]* +# githubassets +\bgithubassets.com/[0-9a-f]+(?:[-/\w.]+) +# gist github +\bgist\.github\.com/[^/\s"]+/[0-9a-f]+ +# git.io +\bgit\.io/[0-9a-zA-Z]+ +# GitHub JSON +"node_id": "[-a-zA-Z=;:/0-9+_]*" +# Contributor +\[[^\]]+\]\(https://github\.com/[^/\s"]+/?\) +# GHSA +GHSA(?:-[0-9a-z]{4}){3} + +# GitLab commit +\bgitlab\.[^/\s"]*/\S+/\S+/commit/[0-9a-f]{7,16}#[0-9a-f]{40}\b +# GitLab merge requests +\bgitlab\.[^/\s"]*/\S+/\S+/-/merge_requests/\d+/diffs#[0-9a-f]{40}\b +# GitLab uploads +\bgitlab\.[^/\s"]*/uploads/[-a-zA-Z=;:/0-9+]* +# GitLab commits +\bgitlab\.[^/\s"]*/(?:[^/\s"]+/){2}commits?/[0-9a-f]+\b + +# binance +accounts\.binance\.com/[a-z/]*oauth/authorize\?[-0-9a-zA-Z&%]* + +# bitbucket diff +\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}diff(?:stat|)(?:/[^/\s"]+){2}:[0-9a-f]+ +# bitbucket repositories commits +\bapi\.bitbucket\.org/\d+\.\d+/repositories/(?:[^/\s"]+/){2}commits?/[0-9a-f]+ +# bitbucket commits +\bbitbucket\.org/(?:[^/\s"]+/){2}commits?/[0-9a-f]+ + +# bit.ly +\bbit\.ly/\w+ + +# bitrise +\bapp\.bitrise\.io/app/[0-9a-f]*/[\w.?=&]* + +# bootstrapcdn.com +\bbootstrapcdn\.com/[-./\w]+ + +# cdn.cloudflare.com +\bcdnjs\.cloudflare\.com/[./\w]+ + +# circleci +\bcircleci\.com/gh(?:/[^/\s"]+){1,5}.[a-z]+\?[-0-9a-zA-Z=&]+ + +# gitter +\bgitter\.im(?:/[^/\s"]+){2}\?at=[0-9a-f]+ + +# gravatar +\bgravatar\.com/avatar/[0-9a-f]+ + +# ibm +[a-z.]*ibm\.com/[-_#=:%!?~.\\/\d\w]* + +# imgur +\bimgur\.com/[^.]+ + +# Internet Archive +\barchive\.org/web/\d+/(?:[-\w.?,'/\\+&%$#_:]*) + +# discord +/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,} + +# Disqus +\bdisqus\.com/[-\w/%.()!?&=_]* + +# medium link +\blink\.medium\.com/[a-zA-Z0-9]+ +# medium +\bmedium\.com/\@?[^/\s"]+/[-\w]+ + +# microsoft +\b(?:https?://|)(?:(?:download\.visualstudio|docs|msdn2?|research)\.microsoft|blogs\.msdn)\.com/[-_a-zA-Z0-9()=./%]* +# powerbi +\bapp\.powerbi\.com/reportEmbed/[^"' ]* +# vs devops +\bvisualstudio.com(?::443|)/[-\w/?=%&.]* +# microsoft store +\bmicrosoft\.com/store/apps/\w+ + +# mvnrepository.com +\bmvnrepository\.com/[-0-9a-z./]+ + +# now.sh +/[0-9a-z-.]+\.now\.sh\b + +# oracle +\bdocs\.oracle\.com/[-0-9a-zA-Z./_?#&=]* + +# chromatic.com +/\S+.chromatic.com\S*[")] + +# codacy +\bapi\.codacy\.com/project/badge/Grade/[0-9a-f]+ + +# compai +\bcompai\.pub/v1/png/[0-9a-f]+ + +# mailgun api +\.api\.mailgun\.net/v3/domains/[0-9a-z]+\.mailgun.org/messages/[0-9a-zA-Z=@]* +# mailgun +\b[0-9a-z]+.mailgun.org + +# /message-id/ +/message-id/[-\w@./%]+ + +# Reddit +\breddit\.com/r/[/\w_]* + +# requestb.in +\brequestb\.in/[0-9a-z]+ + +# sched +\b[a-z0-9]+\.sched\.com\b + +# Slack url +slack://[a-zA-Z0-9?&=]+ +# Slack +\bslack\.com/[-0-9a-zA-Z/_~?&=.]* +# Slack edge +\bslack-edge\.com/[-a-zA-Z0-9?&=%./]+ +# Slack images +\bslack-imgs\.com/[-a-zA-Z0-9?&=%.]+ + +# shields.io +\bshields\.io/[-\w/%?=&.:+;,]* + +# stackexchange -- https://stackexchange.com/feeds/sites +\b(?:askubuntu|serverfault|stack(?:exchange|overflow)|superuser).com/(?:questions/\w+/[-\w]+|a/) + +# Sentry +[0-9a-f]{32}\@o\d+\.ingest\.sentry\.io\b + +# Twitter markdown +\[\@[^[/\]:]*?\]\(https://twitter.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)\) +# Twitter hashtag +\btwitter\.com/hashtag/[\w?_=&]* +# Twitter status +\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|) +# Twitter profile images +\btwimg\.com/profile_images/[_\w./]* +# Twitter media +\btwimg\.com/media/[-_\w./?=]* +# Twitter link shortened +\bt\.co/\w+ + +# facebook +\bfburl\.com/[0-9a-z_]+ +# facebook CDN +\bfbcdn\.net/[\w/.,]* +# facebook watch +\bfb\.watch/[0-9A-Za-z]+ + +# dropbox +\bdropbox\.com/sh?/[^/\s"]+/[-0-9A-Za-z_.%?=&;]+ + +# ipfs protocol +ipfs://[0-9a-zA-Z]{3,} +# ipfs url +/ipfs/[0-9a-zA-Z]{3,} + +# w3 +\bw3\.org/[-0-9a-zA-Z/#.]+ + +# loom +\bloom\.com/embed/[0-9a-f]+ + +# regex101 +\bregex101\.com/r/[^/\s"]+/\d+ + +# figma +\bfigma\.com/file(?:/[0-9a-zA-Z]+/)+ + +# freecodecamp.org +\bfreecodecamp\.org/[-\w/.]+ + +# image.tmdb.org +\bimage\.tmdb\.org/[/\w.]+ + +# mermaid +\bmermaid\.ink/img/[-\w]+|\bmermaid-js\.github\.io/mermaid-live-editor/#/edit/[-\w]+ + +# Wikipedia +\ben\.wikipedia\.org/wiki/[-\w%.#]+ + +# gitweb +[^"\s]+/gitweb/\S+;h=[0-9a-f]+ + +# HyperKitty lists +/archives/list/[^@/]+\@[^/\s"]*/message/[^/\s"]*/ + +# lists +/thread\.html/[^"\s]+ + +# list-management +\blist-manage\.com/subscribe(?:[?&](?:u|id)=[0-9a-f]+)+ + +# kubectl.kubernetes.io/last-applied-configuration +"kubectl.kubernetes.io/last-applied-configuration": ".*" + +# pgp +\bgnupg\.net/pks/lookup[?&=0-9a-zA-Z]* + +# Spotify +\bopen\.spotify\.com/embed/playlist/\w+ + +# Mastodon +\bmastodon\.[-a-z.]*/(?:media/|\@)[?&=0-9a-zA-Z_]* + +# scastie +\bscastie\.scala-lang\.org/[^/]+/\w+ + +# images.unsplash.com +\bimages\.unsplash\.com/(?:(?:flagged|reserve)/|)[-\w./%?=%&.;]+ + +# pastebin +\bpastebin\.com/[\w/]+ + +# heroku +\b\w+\.heroku\.com/source/archive/\w+ + +# quip +\b\w+\.quip\.com/\w+(?:(?:#|/issues/)\w+)? + +# badgen.net +\bbadgen\.net/badge/[^")\]'\s]+ + +# statuspage.io +\w+\.statuspage\.io\b + +# media.giphy.com +\bmedia\.giphy\.com/media/[^/]+/[\w.?&=]+ + +# tinyurl +\btinyurl\.com/\w+ + +# codepen +\bcodepen\.io/[\w/]+ + +# registry.npmjs.org +\bregistry\.npmjs\.org/(?:@[^/"']+/|)[^/"']+/-/[-\w@.]+ + +# getopts +\bgetopts\s+(?:"[^"]+"|'[^']+') + +# ANSI color codes +(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m + +# URL escaped characters +\%[0-9A-F][A-F](?=[A-Za-z]) +# lower URL escaped characters +\%[0-9a-f][a-f](?=[a-z]{2,}) +# IPv6 +#\b(?:[0-9a-fA-F]{0,4}:){3,7}[0-9a-fA-F]{0,4}\b + +# c99 hex digits (not the full format, just one I've seen) +0x[0-9a-fA-F](?:\.[0-9a-fA-F]*|)[pP] +# Punycode +\bxn--[-0-9a-z]+ +# sha +sha\d+:[0-9]*[a-f]{3,}[0-9a-f]* +# sha-... -- uses a fancy capture +(\\?['"]|")[0-9a-f]{40,}\g{-1} +# hex runs +\b[0-9a-fA-F]{16,}\b +# hex in url queries +=[0-9a-fA-F]*?(?:[A-F]{3,}|[a-f]{3,})[0-9a-fA-F]*?& +# ssh +(?:ssh-\S+|-nistp256) [-a-zA-Z=;:/0-9+]{12,} + +# PGP +\b(?:[0-9A-F]{4} ){9}[0-9A-F]{4}\b +# GPG keys +\b(?:[0-9A-F]{4} ){5}(?: [0-9A-F]{4}){5}\b +# Well known gpg keys +.well-known/openpgpkey/[\w./]+ + +# pki +-----BEGIN.*-----END + +# uuid: +\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b +# hex digits including css/html color classes: +(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b +# integrity +integrity=(['"])(?:\s*sha\d+-[-a-zA-Z=;:/0-9+]{40,})+\g{-1} + +# https://www.gnu.org/software/groff/manual/groff.html +# man troff content +\\f[BCIPR] +# '/" +\\\([ad]q + +# .desktop mime types +^MimeTypes?=.*$ +# .desktop localized entries +^[A-Z][a-z]+\[[a-z]+\]=.*$ +# Localized .desktop content +Name\[[^\]]+\]=.* + +# IServiceProvider / isAThing +\b(?:I|isA)(?=(?:[A-Z][a-z]{2,})+\b) + +# crypt +(['"])\$2[ayb]\$.{56}\g{-1} + +# scrypt / argon +\$(?:scrypt|argon\d+[di]*)\$\S+ + +# go.sum +\bh1:\S+ + +# scala modules +("[^"]+"\s*%%?\s*){2,3}"[^"]+" + +# Input to GitHub JSON +content: (['"])[-a-zA-Z=;:/0-9+]*=\g{-1} + +# This does not cover multiline strings, if your repository has them, +# you'll want to remove the `(?=.*?")` suffix. +# The `(?=.*?")` suffix should limit the false positives rate +# printf +#%(?:(?:(?:hh?|ll?|[jzt])?[diuoxn]|l?[cs]|L?[fega]|p)(?=[a-z]{2,})|(?:X|L?[FEGA]|p)(?=[a-zA-Z]{2,}))(?=[_a-zA-Z]+\b)(?!%)(?=.*?['"]) + +# Python string prefix / binary prefix +# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings +(?|m([|!/@#,;']).*?\g{-1}) + +# perl qr regex +(?|\(.*?\)|([|!/@#,;']).*?\g{-1}) + +# Go regular expressions +regexp?\.MustCompile\(`[^`]*`\) + +# regex choice +\(\?:[^)]+\|[^)]+\) + +# proto +^\s*(\w+)\s\g{-1} = + +# sed regular expressions +sed 's/(?:[^/]*?[a-zA-Z]{3,}[^/]*?/){2} + +# node packages +(["'])\@[^/'" ]+/[^/'" ]+\g{-1} + +# go install +go install(?:\s+[a-z]+\.[-@\w/.]+)+ + +# jetbrains schema https://youtrack.jetbrains.com/issue/RSRP-489571 +urn:shemas-jetbrains-com + +# kubernetes pod status lists +# https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#pod-phase +\w+(?:-\w+)+\s+\d+/\d+\s+(?:Running|Pending|Succeeded|Failed|Unknown)\s+ + +# kubectl - pods in CrashLoopBackOff +\w+-[0-9a-f]+-\w+\s+\d+/\d+\s+CrashLoopBackOff\s+ + +# kubernetes object suffix +-[0-9a-f]{10}-\w{5}\s + +# posthog secrets +([`'"])phc_[^"',]+\g{-1} + +# xcode + +# xcodeproject scenes +(?:Controller|destination|ID|id)="\w{3}-\w{2}-\w{3}" + +# xcode api botches +customObjectInstantitationMethod + +# configure flags +.* \| --\w{2,}.*?(?=\w+\s\w+) + +# font awesome classes +\.fa-[-a-z0-9]+ + +# bearer auth +(['"])Bear[e][r] .*?\g{-1} + +# basic auth +(['"])Basic [-a-zA-Z=;:/0-9+]{3,}\g{-1} + +# base64 encoded content +#([`'"])[-a-zA-Z=;:/0-9+]+=\g{-1} +# base64 encoded content in xml/sgml +>[-a-zA-Z=;:/0-9+]+== 0.0.22) +\\\w{2,}\{ + +# eslint +"varsIgnorePattern": ".+" + +# Windows short paths +[/\\][^/\\]{5,6}~\d{1,2}[/\\] + +# in check-spelling@v0.0.22+, printf markers aren't automatically consumed +# printf markers +#(?v# +(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_])) + +# Compiler flags (Unix, Java/Scala) +# Use if you have things like `-Pdocker` and want to treat them as `docker` +#(?:^|[\t ,>"'`=(])-(?:(?:J-|)[DPWXY]|[Llf])(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) + +# Compiler flags (Windows / PowerShell) +# This is a subset of the more general compiler flags pattern. +# It avoids matching `-Path` to prevent it from being treated as `ath` +#(?:^|[\t ,"'`=(])-(?:[DPL](?=[A-Z]{2,})|[WXYlf](?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,})) + +# Compiler flags (linker) +,-B + +# curl arguments +\b(?:\\n|)curl(?:\s+-[a-zA-Z]{1,2}\b)*(?:\s+-[a-zA-Z]{3,})(?:\s+-[a-zA-Z]+)* +# set arguments +\bset(?:\s+-[abefimouxE]{1,2})*\s+-[abefimouxE]{3,}(?:\s+-[abefimouxE]+)* +# tar arguments +\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+ +# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long... +\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b +# macOS temp folders +/var/folders/\w\w/[+\w]+/(?:T|-Caches-)/ diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt index b09b9a65f3b..dc0f987c299 100644 --- a/.github/actions/spelling/excludes.txt +++ b/.github/actions/spelling/excludes.txt @@ -1,36 +1,46 @@ # See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes -(?:(?i)\.png$) (?:^|/)(?i)COPYRIGHT (?:^|/)(?i)LICEN[CS]E +(?:^|/)3rdparty/ (?:^|/)dirs$ -(?:^|/)go\.mod$ (?:^|/)go\.sum$ (?:^|/)package(?:-lock|)\.json$ +(?:^|/)Pipfile$ +(?:^|/)pyproject.toml +(?:^|/)requirements(?:-dev|-doc|-test|)\.txt$ (?:^|/)sources(?:|\.dep)$ (?:^|/)vendor/ -ignore$ -SUMS$ +\.a$ \.ai$ +\.all-contributorsrc$ \.avi$ \.bmp$ \.bz2$ \.cer$ \.class$ +\.coveragerc$ \.crl$ \.crt$ \.csr$ \.dll$ +\.docx?$ +\.drawio$ \.DS_Store$ \.eot$ \.eps$ \.exe$ \.gif$ +\.git-blame-ignore-revs$ \.gitattributes$ +\.gitignore$ +\.gitkeep$ \.graffle$ \.gz$ \.icns$ \.ico$ +\.ipynb$ \.jar$ +\.jks$ \.jpeg$ \.jpg$ \.key$ @@ -38,41 +48,62 @@ SUMS$ \.lock$ \.map$ \.min\.. +\.mo$ \.mod$ \.mp3$ \.mp4$ +\.o$ \.ocf$ \.otf$ +\.p12$ +\.parquet$ \.pbxproj$ \.pdf$ \.pem$ +\.pfx$ \.png$ \.psd$ +\.pyc$ +\.pylintrc$ +\.qm$ \.runsettings$ +\.s$ \.sig$ \.so$ \.svg$ \.svgz$ +\.sys$ \.tar$ \.tgz$ +\.tiff?$ \.ttf$ +\.vcxproj\.filters$ \.vsdx$ \.wav$ +\.webm$ +\.webp$ \.woff \.xcf$ -\.xls +\.xlsx?$ \.xpm$ -\.yml$ +\.xz$ \.zip$ +^\.github/actions/spelling/ +^\Q.github/workflows/spelling.yml\E$ +^\Qbuild/config/release.gdnbaselines\E$ +^\Qsrc/host/ft_host/chafa.txt\E$ +^\Qsrc/host/ft_uia/run.bat\E$ +^\Qsrc/host/runft.bat\E$ +^\Qsrc/tools/lnkd/lnkd.bat\E$ +^\Qsrc/tools/pixels/pixels.bat\E$ ^build/config/ ^consolegit2gitfilters\.json$ ^dep/ -^doc/reference/master-sequence-list.csv$ +^doc/reference/master-sequence-list\.csv$ ^doc/reference/UTF8-torture-test\.txt$ +^doc/reference/windows-terminal-logo\.ans$ ^oss/ -^src/host/ft_uia/run\.bat$ -^src/host/runft\.bat$ -^src/host/runut\.bat$ +^samples/PixelShaders/Screenshots/ ^src/interactivity/onecore/BgfxEngine\. ^src/renderer/atlas/ ^src/renderer/wddmcon/WddmConRenderer\. @@ -83,19 +114,15 @@ SUMS$ ^src/terminal/parser/ft_fuzzwrapper/run\.bat$ ^src/terminal/parser/ut_parser/Base64Test.cpp$ ^src/terminal/parser/ut_parser/run\.bat$ +^src/tools/benchcat +^src/tools/ConsoleBench +^src/tools/integrity/dirs$ ^src/tools/integrity/packageuwp/ConsoleUWP\.appxSources$ -^src/tools/lnkd/lnkd\.bat$ -^src/tools/pixels/pixels\.bat$ +^src/tools/RenderingTests/main\.cpp$ ^src/tools/texttests/fira\.txt$ -^src/tools/U8U16Test/(?:fr|ru|zh)\.txt$ -^src/types/ut_types/UtilsTests.cpp$ -^tools/ReleaseEngineering/ServicingPipeline.ps1$ -^\.github/actions/spelling/ -^\.github/fabricbot.json$ -^\.gitignore$ -^\Q.github/workflows/spelling.yml\E$ -^\Qsamples/ConPTY/EchoCon/EchoCon/EchoCon.vcxproj.filters\E$ -^\Qsrc/host/exe/Host.EXE.vcxproj.filters\E$ -^\Qsrc/host/ft_host/chafa.txt\E$ -^\Qsrc/tools/closetest/CloseTest.vcxproj.filters\E$ -^\XamlStyler.json$ +^src/tools/U8U16Test/(?!en)..\. +^src/types/ColorFix\.cpp$ +^src/types/ut_types/UtilsTests\.cpp$ +^tools/ReleaseEngineering/ServicingPipeline\.ps1$ +^XamlStyler\.json$ +ignore$ diff --git a/.github/actions/spelling/expect/04cdb9b77d6827c0202f51acd4205b017015bfff.txt b/.github/actions/spelling/expect/04cdb9b77d6827c0202f51acd4205b017015bfff.txt new file mode 100644 index 00000000000..f117f5081da --- /dev/null +++ b/.github/actions/spelling/expect/04cdb9b77d6827c0202f51acd4205b017015bfff.txt @@ -0,0 +1,5 @@ +EOB +swrapped +wordi +wordiswrapped +wrappe diff --git a/.github/actions/spelling/expect/alphabet.txt b/.github/actions/spelling/expect/alphabet.txt index 7275b200cba..97180b72115 100644 --- a/.github/actions/spelling/expect/alphabet.txt +++ b/.github/actions/spelling/expect/alphabet.txt @@ -5,31 +5,30 @@ AAAAAABBBBBBCCC AAAAABBBBBBCCC abcd abcd -abcde -abcdef -ABCDEFG -ABCDEFGH ABCDEFGHIJ abcdefghijk ABCDEFGHIJKLMNO abcdefghijklmnop +ABCDEFGHIJKLMNOPQRS ABCDEFGHIJKLMNOPQRST -abcdefghijklmnopqrstuvwxyz ABCG ABE abf BBBBB BBBBBBBB -BBBBBBBBBBBBBBDDDD BBBBBCCC BBBBCCCCC BBGGRR -CCE +efg EFG +efgh EFGh +KLMNOQQQQQQQQQQ QQQQQQQQQQABCDEFGHIJ +QQQQQQQQQQABCDEFGHIJKLMNOPQRS QQQQQQQQQQABCDEFGHIJKLMNOPQRSTQQQQQQQQQ QQQQQQQQQQABCDEFGHIJKLMNOPQRSTQQQQQQQQQQ +QQQQQQQQQQABCDEFGHIJPQRST QQQQQQQQQQABCDEFGHIJPQRSTQQQQQQQQQQ qrstuvwxyz qwerty diff --git a/.github/actions/spelling/expect/expect.txt b/.github/actions/spelling/expect/expect.txt index 0c94916712e..5a1ab96a5b3 100644 --- a/.github/actions/spelling/expect/expect.txt +++ b/.github/actions/spelling/expect/expect.txt @@ -1,24 +1,20 @@ +aabbcc ABANDONFONT +abbcc ABCDEFGHIJKLMNOPQRSTUVWXY +ABCF abgr -abi +ABORTIFHUNG ACCESSTOKEN -acec -acf acidev ACIOSS ACover actctx ACTCTXW -activatable -ACTIVEBORDER -ACTIVECAPTION ADDALIAS ADDREF -addressof ADDSTRING ADDTOOL -AEnd AFew AFill AFX @@ -27,69 +23,56 @@ ahz AImpl AInplace ALIGNRIGHT -alloc allocing +allocs alpc ALTERNATENAME ALTF ALTNUMPAD ALWAYSTIP -amd +aml ansicpg ANSISYS ANSISYSRC ANSISYSSC -antialias +answerback antialiasing ANull anycpu APARTMENTTHREADED +APCA APCs -api APIENTRY apiset APPBARDATA appcontainer -APPICON appium -applet appletname applicationmodel APPLMODAL appmodel -apps APPWINDOW +APPXMANIFESTVERSION APrep apsect APSTUDIO archeologists -architected -argb -argc -args -argv +Argb ARRAYSIZE ARROWKEYS asan -ASBRST ASBSET -ASDF asdfghjkl ASetting ASingle -asm -asmv -asmx ASYNCWINDOWPOS atch ATest -attr ATTRCOLOR aumid Authenticode AUTOBUDDY AUTOCHECKBOX -autogenerated autohide AUTOHSCROLL automagically @@ -98,59 +81,48 @@ AUTORADIOBUTTON autoscrolling Autowrap AVerify -AVI -AVX awch -azzle -backend +azurecr backgrounded Backgrounder backgrounding -backport +backported backstory barbaz Batang -baz Bazz BBDM bbwe bcount -bcrypt bcx bcz BEFOREPARENT beginthread -bgcolor +benchcat bgfx bgidx Bgk -BGR -BGRA +bgra BHID bigobj +binlog binplace binplaced +binskim bitcoin bitcrazed -bitflag -bitmask +bitmasks BITOPERATION -bitset BKCOLOR BKGND Bksp -blog Blt BLUESCROLL -bmp BODGY BOLDFONT BOOLIFY bools -Bopomofo Borland -BOTTOMLEFT -BOTTOMRIGHT boutput boxheader BPBF @@ -158,47 +130,33 @@ bpp BPPF branchconfig brandings -BRK Browsable -bsearch Bspace -bstr BTNFACE -buf bufferout buffersize buflen -bugfix buildtransitive -BUILDURI burriter BValue -byref -bytearray bytebuffer cac cacafire -callee +CALLCONV capslock CARETBLINKINGENABLED CARRIAGERETURN cascadia -cassert -castsi catid cazamor CBash -cbegin cbiex CBN CBoolean cbt -cbuffer CCCBB -ccf cch CCHAR -cci CCmd ccolor CCom @@ -206,82 +164,57 @@ CComp CConsole CConversion CCRT -cctype -CDATA cdd -cdecl -CDeclaration CEdit CELLSIZE -cend -cerr cfae -Cfg cfie cfiex cfte CFuzz cgscrn chafa -changelist +changelists chaof charinfo -charset CHARSETINFO -chcp -checkbox -checkboxes +chcbpat chh -chk -chrono +chshdng CHT Cic -cjk -CLA -Clcompile +CLASSSTRING CLE cleartype CLICKACTIVE clickdown -climits clipbrd CLIPCHILDREN CLIPSIBLINGS -clocale closetest cloudconsole -cls +cloudvault CLSCTX -clsid +clsids CLUSTERMAP -cmath cmatrix cmder CMDEXT -Cmdlet -cmdline cmh CMOUSEBUTTONS -cmp -cmpeq -cmt +Cmts cmw -cmyk CNL -cnt -CNTRL -codebase +cnn Codeflow -codepage +codenav +codepages codepath -codepoint coinit -COLLECTIONURI colorizing COLORMATRIX -colorref -colorscheme -colorspaces +COLORREFs +colorschemes colorspec colortable colortbl @@ -289,33 +222,26 @@ colortest colortool COLR combaseapi -combobox comctl -COMDAT commandline commctrl commdlg COMMITID -compat componentization conapi conareainfo conattrs conbufferout -concat concfg conclnt +concretizations conddkrefs condrv conechokey conemu -config -configurability conhost -conhostv conime conimeinfo -conint conintegrity conintegrityuwp coninteractivitybase @@ -343,102 +269,72 @@ consoleinternal Consoleroot CONSOLESETFOREGROUND consoletaeftemplates -CONSOLEV +consoleuwp Consolewait CONSOLEWINDOWOWNER consrv -constexpr constexprable constness contentfiles conterm -CONTEXTMENU contsf contypes convarea conwinuserrefs -coord coordnew COPYCOLOR -copymode CORESYSTEM cotaskmem countof -cout CPG cpinfo CPINFOEX CPLINFO cplusplus -cpp CPPCORECHECK cppcorecheckrules -cpprest cpprestsdk cppwinrt -CProc cpx -crbegin CREATESCREENBUFFER CREATESTRUCT CREATESTRUCTW -cred -cref -crend -Crisman +createvpack +crisman CRLFs crloew -Crt CRTLIBS csbi csbiex -csharp CSHORT -CSIDL Cspace -csproj -Csr csrmsg CSRSS csrutil -cstdarg -cstddef -cstdio -cstdlib -cstr -cstring -cstyle -csv +CSTYLE CSwitch CTerminal CText -ctime ctl ctlseqs -Ctlv -ctor CTRLEVENT CTRLFREQUENCY CTRLKEYSHORTCUTS +Ctrls CTRLVOLUME -Ctx Ctxt -ctype CUF cupxy -curated CURRENTFONT currentmode CURRENTPAGE CURSORCOLOR CURSORSIZE CURSORTYPE +CUsers CUU Cwa cwch -cwchar -cwctype -cwd CXFRAME CXFULLSCREEN CXHSCROLL @@ -448,14 +344,11 @@ CXSIZE CXSMICON CXVIRTUALSCREEN CXVSCROLL -cxx CYFRAME CYFULLSCREEN -cygwin CYHSCROLL CYMIN CYPADDEDBORDER -CYRL CYSIZE CYSIZEFRAME CYSMICON @@ -463,13 +356,9 @@ CYVIRTUALSCREEN CYVSCROLL dai DATABLOCK -DATAVIEW -DATAW DBatch dbcs -DBCSCHAR DBCSFONT -dbg DBGALL DBGCHARS DBGFONTS @@ -477,7 +366,6 @@ DBGOUTPUT dbh dblclk DBlob -DBUILD DColor DCOLORVALUE dcommon @@ -494,38 +382,57 @@ debugtype DECAC DECALN DECANM +DECARM DECAUPSS DECAWM +DECBI DECBKM +DECCARA +DECCIR DECCKM +DECCKSR DECCOLM DECCRA DECCTR +DECDC DECDHL decdld +DECDMAC DECDWL +DECECM DECEKBD +DECERA +DECFI +DECFNK +DECFRA +DECIC DECID +DECINVM DECKPAM DECKPM DECKPNM DECLRMM -decls -declspec -decltype -declval +DECMSR DECNKM DECNRCM DECOM +decommit DECPCTERM DECPS +DECRARA DECRC DECREQTPARM DECRLM +DECRPM +DECRQCRA DECRQM +DECRQPSR DECRQSS DECRQTSR +DECRQUPSS +DECRSPS decrst +DECSACE DECSASD DECSC DECSCA @@ -534,18 +441,20 @@ DECSCPP DECSCUSR DECSED DECSEL +DECSERA DECSET DECSLPP DECSLRM DECSMKR DECSR +DECST DECSTBM +DECSTGLT DECSTR DECSWL +DECTABSR DECTCEM -Dedupe -deduplicate -deduplicated +DECXCPR DEFAPP DEFAULTBACKGROUND DEFAULTFOREGROUND @@ -560,67 +469,43 @@ DEFFACE defing DEFPUSHBUTTON defterm -deiconify DELAYLOAD -deletable DELETEONRELEASE -delims Delt -demoable depersist deprioritized -deps -deque -deref -deserialization -deserialize -deserialized -deserializer -deserializing +deserializers desktopwindowxamlsource -dest DESTINATIONNAME devicecode -Devops Dext DFactory DFF -DFMT -dhandler dialogbox -DINLINE directio DIRECTX -Dirs DISABLEDELAYEDEXPANSION DISABLENOSCROLL +DISPATCHNOTIFY DISPLAYATTRIBUTE DISPLAYATTRIBUTEPROPERTY DISPLAYCHANGE -distro +distros dlg DLGC -dll -dllexport DLLGETVERSIONPROC -dllimport dllinit dllmain DLLVERSIONINFO -DLOAD DLOOK -dmp -DOCTYPE DONTCARE doskey dotnet -doubleclick -downlevel DPG -dpi DPIAPI DPICHANGE DPICHANGED +DPIs dpix dpiy dpnx @@ -628,8 +513,6 @@ DRAWFRAME DRAWITEM DRAWITEMSTRUCT drcs -dropdown -DROPDOWNLIST DROPFILES drv DSBCAPS @@ -640,21 +523,16 @@ DSBVOLUME dsm dsound DSSCL -dst DSwap DTest -dtor DTTERM -DUMMYUNIONNAME -DUNICODE -DUNIT dup'ed dvi dwl DWLP dwm dwmapi -dword +DWORDs dwrite dxgi dxgidwm @@ -663,72 +541,51 @@ dxinterop dxsm dxttbmp Dyreen -eaf EASTEUROPE ECH echokey ecount ECpp -ect Edgium EDITKEYS EDITTEXT EDITUPDATE -edputil Efast +efghijklmn EHsc EINS EJO ELEMENTNOTAVAILABLE -elems -elif -elseif -emacs EMPTYBOX enabledelayedexpansion -endian -endif -endl -endlocal +ENDCAP endptr -endregion -ENQ -enqueuing ENTIREBUFFER -entrypoint +entrypoints ENU -enum ENUMLOGFONT ENUMLOGFONTEX enumranges -envvar -eol -eplace +EOK EPres EQU ERASEBKGND -errorlevel -ETB -etcoreapp +ESFCIB +esrp +ESV ETW -ETX EUDC EVENTID eventing -everytime evflags evt -ewdelete -exe execd -executables executionengine exemain EXETYPE +exeuwp exewin exitwin -expectedinput -expr EXPUNGECOMMANDHISTORY EXSTYLE EXTENDEDEDITKEY @@ -737,94 +594,67 @@ EXTTEXTOUT facename FACENODE FACESIZE -failfast FAILIFTHERE -fallthrough fastlink fcharset -fclose -fcntl -fdc -FDD +FDEA fdw +FECF +FEEF fesb +FFAF FFDE FFrom fgbg FGCOLOR -fgetc -fgetwc FGHIJ fgidx FGs FILEDESCRIPTION -fileno -filepath FILESUBTYPE FILESYSPATH -filesystem -FILETYPE -fileurl FILEW FILLATTR FILLCONSOLEOUTPUT FILTERONPASTE -finalizer FINDCASE FINDDLG FINDDOWN -FINDSTR FINDSTRINGEXACT FINDUP FIter FIXEDCONVERTED FIXEDFILEINFO Flg -flyout +flyouts fmodern fmtarg fmtid -FNV FOLDERID FONTCHANGE fontdlg FONTENUMDATA FONTENUMPROC FONTFACE -FONTFAMILY FONTHEIGHT -FONTINFO -fontlist +fontinfo FONTOK -FONTSIZE FONTSTRING -fonttbl FONTTYPE -FONTWEIGHT FONTWIDTH FONTWINDOW -fooo -forceinline FORCEOFFFEEDBACK FORCEONFEEDBACK -FORCEV -foreach -fprintf -framebuffer FRAMECHANGED fre -freopen -frontend +frontends fsanitize Fscreen -FSCTL FSINFOCLASS -fstream fte Ftm -fullscreen -fullwidth -func +Fullscreens +Fullwidth FUNCTIONCALL fuzzer fuzzmain @@ -833,13 +663,13 @@ fuzzwrapper fwdecl fwe fwlink -GAUSSIAN gci gcx -gcy gdi gdip gdirenderer +gdnbaselines +Geddy geopol GETALIAS GETALIASES @@ -848,8 +678,6 @@ GETALIASEXES GETALIASEXESLENGTH GETAUTOHIDEBAREX GETCARETWIDTH -getch -getchar GETCLIENTAREAANIMATION GETCOMMANDHISTORY GETCOMMANDHISTORYLENGTH @@ -865,26 +693,22 @@ GETDISPLAYSIZE GETDLGCODE GETDPISCALEDSIZE GETFONTINFO -GETFONTSIZE GETHARDWARESTATE GETHUNGAPPTIMEOUT GETICON GETITEMDATA GETKEYBOARDLAYOUTNAME +GETKEYSTATE GETLARGESTWINDOWSIZE GETLBTEXT -getline GETMINMAXINFO GETMOUSEINFO GETMOUSEVANISH GETNUMBEROFFONTS GETNUMBEROFINPUTEVENTS GETOBJECT -GETPOS GETSELECTIONINFO getset -GETSTATE -GETTEXT GETTEXTLEN GETTITLE GETWAITTOKILLSERVICETIMEOUT @@ -892,42 +716,31 @@ GETWAITTOKILLTIMEOUT GETWHEELSCROLLCHARACTERS GETWHEELSCROLLCHARS GETWHEELSCROLLLINES -getwriter GFEh Gfun gfx GGI GHIJK GHIJKL -GHIJKLM +gitcheckin gitfilters -github gitlab +gitmodules gle GLOBALFOCUS -globals GLYPHENTRY -gmail GMEM -GNUC Goldmine gonce -Google goutput -GPUs -grayscale GREENSCROLL Grehan -grep Greyscale gridline -groupbox gset gsl GTP -GTR guc -gui guidatom GValue GWL @@ -937,8 +750,6 @@ HABCDEF Hackathon HALTCOND HANGEUL -hardcoded -hardcodes hashalg HASSTRINGS hbitmap @@ -953,7 +764,6 @@ hdr HDROP hdrstop HEIGHTSCROLL -hfile hfont hfontresource hglobal @@ -961,12 +771,9 @@ hhh hhook hhx HIBYTE -HICON +hicon HIDEWINDOW -HIGHLIGHTTEXT hinst -HINSTANCE -Hirots HISTORYBUFS HISTORYNODUP HISTORYSIZE @@ -975,35 +782,28 @@ HIWORD HKCU hkey hkl -HKLM hlocal -HLS hlsl -HMENU +HMB +HMK hmod hmodule hmon -HMONITOR -horiz -HORZ +homoglyph hostable hostlib -HOTFIX +Hostx HPA +hpcon HPCON -hpj -hpp +hpen HPR HProvider HREDRAW hresult -hrottled -HRSRC hscroll -hsl hstr hstring -hsv HTBOTTOMLEFT HTBOTTOMRIGHT HTCAPTION @@ -1011,8 +811,6 @@ HTCLIENT HTLEFT HTMAXBUTTON HTMINBUTTON -html -HTMLTo HTRIGHT HTTOP HTTOPLEFT @@ -1022,171 +820,88 @@ HVP hwheel hwnd HWNDPARENT -hxx -IAccessibility -IAction -IApi -IApplication -IBase -ICache -icacls iccex -IChar -icket -ico -IComponent ICONERROR -Iconified ICONINFORMATION IConsole ICONSTOP -IControl ICONWARNING -ICore -IData IDCANCEL IDD -IDefault -IDesktop -IDevice -IDictionary IDISHWND -IDispatch -IDisposable idl idllib IDOK IDR idth -idx IDXGI -IDynamic IEnd IEnum -IEnumerable IFACEMETHODIMP -ifdef ification -ifndef -IFont -ifstream IGNOREEND IGNORELANGUAGE -IHigh IHosted iid -IInitialize -IInput -IInspectable -IInteract -IInteractivity IIo -IList -imagemagick -Imatch ime -Imm -IMouse IMPEXP -impl inbox inclusivity INCONTEXT INFOEX inheritcursor -inheritdoc inheritfrom -ini INITCOMMONCONTROLSEX INITDIALOG initguid INITMENU inkscape -inl INLINEPREFIX -inlines -INotify -inout -inplace inproc Inputkeyinfo INPUTPROCESSORPROFILE inputrc Inputreadhandledata INSERTMODE -intellisense INTERACTIVITYBASE INTERCEPTCOPYPASTE INTERNALNAME -interop -interoperability -inthread +Interner intsafe INVALIDARG INVALIDATERECT -IObservable -ioctl -iomanip -iostream -iot +Ioctl ipch -ipconfig -IPersist ipp IProperty IPSINK ipsp -IRaw -IRead -IReference -IRender -IScheme -ISelection IShell -IState -IStoryboard -isupper ISwap -iswdigit -iswspace -ISystem iterm itermcolors ITerminal -IText itf Ith -itoa IUI -IUia IUnknown ivalid -IValue -IVector -IWait -IWeb -IWin -IWindow -IXaml -IXMP +IWIC IXP jconcpp +JLO JOBOBJECT JOBOBJECTINFOCLASS -jpe -jpeg -jpg JPN -json -jsonc jsoncpp +Jsons jsprovider jumplist KAttrs kawa Kazu kazum -kbd kcub kcud kcuf @@ -1194,17 +909,14 @@ kcuu kernelbase kernelbasestaging KEYBDINPUT -keybinding keychord -keydown -keyevent +keydowns KEYFIRST KEYLAST -keymap Keymapping keyscan keystate -keyup +keyups khome KILLACTIVE KILLFOCUS @@ -1213,88 +925,73 @@ KLF KLMNO KLMNOPQRST KLMNOPQRSTQQQQQ +KLMNOPQRSTUVWXY +KLMNOPQRSTY KOK KPRIORITY KVM langid LANGUAGELIST lasterror -lastexitcode -LATN +LASTEXITCODE LAYOUTRTL +lbl LBN -LBound LBUTTON LBUTTONDBLCLK LBUTTONDOWN LBUTTONUP lcb +lci LCONTROL LCTRL lcx LEFTALIGN -LEFTSHIFT -len -lhs libpopcnt libsancov libtickit +licate LIMITTEXT LINEDOWN LINESELECTION LINEWRAP LINKERRCAP LINKERROR -linkpath linputfile -Linq -linux -listbox -listproperties listptr listptrsize lld llx LMENU -LMNOP -lnk lnkd lnkfile LNM LOADONCALL -loadu LOBYTE localappdata -localhost locsrc Loewen +LOGBRUSH LOGFONT LOGFONTA LOGFONTW logissue -lowercased +losslessly loword lparam -LPBYTE -LPCCH lpch -LPCOLORREF LPCPLINFO LPCREATESTRUCT lpcs -LPCSTR LPCTSTR -LPCWSTR lpdata LPDBLIST lpdis LPDRAWITEMSTRUCT lpdw -LPDWORD lpelfe lpfn LPFNADDPROPSHEETPAGE -LPINT lpl LPMEASUREITEMSTRUCT LPMINMAXINFO @@ -1304,18 +1001,15 @@ LPNEWCPLINFOA LPNEWCPLINFOW LPNMHDR lpntme -LPPOINT LPPROC LPPROPSHEETPAGE LPPSHNOTIFY lprc -LPRECT lpstr lpsz LPTSTR LPTTFONTLIST lpv -LPVOID LPW LPWCH lpwfx @@ -1323,17 +1017,14 @@ LPWINDOWPOS lpwpos lpwstr LRESULT -lru lsb lsconfig -lss lstatus lstrcmp lstrcmpi LTEXT LTLTLTLTL -ltrim -ltype +ltsc LUID luma lval @@ -1342,7 +1033,6 @@ LVERTICAL LWA LWIN lwkmvj -mailto majorly makeappx MAKEINTRESOURCE @@ -1351,12 +1041,11 @@ MAKELANGID MAKELONG MAKELPARAM MAKELRESULT -malloc MAPBITMAP +MAPVIRTUALKEY MAPVK MAXDIMENSTRING maxing -MAXLENGTH MAXSHORT maxval maxversiontested @@ -1372,35 +1061,26 @@ MDs MEASUREITEM megamix memallocator -memcmp -memcpy -memmove -memset +meme MENUCHAR MENUCONTROL MENUDROPALIGNMENT -MENUITEM MENUITEMINFO MENUSELECT -Mersenne messageext -metadata metaproj +microsoftpublicsymbols midl mii MIIM milli -mimetype mincore mindbogglingly -mingw -minimizeall minkernel MINMAXINFO minwin minwindef Mip -mkdir MMBB mmcc MMCPL @@ -1408,65 +1088,47 @@ mmsystem MNC MNOPQ MNOPQR +MNOPQRSTUVWXY MODALFRAME MODERNCORE MONITORINFO MONITORINFOEXW MONITORINFOF -monospaced -monostate MOUSEACTIVATE MOUSEFIRST MOUSEHWHEEL -MOUSEMOVE -mousewheel -movemask MOVESTART msb -msbuild msctf msctls msdata -msdn +MSDL msft MSGCMDLINEF MSGF MSGFILTER MSGFLG MSGMARKMODE -MSGS MSGSCROLLMODE MSGSELECTMODE msiexec MSIL msix msrc -msvcrt MSVCRTD -msys MTSM -mui -Mul -multiline -munged munges +Munged murmurhash -mutex -mutexes muxes myapplet +mybranch mydir MYMAX Mypair Myval NAMELENGTH -nameof -namespace -namespaced namestream -nano -natvis -nbsp NCCALCSIZE NCCREATE NCLBUTTONDOWN @@ -1478,9 +1140,9 @@ NCRBUTTONDOWN NCRBUTTONUP NCXBUTTONDOWN NCXBUTTONUP -NDEBUG NEL -NEQ +nerf +nerror netcoreapp netstandard NEWCPLINFO @@ -1495,21 +1157,16 @@ NEWTEXTMETRICEX Newtonsoft NEXTLINE nfe -Nls NLSMODE nnn NOACTIVATE NOAPPLYNOW NOCLIP -NOCOLOR NOCOMM NOCONTEXTHELP NOCOPYBITS -nodiscard NODUP -noexcept -NOHELP -noinline +noexcepts NOINTEGRALHEIGHT NOINTERFACE NOLINKINFO @@ -1520,18 +1177,15 @@ NOMOVE NONALERT nonbreaking nonclient -NONCONST NONINFRINGEMENT NONPREROTATED nonspace NOOWNERZORDER NOPAINT -NOPQRST noprofile NOREDRAW NOREMOVE NOREPOSITION -noreturn NORMALDISPLAY NOSCRATCH NOSEARCH @@ -1540,23 +1194,16 @@ NOSENDCHANGING NOSIZE NOSNAPSHOT NOTHOUSANDS -nothrow NOTICKS +NOTIMEOUTIFNOTHUNG NOTIMPL -notin -NOTNULL NOTOPMOST NOTRACK NOTSUPPORTED nouicompat nounihan -NOUPDATE -novtable -nowait NOYIELD NOZORDER -NPM -npos nrcs NSTATUS ntapi @@ -1568,43 +1215,35 @@ ntdll ntifs ntlpcapi ntm +nto ntrtl ntstatus -ntsubauth NTSYSCALLAPI nttree nturtl ntuser NTVDM ntverp -NTWIN -nuget nugetversions -nullability nullness nullonfailure -nullopt -nullptr -NULs +nullopts numlock -numpad NUMSCROLL +NUnit nupkg -nuspec NVIDIA -NVR OACR -oauth objbase ocolor -odl -oem oemcp OEMFONT OEMFORMAT +OEMs offboarded OLEAUT OLECHAR +onebranch onecore ONECOREBASE ONECORESDKTOOLS @@ -1615,46 +1254,31 @@ onecoreuuid ONECOREWINDOWS onehalf oneseq -ONLCR openbash opencode opencon openconsole openconsoleproxy -OPENIF -OPENLINK openps openvt ORIGINALFILENAME +orking osc -OSCBG -OSCCT -OSCFG -OSCRCC -OSCSCB -OSCSCC -OSCWT OSDEPENDSROOT OSG OSGENG -osign oss -ostream -ostringstream -ouicompat -OUnter outdir -outfile -Outof OUTOFCONTEXT -OUTOFMEMORY Outptr outstr OVERLAPPEDWINDOW OWNDC +owneralias OWNERDRAWFIXED packagename packageuwp +PACKAGEVERSIONNUMBER PACKCOORD PACKVERSION pagedown @@ -1663,15 +1287,12 @@ PAINTPARAMS PAINTSTRUCT PALPC pankaj -params parentable parms -passthrough PATCOPY pathcch +Pathto PATTERNID -PBOOL -PBYTE pcat pcb pcch @@ -1680,34 +1301,28 @@ PCCONSOLE PCD pcg pch -PCHAR PCIDLIST PCIS -PCLIENT PCLONG -PCOBJECT pcon PCONSOLE PCONSOLEENDTASK PCONSOLESETFOREGROUND PCONSOLEWINDOWOWNER pcoord -pcs pcshell PCSHORT PCSR PCSTR -PCUNICODE PCWCH PCWCHAR PCWSTR pda -pdb -pdbonly +pdbs pdbstr +PDPs pdtobj pdw -PDWORD pdx peb PEMAGIC @@ -1722,16 +1337,14 @@ PFONT PFONTENUMDATA PFS pgd -pgdn +pgomgr PGONu pguid -pgup -PHANDLE phhook phwnd -pid pidl PIDLIST +pids pii pinvoke pipename @@ -1739,37 +1352,25 @@ pipestr pixelheight PIXELSLIST PJOBOBJECT -pkey -placeholders platforming playsound -plist ploc -PLOC ploca -PLOCA plocm -PLOCM PLOGICAL -plugin -PMv -png pnm PNMLINK pntm -PNTSTATUS POBJECT Podcast POINTSLIST +policheck POLYTEXTW -popd -POPF poppack -popup POPUPATTR +popups PORFLG positionals -posix POSTCHARBREAKS POSX POSXSCROLL @@ -1778,9 +1379,7 @@ PPEB ppf ppguid ppidl -pplx PPROC -PPROCESS ppropvar ppsi ppsl @@ -1789,19 +1388,11 @@ ppsz ppv ppwch PQRST -pragma prc prealigned -prebuilt -precomp prect prefast -prefilled -prefs -preinstalled -PRELOAD -PREMULTIPLIED -prepopulated +preflighting presorted PREVENTPINNING PREVIEWLABEL @@ -1809,14 +1400,11 @@ PREVIEWWINDOW PREVLINE prg pri -printf prioritization processenv processhost PROCESSINFOCLASS -procs -Progman -proj +PRODEXT PROPERTYID PROPERTYKEY PROPERTYVAL @@ -1830,20 +1418,16 @@ propvar propvariant propvarutil psa -psd PSECURITY -pseudocode pseudoconsole pseudoterminal psh pshn PSHNOTIFY -PSHORT pshpack PSINGLE psl psldl -psm PSNRET PSobject psp @@ -1852,55 +1436,38 @@ psr PSTR psz ptch -ptr -ptrdiff ptsz PTYIn PUCHAR -PULONG -PUNICODE -pushd -putchar -putwchar -PVOID pwch -PWCHAR PWDDMCONSOLECONTEXT -PWORD pws -pwsh pwstr pwsz pythonw -qos -QRSTU -qsort -queryable +Qaabbcc QUERYOPEN QUESTIONMARK quickedit QUZ QWER +Qxxxxxxxxxxxxxxx qzmp RAII RALT rasterbar rasterfont rasterization -rawinput RAWPATH raytracers razzlerc rbar -rbegin RBUTTON RBUTTONDBLCLK RBUTTONDOWN RBUTTONUP rcch -RCDATA rcelms -rcl rclsid RCOA RCOCA @@ -1908,129 +1475,101 @@ RCOCW RCONTROL RCOW rcv -rdbuf readback READCONSOLE READCONSOLEOUTPUT READCONSOLEOUTPUTSTRING -Readline -readme READMODE -readonly -READWRITE -realloc +reallocs reamapping -rects +rectread redef redefinable Redir -redirector redist REDSCROLL -refactor -refactoring REFCLSID -refcount REFGUID REFIID REFPROPERTYKEY -regex REGISTEROS REGISTERVDM regkey REGSTR -reingest RELBINPATH remoting renamer renderengine rendersize -reparent +reparented reparenting replatformed Replymessage repositorypath Requiresx +rerasterize rescap Resequence RESETCONTENT resheader -resizable resmimetype +resultmacros resw resx -retval rfa rfid rftp -rgb -rgba -RGBCOLOR rgbi +rgbs rgci rgfae rgfte -rgi rgn rgp rgpwsz rgrc -rgs -rgui rgw -rgwch -rhs RIGHTALIGN RIGHTBUTTON riid -Rike -RIPMSG RIS -RMENU -rng roadmap robomac -roundtrip +rosetta RRF +rrr RRRGGGBB rsas rtcore RTEXT -rtf RTFTo -Rtl RTLREADING Rtn -rtrim -RTTI ruleset runas RUNDLL runformat runft RUNFULLSCREEN +runfuzz runsettings -runtests +runtest runtimeclass runuia runut runxamlformat -rvalue RVERTICAL rvpa RWIN rxvt -safearray -SAFECAST safemath -sapi sba SBCS SBCSDBCS sbi sbiex -sbold -scancode +sbom +scancodes scanline schemename SCL @@ -2039,12 +1578,9 @@ SCRBUFSIZE screenbuffer SCREENBUFFERINFO screeninfo -screenshot +screenshots scriptload -Scrollable scrollback -scrollbar -Scroller SCROLLFORWARD SCROLLINFO scrolllock @@ -2053,32 +1589,24 @@ SCROLLSCALE SCROLLSCREENBUFFER scursor sddl -sdeleted -sdk SDKDDK -searchbox securityappcontainer segfault SELCHANGE SELECTALL -selectany SELECTEDFONT SELECTSTRING Selfhosters -SERIALIZERS SERVERDLL SETACTIVE SETBUDDYINT -SETCOLOR setcp SETCURSEL SETCURSOR SETCURSORINFO SETCURSORPOSITION SETDISPLAYMODE -setfill SETFOCUS -SETFONT SETFOREGROUND SETHARDWARESTATE SETHOTKEY @@ -2087,30 +1615,25 @@ setintegritylevel SETITEMDATA SETITEMHEIGHT SETKEYSHORTCUTS -setlocal -setlocale SETMENUCLOSE -setmode SETNUMBEROFCOMMANDS SETOS SETPALETTE -SETPOS SETRANGE SETSCREENBUFFERSIZE SETSEL SETTEXTATTRIBUTE SETTINGCHANGE -SETTITLE -setw +setvariable Setwindow SETWINDOWINFO SFGAO SFGAOF sfi SFINAE +SFolder SFUI sgr -SHANDLE SHCo shcore shellapi @@ -2118,9 +1641,7 @@ shellex shellscalingapi SHFILEINFO SHGFI -SHGFP SHIFTJIS -Shl shlguid shlobj shlwapi @@ -2133,16 +1654,15 @@ SHOWNA SHOWNOACTIVATE SHOWNORMAL SHOWWINDOW -SHRT sidebyside SIF SIGDN +Signtool SINGLEFLAG SINGLETHREADED siup sixel SIZEBOX -sizeof SIZESCROLL SKIPFONT SKIPOWNPROCESS @@ -2157,32 +1677,22 @@ slpit SManifest SMARTQUOTE SMTO -SND SOLIDBOX Solutiondir somefile -SOURCEBRANCH sourced -spammy -spand -sprintf -srand -src SRCCODEPAGE SRCCOPY SRCINVERT srcsrv SRCSRVTRG srctool -sre srect srv srvinit srvpipe ssa -ssh -sstream -standalone +startdir STARTF STARTUPINFO STARTUPINFOEX @@ -2191,67 +1701,41 @@ STARTUPINFOW STARTWPARMS STARTWPARMSA STARTWPARMSW -Statusline +stb stdafx STDAPI stdc -stdcall stdcpp -stderr -stdexcept -stdin -STDIO +STDEXT STDMETHODCALLTYPE STDMETHODIMP -stdout STGM -stl -stoi -stol -stoul -stoutapot -Stri -strikethrough -stringstream +Stringable STRINGTABLE -strlen -strrev strsafe -strtok -structs STUBHEAD STUVWX -STX stylecop SUA subcompartment -subfolder -subkey +subkeys SUBLANG -submenu subresource -subspan -substr subsystemconsole subsystemwindows -suiteless -svg swapchain swapchainpanel -swappable SWMR SWP -swprintf SYMED -symlink SYNCPAINT -sys syscalls SYSCHAR SYSCOMMAND SYSDEADCHAR SYSKEYDOWN SYSKEYUP +SYSLIB SYSLINK SYSMENU sysparams @@ -2265,11 +1749,7 @@ TARG targetentrypoint TARGETLIBS TARGETNAME -targetnametoken -targetsize targetver -taskbar -tbar TBase tbc tbi @@ -2278,47 +1758,36 @@ TBM tchar TCHFORMAT TCI -tcome -tcommandline tcommands +tdbuild +Tdd TDelegated TDP -TEAMPROJECT tearoff Teb +Techo tellp -telnet -telnetd -templated teraflop terminalcore +terminalinput +terminalrenderdata TERMINALSCROLLING terminfo TEs -testapp -testbuildplatform testcon testd -testdlls -testenv +testenvs testlab testlist testmd -testmode testname -testnameprefix TESTNULL testpass testpasses -testtestabc -testtesttesttesttest -testtimeout TEXCOORD -texel TExpected textattribute TEXTATTRIBUTEID -textbox textboxes textbuffer TEXTINCLUDE @@ -2326,56 +1795,41 @@ textinfo TEXTMETRIC TEXTMETRICW textmode +texttests TFCAT -tfoo TFunction -tga -threadpool THUMBPOSITION THUMBTRACK TIcon -tif tilunittests -titlebar +titlebars TITLEISLINKNAME TJson TLambda TLDP TLEN -Tlgdata TMAE TMPF TMult tmultiple -tmux -todo +TODOs tofrom tokenhelpers -tokenized -tokenizing -toolbar +toolbars TOOLINFO -tooltip TOOLWINDOW TOPDOWNDIB -TOPLEFT -toplevel -TOPRIGHT TOpt tosign touchpad -towlower -towupper Tpp Tpqrst -tprivapi tracelog tracelogging -traceloggingprovider +traceviewpp trackbar TRACKCOMPOSITION trackpad -transcoder transitioning Trd TREX @@ -2384,99 +1838,73 @@ triaging TRIANGLESTRIP Tribool TRIMZEROHEADINGS -truetype trx +tsa tsattrs -tsf +tsgr +tsm TStr TSTRFORMAT TSub TTBITMAP -ttf TTFONT TTFONTLIST -tthe -tthis TTM TTo -TVPP +tvpp +tvtseq Txtev typechecked -typechecking -typedef -typeid -typeinfo -typelib -typename -typeof -typeparam TYUI UAC uap uapadmin UAX -ubuntu +UBool ucd uch -UCHAR -ucs +UChars udk -UDM uer -uget +UError uia UIACCESS uiacore uiautomationcore -Uid uielem UIELEMENTENABLEDONLY -uint -uintptr +UINTs +ul ulcch -ulong -umul -umulh +uld +uldb +uldash +ulwave Unadvise unattend -uncomment UNCPRIORITY -undef -Unescape unexpand -Unfocus unhighlighting unhosted -unicode -UNICODESTRING UNICODETEXT UNICRT -uninit -uninitialize -uninstall Unintense Uniscribe -unittest unittesting +unittests unk unknwn -unmark UNORM unparseable -unpause unregistering -untests untextured -untimes UPDATEDISPLAY UPDOWN UPKEY UPSS -upvote -uri -url -urlencoded -USASCII +upss +uregex +URegular usebackq USECALLBACK USECOLOR @@ -2487,44 +1915,30 @@ USEFILLATTRIBUTE USEGLYPHCHARS USEHICON USEPOSITION -userbase USERDATA userdpiapi -username Userp userprivapi -userprofile USERSRV USESHOWWINDOW USESIZE USESTDHANDLES -ushort usp USRDLL -utf -utils +utext utr -uuid -uuidof -uuidv -UVWX UVWXY +UVWXYZ uwa uwp uxtheme -vals Vanara vararg vclib -Vcount -vcpkg vcprintf vcxitems -vcxproj -vec -vectorized +vectorize VERCTRL -versioning VERTBAR VFT vga @@ -2533,24 +1947,25 @@ viewkind viewports Virt VIRTTERM -Virtualizing vkey +VKKEYSCAN VMs VPA -VPATH +vpack +vpackdirectory +VPACKMANIFESTDIRECTORY VPR -VProc -VRaw VREDRAW vsc +vsconfig vscprintf VSCROLL vsdevshell +vse vsinfo -vsnprintf +vsinstalldir vso vspath -vsprintf VSTAMP vstest VSTS @@ -2570,58 +1985,42 @@ VTRGBTo vtseq vtterm vttest -VWX -waaay waitable WANSUNG WANTARROWS WANTTAB wapproj -wav WAVEFORMATEX wbuilder wch -wchar +wchars WCIA WCIW -WClass -wcout -wcschr -wcscmp -wcscpy WCSHELPER wcsicmp -wcslen -wcsnicmp -wcsrchr wcsrev -wcstod -wcstoul wddm wddmcon WDDMCONSOLECONTEXT wdm webpage -website -websocket +websites wekyb -WEOF wex wextest wextestclass WFill wfopen WHelper -whitelisting +wic WIDTHSCROLL Widthx -Wiki -Wikipedia wil WImpl WINAPI winbase winbasep +wincodec wincon winconp winconpty @@ -2631,14 +2030,11 @@ wincontypes WINCORE windbg WINDEF -WINDIR windll WINDOWALPHA -Windowbuffer windowdpiapi WINDOWEDGE windowext -WINDOWFRAME windowime WINDOWINFO windowio @@ -2652,20 +2048,21 @@ windowrect windowsapp windowsinternalstring WINDOWSIZE +windowsshell windowsterminal windowsx -WINDOWTEXT windowtheme -WINDOWTITLE winevent wingdi winget +wingetcreate WINIDE winioctl winmd winmeta winmgr winmm +WINMSAPP winnt Winperf WInplace @@ -2684,31 +2081,27 @@ wnd WNDALLOC WNDCLASS WNDCLASSEX +WNDCLASSEXW WNDCLASSW Wndproc WNegative WNull wnwb workarea -workaround -workflow -WORKITEM -wostream WOutside WOWARM WOWx wparam WPartial wpf +wpfdotnet WPR WPrep WPresent -wprintf wprp wprpi wregex writeback -writechar WRITECONSOLE WRITECONSOLEINPUT WRITECONSOLEOUTPUT @@ -2720,11 +2113,8 @@ WRunoff WScript wsl WSLENV -wsmatch -wss wstr -wstring -wstringstream +wstrings wsz wtd WTest @@ -2745,9 +2135,8 @@ wyhash wymix wyr xact -xaml Xamlmeta -xargs +xamls xaz xbf xbutton @@ -2763,6 +2152,7 @@ xdy XEncoding xes xff +XFG XFile XFORM xin @@ -2771,19 +2161,12 @@ xinxinchaof XManifest XMath XMFLOAT -xml -xmlns -xor xorg -XPosition XResource -xsd xsi -xsize xstyler XSubstantial xtended -xterm XTest XTPOPSGR XTPUSHSGR @@ -2791,24 +2174,22 @@ xtr XTWINOPS xunit xutr -xvalue XVIRTUALSCREEN XWalk yact -YAML YCast YCENTER YCount -YDPI -yml -YOffset -YPosition -YSize +YLimit YSubstantial YVIRTUALSCREEN YWalk +Zab +zabcd +Zabcdefghijklmn Zabcdefghijklmnopqrstuvwxyz ZCmd ZCtrl -zsh zxcvbnm +ZYXWVU +ZYXWVUTd diff --git a/.github/actions/spelling/expect/web.txt b/.github/actions/spelling/expect/web.txt index 47ce4058d24..39e8cc78d55 100644 --- a/.github/actions/spelling/expect/web.txt +++ b/.github/actions/spelling/expect/web.txt @@ -1,8 +1,6 @@ -http -www -WCAG winui appshellintegration mdtauk gfycat Guake +xkcd diff --git a/.github/actions/spelling/line_forbidden.patterns b/.github/actions/spelling/line_forbidden.patterns index 0120c775a60..41cf9272ed2 100644 --- a/.github/actions/spelling/line_forbidden.patterns +++ b/.github/actions/spelling/line_forbidden.patterns @@ -1,36 +1,119 @@ +# reject `m_data` as VxWorks defined it and that breaks things if it's used elsewhere +# see [fprime](https://github.com/nasa/fprime/commit/d589f0a25c59ea9a800d851ea84c2f5df02fb529) +# and [Qt](https://github.com/qtproject/qt-solutions/blame/fb7bc42bfcc578ff3fa3b9ca21a41e96eb37c1c7/qtscriptclassic/src/qscriptbuffer_p.h#L46) +# \bm_data\b + +# If you have a framework that uses `it()` for testing and `fit()` for debugging a specific test, +# you might not want to check in code where you were debugging w/ `fit()`, in which case, you might want +# to use this: +#\bfit\( + +# s.b. anymore +\bany more[,.] + # s.b. GitHub -\bGithub\b +(?)[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}(?:[}"]|"'`=(])-(?:D(?=[A-Z])|[WX]|f(?=[ms]))(?=[A-Z]{2,}|[A-Z][a-z]|[a-z]{2,}) + +# hit-count: 60 file-count: 35 +# version suffix v# +(?:(?<=[A-Z]{2})V|(?<=[a-z]{2}|[A-Z]{2})v)\d+(?:\b|(?=[a-zA-Z_])) + +# hit-count: 2 file-count: 2 +# This does not cover multiline strings, if your repository has them, +# you'll want to remove the `(?=.*?")` suffix. +# The `(?=.*?")` suffix should limit the false positives rate +# printf +%(?:s)(?!ize)(?=[a-z]{2,}) + +# hit-count: 16 file-count: 10 +# uuid: +\b[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}\b + +# hit-count: 13 file-count: 4 +# Non-English +[a-zA-Z]*[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3}[a-zA-ZÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]*|[a-zA-Z]{3,}[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź]|[ÀÁÂÃÄÅÆČÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæčçèéêëìíîïðñòóôõöøùúûüýÿĀāŁłŃńŅņŒœŚśŠšŜŝŸŽžź][a-zA-Z]{3,} + +# hit-count: 7 file-count: 5 +# hex digits including css/html color classes: +(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b + +# hit-count: 7 file-count: 1 +# regex choice +\(\?:[^)]+\|[^)]+\) + +# hit-count: 4 file-count: 4 +# tar arguments +\b(?:\\n|)g?tar(?:\.exe|)(?:(?:\s+--[-a-zA-Z]+|\s+-[a-zA-Z]+|\s[ABGJMOPRSUWZacdfh-pr-xz]+\b)(?:=[^ ]*|))+ + +# hit-count: 4 file-count: 1 +# ANSI color codes +(?:\\(?:u00|x)1[Bb]|\x1b|\\u\{1[Bb]\})\[\d+(?:;\d+|)m + +# hit-count: 4 file-count: 1 +# Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally ) +# grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review - +# Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into: +## Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary). +## You could manually change `(?i)X...` to use `[Xx]...` +## or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path) +# Lorem +(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])* + +# hit-count: 3 file-count: 3 +# mailto urls +mailto:[-a-zA-Z=;:/?%&0-9+@.]{3,} + +# hit-count: 2 file-count: 1 +# Python string prefix / binary prefix +# Note that there's a high false positive rate, remove the `?=` and search for the regex to see if the matches seem like reasonable strings +(?= 0.0.22) +\\\w{2,}\{ + +# hit-count: 1 file-count: 1 +# tput arguments -- https://man7.org/linux/man-pages/man5/terminfo.5.html -- technically they can be more than 5 chars long... +\btput\s+(?:(?:-[SV]|-T\s*\w+)\s+)*\w{3,5}\b + +# Questionably acceptable forms of `in to` +# Personally, I prefer `log into`, but people object +# https://www.tprteaching.com/log-into-log-in-to-login/ +\b(?:[Ll]og|[Ss]ign) in to\b + +# to opt in +\bto opt in\b # acceptable duplicates # ls directory listings -[-bcdlpsw](?:[-r][-w][-sx]){3}\s+\d+\s+(\S+)\s+\g{-1}\s+\d+\s+ -# C/idl types + English ... -\s(Guid|long|LONG|that) \g{-1}\s -# javadoc / .net -(?:\@(?:groupname|param)|(?:public|private)(?:\s+static|\s+readonly)*)\s+(\w+)\s+\g{-1}\s +[-bcdlpsw](?:[-r][-w][-Ssx]){3}\s+\d+\s+\S+\s+\S+\s+\d+\s+ +# mount +\bmount\s+-t\s+(\w+)\s+\g{-1}\b +# C types and repeated CSS values +\s(auto|center|div|Guid|inherit|long|LONG|none|normal|solid|that|thin|transparent|very)(?: \g{-1})+\s +# C struct +\bstruct\s+(\w+)\s+\g{-1}\b +# go templates +\s(\w+)\s+\g{-1}\s+\`(?:graphql|inject|json|yaml): +# doxygen / javadoc / .net +(?:[\\@](?:brief|groupname|t?param|return|retval)|(?:public|private|\[Parameter(?:\(.+\)|)\])(?:\s+static|\s+override|\s+readonly)*)(?:\s+\{\w+\}|)\s+(\w+)\s+\g{-1}\s + +# Commit message -- Signed-off-by and friends +^\s*(?:(?:Based-on-patch|Co-authored|Helped|Mentored|Reported|Reviewed|Signed-off)-by|Thanks-to): (?:[^<]*<[^>]*>|[^<]*)\s*$ + +# Autogenerated revert commit message +^This reverts commit [0-9a-f]{40}\.$ + # vtmode --vtmode\s+(\w+)\s+\g{-1}\s diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt index 4d43bc53eee..2ac1670d534 100644 --- a/.github/actions/spelling/reject.txt +++ b/.github/actions/spelling/reject.txt @@ -1,31 +1,13 @@ -benefitting -occurences? -Sorce ^attache$ ^attacher$ ^attachers$ +^bellow$ +benefitting +occurences? ^dependan.* ^oer$ -^spae$ -^spae-man$ -^spaebook$ -^spaecraft$ -^spaed$ -^spaedom$ -^spaeing$ -^spaeings$ -^spaeman$ -^spaer$ -^Spaerobee$ -^spaes$ -^spaewife$ -^spaewoman$ -^spaework$ -^spaewright$ +Sorce +^[Ss]pae.* ^untill$ ^untilling$ -^wether$ ^wether.* -^wethers$ -^wetherteg$ -^[Ss]pae.* diff --git a/.github/fabricbot.json b/.github/fabricbot.json deleted file mode 100644 index 500878b8683..00000000000 --- a/.github/fabricbot.json +++ /dev/null @@ -1,3156 +0,0 @@ -{ - "version": "1.0", - "tasks": [ - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "config": { - "taskName": "Add needs triage label to new issue", - "conditions": { - "operator": "or", - "operands": [ - { - "operator": "and", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "opened" - } - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "⛺ Reserved" - } - } - ] - } - ] - } - ] - }, - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "Needs-Triage" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ] - }, - "id": "aZ_SNTI7W" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "config": { - "taskName": "Replace needs author feedback label with needs attention label when the author comments on an issue", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "created" - } - }, - { - "name": "isActivitySender", - "parameters": { - "user": { - "type": "author" - } - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ] - }, - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "Needs-Attention" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issue_comment" - ] - }, - "id": "_X5OkVx4JU" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "config": { - "taskName": "Remove no recent activity label from issues", - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "closed" - } - } - ] - }, - { - "name": "hasLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ] - }, - "id": "dER5Fu3ekK" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "config": { - "taskName": "Remove no recent activity label when an issue is commented on", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ], - "eventType": "issue", - "eventNames": [ - "issue_comment" - ] - }, - "id": "cyoTuRwP9P" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "taskName": "Close stale issues", - "frequency": [ - { - "weekDay": 0, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isIssue", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "No-Recent-Activity" - } - }, - { - "name": "noActivitySince", - "parameters": { - "days": 3 - } - } - ], - "actions": [ - { - "name": "closeIssue", - "parameters": {} - } - ] - }, - "id": "oc-LHz1wag" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "taskName": "Add no recent activity label to issues", - "frequency": [ - { - "weekDay": 0, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isIssue", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "noActivitySince", - "parameters": { - "days": 4 - } - }, - { - "name": "noLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ], - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "No-Recent-Activity" - } - }, - { - "name": "addReply", - "parameters": { - "comment": "This issue has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for **4 days**. It will be closed if no further activity occurs **within 3 days of this comment**." - } - } - ] - }, - "id": "t0Eu4GMbGx" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "taskName": "Close duplicate issues", - "frequency": [ - { - "weekDay": 0, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 0, - 3, - 6, - 9, - 12, - 15, - 18, - 21 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isIssue", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Duplicate" - } - }, - { - "name": "noActivitySince", - "parameters": { - "days": 1 - } - } - ], - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "This issue has been marked as duplicate and has not had any activity for **1 day**. It will be closed for housekeeping purposes." - } - }, - { - "name": "closeIssue", - "parameters": {} - } - ] - }, - "id": "CSDw0s8LGP" - }, - { - "taskType": "trigger", - "capabilityId": "CodeFlowLink", - "subCapability": "CodeFlowLink", - "version": "1.0", - "config": { - "taskName": "Add a CodeFlow link to new pull requests" - }, - "id": "w1aPb06aR", - "disabled": true - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestReviewResponder", - "version": "1.0", - "config": { - "taskName": "Add needs author feedback label to pull requests when changes are requested", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "submitted" - } - }, - { - "name": "isReviewState", - "parameters": { - "state": "changes_requested" - } - } - ] - }, - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ], - "eventType": "pull_request", - "eventNames": [ - "pull_request_review" - ] - }, - "id": "NooCyW2RPs" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestResponder", - "version": "1.0", - "config": { - "taskName": "Remove needs author feedback label when the author responds to a pull request", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isActivitySender", - "parameters": { - "user": { - "type": "author" - } - } - }, - { - "operator": "not", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "closed" - } - } - ] - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ], - "eventType": "pull_request", - "eventNames": [ - "pull_request", - "issues", - "project_card" - ] - }, - "id": "YSz7PmirbZ" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestCommentResponder", - "version": "1.0", - "config": { - "taskName": "Remove needs author feedback label when the author comments on a pull request", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isActivitySender", - "parameters": { - "user": { - "type": "author" - } - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ], - "eventType": "pull_request", - "eventNames": [ - "issue_comment" - ] - }, - "id": "JRxI_S1cjy" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestReviewResponder", - "version": "1.0", - "config": { - "taskName": "Remove needs author feedback label when the author responds to a pull request review comment", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isActivitySender", - "parameters": { - "user": { - "type": "author" - } - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ], - "eventType": "pull_request", - "eventNames": [ - "pull_request_review" - ] - }, - "id": "T8n8me4yLo" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestResponder", - "version": "1.0", - "config": { - "taskName": "Remove no recent activity label from pull requests", - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "closed" - } - } - ] - }, - { - "name": "hasLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ], - "eventType": "pull_request", - "eventNames": [ - "pull_request", - "issues", - "project_card" - ] - }, - "id": "nAs8e47Tod" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestCommentResponder", - "version": "1.0", - "config": { - "taskName": "Remove no recent activity label when a pull request is commented on", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ], - "eventType": "pull_request", - "eventNames": [ - "issue_comment" - ] - }, - "id": "BwFyZ6jhbC" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestReviewResponder", - "version": "1.0", - "config": { - "taskName": "Remove no recent activity label when a pull request is reviewed", - "conditions": { - "operator": "and", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ] - }, - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ], - "eventType": "pull_request", - "eventNames": [ - "pull_request_review" - ] - }, - "id": "JV-Wq2rwx2" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "taskName": "Close stale pull requests", - "frequency": [ - { - "weekDay": 0, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 2, - 5, - 8, - 11, - 14, - 17, - 20, - 23 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isPr", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "No-Recent-Activity" - } - }, - { - "name": "noActivitySince", - "parameters": { - "days": 7 - } - } - ], - "actions": [ - { - "name": "closeIssue", - "parameters": {} - } - ] - }, - "id": "Y6XW51lcUD" - }, - { - "taskType": "scheduled", - "capabilityId": "ScheduledSearch", - "subCapability": "ScheduledSearch", - "version": "1.1", - "config": { - "taskName": "Add no recent activity label to pull requests", - "frequency": [ - { - "weekDay": 0, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 1, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 2, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 3, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 4, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 5, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - }, - { - "weekDay": 6, - "hours": [ - 1, - 4, - 7, - 10, - 13, - 16, - 19, - 22 - ], - "timezoneOffset": -8 - } - ], - "searchTerms": [ - { - "name": "isPr", - "parameters": {} - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "noActivitySince", - "parameters": { - "days": 7 - } - }, - { - "name": "noLabel", - "parameters": { - "label": "No-Recent-Activity" - } - } - ], - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "No-Recent-Activity" - } - }, - { - "name": "addReply", - "parameters": { - "comment": "This pull request has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for **7 days**. It will be closed if no further activity occurs **within 7 days of this comment**." - } - } - ] - }, - "id": "I6gc1et842" - }, - { - "taskType": "trigger", - "capabilityId": "AutoMerge", - "subCapability": "AutoMerge", - "version": "1.0", - "config": { - "taskName": "Automatically merge pull requests", - "label": "AutoMerge", - "silentMode": false, - "minMinutesOpen": 480, - "mergeType": "squash", - "deleteBranches": true, - "removeLabelOnPush": true, - "allowAutoMergeInstructionsWithoutLabel": true, - "enforceDMPAsStatus": true, - "usePrDescriptionAsCommitMessage": true - }, - "id": "Q0_X6ws7SR" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "tv-BontEW", - "config": { - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "or", - "operands": [ - { - "operator": "and", - "operands": [ - { - "name": "isLabeled", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Mass-Chaos" - } - } - ] - }, - { - "name": "isOpen", - "parameters": {} - }, - { - "name": "isLabeled", - "parameters": {} - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Tag-Fix" - } - } - ] - }, - { - "operator": "or", - "operands": [ - { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Accessibility" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Build" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Extensibility" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Fonts" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Input" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Interaction" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Interop" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Output" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Performance" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Rendering" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Server" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Settings" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-TerminalConnection" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-TerminalControl" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-User Interface" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-VT" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-CodeHealth" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Quality" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-AzureShell" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Schema" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Commandline" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-ShellExtension" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-WPFControl" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Settings UI" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-DefApp" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Remoting" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Windowing" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Theming" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Localization" - } - } - ] - } - ] - }, - { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Bug" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Docs" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Feature" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Question" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Samples" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Task" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Scenario" - } - } - ] - } - ] - }, - { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Cmd.exe" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Colortool" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Conhost" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Conpty" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Meta" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Powershell" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Terminal" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-WSL" - } - } - ] - } - ] - }, - { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "isOpen", - "parameters": {} - } - ] - }, - { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Answered" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-By-Design" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Duplicate" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-External" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Fix-Available" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Fix-Committed" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Won't-Fix" - } - } - ] - } - ] - } - ] - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Triage" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Duplicate" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "⛺ Reserved" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Tracking-External" - } - } - ] - } - ] - }, - "actions": [ - { - "name": "addLabel", - "parameters": { - "label": "Needs-Tag-Fix" - } - } - ], - "taskName": "Mark issues that need tagging fixed" - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "L78SZN8PE", - "config": { - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "and", - "operands": [ - { - "name": "isLabeled", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Tag-Fix" - } - } - ] - }, - { - "operator": "and", - "operands": [ - { - "operator": "or", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Area-Accessibility" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Build" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Extensibility" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Fonts" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Input" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Interaction" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Interop" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Output" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Performance" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Rendering" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Server" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Settings" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-TerminalConnection" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-TerminalControl" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-User Interface" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-VT" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-CodeHealth" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Quality" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Schema" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-AzureShell" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Commandline" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-ShellExtension" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-WPFControl" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Settings UI" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-DefApp" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Localization" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Windowing" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-Theming" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-AtlasEngine" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Area-CmdPal" - } - } - ] - }, - { - "operator": "or", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Bug" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Docs" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Feature" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Question" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Samples" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Task" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Issue-Scenario" - } - } - ] - }, - { - "operator": "or", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Product-Cmd.exe" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Product-Colortool" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Product-Conhost" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Product-Conpty" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Product-Meta" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Product-Powershell" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Product-Terminal" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Product-WSL" - } - } - ] - }, - { - "operator": "or", - "operands": [ - { - "name": "isOpen", - "parameters": {} - }, - { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "isOpen", - "parameters": {} - } - ] - }, - { - "operator": "or", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Answered" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-By-Design" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Duplicate" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-External" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Fix-Available" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Fix-Committed" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Won't-Fix" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Tracking-External" - } - } - ] - } - ] - } - ] - } - ] - } - ] - }, - "taskName": "Remove tag fix label from issues with fixed tags", - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Tag-Fix" - } - } - ] - } - }, - { - "taskType": "trigger", - "capabilityId": "InPrLabel", - "subCapability": "InPrLabel", - "version": "1.0", - "id": "SRYfNSWer", - "config": { - "fixedLabelEnabled": true, - "taskName": "Label PRs and mark fix committed automatically", - "label_inPr": "In-PR", - "label_fixed": "Resolution-Fix-Committed" - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "17D1zI_5Q", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Tag-Fix" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Resolution-Duplicate" - } - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "remove tag fix from duplicates", - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Tag-Fix" - } - } - ] - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "-6xYBV_-e", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "or", - "operands": [ - { - "name": "titleContains", - "parameters": { - "isRegex": true, - "titlePattern": "^\\s*Bug Report \\(IF I DO NOT CHANGE THIS THE ISSUE WILL BE AUTO-CLOSED\\)\\s*$" - } - }, - { - "name": "titleContains", - "parameters": { - "titlePattern": "^\\s*Bug Report\\s*$", - "isRegex": true - } - } - ] - }, - { - "operator": "or", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "opened" - } - }, - { - "name": "isAction", - "parameters": { - "action": "reopened" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "write" - } - } - ] - }, - { - "operator": "not", - "operands": [ - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "admin" - } - } - ] - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "Close issues with no title fix", - "actions": [ - { - "name": "closeIssue", - "parameters": {} - }, - { - "name": "addLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "addReply", - "parameters": { - "comment": "Hi! Thanks for attempting to open an issue. Unfortunately, your title wasn't changed from the original template which makes it very hard for us to track and triage. You are welcome to fix up the title and try again with a new issue." - } - } - ] - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "_Mpyf9AhA", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "or", - "operands": [ - { - "name": "isAction", - "parameters": { - "action": "opened" - } - }, - { - "name": "isAction", - "parameters": { - "action": "reopened" - } - } - ] - }, - { - "operator": "or", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "bodyContains", - "parameters": { - "bodyPattern": ".+", - "isRegex": true - } - } - ] - } - ] - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "Close issues with nothing in the body", - "actions": [ - { - "name": "closeIssue", - "parameters": {} - }, - { - "name": "addLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "addReply", - "parameters": { - "comment": "Hi! Thanks for attempting to open an issue. Unfortunately, you didn't write anything in the body which makes it impossible to understand your concern. You are welcome to fix up the issue and try again by opening another issue with the body filled out. " - } - } - ] - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestResponder", - "version": "1.0", - "id": "__Wpe__Ye", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isLabeled", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Second" - } - }, - { - "name": "isOpen", - "parameters": {} - } - ] - }, - "eventType": "pull_request", - "eventNames": [ - "pull_request", - "issues", - "project_card" - ], - "taskName": "add team when a second is needed", - "actions": [ - { - "name": "requestReviewer", - "parameters": { - "reviewer": "zadjii-msft" - } - }, - { - "name": "requestReviewer", - "parameters": { - "reviewer": "PankajBhojwani" - } - }, - { - "name": "requestReviewer", - "parameters": { - "reviewer": "carlos-zamora" - } - }, - { - "name": "requestReviewer", - "parameters": { - "reviewer": "dhowett" - } - }, - { - "name": "requestReviewer", - "parameters": { - "reviewer": "lhecker" - } - } - ] - }, - "disabled": false - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "PullRequestReviewResponder", - "version": "1.0", - "id": "XutI7oBsy", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "operator": "not", - "operands": [ - { - "name": "isOpen", - "parameters": {} - } - ] - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Second" - } - } - ] - }, - "eventType": "pull_request", - "eventNames": [ - "pull_request_review" - ], - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Second" - } - } - ], - "taskName": "Remove Needs-Second from closed PRs." - } - }, - { - "taskType": "trigger", - "capabilityId": "ReleaseAnnouncement", - "subCapability": "ReleaseAnnouncement", - "version": "1.0", - "config": { - "taskName": "Announce a fix has been released", - "prReply": ":tada:`${pkgName} ${version}` has been released which incorporates this pull request.:tada:\n\nHandy links:\n* [Release Notes](https://github.com/${owner}/${repo}/releases/tag/${version})\n* [Store Download](https://www.microsoft.com/store/apps/9n8g5rfz9xk3?cid=storebadge&ocid=badge)\n", - "issueReply": ":tada:This issue was addressed in #${prNumber}, which has now been successfully released as `${pkgName} ${version}`.:tada:\n\nHandy links:\n* [Release Notes](https://github.com/${owner}/${repo}/releases/tag/${version})\n* [Store Download](https://www.microsoft.com/store/apps/9n8g5rfz9xk3?cid=storebadge&ocid=badge)", - "referencedPrsRegex": "\\#([0-9]+)\\s*\\)" - }, - "id": "jERDgOu8l" - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "8rtmfy0pc", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "isLabeled", - "parameters": {} - }, - { - "name": "hasLabel", - "parameters": { - "label": "Needs-Feedback-Hub" - } - }, - { - "name": "", - "parameters": {} - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "Ask for Feedback Hub link", - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "Hi there!

Can you please send us feedback with the Feedback Hub with this issue and paste the link here so we can more easily find your crash information on the back end?

Thanks!

![image](https://user-images.githubusercontent.com/18221333/62478757-b69d0d00-b760-11e9-9626-1fa33c91e7c5.png) ![image](https://user-images.githubusercontent.com/18221333/62478649-6de55400-b760-11e9-806e-5aab7e085a9f.png)" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Feedback-Hub" - } - }, - { - "name": "addLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ] - }, - "disabled": true - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssuesOnlyResponder", - "version": "1.0", - "id": "1DaxcVAAB", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "hasLabel", - "parameters": { - "label": "In-PR" - } - }, - { - "name": "hasLabel", - "parameters": { - "label": "Help Wanted" - } - }, - { - "name": "isLabeled", - "parameters": {} - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issues", - "project_card" - ], - "taskName": "Pull the Help-Wanted tag if something goes into PR", - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Help-Wanted" - } - } - ], - "dangerZone": { - "respondToBotActions": false, - "acceptRespondToBotActions": true - } - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "id": "NtTsTnnPU", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "commentContains", - "parameters": { - "bodyPattern": "/dup", - "isRegex": true, - "commentPattern": "\\/dup(licate|e)?(\\s+of)?\\s+#[\\d]+" - } - }, - { - "operator": "or", - "operands": [ - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "admin" - } - }, - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "write" - } - } - ] - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issue_comment" - ], - "taskName": "Helper to mark as duplicate", - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report!" - } - }, - { - "name": "closeIssue", - "parameters": {} - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Triage" - } - }, - { - "name": "addLabel", - "parameters": { - "label": "Resolution-Duplicate" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Tag-Fix" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Attention" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Repro" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Second" - } - } - ] - }, - "disabled": false - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "id": "P_CqIudDp", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "commentContains", - "parameters": { - "commentPattern": "\\/feedback", - "isRegex": true - } - }, - { - "operator": "or", - "operands": [ - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "admin" - } - }, - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "write" - } - } - ] - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issue_comment" - ], - "taskName": "Ask for Feedback Hub link via comment trigger", - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "\nHi there!

Can you please send us feedback with the [Feedback Hub](https://support.microsoft.com/en-us/windows/send-feedback-to-microsoft-with-the-feedback-hub-app-f59187f8-8739-22d6-ba93-f66612949332) with this issue? Make sure to click the \"Start recording\" button, then reproduce the issue before submitting the feedback. Once it's submitted, paste the link here so we can more easily find your crash information on the back end?

Thanks!

![image](https://user-images.githubusercontent.com/18356694/140811502-a068f78b-89d2-4587-925a-73e19652b830.png)

![image](https://user-images.githubusercontent.com/18356694/140811557-cdc22a0f-fa6a-4f6a-953e-73b51f5548a3.png)

![image](https://user-images.githubusercontent.com/18221333/62478649-6de55400-b760-11e9-806e-5aab7e085a9f.png)" - } - }, - { - "name": "addLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ] - } - }, - { - "taskType": "trigger", - "capabilityId": "EmailCleanser", - "subCapability": "EmailCleanser", - "version": "1.0", - "id": "yt42fShpQ", - "config": { - "taskName": "Scrub-a-dub-dub email replies" - } - }, - { - "taskType": "trigger", - "capabilityId": "LabelSync", - "subCapability": "LabelSync", - "version": "1.0", - "id": "PoWEf56Be", - "config": { - "taskName": "Syncy dinky doo", - "labelPatterns": [ - { - "pattern": "Issue-" - }, - { - "pattern": "Area-" - }, - { - "pattern": "Priority-" - }, - { - "pattern": "Product-" - }, - { - "pattern": "Severity-" - }, - { - "pattern": "Impact-" - } - ] - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "id": "y6DOsjvqw", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "commentContains", - "parameters": { - "commentPattern": "\\/dup(licate|e)?(\\s+of)?\\s+https", - "isRegex": true - } - }, - { - "operator": "or", - "operands": [ - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "admin" - } - }, - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "write" - } - } - ] - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issue_comment" - ], - "taskName": "Helper to mark as EXTERNAL duplicate", - "actions": [ - { - "name": "addReply", - "parameters": { - "comment": "Hi! We've identified this issue as a duplicate of one that exists on somebody else's Issue Tracker. Please make sure you subscribe to the referenced external issue for future updates. Thanks for your report!" - } - }, - { - "name": "closeIssue", - "parameters": {} - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Triage" - } - }, - { - "name": "addLabel", - "parameters": { - "label": "Resolution-External" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Attention" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Bisect" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Repro" - } - }, - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Second" - } - } - ] - } - }, - { - "taskType": "trigger", - "capabilityId": "IssueResponder", - "subCapability": "IssueCommentResponder", - "version": "1.0", - "id": "XENeaGGwPr8hJK0FgfzMo", - "config": { - "conditions": { - "operator": "and", - "operands": [ - { - "name": "commentContains", - "parameters": { - "commentPattern": "/?" - } - }, - { - "operator": "or", - "operands": [ - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "admin" - } - }, - { - "name": "activitySenderHasPermissions", - "parameters": { - "permissions": "write" - } - } - ] - } - ] - }, - "eventType": "issue", - "eventNames": [ - "issue_comment" - ], - "taskName": "Auto add feedback label", - "actions": [ - { - "name": "removeLabel", - "parameters": { - "label": "Needs-Attention" - } - }, - { - "name": "addLabel", - "parameters": { - "label": "Needs-Author-Feedback" - } - } - ] - } - } - ], - "userGroups": [] -} diff --git a/.github/policies/resourceManagement.yml b/.github/policies/resourceManagement.yml new file mode 100644 index 00000000000..695df7162de --- /dev/null +++ b/.github/policies/resourceManagement.yml @@ -0,0 +1,751 @@ +id: +name: GitOps.PullRequestIssueManagement +description: GitOps.PullRequestIssueManagement primitive +owner: +resource: repository +disabled: false +where: +configuration: + resourceManagementConfiguration: + scheduledSearches: + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isIssue + - isOpen + - hasLabel: + label: Needs-Author-Feedback + - hasLabel: + label: No-Recent-Activity + - noActivitySince: + days: 3 + actions: + - closeIssue + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isIssue + - isOpen + - hasLabel: + label: Needs-Author-Feedback + - noActivitySince: + days: 4 + - isNotLabeledWith: + label: No-Recent-Activity + actions: + - addLabel: + label: No-Recent-Activity + - addReply: + reply: This issue has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for **4 days**. It will be closed if no further activity occurs **within 3 days of this comment**. + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isIssue + - isOpen + - hasLabel: + label: Resolution-Duplicate + - noActivitySince: + days: 1 + actions: + - addReply: + reply: This issue has been marked as duplicate and has not had any activity for **1 day**. It will be closed for housekeeping purposes. + - closeIssue + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isPullRequest + - isOpen + - hasLabel: + label: Needs-Author-Feedback + - hasLabel: + label: No-Recent-Activity + - noActivitySince: + days: 7 + actions: + - closeIssue + - description: + frequencies: + - hourly: + hour: 3 + filters: + - isPullRequest + - isOpen + - hasLabel: + label: Needs-Author-Feedback + - noActivitySince: + days: 7 + - isNotLabeledWith: + label: No-Recent-Activity + actions: + - addLabel: + label: No-Recent-Activity + - addReply: + reply: This pull request has been automatically marked as stale because it has been marked as requiring author feedback but has not had any activity for **7 days**. It will be closed if no further activity occurs **within 7 days of this comment**. + eventResponderTasks: + - if: + - payloadType: Issues + - or: + - and: + - isAction: + action: Opened + - not: + hasLabel: + label: ⛺ Reserved + then: + - addLabel: + label: Needs-Triage + description: + - if: + - payloadType: Issue_Comment + - isAction: + action: Created + - isActivitySender: + issueAuthor: True + - hasLabel: + label: Needs-Author-Feedback + then: + - addLabel: + label: Needs-Attention + - removeLabel: + label: Needs-Author-Feedback + description: + - if: + - payloadType: Issues + - not: + isAction: + action: Closed + - hasLabel: + label: No-Recent-Activity + then: + - removeLabel: + label: No-Recent-Activity + description: + - if: + - payloadType: Issue_Comment + - hasLabel: + label: No-Recent-Activity + then: + - removeLabel: + label: No-Recent-Activity + description: + - if: + - payloadType: Pull_Request_Review + - isAction: + action: Submitted + - isReviewState: + reviewState: Changes_requested + then: + - addLabel: + label: Needs-Author-Feedback + description: + - if: + - payloadType: Pull_Request + - isActivitySender: + issueAuthor: True + - not: + isAction: + action: Closed + - hasLabel: + label: Needs-Author-Feedback + then: + - removeLabel: + label: Needs-Author-Feedback + description: + - if: + - payloadType: Issue_Comment + - isActivitySender: + issueAuthor: True + - hasLabel: + label: Needs-Author-Feedback + then: + - removeLabel: + label: Needs-Author-Feedback + description: + - if: + - payloadType: Pull_Request_Review + - isActivitySender: + issueAuthor: True + - hasLabel: + label: Needs-Author-Feedback + then: + - removeLabel: + label: Needs-Author-Feedback + description: + - if: + - payloadType: Pull_Request + - not: + isAction: + action: Closed + - hasLabel: + label: No-Recent-Activity + then: + - removeLabel: + label: No-Recent-Activity + description: + - if: + - payloadType: Issue_Comment + - hasLabel: + label: No-Recent-Activity + then: + - removeLabel: + label: No-Recent-Activity + description: + - if: + - payloadType: Pull_Request_Review + - hasLabel: + label: No-Recent-Activity + then: + - removeLabel: + label: No-Recent-Activity + description: + - if: + - payloadType: Pull_Request + - hasLabel: + label: AutoMerge + then: + - enableAutoMerge: + mergeMethod: Squash + description: + - if: + - payloadType: Pull_Request + - labelRemoved: + label: AutoMerge + then: + - disableAutoMerge + description: + - if: + - payloadType: Issues + - or: + - and: + - isLabeled + - hasLabel: + label: Mass-Chaos + - isOpen + - isLabeled + - not: + hasLabel: + label: Needs-Tag-Fix + - or: + - and: + - not: + hasLabel: + label: Area-Accessibility + - not: + hasLabel: + label: Area-Build + - not: + hasLabel: + label: Area-Extensibility + - not: + hasLabel: + label: Area-Fonts + - not: + hasLabel: + label: Area-Input + - not: + hasLabel: + label: Area-Interaction + - not: + hasLabel: + label: Area-Interop + - not: + hasLabel: + label: Area-Output + - not: + hasLabel: + label: Area-Performance + - not: + hasLabel: + label: Area-Rendering + - not: + hasLabel: + label: Area-Server + - not: + hasLabel: + label: Area-Settings + - not: + hasLabel: + label: Area-TerminalConnection + - not: + hasLabel: + label: Area-TerminalControl + - not: + hasLabel: + label: Area-User Interface + - not: + hasLabel: + label: Area-VT + - not: + hasLabel: + label: Area-CodeHealth + - not: + hasLabel: + label: Area-Quality + - not: + hasLabel: + label: Area-AzureShell + - not: + hasLabel: + label: Area-Schema + - not: + hasLabel: + label: Area-Commandline + - not: + hasLabel: + label: Area-ShellExtension + - not: + hasLabel: + label: Area-WPFControl + - not: + hasLabel: + label: Area-Settings UI + - not: + hasLabel: + label: Area-DefApp + - not: + hasLabel: + label: Area-Remoting + - not: + hasLabel: + label: Area-Windowing + - not: + hasLabel: + label: Area-Theming + - not: + hasLabel: + label: Area-Localization + - and: + - not: + hasLabel: + label: Issue-Bug + - not: + hasLabel: + label: Issue-Docs + - not: + hasLabel: + label: Issue-Feature + - not: + hasLabel: + label: Issue-Question + - not: + hasLabel: + label: Issue-Samples + - not: + hasLabel: + label: Issue-Task + - not: + hasLabel: + label: Issue-Scenario + - and: + - not: + hasLabel: + label: Product-Cmd.exe + - not: + hasLabel: + label: Product-Colortool + - not: + hasLabel: + label: Product-Conhost + - not: + hasLabel: + label: Product-Conpty + - not: + hasLabel: + label: Product-Meta + - not: + hasLabel: + label: Product-Powershell + - not: + hasLabel: + label: Product-Terminal + - not: + hasLabel: + label: Product-WSL + - and: + - not: isOpen + - and: + - not: + hasLabel: + label: Resolution-Answered + - not: + hasLabel: + label: Resolution-By-Design + - not: + hasLabel: + label: Resolution-Duplicate + - not: + hasLabel: + label: Resolution-External + - not: + hasLabel: + label: Resolution-Fix-Available + - not: + hasLabel: + label: Resolution-Fix-Committed + - not: + hasLabel: + label: Resolution-Won't-Fix + - not: + hasLabel: + label: Needs-Triage + - not: + hasLabel: + label: Resolution-Duplicate + - not: + hasLabel: + label: ⛺ Reserved + - not: + hasLabel: + label: Tracking-External + then: + - addLabel: + label: Needs-Tag-Fix + description: + - if: + - payloadType: Issues + - and: + - isLabeled + - hasLabel: + label: Needs-Tag-Fix + - and: + - or: + - hasLabel: + label: Area-Accessibility + - hasLabel: + label: Area-Build + - hasLabel: + label: Area-Extensibility + - hasLabel: + label: Area-Fonts + - hasLabel: + label: Area-Input + - hasLabel: + label: Area-Interaction + - hasLabel: + label: Area-Interop + - hasLabel: + label: Area-Output + - hasLabel: + label: Area-Performance + - hasLabel: + label: Area-Rendering + - hasLabel: + label: Area-Server + - hasLabel: + label: Area-Settings + - hasLabel: + label: Area-TerminalConnection + - hasLabel: + label: Area-TerminalControl + - hasLabel: + label: Area-User Interface + - hasLabel: + label: Area-VT + - hasLabel: + label: Area-CodeHealth + - hasLabel: + label: Area-Quality + - hasLabel: + label: Area-Schema + - hasLabel: + label: Area-AzureShell + - hasLabel: + label: Area-Commandline + - hasLabel: + label: Area-ShellExtension + - hasLabel: + label: Area-WPFControl + - hasLabel: + label: Area-Settings UI + - hasLabel: + label: Area-DefApp + - hasLabel: + label: Area-Localization + - hasLabel: + label: Area-Windowing + - hasLabel: + label: Area-Theming + - hasLabel: + label: Area-AtlasEngine + - hasLabel: + label: Area-CmdPal + - or: + - hasLabel: + label: Issue-Bug + - hasLabel: + label: Issue-Docs + - hasLabel: + label: Issue-Feature + - hasLabel: + label: Issue-Question + - hasLabel: + label: Issue-Samples + - hasLabel: + label: Issue-Task + - hasLabel: + label: Issue-Scenario + - or: + - hasLabel: + label: Product-Cmd.exe + - hasLabel: + label: Product-Colortool + - hasLabel: + label: Product-Conhost + - hasLabel: + label: Product-Conpty + - hasLabel: + label: Product-Meta + - hasLabel: + label: Product-Powershell + - hasLabel: + label: Product-Terminal + - hasLabel: + label: Product-WSL + - or: + - isOpen + - and: + - not: isOpen + - or: + - hasLabel: + label: Resolution-Answered + - hasLabel: + label: Resolution-By-Design + - hasLabel: + label: Resolution-Duplicate + - hasLabel: + label: Resolution-External + - hasLabel: + label: Resolution-Fix-Available + - hasLabel: + label: Resolution-Fix-Committed + - hasLabel: + label: Resolution-Won't-Fix + - hasLabel: + label: Tracking-External + then: + - removeLabel: + label: Needs-Tag-Fix + description: + - if: + - payloadType: Pull_Request + then: + - inPrLabel: + label: In-PR + description: + - if: + - payloadType: Issues + - hasLabel: + label: Needs-Tag-Fix + - hasLabel: + label: Resolution-Duplicate + then: + - removeLabel: + label: Needs-Tag-Fix + description: + - if: + - payloadType: Issues + - or: + - titleContains: + pattern: ^\s*Bug Report \(IF I DO NOT CHANGE THIS THE ISSUE WILL BE AUTO-CLOSED\)\s*$ + isRegex: True + - titleContains: + pattern: ^\s*Bug Report\s*$ + isRegex: True + - or: + - isAction: + action: Opened + - isAction: + action: Reopened + - not: + activitySenderHasPermission: + permission: Write + - not: + activitySenderHasPermission: + permission: Admin + then: + - closeIssue + - addLabel: + label: Needs-Author-Feedback + - addReply: + reply: Hi! Thanks for attempting to open an issue. Unfortunately, your title wasn't changed from the original template which makes it very hard for us to track and triage. You are welcome to fix up the title and try again with a new issue. + description: + - if: + - payloadType: Issues + - or: + - isAction: + action: Opened + - isAction: + action: Reopened + - or: + - not: + bodyContains: + pattern: .+ + isRegex: True + then: + - closeIssue + - addLabel: + label: Needs-Author-Feedback + - addReply: + reply: "Hi! Thanks for attempting to open an issue. Unfortunately, you didn't write anything in the body which makes it impossible to understand your concern. You are welcome to fix up the issue and try again by opening another issue with the body filled out. " + description: + - if: + - payloadType: Pull_Request + - isLabeled + - hasLabel: + label: Needs-Second + - isOpen + then: + - requestReview: + reviewer: zadjii-msft + - requestReview: + reviewer: PankajBhojwani + - requestReview: + reviewer: carlos-zamora + - requestReview: + reviewer: dhowett + - requestReview: + reviewer: lhecker + description: + - if: + - payloadType: Pull_Request_Review + - not: isOpen + - hasLabel: + label: Needs-Second + then: + - removeLabel: + label: Needs-Second + description: + - if: + - payloadType: Issues + - hasLabel: + label: In-PR + - hasLabel: + label: Help Wanted + - isLabeled + then: + - removeLabel: + label: Help-Wanted + description: + - if: + - payloadType: Issue_Comment + - commentContains: + pattern: '\/dup(licate|e)?(\s+of)?\s+\#[\d]+' + isRegex: True + - or: + - activitySenderHasPermission: + permission: Admin + - activitySenderHasPermission: + permission: Write + then: + - addReply: + reply: Hi! We've identified this issue as a duplicate of another one that already exists on this Issue Tracker. This specific instance is being closed in favor of tracking the concern over on the referenced thread. Thanks for your report! + - closeIssue + - removeLabel: + label: Needs-Triage + - addLabel: + label: Resolution-Duplicate + - removeLabel: + label: Needs-Tag-Fix + - removeLabel: + label: Needs-Attention + - removeLabel: + label: Needs-Author-Feedback + - removeLabel: + label: Needs-Repro + - removeLabel: + label: Needs-Second + description: + - if: + - payloadType: Issue_Comment + - commentContains: + pattern: '\/feedback' + isRegex: True + - or: + - activitySenderHasPermission: + permission: Admin + - activitySenderHasPermission: + permission: Write + then: + - addReply: + reply: >2- + + Hi there!

Can you please send us feedback with the [Feedback Hub](https://support.microsoft.com/en-us/windows/send-feedback-to-microsoft-with-the-feedback-hub-app-f59187f8-8739-22d6-ba93-f66612949332) with this issue? Make sure to click the "Start recording" button, then reproduce the issue before submitting the feedback. Once it's submitted, paste the link here so we can more easily find your crash information on the back end?

Thanks!

![image](https://user-images.githubusercontent.com/18356694/140811502-a068f78b-89d2-4587-925a-73e19652b830.png)

![image](https://user-images.githubusercontent.com/18356694/140811557-cdc22a0f-fa6a-4f6a-953e-73b51f5548a3.png)

![image](https://user-images.githubusercontent.com/18221333/62478649-6de55400-b760-11e9-806e-5aab7e085a9f.png) + - addLabel: + label: Needs-Author-Feedback + description: + - if: + - payloadType: Issue_Comment + then: + - cleanEmailReply + description: + - if: + - payloadType: Pull_Request + then: + - labelSync: + pattern: Issue- + - labelSync: + pattern: Area- + - labelSync: + pattern: Priority- + - labelSync: + pattern: Product- + - labelSync: + pattern: Severity- + - labelSync: + pattern: Impact- + description: + - if: + - payloadType: Issue_Comment + - commentContains: + pattern: '\/dup(licate|e)?(\s+of)?\s+https' + isRegex: True + - or: + - activitySenderHasPermission: + permission: Admin + - activitySenderHasPermission: + permission: Write + then: + - addReply: + reply: Hi! We've identified this issue as a duplicate of one that exists on somebody else's Issue Tracker. Please make sure you subscribe to the referenced external issue for future updates. Thanks for your report! + - closeIssue + - removeLabel: + label: Needs-Triage + - addLabel: + label: Resolution-External + - removeLabel: + label: Needs-Attention + - removeLabel: + label: Needs-Author-Feedback + - removeLabel: + label: Needs-Bisect + - removeLabel: + label: Needs-Repro + - removeLabel: + label: Needs-Second + description: + - if: + - payloadType: Issue_Comment + - commentContains: + pattern: /? + isRegex: False + - or: + - activitySenderHasPermission: + permission: Admin + - activitySenderHasPermission: + permission: Write + then: + - removeLabel: + label: Needs-Attention + - addLabel: + label: Needs-Author-Feedback + description: +onFailure: +onSuccess: diff --git a/.github/workflows/addToProject.yml b/.github/workflows/addToProject.yml index 286cacb7bf6..4baa537dd19 100644 --- a/.github/workflows/addToProject.yml +++ b/.github/workflows/addToProject.yml @@ -7,12 +7,13 @@ on: - labeled - unlabeled +permissions: {} jobs: add-to-project: name: Add issue to project runs-on: ubuntu-latest steps: - - uses: actions/add-to-project@v0.3.0 + - uses: actions/add-to-project@v0.5.0 with: project-url: https://github.com/orgs/microsoft/projects/159 github-token: ${{ secrets.ADD_TO_PROJECT_PAT }} diff --git a/.github/workflows/similarIssues.yml b/.github/workflows/similarIssues.yml new file mode 100644 index 00000000000..fa93ad8597d --- /dev/null +++ b/.github/workflows/similarIssues.yml @@ -0,0 +1,32 @@ +name: GitGudSimilarIssues comments + +on: + issues: + types: [opened] + +jobs: + getSimilarIssues: + runs-on: ubuntu-latest + outputs: + message: ${{ steps.getBody.outputs.message }} + steps: + - id: getBody + uses: craigloewen-msft/GitGudSimilarIssues@main + with: + issuetitle: ${{ github.event.issue.title }} + repo: ${{ github.repository }} + similaritytolerance: "0.75" + add-comment: + needs: getSimilarIssues + runs-on: ubuntu-latest + permissions: + issues: write + if: needs.getSimilarIssues.outputs.message != '' + steps: + - name: Add comment + run: gh issue comment "$NUMBER" --repo "$REPO" --body "$BODY" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NUMBER: ${{ github.event.issue.number }} + REPO: ${{ github.repository }} + BODY: ${{ needs.getSimilarIssues.outputs.message }} diff --git a/.github/workflows/spelling2.yml b/.github/workflows/spelling2.yml index d8369ca0cd3..2778a7e9e5d 100644 --- a/.github/workflows/spelling2.yml +++ b/.github/workflows/spelling2.yml @@ -1,10 +1,78 @@ # spelling.yml is blocked per https://github.com/check-spelling/check-spelling/security/advisories/GHSA-g86g-chm8-7r2p name: Spell checking + +# Comment management is handled through a secondary job, for details see: +# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions +# +# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment +# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare) +# it needs `contents: write` in order to add a comment. +# +# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment +# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment) +# it needs `pull-requests: write` in order to manipulate those comments. + +# Updating pull request branches is managed via comment handling. +# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list +# +# These elements work together to make it happen: +# +# `on.issue_comment` +# This event listens to comments by users asking to update the metadata. +# +# `jobs.update` +# This job runs in response to an issue_comment and will push a new commit +# to update the spelling metadata. +# +# `with.experimental_apply_changes_via_bot` +# Tells the action to support and generate messages that enable it +# to make a commit to update the spelling metadata. +# +# `with.ssh_key` +# In order to trigger workflows when the commit is made, you can provide a +# secret (typically, a write-enabled github deploy key). +# +# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key + +# Sarif reporting +# +# Access to Sarif reports is generally restricted (by GitHub) to members of the repository. +# +# Requires enabling `security-events: write` +# and configuring the action with `use_sarif: 1` +# +# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output + +# Minimal workflow structure: +# +# on: +# push: +# ... +# pull_request_target: +# ... +# jobs: +# # you only want the spelling job, all others should be omitted +# spelling: +# # remove `security-events: write` and `use_sarif: 1` +# # remove `experimental_apply_changes_via_bot: 1` +# ... otherwise adjust the `with:` as you wish + on: - pull_request_target: push: - branches: ["**"] - tags-ignore: ["**"] + branches: + - "**" + tags-ignore: + - "**" + pull_request_target: + branches: + - "**" + types: + - 'opened' + - 'reopened' + - 'synchronize' + issue_comment: + types: + - 'created' jobs: spelling: @@ -13,10 +81,11 @@ jobs: contents: read pull-requests: read actions: read + security-events: write outputs: followup: ${{ steps.spelling.outputs.followup }} runs-on: ubuntu-latest - if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'" + if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }} concurrency: group: spelling-${{ github.event.pull_request.number || github.ref }} # note: If you use only_check_changed_files, you do not want cancel-in-progress @@ -24,23 +93,105 @@ jobs: steps: - name: check-spelling id: spelling - uses: check-spelling/check-spelling@v0.0.20 + uses: check-spelling/check-spelling@v0.0.22 with: - suppress_push_for_open_pull_request: 1 + suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }} checkout: true + check_file_names: 1 + spell_check_this: microsoft/terminal@main post_comment: 0 + use_magic_file: 1 + report-timing: 1 + warnings: bad-regex,binary-file,deprecated-feature,ignored-expect-variant,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check + experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }} + use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} + extra_dictionary_limit: 20 + extra_dictionaries: + cspell:software-terms/dict/softwareTerms.txt + cspell:cpp/src/stdlib-cpp.txt + cspell:lorem-ipsum/dictionary.txt + cspell:cpp/src/stdlib-c.txt + cspell:php/dict/php.txt + cspell:filetypes/filetypes.txt + cspell:java/src/java.txt + cspell:python/src/common/extra.txt + cspell:node/dict/node.txt + cspell:java/src/java-terms.txt + cspell:aws/aws.txt + cspell:typescript/dict/typescript.txt + cspell:dotnet/dict/dotnet.txt + cspell:golang/dict/go.txt + cspell:fullstack/dict/fullstack.txt + cspell:cpp/src/compiler-msvc.txt + cspell:python/src/python/python-lib.txt + cspell:mnemonics/src/mnemonics.txt + cspell:cpp/src/stdlib-cmath.txt + cspell:css/dict/css.txt + cspell:cpp/src/lang-keywords.txt + cspell:django/dict/django.txt + cspell:python/src/python/python.txt + cspell:html/dict/html.txt + cspell:cpp/src/ecosystem.txt + cspell:cpp/src/compiler-clang-attributes.txt + cspell:npm/dict/npm.txt + cspell:r/src/r.txt + cspell:powershell/dict/powershell.txt + cspell:csharp/csharp.txt - comment: - name: Report + comment-push: + name: Report (Push) + # If your workflow isn't running on push, you can remove this job runs-on: ubuntu-latest needs: spelling permissions: contents: write + if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push' + steps: + - name: comment + uses: check-spelling/check-spelling@v0.0.22 + with: + checkout: true + spell_check_this: microsoft/terminal@main + task: ${{ needs.spelling.outputs.followup }} + + comment-pr: + name: Report (PR) + # If you workflow isn't running on pull_request*, you can remove this job + runs-on: ubuntu-latest + needs: spelling + permissions: + contents: read pull-requests: write - if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name != 'push' + if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') steps: - name: comment - uses: check-spelling/check-spelling@v0.0.20 + uses: check-spelling/check-spelling@v0.0.22 with: checkout: true + spell_check_this: microsoft/terminal@main task: ${{ needs.spelling.outputs.followup }} + experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }} + + update: + name: Update PR + permissions: + contents: write + pull-requests: write + actions: read + runs-on: ubuntu-latest + if: ${{ + github.repository_owner != 'microsoft' && + github.event_name == 'issue_comment' && + github.event.issue.pull_request && + contains(github.event.comment.body, '@check-spelling-bot apply') + }} + concurrency: + group: spelling-update-${{ github.event.issue.number }} + cancel-in-progress: false + steps: + - name: apply spelling updates + uses: check-spelling/check-spelling@v0.0.22 + with: + experimental_apply_changes_via_bot: ${{ github.repository_owner != 'microsoft' && 1 }} + checkout: true + ssh_key: "${{ secrets.CHECK_SPELLING }}" diff --git a/.github/workflows/winget.yml b/.github/workflows/winget.yml new file mode 100644 index 00000000000..63464ea4fee --- /dev/null +++ b/.github/workflows/winget.yml @@ -0,0 +1,24 @@ +name: Publish to Winget + +on: + release: + types: [published] + +env: + REGEX: 'Microsoft\.WindowsTerminal(?:Preview)?_([\d.]+)_8wekyb3d8bbwe\.msixbundle$' + +jobs: + publish: + runs-on: windows-latest # Action can only run on Windows + steps: + - name: Publish Windows Terminal ${{ github.event.release.prerelease && 'Preview' || 'Stable' }} + run: | + $assets = '${{ toJSON(github.event.release.assets) }}' | ConvertFrom-Json + $wingetRelevantAsset = $assets | Where-Object { $_.name -like '*.msixbundle' } | Select-Object -First 1 + $regex = [Regex]::New($env:REGEX) + $version = $regex.Match($wingetRelevantAsset.name).Groups[1].Value + + $wingetPackage = "Microsoft.WindowsTerminal${{ github.event.release.prerelease && '.Preview' || '' }}" + + & curl.exe -JLO https://aka.ms/wingetcreate/latest + & .\wingetcreate.exe update $wingetPackage -s -v $version -u $wingetRelevantAsset.browser_download_url -t "${{ secrets.WINGET_TOKEN }}" diff --git a/.vscode/settings.json b/.vscode/settings.json index 604f91797d9..e7802ba358c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,7 +6,7 @@ "C_Cpp.loggingLevel": "None", "files.associations": { "xstring": "cpp", - "*.idl": "cpp", + "*.idl": "midl3", "array": "cpp", "future": "cpp", "istream": "cpp", @@ -103,7 +103,9 @@ "files.exclude": { "**/bin/**": true, "**/obj/**": true, - "**/packages/**": true, "**/Generated Files/**": true + }, + "search.exclude": { + "**/packages/**": true } -} \ No newline at end of file +} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f3e0a6b0a89..18ebdd96011 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -14,7 +14,7 @@ The point of doing all this work in public is to ensure that we are holding ours The team triages new issues several times a week. During triage, the team uses labels to categorize, manage, and drive the project workflow. -We employ [a bot engine](https://github.com/microsoft/terminal/blob/main/doc/bot.md) to help us automate common processes within our workflow. +We employ [a bot engine](./doc/bot.md) to help us automate common processes within our workflow. We drive the bot by tagging issues with specific labels which cause the bot engine to close issues, merge branches, etc. This bot engine helps us keep the repo clean by automating the process of notifying appropriate parties if/when information/follow-up is needed, and closing stale issues/PRs after reminders have remained unanswered for several days. @@ -101,7 +101,7 @@ If you don't have any additional info/context to add but would like to indicate If you're able & willing to help fix issues and/or implement features, we'd love your contribution! -The best place to start is the list of ["Easy Starter"](https://github.com/microsoft/terminal/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22+label%3A%22Easy+Starter%22+) issues. These are bugs or tasks that we on the team believe would be easier to implement for someone without any prior experience in the codebase. Once you're feeling more comfortable in the codebase, feel free to just use the ["Help Wanted"](https://github.com/microsoft/terminal/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22+) label, or just find an issue your interested in and hop in! +The best place to start is the list of ["walkthroughs"](https://aka.ms/terminal-walkthroughs). This is a collection of issues where we've written a "walkthrough", little guides to help get started with a particular issue. These are usually good first issues, and are a great way to get familiar with the codebase. Additionally, the list of ["good first issue"](https://github.com/microsoft/terminal/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22++label%3A%22good+first+issue%22+)s is another set of issues that might be easier for first-time contributors. Once you're feeling more comfortable in the codebase, feel free to just use the ["Help Wanted"](https://github.com/microsoft/terminal/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22+) label, or just find any issue you're interested in and hop in! Generally, we categorize issues in the following way, which is largely derived from our old internal work tracking system: * ["Bugs"](https://github.com/microsoft/terminal/issues?q=is%3Aopen+is%3Aissue+label%3A%22Issue-Bug%22+) are parts of the Terminal & Console that are not quite working the right way. There's code to already support some scenario, but it's not quite working right. Fixing these is generally a matter of debugging the broken functionality and fixing the wrong code. diff --git a/NOTICE.md b/NOTICE.md index e1488fd4a20..fb48315d254 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -276,41 +276,53 @@ OTHER DEALINGS IN THE SOFTWARE. For more information, please refer to ``` -## ConEmu -**Source**: [https://github.com/Maximus5/ConEmu](https://github.com/Maximus5/ConEmu) +## stb + +**Source**: [https://github.com/nothings/stb](https://github.com/nothings/stb) ### License ``` -BSD 3-Clause License +This is free and unencumbered software released into the public domain. +Anyone is free to copy, modify, publish, use, compile, sell, or distribute this +software, either in source code form or as a compiled binary, for any purpose, +commercial or non-commercial, and by any means. +In jurisdictions that recognize copyright laws, the author or authors of this +software dedicate any and all copyright interest in the software to the public +domain. We make this dedication for the benefit of the public at large and to +the detriment of our heirs and successors. We intend this dedication to be an +overt act of relinquishment in perpetuity of all present and future rights to +this software under copyright law. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` -Copyright (c) 2009-2017, Maximus5 -All rights reserved. +## Oklab +**Source**: [https://bottosson.github.io/posts/oklab/](https://bottosson.github.io/posts/oklab/) -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: +### License -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +``` +Copyright (c) 2020 Björn Ottosson +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. ``` # Microsoft Open Source diff --git a/OpenConsole.sln b/OpenConsole.sln index d7cc1264cba..e699c77cece 100644 --- a/OpenConsole.sln +++ b/OpenConsole.sln @@ -161,8 +161,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RendererVt.unittest", "src\ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BufferOut", "src\buffer\out\lib\bufferout.vcxproj", "{0CF235BD-2DA0-407E-90EE-C467E8BBC714}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RendererDx", "src\renderer\dx\lib\dx.vcxproj", "{48D21369-3D7B-4431-9967-24E81292CF62}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TerminalConnection", "src\cascadia\TerminalConnection\TerminalConnection.vcxproj", "{CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}" ProjectSection(ProjectDependencies) = postProject {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF} = {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF} @@ -173,7 +171,6 @@ EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Microsoft.Terminal.Control.Lib", "src\cascadia\TerminalControl\TerminalControlLib.vcxproj", "{CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}" ProjectSection(ProjectDependencies) = postProject {1CF55140-EF6A-4736-A403-957E4F7430BB} = {1CF55140-EF6A-4736-A403-957E4F7430BB} - {48D21369-3D7B-4431-9967-24E81292CF62} = {48D21369-3D7B-4431-9967-24E81292CF62} {48D21369-3D7B-4431-9967-24E81292CF63} = {48D21369-3D7B-4431-9967-24E81292CF63} {8222900C-8B6C-452A-91AC-BE95DB04B95F} = {8222900C-8B6C-452A-91AC-BE95DB04B95F} {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F} = {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F} @@ -239,8 +236,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{89CDCC EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Types.Unit.Tests", "src\types\ut_types\Types.Unit.Tests.vcxproj", "{34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PublicTerminalCore", "src\cascadia\PublicTerminalCore\PublicTerminalCore.vcxproj", "{84848BFA-931D-42CE-9ADF-01EE54DE7890}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfTerminalControl", "src\cascadia\WpfTerminalControl\WpfTerminalControl.csproj", "{376FE273-6B84-4EB5-8B30-8DE9D21B022C}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UnitTests_TerminalApp", "src\cascadia\ut_app\TerminalApp.UnitTests.vcxproj", "{CA5CAD1A-9333-4D05-B12A-1905CBF112F9}" @@ -321,17 +316,18 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Scripts", "Scripts", "{D3EF build\scripts\Test-WindowsTerminalPackage.ps1 = build\scripts\Test-WindowsTerminalPackage.ps1 EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Dx.Unit.Tests", "src\renderer\dx\ut_dx\Dx.Unit.Tests.vcxproj", "{95B136F9-B238-490C-A7C5-5843C1FECAC4}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "winconpty.Tests.Feature", "src\winconpty\ft_pty\winconpty.FeatureTests.vcxproj", "{024052DE-83FB-4653-AEA4-90790D29D5BD}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TerminalAzBridge", "src\cascadia\TerminalAzBridge\TerminalAzBridge.vcxproj", "{067F0A06-FCB7-472C-96E9-B03B54E8E18D}" + ProjectSection(ProjectDependencies) = postProject + {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B} = {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B} + EndProjectSection EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fmt", "src\dep\fmt\fmt.vcxproj", "{6BAE5851-50D5-4934-8D5E-30361A8A40F3}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WpfTerminalTestNetCore", "src\cascadia\WpfTerminalTestNetCore\WpfTerminalTestNetCore.csproj", "{1588FD7C-241E-4E7D-9113-43735F3E6BAD}" ProjectSection(ProjectDependencies) = postProject - {84848BFA-931D-42CE-9ADF-01EE54DE7890} = {84848BFA-931D-42CE-9ADF-01EE54DE7890} + {CA5CAD1A-F542-4635-A069-7CAEFB930070} = {CA5CAD1A-F542-4635-A069-7CAEFB930070} {A22EC5F6-7851-4B88-AC52-47249D437A52} = {A22EC5F6-7851-4B88-AC52-47249D437A52} EndProjectSection EndProject @@ -413,54 +409,44 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Audio", "Audio", "{40BD8415 EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MidiAudio", "src\audio\midi\lib\midi.vcxproj", "{3C67784E-1453-49C2-9660-483E2CC7F7AD}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TerminalStress", "src\tools\TerminalStress\TerminalStress.csproj", "{613CCB57-5FA9-48EF-80D0-6B1E319E20C4}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "RenderingTests", "src\tools\RenderingTests\RenderingTests.vcxproj", "{37C995E0-2349-4154-8E77-4A52C0C7F46D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "benchcat", "src\tools\benchcat\benchcat.vcxproj", "{2C836962-9543-4CE5-B834-D28E1F124B66}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleMonitor", "src\tools\ConsoleMonitor\ConsoleMonitor.vcxproj", "{328729E9-6723-416E-9C98-951F1473BBE1}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ConsoleBench", "src\tools\ConsoleBench\ConsoleBench.vcxproj", "{BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution AuditMode|Any CPU = AuditMode|Any CPU - AuditMode|ARM = AuditMode|ARM AuditMode|ARM64 = AuditMode|ARM64 - AuditMode|DotNet_x64Test = AuditMode|DotNet_x64Test - AuditMode|DotNet_x86Test = AuditMode|DotNet_x86Test AuditMode|x64 = AuditMode|x64 AuditMode|x86 = AuditMode|x86 Debug|Any CPU = Debug|Any CPU - Debug|ARM = Debug|ARM Debug|ARM64 = Debug|ARM64 - Debug|DotNet_x64Test = Debug|DotNet_x64Test - Debug|DotNet_x86Test = Debug|DotNet_x86Test Debug|x64 = Debug|x64 Debug|x86 = Debug|x86 Fuzzing|Any CPU = Fuzzing|Any CPU - Fuzzing|ARM = Fuzzing|ARM Fuzzing|ARM64 = Fuzzing|ARM64 - Fuzzing|DotNet_x64Test = Fuzzing|DotNet_x64Test - Fuzzing|DotNet_x86Test = Fuzzing|DotNet_x86Test Fuzzing|x64 = Fuzzing|x64 Fuzzing|x86 = Fuzzing|x86 Release|Any CPU = Release|Any CPU - Release|ARM = Release|ARM Release|ARM64 = Release|ARM64 - Release|DotNet_x64Test = Release|DotNet_x64Test - Release|DotNet_x86Test = Release|DotNet_x86Test Release|x64 = Release|x64 Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|Any CPU.ActiveCfg = Debug|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|ARM.ActiveCfg = Debug|x64 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|ARM.Build.0 = Debug|x64 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|ARM.Deploy.0 = Debug|x64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.AuditMode|x86.ActiveCfg = Release|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|Any CPU.ActiveCfg = Debug|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|ARM.ActiveCfg = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|ARM64.Build.0 = Debug|ARM64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|ARM64.Deploy.0 = Debug|ARM64 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|DotNet_x64Test.ActiveCfg = Debug|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|DotNet_x86Test.ActiveCfg = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|x64.Deploy.0 = Debug|x64 @@ -468,19 +454,13 @@ Global {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|x86.Build.0 = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Debug|x86.Deploy.0 = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Fuzzing|Any CPU.ActiveCfg = Debug|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Fuzzing|ARM.ActiveCfg = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Fuzzing|DotNet_x64Test.ActiveCfg = Debug|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Fuzzing|DotNet_x86Test.ActiveCfg = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Fuzzing|x64.ActiveCfg = Debug|x64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Fuzzing|x86.ActiveCfg = Debug|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|Any CPU.ActiveCfg = Release|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|ARM.ActiveCfg = Release|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|ARM64.Build.0 = Release|ARM64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|ARM64.Deploy.0 = Release|ARM64 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|DotNet_x64Test.ActiveCfg = Release|x86 - {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|DotNet_x86Test.ActiveCfg = Release|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|x64.Deploy.0 = Release|x64 @@ -488,1975 +468,1220 @@ Global {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|x86.Build.0 = Release|x86 {CA5CAD1A-224A-4171-B13A-F16E576FDD12}.Release|x86.Deploy.0 = Release|x86 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|x64.ActiveCfg = Release|x64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|x86.ActiveCfg = Release|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|ARM.ActiveCfg = Debug|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|ARM64.Build.0 = Debug|ARM64 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|x64.ActiveCfg = Debug|x64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|x64.Build.0 = Debug|x64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|x86.ActiveCfg = Debug|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Debug|x86.Build.0 = Debug|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|Any CPU.ActiveCfg = Release|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|ARM.ActiveCfg = Release|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|ARM64.ActiveCfg = Release|ARM64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|ARM64.Build.0 = Release|ARM64 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|x64.ActiveCfg = Release|x64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|x64.Build.0 = Release|x64 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|x86.ActiveCfg = Release|Win32 {9CBD7DFA-1754-4A9D-93D7-857A9D17CB1B}.Release|x86.Build.0 = Release|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.AuditMode|x64.ActiveCfg = Release|x64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.AuditMode|x86.ActiveCfg = Release|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|ARM.ActiveCfg = Debug|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|ARM64.ActiveCfg = Debug|ARM64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|ARM64.Build.0 = Debug|ARM64 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|x64.ActiveCfg = Debug|x64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|x64.Build.0 = Debug|x64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|x86.ActiveCfg = Debug|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Debug|x86.Build.0 = Debug|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|x64.Build.0 = Fuzzing|x64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|Any CPU.ActiveCfg = Release|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|ARM.ActiveCfg = Release|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|ARM64.ActiveCfg = Release|ARM64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|ARM64.Build.0 = Release|ARM64 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|x64.ActiveCfg = Release|x64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|x64.Build.0 = Release|x64 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|x86.ActiveCfg = Release|Win32 {345FD5A4-B32B-4F29-BD1C-B033BD2C35CC}.Release|x86.Build.0 = Release|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.AuditMode|x64.ActiveCfg = Release|x64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.AuditMode|x86.ActiveCfg = Release|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|ARM.ActiveCfg = Debug|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|ARM64.Build.0 = Debug|ARM64 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|x64.ActiveCfg = Debug|x64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|x64.Build.0 = Debug|x64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|x86.ActiveCfg = Debug|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Debug|x86.Build.0 = Debug|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|x64.Build.0 = Fuzzing|x64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|Any CPU.ActiveCfg = Release|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|ARM.ActiveCfg = Release|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|ARM64.ActiveCfg = Release|ARM64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|ARM64.Build.0 = Release|ARM64 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|x64.ActiveCfg = Release|x64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|x64.Build.0 = Release|x64 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|x86.ActiveCfg = Release|Win32 {2FD12FBB-1DDB-46D8-B818-1023C624CACA}.Release|x86.Build.0 = Release|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|x64.ActiveCfg = AuditMode|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|x64.Build.0 = AuditMode|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.AuditMode|x86.ActiveCfg = Release|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|ARM.ActiveCfg = Debug|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|ARM64.ActiveCfg = Debug|ARM64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|ARM64.Build.0 = Debug|ARM64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|x64.ActiveCfg = Debug|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|x64.Build.0 = Debug|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|x86.ActiveCfg = Debug|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Debug|x86.Build.0 = Debug|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|x64.Build.0 = Fuzzing|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|Any CPU.ActiveCfg = Release|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|ARM.ActiveCfg = Release|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|ARM64.ActiveCfg = Release|ARM64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|ARM64.Build.0 = Release|ARM64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|DotNet_x64Test.Build.0 = Release|x64 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|DotNet_x86Test.Build.0 = Release|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|x64.ActiveCfg = Release|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|x64.Build.0 = Release|x64 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|x86.ActiveCfg = Release|Win32 {3AE13314-1939-4DFA-9C14-38CA0834050C}.Release|x86.Build.0 = Release|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|x64.ActiveCfg = AuditMode|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|x64.Build.0 = AuditMode|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|x86.ActiveCfg = Release|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|ARM.ActiveCfg = Debug|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|ARM64.ActiveCfg = Debug|ARM64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|ARM64.Build.0 = Debug|ARM64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x64.ActiveCfg = Debug|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x64.Build.0 = Debug|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x86.ActiveCfg = Debug|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x86.Build.0 = Debug|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|x64.Build.0 = Fuzzing|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|Any CPU.ActiveCfg = Release|Win32 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|ARM.ActiveCfg = Release|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|ARM64.ActiveCfg = Release|ARM64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|ARM64.Build.0 = Release|ARM64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|DotNet_x64Test.Build.0 = Release|x64 - {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|x64.ActiveCfg = Release|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|x64.Build.0 = Release|x64 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|x86.ActiveCfg = Release|Win32 {DCF55140-EF6A-4736-A403-957E4F7430BB}.Release|x86.Build.0 = Release|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|x64.ActiveCfg = AuditMode|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|x64.Build.0 = AuditMode|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.AuditMode|x86.ActiveCfg = Release|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|ARM.ActiveCfg = Debug|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|ARM64.Build.0 = Debug|ARM64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x64.ActiveCfg = Debug|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x64.Build.0 = Debug|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x86.ActiveCfg = Debug|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Debug|x86.Build.0 = Debug|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|x64.Build.0 = Fuzzing|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|Any CPU.ActiveCfg = Release|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|ARM.ActiveCfg = Release|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|ARM64.ActiveCfg = Release|ARM64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|ARM64.Build.0 = Release|ARM64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|DotNet_x64Test.Build.0 = Release|x64 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|DotNet_x86Test.Build.0 = Release|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|x64.ActiveCfg = Release|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|x64.Build.0 = Release|x64 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|x86.ActiveCfg = Release|Win32 {1CF55140-EF6A-4736-A403-957E4F7430BB}.Release|x86.Build.0 = Release|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|x64.ActiveCfg = Release|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|x64.Build.0 = Release|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.AuditMode|x86.ActiveCfg = Release|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|ARM.ActiveCfg = Debug|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|ARM64.ActiveCfg = Debug|ARM64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|ARM64.Build.0 = Debug|ARM64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|x64.ActiveCfg = Debug|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|x64.Build.0 = Debug|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|x86.ActiveCfg = Debug|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Debug|x86.Build.0 = Debug|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|x64.Build.0 = Fuzzing|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|Any CPU.ActiveCfg = Release|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|ARM.ActiveCfg = Release|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|ARM64.ActiveCfg = Release|ARM64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|ARM64.Build.0 = Release|ARM64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|DotNet_x64Test.Build.0 = Release|x64 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|DotNet_x86Test.Build.0 = Release|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|x64.ActiveCfg = Release|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|x64.Build.0 = Release|x64 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|x86.ActiveCfg = Release|Win32 {AF0A096A-8B3A-4949-81EF-7DF8F0FEE91F}.Release|x86.Build.0 = Release|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.AuditMode|x64.ActiveCfg = Release|x64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.AuditMode|x86.ActiveCfg = Release|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|ARM.ActiveCfg = Debug|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|ARM64.Build.0 = Debug|ARM64 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|x64.ActiveCfg = Debug|x64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|x64.Build.0 = Debug|x64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|x86.ActiveCfg = Debug|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Debug|x86.Build.0 = Debug|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|x64.Build.0 = Fuzzing|x64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|Any CPU.ActiveCfg = Release|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|ARM.ActiveCfg = Release|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|ARM64.ActiveCfg = Release|ARM64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|ARM64.Build.0 = Release|ARM64 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|x64.ActiveCfg = Release|x64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|x64.Build.0 = Release|x64 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|x86.ActiveCfg = Release|Win32 {1C959542-BAC2-4E55-9A6D-13251914CBB9}.Release|x86.Build.0 = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954746}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.AuditMode|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8562EC954746}.AuditMode|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|ARM.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|ARM64.ActiveCfg = Debug|ARM64 {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|ARM64.Build.0 = Debug|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|x64.ActiveCfg = Debug|x64 {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|x64.Build.0 = Debug|x64 {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|x86.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Debug|x86.Build.0 = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|x64.Build.0 = Fuzzing|x64 {06EC74CB-9A12-429C-B551-8562EC954746}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Release|Any CPU.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.Release|ARM.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Release|ARM64.ActiveCfg = Release|ARM64 {06EC74CB-9A12-429C-B551-8562EC954746}.Release|ARM64.Build.0 = Release|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954746}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8562EC954746}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Release|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8562EC954746}.Release|x64.Build.0 = Release|x64 {06EC74CB-9A12-429C-B551-8562EC954746}.Release|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954746}.Release|x86.Build.0 = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954747}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.AuditMode|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8562EC954747}.AuditMode|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|ARM.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|ARM64.ActiveCfg = Debug|ARM64 {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|ARM64.Build.0 = Debug|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|x64.ActiveCfg = Debug|x64 {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|x64.Build.0 = Debug|x64 {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|x86.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Debug|x86.Build.0 = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954747}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {06EC74CB-9A12-429C-B551-8562EC954747}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Release|Any CPU.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.Release|ARM.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Release|ARM64.ActiveCfg = Release|ARM64 {06EC74CB-9A12-429C-B551-8562EC954747}.Release|ARM64.Build.0 = Release|ARM64 - {06EC74CB-9A12-429C-B551-8562EC954747}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8562EC954747}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Release|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8562EC954747}.Release|x64.Build.0 = Release|x64 {06EC74CB-9A12-429C-B551-8562EC954747}.Release|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC954747}.Release|x86.Build.0 = Release|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.AuditMode|x64.ActiveCfg = Release|x64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.AuditMode|x86.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|ARM.ActiveCfg = Debug|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|ARM64.Build.0 = Debug|ARM64 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|x64.ActiveCfg = Debug|x64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|x64.Build.0 = Debug|x64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|x86.ActiveCfg = Debug|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Debug|x86.Build.0 = Debug|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|Any CPU.ActiveCfg = Release|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|ARM.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|ARM64.ActiveCfg = Release|ARM64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|ARM64.Build.0 = Release|ARM64 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|x64.ActiveCfg = Release|x64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|x64.Build.0 = Release|x64 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|x86.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8AAD-04164CB628C9}.Release|x86.Build.0 = Release|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.AuditMode|x64.ActiveCfg = Release|x64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.AuditMode|x86.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|ARM.ActiveCfg = Debug|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|ARM64.Build.0 = Debug|ARM64 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|x64.ActiveCfg = Debug|x64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|x64.Build.0 = Debug|x64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|x86.ActiveCfg = Debug|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Debug|x86.Build.0 = Debug|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|Any CPU.ActiveCfg = Release|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|ARM.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|ARM64.ActiveCfg = Release|ARM64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|ARM64.Build.0 = Release|ARM64 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|x64.ActiveCfg = Release|x64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|x64.Build.0 = Release|x64 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|x86.ActiveCfg = Release|Win32 {531C23E7-4B76-4C08-8BBD-04164CB628C9}.Release|x86.Build.0 = Release|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.AuditMode|x64.ActiveCfg = Release|x64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.AuditMode|x86.ActiveCfg = Release|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|ARM.ActiveCfg = Debug|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|ARM64.Build.0 = Debug|ARM64 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|x64.ActiveCfg = Debug|x64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|x64.Build.0 = Debug|x64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Debug|x86.ActiveCfg = Debug|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|Any CPU.ActiveCfg = Release|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|ARM.ActiveCfg = Release|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|ARM64.ActiveCfg = Release|ARM64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|ARM64.Build.0 = Release|ARM64 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|x64.ActiveCfg = Release|x64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|x64.Build.0 = Release|x64 {8CDB8850-7484-4EC7-B45B-181F85B2EE54}.Release|x86.ActiveCfg = Release|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {12144E07-FE63-4D33-9231-748B8D8C3792}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.AuditMode|x64.ActiveCfg = Release|x64 {12144E07-FE63-4D33-9231-748B8D8C3792}.AuditMode|x86.ActiveCfg = Release|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|ARM.ActiveCfg = Debug|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|ARM64.ActiveCfg = Debug|ARM64 {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|ARM64.Build.0 = Debug|ARM64 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|x64.ActiveCfg = Debug|x64 {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|x64.Build.0 = Debug|x64 {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|x86.ActiveCfg = Debug|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Debug|x86.Build.0 = Debug|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {12144E07-FE63-4D33-9231-748B8D8C3792}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|Any CPU.ActiveCfg = Release|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|ARM.ActiveCfg = Release|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|ARM64.ActiveCfg = Release|ARM64 {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|ARM64.Build.0 = Release|ARM64 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|x64.ActiveCfg = Release|x64 {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|x64.Build.0 = Release|x64 {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|x86.ActiveCfg = Release|Win32 {12144E07-FE63-4D33-9231-748B8D8C3792}.Release|x86.Build.0 = Release|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.AuditMode|x64.ActiveCfg = Release|x64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.AuditMode|x86.ActiveCfg = Release|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|ARM.ActiveCfg = Debug|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|ARM64.Build.0 = Debug|ARM64 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|x64.ActiveCfg = Debug|x64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|x64.Build.0 = Debug|x64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|x86.ActiveCfg = Debug|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Debug|x86.Build.0 = Debug|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|Any CPU.ActiveCfg = Release|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|ARM.ActiveCfg = Release|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|ARM64.ActiveCfg = Release|ARM64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|ARM64.Build.0 = Release|ARM64 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|x64.ActiveCfg = Release|x64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|x64.Build.0 = Release|x64 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|x86.ActiveCfg = Release|Win32 {6AF01638-84CF-4B65-9870-484DFFCAC772}.Release|x86.Build.0 = Release|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.AuditMode|x64.ActiveCfg = Release|x64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.AuditMode|x86.ActiveCfg = Release|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|ARM.ActiveCfg = Debug|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|ARM64.ActiveCfg = Debug|ARM64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|ARM64.Build.0 = Debug|ARM64 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|x64.ActiveCfg = Debug|x64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|x64.Build.0 = Debug|x64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|x86.ActiveCfg = Debug|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Debug|x86.Build.0 = Debug|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|Any CPU.ActiveCfg = Release|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|ARM.ActiveCfg = Release|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|ARM64.ActiveCfg = Release|ARM64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|ARM64.Build.0 = Release|ARM64 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|x64.ActiveCfg = Release|x64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|x64.Build.0 = Release|x64 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|x86.ActiveCfg = Release|Win32 {96927B31-D6E8-4ABD-B03E-A5088A30BEBE}.Release|x86.Build.0 = Release|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.AuditMode|x64.ActiveCfg = Release|x64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.AuditMode|x86.ActiveCfg = Release|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|ARM.ActiveCfg = Debug|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|ARM64.Build.0 = Debug|ARM64 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|x64.ActiveCfg = Debug|x64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|x64.Build.0 = Debug|x64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|x86.ActiveCfg = Debug|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Debug|x86.Build.0 = Debug|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|Any CPU.ActiveCfg = Release|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|ARM.ActiveCfg = Release|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|ARM64.ActiveCfg = Release|ARM64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|ARM64.Build.0 = Release|ARM64 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|x64.ActiveCfg = Release|x64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|x64.Build.0 = Release|x64 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|x86.ActiveCfg = Release|Win32 {F210A4AE-E02A-4BFC-80BB-F50A672FE763}.Release|x86.Build.0 = Release|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.AuditMode|x64.ActiveCfg = Release|x64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.AuditMode|x86.ActiveCfg = Release|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|ARM.ActiveCfg = Debug|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|ARM64.ActiveCfg = Debug|ARM64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|ARM64.Build.0 = Debug|ARM64 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|x64.ActiveCfg = Debug|x64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|x64.Build.0 = Debug|x64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|x86.ActiveCfg = Debug|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Debug|x86.Build.0 = Debug|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|x64.Build.0 = Fuzzing|x64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|Any CPU.ActiveCfg = Release|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|ARM.ActiveCfg = Release|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|ARM64.ActiveCfg = Release|ARM64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|ARM64.Build.0 = Release|ARM64 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|x64.ActiveCfg = Release|x64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|x64.Build.0 = Release|x64 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|x86.ActiveCfg = Release|Win32 {5D23E8E1-3C64-4CC1-A8F7-6861677F7239}.Release|x86.Build.0 = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820262}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.AuditMode|x64.ActiveCfg = Release|x64 {18D09A24-8240-42D6-8CB6-236EEE820262}.AuditMode|x86.ActiveCfg = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|ARM.ActiveCfg = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|ARM64.ActiveCfg = Debug|ARM64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|ARM64.Build.0 = Debug|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|x64.ActiveCfg = Debug|x64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|x64.Build.0 = Debug|x64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|x86.ActiveCfg = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Debug|x86.Build.0 = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|x64.Build.0 = Fuzzing|x64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|Any CPU.ActiveCfg = Release|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|ARM.ActiveCfg = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|ARM64.ActiveCfg = Release|ARM64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|ARM64.Build.0 = Release|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|x64.ActiveCfg = Release|x64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|x64.Build.0 = Release|x64 {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|x86.ActiveCfg = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820262}.Release|x86.Build.0 = Release|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|Any CPU.ActiveCfg = Debug|ARM64 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|ARM.ActiveCfg = Release|ARM64 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|ARM.Build.0 = Release|ARM64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|ARM64.ActiveCfg = Debug|Win32 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|ARM64 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|ARM64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|x64.ActiveCfg = Release|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.AuditMode|x86.ActiveCfg = Release|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|ARM.ActiveCfg = Debug|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|ARM64.ActiveCfg = Debug|Win32 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|x64.ActiveCfg = Debug|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|x64.Build.0 = Debug|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|x86.ActiveCfg = Debug|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Debug|x86.Build.0 = Debug|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Fuzzing|Any CPU.ActiveCfg = Debug|x64 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Fuzzing|ARM.ActiveCfg = Debug|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Fuzzing|ARM64.ActiveCfg = Release|ARM64 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Fuzzing|DotNet_x64Test.ActiveCfg = Debug|x64 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Fuzzing|DotNet_x86Test.ActiveCfg = Debug|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Fuzzing|x64.ActiveCfg = Debug|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Fuzzing|x86.ActiveCfg = Release|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|Any CPU.ActiveCfg = Release|Win32 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|ARM.ActiveCfg = Release|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|ARM64.ActiveCfg = Release|ARM64 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|x64.ActiveCfg = Release|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|x64.Build.0 = Release|x64 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|x86.ActiveCfg = Release|Win32 {C17E1BF3-9D34-4779-9458-A8EF98CC5662}.Release|x86.Build.0 = Release|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|Any CPU.ActiveCfg = Debug|ARM64 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|ARM.ActiveCfg = Release|ARM64 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|ARM.Build.0 = Release|ARM64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|ARM64.ActiveCfg = Debug|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|ARM64 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|ARM64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|x64.ActiveCfg = Release|x64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.AuditMode|x86.ActiveCfg = Release|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|ARM.ActiveCfg = Debug|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|ARM64.ActiveCfg = Debug|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|x64.ActiveCfg = Debug|x64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|x64.Build.0 = Debug|x64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|x86.ActiveCfg = Debug|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Debug|x86.Build.0 = Debug|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Fuzzing|Any CPU.ActiveCfg = Debug|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Fuzzing|ARM.ActiveCfg = Debug|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Fuzzing|DotNet_x64Test.ActiveCfg = Debug|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Fuzzing|DotNet_x86Test.ActiveCfg = Debug|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Fuzzing|x64.ActiveCfg = Debug|x64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Fuzzing|x86.ActiveCfg = Debug|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|Any CPU.ActiveCfg = Release|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|ARM.ActiveCfg = Release|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|ARM64.ActiveCfg = Release|ARM64 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|x64.ActiveCfg = Release|x64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|x64.Build.0 = Release|x64 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|x86.ActiveCfg = Release|Win32 {099193A0-1E43-4BBC-BA7F-7B351E1342DF}.Release|x86.Build.0 = Release|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.AuditMode|x64.ActiveCfg = Release|x64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.AuditMode|x86.ActiveCfg = Release|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|ARM.ActiveCfg = Debug|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|ARM64.ActiveCfg = Debug|ARM64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|ARM64.Build.0 = Debug|ARM64 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|x64.ActiveCfg = Debug|x64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|x64.Build.0 = Debug|x64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|x86.ActiveCfg = Debug|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Debug|x86.Build.0 = Debug|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|Any CPU.ActiveCfg = Release|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|ARM.ActiveCfg = Release|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|ARM64.ActiveCfg = Release|ARM64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|ARM64.Build.0 = Release|ARM64 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|x64.ActiveCfg = Release|x64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|x64.Build.0 = Release|x64 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|x86.ActiveCfg = Release|Win32 {FC802440-AD6A-4919-8F2C-7701F2B38D79}.Release|x86.Build.0 = Release|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {919544AC-D39B-463F-8414-3C3C67CF727C}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.AuditMode|x64.ActiveCfg = Release|x64 {919544AC-D39B-463F-8414-3C3C67CF727C}.AuditMode|x86.ActiveCfg = Release|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|ARM.ActiveCfg = Debug|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|ARM64.ActiveCfg = Debug|ARM64 {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|ARM64.Build.0 = Debug|ARM64 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|x64.ActiveCfg = Debug|x64 {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|x64.Build.0 = Debug|x64 {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|x86.ActiveCfg = Debug|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Debug|x86.Build.0 = Debug|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {919544AC-D39B-463F-8414-3C3C67CF727C}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|Any CPU.ActiveCfg = Release|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|ARM.ActiveCfg = Release|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|ARM64.ActiveCfg = Release|ARM64 {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|ARM64.Build.0 = Release|ARM64 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|x64.ActiveCfg = Release|x64 {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|x64.Build.0 = Release|x64 {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|x86.ActiveCfg = Release|Win32 {919544AC-D39B-463F-8414-3C3C67CF727C}.Release|x86.Build.0 = Release|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.AuditMode|x64.ActiveCfg = Release|x64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.AuditMode|x86.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|ARM.ActiveCfg = Debug|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|ARM64.ActiveCfg = Debug|ARM64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|ARM64.Build.0 = Debug|ARM64 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|x64.ActiveCfg = Debug|x64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|x64.Build.0 = Debug|x64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|x86.ActiveCfg = Debug|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Debug|x86.Build.0 = Debug|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|Any CPU.ActiveCfg = Release|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|ARM.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|ARM64.ActiveCfg = Release|ARM64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|ARM64.Build.0 = Release|ARM64 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|x64.ActiveCfg = Release|x64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|x64.Build.0 = Release|x64 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|x86.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B36-F480018ED064}.Release|x86.Build.0 = Release|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {06EC74CB-9A12-429C-B551-8532EC964726}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.AuditMode|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8532EC964726}.AuditMode|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|ARM.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|ARM64.ActiveCfg = Debug|ARM64 {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|ARM64.Build.0 = Debug|ARM64 - {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|x64.ActiveCfg = Debug|x64 {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|x64.Build.0 = Debug|x64 {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|x86.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Debug|x86.Build.0 = Debug|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|x64.Build.0 = Fuzzing|x64 {06EC74CB-9A12-429C-B551-8532EC964726}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Release|Any CPU.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.Release|ARM.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Release|ARM64.ActiveCfg = Release|ARM64 {06EC74CB-9A12-429C-B551-8532EC964726}.Release|ARM64.Build.0 = Release|ARM64 - {06EC74CB-9A12-429C-B551-8532EC964726}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8532EC964726}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Release|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8532EC964726}.Release|x64.Build.0 = Release|x64 {06EC74CB-9A12-429C-B551-8532EC964726}.Release|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8532EC964726}.Release|x86.Build.0 = Release|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.AuditMode|x64.ActiveCfg = Release|x64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.AuditMode|x86.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|ARM.ActiveCfg = Debug|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|ARM64.ActiveCfg = Debug|ARM64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|ARM64.Build.0 = Debug|ARM64 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|x64.ActiveCfg = Debug|x64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|x64.Build.0 = Debug|x64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|x86.ActiveCfg = Debug|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Debug|x86.Build.0 = Debug|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|x64.Build.0 = Fuzzing|x64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|Any CPU.ActiveCfg = Release|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|ARM.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|ARM64.ActiveCfg = Release|ARM64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|ARM64.Build.0 = Release|ARM64 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|x64.ActiveCfg = Release|x64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|x64.Build.0 = Release|x64 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|x86.ActiveCfg = Release|Win32 {ED82003F-FC5D-4E94-8B47-F480018ED064}.Release|x86.Build.0 = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {06EC74CB-9A12-429C-B551-8562EC964846}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.AuditMode|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8562EC964846}.AuditMode|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|ARM.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|ARM64.ActiveCfg = Debug|ARM64 {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|ARM64.Build.0 = Debug|ARM64 - {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|x64.ActiveCfg = Debug|x64 {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|x64.Build.0 = Debug|x64 {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|x86.ActiveCfg = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Debug|x86.Build.0 = Debug|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|x64.Build.0 = Fuzzing|x64 {06EC74CB-9A12-429C-B551-8562EC964846}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Release|Any CPU.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.Release|ARM.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Release|ARM64.ActiveCfg = Release|ARM64 {06EC74CB-9A12-429C-B551-8562EC964846}.Release|ARM64.Build.0 = Release|ARM64 - {06EC74CB-9A12-429C-B551-8562EC964846}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {06EC74CB-9A12-429C-B551-8562EC964846}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Release|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-429C-B551-8562EC964846}.Release|x64.Build.0 = Release|x64 {06EC74CB-9A12-429C-B551-8562EC964846}.Release|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-429C-B551-8562EC964846}.Release|x86.Build.0 = Release|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.AuditMode|x64.ActiveCfg = Release|x64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.AuditMode|x86.ActiveCfg = Release|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|ARM.ActiveCfg = Debug|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|ARM64.ActiveCfg = Debug|ARM64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|ARM64.Build.0 = Debug|ARM64 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|x64.ActiveCfg = Debug|x64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|x64.Build.0 = Debug|x64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|x86.ActiveCfg = Debug|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Debug|x86.Build.0 = Debug|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|Any CPU.ActiveCfg = Release|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|ARM.ActiveCfg = Release|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|ARM64.ActiveCfg = Release|ARM64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|ARM64.Build.0 = Release|ARM64 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|x64.ActiveCfg = Release|x64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|x64.Build.0 = Release|x64 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|x86.ActiveCfg = Release|Win32 {D3B92829-26CB-411A-BDA2-7F5DA3D25DD4}.Release|x86.Build.0 = Release|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.AuditMode|x64.ActiveCfg = Release|x64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.AuditMode|x86.ActiveCfg = Release|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|ARM.ActiveCfg = Debug|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|ARM64.ActiveCfg = Debug|ARM64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|ARM64.Build.0 = Debug|ARM64 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|x64.ActiveCfg = Debug|x64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|x64.Build.0 = Debug|x64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|x86.ActiveCfg = Debug|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Debug|x86.Build.0 = Debug|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|Any CPU.ActiveCfg = Release|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|ARM.ActiveCfg = Release|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|ARM64.ActiveCfg = Release|ARM64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|ARM64.Build.0 = Release|ARM64 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|x64.ActiveCfg = Release|x64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|x64.Build.0 = Release|x64 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|x86.ActiveCfg = Release|Win32 {C7A6A5D9-60BE-4AEB-A5F6-AFE352F86CBB}.Release|x86.Build.0 = Release|Win32 {990F2657-8580-4828-943F-5DD657D11842}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {990F2657-8580-4828-943F-5DD657D11842}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {990F2657-8580-4828-943F-5DD657D11842}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {990F2657-8580-4828-943F-5DD657D11842}.AuditMode|x64.ActiveCfg = Release|x64 {990F2657-8580-4828-943F-5DD657D11842}.AuditMode|x86.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.Debug|ARM.ActiveCfg = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Debug|ARM64.ActiveCfg = Debug|ARM64 {990F2657-8580-4828-943F-5DD657D11842}.Debug|ARM64.Build.0 = Debug|ARM64 - {990F2657-8580-4828-943F-5DD657D11842}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Debug|x64.ActiveCfg = Debug|x64 {990F2657-8580-4828-943F-5DD657D11842}.Debug|x64.Build.0 = Debug|x64 {990F2657-8580-4828-943F-5DD657D11842}.Debug|x86.ActiveCfg = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Debug|x86.Build.0 = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|x64.Build.0 = Fuzzing|x64 {990F2657-8580-4828-943F-5DD657D11842}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Release|Any CPU.ActiveCfg = Release|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.Release|ARM.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Release|ARM64.ActiveCfg = Release|ARM64 {990F2657-8580-4828-943F-5DD657D11842}.Release|ARM64.Build.0 = Release|ARM64 - {990F2657-8580-4828-943F-5DD657D11842}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {990F2657-8580-4828-943F-5DD657D11842}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Release|x64.ActiveCfg = Release|x64 {990F2657-8580-4828-943F-5DD657D11842}.Release|x64.Build.0 = Release|x64 {990F2657-8580-4828-943F-5DD657D11842}.Release|x86.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11842}.Release|x86.Build.0 = Release|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {814DBDDE-894E-4327-A6E1-740504850098}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.AuditMode|x64.ActiveCfg = Release|x64 {814DBDDE-894E-4327-A6E1-740504850098}.AuditMode|x86.ActiveCfg = Release|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.Debug|ARM.ActiveCfg = Debug|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Debug|ARM64.ActiveCfg = Debug|ARM64 {814DBDDE-894E-4327-A6E1-740504850098}.Debug|ARM64.Build.0 = Debug|ARM64 - {814DBDDE-894E-4327-A6E1-740504850098}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Debug|x64.ActiveCfg = Debug|x64 {814DBDDE-894E-4327-A6E1-740504850098}.Debug|x64.Build.0 = Debug|x64 {814DBDDE-894E-4327-A6E1-740504850098}.Debug|x86.ActiveCfg = Debug|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Debug|x86.Build.0 = Debug|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {814DBDDE-894E-4327-A6E1-740504850098}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {814DBDDE-894E-4327-A6E1-740504850098}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Release|Any CPU.ActiveCfg = Release|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.Release|ARM.ActiveCfg = Release|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Release|ARM64.ActiveCfg = Release|ARM64 {814DBDDE-894E-4327-A6E1-740504850098}.Release|ARM64.Build.0 = Release|ARM64 - {814DBDDE-894E-4327-A6E1-740504850098}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {814DBDDE-894E-4327-A6E1-740504850098}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Release|x64.ActiveCfg = Release|x64 {814DBDDE-894E-4327-A6E1-740504850098}.Release|x64.Build.0 = Release|x64 {814DBDDE-894E-4327-A6E1-740504850098}.Release|x86.ActiveCfg = Release|Win32 {814DBDDE-894E-4327-A6E1-740504850098}.Release|x86.Build.0 = Release|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {814CBEEE-894E-4327-A6E1-740504850098}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.AuditMode|x64.ActiveCfg = Release|x64 {814CBEEE-894E-4327-A6E1-740504850098}.AuditMode|x86.ActiveCfg = Release|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.Debug|ARM.ActiveCfg = Debug|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Debug|ARM64.ActiveCfg = Debug|ARM64 {814CBEEE-894E-4327-A6E1-740504850098}.Debug|ARM64.Build.0 = Debug|ARM64 - {814CBEEE-894E-4327-A6E1-740504850098}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Debug|x64.ActiveCfg = Debug|x64 {814CBEEE-894E-4327-A6E1-740504850098}.Debug|x64.Build.0 = Debug|x64 {814CBEEE-894E-4327-A6E1-740504850098}.Debug|x86.ActiveCfg = Debug|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Debug|x86.Build.0 = Debug|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {814CBEEE-894E-4327-A6E1-740504850098}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {814CBEEE-894E-4327-A6E1-740504850098}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Release|Any CPU.ActiveCfg = Release|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.Release|ARM.ActiveCfg = Release|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Release|ARM64.ActiveCfg = Release|ARM64 {814CBEEE-894E-4327-A6E1-740504850098}.Release|ARM64.Build.0 = Release|ARM64 - {814CBEEE-894E-4327-A6E1-740504850098}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {814CBEEE-894E-4327-A6E1-740504850098}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Release|x64.ActiveCfg = Release|x64 {814CBEEE-894E-4327-A6E1-740504850098}.Release|x64.Build.0 = Release|x64 {814CBEEE-894E-4327-A6E1-740504850098}.Release|x86.ActiveCfg = Release|Win32 {814CBEEE-894E-4327-A6E1-740504850098}.Release|x86.Build.0 = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|x64.ActiveCfg = AuditMode|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|x64.Build.0 = AuditMode|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.AuditMode|x86.Build.0 = AuditMode|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|ARM.ActiveCfg = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|ARM64.ActiveCfg = Debug|ARM64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|ARM64.Build.0 = Debug|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|x64.ActiveCfg = Debug|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|x64.Build.0 = Debug|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|x86.ActiveCfg = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Debug|x86.Build.0 = Debug|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|x64.Build.0 = Fuzzing|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|Any CPU.ActiveCfg = Release|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|ARM.ActiveCfg = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|ARM64.ActiveCfg = Release|ARM64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|ARM64.Build.0 = Release|ARM64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|DotNet_x64Test.Build.0 = Release|x64 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|DotNet_x86Test.Build.0 = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|x64.ActiveCfg = Release|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|x64.Build.0 = Release|x64 {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|x86.ActiveCfg = Release|Win32 {18D09A24-8240-42D6-8CB6-236EEE820263}.Release|x86.Build.0 = Release|Win32 {990F2657-8580-4828-943F-5DD657D11843}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {990F2657-8580-4828-943F-5DD657D11843}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {990F2657-8580-4828-943F-5DD657D11843}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {990F2657-8580-4828-943F-5DD657D11843}.AuditMode|x64.ActiveCfg = Release|x64 {990F2657-8580-4828-943F-5DD657D11843}.AuditMode|x86.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.Debug|ARM.ActiveCfg = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Debug|ARM64.ActiveCfg = Debug|ARM64 {990F2657-8580-4828-943F-5DD657D11843}.Debug|ARM64.Build.0 = Debug|ARM64 - {990F2657-8580-4828-943F-5DD657D11843}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Debug|x64.ActiveCfg = Debug|x64 {990F2657-8580-4828-943F-5DD657D11843}.Debug|x64.Build.0 = Debug|x64 {990F2657-8580-4828-943F-5DD657D11843}.Debug|x86.ActiveCfg = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Debug|x86.Build.0 = Debug|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {990F2657-8580-4828-943F-5DD657D11843}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {990F2657-8580-4828-943F-5DD657D11843}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Release|Any CPU.ActiveCfg = Release|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.Release|ARM.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Release|ARM64.ActiveCfg = Release|ARM64 {990F2657-8580-4828-943F-5DD657D11843}.Release|ARM64.Build.0 = Release|ARM64 - {990F2657-8580-4828-943F-5DD657D11843}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {990F2657-8580-4828-943F-5DD657D11843}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Release|x64.ActiveCfg = Release|x64 {990F2657-8580-4828-943F-5DD657D11843}.Release|x64.Build.0 = Release|x64 {990F2657-8580-4828-943F-5DD657D11843}.Release|x86.ActiveCfg = Release|Win32 {990F2657-8580-4828-943F-5DD657D11843}.Release|x86.Build.0 = Release|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|x64.ActiveCfg = AuditMode|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|x64.Build.0 = AuditMode|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.AuditMode|x86.Build.0 = AuditMode|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|ARM.ActiveCfg = Debug|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|ARM64.ActiveCfg = Debug|ARM64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|ARM64.Build.0 = Debug|ARM64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|x64.ActiveCfg = Debug|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|x64.Build.0 = Debug|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|x86.ActiveCfg = Debug|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Debug|x86.Build.0 = Debug|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|x64.Build.0 = Fuzzing|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|Any CPU.ActiveCfg = Release|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|ARM.ActiveCfg = Release|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|ARM64.ActiveCfg = Release|ARM64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|ARM64.Build.0 = Release|ARM64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|DotNet_x64Test.Build.0 = Release|x64 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|DotNet_x86Test.Build.0 = Release|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|x64.ActiveCfg = Release|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|x64.Build.0 = Release|x64 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|x86.ActiveCfg = Release|Win32 {0CF235BD-2DA0-407E-90EE-C467E8BBC714}.Release|x86.Build.0 = Release|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|x64.ActiveCfg = AuditMode|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|x64.Build.0 = AuditMode|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|x86.ActiveCfg = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.AuditMode|x86.Build.0 = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|ARM.ActiveCfg = Debug|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|ARM64.Build.0 = Debug|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|x64.ActiveCfg = Debug|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|x64.Build.0 = Debug|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|x86.ActiveCfg = Debug|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Debug|x86.Build.0 = Debug|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|x64.Build.0 = Fuzzing|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|Any CPU.ActiveCfg = Release|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|ARM.ActiveCfg = Release|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|ARM64.ActiveCfg = Release|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|ARM64.Build.0 = Release|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|DotNet_x64Test.Build.0 = Release|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|DotNet_x86Test.Build.0 = Release|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|x64.ActiveCfg = Release|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|x64.Build.0 = Release|x64 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|x86.ActiveCfg = Release|Win32 - {48D21369-3D7B-4431-9967-24E81292CF62}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|x64.ActiveCfg = AuditMode|x64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|x64.Build.0 = AuditMode|x64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|x64.ActiveCfg = AuditMode|x64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|x64.Build.0 = AuditMode|x64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|DotNet_x64Test.Build.0 = Release|x64 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|DotNet_x86Test.Build.0 = Release|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-ABCD-429C-B551-8562EC954746}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-F542-4635-A069-7CAEFB930070}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|Any CPU.ActiveCfg = Debug|x64 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|x64 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|x64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-1754-4A9D-93D7-857A9D17CB1B}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-44BD-4AC7-AC72-F16E576FDD12}.Release|x86.Build.0 = Release|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|Any CPU.ActiveCfg = Release|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|x64.ActiveCfg = Release|x64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|x64.Build.0 = Release|x64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.AuditMode|x86.ActiveCfg = Release|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|ARM.ActiveCfg = Debug|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|ARM64.Build.0 = Debug|ARM64 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|x64.ActiveCfg = Debug|x64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|x64.Build.0 = Debug|x64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|x86.ActiveCfg = Debug|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Debug|x86.Build.0 = Debug|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|Any CPU.ActiveCfg = Release|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|ARM.ActiveCfg = Release|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|ARM64.ActiveCfg = Release|ARM64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|ARM64.Build.0 = Release|ARM64 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|x64.ActiveCfg = Release|x64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|x64.Build.0 = Release|x64 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|x86.ActiveCfg = Release|Win32 {F2ED628A-DB22-446F-A081-4CC845B51A2B}.Release|x86.Build.0 = Release|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.AuditMode|x64.ActiveCfg = AuditMode|x64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|ARM.ActiveCfg = Debug|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|ARM64.Build.0 = Debug|ARM64 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|x64.ActiveCfg = Debug|x64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|x64.Build.0 = Debug|x64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|x86.ActiveCfg = Debug|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Debug|x86.Build.0 = Debug|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|Any CPU.ActiveCfg = Release|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|ARM.ActiveCfg = Release|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|ARM64.ActiveCfg = Release|ARM64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|ARM64.Build.0 = Release|ARM64 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|x64.ActiveCfg = Release|x64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|x64.Build.0 = Release|x64 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|x86.ActiveCfg = Release|Win32 {2C2BEEF4-9333-4D05-B12A-1905CBF112F9}.Release|x86.Build.0 = Release|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|x64.ActiveCfg = AuditMode|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|x64.Build.0 = AuditMode|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.AuditMode|x86.Build.0 = AuditMode|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|ARM.ActiveCfg = Debug|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|ARM64.ActiveCfg = Debug|ARM64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|ARM64.Build.0 = Debug|ARM64 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|x64.ActiveCfg = Debug|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|x64.Build.0 = Debug|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|x86.ActiveCfg = Debug|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Debug|x86.Build.0 = Debug|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|x64.Build.0 = Fuzzing|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|Any CPU.ActiveCfg = Release|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|ARM.ActiveCfg = Release|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|ARM64.ActiveCfg = Release|ARM64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|ARM64.Build.0 = Release|ARM64 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|x64.ActiveCfg = Release|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|x64.Build.0 = Release|x64 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|x86.ActiveCfg = Release|Win32 {EF3E32A7-5FF6-42B4-B6E2-96CD7D033F00}.Release|x86.Build.0 = Release|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.AuditMode|x64.ActiveCfg = AuditMode|x64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|ARM.ActiveCfg = Debug|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|ARM64.ActiveCfg = Debug|ARM64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|ARM64.Build.0 = Debug|ARM64 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|x64.ActiveCfg = Debug|x64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|x64.Build.0 = Debug|x64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|x86.ActiveCfg = Debug|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Debug|x86.Build.0 = Debug|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|Any CPU.ActiveCfg = Release|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|ARM.ActiveCfg = Release|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|ARM64.ActiveCfg = Release|ARM64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|ARM64.Build.0 = Release|ARM64 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|x64.ActiveCfg = Release|x64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|x64.Build.0 = Release|x64 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|x86.ActiveCfg = Release|Win32 {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73}.Release|x86.Build.0 = Release|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|x64.ActiveCfg = AuditMode|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|x64.Build.0 = AuditMode|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|x86.ActiveCfg = AuditMode|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.AuditMode|x86.Build.0 = AuditMode|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|ARM.ActiveCfg = Debug|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|ARM64.Build.0 = Debug|ARM64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|x64.ActiveCfg = Debug|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|x64.Build.0 = Debug|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|x86.ActiveCfg = Debug|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Debug|x86.Build.0 = Debug|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|Any CPU.ActiveCfg = Release|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|ARM.ActiveCfg = Release|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|ARM64.ActiveCfg = Release|ARM64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|ARM64.Build.0 = Release|ARM64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|DotNet_x64Test.Build.0 = Release|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|DotNet_x86Test.Build.0 = Release|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|x64.ActiveCfg = Release|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|x64.Build.0 = Release|x64 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|x86.ActiveCfg = Release|Win32 - {84848BFA-931D-42CE-9ADF-01EE54DE7890}.Release|x86.Build.0 = Release|Win32 {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|Any CPU.ActiveCfg = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|ARM.ActiveCfg = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|ARM.Build.0 = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|ARM64.ActiveCfg = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|ARM64.Build.0 = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|DotNet_x64Test.ActiveCfg = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|DotNet_x86Test.ActiveCfg = Release|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|x64.ActiveCfg = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|x64.Build.0 = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|x86.ActiveCfg = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.AuditMode|x86.Build.0 = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|ARM.ActiveCfg = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|ARM.Build.0 = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|DotNet_x64Test.ActiveCfg = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|DotNet_x64Test.Build.0 = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|DotNet_x86Test.ActiveCfg = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|DotNet_x86Test.Build.0 = Debug|Any CPU + {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|ARM64.Build.0 = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|x64.ActiveCfg = Debug|Any CPU + {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|x64.Build.0 = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|x86.ActiveCfg = Debug|Any CPU + {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Debug|x86.Build.0 = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Fuzzing|Any CPU.ActiveCfg = Debug|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Fuzzing|ARM.ActiveCfg = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Fuzzing|ARM64.ActiveCfg = Fuzzing|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Fuzzing|DotNet_x86Test.ActiveCfg = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Fuzzing|x64.ActiveCfg = Debug|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Fuzzing|x86.ActiveCfg = Fuzzing|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|Any CPU.ActiveCfg = Release|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|Any CPU.Build.0 = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|ARM.ActiveCfg = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|ARM.Build.0 = Release|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|ARM64.ActiveCfg = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|DotNet_x64Test.ActiveCfg = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|DotNet_x64Test.Build.0 = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|DotNet_x86Test.ActiveCfg = Release|Any CPU - {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|DotNet_x86Test.Build.0 = Release|Any CPU + {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|ARM64.Build.0 = Release|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|x64.ActiveCfg = Release|Any CPU + {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|x64.Build.0 = Release|Any CPU {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|x86.ActiveCfg = Release|Any CPU + {376FE273-6B84-4EB5-8B30-8DE9D21B022C}.Release|x86.Build.0 = Release|Any CPU {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.AuditMode|x64.ActiveCfg = AuditMode|x64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-9333-4D05-B12A-1905CBF112F9}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-9A12-429C-B551-8562EC954746}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.AuditMode|x64.ActiveCfg = AuditMode|x64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-B11C-4DDB-A4FE-C3AFAE9B5506}.Release|x86.Build.0 = Release|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|x64.ActiveCfg = AuditMode|x64 {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|x64.Build.0 = AuditMode|x64 {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.AuditMode|x86.Build.0 = AuditMode|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|ARM.ActiveCfg = Debug|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|ARM64.ActiveCfg = Debug|ARM64 {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|ARM64.Build.0 = Debug|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|x64.ActiveCfg = Debug|x64 {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|x64.Build.0 = Debug|x64 {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|x86.ActiveCfg = Debug|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Debug|x86.Build.0 = Debug|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {48D21369-3D7B-4431-9967-24E81292CF63}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF63}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {48D21369-3D7B-4431-9967-24E81292CF63}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {48D21369-3D7B-4431-9967-24E81292CF63}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Release|Any CPU.ActiveCfg = Release|Win32 - {48D21369-3D7B-4431-9967-24E81292CF63}.Release|ARM.ActiveCfg = Release|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Release|ARM64.ActiveCfg = Release|ARM64 {48D21369-3D7B-4431-9967-24E81292CF63}.Release|ARM64.Build.0 = Release|ARM64 - {48D21369-3D7B-4431-9967-24E81292CF63}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {48D21369-3D7B-4431-9967-24E81292CF63}.Release|DotNet_x64Test.Build.0 = Release|x64 - {48D21369-3D7B-4431-9967-24E81292CF63}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Release|x64.ActiveCfg = Release|x64 {48D21369-3D7B-4431-9967-24E81292CF63}.Release|x64.Build.0 = Release|x64 {48D21369-3D7B-4431-9967-24E81292CF63}.Release|x86.ActiveCfg = Release|Win32 {48D21369-3D7B-4431-9967-24E81292CF63}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|Any CPU.ActiveCfg = Release|x64 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|DotNet_x64Test.ActiveCfg = Release|x64 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|DotNet_x86Test.ActiveCfg = Release|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|x64.ActiveCfg = AuditMode|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|x64.Build.0 = AuditMode|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-039A-4929-BA2A-8BEB2E4106FE}.Release|x86.Build.0 = Release|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|x64.ActiveCfg = AuditMode|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|x64.Build.0 = AuditMode|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.AuditMode|x86.Build.0 = AuditMode|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|ARM.ActiveCfg = Debug|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|ARM64.ActiveCfg = Debug|ARM64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|ARM64.Build.0 = Debug|ARM64 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|DotNet_x86Test.ActiveCfg = Debug|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|x64.ActiveCfg = Debug|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|x64.Build.0 = Debug|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|x86.ActiveCfg = Debug|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Debug|x86.Build.0 = Debug|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|Any CPU.ActiveCfg = Release|Win32 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|ARM.ActiveCfg = Release|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|ARM64.ActiveCfg = Release|ARM64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|ARM64.Build.0 = Release|ARM64 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|DotNet_x86Test.ActiveCfg = Release|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|x64.ActiveCfg = Release|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|x64.Build.0 = Release|x64 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|x86.ActiveCfg = Release|Win32 {58A03BB2-DF5A-4B66-91A0-7EF3BA01269A}.Release|x86.Build.0 = Release|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|x64.ActiveCfg = Release|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.AuditMode|x86.Build.0 = AuditMode|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|ARM.ActiveCfg = Debug|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|ARM64.ActiveCfg = Debug|ARM64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|ARM64.Build.0 = Debug|ARM64 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|DotNet_x86Test.ActiveCfg = Debug|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|x64.ActiveCfg = Debug|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|x64.Build.0 = Debug|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|x86.ActiveCfg = Debug|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Debug|x86.Build.0 = Debug|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|Any CPU.ActiveCfg = Release|Win32 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|ARM.ActiveCfg = Release|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|ARM64.ActiveCfg = Release|ARM64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|ARM64.Build.0 = Release|ARM64 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|DotNet_x86Test.ActiveCfg = Release|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|x64.ActiveCfg = Release|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|x64.Build.0 = Release|x64 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|x86.ActiveCfg = Release|Win32 {A22EC5F6-7851-4B88-AC52-47249D437A52}.Release|x86.Build.0 = Release|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|Any CPU.ActiveCfg = AuditMode|x64 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|x64 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|x64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|x64.ActiveCfg = AuditMode|x64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|ARM.ActiveCfg = Debug|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|ARM64.ActiveCfg = Debug|ARM64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|ARM64.Build.0 = Debug|ARM64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|ARM64.Deploy.0 = Debug|ARM64 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x64.ActiveCfg = Debug|x64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x64.Build.0 = Debug|x64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x64.Deploy.0 = Debug|x64 @@ -2464,19 +1689,13 @@ Global {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x86.Build.0 = Debug|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Debug|x86.Deploy.0 = Debug|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|Any CPU.ActiveCfg = Release|Win32 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|ARM.ActiveCfg = Release|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|ARM64.ActiveCfg = Release|ARM64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|ARM64.Build.0 = Release|ARM64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|ARM64.Deploy.0 = Release|ARM64 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x64.ActiveCfg = Release|x64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x64.Build.0 = Release|x64 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x64.Deploy.0 = Release|x64 @@ -2484,332 +1703,195 @@ Global {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x86.Build.0 = Release|Win32 {A021EDFF-45C8-4DC2-BEF7-36E1B3B8CFE8}.Release|x86.Deploy.0 = Release|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|x64.ActiveCfg = Release|x64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.AuditMode|x86.Build.0 = AuditMode|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|ARM.ActiveCfg = Debug|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|ARM64.ActiveCfg = Debug|ARM64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|ARM64.Build.0 = Debug|ARM64 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|x64.ActiveCfg = Debug|x64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|x64.Build.0 = Debug|x64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|x86.ActiveCfg = Debug|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Debug|x86.Build.0 = Debug|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|Any CPU.ActiveCfg = Release|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|ARM.ActiveCfg = Release|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|ARM64.ActiveCfg = Release|ARM64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|ARM64.Build.0 = Release|ARM64 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|x64.ActiveCfg = Release|x64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|x64.Build.0 = Release|x64 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|x86.ActiveCfg = Release|Win32 {767268EE-174A-46FE-96F0-EEE698A1BBC9}.Release|x86.Build.0 = Release|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|Any CPU.ActiveCfg = Release|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|Any CPU.Build.0 = Release|x64 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|ARM64.ActiveCfg = Release|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|ARM64.Build.0 = Release|x64 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|DotNet_x64Test.ActiveCfg = Release|x64 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|DotNet_x86Test.ActiveCfg = Release|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|x64.ActiveCfg = Release|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|x64.Build.0 = Release|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|x86.ActiveCfg = Release|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.AuditMode|x86.Build.0 = Release|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|ARM.ActiveCfg = Debug|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|ARM64.ActiveCfg = Debug|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|x64.ActiveCfg = Debug|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|x64.Build.0 = Debug|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|x86.ActiveCfg = Debug|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Debug|x86.Build.0 = Debug|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|Any CPU.ActiveCfg = Release|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|ARM.ActiveCfg = Release|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|ARM64.ActiveCfg = Release|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|x64.ActiveCfg = Release|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|x64.Build.0 = Release|x64 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|x86.ActiveCfg = Release|Win32 {A602A555-BAAC-46E1-A91D-3DAB0475C5A1}.Release|x86.Build.0 = Release|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|x64.ActiveCfg = Release|x64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|x86.ActiveCfg = AuditMode|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.AuditMode|x86.Build.0 = AuditMode|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|ARM.ActiveCfg = Debug|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|ARM64.Build.0 = Debug|ARM64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|x64.ActiveCfg = Debug|x64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|x64.Build.0 = Debug|x64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|x86.ActiveCfg = Debug|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Debug|x86.Build.0 = Debug|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|Any CPU.ActiveCfg = Release|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|ARM.ActiveCfg = Release|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|ARM64.ActiveCfg = Release|ARM64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|ARM64.Build.0 = Release|ARM64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|x64.ActiveCfg = Release|x64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|x64.Build.0 = Release|x64 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|x86.ActiveCfg = Release|Win32 - {95B136F9-B238-490C-A7C5-5843C1FECAC4}.Release|x86.Build.0 = Release|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|x64.ActiveCfg = Release|x64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.AuditMode|x86.Build.0 = AuditMode|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|ARM.ActiveCfg = Debug|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|ARM64.ActiveCfg = Debug|ARM64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|ARM64.Build.0 = Debug|ARM64 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|x64.ActiveCfg = Debug|x64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|x64.Build.0 = Debug|x64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|x86.ActiveCfg = Debug|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Debug|x86.Build.0 = Debug|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|Any CPU.ActiveCfg = Release|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|ARM.ActiveCfg = Release|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|ARM64.ActiveCfg = Release|ARM64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|ARM64.Build.0 = Release|ARM64 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x64.ActiveCfg = Release|x64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x64.Build.0 = Release|x64 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x86.ActiveCfg = Release|Win32 {024052DE-83FB-4653-AEA4-90790D29D5BD}.Release|x86.Build.0 = Release|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|x64.ActiveCfg = Release|x64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.AuditMode|x86.Build.0 = AuditMode|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|ARM.ActiveCfg = Debug|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|ARM64.Build.0 = Debug|ARM64 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|x64.ActiveCfg = Debug|x64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|x64.Build.0 = Debug|x64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|x86.ActiveCfg = Debug|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Debug|x86.Build.0 = Debug|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|Any CPU.ActiveCfg = Release|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|ARM.ActiveCfg = Release|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|ARM64.ActiveCfg = Release|ARM64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|ARM64.Build.0 = Release|ARM64 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|x64.ActiveCfg = Release|x64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|x64.Build.0 = Release|x64 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|x86.ActiveCfg = Release|Win32 {067F0A06-FCB7-472C-96E9-B03B54E8E18D}.Release|x86.Build.0 = Release|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|x64.ActiveCfg = AuditMode|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|x64.Build.0 = AuditMode|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.AuditMode|x86.Build.0 = AuditMode|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|ARM.ActiveCfg = Debug|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|ARM64.ActiveCfg = Debug|ARM64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|ARM64.Build.0 = Debug|ARM64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|DotNet_x86Test.Build.0 = Debug|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|x64.ActiveCfg = Debug|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|x64.Build.0 = Debug|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|x86.ActiveCfg = Debug|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Debug|x86.Build.0 = Debug|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|x64.Build.0 = Fuzzing|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|Any CPU.ActiveCfg = Release|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|ARM.ActiveCfg = Release|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|ARM64.ActiveCfg = Release|ARM64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|ARM64.Build.0 = Release|ARM64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|DotNet_x64Test.Build.0 = Release|x64 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 - {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|DotNet_x86Test.Build.0 = Release|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|x64.ActiveCfg = Release|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|x64.Build.0 = Release|x64 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|x86.ActiveCfg = Release|Win32 {6BAE5851-50D5-4934-8D5E-30361A8A40F3}.Release|x86.Build.0 = Release|Win32 {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|Any CPU.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|ARM.ActiveCfg = Release|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|ARM.Build.0 = Release|Any CPU {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|ARM64.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Any CPU {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|x64.ActiveCfg = Debug|Any CPU {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.AuditMode|x86.ActiveCfg = Debug|Any CPU {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|ARM.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|ARM.Build.0 = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|ARM64.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|DotNet_x86Test.ActiveCfg = Debug|x86 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|DotNet_x86Test.Build.0 = Debug|x86 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|x64.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|x86.ActiveCfg = Debug|Any CPU + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|ARM64.Build.0 = Debug|ARM64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|x64.ActiveCfg = Debug|x64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|x64.Build.0 = Debug|x64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|x86.ActiveCfg = Debug|x86 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Debug|x86.Build.0 = Debug|x86 {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Fuzzing|Any CPU.ActiveCfg = Debug|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Fuzzing|ARM.ActiveCfg = Debug|Any CPU {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Fuzzing|ARM64.ActiveCfg = Fuzzing|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Fuzzing|DotNet_x86Test.ActiveCfg = Debug|Any CPU {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Fuzzing|x64.ActiveCfg = Debug|x64 {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Fuzzing|x86.ActiveCfg = Fuzzing|x86 {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|ARM.ActiveCfg = Release|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|ARM.Build.0 = Release|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|ARM64.ActiveCfg = Release|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|DotNet_x64Test.Build.0 = Release|x64 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|DotNet_x86Test.ActiveCfg = Release|x86 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|DotNet_x86Test.Build.0 = Release|x86 - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x64.ActiveCfg = Release|Any CPU - {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x86.ActiveCfg = Release|Any CPU + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|ARM64.ActiveCfg = Release|ARM64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|ARM64.Build.0 = Release|ARM64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x64.ActiveCfg = Release|x64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x64.Build.0 = Release|x64 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x86.ActiveCfg = Release|x86 + {1588FD7C-241E-4E7D-9113-43735F3E6BAD}.Release|x86.Build.0 = Release|x86 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x64.ActiveCfg = AuditMode|x64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x64.Build.0 = AuditMode|x64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x86.Build.0 = AuditMode|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|ARM.ActiveCfg = Debug|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|ARM64.ActiveCfg = Debug|ARM64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|ARM64.Build.0 = Debug|ARM64 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x64.ActiveCfg = Debug|x64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x64.Build.0 = Debug|x64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x86.ActiveCfg = Debug|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x86.Build.0 = Debug|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|Any CPU.ActiveCfg = Release|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|ARM.ActiveCfg = Release|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|ARM64.ActiveCfg = Release|ARM64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|ARM64.Build.0 = Release|ARM64 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|x64.ActiveCfg = Release|x64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|x64.Build.0 = Release|x64 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|x86.ActiveCfg = Release|Win32 {506FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|x86.Build.0 = Release|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x64.ActiveCfg = AuditMode|x64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x64.Build.0 = AuditMode|x64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.AuditMode|x86.Build.0 = AuditMode|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|ARM.ActiveCfg = Debug|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|ARM64.ActiveCfg = Debug|ARM64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|ARM64.Build.0 = Debug|ARM64 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x64.ActiveCfg = Debug|x64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x64.Build.0 = Debug|x64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x86.ActiveCfg = Debug|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Debug|x86.Build.0 = Debug|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|Any CPU.ActiveCfg = Release|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|ARM.ActiveCfg = Release|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|ARM64.ActiveCfg = Release|ARM64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|ARM64.Build.0 = Release|ARM64 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|x64.ActiveCfg = Release|x64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|x64.Build.0 = Release|x64 {416FD703-BAA7-4F6E-9361-64F550EC8FCA}.Release|x86.ActiveCfg = Release|Win32 @@ -2817,27 +1899,17 @@ Global {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|Any CPU.ActiveCfg = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|Any CPU.Build.0 = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|Any CPU.Deploy.0 = Release|x64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|ARM64.ActiveCfg = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|ARM64.Build.0 = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|ARM64.Deploy.0 = Release|x64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x64Test.ActiveCfg = Release|x64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x64Test.Build.0 = Release|x64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x64Test.Deploy.0 = Release|x64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x86Test.ActiveCfg = Release|x64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x86Test.Build.0 = Release|x64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|DotNet_x86Test.Deploy.0 = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x64.Deploy.0 = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x86.ActiveCfg = Release|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x86.Build.0 = Release|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.AuditMode|x86.Deploy.0 = Release|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|x64.Deploy.0 = Debug|x64 @@ -2845,18 +1917,12 @@ Global {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Debug|x86.Deploy.0 = Debug|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|x64.Deploy.0 = Release|x64 @@ -2864,156 +1930,103 @@ Global {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-0B5E-45C3-96A8-BB496BFE4E32}.Release|x86.Deploy.0 = Release|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.AuditMode|x86.Build.0 = AuditMode|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-D7EC-4107-B7C6-79CB77AE2907}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|x64.ActiveCfg = Release|x64 {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.AuditMode|x86.Build.0 = AuditMode|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-082C-4476-9F33-94B339494076}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-082C-4476-9F33-94B339494076}.Release|x86.Build.0 = Release|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|x64.ActiveCfg = AuditMode|x64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.AuditMode|x86.Build.0 = AuditMode|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|ARM.ActiveCfg = Debug|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|ARM64.ActiveCfg = Debug|ARM64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|ARM64.Build.0 = Debug|ARM64 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|x64.ActiveCfg = Debug|x64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|x64.Build.0 = Debug|x64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|x86.ActiveCfg = Debug|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Debug|x86.Build.0 = Debug|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|Any CPU.ActiveCfg = Release|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|ARM.ActiveCfg = Release|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|ARM64.ActiveCfg = Release|ARM64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|ARM64.Build.0 = Release|ARM64 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|x64.ActiveCfg = Release|x64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|x64.Build.0 = Release|x64 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|x86.ActiveCfg = Release|Win32 {CA5CAD1A-9B68-456A-B13E-C8218070DC42}.Release|x86.Build.0 = Release|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.AuditMode|ARM64.ActiveCfg = Release|ARM64 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.AuditMode|x64.ActiveCfg = Release|x64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.AuditMode|x86.ActiveCfg = Release|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|ARM.ActiveCfg = Debug|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|ARM64.ActiveCfg = Debug|ARM64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|ARM64.Build.0 = Debug|ARM64 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|x64.ActiveCfg = Debug|x64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|x64.Build.0 = Debug|x64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|x86.ActiveCfg = Debug|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Debug|x86.Build.0 = Debug|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|Any CPU.ActiveCfg = Release|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|ARM.ActiveCfg = Release|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|ARM64.ActiveCfg = Release|ARM64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|ARM64.Build.0 = Release|ARM64 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|x64.ActiveCfg = Release|x64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|x64.Build.0 = Release|x64 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|x86.ActiveCfg = Release|Win32 {21B7EA5E-1EF8-49B6-AC07-11714AF0E37D}.Release|x86.Build.0 = Release|Win32 {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|Any CPU.ActiveCfg = Release|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|ARM.ActiveCfg = Debug|ARM - {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|ARM.Build.0 = Debug|ARM - {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|ARM.Deploy.0 = Debug|ARM {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|ARM64.ActiveCfg = Debug|ARM64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|ARM64.Build.0 = Debug|ARM64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|ARM64.Deploy.0 = Debug|ARM64 - {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|DotNet_x64Test.ActiveCfg = Release|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|DotNet_x86Test.ActiveCfg = Release|Any CPU {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|x64.ActiveCfg = Debug|x64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|x64.Build.0 = Debug|x64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|x64.Deploy.0 = Debug|x64 @@ -3021,14 +2034,9 @@ Global {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|x86.Build.0 = Debug|x86 {F75E29D0-D288-478B-8D83-2C190F321A3F}.AuditMode|x86.Deploy.0 = Debug|x86 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|ARM.ActiveCfg = Debug|ARM - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|ARM.Build.0 = Debug|ARM - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|ARM.Deploy.0 = Debug|ARM {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|ARM64.Build.0 = Debug|ARM64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|ARM64.Deploy.0 = Debug|ARM64 - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|DotNet_x64Test.ActiveCfg = Debug|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|DotNet_x86Test.ActiveCfg = Debug|Any CPU {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|x64.ActiveCfg = Debug|x64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|x64.Build.0 = Debug|x64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|x64.Deploy.0 = Debug|x64 @@ -3036,21 +2044,13 @@ Global {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|x86.Build.0 = Debug|x86 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Debug|x86.Deploy.0 = Debug|x86 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Fuzzing|Any CPU.ActiveCfg = Release|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Fuzzing|ARM.ActiveCfg = Fuzzing|ARM {F75E29D0-D288-478B-8D83-2C190F321A3F}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Fuzzing|DotNet_x86Test.ActiveCfg = Release|Any CPU {F75E29D0-D288-478B-8D83-2C190F321A3F}.Fuzzing|x64.ActiveCfg = Release|x64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Fuzzing|x86.ActiveCfg = Release|x86 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|ARM.ActiveCfg = Release|ARM - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|ARM.Build.0 = Release|ARM - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|ARM.Deploy.0 = Release|ARM {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|ARM64.ActiveCfg = Release|ARM64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|ARM64.Build.0 = Release|ARM64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|ARM64.Deploy.0 = Release|ARM64 - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|DotNet_x64Test.ActiveCfg = Release|Any CPU - {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|DotNet_x86Test.ActiveCfg = Release|Any CPU {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|x64.ActiveCfg = Release|x64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|x64.Build.0 = Release|x64 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|x64.Deploy.0 = Release|x64 @@ -3058,403 +2058,357 @@ Global {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|x86.Build.0 = Release|x86 {F75E29D0-D288-478B-8D83-2C190F321A3F}.Release|x86.Deploy.0 = Release|x86 {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|x64.ActiveCfg = Release|x64 {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|x64.Build.0 = Release|x64 {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.AuditMode|x86.Build.0 = AuditMode|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|ARM.ActiveCfg = Debug|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|ARM64.ActiveCfg = Debug|ARM64 {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|ARM64.Build.0 = Debug|ARM64 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|x64.ActiveCfg = Debug|x64 {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|x64.Build.0 = Debug|x64 {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|x86.ActiveCfg = Debug|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Debug|x86.Build.0 = Debug|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {43CE4CE5-0010-4B99-9569-672670D26E26}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|Any CPU.ActiveCfg = Release|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|ARM.ActiveCfg = Release|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|ARM64.ActiveCfg = Release|ARM64 {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|ARM64.Build.0 = Release|ARM64 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|x64.ActiveCfg = Release|x64 {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|x64.Build.0 = Release|x64 {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|x86.ActiveCfg = Release|Win32 {43CE4CE5-0010-4B99-9569-672670D26E26}.Release|x86.Build.0 = Release|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|x64.ActiveCfg = Release|x64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.AuditMode|x86.Build.0 = AuditMode|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|ARM.ActiveCfg = Debug|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|ARM64.ActiveCfg = Debug|ARM64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|ARM64.Build.0 = Debug|ARM64 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|x64.ActiveCfg = Debug|x64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|x64.Build.0 = Debug|x64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|x86.ActiveCfg = Debug|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Debug|x86.Build.0 = Debug|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|Any CPU.ActiveCfg = Release|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|ARM.ActiveCfg = Release|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|ARM64.ActiveCfg = Release|ARM64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|ARM64.Build.0 = Release|ARM64 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|x64.ActiveCfg = Release|x64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|x64.Build.0 = Release|x64 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|x86.ActiveCfg = Release|Win32 {27B5AAEB-A548-44CF-9777-F8BAA32AF7AE}.Release|x86.Build.0 = Release|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|x64.ActiveCfg = AuditMode|x64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.AuditMode|x86.Build.0 = AuditMode|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|ARM.ActiveCfg = Debug|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|ARM64.ActiveCfg = Debug|ARM64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|ARM64.Build.0 = Debug|ARM64 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|x64.ActiveCfg = Debug|x64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|x64.Build.0 = Debug|x64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|x86.ActiveCfg = Debug|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Debug|x86.Build.0 = Debug|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|Any CPU.ActiveCfg = Release|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|ARM.ActiveCfg = Release|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|ARM64.ActiveCfg = Release|ARM64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|ARM64.Build.0 = Release|ARM64 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|x64.ActiveCfg = Release|x64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|x64.Build.0 = Release|x64 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|x86.ActiveCfg = Release|Win32 {68A10CD3-AA64-465B-AF5F-ED4E9700543C}.Release|x86.Build.0 = Release|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|x64.ActiveCfg = AuditMode|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|x64.Build.0 = AuditMode|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.AuditMode|x86.Build.0 = AuditMode|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|ARM.ActiveCfg = Debug|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|ARM64.ActiveCfg = Debug|ARM64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|ARM64.Build.0 = Debug|ARM64 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|x64.ActiveCfg = Debug|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|x64.Build.0 = Debug|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|x86.ActiveCfg = Debug|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Debug|x86.Build.0 = Debug|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|x64.Build.0 = Fuzzing|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|Any CPU.ActiveCfg = Release|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|ARM.ActiveCfg = Release|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|ARM64.ActiveCfg = Release|ARM64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|ARM64.Build.0 = Release|ARM64 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|x64.ActiveCfg = Release|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|x64.Build.0 = Release|x64 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|x86.ActiveCfg = Release|Win32 {71CC9D78-BA29-4D93-946F-BEF5D9A3A6EF}.Release|x86.Build.0 = Release|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.AuditMode|x64.ActiveCfg = AuditMode|x64 {05D9052F-D78F-478F-968A-2DE38A6DB996}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Debug|ARM.ActiveCfg = Debug|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Debug|x64.ActiveCfg = Debug|x64 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Debug|x86.ActiveCfg = Debug|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|x64.Build.0 = Fuzzing|x64 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Release|Any CPU.ActiveCfg = Release|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Release|ARM.ActiveCfg = Release|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Release|ARM64.ActiveCfg = Release|ARM64 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {05D9052F-D78F-478F-968A-2DE38A6DB996}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Release|x64.ActiveCfg = Release|x64 {05D9052F-D78F-478F-968A-2DE38A6DB996}.Release|x86.ActiveCfg = Release|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|x64.ActiveCfg = Release|x64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.AuditMode|x86.Build.0 = AuditMode|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|ARM.ActiveCfg = Debug|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|ARM64.ActiveCfg = Debug|ARM64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|ARM64.Build.0 = Debug|ARM64 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|x64.ActiveCfg = Debug|x64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|x64.Build.0 = Debug|x64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|x86.ActiveCfg = Debug|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Debug|x86.Build.0 = Debug|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|Any CPU.ActiveCfg = Release|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|ARM.ActiveCfg = Release|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|ARM64.ActiveCfg = Release|ARM64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|ARM64.Build.0 = Release|ARM64 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|x64.ActiveCfg = Release|x64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|x64.Build.0 = Release|x64 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|x86.ActiveCfg = Release|Win32 {C323DAEE-B307-4C7B-ACE5-7293CBEFCB5B}.Release|x86.Build.0 = Release|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.AuditMode|ARM.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.AuditMode|ARM64.ActiveCfg = Debug|ARM64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.AuditMode|DotNet_x64Test.ActiveCfg = Debug|x64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.AuditMode|DotNet_x86Test.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.AuditMode|x64.ActiveCfg = Debug|x64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.AuditMode|x86.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|ARM.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|ARM64.ActiveCfg = Debug|ARM64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|ARM64.Build.0 = Debug|ARM64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|x64.ActiveCfg = Debug|x64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|x64.Build.0 = Debug|x64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|x86.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Debug|x86.Build.0 = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Fuzzing|Any CPU.ActiveCfg = Debug|Win32 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Fuzzing|ARM.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Fuzzing|DotNet_x64Test.ActiveCfg = Debug|x64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Fuzzing|DotNet_x86Test.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Fuzzing|x64.ActiveCfg = Debug|x64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Fuzzing|x86.ActiveCfg = Debug|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|Any CPU.ActiveCfg = Release|Win32 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|ARM.ActiveCfg = Release|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|ARM64.ActiveCfg = Release|ARM64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|ARM64.Build.0 = Release|ARM64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|x64.ActiveCfg = Release|x64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|x64.Build.0 = Release|x64 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|x86.ActiveCfg = Release|Win32 {F19DACD5-0C6E-40DC-B6E4-767A3200542C}.Release|x86.Build.0 = Release|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|x64.ActiveCfg = AuditMode|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|x64.Build.0 = AuditMode|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.AuditMode|x86.Build.0 = AuditMode|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|ARM.ActiveCfg = Debug|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|ARM64.ActiveCfg = Debug|ARM64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|ARM64.Build.0 = Debug|ARM64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|DotNet_x64Test.Build.0 = Debug|x64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|x64.ActiveCfg = Debug|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|x64.Build.0 = Debug|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|x86.ActiveCfg = Debug|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Debug|x86.Build.0 = Debug|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|ARM64.Build.0 = Fuzzing|ARM64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|x64.Build.0 = Fuzzing|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Fuzzing|x86.Build.0 = Fuzzing|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|Any CPU.ActiveCfg = Release|Win32 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|ARM.ActiveCfg = Release|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|ARM64.ActiveCfg = Release|ARM64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|ARM64.Build.0 = Release|ARM64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|DotNet_x64Test.Build.0 = Release|x64 - {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|x64.ActiveCfg = Release|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|x64.Build.0 = Release|x64 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|x86.ActiveCfg = Release|Win32 {8222900C-8B6C-452A-91AC-BE95DB04B95F}.Release|x86.Build.0 = Release|Win32 {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|Any CPU.ActiveCfg = AuditMode|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|ARM.ActiveCfg = AuditMode|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|x64.ActiveCfg = AuditMode|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|x64.Build.0 = AuditMode|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|Any CPU.ActiveCfg = Debug|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|ARM.ActiveCfg = Debug|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|ARM64.ActiveCfg = Debug|ARM64 {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|ARM64.Build.0 = Debug|ARM64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|DotNet_x86Test.ActiveCfg = Debug|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|x64.ActiveCfg = Debug|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|x64.Build.0 = Debug|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|x86.ActiveCfg = Debug|Win32 {06EC74CB-9A12-428C-B551-8537EC964726}.Debug|x86.Build.0 = Debug|Win32 {06EC74CB-9A12-428C-B551-8537EC964726}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {06EC74CB-9A12-428C-B551-8537EC964726}.Release|Any CPU.ActiveCfg = Release|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Release|ARM.ActiveCfg = Release|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Release|ARM64.ActiveCfg = Release|ARM64 {06EC74CB-9A12-428C-B551-8537EC964726}.Release|ARM64.Build.0 = Release|ARM64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {06EC74CB-9A12-428C-B551-8537EC964726}.Release|DotNet_x86Test.ActiveCfg = Release|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Release|x64.ActiveCfg = Release|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Release|x64.Build.0 = Release|x64 {06EC74CB-9A12-428C-B551-8537EC964726}.Release|x86.ActiveCfg = Release|Win32 {06EC74CB-9A12-428C-B551-8537EC964726}.Release|x86.Build.0 = Release|Win32 {75C6F576-18E9-4566-978A-F0A301CAC090}.AuditMode|Any CPU.ActiveCfg = AuditMode|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.AuditMode|ARM.ActiveCfg = AuditMode|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.AuditMode|x64.ActiveCfg = AuditMode|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|Any CPU.ActiveCfg = Debug|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|ARM.ActiveCfg = Debug|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|ARM64.ActiveCfg = Debug|ARM64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|ARM64.Build.0 = Debug|ARM64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|DotNet_x64Test.ActiveCfg = Debug|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|DotNet_x86Test.ActiveCfg = Debug|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|x64.ActiveCfg = Debug|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|x64.Build.0 = Debug|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|x86.ActiveCfg = Debug|Win32 {75C6F576-18E9-4566-978A-F0A301CAC090}.Debug|x86.Build.0 = Debug|Win32 {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|ARM.ActiveCfg = Fuzzing|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|x64.Build.0 = Fuzzing|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|Any CPU.ActiveCfg = Release|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|ARM.ActiveCfg = Release|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|ARM64.ActiveCfg = Release|ARM64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|ARM64.Build.0 = Release|ARM64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|DotNet_x64Test.ActiveCfg = Release|x64 - {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|DotNet_x86Test.ActiveCfg = Release|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|x64.ActiveCfg = Release|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|x64.Build.0 = Release|x64 {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|x86.ActiveCfg = Release|Win32 {75C6F576-18E9-4566-978A-F0A301CAC090}.Release|x86.Build.0 = Release|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|ARM.ActiveCfg = AuditMode|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|ARM64.ActiveCfg = AuditMode|ARM64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|ARM64.Build.0 = AuditMode|ARM64 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|DotNet_x64Test.ActiveCfg = AuditMode|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|DotNet_x86Test.ActiveCfg = AuditMode|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|x64.ActiveCfg = AuditMode|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|x64.Build.0 = AuditMode|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|x86.ActiveCfg = AuditMode|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.AuditMode|x86.Build.0 = AuditMode|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|ARM.ActiveCfg = Debug|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|ARM64.ActiveCfg = Debug|ARM64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|ARM64.Build.0 = Debug|ARM64 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|DotNet_x64Test.ActiveCfg = Debug|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|DotNet_x86Test.ActiveCfg = Debug|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|x64.ActiveCfg = Debug|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|x64.Build.0 = Debug|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|x86.ActiveCfg = Debug|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Debug|x86.Build.0 = Debug|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|ARM.ActiveCfg = Fuzzing|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|ARM64.Build.0 = Fuzzing|ARM64 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|DotNet_x64Test.ActiveCfg = Fuzzing|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|DotNet_x86Test.ActiveCfg = Fuzzing|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|x64.Build.0 = Fuzzing|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Fuzzing|x86.Build.0 = Fuzzing|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|Any CPU.ActiveCfg = Release|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|ARM.ActiveCfg = Release|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|ARM64.ActiveCfg = Release|ARM64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|ARM64.Build.0 = Release|ARM64 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|DotNet_x64Test.ActiveCfg = Release|Win32 - {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|DotNet_x86Test.ActiveCfg = Release|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|x64.ActiveCfg = Release|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|x64.Build.0 = Release|x64 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|x86.ActiveCfg = Release|Win32 {3C67784E-1453-49C2-9660-483E2CC7F7AD}.Release|x86.Build.0 = Release|Win32 + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.AuditMode|Any CPU.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.AuditMode|ARM64.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.AuditMode|x64.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.AuditMode|x86.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Debug|ARM64.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Debug|x64.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Debug|x64.Build.0 = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Debug|x86.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Fuzzing|Any CPU.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Fuzzing|ARM64.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Fuzzing|x64.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Fuzzing|x86.ActiveCfg = Debug|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Release|Any CPU.Build.0 = Release|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Release|ARM64.ActiveCfg = Release|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Release|x64.ActiveCfg = Release|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Release|x64.Build.0 = Release|Any CPU + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4}.Release|x86.ActiveCfg = Release|Any CPU + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.AuditMode|ARM64.ActiveCfg = Release|ARM64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.AuditMode|x64.ActiveCfg = Release|x64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.AuditMode|x86.ActiveCfg = Release|Win32 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Debug|x64.ActiveCfg = Debug|x64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Debug|x86.ActiveCfg = Debug|Win32 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|Any CPU.ActiveCfg = Release|Win32 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|ARM64.ActiveCfg = Release|ARM64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|x64.ActiveCfg = Release|x64 + {37C995E0-2349-4154-8E77-4A52C0C7F46D}.Release|x86.ActiveCfg = Release|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|ARM64.ActiveCfg = Release|ARM64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|x64.ActiveCfg = Release|x64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.AuditMode|x86.ActiveCfg = Release|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Debug|x64.ActiveCfg = Debug|x64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Debug|x86.ActiveCfg = Debug|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Release|Any CPU.ActiveCfg = Release|Win32 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Release|ARM64.ActiveCfg = Release|ARM64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Release|x64.ActiveCfg = Release|x64 + {2C836962-9543-4CE5-B834-D28E1F124B66}.Release|x86.ActiveCfg = Release|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.AuditMode|Any CPU.ActiveCfg = AuditMode|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.AuditMode|ARM64.ActiveCfg = Release|ARM64 + {328729E9-6723-416E-9C98-951F1473BBE1}.AuditMode|x64.ActiveCfg = Release|x64 + {328729E9-6723-416E-9C98-951F1473BBE1}.AuditMode|x86.ActiveCfg = Release|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {328729E9-6723-416E-9C98-951F1473BBE1}.Debug|x64.ActiveCfg = Debug|x64 + {328729E9-6723-416E-9C98-951F1473BBE1}.Debug|x86.ActiveCfg = Debug|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.Fuzzing|Any CPU.ActiveCfg = Fuzzing|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.Fuzzing|ARM64.ActiveCfg = Fuzzing|ARM64 + {328729E9-6723-416E-9C98-951F1473BBE1}.Fuzzing|x64.ActiveCfg = Fuzzing|x64 + {328729E9-6723-416E-9C98-951F1473BBE1}.Fuzzing|x86.ActiveCfg = Fuzzing|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.Release|Any CPU.ActiveCfg = Release|Win32 + {328729E9-6723-416E-9C98-951F1473BBE1}.Release|ARM64.ActiveCfg = Release|ARM64 + {328729E9-6723-416E-9C98-951F1473BBE1}.Release|x64.ActiveCfg = Release|x64 + {328729E9-6723-416E-9C98-951F1473BBE1}.Release|x86.ActiveCfg = Release|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.AuditMode|Any CPU.ActiveCfg = Debug|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.AuditMode|ARM64.ActiveCfg = Debug|ARM64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.AuditMode|x64.ActiveCfg = Debug|x64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.AuditMode|x86.ActiveCfg = Debug|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Debug|ARM64.Build.0 = Debug|ARM64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Debug|x64.ActiveCfg = Debug|x64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Debug|x64.Build.0 = Debug|x64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Debug|x86.ActiveCfg = Debug|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Fuzzing|Any CPU.ActiveCfg = Debug|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Fuzzing|ARM64.ActiveCfg = Debug|ARM64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Fuzzing|x64.ActiveCfg = Debug|x64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Fuzzing|x86.ActiveCfg = Debug|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Release|Any CPU.ActiveCfg = Release|Win32 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Release|ARM64.ActiveCfg = Release|ARM64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Release|ARM64.Build.0 = Release|ARM64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Release|x64.ActiveCfg = Release|x64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Release|x64.Build.0 = Release|x64 + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48}.Release|x86.ActiveCfg = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -3498,7 +2452,6 @@ Global {18D09A24-8240-42D6-8CB6-236EEE820263} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} {990F2657-8580-4828-943F-5DD657D11843} = {05500DEF-2294-41E3-AF9A-24E580B82836} {0CF235BD-2DA0-407E-90EE-C467E8BBC714} = {1E4A062E-293B-4817-B20D-BF16B979E350} - {48D21369-3D7B-4431-9967-24E81292CF62} = {05500DEF-2294-41E3-AF9A-24E580B82836} {CA5CAD1A-C46D-4588-B1C0-40F31AE9100B} = {59840756-302F-44DF-AA47-441A9D673202} {CA5CAD1A-ABCD-429C-B551-8562EC954746} = {9921CA0A-320C-4460-8623-3A3196E7F4CB} {CA5CAD1A-44BD-4AC7-AC72-6CA5B3AB89ED} = {9921CA0A-320C-4460-8623-3A3196E7F4CB} @@ -3513,7 +2466,6 @@ Global {05500DEF-2294-41E3-AF9A-24E580B82836} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} {1E4A062E-293B-4817-B20D-BF16B979E350} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} {34DE34D3-1CD6-4EE3-8BD9-A26B5B27EC73} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} - {84848BFA-931D-42CE-9ADF-01EE54DE7890} = {4DAF0299-495E-4CD1-A982-9BAC16A45932} {376FE273-6B84-4EB5-8B30-8DE9D21B022C} = {4DAF0299-495E-4CD1-A982-9BAC16A45932} {CA5CAD1A-9333-4D05-B12A-1905CBF112F9} = {BDB237B6-1D1D-400F-84CC-40A58FA59C8E} {CA5CAD1A-9A12-429C-B551-8562EC954746} = {59840756-302F-44DF-AA47-441A9D673202} @@ -3529,7 +2481,6 @@ Global {53DD5520-E64C-4C06-B472-7CE62CA539C9} = {04170EEF-983A-4195-BFEF-2321E5E38A1E} {6B5A44ED-918D-4747-BFB1-2472A1FCA173} = {04170EEF-983A-4195-BFEF-2321E5E38A1E} {D3EF7B96-CD5E-47C9-B9A9-136259563033} = {04170EEF-983A-4195-BFEF-2321E5E38A1E} - {95B136F9-B238-490C-A7C5-5843C1FECAC4} = {05500DEF-2294-41E3-AF9A-24E580B82836} {024052DE-83FB-4653-AEA4-90790D29D5BD} = {E8F24881-5E37-4362-B191-A3BA0ED7F4EB} {067F0A06-FCB7-472C-96E9-B03B54E8E18D} = {61901E80-E97D-4D61-A9BB-E8F2FDA8B40C} {6BAE5851-50D5-4934-8D5E-30361A8A40F3} = {81C352DB-1818-45B7-A284-18E259F1CC87} @@ -3559,6 +2510,11 @@ Global {75C6F576-18E9-4566-978A-F0A301CAC090} = {05500DEF-2294-41E3-AF9A-24E580B82836} {40BD8415-DD93-4200-8D82-498DDDC08CC8} = {89CDCC5C-9F53-4054-97A4-639D99F169CD} {3C67784E-1453-49C2-9660-483E2CC7F7AD} = {40BD8415-DD93-4200-8D82-498DDDC08CC8} + {613CCB57-5FA9-48EF-80D0-6B1E319E20C4} = {A10C4720-DCA4-4640-9749-67F4314F527C} + {37C995E0-2349-4154-8E77-4A52C0C7F46D} = {A10C4720-DCA4-4640-9749-67F4314F527C} + {2C836962-9543-4CE5-B834-D28E1F124B66} = {A10C4720-DCA4-4640-9749-67F4314F527C} + {328729E9-6723-416E-9C98-951F1473BBE1} = {A10C4720-DCA4-4640-9749-67F4314F527C} + {BE92101C-04F8-48DA-99F0-E1F4F1D2DC48} = {A10C4720-DCA4-4640-9749-67F4314F527C} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3140B1B7-C8EE-43D1-A772-D82A7061A271} diff --git a/README.md b/README.md index 08819d607ad..462731aa594 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![terminal-logos](https://user-images.githubusercontent.com/48369326/115790869-4c852b00-a37c-11eb-97f1-f61972c7800c.png) +![terminal-logos](https://github.com/microsoft/terminal/assets/91625426/333ddc76-8ab2-4eb4-a8c0-4d7b953b1179) # Welcome to the Windows Terminal, Console and Command-Line repo @@ -8,8 +8,8 @@ This repository contains the source code for: * [Windows Terminal Preview](https://aka.ms/terminal-preview) * The Windows console host (`conhost.exe`) * Components shared between the two projects -* [ColorTool](https://github.com/microsoft/terminal/tree/main/src/tools/ColorTool) -* [Sample projects](https://github.com/microsoft/terminal/tree/main/samples) +* [ColorTool](./src/tools/ColorTool) +* [Sample projects](./samples) that show how to consume the Windows Console APIs Related repositories include: @@ -21,7 +21,8 @@ Related repositories include: ## Installing and running Windows Terminal -> **Note**: Windows Terminal requires Windows 10 2004 (build 19041) or later +> [!NOTE] +> Windows Terminal requires Windows 10 2004 (build 19041) or later ### Microsoft Store [Recommended] @@ -52,9 +53,10 @@ fails for any reason, you can try the following command at a PowerShell prompt: Add-AppxPackage Microsoft.WindowsTerminal_.msixbundle ``` -> **Note**: If you install Terminal manually: +> [!NOTE] +> If you install Terminal manually: > -> * You may need to install the [VC++ v14 Desktop Framework Package](https://docs.microsoft.com/troubleshoot/cpp/c-runtime-packages-desktop-bridge#how-to-install-and-update-desktop-framework-packages). +> * You may need to install the [VC++ v14 Desktop Framework Package](https://docs.microsoft.com/troubleshoot/cpp/c-runtime-packages-desktop-bridge#how-to-install-and-update-desktop-framework-packages). > This should only be necessary on older builds of Windows 10 and only if you get an error about missing framework packages. > * Terminal will not auto-update when new builds are released so you will need > to regularly install the latest Terminal release to receive all the latest @@ -70,6 +72,9 @@ package: winget install --id Microsoft.WindowsTerminal -e ``` +> [!NOTE] +> Dependency support is available in WinGet version [1.6.2631 or later](https://github.com/microsoft/winget-cli/releases). To install the Terminal stable release 1.18 or later, please make sure you have the updated version of the WinGet client. + #### Via Chocolatey (unofficial) [Chocolatey](https://chocolatey.org) users can download and install the latest @@ -113,9 +118,31 @@ repository. --- +## Installing Windows Terminal Canary +Windows Terminal Canary is a nightly build of Windows Terminal. This build has the latest code from our `main` branch, giving you an opportunity to try features before they make it to Windows Terminal Preview. + +Windows Terminal Canary is our least stable offering, so you may discover bugs before we have had a chance to find them. + +Windows Terminal Canary is available as an App Installer distribution and a Portable ZIP distribution. + +The App Installer distribution supports automatic updates. Due to platform limitations, this installer only works on Windows 11. + +The Portable ZIP distribution is a portable application. It will not automatically update and will not automatically check for updates. This portable ZIP distribution works on Windows 10 (19041+) and Windows 11. + +| Distribution | Architecture | Link | +|---------------|:---------------:|------------------------------------------------------| +| App Installer | x64, arm64, x86 | [download](https://aka.ms/terminal-canary-installer) | +| Portable ZIP | x64 | [download](https://aka.ms/terminal-canary-zip-x64) | +| Portable ZIP | ARM64 | [download](https://aka.ms/terminal-canary-zip-arm64) | +| Portable ZIP | x86 | [download](https://aka.ms/terminal-canary-zip-x86) | + +_Learn more about the [types of Windows Terminal distributions](https://learn.microsoft.com/windows/terminal/distributions)._ + +--- + ## Windows Terminal Roadmap -The plan for the Windows Terminal [is described here](/doc/roadmap-2022.md) and +The plan for the Windows Terminal [is described here](/doc/roadmap-2023.md) and will be updated as the project proceeds. ## Project Build Status @@ -235,7 +262,8 @@ Cause: You're launching the incorrect solution in Visual Studio. Solution: Make sure you're building & deploying the `CascadiaPackage` project in Visual Studio. -> **Note**: `OpenConsole.exe` is just a locally-built `conhost.exe`, the classic +> [!NOTE] +> `OpenConsole.exe` is just a locally-built `conhost.exe`, the classic > Windows Console that hosts Windows' command-line infrastructure. OpenConsole > is used by Windows Terminal to connect to and communicate with command-line > applications (via @@ -258,7 +286,7 @@ enhance Windows Terminal\! ***BEFORE you start work on a feature/fix***, please read & follow our [Contributor's -Guide](https://github.com/microsoft/terminal/blob/main/CONTRIBUTING.md) to +Guide](./CONTRIBUTING.md) to help avoid any wasted or duplicate effort. ## Communicating with the Team @@ -271,10 +299,10 @@ similar open/closed preexisting issues before creating a new issue.** If you would like to ask a question that you feel doesn't warrant an issue (yet), please reach out to us via Twitter: -* Kayla Cinnamon, Program Manager: - [@cinnamon\_msft](https://twitter.com/cinnamon_msft) +* Christopher Nguyen, Product Manager: + [@nguyen_dows](https://twitter.com/nguyen_dows) * Dustin Howett, Engineering Lead: [@dhowett](https://twitter.com/DHowett) -* Mike Griese, Senior Developer: [@zadjii](https://twitter.com/zadjii) +* Mike Griese, Senior Developer: [@zadjii@mastodon.social](https://mastodon.social/@zadjii) * Carlos Zamora, Developer: [@cazamor_msft](https://twitter.com/cazamor_msft) * Pankaj Bhojwani, Developer * Leonard Hecker, Developer: [@LeonardHecker](https://twitter.com/LeonardHecker) @@ -359,10 +387,10 @@ Please review these brief docs below about our coding practices. This is a work in progress as we learn what we'll need to provide people in order to be effective contributors to our project. -* [Coding Style](https://github.com/microsoft/terminal/blob/main/doc/STYLE.md) -* [Code Organization](https://github.com/microsoft/terminal/blob/main/doc/ORGANIZATION.md) -* [Exceptions in our legacy codebase](https://github.com/microsoft/terminal/blob/main/doc/EXCEPTIONS.md) -* [Helpful smart pointers and macros for interfacing with Windows in WIL](https://github.com/microsoft/terminal/blob/main/doc/WIL.md) +* [Coding Style](./doc/STYLE.md) +* [Code Organization](./doc/ORGANIZATION.md) +* [Exceptions in our legacy codebase](./doc/EXCEPTIONS.md) +* [Helpful smart pointers and macros for interfacing with Windows in WIL](./doc/WIL.md) --- diff --git a/SUPPORT.md b/SUPPORT.md index ba2389bf86f..275d58a9aed 100644 --- a/SUPPORT.md +++ b/SUPPORT.md @@ -14,4 +14,4 @@ Support for Windows Terminal is limited to the resources listed above. [gh-bug]: https://github.com/microsoft/terminal/issues/new?assignees=&labels=Issue-Bug&template=bug_report.md&title= [gh-feature]: https://github.com/microsoft/terminal/issues/new?assignees=&labels=Issue-Feature&template=Feature_Request.md&title= [docs]: https://docs.microsoft.com/windows/terminal -[contributor]: https://github.com/microsoft/terminal/blob/main/CONTRIBUTING.md +[contributor]: ./CONTRIBUTING.md diff --git a/build/Helix/AzurePipelinesHelperScripts.ps1 b/build/Helix/AzurePipelinesHelperScripts.ps1 deleted file mode 100644 index 8934a8548d1..00000000000 --- a/build/Helix/AzurePipelinesHelperScripts.ps1 +++ /dev/null @@ -1,175 +0,0 @@ -function GetAzureDevOpsBaseUri -{ - Param( - [string]$CollectionUri, - [string]$TeamProject - ) - - return $CollectionUri + $TeamProject -} - -function GetQueryTestRunsUri -{ - Param( - [string]$CollectionUri, - [string]$TeamProject, - [string]$BuildUri, - [switch]$IncludeRunDetails - ) - - if ($IncludeRunDetails) - { - $includeRunDetailsParameter = "&includeRunDetails=true" - } - else - { - $includeRunDetailsParameter = "" - } - - $baseUri = GetAzureDevOpsBaseUri -CollectionUri $CollectionUri -TeamProject $TeamProject - $queryUri = "$baseUri/_apis/test/runs?buildUri=$BuildUri$includeRunDetailsParameter&api-version=5.0" - return $queryUri -} - -function Get-HelixJobTypeFromTestRun -{ - Param ($testRun) - - $testRunSingleResultUri = "$($testRun.url)/results?`$top=1&`$skip=0&api-version=5.1" - $singleTestResult = Invoke-RestMethod -Uri $testRunSingleResultUri -Method Get -Headers $azureDevOpsRestApiHeaders - $count = $singleTestResult.value.Length - if($count -eq 0) - { - # If the count is 0, then results have not yet been reported for this run. - # We only care about completed runs with results, so it is ok to just return 'UNKNOWN' for this run. - return "UNKNOWN" - } - else - { - $info = ConvertFrom-Json $singleTestResult.value.comment - $helixJobId = $info.HelixJobId - $job = Invoke-RestMethodWithRetries "https://helix.dot.net/api/2019-06-17/jobs/${helixJobId}?access_token=${HelixAccessToken}" - return $job.Type - } -} - -function Append-HelixAccessTokenToUrl -{ - Param ([string]$url, [string]$token) - if($url.Contains("?")) - { - $url = "$($url)&access_token=$($token)" - } - else - { - $url = "$($url)?access_token=$($token)" - } - return $url -} - - -# The Helix Rest api is sometimes unreliable. So we call these apis with retry logic. -# Note: The Azure DevOps apis are stable and do not need to be called with this retry logic. -$helixApiRetries = 0 -$helixApiRetriesMax = 10 - -function Download-StringWithRetries -{ - Param ([string]$fileName, [string]$url) - - $result = "" - $done = $false - - while(!($done)) - { - try - { - Write-Host "Downloading $fileName" - $result = (New-Object System.Net.WebClient).DownloadString($url) - $done = $true - } - catch - { - Write-Host "Failed to download $fileName $($PSItem.Exception)" - - $helixApiRetries = $helixApiRetries + 1 - if($helixApiRetries -lt $helixApiRetriesMax) - { - Write-Host "Sleep and retry download of $fileName" - Start-Sleep 60 - } - else - { - throw "Failed to download $fileName" - } - } - } - - return $result -} - -function Invoke-RestMethodWithRetries -{ - Param ([string]$url,$Headers) - - $result = @() - $done = $false - - while(!($done)) - { - try - { - $result = Invoke-RestMethod -Uri $url -Method Get -Headers $Headers - $done = $true - } - catch - { - Write-Host "Failed to invoke Rest method $($PSItem.Exception)" - - $helixApiRetries = $helixApiRetries + 1 - if($helixApiRetries -lt $helixApiRetriesMax) - { - Write-Host "Sleep and retry invoke" - Start-Sleep 60 - } - else - { - throw "Failed to invoke Rest method" - } - } - } - - return $result -} - -function Download-FileWithRetries -{ - Param ([string]$fileurl, [string]$destination) - - $done = $false - - while(!($done)) - { - try - { - Write-Host "Downloading $destination" - $webClient.DownloadFile($fileurl, $destination) - $done = $true - } - catch - { - Write-Host "Failed to download $destination $($PSItem.Exception)" - - $helixApiRetries = $helixApiRetries + 1 - if($helixApiRetries -lt $helixApiRetriesMax) - { - Write-Host "Sleep and retry download of $destination" - Start-Sleep 60 - } - else - { - throw "Failed to download $destination" - } - } - } -} \ No newline at end of file diff --git a/build/Helix/ConvertWttLogToXUnit.ps1 b/build/Helix/ConvertWttLogToXUnit.ps1 index 13d333d3e75..c17d86e8ec1 100644 --- a/build/Helix/ConvertWttLogToXUnit.ps1 +++ b/build/Helix/ConvertWttLogToXUnit.ps1 @@ -20,9 +20,7 @@ Param( $helixResultsContainerUri = $Env:HELIX_RESULTS_CONTAINER_URI $helixResultsContainerRsas = $Env:HELIX_RESULTS_CONTAINER_RSAS -$rerunPassesRequiredToAvoidFailure = $env:rerunPassesRequiredToAvoidFailure - Add-Type -Language CSharp -ReferencedAssemblies System.Xml,System.Xml.Linq,System.Runtime.Serialization,System.Runtime.Serialization.Json (Get-Content $PSScriptRoot\HelixTestHelpers.cs -Raw) $testResultParser = [HelixTestHelpers.TestResultParser]::new($TestNamePrefix, $helixResultsContainerUri, $helixResultsContainerRsas) -$testResultParser.ConvertWttLogToXUnitLog($WttInputPath, $WttSingleRerunInputPath, $WttMultipleRerunInputPath, $XUnitOutputPath, $rerunPassesRequiredToAvoidFailure) \ No newline at end of file +$testResultParser.ConvertWttLogToXUnitLog($WttInputPath, $WttSingleRerunInputPath, $WttMultipleRerunInputPath, $XUnitOutputPath) diff --git a/build/Helix/EnsureMachineState.ps1 b/build/Helix/EnsureMachineState.ps1 deleted file mode 100644 index 6f26da63a56..00000000000 --- a/build/Helix/EnsureMachineState.ps1 +++ /dev/null @@ -1,112 +0,0 @@ -$scriptDirectory = $script:MyInvocation.MyCommand.Path | Split-Path -Parent - -# List all processes to aid debugging: -Write-Host "All processes running:" -Get-Process - -tasklist /svc - -# Add this test directory as an exclusion for Windows Defender -Write-Host "Add $scriptDirectory as Exclusion Path" -Add-MpPreference -ExclusionPath $scriptDirectory -Write-Host "Add $($env:HELIX_CORRELATION_PAYLOAD) as Exclusion Path" -Add-MpPreference -ExclusionPath $env:HELIX_CORRELATION_PAYLOAD -Get-MpPreference -Get-MpComputerStatus - - -# Minimize all windows: -$shell = New-Object -ComObject "Shell.Application" -$shell.minimizeall() - -# Kill any instances of Windows Security Alert: -$windowTitleToMatch = "*Windows Security Alert*" -$procs = Get-Process | Where {$_.MainWindowTitle -like "*Windows Security Alert*"} -foreach ($proc in $procs) -{ - Write-Host "Found process with '$windowTitleToMatch' title: $proc" - $proc.Kill(); -} - -# Kill processes by name that are known to interfere with our tests: -$processNamesToStop = @("Microsoft.Photos", "WinStore.App", "SkypeApp", "SkypeBackgroundHost", "OneDriveSetup", "OneDrive") -foreach($procName in $processNamesToStop) -{ - Write-Host "Attempting to kill $procName if it is running" - Stop-Process -ProcessName $procName -Verbose -ErrorAction Ignore -} -Write-Host "All processes running after attempting to kill unwanted processes:" -Get-Process - -tasklist /svc - -$platform = $env:testbuildplatform -if(!$platform) -{ - $platform = "x86" -} - -function UninstallApps { - Param([string[]]$appsToUninstall) - - foreach($pkgName in $appsToUninstall) - { - foreach($pkg in (Get-AppxPackage $pkgName).PackageFullName) - { - Write-Output "Removing: $pkg" - Remove-AppxPackage $pkg - } - } -} - -function UninstallTestApps { - Param([string[]]$appsToUninstall) - - foreach($pkgName in $appsToUninstall) - { - foreach($pkg in (Get-AppxPackage $pkgName).PackageFullName) - { - Write-Output "Removing: $pkg" - Remove-AppxPackage $pkg - } - - # Sometimes an app can get into a state where it is no longer returned by Get-AppxPackage, but it is still present - # which prevents other versions of the app from being installed. - # To handle this, we can directly call Remove-AppxPackage against the full name of the package. However, without - # Get-AppxPackage to find the PackageFullName, we just have to manually construct the name. - $packageFullName = "$($pkgName)_1.0.0.0_$($platform)__8wekyb3d8bbwe" - Write-Host "Removing $packageFullName if installed" - Remove-AppPackage $packageFullName -ErrorVariable appxerror -ErrorAction SilentlyContinue - if($appxerror) - { - foreach($error in $appxerror) - { - # In most cases, Remove-AppPackage will fail due to the package not being found. Don't treat this as an error. - if(!($error.Exception.Message -match "0x80073CF1")) - { - Write-Error $error - } - } - } - else - { - Write-Host "Successfully removed $packageFullName" - } - } -} - -Write-Host "Uninstall AppX packages that are known to cause issues with our tests" -UninstallApps("*Skype*", "*Windows.Photos*") - -Write-Host "Uninstall any of our test apps that may have been left over from previous test runs" -UninstallTestApps("NugetPackageTestApp", "NugetPackageTestAppCX", "IXMPTestApp", "MUXControlsTestApp") - -Write-Host "Uninstall MUX Framework package that may have been left over from previous test runs" -# We don't want to uninstall all versions of the MUX Framework package, as there may be other apps preinstalled on the system -# that depend on it. We only uninstall the Framework package that corresponds to the version of MUX that we are testing. -[xml]$versionData = (Get-Content "version.props") -$versionMajor = $versionData.GetElementsByTagName("MUXVersionMajor").'#text' -$versionMinor = $versionData.GetElementsByTagName("MUXVersionMinor").'#text' -UninstallApps("Microsoft.UI.Xaml.$versionMajor.$versionMinor") - -Get-Process \ No newline at end of file diff --git a/build/Helix/GenerateTestProjFile.ps1 b/build/Helix/GenerateTestProjFile.ps1 deleted file mode 100644 index 07a3550a79a..00000000000 --- a/build/Helix/GenerateTestProjFile.ps1 +++ /dev/null @@ -1,336 +0,0 @@ -[CmdLetBinding()] -Param( - [Parameter(Mandatory = $true)] - [string]$TestFile, - - [Parameter(Mandatory = $true)] - [string]$OutputProjFile, - - [Parameter(Mandatory = $true)] - [string]$JobTestSuiteName, - - [Parameter(Mandatory = $true)] - [string]$TaefPath, - - [string]$TaefQuery -) - -Class TestCollection -{ - [string]$Name - [string]$SetupMethodName - [string]$TeardownMethodName - [System.Collections.Generic.Dictionary[string, string]]$Properties - - TestCollection() - { - if ($this.GetType() -eq [TestCollection]) - { - throw "This class should never be instantiated directly; it should only be derived from." - } - } - - TestCollection([string]$name) - { - $this.Init($name) - } - - hidden Init([string]$name) - { - $this.Name = $name - $this.Properties = @{} - } -} - -Class Test : TestCollection -{ - Test([string]$name) - { - $this.Init($name) - } -} - -Class TestClass : TestCollection -{ - [System.Collections.Generic.List[Test]]$Tests - - TestClass([string]$name) - { - $this.Init($name) - $this.Tests = @{} - } -} - -Class TestModule : TestCollection -{ - [System.Collections.Generic.List[TestClass]]$TestClasses - - TestModule([string]$name) - { - $this.Init($name) - $this.TestClasses = @{} - } -} - -function Parse-TestInfo([string]$taefOutput) -{ - enum LineType - { - None - TestModule - TestClass - Test - Setup - Teardown - Property - } - - [string]$testModuleIndentation = " " - [string]$testClassIndentation = " " - [string]$testIndentation = " " - [string]$setupBeginning = "Setup: " - [string]$teardownBeginning = "Teardown: " - [string]$propertyBeginning = "Property[" - - function Get-LineType([string]$line) - { - if ($line.Contains($setupBeginning)) - { - return [LineType]::Setup; - } - elseif ($line.Contains($teardownBeginning)) - { - return [LineType]::Teardown; - } - elseif ($line.Contains($propertyBeginning)) - { - return [LineType]::Property; - } - elseif ($line.StartsWith($testModuleIndentation) -and -not $line.StartsWith("$testModuleIndentation ")) - { - return [LineType]::TestModule; - } - elseif ($line.StartsWith($testClassIndentation) -and -not $line.StartsWith("$testClassIndentation ")) - { - return [LineType]::TestClass; - } - elseif ($line.StartsWith($testIndentation) -and -not $line.StartsWith("$testIndentation ")) - { - return [LineType]::Test; - } - else - { - return [LineType]::None; - } - } - - [string[]]$lines = $taefOutput.Split(@([Environment]::NewLine, "`n"), [StringSplitOptions]::RemoveEmptyEntries) - [System.Collections.Generic.List[TestModule]]$testModules = @() - - [TestModule]$currentTestModule = $null - [TestClass]$currentTestClass = $null - [Test]$currentTest = $null - - [TestCollection]$lastTestCollection = $null - - foreach ($rawLine in $lines) - { - [LineType]$lineType = (Get-LineType $rawLine) - - # We don't need the whitespace around the line anymore, so we'll discard it to make things easier. - [string]$line = $rawLine.Trim() - - if ($lineType -eq [LineType]::TestModule) - { - if ($currentTest -ne $null -and $currentTestClass -ne $null) - { - $currentTestClass.Tests.Add($currentTest) - } - - if ($currentTestClass -ne $null -and $currentTestModule -ne $null) - { - $currentTestModule.TestClasses.Add($currentTestClass) - } - - if ($currentTestModule -ne $null) - { - $testModules.Add($currentTestModule) - } - - $currentTestModule = [TestModule]::new($line) - $currentTestClass = $null - $currentTest = $null - $lastTestCollection = $currentTestModule - } - elseif ($lineType -eq [LineType]::TestClass) - { - if ($currentTest -ne $null -and $currentTestClass -ne $null) - { - $currentTestClass.Tests.Add($currentTest) - } - - if ($currentTestClass -ne $null -and $currentTestModule -ne $null) - { - $currentTestModule.TestClasses.Add($currentTestClass) - } - - $currentTestClass = [TestClass]::new($line) - $currentTest = $null - $lastTestCollection = $currentTestClass - } - elseif ($lineType -eq [LineType]::Test) - { - if ($currentTest -ne $null -and $currentTestClass -ne $null) - { - $currentTestClass.Tests.Add($currentTest) - } - - $currentTest = [Test]::new($line) - $lastTestCollection = $currentTest - } - elseif ($lineType -eq [LineType]::Setup) - { - if ($lastTestCollection -ne $null) - { - $lastTestCollection.SetupMethodName = $line.Replace($setupBeginning, "") - } - } - elseif ($lineType -eq [LineType]::Teardown) - { - if ($lastTestCollection -ne $null) - { - $lastTestCollection.TeardownMethodName = $line.Replace($teardownBeginning, "") - } - } - elseif ($lineType -eq [LineType]::Property) - { - if ($lastTestCollection -ne $null) - { - foreach ($match in [Regex]::Matches($line, "Property\[(.*)\]\s+=\s+(.*)")) - { - [string]$propertyKey = $match.Groups[1].Value; - [string]$propertyValue = $match.Groups[2].Value; - $lastTestCollection.Properties.Add($propertyKey, $propertyValue); - } - } - } - } - - if ($currentTest -ne $null -and $currentTestClass -ne $null) - { - $currentTestClass.Tests.Add($currentTest) - } - - if ($currentTestClass -ne $null -and $currentTestModule -ne $null) - { - $currentTestModule.TestClasses.Add($currentTestClass) - } - - if ($currentTestModule -ne $null) - { - $testModules.Add($currentTestModule) - } - - return $testModules -} - -Write-Verbose "TaefQuery = $TaefQuery" - -$TaefSelectQuery = "" -$TaefQueryToAppend = "" -if($TaefQuery) -{ - $TaefSelectQuery = "/select:`"$TaefQuery`"" - $TaefQueryToAppend = " and $TaefQuery" -} -Write-Verbose "TaefSelectQuery = $TaefSelectQuery" - - -$taefExe = "$TaefPath\te.exe" -[string]$taefOutput = & "$taefExe" /listproperties $TaefSelectQuery $TestFile | Out-String - -[System.Collections.Generic.List[TestModule]]$testModules = (Parse-TestInfo $taefOutput) - -$projFileContent = @" - - -"@ - -foreach ($testModule in $testModules) -{ - foreach ($testClass in $testModules.TestClasses) - { - Write-Host "Generating Helix work item for test class $($testClass.Name)..." - [System.Collections.Generic.List[string]]$testSuiteNames = @() - - $testSuiteExists = $false - $suitelessTestExists = $false - - foreach ($test in $testClass.Tests) - { - # A test method inherits its 'TestSuite' property from its TestClass - if (!$test.Properties.ContainsKey("TestSuite") -and $testClass.Properties.ContainsKey("TestSuite")) - { - $test.Properties["TestSuite"] = $testClass.Properties["TestSuite"] - } - - if ($test.Properties.ContainsKey("TestSuite")) - { - [string]$testSuite = $test.Properties["TestSuite"] - - if (-not $testSuiteNames.Contains($testSuite)) - { - Write-Host " Found test suite $testSuite. Generating Helix work item for it as well." - $testSuiteNames.Add($testSuite) - } - - $testSuiteExists = $true - } - else - { - $suitelessTestExists = $true - } - } - - $testClassSelectPattern = "$($testClass.Name).*" - if($testClass.Name.Contains("::")) - { - $testClassSelectPattern = "$($testClass.Name)::*" - } - $testNameQuery= "(@Name='$testClassSelectPattern')" - - $workItemName = $testClass.Name - # Native tests use '::' as a separator, which is not valid for workItem names. - $workItemName = $workItemName -replace "::", "-" - - if ($suitelessTestExists) - { - $projFileContent += @" - - - 00:30:00 - call %HELIX_CORRELATION_PAYLOAD%\runtests.cmd /select:"(@Name='$($testClass.Name)*'$(if ($testSuiteExists) { "and not @TestSuite='*'" }))$($TaefQueryToAppend)" - -"@ - } - - foreach ($testSuiteName in $testSuiteNames) - { - $projFileContent += @" - - - 00:30:00 - call %HELIX_CORRELATION_PAYLOAD%\runtests.cmd /select:"(@Name='$($testClass.Name)*' and @TestSuite='$testSuiteName')$($TaefQueryToAppend)" - -"@ - } - } -} - -$projFileContent += @" - - - -"@ - -Set-Content $OutputProjFile $projFileContent -NoNewline -Encoding UTF8 \ No newline at end of file diff --git a/build/Helix/HelixTestHelpers.cs b/build/Helix/HelixTestHelpers.cs index d691026a410..67f13937c08 100644 --- a/build/Helix/HelixTestHelpers.cs +++ b/build/Helix/HelixTestHelpers.cs @@ -20,32 +20,13 @@ public TestResult() public string Name { get; set; } public string SourceWttFile { get; set; } public bool Passed { get; set; } + public bool Skipped { get; set; } public bool CleanupPassed { get; set; } public TimeSpan ExecutionTime { get; set; } public string Details { get; set; } public List Screenshots { get; private set; } public List RerunResults { get; private set; } - - // Returns true if the test pass rate is sufficient to avoid being counted as a failure. - public bool PassedOrUnreliable(int requiredNumberOfPasses) - { - if(Passed) - { - return true; - } - else - { - if(RerunResults.Count == 1) - { - return RerunResults[0].Passed; - } - else - { - return RerunResults.Where(r => r.Passed).Count() >= requiredNumberOfPasses; - } - } - } } // @@ -221,7 +202,9 @@ public static TestPass ParseTestWttFile(string fileName, bool cleanupFailuresAre testsExecuting--; // If any inner test fails, we'll still fail the outer - currentResult.Passed &= element.Attribute("Result").Value == "Pass"; + var value = element.Attribute("Result").Value; + currentResult.Passed = value == "Pass"; + currentResult.Skipped = value == "Skipped"; // Only gather execution data if this is the outer test we ran initially if (testsExecuting == 0) @@ -498,7 +481,7 @@ public Dictionary GetSubResultsJsonByMethodName(string wttInputP return subResultsJsonByMethod; } - public void ConvertWttLogToXUnitLog(string wttInputPath, string wttSingleRerunInputPath, string wttMultipleRerunInputPath, string xunitOutputPath, int requiredPassRateThreshold) + public void ConvertWttLogToXUnitLog(string wttInputPath, string wttSingleRerunInputPath, string wttMultipleRerunInputPath, string xunitOutputPath) { TestPass testPass = TestPass.ParseTestWttFileWithReruns(wttInputPath, wttSingleRerunInputPath, wttMultipleRerunInputPath, cleanupFailuresAreRegressions: true, truncateTestNames: false); var results = testPass.TestResults; @@ -510,8 +493,8 @@ public void ConvertWttLogToXUnitLog(string wttInputPath, string wttSingleRerunIn // If the test failed sufficiently often enough for it to count as a failed test (determined by a property on the // Azure DevOps job), we'll later mark it as failed during test results processing. - int failedCount = results.Where(r => !r.PassedOrUnreliable(requiredPassRateThreshold)).Count(); - int skippedCount = results.Where(r => !r.Passed && r.PassedOrUnreliable(requiredPassRateThreshold)).Count(); + int failedCount = results.Where(r => !r.Passed).Count(); + int skippedCount = results.Where(r => (!r.Passed && r.Skipped)).Count(); var root = new XElement("assemblies"); @@ -557,12 +540,13 @@ public void ConvertWttLogToXUnitLog(string wttInputPath, string wttSingleRerunIn string resultString = string.Empty; - if (result.Passed) + if (result.Passed && !result.Skipped) { resultString = "Pass"; } - else if(result.PassedOrUnreliable(requiredPassRateThreshold)) + else if (result.Skipped) { + resultString = "Skip"; } else @@ -571,31 +555,25 @@ public void ConvertWttLogToXUnitLog(string wttInputPath, string wttSingleRerunIn } - test.SetAttributeValue("result", resultString); - if (!result.Passed) { - // If a test failed, we'll have rerun it multiple times. - // We'll save the subresults to a JSON text file that we'll upload to the helix results container - - // this allows it to be as long as we want, whereas the reason field in Azure DevOps has a 4000 character limit. - string subResultsFileName = methodName + "_subresults.json"; - string subResultsFilePath = Path.Combine(Path.GetDirectoryName(wttInputPath), subResultsFileName); - - if (result.PassedOrUnreliable(requiredPassRateThreshold)) + if (result.Skipped) { var reason = new XElement("reason"); - reason.Add(new XCData(GetUploadedFileUrl(subResultsFileName, helixResultsContainerUri, helixResultsContainerRsas))); + reason.Add(new XCData("Test skipped")); test.Add(reason); } - else - { + else { var failure = new XElement("failure"); var message = new XElement("message"); - message.Add(new XCData(GetUploadedFileUrl(subResultsFileName, helixResultsContainerUri, helixResultsContainerRsas))); + message.Add(new XCData("Test failed")); failure.Add(message); test.Add(failure); } } + + test.SetAttributeValue("result", resultString); + collection.Add(test); } diff --git a/build/Helix/InstallTestAppDependencies.ps1 b/build/Helix/InstallTestAppDependencies.ps1 deleted file mode 100644 index da0a049d27d..00000000000 --- a/build/Helix/InstallTestAppDependencies.ps1 +++ /dev/null @@ -1,12 +0,0 @@ -# Displaying progress is unnecessary and is just distracting. -$ProgressPreference = "SilentlyContinue" - -$dependencyFiles = Get-ChildItem -Filter "*Microsoft.VCLibs.*.appx" - -foreach ($file in $dependencyFiles) -{ - Write-Host "Adding dependency $($file)..." - - Add-AppxPackage $file - -} \ No newline at end of file diff --git a/build/Helix/OutputFailedTestQuery.ps1 b/build/Helix/OutputFailedTestQuery.ps1 deleted file mode 100644 index 3ea7abf80ad..00000000000 --- a/build/Helix/OutputFailedTestQuery.ps1 +++ /dev/null @@ -1,8 +0,0 @@ -Param( - [Parameter(Mandatory = $true)] - [string]$WttInputPath -) - -Add-Type -Language CSharp -ReferencedAssemblies System.Xml,System.Xml.Linq,System.Runtime.Serialization,System.Runtime.Serialization.Json (Get-Content $PSScriptRoot\HelixTestHelpers.cs -Raw) - -[HelixTestHelpers.FailedTestDetector]::OutputFailedTestQuery($WttInputPath) \ No newline at end of file diff --git a/build/Helix/OutputSubResultsJsonFiles.ps1 b/build/Helix/OutputSubResultsJsonFiles.ps1 deleted file mode 100644 index 476502e9878..00000000000 --- a/build/Helix/OutputSubResultsJsonFiles.ps1 +++ /dev/null @@ -1,32 +0,0 @@ -Param( - [Parameter(Mandatory = $true)] - [string]$WttInputPath, - - [Parameter(Mandatory = $true)] - [string]$WttSingleRerunInputPath, - - [Parameter(Mandatory = $true)] - [string]$WttMultipleRerunInputPath, - - [Parameter(Mandatory = $true)] - [string]$TestNamePrefix -) - -# Ideally these would be passed as parameters to the script. However ps makes it difficult to deal with string literals containing '&', so we just -# read the values directly from the environment variables -$helixResultsContainerUri = $Env:HELIX_RESULTS_CONTAINER_URI -$helixResultsContainerRsas = $Env:HELIX_RESULTS_CONTAINER_RSAS - -Add-Type -Language CSharp -ReferencedAssemblies System.Xml,System.Xml.Linq,System.Runtime.Serialization,System.Runtime.Serialization.Json (Get-Content $PSScriptRoot\HelixTestHelpers.cs -Raw) - -$testResultParser = [HelixTestHelpers.TestResultParser]::new($TestNamePrefix, $helixResultsContainerUri, $helixResultsContainerRsas) -[System.Collections.Generic.Dictionary[string, string]]$subResultsJsonByMethodName = $testResultParser.GetSubResultsJsonByMethodName($WttInputPath, $WttSingleRerunInputPath, $WttMultipleRerunInputPath) - -$subResultsJsonDirectory = [System.IO.Path]::GetDirectoryName($WttInputPath) - -foreach ($methodName in $subResultsJsonByMethodName.Keys) -{ - $subResultsJson = $subResultsJsonByMethodName[$methodName] - $subResultsJsonPath = [System.IO.Path]::Combine($subResultsJsonDirectory, $methodName + "_subresults.json") - Out-File $subResultsJsonPath -Encoding utf8 -InputObject $subResultsJson -} \ No newline at end of file diff --git a/build/Helix/OutputTestErrorsForAzureDevops.ps1 b/build/Helix/OutputTestErrorsForAzureDevops.ps1 new file mode 100644 index 00000000000..863db32afe7 --- /dev/null +++ b/build/Helix/OutputTestErrorsForAzureDevops.ps1 @@ -0,0 +1,38 @@ +Param( + [Parameter(Mandatory = $true)] + [string]$XUnitOutputPath +) + +# This script is used to parse the XUnit output from the test runs and print out +# the tests that failed. +# +# Why you might ask? Well, it sure seems like Azure DevOps doesn't like the fact +# that we just call our tests in a powershell script. It can't seemingly find +# the actual errors in the TAEF logs. That means when you just go to the +# "Checks" page on GitHub, the Azure DevOps integration doesn't have anything +# meaningful to say other than "PowerShell exited with code '1'". If we however, +# just manually emit the test names formatted with "#[error]" in front of them, +# well, then the integration will all work like magic. + +# Load the test results as a XML object +$testResults = [xml](Get-Content -Path $XUnitOutputPath) + +# Our XML looks like: +# +# +# +# + +# Iterate over all the assemblies and print all the tests that failed +foreach ($assembly in $testResults.assemblies.assembly) { + foreach ($collection in $assembly.collection) { + foreach ($test in $collection.test) { + if ($test.result -eq "Fail") { + # This particular format is taken from the Azure DevOps documentation: + # https://github.com/microsoft/azure-pipelines-tasks/blob/master/docs/authoring/commands.md + # This will treat this line as an error message + Write-Output "##vso[task.logissue type=error]$($test.name) Failed" + } + } + } +} diff --git a/build/Helix/OutputTestResults.ps1 b/build/Helix/OutputTestResults.ps1 deleted file mode 100644 index a23b456afe8..00000000000 --- a/build/Helix/OutputTestResults.ps1 +++ /dev/null @@ -1,131 +0,0 @@ -Param( - [Parameter(Mandatory = $true)] - [int]$MinimumExpectedTestsExecutedCount, - - [string]$AccessToken = $env:SYSTEM_ACCESSTOKEN, - [string]$CollectionUri = $env:SYSTEM_COLLECTIONURI, - [string]$TeamProject = $env:SYSTEM_TEAMPROJECT, - [string]$BuildUri = $env:BUILD_BUILDURI, - [bool]$CheckJobAttempt -) - -$azureDevOpsRestApiHeaders = @{ - "Accept"="application/json" - "Authorization"="Basic $([System.Convert]::ToBase64String([System.Text.ASCIIEncoding]::ASCII.GetBytes(":$AccessToken")))" -} - -. "$PSScriptRoot/AzurePipelinesHelperScripts.ps1" - -Write-Host "Checking test results..." - -$queryUri = GetQueryTestRunsUri -CollectionUri $CollectionUri -TeamProject $TeamProject -BuildUri $BuildUri -IncludeRunDetails -Write-Host "queryUri = $queryUri" - -$testRuns = Invoke-RestMethodWithRetries $queryUri -Headers $azureDevOpsRestApiHeaders -[System.Collections.Generic.List[string]]$failingTests = @() -[System.Collections.Generic.List[string]]$unreliableTests = @() -[System.Collections.Generic.List[string]]$unexpectedResultTest = @() - -[System.Collections.Generic.List[string]]$namesOfProcessedTestRuns = @() -$totalTestsExecutedCount = 0 - -# We assume that we only have one testRun with a given name that we care about -# We only process the last testRun with a given name (based on completedDate) -# The name of a testRun is set to the Helix queue that it was run on (e.g. windows.10.amd64.client21h1.xaml) -# If we have multiple test runs on the same queue that we care about, we will need to re-visit this logic -foreach ($testRun in ($testRuns.value | Sort-Object -Property "completedDate" -Descending)) -{ - if ($CheckJobAttempt) - { - if ($namesOfProcessedTestRuns -contains $testRun.name) - { - Write-Host "Skipping test run '$($testRun.name)', since we have already processed a test run of that name." - continue - } - } - - Write-Host "Processing results from test run '$($testRun.name)'" - $namesOfProcessedTestRuns.Add($testRun.name) - - $totalTestsExecutedCount += $testRun.totalTests - - $testRunResultsUri = "$($testRun.url)/results?api-version=5.0" - $testResults = Invoke-RestMethodWithRetries "$($testRun.url)/results?api-version=5.0" -Headers $azureDevOpsRestApiHeaders - - foreach ($testResult in $testResults.value) - { - $shortTestCaseTitle = $testResult.testCaseTitle -replace "[a-zA-Z0-9]+.[a-zA-Z0-9]+.Windows.UI.Xaml.Tests.MUXControls.","" - - if ($testResult.outcome -eq "Failed") - { - if (-not $failingTests.Contains($shortTestCaseTitle)) - { - $failingTests.Add($shortTestCaseTitle) - } - } - elseif ($testResult.outcome -eq "Warning") - { - if (-not $unreliableTests.Contains($shortTestCaseTitle)) - { - $unreliableTests.Add($shortTestCaseTitle) - } - } - elseif ($testResult.outcome -ne "Passed") - { - # We should only see tests with result "Passed", "Failed" or "Warning" - if (-not $unexpectedResultTest.Contains($shortTestCaseTitle)) - { - $unexpectedResultTest.Add($shortTestCaseTitle) - } - } - } -} - -if ($unreliableTests.Count -gt 0) -{ - Write-Host @" -##vso[task.logissue type=warning;]Unreliable tests: -##vso[task.logissue type=warning;]$($unreliableTests -join "$([Environment]::NewLine)##vso[task.logissue type=warning;]") - -"@ -} - -if ($failingTests.Count -gt 0) -{ - Write-Host @" -##vso[task.logissue type=error;]Failing tests: -##vso[task.logissue type=error;]$($failingTests -join "$([Environment]::NewLine)##vso[task.logissue type=error;]") - -"@ -} - -if ($unexpectedResultTest.Count -gt 0) -{ - Write-Host @" -##vso[task.logissue type=error;]Tests with unexpected results: -##vso[task.logissue type=error;]$($unexpectedResultTest -join "$([Environment]::NewLine)##vso[task.logissue type=error;]") - -"@ -} - -if($totalTestsExecutedCount -lt $MinimumExpectedTestsExecutedCount) -{ - Write-Host "Expected at least $MinimumExpectedTestsExecutedCount tests to be executed." - Write-Host "Actual executed test count is: $totalTestsExecutedCount" - Write-Host "##vso[task.complete result=Failed;]" -} -elseif ($failingTests.Count -gt 0) -{ - Write-Host "At least one test failed." - Write-Host "##vso[task.complete result=Failed;]" -} -elseif ($unreliableTests.Count -gt 0) -{ - Write-Host "All tests eventually passed, but some initially failed." - Write-Host "##vso[task.complete result=Succeeded;]" -} -else -{ - Write-Host "All tests passed." - Write-Host "##vso[task.complete result=Succeeded;]" -} diff --git a/build/Helix/PrepareHelixPayload.ps1 b/build/Helix/PrepareHelixPayload.ps1 deleted file mode 100644 index 3f9600492e7..00000000000 --- a/build/Helix/PrepareHelixPayload.ps1 +++ /dev/null @@ -1,68 +0,0 @@ -[CmdLetBinding()] -Param( - [string]$Platform, - [string]$Configuration, - [string]$ArtifactName='drop' -) - -$payloadDir = "HelixPayload\$Configuration\$Platform" - -$repoDirectory = Join-Path (Split-Path -Parent $script:MyInvocation.MyCommand.Path) "..\..\" -$nugetPackagesDir = Join-Path (Split-Path -Parent $script:MyInvocation.MyCommand.Path) "packages" - -# Create the payload directory. Remove it if it already exists. -If(test-path $payloadDir) -{ - Remove-Item $payloadDir -Recurse -} -New-Item -ItemType Directory -Force -Path $payloadDir - -# Copy files from nuget packages -Copy-Item "$nugetPackagesDir\microsoft.windows.apps.test.1.0.181203002\lib\netcoreapp2.1\*.dll" $payloadDir -Copy-Item "$nugetPackagesDir\Microsoft.Taef.10.60.210621002\build\Binaries\$Platform\*" $payloadDir -Copy-Item "$nugetPackagesDir\Microsoft.Taef.10.60.210621002\build\Binaries\$Platform\NetFx4.5\*" $payloadDir -New-Item -ItemType Directory -Force -Path "$payloadDir\.NETCoreApp2.1\" -Copy-Item "$nugetPackagesDir\runtime.win-$Platform.microsoft.netcore.app.2.1.0\runtimes\win-$Platform\lib\netcoreapp2.1\*" "$payloadDir\.NETCoreApp2.1\" -Copy-Item "$nugetPackagesDir\runtime.win-$Platform.microsoft.netcore.app.2.1.0\runtimes\win-$Platform\native\*" "$payloadDir\.NETCoreApp2.1\" -New-Item -ItemType Directory -Force -Path "$payloadDir\content\" -Copy-Item "$nugetPackagesDir\Microsoft.Internal.Windows.Terminal.TestContent.1.0.1\content\*" "$payloadDir\content\" - -function Copy-If-Exists -{ - Param($source, $destinationDir) - - if (Test-Path $source) - { - Write-Host "Copy from '$source' to '$destinationDir'" - Copy-Item -Force $source $destinationDir - } - else - { - Write-Host "'$source' does not exist." - } -} - -# Copy files from the 'drop' artifact dir -Copy-Item "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\Test\*" $payloadDir -Recurse - -# Copy files from the repo -New-Item -ItemType Directory -Force -Path "$payloadDir" -Copy-Item "build\helix\ConvertWttLogToXUnit.ps1" "$payloadDir" -Copy-Item "build\helix\OutputFailedTestQuery.ps1" "$payloadDir" -Copy-Item "build\helix\OutputSubResultsJsonFiles.ps1" "$payloadDir" -Copy-Item "build\helix\HelixTestHelpers.cs" "$payloadDir" -Copy-Item "build\helix\runtests.cmd" $payloadDir -Copy-Item "build\helix\InstallTestAppDependencies.ps1" "$payloadDir" -Copy-Item "build\Helix\EnsureMachineState.ps1" "$payloadDir" - -# Copy the APPX package from the 'drop' artifact dir and Windows Kits -Copy-Item "$repoDirectory\Artifacts\$ArtifactName\appx\CascadiaPackage_0.0.1.0_$Platform.msix" $payloadDir\CascadiaPackage.zip -Copy-Item "C:\program files (x86)\Microsoft SDKs\Windows Kits\10\ExtensionSDKs\Microsoft.VCLibs.Desktop\14.0\Appx\Retail\x64\Microsoft.VCLibs.x64.14.00.Desktop.appx" $payloadDir\VCLibs.zip - -# Rename it to extension of ZIP because Expand-Archive is real sassy on the build machines -# and refuses to unzip it because of its file extension while on a desktop, it just -# does the job without complaining. - -# Extract the APPX package -Expand-Archive -LiteralPath $payloadDir\CascadiaPackage.zip -DestinationPath $payloadDir\appx -Expand-Archive -LiteralPath $payloadDir\VCLibs.zip -DestinationPath $payloadDir\appx -Force diff --git a/build/Helix/ProcessHelixFiles.ps1 b/build/Helix/ProcessHelixFiles.ps1 deleted file mode 100644 index dcd3608a5d4..00000000000 --- a/build/Helix/ProcessHelixFiles.ps1 +++ /dev/null @@ -1,130 +0,0 @@ -Param( - [string]$AccessToken = $env:SYSTEM_ACCESSTOKEN, - [string]$HelixAccessToken = $env:HelixAccessToken, - [string]$CollectionUri = $env:SYSTEM_COLLECTIONURI, - [string]$TeamProject = $env:SYSTEM_TEAMPROJECT, - [string]$BuildUri = $env:BUILD_BUILDURI, - [string]$OutputFolder = "HelixOutput" -) - -$helixLinkFile = "$OutputFolder\LinksToHelixTestFiles.html" - - -function Generate-File-Links -{ - Param ([Array[]]$files,[string]$sectionName) - if($files.Count -gt 0) - { - Out-File -FilePath $helixLinkFile -Append -InputObject "
" - Out-File -FilePath $helixLinkFile -Append -InputObject "

$sectionName

" - Out-File -FilePath $helixLinkFile -Append -InputObject "
    " - foreach($file in $files) - { - $url = Append-HelixAccessTokenToUrl $file.Link "{Your-Helix-Access-Token-Here}" - Out-File -FilePath $helixLinkFile -Append -InputObject "
  • $($url)
  • " - } - Out-File -FilePath $helixLinkFile -Append -InputObject "
" - Out-File -FilePath $helixLinkFile -Append -InputObject "
" - } -} - -function Append-HelixAccessTokenToUrl -{ - Param ([string]$url, [string]$token) - if($token) - { - if($url.Contains("?")) - { - $url = "$($url)&access_token=$($token)" - } - else - { - $url = "$($url)?access_token=$($token)" - } - } - return $url -} - -#Create output directory -New-Item $OutputFolder -ItemType Directory - -$azureDevOpsRestApiHeaders = @{ - "Accept"="application/json" - "Authorization"="Basic $([System.Convert]::ToBase64String([System.Text.ASCIIEncoding]::ASCII.GetBytes(":$AccessToken")))" -} - -. "$PSScriptRoot/AzurePipelinesHelperScripts.ps1" - -$queryUri = GetQueryTestRunsUri -CollectionUri $CollectionUri -TeamProject $TeamProject -BuildUri $BuildUri -IncludeRunDetails -Write-Host "queryUri = $queryUri" - -$testRuns = Invoke-RestMethodWithRetries $queryUri -Headers $azureDevOpsRestApiHeaders -$webClient = New-Object System.Net.WebClient -[System.Collections.Generic.List[string]]$workItems = @() - -foreach ($testRun in $testRuns.value) -{ - Write-Host "testRunUri = $testRun.url" - $testResults = Invoke-RestMethodWithRetries "$($testRun.url)/results?api-version=5.0" -Headers $azureDevOpsRestApiHeaders - $isTestRunNameShown = $false - - foreach ($testResult in $testResults.value) - { - $info = ConvertFrom-Json $testResult.comment - $helixJobId = $info.HelixJobId - $helixWorkItemName = $info.HelixWorkItemName - - $workItem = "$helixJobId-$helixWorkItemName" - - Write-Host "Helix Work Item = $workItem" - - if (-not $workItems.Contains($workItem)) - { - $workItems.Add($workItem) - $filesQueryUri = "https://helix.dot.net/api/2019-06-17/jobs/$helixJobId/workitems/$helixWorkItemName/files" - $filesQueryUri = Append-HelixAccessTokenToUrl $filesQueryUri $helixAccessToken - $files = Invoke-RestMethodWithRetries $filesQueryUri - - $screenShots = $files | where { $_.Name.EndsWith(".jpg") } - $dumps = $files | where { $_.Name.EndsWith(".dmp") } - $pgcFiles = $files | where { $_.Name.EndsWith(".pgc") } - if ($screenShots.Count + $dumps.Count + $pgcFiles.Count -gt 0) - { - if(-Not $isTestRunNameShown) - { - Out-File -FilePath $helixLinkFile -Append -InputObject "

$($testRun.name)

" - $isTestRunNameShown = $true - } - Out-File -FilePath $helixLinkFile -Append -InputObject "

$helixWorkItemName

" - Generate-File-Links $screenShots "Screenshots" - Generate-File-Links $dumps "CrashDumps" - Generate-File-Links $pgcFiles "PGC files" - $misc = $files | where { ($screenShots -NotContains $_) -And ($dumps -NotContains $_) -And ($visualTreeVerificationFiles -NotContains $_) -And ($pgcFiles -NotContains $_) } - Generate-File-Links $misc "Misc" - - foreach($pgcFile in $pgcFiles) - { - $flavorPath = $testResult.automatedTestName.Split('.')[0] - $archPath = $testResult.automatedTestName.Split('.')[1] - $fileName = $pgcFile.Name - $fullPath = "$OutputFolder\PGO\$flavorPath\$archPath" - $destination = "$fullPath\$fileName" - - Write-Host "Copying $($pgcFile.Name) to $destination" - - if (-Not (Test-Path $fullPath)) - { - New-Item $fullPath -ItemType Directory - } - - $link = $pgcFile.Link - - Write-Host "Downloading $link to $destination" - - $link = Append-HelixAccessTokenToUrl $link $HelixAccessToken - Download-FileWithRetries $link $destination - } - } - } - } -} diff --git a/build/Helix/RunTestsInHelix.proj b/build/Helix/RunTestsInHelix.proj deleted file mode 100644 index db00314ff06..00000000000 --- a/build/Helix/RunTestsInHelix.proj +++ /dev/null @@ -1,20 +0,0 @@ - - - pr/terminal/$(BUILD_SOURCEBRANCH)/ - true - true - true - $(HelixPreCommands);set testnameprefix=$(Configuration).$(Platform);set testbuildplatform=$(Platform);set rerunPassesRequiredToAvoidFailure=$(rerunPassesRequiredToAvoidFailure) - ..\..\bin\$(Platform)\$(Configuration)\ - - - - - - - - - - - - \ No newline at end of file diff --git a/build/Helix/UpdateUnreliableTests.ps1 b/build/Helix/UpdateUnreliableTests.ps1 deleted file mode 100644 index ecf4e8bf7a4..00000000000 --- a/build/Helix/UpdateUnreliableTests.ps1 +++ /dev/null @@ -1,136 +0,0 @@ -[CmdLetBinding()] -Param( - [Parameter(Mandatory = $true)] - [int]$RerunPassesRequiredToAvoidFailure, - - [string]$AccessToken = $env:SYSTEM_ACCESSTOKEN, - [string]$CollectionUri = $env:SYSTEM_COLLECTIONURI, - [string]$TeamProject = $env:SYSTEM_TEAMPROJECT, - [string]$BuildUri = $env:BUILD_BUILDURI -) - -. "$PSScriptRoot/AzurePipelinesHelperScripts.ps1" - - -$azureDevOpsRestApiHeaders = @{ - "Accept"="application/json" - "Authorization"="Basic $([System.Convert]::ToBase64String([System.Text.ASCIIEncoding]::ASCII.GetBytes(":$AccessToken")))" -} - -$queryUri = GetQueryTestRunsUri -CollectionUri $CollectionUri -TeamProject $TeamProject -BuildUri $BuildUri -Write-Host "queryUri = $queryUri" - -# To account for unreliable tests, we'll iterate through all of the tests associated with this build, check to see any tests that were unreliable -# (denoted by being marked as "skipped"), and if so, we'll instead mark those tests with a warning and enumerate all of the attempted runs -# with their pass/fail states as well as any relevant error messages for failed attempts. -$testRuns = Invoke-RestMethodWithRetries $queryUri -Headers $azureDevOpsRestApiHeaders - -$timesSeenByRunName = @{} - -foreach ($testRun in $testRuns.value) -{ - $testRunResultsUri = "$($testRun.url)/results?api-version=5.0" - - Write-Host "Marking test run `"$($testRun.name)`" as in progress so we can change its results to account for unreliable tests." - Invoke-RestMethod "$($testRun.url)?api-version=5.0" -Method Patch -Body (ConvertTo-Json @{ "state" = "InProgress" }) -Headers $azureDevOpsRestApiHeaders -ContentType "application/json" | Out-Null - - Write-Host "Retrieving test results..." - $testResults = Invoke-RestMethodWithRetries $testRunResultsUri -Headers $azureDevOpsRestApiHeaders - - foreach ($testResult in $testResults.value) - { - $testNeedsSubResultProcessing = $false - if ($testResult.outcome -eq "NotExecuted") - { - $testNeedsSubResultProcessing = $true - } - elseif($testResult.outcome -eq "Failed") - { - $testNeedsSubResultProcessing = $testResult.errorMessage -like "*_subresults.json*" - } - - if ($testNeedsSubResultProcessing) - { - Write-Host " Test $($testResult.testCaseTitle) was detected as unreliable. Updating..." - - # The errorMessage field contains a link to the JSON-encoded rerun result data. - $resultsJson = Download-StringWithRetries "Error results" $testResult.errorMessage - $rerunResults = ConvertFrom-Json $resultsJson - [System.Collections.Generic.List[System.Collections.Hashtable]]$rerunDataList = @() - $attemptCount = 0 - $passCount = 0 - $totalDuration = 0 - - foreach ($rerun in $rerunResults.results) - { - $rerunData = @{ - "displayName" = "Attempt #$($attemptCount + 1) - $($testResult.testCaseTitle)"; - "durationInMs" = $rerun.duration; - "outcome" = $rerun.outcome; - } - - if ($rerun.outcome -eq "Passed") - { - $passCount++ - } - - if ($attemptCount -gt 0) - { - $rerunData["sequenceId"] = $attemptCount - } - - Write-Host " Attempt #$($attemptCount + 1): $($rerun.outcome)" - - if ($rerun.outcome -ne "Passed") - { - $screenshots = "$($rerunResults.blobPrefix)/$($rerun.screenshots -join @" -$($rerunResults.blobSuffix) -$($rerunResults.blobPrefix) -"@)$($rerunResults.blobSuffix)" - - # We subtract 1 from the error index because we added 1 so we could use 0 - # as a default value not injected into the JSON in order to keep its size down. - # We did this because there's a maximum size enforced for the errorMessage parameter - # in the Azure DevOps REST API. - $fullErrorMessage = @" -Log: $($rerunResults.blobPrefix)/$($rerun.log)$($rerunResults.blobSuffix) - -Screenshots: -$screenshots - -Error log: -$($rerunResults.errors[$rerun.errorIndex - 1]) -"@ - - $rerunData["errorMessage"] = $fullErrorMessage - } - - $attemptCount++ - $totalDuration += $rerun.duration - $rerunDataList.Add($rerunData) - } - - $overallOutcome = "Warning" - - if ($attemptCount -eq 2) - { - Write-Host " Test $($testResult.testCaseTitle) passed on the immediate rerun, so we'll mark it as unreliable." - } - elseif ($passCount -gt $RerunPassesRequiredToAvoidFailure) - { - Write-Host " Test $($testResult.testCaseTitle) passed on $passCount of $attemptCount attempts, which is greater than or equal to the $RerunPassesRequiredToAvoidFailure passes required to avoid being marked as failed. Marking as unreliable." - } - else - { - Write-Host " Test $($testResult.testCaseTitle) passed on only $passCount of $attemptCount attempts, which is less than the $RerunPassesRequiredToAvoidFailure passes required to avoid being marked as failed. Marking as failed." - $overallOutcome = "Failed" - } - - $updateBody = ConvertTo-Json @(@{ "id" = $testResult.id; "outcome" = $overallOutcome; "errorMessage" = " "; "durationInMs" = $totalDuration; "subResults" = $rerunDataList; "resultGroupType" = "rerun" }) -Depth 5 - Invoke-RestMethod -Uri $testRunResultsUri -Method Patch -Headers $azureDevOpsRestApiHeaders -Body $updateBody -ContentType "application/json" | Out-Null - } - } - - Write-Host "Finished updates. Re-marking test run `"$($testRun.name)`" as completed." - Invoke-RestMethod -Uri "$($testRun.url)?api-version=5.0" -Method Patch -Body (ConvertTo-Json @{ "state" = "Completed" }) -Headers $azureDevOpsRestApiHeaders -ContentType "application/json" | Out-Null -} diff --git a/build/Helix/global.json b/build/Helix/global.json deleted file mode 100644 index cec97c1d235..00000000000 --- a/build/Helix/global.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "msbuild-sdks": { - "Microsoft.DotNet.Helix.Sdk": "5.0.0-beta.20277.5" - } -} diff --git a/build/Helix/packages.config b/build/Helix/packages.config deleted file mode 100644 index b101a50d6fe..00000000000 --- a/build/Helix/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/build/Helix/readme.md b/build/Helix/readme.md deleted file mode 100644 index d51fc973c1e..00000000000 --- a/build/Helix/readme.md +++ /dev/null @@ -1,32 +0,0 @@ -This directory contains code and configuration files to run WinUI tests in Helix. - -Helix is a cloud hosted test execution environment which is accessed via the Arcade SDK. -More details: -* [Arcade](https://github.com/dotnet/arcade) -* [Helix](https://github.com/dotnet/arcade/tree/master/src/Microsoft.DotNet.Helix/Sdk) - -WinUI tests are scheduled in Helix by the Azure DevOps Pipeline: [RunHelixTests.yml](../RunHelixTests.yml). - -The workflow is as follows: -1. NuGet Restore is called on the packages.config in this directory. This downloads any runtime dependencies -that are needed to run tests. -2. PrepareHelixPayload.ps1 is called. This copies the necessary files from various locations into a Helix -payload directory. This directory is what will get sent to the Helix machines. -3. RunTestsInHelix.proj is executed. This proj has a dependency on -[Microsoft.DotNet.Helix.Sdk](https://github.com/dotnet/arcade/tree/master/src/Microsoft.DotNet.Helix/Sdk) -which it uses to publish the Helix payload directory and to schedule the Helix Work Items. The WinUI tests -are parallelized into multiple Helix Work Items. -4. Each Helix Work Item calls [runtests.cmd](runtests.cmd) with a specific query to pass to -[TAEF](https://docs.microsoft.com/en-us/windows-hardware/drivers/taef/) which runs the tests. -5. If a test is detected to have failed, we run it again, first once, then eight more times if it fails again. -If it fails all ten times, we report the test as failed; otherwise, we report it as unreliable, -which will show up as a warning, but which will not fail the build. When a test is reported as unreliable, -we include the results for each individual run via a JSON string in the original test's errorMessage field. -6. TAEF produces logs in WTT format. Helix is able to process logs in XUnit format. We run -[ConvertWttLogToXUnit.ps1](ConvertWttLogToXUnit.ps1) to convert the logs into the necessary format. -7. RunTestsInHelix.proj has EnableAzurePipelinesReporter set to true. This allows the XUnit formatted test -results to be reported back to the Azure DevOps Pipeline. -8. We process unreliable tests once all tests have been reported by reading the JSON string from the -errorMessage field and calling the Azure DevOps REST API to modify the unreliable tests to have sub-results -added to the test and to mark the test as "warning", which will enable people to see exactly how the test -failed in runs where it did. \ No newline at end of file diff --git a/build/Helix/runtests.cmd b/build/Helix/runtests.cmd deleted file mode 100644 index 5c543a141bf..00000000000 --- a/build/Helix/runtests.cmd +++ /dev/null @@ -1,105 +0,0 @@ -setlocal ENABLEDELAYEDEXPANSION - -echo %TIME% - -robocopy %HELIX_CORRELATION_PAYLOAD% . /s /NP > NUL - -echo %TIME% - -reg add HKLM\Software\Policies\Microsoft\Windows\Appx /v AllowAllTrustedApps /t REG_DWORD /d 1 /f - -rem enable dump collection for our test apps: -rem note, this script is run from a 32-bit cmd, but we need to set the native reg-key -FOR %%A IN (TestHostApp.exe,te.exe,te.processhost.exe,conhost.exe,OpenConsole.exe,WindowsTerminal.exe) DO ( - %systemroot%\sysnative\cmd.exe /c reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\%%A" /v DumpFolder /t REG_EXPAND_SZ /d %HELIX_DUMP_FOLDER% /f - %systemroot%\sysnative\cmd.exe /c reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\%%A" /v DumpType /t REG_DWORD /d 2 /f - %systemroot%\sysnative\cmd.exe /c reg add "HKLM\Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\%%A" /v DumpCount /t REG_DWORD /d 10 /f -) - -echo %TIME% - -:: kill dhandler, which is a tool designed to handle unexpected windows appearing. But since our tests are -:: expected to show UI we don't want it running. -taskkill -f -im dhandler.exe - -echo %TIME% -powershell -ExecutionPolicy Bypass .\EnsureMachineState.ps1 -echo %TIME% -powershell -ExecutionPolicy Bypass .\InstallTestAppDependencies.ps1 -echo %TIME% - -set testBinaryCandidates=TerminalApp.LocalTests.dll SettingsModel.LocalTests.dll Conhost.UIA.Tests.dll WindowsTerminal.UIA.Tests.dll -set testBinaries= -for %%B in (%testBinaryCandidates%) do ( - if exist %%B ( - set "testBinaries=!testBinaries! %%B" - ) -) - -echo %TIME% -te.exe %testBinaries% /enablewttlogging /unicodeOutput:false /sessionTimeout:0:15 /testtimeout:0:10 /screenCaptureOnError %* -echo %TIME% - -powershell -ExecutionPolicy Bypass Get-Process - -move te.wtl te_original.wtl - -copy /y te_original.wtl %HELIX_WORKITEM_UPLOAD_ROOT% -copy /y WexLogFileOutput\*.jpg %HELIX_WORKITEM_UPLOAD_ROOT% -copy /y *.pgc %HELIX_WORKITEM_UPLOAD_ROOT% - -set FailedTestQuery= -for /F "tokens=* usebackq" %%I IN (`powershell -ExecutionPolicy Bypass .\OutputFailedTestQuery.ps1 te_original.wtl`) DO ( - set FailedTestQuery=%%I -) - -rem The first time, we'll just re-run failed tests once. In many cases, tests fail very rarely, such that -rem a single re-run will be sufficient to detect many unreliable tests. -if "%FailedTestQuery%" == "" goto :SkipReruns - -echo %TIME% -te.exe %testBinaries% /enablewttlogging /unicodeOutput:false /sessionTimeout:0:15 /testtimeout:0:10 /screenCaptureOnError /select:"%FailedTestQuery%" -echo %TIME% - -move te.wtl te_rerun.wtl - -copy /y te_rerun.wtl %HELIX_WORKITEM_UPLOAD_ROOT% -copy /y WexLogFileOutput\*.jpg %HELIX_WORKITEM_UPLOAD_ROOT% - -rem If there are still failing tests remaining, we'll run them eight more times, so they'll have been run a total of ten times. -rem If any tests fail all ten times, we can be pretty confident that these are actual test failures rather than unreliable tests. -if not exist te_rerun.wtl goto :SkipReruns - -set FailedTestQuery= -for /F "tokens=* usebackq" %%I IN (`powershell -ExecutionPolicy Bypass .\OutputFailedTestQuery.ps1 te_rerun.wtl`) DO ( - set FailedTestQuery=%%I -) - -if "%FailedTestQuery%" == "" goto :SkipReruns - -echo %TIME% -te.exe %testBinaries% /enablewttlogging /unicodeOutput:false /sessionTimeout:0:15 /testtimeout:0:10 /screenCaptureOnError /testmode:Loop /LoopTest:8 /select:"%FailedTestQuery%" -echo %TIME% - -powershell -ExecutionPolicy Bypass Get-Process - -move te.wtl te_rerun_multiple.wtl - -copy /y te_rerun_multiple.wtl %HELIX_WORKITEM_UPLOAD_ROOT% -copy /y WexLogFileOutput\*.jpg %HELIX_WORKITEM_UPLOAD_ROOT% -powershell -ExecutionPolicy Bypass .\CopyVisualTreeVerificationFiles.ps1 - -:SkipReruns - -powershell -ExecutionPolicy Bypass Get-Process - -echo %TIME% -powershell -ExecutionPolicy Bypass .\OutputSubResultsJsonFiles.ps1 te_original.wtl te_rerun.wtl te_rerun_multiple.wtl %testnameprefix% -powershell -ExecutionPolicy Bypass .\ConvertWttLogToXUnit.ps1 te_original.wtl te_rerun.wtl te_rerun_multiple.wtl testResults.xml %testnameprefix% -echo %TIME% - -copy /y *_subresults.json %HELIX_WORKITEM_UPLOAD_ROOT% - -type testResults.xml - -echo %TIME% diff --git a/build/config/ESRPSigning_ConPTY.json b/build/config/ESRPSigning_ConPTY.json deleted file mode 100644 index d01e9c9eabe..00000000000 --- a/build/config/ESRPSigning_ConPTY.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "Version": "1.0.0", - "UseMinimatch": false, - "SignBatches": [ - { - "MatchedPath": [ - "conpty.dll", - "OpenConsole.exe" - ], - "SigningInfo": { - "Operations": [ - { - "KeyCode": "CP-230012", - "OperationSetCode": "SigntoolSign", - "Parameters": [ - { - "parameterName": "OpusName", - "parameterValue": "Microsoft" - }, - { - "parameterName": "OpusInfo", - "parameterValue": "http://www.microsoft.com" - }, - { - "parameterName": "FileDigest", - "parameterValue": "/fd \"SHA256\"" - }, - { - "parameterName": "PageHash", - "parameterValue": "/NPH" - }, - { - "parameterName": "TimeStamp", - "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" - } - ], - "ToolName": "sign", - "ToolVersion": "1.0" - }, - { - "KeyCode": "CP-230012", - "OperationSetCode": "SigntoolVerify", - "Parameters": [], - "ToolName": "sign", - "ToolVersion": "1.0" - } - ] - } - } - ] -} diff --git a/build/config/esrp.build.batch.conpty.json b/build/config/esrp.build.batch.conpty.json new file mode 100644 index 00000000000..b0097056ec5 --- /dev/null +++ b/build/config/esrp.build.batch.conpty.json @@ -0,0 +1,47 @@ +[ + { + "MatchedPath": [ + "conpty.dll", + "OpenConsole.exe" + ], + "SigningInfo": { + "Operations": [ + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolSign", + "Parameters": [ + { + "parameterName": "OpusName", + "parameterValue": "Microsoft" + }, + { + "parameterName": "OpusInfo", + "parameterValue": "http://www.microsoft.com" + }, + { + "parameterName": "FileDigest", + "parameterValue": "/fd \"SHA256\"" + }, + { + "parameterName": "PageHash", + "parameterValue": "/NPH" + }, + { + "parameterName": "TimeStamp", + "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + } + ], + "ToolName": "sign", + "ToolVersion": "1.0" + }, + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolVerify", + "Parameters": [], + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + } + } +] diff --git a/build/config/esrp.build.batch.terminal_constituents.json b/build/config/esrp.build.batch.terminal_constituents.json new file mode 100644 index 00000000000..c33123a16de --- /dev/null +++ b/build/config/esrp.build.batch.terminal_constituents.json @@ -0,0 +1,65 @@ +[ + { + "MatchedPath": [ + // Namespaced DLLs + "PackageContents/Microsoft.Terminal.*.dll", + "PackageContents/Microsoft.Terminal.*.winmd", + + // ConPTY and DefTerm + "PackageContents/OpenConsole.exe", + "PackageContents/OpenConsoleProxy.dll", + + // Legacy DLLs with old names + "PackageContents/TerminalApp.dll", + "PackageContents/TerminalApp.winmd", + "PackageContents/TerminalConnection.dll", + "PackageContents/TerminalThemeHelpers.dll", + "PackageContents/WindowsTerminalShellExt.dll", + + // The rest + "PackageContents/TerminalAzBridge.exe", + "PackageContents/wt.exe", + "PackageContents/WindowsTerminal.exe", + "PackageContents/elevate-shim.exe" + ], + "SigningInfo": { + "Operations": [ + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolSign", + "Parameters": [ + { + "parameterName": "OpusName", + "parameterValue": "Microsoft" + }, + { + "parameterName": "OpusInfo", + "parameterValue": "http://www.microsoft.com" + }, + { + "parameterName": "FileDigest", + "parameterValue": "/fd \"SHA256\"" + }, + { + "parameterName": "PageHash", + "parameterValue": "/NPH" + }, + { + "parameterName": "TimeStamp", + "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + } + ], + "ToolName": "sign", + "ToolVersion": "1.0" + }, + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolVerify", + "Parameters": [], + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + } + } +] diff --git a/build/config/esrp.build.batch.wpf.json b/build/config/esrp.build.batch.wpf.json new file mode 100644 index 00000000000..62432046664 --- /dev/null +++ b/build/config/esrp.build.batch.wpf.json @@ -0,0 +1,46 @@ +[ + { + "MatchedPath": [ + "Microsoft.Terminal.Control/Microsoft.Terminal.Control.dll" + ], + "SigningInfo": { + "Operations": [ + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolSign", + "Parameters": [ + { + "parameterName": "OpusName", + "parameterValue": "Microsoft" + }, + { + "parameterName": "OpusInfo", + "parameterValue": "http://www.microsoft.com" + }, + { + "parameterName": "FileDigest", + "parameterValue": "/fd \"SHA256\"" + }, + { + "parameterName": "PageHash", + "parameterValue": "/NPH" + }, + { + "parameterName": "TimeStamp", + "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + } + ], + "ToolName": "sign", + "ToolVersion": "1.0" + }, + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolVerify", + "Parameters": [], + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + } + } +] diff --git a/build/config/esrp.build.batch.wpfdotnet.json b/build/config/esrp.build.batch.wpfdotnet.json new file mode 100644 index 00000000000..0699353f64c --- /dev/null +++ b/build/config/esrp.build.batch.wpfdotnet.json @@ -0,0 +1,47 @@ +[ + { + "MatchedPath": [ + "WpfTerminalControl/net472/Microsoft.Terminal.Wpf.dll", + "WpfTerminalControl/net6.0-windows/Microsoft.Terminal.Wpf.dll" + ], + "SigningInfo": { + "Operations": [ + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolSign", + "Parameters": [ + { + "parameterName": "OpusName", + "parameterValue": "Microsoft" + }, + { + "parameterName": "OpusInfo", + "parameterValue": "http://www.microsoft.com" + }, + { + "parameterName": "FileDigest", + "parameterValue": "/fd \"SHA256\"" + }, + { + "parameterName": "PageHash", + "parameterValue": "/NPH" + }, + { + "parameterName": "TimeStamp", + "parameterValue": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + } + ], + "ToolName": "sign", + "ToolVersion": "1.0" + }, + { + "KeyCode": "CP-230012", + "OperationSetCode": "SigntoolVerify", + "Parameters": [], + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + } + } +] diff --git a/build/config/release.gdnbaselines b/build/config/release.gdnbaselines new file mode 100644 index 00000000000..b8f686e3a94 --- /dev/null +++ b/build/config/release.gdnbaselines @@ -0,0 +1,1127 @@ +{ + "hydrated": false, + "properties": { + "helpUri": "https://eng.ms/docs/microsoft-security/security/azure-security/cloudai-security-fundamentals-engineering/security-integration/guardian-wiki/microsoft-guardian/general/baselines", + "hydrationStatus": "This file does not contain identifying data. It is safe to check into your repo. To hydrate this file with identifying data, run `guardian hydrate --help` and follow the guidance." + }, + "version": "1.0.0", + "baselines": { + "default": { + "name": "default", + "createdDate": "2023-09-29 19:39:12Z", + "lastUpdatedDate": "2023-09-29 19:39:12Z" + } + }, + "results": { + "b1e592dc96e9286d806682680cffcb44b7ba2f7ea883b022371037689fe2bb5b": { + "signature": "b1e592dc96e9286d806682680cffcb44b7ba2f7ea883b022371037689fe2bb5b", + "alternativeSignatures": [ + "25d5f2d86325f3e6666cf720c3b0827c7b5773c42f3770a6e83ab8bc0f716686" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "fd608e2146a69491516290ae3b65d4d094e5f9ba53c6624ff457c3b21f67e433": { + "signature": "fd608e2146a69491516290ae3b65d4d094e5f9ba53c6624ff457c3b21f67e433", + "alternativeSignatures": [ + "528526d5f81c7387e9eca88c1dc1e7886bb3189d9c53f7678c63a44a7e78d2b8" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "104eb68a26c9a422f9973b85603046c42bb6894f398e1ebd454d829a386c47cd": { + "signature": "104eb68a26c9a422f9973b85603046c42bb6894f398e1ebd454d829a386c47cd", + "alternativeSignatures": [ + "33b75434f899dc72a71c55e6667420b5f3406641eae1a784bad8632fe80eccc6" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "fa8ab295467d81fd138402f12899da84cdf312e2e84712a539e08361b6900651": { + "signature": "fa8ab295467d81fd138402f12899da84cdf312e2e84712a539e08361b6900651", + "alternativeSignatures": [ + "b0ef4eae3f158488f99f7705cc93d037d55e8bd39b173c40e25581a35c6889d2" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "2d5cf239e62a256384275134ea1e1180b927f4cd53e51193751b0b5671045be8": { + "signature": "2d5cf239e62a256384275134ea1e1180b927f4cd53e51193751b0b5671045be8", + "alternativeSignatures": [ + "bd73f2f051d6525c01db61a4c4a6c3b9a80083da83ed602eae2a70e17286a7ed" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "e88b3902e68d0315f7bef3a24860a7d3d9abd2d960fde06a0c650c6bb569df74": { + "signature": "e88b3902e68d0315f7bef3a24860a7d3d9abd2d960fde06a0c650c6bb569df74", + "alternativeSignatures": [ + "143ade735d3d6d19f999555f2ce706f647a64688054b5f19052f99992ab325fd" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "01306239b92e4508b0ab60e025cadc4c974c33c29f1eb28d2b3fdda8d4019e09": { + "signature": "01306239b92e4508b0ab60e025cadc4c974c33c29f1eb28d2b3fdda8d4019e09", + "alternativeSignatures": [ + "dca24210a3064ca7069a737f9a88f4a25b1cc1cd4c9e2a095156297246611de5" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "675ea9bd7809b2f210105e9703dffe8e48ee134ab21677e7cc4556bf22782e8d": { + "signature": "675ea9bd7809b2f210105e9703dffe8e48ee134ab21677e7cc4556bf22782e8d", + "alternativeSignatures": [ + "7d5287a33645767969627a20e3a65fb2f1bb2db0e79a689b5a804a98f65d01fa" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "6e040bc57aa08165f8af6007e3794149d3a2c0325021e746e9705ada7c05b30c": { + "signature": "6e040bc57aa08165f8af6007e3794149d3a2c0325021e746e9705ada7c05b30c", + "alternativeSignatures": [ + "218c0d7d5332113e33632d06eb0f209bac711ac515bd76a0fcfda2a0cbed885d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "73e85b3af96a27c797fbe9f36f00feccd4118204615b9477da67e5868dd5dfb9": { + "signature": "73e85b3af96a27c797fbe9f36f00feccd4118204615b9477da67e5868dd5dfb9", + "alternativeSignatures": [ + "49c44c3dc27233eba172214cb302de4b5c9b2a845e8595e7930fad74805183ac" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "15bd7ecdb19cdd263867db23c12a98029cede5476c89e870b811fce45abb8db4": { + "signature": "15bd7ecdb19cdd263867db23c12a98029cede5476c89e870b811fce45abb8db4", + "alternativeSignatures": [ + "2705f7f6c9e83d2a812e264f39878e0e0173a1a5efea16e7206c4d02dc419af8" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "3f7d3360f0b185361b1e67b94c22b2a319b7c2d5aa2c8fd7fc3e4626394cba54": { + "signature": "3f7d3360f0b185361b1e67b94c22b2a319b7c2d5aa2c8fd7fc3e4626394cba54", + "alternativeSignatures": [ + "71f05133f86c279daee4f1b85f997955e36857bcc5945dbae71f8bbb91b5df6d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "3bcb157fd01d81513a15da41b4fc8b2820247331689fef5d0026578d95b85716": { + "signature": "3bcb157fd01d81513a15da41b4fc8b2820247331689fef5d0026578d95b85716", + "alternativeSignatures": [ + "67e145d1f3bf6eb205e385884ca6356decffc3cac3e15339cc7ca43441cff99b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "27ae6a9a7047c5ca98d1dc3a9b0885733875387d475f1426afc4d031b357fc1b": { + "signature": "27ae6a9a7047c5ca98d1dc3a9b0885733875387d475f1426afc4d031b357fc1b", + "alternativeSignatures": [ + "b87d72abe37f6144614469221a0ce60e389792843f602805afe149b3ad1dd098" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "bd2aea1d24e36c1dcc128eb87a2c27292ed251d95aedf5f11204647bc68719f8": { + "signature": "bd2aea1d24e36c1dcc128eb87a2c27292ed251d95aedf5f11204647bc68719f8", + "alternativeSignatures": [ + "ca29329aae819543d357e86acf0ccce914dbc3a15e0f91016091c3079638ad34" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "b836a6e0d58634003e054c88f3ed615d8e92182ebc78e9dd2168d8126c33e694": { + "signature": "b836a6e0d58634003e054c88f3ed615d8e92182ebc78e9dd2168d8126c33e694", + "alternativeSignatures": [ + "850aa5d2e92dac06fc119ed297e84dfde9fdb3f9b116bdb2c83e8d66ea442865" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "e54972bb37d35b3b9c7c764cdf5351f0254ae2b8526465fe03c9ba8a04b06651": { + "signature": "e54972bb37d35b3b9c7c764cdf5351f0254ae2b8526465fe03c9ba8a04b06651", + "alternativeSignatures": [ + "9e8723695743edaddfc5b188ec6bde240ddde68516f5c2342bd1c4d2a8c68430" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "3786d03543e25eec1f68beb21a3884953460239c269ba4071baf9fd4f564e763": { + "signature": "3786d03543e25eec1f68beb21a3884953460239c269ba4071baf9fd4f564e763", + "alternativeSignatures": [ + "05e0c9bc16b8ade4d40d4e4371864da4ee7d9c8d68b19c3319543dbebea97a39" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "5f7c1c0c1f9290d3afad4bb3a17d5e5d33f2176e18b8ec406df71e8245ec0b7f": { + "signature": "5f7c1c0c1f9290d3afad4bb3a17d5e5d33f2176e18b8ec406df71e8245ec0b7f", + "alternativeSignatures": [ + "952d91003467bdf2dbf5e72f56b9c69de52c4abf44cc82c0833ba8d89d9befac" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "605037e76782777be2f16c12c023247671ebad0afea868ed0c4bf939c9ff443a": { + "signature": "605037e76782777be2f16c12c023247671ebad0afea868ed0c4bf939c9ff443a", + "alternativeSignatures": [ + "4f77f69716e098fec8214948428cfe9d2c2324d0719250b25e5c084a21d05e69" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "4a173deb8aeab5f4f2463774f117b909dee0168c99bc54b29b1141fca64598bd": { + "signature": "4a173deb8aeab5f4f2463774f117b909dee0168c99bc54b29b1141fca64598bd", + "alternativeSignatures": [ + "66526149b57bbdaa8d4e3437a0099a4e3b7818c911b2110fa40d7d0264ce99f6" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "e557e9c4d1c36f69fd4a2310d22bbeadc1dff3dd2404449b8424662bb1c6adc7": { + "signature": "e557e9c4d1c36f69fd4a2310d22bbeadc1dff3dd2404449b8424662bb1c6adc7", + "alternativeSignatures": [ + "6b93c58cd83ba89289c12b408c2988dfd54d7936c0920981cf690725155caf7a" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "70eb589101b9b57d2e47f6879348a8b93cd0c2f223e2c20d2289c5e1e8be0b9d": { + "signature": "70eb589101b9b57d2e47f6879348a8b93cd0c2f223e2c20d2289c5e1e8be0b9d", + "alternativeSignatures": [ + "e9fe7fc2a31de263521f635058984dd81b4bab9cba174949fc5582fbeef6f693" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "3e5c0b1cad192bf5fa00d6b0f46f4cfaa7251ebaea30177d2d6891890f0dafab": { + "signature": "3e5c0b1cad192bf5fa00d6b0f46f4cfaa7251ebaea30177d2d6891890f0dafab", + "alternativeSignatures": [ + "9a1dd0e934ddd3a33f3cf37372052731f5c157c13cac05ef0539815f845db9bf" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "dd3b2ddb278bb70559efcfc10e19c2f3a3bfe805cbbecd6a16dd141433f0b433": { + "signature": "dd3b2ddb278bb70559efcfc10e19c2f3a3bfe805cbbecd6a16dd141433f0b433", + "alternativeSignatures": [ + "3fcb3a01715c6d244d26ef49fa4c06f8a92616a9c6465c26c4398c554f7fd67f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "a635cb613925ab6c9f6b133890169bdf77acee212b6ac8f83cca7253faafaec7": { + "signature": "a635cb613925ab6c9f6b133890169bdf77acee212b6ac8f83cca7253faafaec7", + "alternativeSignatures": [ + "2ff5cc7a3bf6cd63862cffc5088690fc824eb1d2f9e42c732fcd1611e9e25bfc" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "4ecdfc33e6267bfeadb1507d5304a9737f3ba0ee3132e6d7bc6f3fd68a47824e": { + "signature": "4ecdfc33e6267bfeadb1507d5304a9737f3ba0ee3132e6d7bc6f3fd68a47824e", + "alternativeSignatures": [ + "23dc3273d54a3db12ad729569696b875523201dc13d4cbba9e3642dde17492bb" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "a9b9f171556057eaf197eb19780abfac5df82154f6c06c07240ce73970127df7": { + "signature": "a9b9f171556057eaf197eb19780abfac5df82154f6c06c07240ce73970127df7", + "alternativeSignatures": [ + "0a9f4d3a4aa85e918744a5af36851791eb4b2f44fc132560cc56cf5661ba28fb" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "ad9da2b392f1622c6cff4a2b63eadf0da2ff31811dbbf8c9f2b2c4e8d9fefa1f": { + "signature": "ad9da2b392f1622c6cff4a2b63eadf0da2ff31811dbbf8c9f2b2c4e8d9fefa1f", + "alternativeSignatures": [ + "b1fafebeb213b04346d56182ce395ccb9a0ad866dc28bda801c222499e550396" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "b8f591f33a84c38402239941484ead425c3e37bfcfd486b9be3a15d2213d9fa3": { + "signature": "b8f591f33a84c38402239941484ead425c3e37bfcfd486b9be3a15d2213d9fa3", + "alternativeSignatures": [ + "de56fbe02702da318ea6a113e592b2efee3f942e04e31c5e9300cf6798abea0c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "37adbb986601cf75f2d1eaebbe6d430a70a0886e60685a880e7d1f2c48f9b125": { + "signature": "37adbb986601cf75f2d1eaebbe6d430a70a0886e60685a880e7d1f2c48f9b125", + "alternativeSignatures": [ + "7ebe5c4d5a144a3f356114bf5e062295ee90d5cdc7ca615dc729b7dcba8bed33" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "e0de291c50fb0cae3bdaf75237ac8e3f34acc6a8de18ba589dde4e76352ab849": { + "signature": "e0de291c50fb0cae3bdaf75237ac8e3f34acc6a8de18ba589dde4e76352ab849", + "alternativeSignatures": [ + "52c0187472041933b5d850e47cf28ac6a7ef5ba0a6a85bca65af3b3531ddb06a" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "6b163fce31228367e0323768ab0dcc1224f8416cc856ddc03ccc2b8a2cf9a08e": { + "signature": "6b163fce31228367e0323768ab0dcc1224f8416cc856ddc03ccc2b8a2cf9a08e", + "alternativeSignatures": [ + "0e6f9f2e1008091bcfbf520d7407c3690564ea5118580fd8cfca965946f53a78" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "25012b8cab7c6dddc276e2c0d7888554e8542dd686891914d2c2e82dfd3f697a": { + "signature": "25012b8cab7c6dddc276e2c0d7888554e8542dd686891914d2c2e82dfd3f697a", + "alternativeSignatures": [ + "ea05d52f5ee2b483e83c14216a3e56bc8a4474396b71cbb426ced61242d81919" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "bfc7ac3b82698c138a970968cce2c849ed0e45bb8930d42215f6704659f63762": { + "signature": "bfc7ac3b82698c138a970968cce2c849ed0e45bb8930d42215f6704659f63762", + "alternativeSignatures": [ + "c59c7529464c717d1909058d1f4fbc5109881effafab3c67bbbf02ccdffddd4e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "25582fa1ab3be3a375a0d053304e65b50ebfa590f81a5d957759304ba29e3053": { + "signature": "25582fa1ab3be3a375a0d053304e65b50ebfa590f81a5d957759304ba29e3053", + "alternativeSignatures": [ + "e2628baf1e09340a2063cd39c238e541014a65f4433018cc36cd25c5c8c3043d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "38b73c3711c0c9cd958195f318fd2e6ab1f10cfa94abdfb7505d784ba022cfae": { + "signature": "38b73c3711c0c9cd958195f318fd2e6ab1f10cfa94abdfb7505d784ba022cfae", + "alternativeSignatures": [ + "6688a9492755e33e541513bf297d0b4f459f70a43486fd8411749a2caf5cb91c" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "250a0184e9feee525e9a54930f5714965bd2bc29d0fe91c502c560443fa0e10a": { + "signature": "250a0184e9feee525e9a54930f5714965bd2bc29d0fe91c502c560443fa0e10a", + "alternativeSignatures": [ + "d7b1083c67959b8f095acd532a10244a0a5afcbc93eefc66be20c19841b2588e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "2c64c980db98b04a7daeedf4c5d358b8ecaecca81a8e0f70911fd211e06c8e20": { + "signature": "2c64c980db98b04a7daeedf4c5d358b8ecaecca81a8e0f70911fd211e06c8e20", + "alternativeSignatures": [ + "7778c4704d515b92d4dc77a9b612c151e6bb9e7cd88e100c7d0419fb150f34e6" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "3bb5f422737103df8f018ec0789d2b7793ce5b1641927d5646e963126e73e1b5": { + "signature": "3bb5f422737103df8f018ec0789d2b7793ce5b1641927d5646e963126e73e1b5", + "alternativeSignatures": [ + "225e02e47ea3f999bc43279246ee51b4287e4e2b4b7dac899da91c365d8acd0e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "6e39bdcfe28e2cb6868a5dcbe12fa712d2a60762bb57fd82734089e19ca85b52": { + "signature": "6e39bdcfe28e2cb6868a5dcbe12fa712d2a60762bb57fd82734089e19ca85b52", + "alternativeSignatures": [ + "f6ebab2bea88d78f69c8ae78f4ec641edd0f0796b9ca193260c44cee9d543a18" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "e9a5cff46470c62be3e1db1e43785b71daa88e466c802d4393bf9248a9e6fb56": { + "signature": "e9a5cff46470c62be3e1db1e43785b71daa88e466c802d4393bf9248a9e6fb56", + "alternativeSignatures": [ + "3bdabc64cff83a1322f107a97ce6eab6e8cb41b8492643e9a0df3561d0169b95" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "9f19392621589641c13fc5762e36429cc4d38fc04f98297006be89e5ca3e5631": { + "signature": "9f19392621589641c13fc5762e36429cc4d38fc04f98297006be89e5ca3e5631", + "alternativeSignatures": [ + "f448a0535740dcb9bddebe7765ea55c819472efdb9cd63761dc156b8af11a260" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "60b306912ae3399a167514dabf495a7f57e0ff17ec9a9491e66cf39c1ecbf60b": { + "signature": "60b306912ae3399a167514dabf495a7f57e0ff17ec9a9491e66cf39c1ecbf60b", + "alternativeSignatures": [ + "fbd4d1fe2e8e21ed5fe000fc592ef9fa98ff52f529b849c9ceca12c85c3cf4f3" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "2498be9bbe27f393fad6af89f23cf228fe5c263e38fa3d20d3652b68c356243b": { + "signature": "2498be9bbe27f393fad6af89f23cf228fe5c263e38fa3d20d3652b68c356243b", + "alternativeSignatures": [ + "750b9e1ff2f1b443502036d226678bcdda2f22a3879e36b61e3bcec24c0eec3e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "147fa7e9b0187ab163dfe5049876c838b2b599a8ac2c243226ab4fed8d9e3513": { + "signature": "147fa7e9b0187ab163dfe5049876c838b2b599a8ac2c243226ab4fed8d9e3513", + "alternativeSignatures": [ + "5fe9a0ee3ada52e4dbee1aa6f45683a82d14ed812d9d7c1634b786f28fc2ca51" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "a2fe2c57ef4efc03e72dfd1fa653fc9d731b69bda91711f8ab8d46edc3b12667": { + "signature": "a2fe2c57ef4efc03e72dfd1fa653fc9d731b69bda91711f8ab8d46edc3b12667", + "alternativeSignatures": [ + "42ab6b70626c246ddea96b060cb7a79248576d19f003c4f4eedf171f4f5992f4" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "e7973a3b90d74d4ff6ee544dee45bb35ac66214a3e92eadecbf8fafccca9abb1": { + "signature": "e7973a3b90d74d4ff6ee544dee45bb35ac66214a3e92eadecbf8fafccca9abb1", + "alternativeSignatures": [ + "3359d44d5bbf533487fc65e4a98220af62eef0cc6b883bc35b8286ee1a31ca4f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "190440674b3fec2fcc77b341a684a9e9100c8dec0911a8c83f19f6ccedcb2b78": { + "signature": "190440674b3fec2fcc77b341a684a9e9100c8dec0911a8c83f19f6ccedcb2b78", + "alternativeSignatures": [ + "c7aab0deb9b97032353766e961f4b23bc694e85b8b06709beaddfa2e5743e742" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "4d258afa7d015f4fc96c8866e2e43cb00290526d56394eec3848ed650cec840d": { + "signature": "4d258afa7d015f4fc96c8866e2e43cb00290526d56394eec3848ed650cec840d", + "alternativeSignatures": [ + "e23b41b521b849057b8c5ba0594af11fc5ceec59714f3d0ebbeda708511d5803" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "530d02de7ec8a3c9f575cf3770e34665a58b127e01555000e611ee4c5e37e24d": { + "signature": "530d02de7ec8a3c9f575cf3770e34665a58b127e01555000e611ee4c5e37e24d", + "alternativeSignatures": [ + "23f217577bcf9d3a6f87c0ac259cf891a80e78f2b77dd58e631816f3183101bd" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "69a35d8bd5d4766e5dc981526229ccc0d27f238b06357bdd8e0469cd35b47d08": { + "signature": "69a35d8bd5d4766e5dc981526229ccc0d27f238b06357bdd8e0469cd35b47d08", + "alternativeSignatures": [ + "cab1cab825e5846acc097221236feaf3a06895e648c2ef16a4c285616b714987" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "c78a17b7f8d46b9ddedd34240d76adf92e4f1bf27a978c022e4599fe6a7b150d": { + "signature": "c78a17b7f8d46b9ddedd34240d76adf92e4f1bf27a978c022e4599fe6a7b150d", + "alternativeSignatures": [ + "fa75ccd56697c3073a6ef17e2d959ee24b6afc11eabc4bd5dbea1d74ecdb81cb" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "7bd1757994e7f1909ffd25e56393f991d436232150cff2555a97e9b08b347b99": { + "signature": "7bd1757994e7f1909ffd25e56393f991d436232150cff2555a97e9b08b347b99", + "alternativeSignatures": [ + "dbdb5c5ebe211b21d9b25e346dfbc58e6b32500258a1efed248e4630216ce57e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "cef01bb2a477968c8cbc997179d04b90c36febd9cfd21ca973d4a22b3efc4caa": { + "signature": "cef01bb2a477968c8cbc997179d04b90c36febd9cfd21ca973d4a22b3efc4caa", + "alternativeSignatures": [ + "9ec52d86604abde8a13124534ec587d3a1686630ea7bb2f736a66963349abdbd" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "11026da7398e29b59d98ffee5ed5317c243407638a77d7a09637ebe2d8bb09f3": { + "signature": "11026da7398e29b59d98ffee5ed5317c243407638a77d7a09637ebe2d8bb09f3", + "alternativeSignatures": [ + "a642f1f37cf06c75c2082d720e317481bb7e73249dcda33dba0b5cdd6933926f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "8f2550b4f39a798d217679c04dd7cb21b72ef63e6f6d63b06aadb1c40d8c2546": { + "signature": "8f2550b4f39a798d217679c04dd7cb21b72ef63e6f6d63b06aadb1c40d8c2546", + "alternativeSignatures": [ + "10c95aac8513a0d6cc2c0ef08b51f7f4ac3be4b23ddd90d68d06fc536421acc3" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "022eb0065260832f06f12313f8bf99765488c1db9ff9ef8ecf8a0cbf393e878d": { + "signature": "022eb0065260832f06f12313f8bf99765488c1db9ff9ef8ecf8a0cbf393e878d", + "alternativeSignatures": [ + "4801e53b7e46778aa21a8c9a0ec2725e73746fb648e76c9359f6db0f32ac2963" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "36f66ad8b00e978f29a7b1c09c7942247e3b068d131431c3b321190aa7cb2978": { + "signature": "36f66ad8b00e978f29a7b1c09c7942247e3b068d131431c3b321190aa7cb2978", + "alternativeSignatures": [ + "7d3ee020a3a1601c49be0c5d687f46858f679ecf6d4150b97ba9ae5abfa742e4" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "c50b78c8370aa9d767f783bddf8c57b2f1dbd749073ccde60b3b210b116b6951": { + "signature": "c50b78c8370aa9d767f783bddf8c57b2f1dbd749073ccde60b3b210b116b6951", + "alternativeSignatures": [ + "87568cc368760fe9f38d9fb95e93297d8bb5a83587d20d071f97713443df2e04" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "8e2be08973d6028cf58e152fba8dcd5616b7938591d2292eaf3bb5f80bdcf004": { + "signature": "8e2be08973d6028cf58e152fba8dcd5616b7938591d2292eaf3bb5f80bdcf004", + "alternativeSignatures": [ + "d9df5f887062a990099a2cb70e46778aad25304d9758db556040beb4b23a8776" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "be36363b685b28e3ac4457b7a415120cab5a01c14d5c9a19192ef5ebd71c176a": { + "signature": "be36363b685b28e3ac4457b7a415120cab5a01c14d5c9a19192ef5ebd71c176a", + "alternativeSignatures": [ + "13779d67c6e5f5eba285b83093a2c9eec2d79b3b36ee86400873191310088255" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "a6e48721d67f94b2876a97fe4b385ee37adc1b345825f751e87d6bd05095bfb9": { + "signature": "a6e48721d67f94b2876a97fe4b385ee37adc1b345825f751e87d6bd05095bfb9", + "alternativeSignatures": [ + "f6a5898d9652b23b269283d4bc1a8e95865ee9f7125479ab78087e3dd3b3b12f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "b1b1aba985591c904b0faf09b54ddc4763890d25e5dcfa2d3ca758165a616970": { + "signature": "b1b1aba985591c904b0faf09b54ddc4763890d25e5dcfa2d3ca758165a616970", + "alternativeSignatures": [ + "b7ad084f971c1fae38509e87d50fd4984185ea6915d501d6cc0d1eac8bd93abf" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "078e8e5c43a51876fb09d7fab78a07fe896bbbb74c9507f3b6313ed3fe7586d4": { + "signature": "078e8e5c43a51876fb09d7fab78a07fe896bbbb74c9507f3b6313ed3fe7586d4", + "alternativeSignatures": [ + "7046bab04be2bfce75f0a34461871d3dccddab009c2a223a78c08696610c7a55" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "9443465290e747bbefb4435296af78a82a948222097df6559db0d0488f7df81a": { + "signature": "9443465290e747bbefb4435296af78a82a948222097df6559db0d0488f7df81a", + "alternativeSignatures": [ + "47a1795431bb9f78383c54fd33cf3427a774ae9802aa994cbd688f81286904bd" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "01a56e39bd6a3652d95b21035efc6d165eb16451f9558d79ff13d297cd345cd9": { + "signature": "01a56e39bd6a3652d95b21035efc6d165eb16451f9558d79ff13d297cd345cd9", + "alternativeSignatures": [ + "2169e62964a8fa3bb4ccde41e33232efa8b7ddfb6d5a45688c28318c96ccbe52" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "a9c67896453ec9e7fb742e05ec0a47f13c5c6b7bd3886497afe3c3bb860ef006": { + "signature": "a9c67896453ec9e7fb742e05ec0a47f13c5c6b7bd3886497afe3c3bb860ef006", + "alternativeSignatures": [ + "5973211461980400fe2aeea7dafe6079e6f771d799c347a0bcb7c631dc379d5e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "2689cc88d4721d762e3783920aa7150cd00e4b5f7f15bdd81476dbb56876aa08": { + "signature": "2689cc88d4721d762e3783920aa7150cd00e4b5f7f15bdd81476dbb56876aa08", + "alternativeSignatures": [ + "ba41ff939940ab49d1a4b39dfb5fac6108111616c0d7fb87e6f64f1b82cbfbd2" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "64d08c256034d4907fa6655e4914850c945bf1f6db4e14f52a8032eefe8e1245": { + "signature": "64d08c256034d4907fa6655e4914850c945bf1f6db4e14f52a8032eefe8e1245", + "alternativeSignatures": [ + "639e5b7c91137d49bd041d7f241bd2403067f445de5058048c4c6c926af226bd" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "689ed96056f498ca67a5a056efa247ee9aea196362e693a0b196e6e9eb2cba0f": { + "signature": "689ed96056f498ca67a5a056efa247ee9aea196362e693a0b196e6e9eb2cba0f", + "alternativeSignatures": [ + "9473554d81655d5cf548e8033fc5f34cd42cec8697306b75fc2ec31e8c19b29e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "f497cbbab92fbbd65c27b122c7ceaf0d181859365ea121a885d32898dec963c6": { + "signature": "f497cbbab92fbbd65c27b122c7ceaf0d181859365ea121a885d32898dec963c6", + "alternativeSignatures": [ + "2fe25bb29ed8a90e5dba2e8e899f42713b61d178fd18231d560d4873656fe8a4" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "669b421bcaea46b4f3a2b63097a357920df16b02075d1b86a476f9ee6fc4314a": { + "signature": "669b421bcaea46b4f3a2b63097a357920df16b02075d1b86a476f9ee6fc4314a", + "alternativeSignatures": [ + "5647958533f690de004b8f82064ed0fc779fe1206b64a1813f90988481dfb72e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "8bb84450c75dcbee365ee2b2eb2ff83ef91925afb50d9c96aec845729f3a9be1": { + "signature": "8bb84450c75dcbee365ee2b2eb2ff83ef91925afb50d9c96aec845729f3a9be1", + "alternativeSignatures": [ + "85d7ccfcf73dbbc98b78cbd81581f3e81e9bc9a632a589fd79abb6f9cdd3236d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "9beca9c8ed341ed7dbc682811ca43ec7174d945df99613c85e76e45ad55ac7f3": { + "signature": "9beca9c8ed341ed7dbc682811ca43ec7174d945df99613c85e76e45ad55ac7f3", + "alternativeSignatures": [ + "147836cc11afe71d92bdf75ef6d5b1b97ae5f5709d07a9d8c58ef8bce0631a86" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "a0f61b31ca15ee653301086835bfb62889b4f4b537fd703ccfc21df9aa280a59": { + "signature": "a0f61b31ca15ee653301086835bfb62889b4f4b537fd703ccfc21df9aa280a59", + "alternativeSignatures": [ + "62828b4278eba310bc7982e5afdac6b0a865bb647f8d3cb078a6391e1a48054f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "235159b32d9022a9e8bf8e37fd5489bb11ca6f1bf56e8ee8737e63358c3610e5": { + "signature": "235159b32d9022a9e8bf8e37fd5489bb11ca6f1bf56e8ee8737e63358c3610e5", + "alternativeSignatures": [ + "ddb5cc4ca95b12e6fcccfd2c5089c798307d3bb664d91e9a87f6efbd1ea78a19" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "48738e93956293a663a2d1f6933bd6856afc4699c22d45da51ca02ffe4781230": { + "signature": "48738e93956293a663a2d1f6933bd6856afc4699c22d45da51ca02ffe4781230", + "alternativeSignatures": [ + "e83017371567ceabc524ef3e26a5520be1aac07e75b1f02a173f2eb847fbc3e5" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "6d0c84954b066bde9f165d3e7471f621d824bf0f9d920125f2188196c3e7be99": { + "signature": "6d0c84954b066bde9f165d3e7471f621d824bf0f9d920125f2188196c3e7be99", + "alternativeSignatures": [ + "07e93499ac1047ac94bc10474ba57d397bf395f28f8d6e0dd08eeab03f17a539" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "b033555adb13ce0c0ec9e65689e4be5f9856f49f9e201f3dbbb24d430d76ec15": { + "signature": "b033555adb13ce0c0ec9e65689e4be5f9856f49f9e201f3dbbb24d430d76ec15", + "alternativeSignatures": [ + "0a59d205aee1fdc5cb027a46c424e4a2da06c5650aadbfdfec77d744278d6b7b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "c522ca7bfcad2bc36cfb9567a5bbe36395bb3a5969ce411832197ff9ccfd4b32": { + "signature": "c522ca7bfcad2bc36cfb9567a5bbe36395bb3a5969ce411832197ff9ccfd4b32", + "alternativeSignatures": [ + "32eb8b00cbe99b945a02337c349a0fb97e1763fa9782469531a6859714a7160f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "1c58db43c898e119381ecd4a9bb9701f2bbbffd3d0889ca734a905c151b168db": { + "signature": "1c58db43c898e119381ecd4a9bb9701f2bbbffd3d0889ca734a905c151b168db", + "alternativeSignatures": [ + "a87bb1c17c23667355c9b8e17f84f37671b65040a3aa7870a7d169165583211e" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "ef7ba70ebe8984da430b1787f439496e14810afd9848a851a3d4cacc37ae7eac": { + "signature": "ef7ba70ebe8984da430b1787f439496e14810afd9848a851a3d4cacc37ae7eac", + "alternativeSignatures": [ + "bbff3ea19b6dd5baa7d56928526a38313685c1d81a30c7c2e7c31d7105d8287f" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "5bb44f02281666fb7ef18753b4ed0e08923d741efe0361ab1336c18dd0086111": { + "signature": "5bb44f02281666fb7ef18753b4ed0e08923d741efe0361ab1336c18dd0086111", + "alternativeSignatures": [ + "a4f1b29f64aa99073ad3678c41b29ab15bd3af2cbc87ae6b05e6568265734146" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "1621b0375d4c98eb6822a7ae37feccda594bbd0137cba47b721f9f9288929947": { + "signature": "1621b0375d4c98eb6822a7ae37feccda594bbd0137cba47b721f9f9288929947", + "alternativeSignatures": [ + "05396ecc761c29e0e0b0a1508c1ed091b213ea18917b9f0ba118c1e7032c51df" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "c566d2437202984d3a9d2682ca810d7c52eb78c7b6236c7b9c82db6f7ba63ac8": { + "signature": "c566d2437202984d3a9d2682ca810d7c52eb78c7b6236c7b9c82db6f7ba63ac8", + "alternativeSignatures": [ + "2bcbfb431661bacfa69c2c43c8f09f47444b22353d9e3f7db28f98c7b8126bd6" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "8f8856d0c4f85bb601ea84e7b9da0d5d636573c772951c4e85bf4cf61fef72bc": { + "signature": "8f8856d0c4f85bb601ea84e7b9da0d5d636573c772951c4e85bf4cf61fef72bc", + "alternativeSignatures": [ + "769ffcc5ae3360b1017647384c184dc56574e0d9ddd00f4083e1c986e9f616b2" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "b4c31c908facbb22d23b15c3280359184d736901c154d516be16495dbb35ccb0": { + "signature": "b4c31c908facbb22d23b15c3280359184d736901c154d516be16495dbb35ccb0", + "alternativeSignatures": [ + "d4603cccc6c303b5f16f1120b15dc74e8bdbef5877922fdcf57f3b29423c027b" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "7e3401dab114451f8ccc26a6ee0ac27639a41cef983b5c7ca7b22f8e03748b53": { + "signature": "7e3401dab114451f8ccc26a6ee0ac27639a41cef983b5c7ca7b22f8e03748b53", + "alternativeSignatures": [ + "32964f7bed67a8e77a61cdc1cdedfb55c8800e04f16e9673dbc1c9dda0d2fcf0" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "1599eec39bd8bfe41754c1b87f6d4cf2517107bf55a31fd6f06e57853f0edcb3": { + "signature": "1599eec39bd8bfe41754c1b87f6d4cf2517107bf55a31fd6f06e57853f0edcb3", + "alternativeSignatures": [ + "1d0195a64263b4be03267b1ce650ac0ad6b3589f32639ecd3792df0a39134d2a" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "c7e28dfe20e2c60575af07324e9960283b6ab567f4d0877763109330077b535d": { + "signature": "c7e28dfe20e2c60575af07324e9960283b6ab567f4d0877763109330077b535d", + "alternativeSignatures": [ + "22da5e4da2ab3befa6aea6c7b562de7057d367a0bf4f05a5791a02c6d7de5886" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "da7db308719d405aa91b08fcda683bc73d9fb73906ad14857b07f1487e2538fb": { + "signature": "da7db308719d405aa91b08fcda683bc73d9fb73906ad14857b07f1487e2538fb", + "alternativeSignatures": [ + "e8a05e57577cfff0f0614b0e2ac77ef86185b636ac9a85322decda6d93bb1025" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "406449365cf5b8a747cda6bcb9f698ab04e5f23c76ea26b15ae5f6dd199e200a": { + "signature": "406449365cf5b8a747cda6bcb9f698ab04e5f23c76ea26b15ae5f6dd199e200a", + "alternativeSignatures": [ + "ab85af1c9f00c18837eddc1a658df6f16759b57337f0c576979a7ead9ca5aea5" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "2d3985d721950fdc54d6dd67f6da4e2f26da1de752237d6eff2bee79e76e74cf": { + "signature": "2d3985d721950fdc54d6dd67f6da4e2f26da1de752237d6eff2bee79e76e74cf", + "alternativeSignatures": [ + "eb8fe28224b13b24a5fd5dab39c73356ab0e958242fefd3468a632b6f1fc8468" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "73a9b54e10ff814734690c8e99319851d3caffb8d7ee02237ccef08057623c57": { + "signature": "73a9b54e10ff814734690c8e99319851d3caffb8d7ee02237ccef08057623c57", + "alternativeSignatures": [ + "a8395f556a6edc7f633b06820ab22d4ae275f1e2f0fb9f0389520cba4a3fa038" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "f5e7a576035cfef04eaefb5c3d64e7575c80aea1449c6528d16bd18f19601938": { + "signature": "f5e7a576035cfef04eaefb5c3d64e7575c80aea1449c6528d16bd18f19601938", + "alternativeSignatures": [ + "e3bf1d972a8173cd7c9e853facdd28b184614cffc18ce2a47e00114894a9a0f3" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "85150297f02b3d19a5a032b1ec6b083b4bc2eec2643f60cceac18fd07551134e": { + "signature": "85150297f02b3d19a5a032b1ec6b083b4bc2eec2643f60cceac18fd07551134e", + "alternativeSignatures": [ + "56a1cb19171420c70451d831140f44f8beace9ee605870a54998170e9b9eea44" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "db5e6cce78b5039be2e56eb828caea7fbc1b2c0ddf2204f3c95e90805f480025": { + "signature": "db5e6cce78b5039be2e56eb828caea7fbc1b2c0ddf2204f3c95e90805f480025", + "alternativeSignatures": [ + "38588e5b5cbf9208115ae67488467545f67a83e5ea18d08f65e76318ba2809c1" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "87cbf986f8699bddcd94445159a5772945dd63bb4f55587afaecb5be2846e3cb": { + "signature": "87cbf986f8699bddcd94445159a5772945dd63bb4f55587afaecb5be2846e3cb", + "alternativeSignatures": [ + "229e52e7992660959c3cc4581b73623f6807f87a266ecced4af4343f1f8a2c06" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "c3cc891778043c08b6177ace3e90a4af4be52f7936d9df603efcfa77f11df9cf": { + "signature": "c3cc891778043c08b6177ace3e90a4af4be52f7936d9df603efcfa77f11df9cf", + "alternativeSignatures": [ + "4d98cab41917051c77b027daaa0ebaad30ae99b738bb3721331ddacb3d13e990" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "dbd00c32ac388db25b7b4095d242411fb192ecc6d471c80d72f6c83bc5790f5d": { + "signature": "dbd00c32ac388db25b7b4095d242411fb192ecc6d471c80d72f6c83bc5790f5d", + "alternativeSignatures": [ + "5d3a76ad12be60e1fc117dae08b4e56f70e0e905000e6bac82b7c0d7d47efa12" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "5b68b91f6e33cf24cb0a6b106bad2cccc5f7191510437ce703a42f1fefbb1d13": { + "signature": "5b68b91f6e33cf24cb0a6b106bad2cccc5f7191510437ce703a42f1fefbb1d13", + "alternativeSignatures": [ + "cbd85190a9dc566b475d9d0da29ef2890469d545129695dccd33e12b042c7f87" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "48a3d50b09e89367e161fa2e843b605dbf840ac3264623bad804634b9e17f0b1": { + "signature": "48a3d50b09e89367e161fa2e843b605dbf840ac3264623bad804634b9e17f0b1", + "alternativeSignatures": [ + "ecf7b4e72800b2f2881b924e7c602984c0101738bfe7d901ef9bf68d54f22acc" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "5b641532bc10265a307b0984e2c1cf7478d345aa73e0b9f52f57de6b6139db0d": { + "signature": "5b641532bc10265a307b0984e2c1cf7478d345aa73e0b9f52f57de6b6139db0d", + "alternativeSignatures": [ + "93f72434bf401ab42b1478aae49174f0f231385f2d190646de90b2f321bf0405" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "f5bbdce1f432ce0cc0f8eab2a548e86389c11972a0fd807d5b0218929dc0667f": { + "signature": "f5bbdce1f432ce0cc0f8eab2a548e86389c11972a0fd807d5b0218929dc0667f", + "alternativeSignatures": [ + "c0dd620ed7794312e1f535291893133d2983ef6af266bf1261e08f5a40030184" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "b48abf4f4fc439b180232125d632b47c3ca44cde8f518e08d38905578255a76e": { + "signature": "b48abf4f4fc439b180232125d632b47c3ca44cde8f518e08d38905578255a76e", + "alternativeSignatures": [ + "8b1d9c30d610788b227bcf7b1a02f715887adb26d9d476705a864bfbd3eec42d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "5b91412070b80c595c93a131c6423a78aca0eb174e67b49a72f3a28b2f2e04fc": { + "signature": "5b91412070b80c595c93a131c6423a78aca0eb174e67b49a72f3a28b2f2e04fc", + "alternativeSignatures": [ + "3b52062806f35937f2372d4497d5679d95e9c28d9cef710ac9f0551b3bf6fa69" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "4e6e328cd795ad8ffa3d409d0e0313ae91f87124a058e5dfe64dfbc93e236f78": { + "signature": "4e6e328cd795ad8ffa3d409d0e0313ae91f87124a058e5dfe64dfbc93e236f78", + "alternativeSignatures": [ + "656279220733cb5f45e3ef13a50ae9174c9763f7c24ff163245f6bea398d0794" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "4dd68b37dee025fa0a77ac00e6e85ce7e1ad8add70a2226e10a6423534359a9b": { + "signature": "4dd68b37dee025fa0a77ac00e6e85ce7e1ad8add70a2226e10a6423534359a9b", + "alternativeSignatures": [ + "c63dd7cfcff47e1a2f686035319925e8b2d3b0f1ac8db86b39d4b1821ae4797d" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "62a125c376534b19e9083efbad081f32bc294602b7f19a5210ad940e1c450a5f": { + "signature": "62a125c376534b19e9083efbad081f32bc294602b7f19a5210ad940e1c450a5f", + "alternativeSignatures": [ + "2b2732249979c5e87cc79cbdec660e2b1c8eba1f93a362e5595ec03cdf1e4951" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + }, + "f918c167a1a70deba61361fd3138b76fba86387a1f41237efeda8f01d464457e": { + "signature": "f918c167a1a70deba61361fd3138b76fba86387a1f41237efeda8f01d464457e", + "alternativeSignatures": [ + "959e93d957e0e5ec521d2f3b9dae02db123812fb8d523d8175329b08694d65d9" + ], + "memberOf": [ + "default" + ], + "createdDate": "2023-09-29 19:39:12Z" + } + } +} \ No newline at end of file diff --git a/build/config/template.appinstaller b/build/config/template.appinstaller new file mode 100644 index 00000000000..7977fd950b8 --- /dev/null +++ b/build/config/template.appinstaller @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + diff --git a/build/config/tsa.json b/build/config/tsa.json new file mode 100644 index 00000000000..89874d37fc0 --- /dev/null +++ b/build/config/tsa.json @@ -0,0 +1,6 @@ +{ + "instanceUrl": "https://microsoft.visualstudio.com", + "projectName": "OS", + "areaPath": "OS\\Windows Client and Services\\ADEPT\\E4D-Engineered for Developers\\SHINE\\Terminal", + "notificationAliases": ["condev@microsoft.com", "duhowett@microsoft.com"] +} diff --git a/build/packages.config b/build/packages.config index 96481841311..ceadd04ac2c 100644 --- a/build/packages.config +++ b/build/packages.config @@ -3,8 +3,6 @@ - - diff --git a/build/pgo/PGO.DB.proj b/build/pgo/PGO.DB.proj index f89eff931ac..ce7e1c6ebcb 100644 --- a/build/pgo/PGO.DB.proj +++ b/build/pgo/PGO.DB.proj @@ -1,4 +1,5 @@ + - \ No newline at end of file + diff --git a/build/pgo/Terminal.PGO.DB.nuspec b/build/pgo/Terminal.PGO.DB.nuspec index d49574423a8..b1437af2a0b 100644 --- a/build/pgo/Terminal.PGO.DB.nuspec +++ b/build/pgo/Terminal.PGO.DB.nuspec @@ -12,5 +12,6 @@ + diff --git a/build/pgo/Terminal.PGO.props b/build/pgo/Terminal.PGO.props index 55a5e39f4d8..109bdd7ffa0 100644 --- a/build/pgo/Terminal.PGO.props +++ b/build/pgo/Terminal.PGO.props @@ -14,16 +14,16 @@ Microsoft.Internal.Windows.Terminal.PGODatabase - + $(VersionMajor) - + $(VersionMinor) - + 0 - + @@ -46,6 +46,5 @@ true - - + diff --git a/build/pipelines/ci.yml b/build/pipelines/ci.yml index 7e225d7cb89..ab3490bc58b 100644 --- a/build/pipelines/ci.yml +++ b/build/pipelines/ci.yml @@ -29,76 +29,80 @@ variables: # 0.0.1904.0900 name: 0.0.$(Date:yyMM).$(Date:dd)$(Rev:rr) +parameters: + - name: auditMode + displayName: "Build in Audit Mode (x64)" + type: boolean + default: true + - name: runTests + displayName: "Run Tests" + type: boolean + default: true + - name: buildPlatforms + type: object + default: + - x64 + - x86 + - arm64 + stages: - - stage: Audit_x64 - displayName: Audit Mode - dependsOn: [] - condition: succeeded() - jobs: - - template: ./templates/build-console-audit-job.yml - parameters: - platform: x64 + - ${{ if eq(parameters.auditMode, true) }}: + - stage: Audit_x64 + displayName: Audit Mode + dependsOn: [] + jobs: + - template: ./templates-v2/job-build-project.yml + parameters: + pool: + ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-OSS-L + ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-INT-L + buildPlatforms: [x64] + buildConfigurations: [AuditMode] + buildEverything: true + keepAllExpensiveBuildOutputs: false - - stage: Build_x64 - displayName: Build x64 - dependsOn: [] - condition: succeeded() - jobs: - - template: ./templates/build-console-ci.yml - parameters: - platform: x64 - - stage: Build_x86 - displayName: Build x86 - dependsOn: [] - jobs: - - template: ./templates/build-console-ci.yml - parameters: - platform: x86 - - stage: Build_ARM64 - displayName: Build ARM64 + - stage: CodeHealth + displayName: Code Health dependsOn: [] - condition: not(eq(variables['Build.Reason'], 'PullRequest')) jobs: - - template: ./templates/build-console-ci.yml - parameters: - platform: ARM64 + - template: ./templates-v2/job-check-code-format.yml - - stage: Test_x64 - displayName: Test x64 - dependsOn: [Build_x64] - condition: succeeded() - jobs: - - template: ./templates/test-console-ci.yml - parameters: - platform: x64 - - stage: Test_x86 - displayName: Test x86 - dependsOn: [Build_x86] - jobs: - - template: ./templates/test-console-ci.yml - parameters: - platform: x86 + - ${{ each platform in parameters.buildPlatforms }}: + - stage: Build_${{ platform }} + displayName: Build ${{ platform }} + dependsOn: [] + jobs: + - template: ./templates-v2/job-build-project.yml + parameters: + pool: + ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-OSS-L + ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-INT-L + buildPlatforms: + - ${{ platform }} + buildConfigurations: [Release] + buildEverything: true + keepAllExpensiveBuildOutputs: false - - stage: Helix_x64 - displayName: Helix x64 - dependsOn: [Build_x64] - condition: and(succeeded(), not(eq(variables['Build.Reason'], 'PullRequest'))) - jobs: - - template: ./templates/console-ci-helix-job.yml - parameters: - platform: x64 + - ${{ if eq(parameters.runTests, true) }}: + - stage: Test_${{ platform }} + displayName: Test ${{ platform }} + dependsOn: + - Build_${{ platform }} + condition: succeeded() + jobs: + - template: ./templates-v2/job-test-project.yml + parameters: + platform: ${{ platform }} + # The tests might be run more than once; log one artifact per attempt. + outputArtifactStem: -$(System.JobAttempt) - - stage: Scripts - displayName: Code Health Scripts - dependsOn: [] - condition: succeeded() - jobs: - - template: ./templates/check-formatting.yml - - - - stage: CodeIndexer - displayName: Github CodeNav Indexer - dependsOn: [Build_x64] - condition: and(succeeded(), not(eq(variables['Build.Reason'], 'PullRequest'))) - jobs: - - template: ./templates/codenav-indexer.yml + - ${{ if ne(variables['Build.Reason'], 'PullRequest') }}: + - stage: CodeIndexer + displayName: GitHub CodeNav Indexer + dependsOn: [] + jobs: + - template: ./templates-v2/job-index-github-codenav.yml diff --git a/build/pipelines/daily-loc-submission.yml b/build/pipelines/daily-loc-submission.yml index 126b2e10359..890c1f86a47 100644 --- a/build/pipelines/daily-loc-submission.yml +++ b/build/pipelines/daily-loc-submission.yml @@ -27,6 +27,7 @@ steps: clean: true submodules: false fetchDepth: 1 # Don't need a deep checkout for loc files! + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here persistCredentials: true path: s # Adding a second repo made Azure DevOps change where we're checked out. diff --git a/build/pipelines/feature-flag-ci.yml b/build/pipelines/feature-flag-ci.yml index 0ca4400463d..ead379dbf36 100644 --- a/build/pipelines/feature-flag-ci.yml +++ b/build/pipelines/feature-flag-ci.yml @@ -7,6 +7,7 @@ pr: paths: include: - src/features.xml + - build/pipelines/feature-flag-ci.yml variables: - name: runCodesignValidationInjectionBG @@ -21,9 +22,19 @@ parameters: # Dev is built automatically # WindowsInbox does not typically build with VS. -jobs: +stages: - ${{ each branding in parameters.buildBrandings }}: - - template: ./templates/build-console-ci.yml - parameters: - platform: x64 - branding: ${{ branding }} + - stage: Build_${{ branding }} + dependsOn: [] + displayName: Build ${{ branding }} + jobs: + - template: ./templates-v2/job-build-project.yml + parameters: + pool: # This only runs in CI + name: SHINE-OSS-L + buildPlatforms: [x64] + buildConfigurations: [Release] + buildEverything: true + branding: ${{ branding }} + keepAllExpensiveBuildOutputs: false + artifactStem: -${{ branding }} # Disambiguate artifacts with the same config/platform diff --git a/build/pipelines/fuzz.yml b/build/pipelines/fuzz.yml index b5604b5f227..75b781d33c6 100644 --- a/build/pipelines/fuzz.yml +++ b/build/pipelines/fuzz.yml @@ -16,44 +16,52 @@ pr: none name: 0.0.$(Date:yyMM).$(Date:dd)$(Rev:rr) stages: - - stage: Build_Fuzz_Config - displayName: Build Fuzzers + - stage: Build + displayName: Fuzzing Build dependsOn: [] condition: succeeded() jobs: - - template: ./templates/build-console-fuzzing.yml - parameters: - platform: x64 - - stage: OneFuzz - displayName: Submit OneFuzz Job - dependsOn: ['Build_Fuzz_Config'] + - template: ./templates-v2/job-build-project.yml + parameters: + pool: + ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-OSS-L + ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-INT-L + buildPlatforms: [x64] + buildConfigurations: [Fuzzing] + buildEverything: true + keepAllExpensiveBuildOutputs: false + + - stage: Submit + displayName: Submit to OneFuzz + dependsOn: [Build] condition: succeeded() - pool: - vmImage: 'ubuntu-latest' - variables: - artifactName: fuzzingBuildOutput jobs: - - job: - steps: - - task: DownloadBuildArtifacts@0 - inputs: - artifactName: $(artifactName) - downloadPath: $(Build.ArtifactStagingDirectory) - - task: UsePythonVersion@0 - inputs: - versionSpec: '3.x' - addToPath: true - architecture: 'x64' - - bash: | - set -ex - pip -q install onefuzz - onefuzz config --endpoint $(endpoint) --client_id $(client_id) --authority $(authority) --tenant_domain $(tenant_domain) --client_secret $(client_secret) - sed -i s/INSERT_PAT_HERE/$(ado_pat)/ build/Fuzz/notifications-ado.json - sed -i s/INSERT_ASSIGNED_HERE/$(ado_assigned_to)/ build/Fuzz/notifications-ado.json - displayName: Configure OneFuzz - - bash: | - onefuzz template libfuzzer basic --colocate_all_tasks --vm_count 1 --target_exe $target_exe_path --notification_config @./build/Fuzz/notifications-ado.json OpenConsole $test_name $(Build.SourceVersion) default - displayName: Submit OneFuzz Job - env: - target_exe_path: $(Build.ArtifactStagingDirectory)/$(artifactName)/Fuzzing/x64/test/OpenConsoleFuzzer.exe - test_name: WriteCharsLegacy + - job: + pool: + vmImage: 'ubuntu-latest' + steps: + - task: DownloadPipelineArtifact@2 + displayName: Download artifacts + inputs: + artifactName: build-x64-Fuzzing + downloadPath: $(Build.ArtifactStagingDirectory) + - task: UsePythonVersion@0 + inputs: + versionSpec: '3.x' + addToPath: true + architecture: 'x64' + - bash: | + set -ex + pip -q install onefuzz + onefuzz config --endpoint $(endpoint) --client_id $(client_id) --authority $(authority) --tenant_domain $(tenant_domain) --client_secret $(client_secret) + sed -i s/INSERT_PAT_HERE/$(ado_pat)/ build/Fuzz/notifications-ado.json + sed -i s/INSERT_ASSIGNED_HERE/$(ado_assigned_to)/ build/Fuzz/notifications-ado.json + displayName: Configure OneFuzz + - bash: | + onefuzz template libfuzzer basic --colocate_all_tasks --vm_count 1 --target_exe $target_exe_path --notification_config @./build/Fuzz/notifications-ado.json OpenConsole $test_name $(Build.SourceVersion) default + displayName: Submit OneFuzz Job + env: + target_exe_path: $(Build.ArtifactStagingDirectory)/OpenConsoleFuzzer.exe + test_name: WriteCharsLegacy diff --git a/build/pipelines/ob-nightly.yml b/build/pipelines/ob-nightly.yml new file mode 100644 index 00000000000..1c90866f9e2 --- /dev/null +++ b/build/pipelines/ob-nightly.yml @@ -0,0 +1,53 @@ +trigger: none +pr: none +schedules: + - cron: "30 3 * * 2-6" # Run at 03:30 UTC Tuesday through Saturday (After the work day in Pacific, Mon-Fri) + displayName: "Nightly Terminal Build" + branches: + include: + - main + always: false # only run if there's code changes! + +parameters: + - name: publishToAzure + displayName: "Deploy to **PUBLIC** Azure Storage" + type: boolean + default: true + +name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr) + +variables: + - template: templates-v2/variables-nuget-package-version.yml + parameters: + branding: Canary + - template: templates-v2/variables-onebranch-config.yml + +extends: + template: templates-v2/pipeline-onebranch-full-release-build.yml + parameters: + official: true + branding: Canary + buildTerminal: true + pgoBuildMode: Optimize + codeSign: true + publishSymbolsToPublic: true + publishVpackToWindows: false + symbolExpiryTime: 15 + ${{ if eq(true, parameters.publishToAzure) }}: + extraPublishJobs: + - template: build/pipelines/templates-v2/job-deploy-to-azure-storage.yml@self + parameters: + pool: { type: windows } + variables: + ob_git_checkout: false # This job checks itself out + ob_git_skip_checkout_none: true + ob_outputDirectory: "$(Build.SourcesDirectory)/_none" + dependsOn: [PublishSymbols] + storagePublicRootURL: $(AppInstallerRootURL) + subscription: $(AzureSubscriptionName) + storageAccount: $(AzureStorageAccount) + storageContainer: $(AzureStorageContainer) + buildConfiguration: Release + buildPlatforms: [x64, x86, arm64] + environment: production-canary + diff --git a/build/pipelines/ob-release.yml b/build/pipelines/ob-release.yml new file mode 100644 index 00000000000..ca168e6d337 --- /dev/null +++ b/build/pipelines/ob-release.yml @@ -0,0 +1,83 @@ +trigger: none +pr: none + +# Expose all of these parameters for user configuration. +parameters: + - name: branding + displayName: "Branding (Build Type)" + type: string + default: Release + values: + - Release + - Preview + - Canary + - Dev + - name: buildTerminal + displayName: "Build Windows Terminal MSIX" + type: boolean + default: true + - name: buildConPTY + displayName: "Build ConPTY NuGet" + type: boolean + default: false + - name: buildWPF + displayName: "Build Terminal WPF Control" + type: boolean + default: false + - name: pgoBuildMode + displayName: "PGO Build Mode" + type: string + default: Optimize + values: + - Optimize + - Instrument + - None + - name: buildConfigurations + displayName: "Build Configurations" + type: object + default: + - Release + - name: buildPlatforms + displayName: "Build Platforms" + type: object + default: + - x64 + - x86 + - arm64 + - name: terminalInternalPackageVersion + displayName: "Terminal Internal Package Version" + type: string + default: '0.0.8' + + - name: publishSymbolsToPublic + displayName: "Publish Symbols to MSDL" + type: boolean + default: true + - name: publishVpackToWindows + displayName: "Publish VPack to Windows" + type: boolean + default: false + +name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr) + +variables: + - template: templates-v2/variables-nuget-package-version.yml + parameters: + branding: ${{ parameters.branding }} + - template: templates-v2/variables-onebranch-config.yml + +extends: + template: templates-v2/pipeline-onebranch-full-release-build.yml + parameters: + official: true + branding: ${{ parameters.branding }} + buildTerminal: ${{ parameters.buildTerminal }} + buildConPTY: ${{ parameters.buildConPTY }} + buildWPF: ${{ parameters.buildWPF }} + pgoBuildMode: ${{ parameters.pgoBuildMode }} + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + codeSign: true + terminalInternalPackageVersion: ${{ parameters.terminalInternalPackageVersion }} + publishSymbolsToPublic: ${{ parameters.publishSymbolsToPublic }} + publishVpackToWindows: ${{ parameters.publishVpackToWindows }} diff --git a/build/pipelines/pgo.yml b/build/pipelines/pgo.yml index 1c93a56d8cd..d659c4e2520 100644 --- a/build/pipelines/pgo.yml +++ b/build/pipelines/pgo.yml @@ -1,5 +1,27 @@ trigger: none pr: none +schedules: + - cron: "0 5 * * 2-6" # Run at 05:00 UTC Tuesday through Saturday (Even later than Localization, after the work day in Pacific, Mon-Fri) + displayName: "Nightly Instrumentation Build" + branches: + include: + - main + always: false # only run if there's code changes! + +parameters: + - name: branding + displayName: "Branding (Build Type)" + type: string + default: Preview # By default, we'll PGO the Preview builds to get max coverage + values: + - Release + - Preview + - Dev + - name: buildPlatforms + type: object + default: + - x64 + - arm64 variables: - name: runCodesignValidationInjectionBG @@ -10,18 +32,57 @@ variables: name: 0.0.$(Date:yyMM).$(Date:dd)$(Rev:rr) stages: - - stage: Build_x64 - displayName: Build x64 + - stage: Build + displayName: Build dependsOn: [] condition: succeeded() jobs: - - template: ./templates/build-console-pgo.yml + - template: ./templates-v2/job-build-project.yml parameters: - platform: x64 - - stage: Publish_PGO_Databases - displayName: Publish PGO databases - dependsOn: ['Build_x64'] + pool: + ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-OSS-L + ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + name: SHINE-INT-L + branding: ${{ parameters.branding }} + buildPlatforms: ${{ parameters.buildPlatforms }} + buildConfigurations: [Release] + buildEverything: true + pgoBuildMode: Instrument + artifactStem: -instrumentation + + - stage: RunPGO + displayName: Run PGO + dependsOn: [Build] + condition: succeeded() + jobs: + - ${{ each platform in parameters.buildPlatforms }}: + - template: ./templates-v2/job-run-pgo-tests.yml + parameters: + # This job chooses its own pools based on platform + buildPlatform: ${{ platform }} + buildConfiguration: Release + artifactStem: -instrumentation + + - stage: FinalizePGO + displayName: Finalize PGO and Publish + dependsOn: [RunPGO] + condition: succeeded() jobs: - - template: ./templates/pgo-build-and-publish-nuget-job.yml + # This job takes multiple platforms and fans them back in to a single artifact. + - template: ./templates-v2/job-pgo-merge-pgd.yml + parameters: + jobName: MergePGD + pool: + vmImage: 'windows-2022' + buildConfiguration: Release + buildPlatforms: ${{ parameters.buildPlatforms }} + artifactStem: -instrumentation + + - template: ./templates-v2/job-pgo-build-nuget-and-publish.yml parameters: - pgoArtifact: 'PGO' + pool: + vmImage: 'windows-2022' + dependsOn: MergePGD + buildConfiguration: Release + artifactStem: -instrumentation diff --git a/build/pipelines/release.yml b/build/pipelines/release.yml deleted file mode 100644 index 053dc03a738..00000000000 --- a/build/pipelines/release.yml +++ /dev/null @@ -1,723 +0,0 @@ -# This build should never run as CI or against a pull request. -trigger: none -pr: none - -pool: - name: WinDevPool-L - demands: ImageOverride -equals WinDevVS17-latest - -parameters: - - name: branding - displayName: "Branding (Build Type)" - type: string - default: Release - values: - - Release - - Preview - - name: buildTerminal - displayName: "Build Windows Terminal MSIX" - type: boolean - default: true - - name: runCompliance - displayName: "Run Compliance and Security Build" - type: boolean - default: true - - name: publishSymbolsToPublic - displayName: "Publish Symbols to MSDL" - type: boolean - default: true - - name: buildTerminalVPack - displayName: "Build Windows Terminal VPack" - type: boolean - default: false - - name: buildConPTY - displayName: "Build ConPTY NuGet" - type: boolean - default: false - - name: buildWPF - displayName: "Build Terminal WPF Control" - type: boolean - default: false - - name: pgoBuildMode - displayName: "PGO Build Mode" - type: string - default: Optimize - values: - - Optimize - - Instrument - - None - - name: buildConfigurations - type: object - default: - - Release - - name: buildPlatforms - type: object - default: - - x64 - - x86 - - arm64 - - name: buildWindowsVersions - type: object - default: - - Win10 - - Win11 - -variables: - TerminalInternalPackageVersion: "0.0.7" - # If we are building a branch called "release-*", change the NuGet suffix - # to "preview". If we don't do that, XES will set the suffix to "release1" - # because it truncates the value after the first period. - # We also want to disable the suffix entirely if we're Release branded while - # on a release branch. - # main is special, however. XES ignores main. Since we never produce actual - # shipping builds from main, we want to force it to have a beta label as - # well. - # - # In effect: - # BRANCH / BRANDING | Release | Preview - # ------------------|----------------------------|----------------------------- - # release-* | 1.12.20220427 | 1.13.20220427-preview - # main | 1.14.20220427-experimental | 1.14.20220427-experimental - # all others | 1.14.20220427-mybranch | 1.14.20220427-mybranch - ${{ if startsWith(variables['Build.SourceBranchName'], 'release-') }}: - ${{ if eq(parameters.branding, 'Release') }}: - NoNuGetPackBetaVersion: true - ${{ else }}: - NuGetPackBetaVersion: preview - ${{ elseif eq(variables['Build.SourceBranchName'], 'main') }}: - NuGetPackBetaVersion: experimental - # The NuGet packages have to use *somebody's* DLLs. We used to force them to - # use the Win10 build outputs, but if there isn't a Win10 build we should use - # the Win11 one. - ${{ if containsValue(parameters.buildWindowsVersions, 'Win10') }}: - TerminalBestVersionForNuGetPackages: Win10 - ${{ else }}: - TerminalBestVersionForNuGetPackages: Win11 - -name: $(BuildDefinitionName)_$(date:yyMM).$(date:dd)$(rev:rrr) -resources: - repositories: - - repository: self - type: git - ref: main -jobs: -- job: Build - strategy: - matrix: - ${{ each config in parameters.buildConfigurations }}: - ${{ each platform in parameters.buildPlatforms }}: - ${{ each windowsVersion in parameters.buildWindowsVersions }}: - ${{ config }}_${{ platform }}_${{ windowsVersion }}: - BuildConfiguration: ${{ config }} - BuildPlatform: ${{ platform }} - TerminalTargetWindowsVersion: ${{ windowsVersion }} - displayName: Build - timeoutInMinutes: 240 - cancelTimeoutInMinutes: 1 - steps: - - checkout: self - clean: true - submodules: true - persistCredentials: True - - task: PkgESSetupBuild@12 - displayName: Package ES - Setup Build - inputs: - disableOutputRedirect: true - - task: PowerShell@2 - displayName: Rationalize Build Platform - inputs: - targetType: inline - script: >- - $Arch = "$(BuildPlatform)" - - If ($Arch -Eq "x86") { $Arch = "Win32" } - - Write-Host "##vso[task.setvariable variable=RationalizedBuildPlatform]${Arch}" - - template: .\templates\restore-nuget-steps.yml - - task: UniversalPackages@0 - displayName: Download terminal-internal Universal Package - inputs: - feedListDownload: 2b3f8893-a6e8-411f-b197-a9e05576da48 - packageListDownload: e82d490c-af86-4733-9dc4-07b772033204 - versionListDownload: $(TerminalInternalPackageVersion) - - task: TouchdownBuildTask@1 - displayName: Download Localization Files - inputs: - teamId: 7105 - authId: $(TouchdownAppId) - authKey: $(TouchdownAppKey) - resourceFilePath: >- - src\cascadia\TerminalApp\Resources\en-US\Resources.resw - - src\cascadia\TerminalApp\Resources\en-US\ContextMenu.resw - - src\cascadia\TerminalControl\Resources\en-US\Resources.resw - - src\cascadia\TerminalConnection\Resources\en-US\Resources.resw - - src\cascadia\TerminalSettingsModel\Resources\en-US\Resources.resw - - src\cascadia\TerminalSettingsEditor\Resources\en-US\Resources.resw - - src\cascadia\CascadiaPackage\Resources\en-US\Resources.resw - appendRelativeDir: true - localizationTarget: false - pseudoSetting: Included - - task: PowerShell@2 - displayName: Move Loc files one level up - inputs: - targetType: inline - script: >- - $Files = Get-ChildItem . -R -Filter 'Resources.resw' | ? FullName -Like '*en-US\*\Resources.resw' - - $Files | % { Move-Item -Verbose $_.Directory $_.Directory.Parent.Parent -EA:Ignore } - pwsh: true - - task: PowerShell@2 - displayName: Copy the Context Menu Loc Resources to CascadiaPackage - inputs: - filePath: ./build/scripts/Copy-ContextMenuResourcesToCascadiaPackage.ps1 - pwsh: true - - task: PowerShell@2 - displayName: Generate NOTICE.html from NOTICE.md - inputs: - filePath: .\build\scripts\Generate-ThirdPartyNotices.ps1 - arguments: -MarkdownNoticePath .\NOTICE.md -OutputPath .\src\cascadia\CascadiaPackage\NOTICE.html - pwsh: true - - ${{ if eq(parameters.buildTerminal, true) }}: - - pwsh: |- - ./build/scripts/Patch-ManifestsToWindowsVersion.ps1 -NewWindowsVersion "10.0.22000.0" - displayName: Update manifest target version to Win11 (if necessary) - condition: and(succeeded(), eq(variables['TerminalTargetWindowsVersion'], 'Win11')) - - task: VSBuild@1 - displayName: Build solution **\OpenConsole.sln - condition: true - inputs: - solution: '**\OpenConsole.sln' - msbuildArgs: /p:WindowsTerminalOfficialBuild=true /p:WindowsTerminalBranding=${{ parameters.branding }};PGOBuildMode=${{ parameters.pgoBuildMode }} /t:Terminal\CascadiaPackage /p:WindowsTerminalReleaseBuild=true /bl:$(Build.SourcesDirectory)\msbuild.binlog - platform: $(BuildPlatform) - configuration: $(BuildConfiguration) - clean: true - maximumCpuCount: true - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: binlog' - condition: failed() - continueOnError: True - inputs: - PathtoPublish: $(Build.SourcesDirectory)\msbuild.binlog - ArtifactName: binlog-$(BuildPlatform)-$(TerminalTargetWindowsVersion) - - task: PowerShell@2 - displayName: Check MSIX for common regressions - inputs: - targetType: inline - script: >- - $Package = Get-ChildItem -Recurse -Filter "CascadiaPackage_*.msix" - - .\build\scripts\Test-WindowsTerminalPackage.ps1 -Verbose -Path $Package.FullName - pwsh: true - - ${{ if eq(parameters.buildWPF, true) }}: - - task: VSBuild@1 - displayName: Build solution **\OpenConsole.sln for PublicTerminalCore - inputs: - solution: '**\OpenConsole.sln' - msbuildArgs: /p:WindowsTerminalOfficialBuild=true /p:WindowsTerminalBranding=${{ parameters.branding }};PGOBuildMode=${{ parameters.pgoBuildMode }} /p:WindowsTerminalReleaseBuild=true /t:Terminal\wpf\PublicTerminalCore - platform: $(BuildPlatform) - configuration: $(BuildConfiguration) - - ${{ if eq(parameters.buildConPTY, true) }}: - - task: VSBuild@1 - displayName: Build solution **\OpenConsole.sln for ConPTY - inputs: - solution: '**\OpenConsole.sln' - msbuildArgs: /p:WindowsTerminalOfficialBuild=true /p:WindowsTerminalBranding=${{ parameters.branding }};PGOBuildMode=${{ parameters.pgoBuildMode }} /p:WindowsTerminalReleaseBuild=true /t:Conhost\Host_EXE;Conhost\winconpty_DLL - platform: $(BuildPlatform) - configuration: $(BuildConfiguration) - - task: PowerShell@2 - displayName: Source Index PDBs - inputs: - filePath: build\scripts\Index-Pdbs.ps1 - arguments: -SearchDir '$(Build.SourcesDirectory)' -SourceRoot '$(Build.SourcesDirectory)' -recursive -Verbose -CommitId $(Build.SourceVersion) - errorActionPreference: silentlyContinue - pwsh: true - - task: PowerShell@2 - displayName: Run Unit Tests - condition: and(succeeded(), or(eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildPlatform'], 'x86'))) - enabled: False - inputs: - filePath: build\scripts\Run-Tests.ps1 - arguments: -MatchPattern '*unit.test*.dll' -Platform '$(RationalizedBuildPlatform)' -Configuration '$(BuildConfiguration)' - - task: PowerShell@2 - displayName: Run Feature Tests - condition: and(succeeded(), eq(variables['BuildPlatform'], 'x64')) - enabled: False - inputs: - filePath: build\scripts\Run-Tests.ps1 - arguments: -MatchPattern '*feature.test*.dll' -Platform '$(RationalizedBuildPlatform)' -Configuration '$(BuildConfiguration)' - - ${{ if eq(parameters.buildTerminal, true) }}: - - task: CopyFiles@2 - displayName: Copy *.appx/*.msix to Artifacts - inputs: - Contents: >- - **/*.appx - - **/*.msix - - **/*.appxsym - - !**/Microsoft.VCLibs*.appx - TargetFolder: $(Build.ArtifactStagingDirectory)/appx - OverWrite: true - flattenFolders: true - - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 - displayName: 'Generate SBOM manifest' - inputs: - BuildDropPath: '$(System.ArtifactsDirectory)/appx' - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact (appx) - inputs: - PathtoPublish: $(Build.ArtifactStagingDirectory)/appx - ArtifactName: appx-$(BuildPlatform)-$(BuildConfiguration)-$(TerminalTargetWindowsVersion) - - ${{ if eq(parameters.buildConPTY, true) }}: - - task: CopyFiles@2 - displayName: Copy ConPTY to Artifacts - inputs: - Contents: |- - $(Build.SourcesDirectory)/bin/**/conpty.dll - $(Build.SourcesDirectory)/bin/**/conpty.lib - $(Build.SourcesDirectory)/bin/**/conpty.pdb - $(Build.SourcesDirectory)/bin/**/OpenConsole.exe - $(Build.SourcesDirectory)/bin/**/OpenConsole.pdb - TargetFolder: $(Build.ArtifactStagingDirectory)/conpty - OverWrite: true - flattenFolders: true - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact (ConPTY) - inputs: - PathtoPublish: $(Build.ArtifactStagingDirectory)/conpty - ArtifactName: conpty-dll-$(BuildPlatform)-$(BuildConfiguration)-$(TerminalTargetWindowsVersion) - - ${{ if eq(parameters.buildWPF, true) }}: - - task: CopyFiles@2 - displayName: Copy PublicTerminalCore.dll to Artifacts - inputs: - Contents: >- - **/PublicTerminalCore.dll - TargetFolder: $(Build.ArtifactStagingDirectory)/wpf - OverWrite: true - flattenFolders: true - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact (PublicTerminalCore) - inputs: - PathtoPublish: $(Build.ArtifactStagingDirectory)/wpf - ArtifactName: wpf-dll-$(BuildPlatform)-$(BuildConfiguration)-$(TerminalTargetWindowsVersion) - - - task: PublishSymbols@2 - displayName: Publish symbols path - continueOnError: True - inputs: - SearchPattern: | - $(Build.SourcesDirectory)/bin/**/*.pdb - $(Build.SourcesDirectory)/bin/**/*.exe - $(Build.SourcesDirectory)/bin/**/*.dll - IndexSources: false - SymbolServerType: TeamServices - -- ${{ if eq(parameters.runCompliance, true) }}: - - template: ./templates/build-console-compliance-job.yml - -- ${{ if eq(parameters.buildTerminal, true) }}: - - job: BundleAndSign - strategy: - matrix: - ${{ each windowsVersion in parameters.buildWindowsVersions }}: - ${{ windowsVersion }}: - TerminalTargetWindowsVersion: ${{ windowsVersion }} - displayName: Create and sign AppX/MSIX bundles - variables: - ${{ if eq(parameters.branding, 'Release') }}: - BundleStemName: Microsoft.WindowsTerminal - ${{ elseif eq(parameters.branding, 'Preview') }}: - BundleStemName: Microsoft.WindowsTerminalPreview - ${{ else }}: - BundleStemName: WindowsTerminalDev - dependsOn: Build - steps: - - checkout: self - clean: true - fetchDepth: 1 - submodules: true - persistCredentials: True - - task: PkgESSetupBuild@12 - displayName: Package ES - Setup Build - inputs: - disableOutputRedirect: true - - ${{ each platform in parameters.buildPlatforms }}: - - task: DownloadBuildArtifacts@0 - displayName: Download Artifacts ${{ platform }} $(TerminalTargetWindowsVersion) - inputs: - artifactName: appx-${{ platform }}-Release-$(TerminalTargetWindowsVersion) - # Add 3000 to the major version component, but only for the bundle. - # This is to ensure that it is newer than "2022.xx.yy.zz" or whatever the original bundle versions were before - # we switched to uniform naming. - - pwsh: |- - $VersionEpoch = 3000 - $Components = "$(XES_APPXMANIFESTVERSION)" -Split "\." - $Components[0] = ([int]$Components[0] + $VersionEpoch) - $BundleVersion = $Components -Join "." - New-Item -Type Directory "$(System.ArtifactsDirectory)\bundle" - .\build\scripts\Create-AppxBundle.ps1 -InputPath "$(System.ArtifactsDirectory)" -ProjectName CascadiaPackage -BundleVersion $BundleVersion -OutputPath "$(System.ArtifactsDirectory)\bundle\$(BundleStemName)_$(TerminalTargetWindowsVersion)_$(XES_APPXMANIFESTVERSION)_8wekyb3d8bbwe.msixbundle" - displayName: Create WindowsTerminal*.msixbundle - - task: EsrpCodeSigning@1 - displayName: Submit *.msixbundle to ESRP for code signing - inputs: - ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a - FolderPath: $(System.ArtifactsDirectory)\bundle - Pattern: $(BundleStemName)*.msixbundle - UseMinimatch: true - signConfigType: inlineSignParams - inlineOperation: >- - [ - { - "KeyCode": "Dynamic", - "CertTemplateName": "WINMSAPP1ST", - "CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US", - "OperationCode": "SigntoolSign", - "Parameters": { - "OpusName": "Microsoft", - "OpusInfo": "http://www.microsoft.com", - "FileDigest": "/fd \"SHA256\"", - "TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" - }, - "ToolName": "sign", - "ToolVersion": "1.0" - }, - { - "KeyCode": "Dynamic", - "CertTemplateName": "WINMSAPP1ST", - "CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US", - "OperationCode": "SigntoolVerify", - "Parameters": {}, - "ToolName": "sign", - "ToolVersion": "1.0" - } - ] - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: appxbundle-signed' - inputs: - PathtoPublish: $(System.ArtifactsDirectory)\bundle - ArtifactName: appxbundle-signed-$(TerminalTargetWindowsVersion) - -- ${{ if eq(parameters.buildConPTY, true) }}: - - job: PackageAndSignConPTY - strategy: - matrix: - ${{ each config in parameters.buildConfigurations }}: - ${{ config }}: - BuildConfiguration: ${{ config }} - displayName: Create NuGet Package (ConPTY) - dependsOn: Build - steps: - - checkout: self - clean: true - fetchDepth: 1 - submodules: true - persistCredentials: True - - task: PkgESSetupBuild@12 - displayName: Package ES - Setup Build - inputs: - disableOutputRedirect: true - - ${{ each platform in parameters.buildPlatforms }}: - - task: DownloadBuildArtifacts@0 - displayName: Download ${{ platform }} ConPTY binaries - inputs: - artifactName: conpty-dll-${{ platform }}-$(BuildConfiguration)-$(TerminalBestVersionForNuGetPackages) - downloadPath: bin\${{ platform }}\$(BuildConfiguration)\ - extractTars: false - - task: PowerShell@2 - displayName: Move downloaded artifacts around - inputs: - targetType: inline - # Find all artifact files and move them up a directory. Ugh. - script: |- - Get-ChildItem bin -Recurse -Directory -Filter conpty-dll-* | % { - $_ | Get-ChildItem -Recurse -File | % { - Move-Item -Verbose $_.FullName $_.Directory.Parent.FullName - } - } - Move-Item bin\x86 bin\Win32 - - - task: EsrpCodeSigning@1 - displayName: Submit ConPTY libraries and OpenConsole for code signing - inputs: - ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a - FolderPath: '$(Build.SourcesDirectory)/bin' - signType: batchSigning - batchSignPolicyFile: '$(Build.SourcesDirectory)\build\config\ESRPSigning_ConPTY.json' - - - task: NuGetToolInstaller@1 - displayName: Use NuGet 5.10.0 - inputs: - versionSpec: 5.10.0 - - task: NuGetCommand@2 - displayName: NuGet pack - inputs: - command: pack - packagesToPack: $(Build.SourcesDirectory)\src\winconpty\package\winconpty.nuspec - packDestination: '$(Build.ArtifactStagingDirectory)/nupkg' - versioningScheme: byEnvVar - versionEnvVar: XES_PACKAGEVERSIONNUMBER - - task: EsrpCodeSigning@1 - displayName: Submit *.nupkg to ESRP for code signing - inputs: - ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a - FolderPath: $(Build.ArtifactStagingDirectory)/nupkg - Pattern: '*.nupkg' - UseMinimatch: true - signConfigType: inlineSignParams - inlineOperation: >- - [ - { - "KeyCode": "CP-401405", - "OperationCode": "NuGetSign", - "Parameters": {}, - "ToolName": "sign", - "ToolVersion": "1.0" - }, - { - "KeyCode": "CP-401405", - "OperationCode": "NuGetVerify", - "Parameters": {}, - "ToolName": "sign", - "ToolVersion": "1.0" - } - ] - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact (nupkg) - inputs: - PathtoPublish: $(Build.ArtifactStagingDirectory)\nupkg - ArtifactName: conpty-nupkg-$(BuildConfiguration) - - -- ${{ if eq(parameters.buildWPF, true) }}: - - job: PackageAndSignWPF - strategy: - matrix: - ${{ each config in parameters.buildConfigurations }}: - ${{ config }}: - BuildConfiguration: ${{ config }} - displayName: Create NuGet Package (WPF Terminal Control) - dependsOn: Build - steps: - - checkout: self - clean: true - fetchDepth: 1 - submodules: true - persistCredentials: True - - task: PkgESSetupBuild@12 - displayName: Package ES - Setup Build - inputs: - disableOutputRedirect: true - - ${{ each platform in parameters.buildPlatforms }}: - - task: DownloadBuildArtifacts@0 - displayName: Download ${{ platform }} PublicTerminalCore - inputs: - artifactName: wpf-dll-${{ platform }}-$(BuildConfiguration)-$(TerminalBestVersionForNuGetPackages) - itemPattern: '**/*.dll' - downloadPath: bin\${{ platform }}\$(BuildConfiguration)\ - extractTars: false - - task: PowerShell@2 - displayName: Move downloaded artifacts around - inputs: - targetType: inline - # Find all artifact files and move them up a directory. Ugh. - script: |- - Get-ChildItem bin -Recurse -Directory -Filter wpf-dll-* | % { - $_ | Get-ChildItem -Recurse -File | % { - Move-Item -Verbose $_.FullName $_.Directory.Parent.FullName - } - } - Move-Item bin\x86 bin\Win32 - - task: NuGetToolInstaller@1 - displayName: Use NuGet 5.10.0 - inputs: - versionSpec: 5.10.0 - - task: NuGetCommand@2 - displayName: NuGet restore copy - inputs: - selectOrConfig: config - nugetConfigPath: NuGet.Config - - task: VSBuild@1 - displayName: Build solution **\OpenConsole.sln for WPF Control - inputs: - solution: '**\OpenConsole.sln' - msbuildArgs: /p:WindowsTerminalReleaseBuild=$(UseReleaseBranding);Version=$(XES_PACKAGEVERSIONNUMBER) /t:Pack - platform: Any CPU - configuration: $(BuildConfiguration) - maximumCpuCount: true - - task: PublishSymbols@2 - displayName: Publish symbols path - continueOnError: True - inputs: - SearchPattern: | - $(Build.SourcesDirectory)/bin/**/*.pdb - $(Build.SourcesDirectory)/bin/**/*.exe - $(Build.SourcesDirectory)/bin/**/*.dll - IndexSources: false - SymbolServerType: TeamServices - SymbolsArtifactName: Symbols_WPF_$(BuildConfiguration) - - task: CopyFiles@2 - displayName: Copy *.nupkg to Artifacts - inputs: - Contents: '**/*Wpf*.nupkg' - TargetFolder: $(Build.ArtifactStagingDirectory)/nupkg - OverWrite: true - flattenFolders: true - - task: EsrpCodeSigning@1 - displayName: Submit *.nupkg to ESRP for code signing - inputs: - ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a - FolderPath: $(Build.ArtifactStagingDirectory)/nupkg - Pattern: '*.nupkg' - UseMinimatch: true - signConfigType: inlineSignParams - inlineOperation: >- - [ - { - "KeyCode": "CP-401405", - "OperationCode": "NuGetSign", - "Parameters": {}, - "ToolName": "sign", - "ToolVersion": "1.0" - }, - { - "KeyCode": "CP-401405", - "OperationCode": "NuGetVerify", - "Parameters": {}, - "ToolName": "sign", - "ToolVersion": "1.0" - } - ] - - task: PublishBuildArtifacts@1 - displayName: Publish Artifact (nupkg) - inputs: - PathtoPublish: $(Build.ArtifactStagingDirectory)\nupkg - ArtifactName: wpf-nupkg-$(BuildConfiguration) - -- ${{ if eq(parameters.publishSymbolsToPublic, true) }}: - - job: PublishSymbols - displayName: Publish Symbols - dependsOn: BundleAndSign - steps: - - checkout: self - clean: true - fetchDepth: 1 - submodules: true - - task: PkgESSetupBuild@12 - displayName: Package ES - Setup Build - - - template: .\templates\restore-nuget-steps.yml - - # Download the appx-PLATFORM-CONFIG-VERSION artifact for every platform/version combo - - ${{ each platform in parameters.buildPlatforms }}: - - ${{ each windowsVersion in parameters.buildWindowsVersions }}: - - task: DownloadBuildArtifacts@0 - displayName: Download Symbols ${{ platform }} ${{ windowsVersion }} - inputs: - artifactName: appx-${{ platform }}-Release-${{ windowsVersion }} - - # It seems easier to do this -- download every appxsym -- then enumerate all the PDBs in the build directory for the - # public symbol push. Otherwise, we would have to list all of the PDB files one by one. - - pwsh: |- - mkdir $(Build.SourcesDirectory)/appxsym-temp - Get-ChildItem "$(System.ArtifactsDirectory)" -Filter *.appxsym -Recurse | % { - $src = $_.FullName - $dest = Join-Path "$(Build.SourcesDirectory)/appxsym-temp/" $_.Name - - mkdir $dest - Write-Host "Extracting $src to $dest..." - tar -x -v -f $src -C $dest - } - displayName: Extract symbols for public consumption - - - task: PowerShell@2 - displayName: Source Index PDBs (the public ones) - inputs: - filePath: build\scripts\Index-Pdbs.ps1 - arguments: -SearchDir '$(Build.SourcesDirectory)/appxsym-temp' -SourceRoot '$(Build.SourcesDirectory)' -recursive -Verbose -CommitId $(Build.SourceVersion) - pwsh: true - - # Publish the app symbols to the public MSDL symbol server - # accessible via https://msdl.microsoft.com/download/symbols - - task: PublishSymbols@2 - displayName: 'Publish app symbols to MSDL' - inputs: - symbolsFolder: '$(Build.SourcesDirectory)/appxsym-temp' - searchPattern: '**/*.pdb' - SymbolsMaximumWaitTime: 30 - SymbolServerType: 'TeamServices' - SymbolsProduct: 'Windows Terminal Application Binaries' - SymbolsVersion: '$(XES_APPXMANIFESTVERSION)' - # The ADO task does not support indexing of GitHub sources. - indexSources: false - detailedLog: true - # There is a bug which causes this task to fail if LIB includes an inaccessible path (even though it does not depend on it). - # To work around this issue, we just force LIB to be any dir that we know exists. - # Copied from https://github.com/microsoft/icu/blob/f869c214adc87415dfe751d81f42f1bca55dcf5f/build/azure-nuget.yml#L564-L583 - env: - LIB: $(Build.SourcesDirectory) - ArtifactServices_Symbol_AccountName: microsoftpublicsymbols - ArtifactServices_Symbol_PAT: $(ADO_microsoftpublicsymbols_PAT) - - -- ${{ if eq(parameters.buildTerminalVPack, true) }}: - - job: VPack - displayName: Create Windows vPack - dependsOn: BundleAndSign - steps: - - checkout: self - clean: true - fetchDepth: 1 - submodules: true - - task: PkgESSetupBuild@12 - displayName: Package ES - Setup Build - - task: DownloadBuildArtifacts@0 - displayName: Download Build Artifacts - inputs: - artifactName: appxbundle-signed-Win11 - extractTars: false - - task: PowerShell@2 - displayName: Rename and stage packages for vpack - inputs: - targetType: inline - script: >- - # Rename to known/fixed name for Windows build system - - Get-ChildItem Microsoft.WindowsTerminal_Win11_*.msixbundle | Rename-Item -NewName { 'Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle' } - - - # Create vpack directory and place item inside - - mkdir WindowsTerminal.app - - mv Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle .\WindowsTerminal.app\ - workingDirectory: $(System.ArtifactsDirectory)\appxbundle-signed-Win11 - - task: PkgESVPack@12 - displayName: 'Package ES - VPack' - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - inputs: - sourceDirectory: $(System.ArtifactsDirectory)\appxbundle-signed-Win11\WindowsTerminal.app - description: VPack for the Windows Terminal Application - pushPkgName: WindowsTerminal.app - owner: conhost - githubToken: $(GitHubTokenForVpackProvenance) - - task: PublishPipelineArtifact@1 - displayName: 'Copy VPack Manifest to Drop' - inputs: - targetPath: $(XES_VPACKMANIFESTDIRECTORY) - artifactName: VPackManifest - - task: PkgESFCIBGit@12 - displayName: 'Submit VPack Manifest to Windows' - inputs: - configPath: '$(Build.SourcesDirectory)\build\config\GitCheckin.json' - artifactsDirectory: $(XES_VPACKMANIFESTDIRECTORY) - prTimeOut: 5 -... diff --git a/build/pipelines/templates-v2/job-build-package-wpf.yml b/build/pipelines/templates-v2/job-build-package-wpf.yml new file mode 100644 index 00000000000..9d64e1c7cff --- /dev/null +++ b/build/pipelines/templates-v2/job-build-package-wpf.yml @@ -0,0 +1,144 @@ +parameters: + - name: buildConfigurations + type: object + - name: buildPlatforms + type: object + - name: generateSbom + type: boolean + default: false + - name: codeSign + type: boolean + default: false + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: jobName + type: string + default: PackWPF + - name: variables + type: object + default: {} + - name: publishArtifacts + type: boolean + default: true + +jobs: +- job: ${{ parameters.jobName }} + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + ${{ if eq(parameters.codeSign, true) }}: + displayName: Pack and Sign Microsoft.Terminal.Wpf + ${{ else }}: + displayName: Pack Microsoft.Terminal.Wpf + strategy: + matrix: + ${{ each config in parameters.buildConfigurations }}: + ${{ config }}: + BuildConfiguration: ${{ config }} + dependsOn: ${{ parameters.dependsOn }} + variables: + OutputBuildPlatform: AnyCPU + Terminal.BinDir: $(Build.SourcesDirectory)/bin/$(OutputBuildPlatform)/$(BuildConfiguration) + JobOutputDirectory: $(Build.ArtifactStagingDirectory)\nupkg + JobOutputArtifactName: wpf-nupkg-$(BuildConfiguration)${{ parameters.artifactStem }} + ${{ insert }}: ${{ parameters.variables }} + steps: + - checkout: self + clean: true + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: true + persistCredentials: True + + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + + - template: steps-download-bin-dir-artifact.yml + parameters: + buildPlatforms: + - ${{ parameters.buildPlatforms }} + - Any CPU # Make sure we grab the precompiled WPF bits + # This build is already matrix'd on configuration, so + # just pass a single config into the download template. + buildConfigurations: + - $(BuildConfiguration) + artifactStem: ${{ parameters.artifactStem }} + + - template: .\steps-restore-nuget.yml + + - task: VSBuild@1 + displayName: Build solution OpenConsole.sln for WPF Control (Pack) + inputs: + solution: 'OpenConsole.sln' + msbuildArgs: >- + /p:WindowsTerminalReleaseBuild=true;Version=$(XES_PACKAGEVERSIONNUMBER) + /p:NoBuild=true + /p:IncludeSymbols=true + /t:Terminal\wpf\WpfTerminalControl:Pack + platform: Any CPU + configuration: $(BuildConfiguration) + maximumCpuCount: true + clean: false + + - task: CopyFiles@2 + displayName: Copy *.nupkg to Artifacts + inputs: + Contents: 'bin/**/*Wpf*.nupkg' + TargetFolder: $(Build.ArtifactStagingDirectory)/nupkg + OverWrite: true + flattenFolders: true + + - ${{ if eq(parameters.codeSign, true) }}: + - task: EsrpCodeSigning@3 + displayName: Submit *.nupkg to ESRP for code signing + inputs: + ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a + FolderPath: $(Build.ArtifactStagingDirectory)/nupkg + Pattern: '*.nupkg' + UseMinimatch: true + signConfigType: inlineSignParams + inlineOperation: >- + [ + { + "KeyCode": "CP-401405", + "OperationCode": "NuGetSign", + "Parameters": {}, + "ToolName": "sign", + "ToolVersion": "1.0" + }, + { + "KeyCode": "CP-401405", + "OperationCode": "NuGetVerify", + "Parameters": {}, + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + + - ${{ if eq(parameters.generateSbom, true) }}: + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generate SBOM manifest (wpf)' + inputs: + BuildDropPath: '$(System.ArtifactsDirectory)/nupkg' + BuildComponentPath: '$(Build.SourcesDirectory)/bin' + + - task: DropValidatorTask@0 + displayName: 'Validate wpf SBOM manifest' + inputs: + BuildDropPath: '$(System.ArtifactsDirectory)/nupkg' + OutputPath: 'output.json' + ValidateSignature: true + Verbosity: 'Verbose' + + - ${{ if eq(parameters.publishArtifacts, true) }}: + - publish: $(JobOutputDirectory) + artifact: $(JobOutputArtifactName) + displayName: Publish nupkg diff --git a/build/pipelines/templates-v2/job-build-project.yml b/build/pipelines/templates-v2/job-build-project.yml new file mode 100644 index 00000000000..35d342236f9 --- /dev/null +++ b/build/pipelines/templates-v2/job-build-project.yml @@ -0,0 +1,298 @@ +parameters: + - name: branding + type: string + default: Dev + - name: additionalBuildOptions + type: string + default: '' + - name: buildTerminal + type: boolean + default: true + - name: buildConPTY + type: boolean + default: false + - name: buildWPF + type: boolean + default: false + - name: buildWPFDotNetComponents # This weird hack is to make sure we sign and source index the .NET pieces + type: boolean + default: false + - name: buildEverything + displayName: "Build Everything (Overrides all other build options)" + type: boolean + default: false + - name: pgoBuildMode + type: string + default: None + values: [Optimize, Instrument, None] + - name: buildConfigurations + type: object + default: + - Release + - name: buildPlatforms + type: object + default: + - x64 + - x86 + - arm64 + - name: generateSbom + type: boolean + default: false + - name: codeSign + type: boolean + default: false + - name: keepAllExpensiveBuildOutputs + type: boolean + default: true + - name: artifactStem + type: string + default: '' + - name: jobName + type: string + default: 'Build' + - name: pool + type: object + default: [] + - name: beforeBuildSteps + type: stepList + default: [] + - name: variables + type: object + default: {} + - name: publishArtifacts + type: boolean + default: true + - name: removeAllNonSignedFiles + type: boolean + default: false + +jobs: +- job: ${{ parameters.jobName }} + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + strategy: + matrix: + ${{ each config in parameters.buildConfigurations }}: + ${{ each platform in parameters.buildPlatforms }}: + ${{ config }}_${{ platform }}: + BuildConfiguration: ${{ config }} + BuildPlatform: ${{ platform }} + ${{ if eq(platform, 'x86') }}: + OutputBuildPlatform: Win32 + ${{ elseif eq(platform, 'Any CPU') }}: + OutputBuildPlatform: AnyCPU + ${{ else }}: + OutputBuildPlatform: ${{ platform }} + variables: + MakeAppxPath: 'C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x86\MakeAppx.exe' + Terminal.BinDir: $(Build.SourcesDirectory)/bin/$(OutputBuildPlatform)/$(BuildConfiguration) + # Azure DevOps abhors a vacuum + # If these are blank, expansion will fail later on... which will result in direct substitution of the variable *names* + # later on. We'll just... set them to a single space and if we need to, check IsNullOrWhiteSpace. + # Yup. + BuildTargetParameter: ' ' + SelectedSigningFragments: ' ' + # When building the unpackaged distribution, build it in portable mode if it's Canary-branded + ${{ if eq(parameters.branding, 'Canary') }}: + UnpackagedBuildArguments: -PortableMode + ${{ else }}: + UnpackagedBuildArguments: ' ' + JobOutputDirectory: $(Terminal.BinDir) + JobOutputArtifactName: build-$(BuildPlatform)-$(BuildConfiguration)${{ parameters.artifactStem }} + ${{ insert }}: ${{ parameters.variables }} + displayName: Build + timeoutInMinutes: 240 + cancelTimeoutInMinutes: 1 + steps: + - checkout: self + clean: true + submodules: true + persistCredentials: True + # This generates either nothing for BuildTargetParameter, or /t:X;Y;Z, to control targets later. + - pwsh: |- + If (-Not [bool]::Parse("${{ parameters.buildEverything }}")) { + $BuildTargets = @() + $SignFragments = @() + If ([bool]::Parse("${{ parameters.buildTerminal }}")) { + $BuildTargets += "Terminal\CascadiaPackage" + $SignFragments += "terminal_constituents" + } + If ([bool]::Parse("${{ parameters.buildWPFDotNetComponents }}")) { + $BuildTargets += "Terminal\wpf\WpfTerminalControl" + $SignFragments += "wpfdotnet" + } + If ([bool]::Parse("${{ parameters.buildWPF }}")) { + $BuildTargets += "Terminal\Control\Microsoft_Terminal_Control" + $SignFragments += "wpf" + } + If ([bool]::Parse("${{ parameters.buildConPTY }}")) { + $BuildTargets += "Conhost\Host_EXE;Conhost\winconpty_DLL" + $SignFragments += "conpty" + } + Write-Host "Targets: $($BuildTargets -Join ";")" + Write-Host "Sign targets: $($SignFragments -Join ";")" + Write-Host "##vso[task.setvariable variable=BuildTargetParameter]/t:$($BuildTargets -Join ";")" + Write-Host "##vso[task.setvariable variable=SelectedSigningFragments]$($SignFragments -Join ";")" + } + displayName: Prepare Build and Sign Targets + + - pwsh: |- + .\build\scripts\Generate-ThirdPartyNotices.ps1 -MarkdownNoticePath .\NOTICE.md -OutputPath .\src\cascadia\CascadiaPackage\NOTICE.html + displayName: Generate NOTICE.html from NOTICE.md + + - template: .\steps-restore-nuget.yml + + - ${{ parameters.beforeBuildSteps }} + + - task: VSBuild@1 + displayName: Build OpenConsole.sln + inputs: + solution: 'OpenConsole.sln' + msbuildArgs: >- + /p:WindowsTerminalOfficialBuild=true;WindowsTerminalBranding=${{ parameters.branding }};PGOBuildMode=${{ parameters.pgoBuildMode }} + ${{ parameters.additionalBuildOptions }} + /bl:$(Build.SourcesDirectory)\msbuild.binlog + $(BuildTargetParameter) + platform: $(BuildPlatform) + configuration: $(BuildConfiguration) + maximumCpuCount: true + + - ${{ if eq(parameters.publishArtifacts, true) }}: + - publish: $(Build.SourcesDirectory)/msbuild.binlog + artifact: logs-$(BuildPlatform)-$(BuildConfiguration)${{ parameters.artifactStem }} + condition: always() + displayName: Publish Build Log + - ${{ else }}: + - task: CopyFiles@2 + displayName: Copy Build Log + inputs: + contents: $(Build.SourcesDirectory)/msbuild.binlog + TargetFolder: $(Terminal.BinDir) + + # This saves ~2GiB per architecture. We won't need these later. + # Removes: + # - All .lib that do not have an associated .exp (which would indicate that they are import libs) + # - All .pdbs from those .libs (which were only used during linking) + # - Directories ending in Lib (static lib projects that we fully linked into DLLs which may also contain unnecessary resources) + # - All LocalTests_ project outputs, as they were subsumed into TestHostApp + # - All PDB files inside the WindowsTerminal/ output, which do not belong there. + # - console.dll, which apparently breaks XFGCheck? lol. + - pwsh: |- + $binDir = '$(Terminal.BinDir)' + $ImportLibs = Get-ChildItem $binDir -Recurse -File -Filter '*.exp' | ForEach-Object { $_.FullName -Replace "exp$","lib" } + $StaticLibs = Get-ChildItem $binDir -Recurse -File -Filter '*.lib' | Where-Object FullName -NotIn $ImportLibs + + $Items = @() + $Items += $StaticLibs + $Items += Get-Item ($StaticLibs.FullName -Replace "lib$","pdb") -ErrorAction:Ignore + $Items += Get-ChildItem $binDir -Directory -Filter '*Lib' + $Items += Get-ChildItem $binDir -Directory -Filter 'LocalTests_*' + $Items += Get-ChildItem "${$binDir}\WindowsTerminal" -Filter '*.pdb' -ErrorAction:Ignore + + If (-Not [bool]::Parse('${{ parameters.keepAllExpensiveBuildOutputs }}')) { + $Items += Get-ChildItem '$(Terminal.BinDir)' -Filter '*.pdb' -Recurse + } + + $Items += Get-ChildItem $binDir -Filter 'console.dll' + + $Items | Remove-Item -Recurse -Force -Verbose -ErrorAction:Ignore + displayName: Clean up static libs and extra symbols + errorActionPreference: silentlyContinue # It's OK if this silently fails + + # We cannot index PDBs that we have deleted! + - ${{ if eq(parameters.keepAllExpensiveBuildOutputs, true) }}: + - pwsh: |- + build\scripts\Index-Pdbs.ps1 -SearchDir '$(Terminal.BinDir)' -SourceRoot '$(Build.SourcesDirectory)' -recursive -Verbose -CommitId $(Build.SourceVersion) + displayName: Source Index PDBs + errorActionPreference: silentlyContinue + + - ${{ if or(parameters.buildTerminal, parameters.buildEverything) }}: + - pwsh: |- + $Package = (Get-ChildItem -Recurse -Filter "CascadiaPackage*.msix" | Select -First 1) + $PackageFilename = $Package.FullName + Write-Host "##vso[task.setvariable variable=WindowsTerminalPackagePath]${PackageFilename}" + displayName: Locate the MSIX + + # CHECK EXCEPTION + # PGO requires a desktop CRT + - ${{ if ne(parameters.pgoBuildMode, 'Instrument') }}: + - pwsh: |- + .\build\scripts\Test-WindowsTerminalPackage.ps1 -Verbose -Path "$(WindowsTerminalPackagePath)" + displayName: Check MSIX for common regressions + condition: and(succeeded(), ne(variables.WindowsTerminalPackagePath, '')) + + - ${{ if eq(parameters.codeSign, true) }}: + - pwsh: |- + & "$(MakeAppxPath)" unpack /p "$(WindowsTerminalPackagePath)" /d "$(Terminal.BinDir)/PackageContents" + displayName: Unpack the MSIX for signing + + - ${{ if eq(parameters.codeSign, true) }}: + - template: steps-create-signing-config.yml + parameters: + outFile: '$(Build.SourcesDirectory)/ESRPSigningConfig.json' + stage: build + fragments: $(SelectedSigningFragments) + + # Code-sign everything we just put together. + # We run the signing in Terminal.BinDir, because all of the signing batches are relative to the final architecture/configuration output folder. + - task: EsrpCodeSigning@3 + displayName: Submit Signing Request + inputs: + ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a + FolderPath: '$(Terminal.BinDir)' + signType: batchSigning + batchSignPolicyFile: '$(Build.SourcesDirectory)/ESRPSigningConfig.json' + + # We only need to re-pack the MSIX if we actually signed, so this can stay in the codeSign conditional + - ${{ if or(parameters.buildTerminal, parameters.buildEverything) }}: + - pwsh: |- + $outDir = New-Item -Type Directory "$(Terminal.BinDir)/_appx" -ErrorAction:Ignore + $PackageFilename = Join-Path $outDir.FullName (Split-Path -Leaf "$(WindowsTerminalPackagePath)") + & "$(MakeAppxPath)" pack /h SHA256 /o /p $PackageFilename /d "$(Terminal.BinDir)/PackageContents" + Write-Host "##vso[task.setvariable variable=WindowsTerminalPackagePath]${PackageFilename}" + displayName: Re-pack the new Terminal package after signing + + # Some of our governed pipelines explicitly fail builds that have *any* non-codesigned filed (!) + - ${{ if eq(parameters.removeAllNonSignedFiles, true) }}: + - pwsh: |- + Get-ChildItem "$(Terminal.BinDir)" -Recurse -Include "*.dll","*.exe" | + Where-Object { (Get-AuthenticodeSignature $_).Status -Ne "Valid" } | + Remove-Item -Verbose -Force + displayName: Remove all non-signed output files + + - ${{ else }}: # No Signing + - ${{ if or(parameters.buildTerminal, parameters.buildEverything) }}: + - pwsh: |- + $outDir = New-Item -Type Directory "$(Terminal.BinDir)/_appx" -ErrorAction:Ignore + $PackageFilename = Join-Path $outDir.FullName (Split-Path -Leaf "$(WindowsTerminalPackagePath)") + Copy-Item "$(WindowsTerminalPackagePath)" $PackageFilename + Write-Host "##vso[task.setvariable variable=WindowsTerminalPackagePath]${PackageFilename}" + displayName: Stage the package (unsigned) + condition: and(succeeded(), ne(variables.WindowsTerminalPackagePath, '')) + + - ${{ if or(parameters.buildTerminal, parameters.buildEverything) }}: + - pwsh: |- + $XamlAppxPath = (Get-Item "src\cascadia\CascadiaPackage\AppPackages\*\Dependencies\$(BuildPlatform)\Microsoft.UI.Xaml*.appx").FullName + $outDir = New-Item -Type Directory "$(Terminal.BinDir)/_unpackaged" -ErrorAction:Ignore + & .\build\scripts\New-UnpackagedTerminalDistribution.ps1 $(UnpackagedBuildArguments) -TerminalAppX $(WindowsTerminalPackagePath) -XamlAppX $XamlAppxPath -Destination $outDir.FullName + displayName: Build Unpackaged Distribution (from MSIX) + condition: and(succeeded(), ne(variables.WindowsTerminalPackagePath, '')) + + - ${{ if eq(parameters.generateSbom, true) }}: + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generate SBOM manifest' + inputs: + BuildDropPath: '$(Terminal.BinDir)' + + - task: DropValidatorTask@0 + displayName: 'Validate SBOM manifest' + inputs: + BuildDropPath: '$(Terminal.BinDir)' + OutputPath: 'output.json' + ValidateSignature: true + Verbosity: 'Verbose' + + - ${{ if eq(parameters.publishArtifacts, true) }}: + - publish: $(Terminal.BinDir) + artifact: $(JobOutputArtifactName) + displayName: Publish All Outputs diff --git a/build/pipelines/templates-v2/job-check-code-format.yml b/build/pipelines/templates-v2/job-check-code-format.yml new file mode 100644 index 00000000000..e889fc8756d --- /dev/null +++ b/build/pipelines/templates-v2/job-check-code-format.yml @@ -0,0 +1,15 @@ +jobs: +- job: CodeFormatCheck + displayName: Check Code Format + pool: { vmImage: windows-2022 } + + steps: + - checkout: self + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: false + clean: true + + - powershell: |- + .\build\scripts\Invoke-FormattingCheck.ps1 + displayName: 'Run formatters' diff --git a/build/pipelines/templates-v2/job-deploy-to-azure-storage.yml b/build/pipelines/templates-v2/job-deploy-to-azure-storage.yml new file mode 100644 index 00000000000..69b82e57bb3 --- /dev/null +++ b/build/pipelines/templates-v2/job-deploy-to-azure-storage.yml @@ -0,0 +1,92 @@ +parameters: + - name: buildConfiguration + type: string + - name: buildPlatforms + type: object + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: variables + type: object + default: {} + - name: environment + type: string + - name: storagePublicRootURL + type: string + - name: subscription + type: string + - name: storageAccount + type: string + - name: storageContainer + type: string + +jobs: +- job: DeployAzure + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + displayName: Publish to Azure Storage (Prod) + dependsOn: ${{ parameters.dependsOn }} + variables: + ${{ insert }}: ${{ parameters.variables }} + steps: + - download: none + + - checkout: self + clean: true + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: true + persistCredentials: True + + - task: DownloadPipelineArtifact@2 + displayName: Download MSIX Bundle Artifact + inputs: + artifactName: appxbundle-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} + downloadPath: '$(Build.SourcesDirectory)/_out' + itemPattern: '**/*.msixbundle' + + - ${{ each platform in parameters.buildPlatforms }}: + - task: DownloadPipelineArtifact@2 + displayName: Download unpackaged build for ${{ platform }} ${{ parameters.buildConfiguration }} + inputs: + artifactName: build-${{ platform }}-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} + downloadPath: '$(Build.SourcesDirectory)/_unpackaged' + itemPattern: '**/_unpackaged/*.zip' + + - pwsh: |- + $b = Get-Item _out/*.msixbundle + ./build/scripts/New-AppInstallerFromTemplateAndBundle.ps1 -BundlePath $b.FullName -AppInstallerTemplatePath ./build/config/template.appinstaller -AppInstallerRoot "${{ parameters.storagePublicRootURL }}" -OutputPath _out/Microsoft.WindowsTerminalCanary.appinstaller + displayName: "Produce AppInstaller for MSIX bundle" + + - pwsh: |- + $zips = Get-ChildItem -Recurse -Filter *.zip _unpackaged + $zips | ForEach-Object { + $name = $_.Name + $parts = $name.Split('_') + $parts[1] = "latest" + $name = [String]::Join('_', $parts) + $_ | Move-Item -Destination (Join-Path "_out" $name) + } + displayName: "Wrangle Unpackaged builds into place, rename" + + - powershell: |- + Get-PackageProvider -Name NuGet -ForceBootstrap + Install-Module -Verbose -AllowClobber -Force Az.Accounts, Az.Storage, Az.Network, Az.Resources, Az.Compute + displayName: Install Azure Module Dependencies + + - task: AzureFileCopy@5 + displayName: Publish to Storage Account + inputs: + sourcePath: _out/* + Destination: AzureBlob + azureSubscription: ${{ parameters.subscription }} + storage: ${{ parameters.storageAccount }} + ContainerName: ${{ parameters.storageContainer }} + AdditionalArgumentsForBlobCopy: "--content-type application/octet-stream" + diff --git a/build/pipelines/templates-v2/job-index-github-codenav.yml b/build/pipelines/templates-v2/job-index-github-codenav.yml new file mode 100644 index 00000000000..b59b0a436ef --- /dev/null +++ b/build/pipelines/templates-v2/job-index-github-codenav.yml @@ -0,0 +1,16 @@ +jobs: +- job: CodeNavIndexer + displayName: Run GitHub CodeNav Indexer + pool: { vmImage: windows-2022 } + + steps: + - checkout: self + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: false + clean: true + + - task: RichCodeNavIndexer@0 + inputs: + languages: 'cpp,csharp' + continueOnError: true diff --git a/build/pipelines/templates-v2/job-merge-msix-into-bundle.yml b/build/pipelines/templates-v2/job-merge-msix-into-bundle.yml new file mode 100644 index 00000000000..6d6ad09cdad --- /dev/null +++ b/build/pipelines/templates-v2/job-merge-msix-into-bundle.yml @@ -0,0 +1,152 @@ +parameters: + - name: branding + type: string + - name: buildConfigurations + type: object + - name: buildPlatforms + type: object + - name: generateSbom + type: boolean + default: false + - name: codeSign + type: boolean + default: false + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: jobName + type: string + default: Bundle + - name: variables + type: object + default: {} + - name: publishArtifacts + type: boolean + default: true + - name: afterBuildSteps + type: stepList + default: [] + +jobs: +- job: ${{ parameters.jobName }} + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + ${{ if eq(parameters.codeSign, true) }}: + displayName: Pack and Sign Terminal MSIXBundle + ${{ else }}: + displayName: Pack Terminal MSIXBundle + strategy: + matrix: + ${{ each config in parameters.buildConfigurations }}: + ${{ config }}: + BuildConfiguration: ${{ config }} + variables: + ${{ if eq(parameters.branding, 'Release') }}: + BundleStemName: Microsoft.WindowsTerminal + ${{ elseif eq(parameters.branding, 'Preview') }}: + BundleStemName: Microsoft.WindowsTerminalPreview + ${{ elseif eq(parameters.branding, 'Canary') }}: + BundleStemName: Microsoft.WindowsTerminalCanary + ${{ else }}: + BundleStemName: WindowsTerminalDev + JobOutputDirectory: '$(System.ArtifactsDirectory)/bundle' + JobOutputArtifactName: appxbundle-$(BuildConfiguration)${{ parameters.artifactStem }} + ${{ insert }}: ${{ parameters.variables }} + dependsOn: ${{ parameters.dependsOn }} + steps: + - checkout: self + clean: true + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: true + persistCredentials: True + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + - template: steps-download-bin-dir-artifact.yml + parameters: + buildPlatforms: ${{ parameters.buildPlatforms }} + # This build is already matrix'd on configuration, so + # just pass a single config into the download template. + buildConfigurations: + - $(BuildConfiguration) + artifactStem: ${{ parameters.artifactStem }} + + # Add 3000 to the major version component, but only for the bundle. + # This is to ensure that it is newer than "2022.xx.yy.zz" or whatever the original bundle versions were before + # we switched to uniform naming. + - pwsh: |- + $VersionEpoch = 3000 + $Components = "$(XES_APPXMANIFESTVERSION)" -Split "\." + $Components[0] = ([int]$Components[0] + $VersionEpoch) + $BundleVersion = $Components -Join "." + New-Item -Type Directory "$(System.ArtifactsDirectory)/bundle" + $BundlePath = "$(System.ArtifactsDirectory)\bundle\$(BundleStemName)_$(XES_APPXMANIFESTVERSION)_8wekyb3d8bbwe.msixbundle" + .\build\scripts\Create-AppxBundle.ps1 -InputPath 'bin/' -ProjectName CascadiaPackage -BundleVersion $BundleVersion -OutputPath $BundlePath + Write-Host "##vso[task.setvariable variable=MsixBundlePath]${BundlePath}" + displayName: Create msixbundle + + - ${{ if eq(parameters.codeSign, true) }}: + - task: EsrpCodeSigning@3 + displayName: Submit *.msixbundle to ESRP for code signing + inputs: + ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a + FolderPath: $(System.ArtifactsDirectory)\bundle + Pattern: $(BundleStemName)*.msixbundle + UseMinimatch: true + signConfigType: inlineSignParams + inlineOperation: >- + [ + { + "KeyCode": "Dynamic", + "CertTemplateName": "WINMSAPP1ST", + "CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US", + "OperationCode": "SigntoolSign", + "Parameters": { + "OpusName": "Microsoft", + "OpusInfo": "http://www.microsoft.com", + "FileDigest": "/fd \"SHA256\"", + "TimeStamp": "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + }, + "ToolName": "sign", + "ToolVersion": "1.0" + }, + { + "KeyCode": "Dynamic", + "CertTemplateName": "WINMSAPP1ST", + "CertSubjectName": "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US", + "OperationCode": "SigntoolVerify", + "Parameters": {}, + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + + - ${{ if eq(parameters.generateSbom, true) }}: + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generate SBOM manifest (bundle)' + inputs: + BuildDropPath: '$(System.ArtifactsDirectory)/bundle' + BuildComponentPath: '$(Build.SourcesDirectory)/bin' + + - task: DropValidatorTask@0 + displayName: 'Validate bundle SBOM manifest' + inputs: + BuildDropPath: '$(System.ArtifactsDirectory)/bundle' + OutputPath: 'output.json' + ValidateSignature: true + Verbosity: 'Verbose' + + - ${{ parameters.afterBuildSteps }} + + - ${{ if eq(parameters.publishArtifacts, true) }}: + - publish: $(JobOutputDirectory) + artifact: $(JobOutputArtifactName) + displayName: Publish msixbundle diff --git a/build/pipelines/templates-v2/job-package-conpty.yml b/build/pipelines/templates-v2/job-package-conpty.yml new file mode 100644 index 00000000000..2f777cdf4f5 --- /dev/null +++ b/build/pipelines/templates-v2/job-package-conpty.yml @@ -0,0 +1,129 @@ +parameters: + - name: buildConfigurations + type: object + - name: buildPlatforms + type: object + - name: generateSbom + type: boolean + default: false + - name: codeSign + type: boolean + default: false + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: jobName + type: string + default: PackConPTY + - name: variables + type: object + default: {} + - name: publishArtifacts + type: boolean + default: true + +jobs: +- job: ${{ parameters.jobName }} + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + ${{ if eq(parameters.codeSign, true) }}: + displayName: Pack and Sign Microsoft.Windows.Console.ConPTY + ${{ else }}: + displayName: Pack Microsoft.Windows.Console.ConPTY + strategy: + matrix: + ${{ each config in parameters.buildConfigurations }}: + ${{ config }}: + BuildConfiguration: ${{ config }} + dependsOn: ${{ parameters.dependsOn }} + variables: + JobOutputDirectory: $(Build.ArtifactStagingDirectory)\nupkg + JobOutputArtifactName: conpty-nupkg-$(BuildConfiguration)${{ parameters.artifactStem }} + ${{ insert }}: ${{ parameters.variables }} + steps: + - checkout: self + clean: true + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: true + persistCredentials: True + + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + + - template: steps-download-bin-dir-artifact.yml + parameters: + buildPlatforms: ${{ parameters.buildPlatforms }} + # This build is already matrix'd on configuration, so + # just pass a single config into the download template. + buildConfigurations: + - $(BuildConfiguration) + artifactStem: ${{ parameters.artifactStem }} + + - template: steps-ensure-nuget-version.yml + +# In the Microsoft Azure DevOps tenant, NuGetCommand is ambiguous. +# This should be `task: NuGetCommand@2` + - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 + displayName: NuGet pack + inputs: + command: pack + packagesToPack: $(Build.SourcesDirectory)\src\winconpty\package\winconpty.nuspec + packDestination: '$(Build.ArtifactStagingDirectory)/nupkg' + versioningScheme: byEnvVar + versionEnvVar: XES_PACKAGEVERSIONNUMBER + + - ${{ if eq(parameters.codeSign, true) }}: + - task: EsrpCodeSigning@3 + displayName: Submit *.nupkg to ESRP for code signing + inputs: + ConnectedServiceName: 9d6d2960-0793-4d59-943e-78dcb434840a + FolderPath: $(Build.ArtifactStagingDirectory)/nupkg + Pattern: '*.nupkg' + UseMinimatch: true + signConfigType: inlineSignParams + inlineOperation: >- + [ + { + "KeyCode": "CP-401405", + "OperationCode": "NuGetSign", + "Parameters": {}, + "ToolName": "sign", + "ToolVersion": "1.0" + }, + { + "KeyCode": "CP-401405", + "OperationCode": "NuGetVerify", + "Parameters": {}, + "ToolName": "sign", + "ToolVersion": "1.0" + } + ] + + - ${{ if eq(parameters.generateSbom, true) }}: + - task: AzureArtifacts.manifest-generator-task.manifest-generator-task.ManifestGeneratorTask@0 + displayName: 'Generate SBOM manifest (conpty)' + inputs: + BuildDropPath: '$(System.ArtifactsDirectory)/nupkg' + BuildComponentPath: '$(Build.SourcesDirectory)/bin' + + - task: DropValidatorTask@0 + displayName: 'Validate conpty SBOM manifest' + inputs: + BuildDropPath: '$(System.ArtifactsDirectory)/nupkg' + OutputPath: 'output.json' + ValidateSignature: true + Verbosity: 'Verbose' + + - ${{ if eq(parameters.publishArtifacts, true) }}: + - publish: $(JobOutputDirectory) + artifact: $(JobOutputArtifactName) + displayName: Publish nupkg diff --git a/build/pipelines/templates/pgo-build-and-publish-nuget-job.yml b/build/pipelines/templates-v2/job-pgo-build-nuget-and-publish.yml similarity index 57% rename from build/pipelines/templates/pgo-build-and-publish-nuget-job.yml rename to build/pipelines/templates-v2/job-pgo-build-nuget-and-publish.yml index 2c36f7cf158..b61a22c4fc1 100644 --- a/build/pipelines/templates/pgo-build-and-publish-nuget-job.yml +++ b/build/pipelines/templates-v2/job-pgo-build-nuget-and-publish.yml @@ -1,14 +1,26 @@ -# From our friends at MUX: https://github.com/microsoft/microsoft-ui-xaml/blob/main/build/AzurePipelinesTemplates/MUX-BuildAndPublishPGONuGet-Job.yml - parameters: - dependsOn: '' - pgoArtifact: PGO + - name: buildConfiguration + type: string + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: jobName + type: string + default: BuildAndPublishPGONuget jobs: -- job: BuildAndPublishPGONuGet +- job: ${{ parameters.jobName }} + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} dependsOn: ${{ parameters.dependsOn }} - pool: - vmImage: 'windows-2019' + displayName: Package and Publish PGO Databases + variables: artifactsPath: $(Build.SourcesDirectory)\Artifacts pgoToolsPath: $(Build.SourcesDirectory)\build\PGO @@ -16,20 +28,25 @@ jobs: nuspecFilename: PGO.nuspec steps: - - task: DownloadBuildArtifacts@0 + - checkout: self + clean: true + # It is important that this be 0, otherwise git will not fetch the branch ref names that the PGO rules require. + fetchDepth: 0 + submodules: false + persistCredentials: false + + - task: DownloadPipelineArtifact@2 + displayName: Download Final PGO Databases inputs: - artifactName: ${{ parameters.pgoArtifact }} + artifact: pgd-merged-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} downloadPath: $(artifactsPath) + - template: steps-ensure-nuget-version.yml + - task: NuGetAuthenticate@0 inputs: nuGetServiceConnections: 'Terminal Public Artifact Feed' - - task: NuGetToolInstaller@0 - displayName: 'Use NuGet 5.8.0' - inputs: - versionSpec: 5.8.0 - # In the Microsoft Azure DevOps tenant, NuGetCommand is ambiguous. # This should be `task: NuGetCommand@2` - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 @@ -45,12 +62,11 @@ jobs: displayName: 'Create PGO Nuget' inputs: solution: $(pgoToolsPath)\PGO.DB.proj - msbuildArguments: '/t:CreatePGONuGet /p:PGOBuildMode=Instrument /p:PGDPathForAllArch=$(artifactsPath)\${{ parameters.pgoArtifact }} /p:PGOOutputPath=$(Build.ArtifactStagingDirectory)' + msbuildArguments: '/t:CreatePGONuGet /p:PGOBuildMode=Instrument /p:PGDPathForAllArch=$(artifactsPath) /p:PGOOutputPath=$(Build.ArtifactStagingDirectory)' - - task: PublishBuildArtifacts@1 - inputs: - pathToPublish: $(Build.ArtifactStagingDirectory) - artifactName: ${{ parameters.pgoArtifact }} + - publish: $(Build.ArtifactStagingDirectory) + artifact: pgo-nupkg-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} + displayName: "Publish Pipeline Artifact" - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 displayName: 'NuGet push' diff --git a/build/pipelines/templates-v2/job-pgo-merge-pgd.yml b/build/pipelines/templates-v2/job-pgo-merge-pgd.yml new file mode 100644 index 00000000000..8b341b463eb --- /dev/null +++ b/build/pipelines/templates-v2/job-pgo-merge-pgd.yml @@ -0,0 +1,75 @@ +parameters: + - name: buildConfiguration + type: string + - name: buildPlatforms + type: object + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: jobName + type: string + default: MergePGD + +jobs: +- job: ${{ parameters.jobName }} + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + dependsOn: ${{ parameters.dependsOn }} + displayName: Merge PGO Counts for ${{ parameters.buildConfiguration }} + + steps: + # The environment variable VCToolsInstallDir isn't defined on lab machines, so we need to retrieve it ourselves. + - script: | + "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -Latest -requires Microsoft.Component.MSBuild -property InstallationPath > %TEMP%\vsinstalldir.txt + set /p _VSINSTALLDIR15=<%TEMP%\vsinstalldir.txt + del %TEMP%\vsinstalldir.txt + call "%_VSINSTALLDIR15%\Common7\Tools\VsDevCmd.bat" + echo VCToolsInstallDir = %VCToolsInstallDir% + echo ##vso[task.setvariable variable=VCToolsInstallDir]%VCToolsInstallDir% + displayName: 'Retrieve VC tools directory' + + - ${{ each platform in parameters.buildPlatforms }}: + - task: DownloadPipelineArtifact@2 + displayName: Download PGO Databases for ${{ platform }} + inputs: + artifactName: build-${{ platform }}-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} + itemPattern: '**/*.pgd' + downloadPath: '$(Build.SourcesDirectory)/pgd/${{ platform }}/${{ parameters.buildConfiguration }}' + - task: DownloadPipelineArtifact@2 + displayName: Download PGO Counts for ${{ platform }} + inputs: + artifactName: pgc-intermediates-${{ platform }}-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} + downloadPath: '$(Build.SourcesDirectory)/pgc/${{ platform }}/${{ parameters.buildConfiguration }}' + - pwsh: |- + $Arch = '${{ platform }}' + $Conf = '${{ parameters.buildConfiguration }}' + $PGCDir = '$(Build.SourcesDirectory)/pgc/${{ platform }}/${{ parameters.buildConfiguration }}' + $PGDDir = '$(Build.SourcesDirectory)/pgd/${{ platform }}/${{ parameters.buildConfiguration }}' + # Flatten the PGD directory + Get-ChildItem $PGDDir -Recurse -Filter *.pgd | Move-Item -Destination $PGDDir -Verbose + Get-ChildItem $PGCDir -Filter *.pgc | + ForEach-Object { + $Parts = $_.Name -Split "!"; + $_ | Add-Member Module $Parts[0] -PassThru + } | + Group-Object Module | + ForEach-Object { + & "$(VCToolsInstallDir)\bin\Hostx64\${{ platform }}\pgomgr.exe" /merge $_.Group.FullName "$PGDDir\$($_.Name).pgd" + } + displayName: Merge PGO Counts for ${{ platform }} + - task: CopyFiles@2 + displayName: 'Copy merged pgds to artifact staging' + inputs: + sourceFolder: '$(Build.SourcesDirectory)/pgd/${{ platform }}/${{ parameters.buildConfiguration }}' + contents: '**\*.pgd' + targetFolder: '$(Build.ArtifactStagingDirectory)\out-pgd\${{ platform }}' + + - publish: $(Build.ArtifactStagingDirectory)\out-pgd + artifact: pgd-merged-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} + displayName: "Publish merged PGDs" diff --git a/build/pipelines/templates-v2/job-publish-symbols.yml b/build/pipelines/templates-v2/job-publish-symbols.yml new file mode 100644 index 00000000000..83c472872b8 --- /dev/null +++ b/build/pipelines/templates-v2/job-publish-symbols.yml @@ -0,0 +1,97 @@ +parameters: + - name: includePublicSymbolServer + type: boolean + default: false + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: jobName + type: string + default: PublishSymbols + - name: symbolExpiryTime + type: string + default: 36530 # This is the default from PublishSymbols@2 + - name: variables + type: object + default: {} + - name: symbolPatGoesInTaskInputs + type: boolean + default: false + +jobs: +- job: ${{ parameters.jobName }} + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + ${{ if eq(parameters.includePublicSymbolServer, true) }}: + displayName: Publish Symbols to Internal and MSDL + ${{ else }}: + displayName: Publish Symbols Internally + dependsOn: ${{ parameters.dependsOn }} + variables: + ${{ insert }}: ${{ parameters.variables }} + steps: + - checkout: self + clean: true + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: true + persistCredentials: True + + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + + - task: DownloadPipelineArtifact@2 + displayName: Download all PDBs from all prior build phases + inputs: + itemPattern: '**/*.pdb' + targetPath: '$(Build.SourcesDirectory)/bin' + + - task: PublishSymbols@2 + displayName: Publish Symbols (to current Azure DevOps tenant) + continueOnError: True + inputs: + SymbolsFolder: '$(Build.SourcesDirectory)/bin' + SearchPattern: '**/*.pdb' + IndexSources: false + DetailedLog: true + SymbolsMaximumWaitTime: 30 + SymbolServerType: 'TeamServices' + SymbolsProduct: 'Windows Terminal Converged Symbols' + SymbolsVersion: '$(XES_APPXMANIFESTVERSION)' + SymbolExpirationInDays: ${{ parameters.symbolExpiryTime }} + env: + LIB: $(Build.SourcesDirectory) + + - ${{ if eq(parameters.includePublicSymbolServer, true) }}: + - task: PublishSymbols@2 + displayName: 'Publish symbols to MSDL' + continueOnError: True + inputs: + SymbolsFolder: '$(Build.SourcesDirectory)/bin' + SearchPattern: '**/*.pdb' + IndexSources: false + DetailedLog: true + SymbolsMaximumWaitTime: 30 + SymbolServerType: 'TeamServices' + SymbolsProduct: 'Windows Terminal Converged Symbols' + SymbolsVersion: '$(XES_APPXMANIFESTVERSION)' + SymbolExpirationInDays: ${{ parameters.symbolExpiryTime }} + ${{ if eq(parameters.symbolPatGoesInTaskInputs, true) }}: + Pat: $(ADO_microsoftpublicsymbols_PAT) + # The ADO task does not support indexing of GitHub sources. + # There is a bug which causes this task to fail if LIB includes an inaccessible path (even though it does not depend on it). + # To work around this issue, we just force LIB to be any dir that we know exists. + # Copied from https://github.com/microsoft/icu/blob/f869c214adc87415dfe751d81f42f1bca55dcf5f/build/azure-nuget.yml#L564-L583 + env: + LIB: $(Build.SourcesDirectory) + ArtifactServices_Symbol_AccountName: microsoftpublicsymbols + ${{ if ne(parameters.symbolPatGoesInTaskInputs, true) }}: + ArtifactServices_Symbol_PAT: $(ADO_microsoftpublicsymbols_PAT) diff --git a/build/pipelines/templates-v2/job-run-pgo-tests.yml b/build/pipelines/templates-v2/job-run-pgo-tests.yml new file mode 100644 index 00000000000..817d97ff9ce --- /dev/null +++ b/build/pipelines/templates-v2/job-run-pgo-tests.yml @@ -0,0 +1,82 @@ +parameters: + buildConfiguration: 'Release' + buildPlatform: '' + artifactStem: '' + testLogPath: '$(Build.BinariesDirectory)\$(BuildPlatform)\$(BuildConfiguration)\testsOnBuildMachine.wtl' + +jobs: +- job: PGO${{ parameters.buildPlatform }}${{ parameters.buildConfiguration }} + displayName: PGO ${{ parameters.buildPlatform }} ${{ parameters.buildConfiguration }} + variables: + BuildConfiguration: ${{ parameters.buildConfiguration }} + BuildPlatform: ${{ parameters.buildPlatform }} + OutputBuildPlatform: ${{ parameters.buildPlatform }} + Terminal.BinDir: $(Build.SourcesDirectory)/bin/$(OutputBuildPlatform)/$(BuildConfiguration) + pool: + ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + ${{ if ne(parameters.buildPlatform, 'ARM64') }}: + name: SHINE-OSS-Testing-x64 + ${{ else }}: + name: SHINE-OSS-Testing-arm64 + ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: + ${{ if ne(parameters.buildPlatform, 'ARM64') }}: + name: SHINE-INT-Testing-x64 + ${{ else }}: + name: SHINE-INT-Testing-arm64 + + steps: + - checkout: self + submodules: false + clean: true + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + + - task: DownloadPipelineArtifact@2 + displayName: Download artifacts + inputs: + artifactName: build-${{ parameters.buildPlatform }}-$(BuildConfiguration)${{ parameters.artifactStem }} + downloadPath: $(Terminal.BinDir) + + # The tests expect Terminal to be an unpackaged distribution named terminal-0.0.1.0 (after the dev build version scheme) + # Extract to that folder explicitly and strip the embedded folder name from the unpackaged archive. + - powershell: |- + $TargetDirectory = New-Item -Type Directory (Join-Path "$(Terminal.BinDir)" "terminal-0.0.1.0") + & tar.exe -x -v -f (Get-Item "$(Terminal.BinDir)/_unpackaged/*.zip") -C $TargetDirectory.FullName --strip-components=1 + displayName: Extract the unpackaged build for PGO + + - template: steps-ensure-nuget-version.yml + + - powershell: |- + $Package = 'Microsoft.Internal.Windows.Terminal.TestContent' + $Version = '1.0.1' + & nuget.exe install $Package -Version $Version + Write-Host "##vso[task.setvariable variable=TerminalTestContentPath]$(Build.SourcesDirectory)\packages\${Package}.${Version}\content" + displayName: Install Test Content + + - task: PowerShell@2 + displayName: 'Run PGO Tests' + inputs: + targetType: filePath + filePath: build\scripts\Run-Tests.ps1 + arguments: >- + -MatchPattern '*UIA.Tests.dll' + -Platform '$(OutputBuildPlatform)' + -Configuration '$(BuildConfiguration)' + -LogPath '${{ parameters.testLogPath }}' + -Root "$(Terminal.BinDir)" + -AdditionalTaefArguments '/select:(@IsPGO=true)','/p:WTTestContent=$(TerminalTestContentPath)' + + - task: CopyFiles@2 + displayName: 'Copy PGO outputs to Artifacts' + condition: always() + inputs: + Contents: | + **/*.pgc + ${{ parameters.testLogPath }} + TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/pgc' + OverWrite: true + flattenFolders: true + + - publish: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/pgc' + artifact: pgc-intermediates-$(BuildPlatform)-$(BuildConfiguration)${{ parameters.artifactStem }} + condition: always() diff --git a/build/pipelines/templates-v2/job-submit-windows-vpack.yml b/build/pipelines/templates-v2/job-submit-windows-vpack.yml new file mode 100644 index 00000000000..2e9cb1e1fe2 --- /dev/null +++ b/build/pipelines/templates-v2/job-submit-windows-vpack.yml @@ -0,0 +1,81 @@ +parameters: + - name: buildConfiguration + type: string + - name: generateSbom + type: boolean + default: false + - name: pool + type: object + default: [] + - name: dependsOn + type: object + default: null + - name: artifactStem + type: string + default: '' + - name: variables + type: object + default: {} + - name: publishArtifacts + type: boolean + default: true + +jobs: +- job: VPack + ${{ if ne(length(parameters.pool), 0) }}: + pool: ${{ parameters.pool }} + displayName: Create and Submit Windows vPack + dependsOn: ${{ parameters.dependsOn }} + variables: + JobOutputDirectory: $(XES_VPACKMANIFESTDIRECTORY) + JobOutputArtifactName: vpack-manifest${{ parameters.artifactStem }} + ${{ insert }}: ${{ parameters.variables }} + steps: + - checkout: self + clean: true + fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here + submodules: true + persistCredentials: True + + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + + - task: DownloadPipelineArtifact@2 + displayName: Download MSIX Bundle Artifact + inputs: + artifactName: appxbundle-${{ parameters.buildConfiguration }}${{ parameters.artifactStem }} + downloadPath: '$(Build.SourcesDirectory)/bundle' + + # Rename to known/fixed name for Windows build system + - powershell: |- + # Create vpack directory and place item inside + $TargetFolder = New-Item -Type Directory '$(Build.SourcesDirectory)/WindowsTerminal.app' + Get-ChildItem bundle/Microsoft.WindowsTerminal_*.msixbundle | Move-Item (Join-Path $TargetFolder.FullName 'Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle') -Verbose + displayName: Stage packages for vpack + + - task: PkgESVPack@12 + displayName: 'Package ES - VPack' + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + sourceDirectory: '$(Build.SourcesDirectory)/WindowsTerminal.app' + description: VPack for the Windows Terminal Application + pushPkgName: WindowsTerminal.app + owner: conhost + githubToken: $(GitHubTokenForVpackProvenance) + + - ${{ if eq(parameters.publishArtifacts, true) }}: + - publish: $(JobOutputDirectory) + artifact: $(JobOutputArtifactName) + displayName: 'Publish VPack Manifest to Drop' + + - task: PkgESFCIBGit@12 + displayName: 'Submit VPack Manifest to Windows' + inputs: + configPath: '$(Build.SourcesDirectory)\build\config\GitCheckin.json' + artifactsDirectory: $(XES_VPACKMANIFESTDIRECTORY) + prTimeOut: 5 + diff --git a/build/pipelines/templates/test-console-ci.yml b/build/pipelines/templates-v2/job-test-project.yml similarity index 50% rename from build/pipelines/templates/test-console-ci.yml rename to build/pipelines/templates-v2/job-test-project.yml index b2eea094f13..1cd8e2bef67 100644 --- a/build/pipelines/templates/test-console-ci.yml +++ b/build/pipelines/templates-v2/job-test-project.yml @@ -1,9 +1,9 @@ parameters: configuration: 'Release' platform: '' - additionalBuildArguments: '' - artifactName: 'drop' testLogPath: '$(Build.BinariesDirectory)\$(BuildPlatform)\$(BuildConfiguration)\testsOnBuildMachine.wtl' + inputArtifactStem: '' + outputArtifactStem: '' jobs: - job: Test${{ parameters.platform }}${{ parameters.configuration }} @@ -11,72 +11,80 @@ jobs: variables: BuildConfiguration: ${{ parameters.configuration }} BuildPlatform: ${{ parameters.platform }} + ${{ if eq(parameters.platform, 'x86') }}: + OutputBuildPlatform: Win32 + ${{ else }}: + OutputBuildPlatform: ${{ parameters.platform }} + Terminal.BinDir: $(Build.SourcesDirectory)/bin/$(OutputBuildPlatform)/$(BuildConfiguration) pool: ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPoolOSS-L + ${{ if ne(parameters.platform, 'ARM64') }}: + name: SHINE-OSS-Testing-x64 + ${{ else }}: + name: SHINE-OSS-Testing-arm64 ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPool-L - demands: ImageOverride -equals WinDevVS17-latest + ${{ if ne(parameters.platform, 'ARM64') }}: + name: SHINE-INT-Testing-x64 + ${{ else }}: + name: SHINE-INT-Testing-arm64 steps: - checkout: self - submodules: true + submodules: false clean: true fetchDepth: 1 + fetchTags: false # Tags still result in depth > 1 fetch; we don't need them here - - task: DownloadBuildArtifacts@0 + - task: DownloadPipelineArtifact@2 + displayName: Download artifacts inputs: - artifactName: ${{ parameters.artifactName }} - - - task: PowerShell@2 - displayName: 'Rationalize build platform' - inputs: - targetType: inline - script: | - $Arch = "$(BuildPlatform)" - If ($Arch -Eq "x86") { $Arch = "Win32" } - Write-Host "##vso[task.setvariable variable=RationalizedBuildPlatform]${Arch}" + artifactName: build-${{ parameters.platform }}-$(BuildConfiguration)${{ parameters.inputArtifactStem }} + downloadPath: $(Terminal.BinDir) - task: PowerShell@2 displayName: 'Run Unit Tests' inputs: targetType: filePath filePath: build\scripts\Run-Tests.ps1 - arguments: -MatchPattern '*unit.test*.dll' -Platform '$(RationalizedBuildPlatform)' -Configuration '$(BuildConfiguration)' -LogPath '${{ parameters.testLogPath }}' -Root "$(System.ArtifactsDirectory)\\${{ parameters.artifactName }}\\$(BuildConfiguration)\\$(BuildPlatform)\\test" - condition: and(and(succeeded(), ne(variables['PGOBuildMode'], 'Instrument')), or(eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildPlatform'], 'x86'))) + arguments: -MatchPattern '*unit.test*.dll' -Platform '$(OutputBuildPlatform)' -Configuration '$(BuildConfiguration)' -LogPath '${{ parameters.testLogPath }}' -Root "$(Terminal.BinDir)" - - task: PowerShell@2 - displayName: 'Run Feature Tests (x64 only)' - inputs: - targetType: filePath - filePath: build\scripts\Run-Tests.ps1 - arguments: -MatchPattern '*feature.test*.dll' -Platform '$(RationalizedBuildPlatform)' -Configuration '$(BuildConfiguration)' -LogPath '${{ parameters.testLogPath }}' -Root "$(System.ArtifactsDirectory)\\${{ parameters.artifactName }}\\$(BuildConfiguration)\\$(BuildPlatform)\\test" - condition: and(and(succeeded(), ne(variables['PGOBuildMode'], 'Instrument')), eq(variables['BuildPlatform'], 'x64')) + - ${{ if or(eq(parameters.platform, 'x64'), eq(parameters.platform, 'arm64')) }}: + - task: PowerShell@2 + displayName: 'Run Feature Tests' + inputs: + targetType: filePath + filePath: build\scripts\Run-Tests.ps1 + arguments: -MatchPattern '*feature.test*.dll' -Platform '$(OutputBuildPlatform)' -Configuration '$(BuildConfiguration)' -LogPath '${{ parameters.testLogPath }}' -Root "$(Terminal.BinDir)" - task: PowerShell@2 displayName: 'Convert Test Logs from WTL to xUnit format' + condition: always() inputs: targetType: filePath filePath: build\Helix\ConvertWttLogToXUnit.ps1 arguments: -WttInputPath '${{ parameters.testLogPath }}' -WttSingleRerunInputPath 'unused.wtl' -WttMultipleRerunInputPath 'unused2.wtl' -XUnitOutputPath 'onBuildMachineResults.xml' -TestNamePrefix '$(BuildConfiguration).$(BuildPlatform)' - condition: and(ne(variables['PGOBuildMode'], 'Instrument'),or(eq(variables['BuildPlatform'], 'x64'), eq(variables['BuildPlatform'], 'x86'))) + + - task: PowerShell@2 + displayName: 'Manually log test failures' + condition: always() + inputs: + targetType: filePath + filePath: build\Helix\OutputTestErrorsForAzureDevops.ps1 + arguments: -XUnitOutputPath 'onBuildMachineResults.xml' - task: PublishTestResults@2 displayName: 'Upload converted test logs' - condition: ne(variables['PGOBuildMode'], 'Instrument') + condition: always() inputs: testResultsFormat: 'xUnit' # Options: JUnit, NUnit, VSTest, xUnit, cTest testResultsFiles: '**/onBuildMachineResults.xml' - #searchFolder: '$(System.DefaultWorkingDirectory)' # Optional - #mergeTestResults: false # Optional - #failTaskOnFailedTests: false # Optional testRunTitle: 'On Build Machine Tests' # Optional buildPlatform: $(BuildPlatform) # Optional buildConfiguration: $(BuildConfiguration) # Optional - #publishRunAttachments: true # Optional - task: CopyFiles@2 displayName: 'Copy result logs to Artifacts' + condition: always() inputs: Contents: | **/*.wtl @@ -87,4 +95,5 @@ jobs: flattenFolders: true - publish: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/test-logs' - artifact: TestLogs$(BuildPlatform)$(BuildConfiguration) + artifact: test-logs-$(BuildPlatform)-$(BuildConfiguration)${{ parameters.outputArtifactStem }} + condition: always() diff --git a/build/pipelines/templates-v2/pipeline-full-release-build.yml b/build/pipelines/templates-v2/pipeline-full-release-build.yml new file mode 100644 index 00000000000..06358de5c5b --- /dev/null +++ b/build/pipelines/templates-v2/pipeline-full-release-build.yml @@ -0,0 +1,181 @@ +# This build should never run as CI or against a pull request. +trigger: none + +parameters: + - name: branding + type: string + default: Release + - name: buildTerminal + type: boolean + default: true + - name: buildConPTY + type: boolean + default: false + - name: buildWPF + type: boolean + default: false + - name: pgoBuildMode + type: string + default: Optimize + values: + - Optimize + - Instrument + - None + - name: buildConfigurations + type: object + default: + - Release + - name: buildPlatforms + type: object + default: + - x64 + - x86 + - arm64 + - name: codeSign + type: boolean + default: true + - name: generateSbom + type: boolean + default: true + - name: terminalInternalPackageVersion + type: string + default: '0.0.8' + + - name: publishSymbolsToPublic + type: boolean + default: true + - name: symbolExpiryTime + type: string + default: 36530 # This is the default from PublishSymbols@2 + - name: publishVpackToWindows + type: boolean + default: false + + - name: extraPublishJobs + type: object + default: [] + - name: pool + type: object + default: + name: SHINE-INT-S # By default, send jobs to the small agent pool. + demands: ImageOverride -equals SHINE-VS17-Latest + +variables: + - template: variables-nuget-package-version.yml + parameters: + branding: ${{ parameters.branding }} + +resources: + repositories: + - repository: self + type: git + ref: main + +stages: + - stage: Build + displayName: Build + pool: ${{ parameters.pool }} + dependsOn: [] + jobs: + - template: ./job-build-project.yml + parameters: + pool: + name: SHINE-INT-L # Run the compilation on the large agent pool, rather than the default small one. + demands: ImageOverride -equals SHINE-VS17-Latest + branding: ${{ parameters.branding }} + buildTerminal: ${{ parameters.buildTerminal }} + buildConPTY: ${{ parameters.buildConPTY }} + buildWPF: ${{ parameters.buildWPF }} + pgoBuildMode: ${{ parameters.pgoBuildMode }} + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: ${{ parameters.generateSbom }} + codeSign: ${{ parameters.codeSign }} + beforeBuildSteps: # Right before we build, lay down the universal package and localizations + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + + - task: UniversalPackages@0 + displayName: Download terminal-internal Universal Package + inputs: + feedListDownload: 2b3f8893-a6e8-411f-b197-a9e05576da48 + packageListDownload: e82d490c-af86-4733-9dc4-07b772033204 + versionListDownload: ${{ parameters.terminalInternalPackageVersion }} + + - template: ./steps-fetch-and-prepare-localizations.yml + parameters: + includePseudoLoc: true + + - ${{ if eq(parameters.buildWPF, true) }}: + # Add an Any CPU build flavor for the WPF control bits + - template: ./job-build-project.yml + parameters: + # This job is allowed to run on the default small pool. + jobName: BuildWPF + branding: ${{ parameters.branding }} + buildTerminal: false + buildWPFDotNetComponents: true + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: + - Any CPU + generateSbom: ${{ parameters.generateSbom }} + codeSign: ${{ parameters.codeSign }} + beforeBuildSteps: + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + # WPF doesn't need the localizations or the universal package, but if it does... put them here. + + - stage: Package + displayName: Package + pool: ${{ parameters.pool }} + dependsOn: [Build] + jobs: + - ${{ if eq(parameters.buildTerminal, true) }}: + - template: ./job-merge-msix-into-bundle.yml + parameters: + jobName: Bundle + branding: ${{ parameters.branding }} + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: ${{ parameters.generateSbom }} + codeSign: ${{ parameters.codeSign }} + + - ${{ if eq(parameters.buildConPTY, true) }}: + - template: ./job-package-conpty.yml + parameters: + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: ${{ parameters.generateSbom }} + codeSign: ${{ parameters.codeSign }} + + - ${{ if eq(parameters.buildWPF, true) }}: + - template: ./job-build-package-wpf.yml + parameters: + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: ${{ parameters.generateSbom }} + codeSign: ${{ parameters.codeSign }} + + - stage: Publish + displayName: Publish + pool: ${{ parameters.pool }} + dependsOn: [Build, Package] + jobs: + # We only support the vpack for Release builds that include Terminal + - ${{ if and(containsValue(parameters.buildConfigurations, 'Release'), parameters.buildTerminal, parameters.publishVpackToWindows) }}: + - template: ./job-submit-windows-vpack.yml + parameters: + buildConfiguration: Release + generateSbom: ${{ parameters.generateSbom }} + + - template: ./job-publish-symbols.yml + parameters: + includePublicSymbolServer: ${{ parameters.publishSymbolsToPublic }} + symbolExpiryTime: ${{ parameters.symbolExpiryTime }} + + - ${{ parameters.extraPublishJobs }} +... diff --git a/build/pipelines/templates-v2/pipeline-onebranch-full-release-build.yml b/build/pipelines/templates-v2/pipeline-onebranch-full-release-build.yml new file mode 100644 index 00000000000..d3d77fee51c --- /dev/null +++ b/build/pipelines/templates-v2/pipeline-onebranch-full-release-build.yml @@ -0,0 +1,268 @@ +parameters: + - name: official + type: boolean + default: false + - name: branding + type: string + default: Release + values: + - Release + - Preview + - Canary + - Dev + - name: buildTerminal + type: boolean + default: true + - name: buildConPTY + type: boolean + default: false + - name: buildWPF + type: boolean + default: false + - name: pgoBuildMode + type: string + default: Optimize + values: + - Optimize + - Instrument + - None + - name: buildConfigurations + type: object + default: + - Release + - name: buildPlatforms + type: object + default: + - x64 + - x86 + - arm64 + - name: codeSign + type: boolean + default: true + - name: terminalInternalPackageVersion + type: string + default: '0.0.8' + + - name: publishSymbolsToPublic + type: boolean + default: true + - name: symbolExpiryTime + type: string + default: 36530 # This is the default from PublishSymbols@2 + - name: publishVpackToWindows + type: boolean + default: false + + - name: extraPublishJobs + type: object + default: [] + +resources: + repositories: + - repository: templates + type: git + name: OneBranch.Pipelines/GovernedTemplates + ref: refs/heads/main + +extends: + ${{ if eq(parameters.official, true) }}: + template: v2/Microsoft.Official.yml@templates # https://aka.ms/obpipelines/templates + ${{ else }}: + template: v2/Microsoft.NonOfficial.yml@templates + parameters: + featureFlags: + WindowsHostVersion: 1ESWindows2022 + platform: + name: 'windows_undocked' + product: 'Windows Terminal' + cloudvault: # https://aka.ms/obpipelines/cloudvault + enabled: false + globalSdl: # https://aka.ms/obpipelines/sdl + asyncSdl: + enabled: true + tsaOptionsFile: 'build/config/tsa.json' + tsa: + enabled: true + configFile: '$(Build.SourcesDirectory)\build\config\tsa.json' + binskim: + break: false + scanOutputDirectoryOnly: true + policheck: + break: false + severity: Note + baseline: + baselineFile: '$(Build.SourcesDirectory)\build\config\release.gdnbaselines' + suppressionSet: default + + stages: + - stage: Build + displayName: Build + dependsOn: [] + jobs: + - template: ./build/pipelines/templates-v2/job-build-project.yml@self + parameters: + pool: { type: windows } + variables: + ob_git_checkout: false # This job checks itself out + ob_git_skip_checkout_none: true + ob_outputDirectory: $(JobOutputDirectory) + ob_artifactBaseName: $(JobOutputArtifactName) + publishArtifacts: false # Handled by OneBranch + branding: ${{ parameters.branding }} + buildTerminal: ${{ parameters.buildTerminal }} + buildConPTY: ${{ parameters.buildConPTY }} + buildWPF: ${{ parameters.buildWPF }} + pgoBuildMode: ${{ parameters.pgoBuildMode }} + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: false # this is handled by onebranch + removeAllNonSignedFiles: true # appease the overlords + codeSign: ${{ parameters.codeSign }} + beforeBuildSteps: # Right before we build, lay down the universal package and localizations + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + + - task: UniversalPackages@0 + displayName: Download terminal-internal Universal Package + inputs: + feedListDownload: 2b3f8893-a6e8-411f-b197-a9e05576da48 + packageListDownload: e82d490c-af86-4733-9dc4-07b772033204 + versionListDownload: ${{ parameters.terminalInternalPackageVersion }} + + - template: ./build/pipelines/templates-v2/steps-fetch-and-prepare-localizations.yml@self + parameters: + includePseudoLoc: true + + - ${{ if eq(parameters.buildWPF, true) }}: + # Add an Any CPU build flavor for the WPF control bits + - template: ./build/pipelines/templates-v2/job-build-project.yml@self + parameters: + pool: { type: windows } + variables: + ob_git_checkout: false # This job checks itself out + ob_git_skip_checkout_none: true + ob_outputDirectory: $(JobOutputDirectory) + ob_artifactBaseName: $(JobOutputArtifactName) + publishArtifacts: false # Handled by OneBranch + jobName: BuildWPF + branding: ${{ parameters.branding }} + buildTerminal: false + buildWPFDotNetComponents: true + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: + - Any CPU + generateSbom: false # this is handled by onebranch + removeAllNonSignedFiles: true # appease the overlords + codeSign: ${{ parameters.codeSign }} + beforeBuildSteps: + - task: PkgESSetupBuild@12 + displayName: Package ES - Setup Build + inputs: + disableOutputRedirect: true + # WPF doesn't need the localizations or the universal package, but if it does... put them here. + + - stage: Package + displayName: Package + dependsOn: [Build] + jobs: + - ${{ if eq(parameters.buildTerminal, true) }}: + - template: ./build/pipelines/templates-v2/job-merge-msix-into-bundle.yml@self + parameters: + pool: { type: windows } + variables: + ob_git_checkout: false # This job checks itself out + ob_git_skip_checkout_none: true + ob_outputDirectory: $(JobOutputDirectory) + ob_artifactBaseName: $(JobOutputArtifactName) + ### This job is also in charge of submitting the vpack to Windows if it's enabled + ob_createvpack_enabled: ${{ and(parameters.buildTerminal, parameters.publishVpackToWindows) }} + ob_updateOSManifest_enabled: ${{ and(parameters.buildTerminal, parameters.publishVpackToWindows) }} + ### If enabled above, these options are in play. + ob_createvpack_packagename: 'WindowsTerminal.app' + ob_createvpack_owneralias: 'conhost@microsoft.com' + ob_createvpack_description: 'VPack for the Windows Terminal Application' + ob_createvpack_targetDestinationDirectory: '$(Destination)' + ob_createvpack_propsFile: false + ob_createvpack_provData: true + ob_createvpack_metadata: '$(Build.SourceVersion)' + ob_createvpack_topLevelRetries: 0 + ob_createvpack_failOnStdErr: true + ob_createvpack_taskLogVerbosity: Detailed + ob_createvpack_verbose: true + ob_createvpack_vpackdirectory: '$(JobOutputDirectory)\vpack' + ob_updateOSManifest_gitcheckinConfigPath: '$(Build.SourcesDirectory)\build\config\GitCheckin.json' + # We're skipping the 'fetch' part of the OneBranch rules, but that doesn't mean + # that it doesn't expect to have downloaded a manifest directly to some 'destination' + # folder that it can then update and upload. + # Effectively: it says "destination" but it means "source" + # DH: Don't ask why. + ob_updateOSManifest_destination: $(XES_VPACKMANIFESTDIRECTORY) + ob_updateOSManifest_skipFetch: true + publishArtifacts: false # Handled by OneBranch + jobName: Bundle + branding: ${{ parameters.branding }} + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: false # Handled by onebranch + codeSign: ${{ parameters.codeSign }} + afterBuildSteps: + # This directory has to exist, even if we aren't using createvpack, because the Guardian rules demand it. + - pwsh: |- + New-Item "$(JobOutputDirectory)/vpack" -Type Directory + displayName: Make sure the vpack directory exists + + - ${{ if parameters.publishVpackToWindows }}: + - pwsh: |- + Copy-Item -Verbose -Path "$(MsixBundlePath)" -Destination (Join-Path "$(JobOutputDirectory)/vpack" 'Microsoft.WindowsTerminal_8wekyb3d8bbwe.msixbundle') + displayName: Stage msixbundle for vpack + + - ${{ if eq(parameters.buildConPTY, true) }}: + - template: ./build/pipelines/templates-v2/job-package-conpty.yml@self + parameters: + pool: { type: windows } + variables: + ob_git_checkout: false # This job checks itself out + ob_git_skip_checkout_none: true + ob_outputDirectory: $(JobOutputDirectory) + ob_artifactBaseName: $(JobOutputArtifactName) + publishArtifacts: false # Handled by OneBranch + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: false # this is handled by onebranch + codeSign: ${{ parameters.codeSign }} + + - ${{ if eq(parameters.buildWPF, true) }}: + - template: ./build/pipelines/templates-v2/job-build-package-wpf.yml@self + parameters: + pool: { type: windows } + variables: + ob_git_checkout: false # This job checks itself out + ob_git_skip_checkout_none: true + ob_outputDirectory: $(JobOutputDirectory) + ob_artifactBaseName: $(JobOutputArtifactName) + publishArtifacts: false # Handled by OneBranch + buildConfigurations: ${{ parameters.buildConfigurations }} + buildPlatforms: ${{ parameters.buildPlatforms }} + generateSbom: false # this is handled by onebranch + codeSign: ${{ parameters.codeSign }} + + - stage: Publish + displayName: Publish + dependsOn: [Build] + jobs: + - template: ./build/pipelines/templates-v2/job-publish-symbols.yml@self + parameters: + pool: { type: windows } + includePublicSymbolServer: ${{ parameters.publishSymbolsToPublic }} + symbolPatGoesInTaskInputs: true # onebranch tries to muck with the PAT variable, so we need to change how it get the PAT + symbolExpiryTime: ${{ parameters.symbolExpiryTime }} + variables: + ob_git_checkout: false # This job checks itself out + ob_git_skip_checkout_none: true + ob_outputDirectory: $(Build.ArtifactStagingDirectory) + # Without this, OneBranch will nerf our symbol tasks + ob_symbolsPublishing_enabled: true + + - ${{ parameters.extraPublishJobs }} diff --git a/build/pipelines/templates-v2/steps-create-signing-config.yml b/build/pipelines/templates-v2/steps-create-signing-config.yml new file mode 100644 index 00000000000..790d7a3fa86 --- /dev/null +++ b/build/pipelines/templates-v2/steps-create-signing-config.yml @@ -0,0 +1,35 @@ +parameters: + - name: stage + type: string + - name: outFile + type: string + - name: fragments + type: string + +# This build step template takes all files named "esrp.STAGE.batch.*.json" +# and merges them into a single output signing config. +# +# We generate the batch signing config by sticking together multiple "batches". +# The filter below (with Fragments) works by splitting the filename, esrp.s.batch.x.json, +# to get 'x' and then checking whether x is in Fragments. +# We have to manually strip comments out of the batch fragments due to https://github.com/PowerShell/PowerShell/issues/14553 + +steps: + - pwsh: |- + $SignBatchFiles = (Get-Item build/config/esrp.${{ parameters.stage }}.batch.*.json) + $Fragments = "${{ parameters.fragments }}" + If (-Not [String]::IsNullOrWhiteSpace($Fragments)) { + $FragmentList = $Fragments -Split ";" + If ($FragmentList.Length -Gt 0) { + $SignBatchFiles = $SignBatchFiles | Where-Object { ($_.Name -Split '\.')[3] -In $FragmentList } + } + } + Write-Host "Found $(@($SignBatchFiles).Length) Signing Configs" + Write-Host ($SignBatchFiles.Name -Join ";") + $FinalSignConfig = @{ + Version = "1.0.0"; + UseMinimatch = $false; + SignBatches = @($SignBatchFiles | ForEach-Object { Get-Content $_ | Where-Object { $_ -NotMatch "^\s*\/\/" } | ConvertFrom-Json -Depth 10 }); + } + $FinalSignConfig | ConvertTo-Json -Depth 10 | Out-File -Encoding utf8 "${{ parameters.outFile }}" + displayName: Merge ${{ parameters.stage }} signing configs (${{ parameters.outFile }}) diff --git a/build/pipelines/templates-v2/steps-download-bin-dir-artifact.yml b/build/pipelines/templates-v2/steps-download-bin-dir-artifact.yml new file mode 100644 index 00000000000..e5e90cc8ea2 --- /dev/null +++ b/build/pipelines/templates-v2/steps-download-bin-dir-artifact.yml @@ -0,0 +1,24 @@ +parameters: + - name: buildConfigurations + type: object + - name: buildPlatforms + type: object + - name: artifactStem + type: string + default: '' + +steps: +- ${{ each configuration in parameters.buildConfigurations }}: + - ${{ each platform in parameters.buildPlatforms }}: + - task: DownloadPipelineArtifact@2 + displayName: Download artifacts for ${{ platform }} ${{ configuration }} + inputs: + # Make sure to download the entire artifact, because it includes the SPDX SBOM + artifactName: build-${{ platform }}-${{ configuration }}${{ parameters.artifactStem }} + # Downloading to the source directory should ensure that the later SBOM generator can see the earlier SBOMs. + ${{ if eq(platform, 'x86') }}: + downloadPath: '$(Build.SourcesDirectory)/bin/Win32/${{ configuration }}' + ${{ elseif eq(platform, 'Any CPU') }}: + downloadPath: '$(Build.SourcesDirectory)/bin/AnyCPU/${{ configuration }}' + ${{ else }}: + downloadPath: '$(Build.SourcesDirectory)/bin/${{ platform }}/${{ configuration }}' diff --git a/build/pipelines/templates-v2/steps-ensure-nuget-version.yml b/build/pipelines/templates-v2/steps-ensure-nuget-version.yml new file mode 100644 index 00000000000..fb5cd75e4c8 --- /dev/null +++ b/build/pipelines/templates-v2/steps-ensure-nuget-version.yml @@ -0,0 +1,5 @@ +steps: +- task: NuGetToolInstaller@1 + displayName: Use NuGet 6.6.1 + inputs: + versionSpec: 6.6.1 diff --git a/build/pipelines/templates-v2/steps-fetch-and-prepare-localizations.yml b/build/pipelines/templates-v2/steps-fetch-and-prepare-localizations.yml new file mode 100644 index 00000000000..8ace357aad3 --- /dev/null +++ b/build/pipelines/templates-v2/steps-fetch-and-prepare-localizations.yml @@ -0,0 +1,27 @@ +parameters: + - name: includePseudoLoc + type: boolean + default: true + +steps: + - task: TouchdownBuildTask@1 + displayName: Download Localization Files + inputs: + teamId: 7105 + authId: $(TouchdownAppId) + authKey: $(TouchdownAppKey) + resourceFilePath: | + src\cascadia\**\en-US\*.resw + appendRelativeDir: true + localizationTarget: false + ${{ if eq(parameters.includePseudoLoc, true) }}: + pseudoSetting: Included + + - pwsh: |- + $Files = Get-ChildItem . -R -Filter 'Resources.resw' | ? FullName -Like '*en-US\*\Resources.resw' + $Files | % { Move-Item -Verbose $_.Directory $_.Directory.Parent.Parent -EA:Ignore } + displayName: Move Loc files into final locations + + - pwsh: |- + ./build/scripts/Copy-ContextMenuResourcesToCascadiaPackage.ps1 + displayName: Copy the Context Menu Loc Resources to CascadiaPackage diff --git a/build/pipelines/templates/restore-nuget-steps.yml b/build/pipelines/templates-v2/steps-restore-nuget.yml similarity index 75% rename from build/pipelines/templates/restore-nuget-steps.yml rename to build/pipelines/templates-v2/steps-restore-nuget.yml index f92c7aa5cc6..bd0c067531c 100644 --- a/build/pipelines/templates/restore-nuget-steps.yml +++ b/build/pipelines/templates-v2/steps-restore-nuget.yml @@ -1,11 +1,13 @@ steps: -- task: NuGetToolInstaller@0 - displayName: 'Use NuGet 6.3.0' - inputs: - versionSpec: 6.3.0 +- template: steps-ensure-nuget-version.yml - task: NuGetAuthenticate@0 +- script: |- + echo ##vso[task.setvariable variable=NUGET_RESTORE_MSBUILD_ARGS]/p:Platform=$(BuildPlatform) + displayName: Ensure NuGet restores for $(BuildPlatform) + condition: and(succeeded(), ne(variables['BuildPlatform'], 'Any CPU')) + # In the Microsoft Azure DevOps tenant, NuGetCommand is ambiguous. # This should be `task: NuGetCommand@2` - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 diff --git a/build/pipelines/templates-v2/variables-nuget-package-version.yml b/build/pipelines/templates-v2/variables-nuget-package-version.yml new file mode 100644 index 00000000000..d3a137ba0e0 --- /dev/null +++ b/build/pipelines/templates-v2/variables-nuget-package-version.yml @@ -0,0 +1,27 @@ +parameters: + - name: branding + type: string + +variables: + # If we are building a branch called "release-*", change the NuGet suffix + # to "preview". If we don't do that, XES will set the suffix to "release1" + # because it truncates the value after the first period. + # We also want to disable the suffix entirely if we're Release branded while + # on a release branch. + # main is special, however. XES ignores main. Since we never produce actual + # shipping builds from main, we want to force it to have a beta label as + # well. + # + # In effect: + # BRANCH / BRANDING | Release | Preview + # ------------------|----------------------------|----------------------------- + # release-* | 1.12.20220427 | 1.13.20220427-preview + # main | 1.14.20220427-experimental | 1.14.20220427-experimental + # all others | 1.14.20220427-mybranch | 1.14.20220427-mybranch + ${{ if startsWith(variables['Build.SourceBranchName'], 'release-') }}: + ${{ if eq(parameters.branding, 'Release') }}: + NoNuGetPackBetaVersion: true + ${{ else }}: + NuGetPackBetaVersion: preview + ${{ elseif eq(variables['Build.SourceBranchName'], 'main') }}: + NuGetPackBetaVersion: experimental diff --git a/build/pipelines/templates-v2/variables-onebranch-config.yml b/build/pipelines/templates-v2/variables-onebranch-config.yml new file mode 100644 index 00000000000..d7180e3e090 --- /dev/null +++ b/build/pipelines/templates-v2/variables-onebranch-config.yml @@ -0,0 +1,2 @@ +variables: + WindowsContainerImage: 'onebranch.azurecr.io/windows/ltsc2022/vse2022:latest' diff --git a/build/pipelines/templates/build-console-audit-job.yml b/build/pipelines/templates/build-console-audit-job.yml deleted file mode 100644 index 1ed556eff8f..00000000000 --- a/build/pipelines/templates/build-console-audit-job.yml +++ /dev/null @@ -1,34 +0,0 @@ -parameters: - platform: '' - additionalBuildArguments: '' - -jobs: -- job: Build${{ parameters.platform }}AuditMode - displayName: Static Analysis Build ${{ parameters.platform }} - variables: - BuildConfiguration: AuditMode - BuildPlatform: ${{ parameters.platform }} - pool: - ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPoolOSS-L - ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPool-L - demands: ImageOverride -equals WinDevVS17-latest - - steps: - - checkout: self - submodules: true - clean: true - fetchDepth: 1 - - - template: restore-nuget-steps.yml - - - task: VSBuild@1 - displayName: 'Build solution **\OpenConsole.sln' - inputs: - solution: '**\OpenConsole.sln' - platform: '$(BuildPlatform)' - configuration: '$(BuildConfiguration)' - msbuildArgs: ${{ parameters.additionalBuildArguments }} - clean: true - maximumCpuCount: true diff --git a/build/pipelines/templates/build-console-ci.yml b/build/pipelines/templates/build-console-ci.yml deleted file mode 100644 index 0ccf90f10f6..00000000000 --- a/build/pipelines/templates/build-console-ci.yml +++ /dev/null @@ -1,31 +0,0 @@ -parameters: - configuration: 'Release' - branding: 'Dev' - platform: '' - additionalBuildArguments: '' - -jobs: -- job: Build${{ parameters.platform }}${{ parameters.configuration }}${{ parameters.branding }} - displayName: Build ${{ parameters.platform }} ${{ parameters.configuration }} ${{ parameters.branding }} - variables: - BuildConfiguration: ${{ parameters.configuration }} - BuildPlatform: ${{ parameters.platform }} - WindowsTerminalBranding: ${{ parameters.branding }} - EnableRichCodeNavigation: true - pool: - ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPoolOSS-L - ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPool-L - demands: ImageOverride -equals WinDevVS17-latest - - steps: - - template: build-console-steps.yml - parameters: - additionalBuildArguments: ${{ parameters.additionalBuildArguments }} - - # It appears that the Component Governance build task that gets automatically injected stopped working - # when we renamed our main branch. - - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 - displayName: 'Component Detection' - condition: and(succeededOrFailed(), not(eq(variables['Build.Reason'], 'PullRequest'))) diff --git a/build/pipelines/templates/build-console-compliance-job.yml b/build/pipelines/templates/build-console-compliance-job.yml deleted file mode 100644 index d5042cdb177..00000000000 --- a/build/pipelines/templates/build-console-compliance-job.yml +++ /dev/null @@ -1,203 +0,0 @@ -jobs: -- job: Compliance - # We don't *need* a matrix but there's no other way to set parameters on a "job" - # in the AzDO YAML syntax. It would have to be a "stage" or a "template". - # Doesn't matter. We're going to do compliance on Release x64 because - # that's the one all the tooling works against for sure. - strategy: - matrix: - Release_x64: - BuildConfiguration: Release - BuildPlatform: x64 - displayName: Validate Security and Compliance - timeoutInMinutes: 240 - steps: - - checkout: self - clean: true - submodules: true - persistCredentials: True - - task: PkgESSetupBuild@12 - displayName: Package ES - Setup Build - inputs: - disableOutputRedirect: true - - task: PowerShell@2 - displayName: Rationalize Build Platform - inputs: - targetType: inline - script: >- - $Arch = "$(BuildPlatform)" - - If ($Arch -Eq "x86") { $Arch = "Win32" } - - Write-Host "##vso[task.setvariable variable=RationalizedBuildPlatform]${Arch}" - - template: restore-nuget-steps.yml - - task: UniversalPackages@0 - displayName: Download terminal-internal Universal Package - inputs: - feedListDownload: 2b3f8893-a6e8-411f-b197-a9e05576da48 - packageListDownload: e82d490c-af86-4733-9dc4-07b772033204 - versionListDownload: $(TerminalInternalPackageVersion) - - task: TouchdownBuildTask@1 - displayName: Download Localization Files - inputs: - teamId: 7105 - authId: $(TouchdownAppId) - authKey: $(TouchdownAppKey) - resourceFilePath: >- - src\cascadia\TerminalApp\Resources\en-US\Resources.resw - - src\cascadia\TerminalControl\Resources\en-US\Resources.resw - - src\cascadia\TerminalConnection\Resources\en-US\Resources.resw - - src\cascadia\TerminalSettingsModel\Resources\en-US\Resources.resw - - src\cascadia\TerminalSettingsEditor\Resources\en-US\Resources.resw - - src\cascadia\CascadiaPackage\Resources\en-US\Resources.resw - appendRelativeDir: true - localizationTarget: false - pseudoSetting: Included - - task: PowerShell@2 - displayName: Move Loc files one level up - inputs: - targetType: inline - script: >- - $Files = Get-ChildItem . -R -Filter 'Resources.resw' | ? FullName -Like '*en-US\*\Resources.resw' - - $Files | % { Move-Item -Verbose $_.Directory $_.Directory.Parent.Parent -EA:Ignore } - pwsh: true - - # 1ES Component Governance onboarding (Detects open source components). See https://docs.opensource.microsoft.com/tools/cg.html - - task: ms.vss-governance-buildtask.governance-build-task-component-detection.ComponentGovernanceComponentDetection@0 - displayName: Component Detection - - # # PREfast and PoliCheck need Node. Install that first. - - task: NodeTool@0 - - # !!! NOTE !!! Run PREfast first. Some of the other tasks are going to run on a completed build. - # PREfast is going to build the code as a part of its analysis and the generated sources - # and output binaries will be sufficient for the rest of the analysis. - # If you disable this, the other tasks won't likely work. You would have to add a build - # step instead that builds the code normally before calling them. - # Also... PREfast will rebuild anyway so that's why we're not running a normal build first. - # Waste of time to build twice. - # PREfast. See https://www.1eswiki.com/wiki/SDL_Native_Rules_Build_Task - - # The following 1ES tasks all operate completely differently and have a different syntax for usage. - # Most notable is every one of them has a different way of excluding things. - # Go see their 1eswiki.com pages to figure out how to exclude things. - # When writing exclusions, try to make them narrow so when new projects/binaries are added, they - # cause an error here and have to be explicitly pulled out. Don't write an exclusion so broad - # that it will catch other new stuff. - - # https://www.1eswiki.com/wiki/PREfast_Build_Task - # Builds the project with C/C++ static analysis tools to find coding flaws and vulnerabilities - # !!! WARNING !!! It doesn't work with WAPPROJ packaging projects. Build the sub-projects instead. - - task: securedevelopmentteam.vss-secure-development-tools.build-task-prefast.SDLNativeRules@3 - displayName: 'Run the PREfast SDL Native Rules for MSBuild' - condition: succeededOrFailed() - inputs: - setupCommandlines: '"C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsMSBuildCmd.bat"' - msBuildCommandline: msbuild.exe /nologo /m /p:WindowsTerminalOfficialBuild=true /p:WindowsTerminalBranding=${{ parameters.branding }} /p:WindowsTerminalReleaseBuild=true /p:platform=$(BuildPlatform) /p:configuration=$(BuildConfiguration) /t:Terminal\Window\WindowsTerminal /p:VisualStudioVersion=17.0 $(Build.SourcesDirectory)\OpenConsole.sln - msBuildVersion: "17.0" - - # Copies output from PREfast SDL Native Rules task to expected location for consumption by PkgESSecComp - - task: CopyFiles@1 - displayName: 'Copy PREfast xml files to SDLNativeRulesDir' - inputs: - SourceFolder: '$(Agent.BuildDirectory)' - Contents: | - **\*.nativecodeanalysis.xml - TargetFolder: '$(Agent.BuildDirectory)\_sdt\logs\SDLNativeRules' - - # https://www.1eswiki.com/index.php?title=PoliCheck_Build_Task - # Scans the text of source code, comments, and content for terminology that could be sensitive for legal, cultural, or geopolitical reasons. - # (Also finds vulgarities... takes all the fun out of everything.) - - task: securedevelopmentteam.vss-secure-development-tools.build-task-policheck.PoliCheck@2 - displayName: 'Run PoliCheck' - inputs: - targetType: F - targetArgument: $(Build.SourcesDirectory) - result: PoliCheck.xml - optionsFC: 1 - optionsXS: 1 - optionsUEPath: $(Build.SourcesDirectory)\build\config\PolicheckExclusions.xml - optionsHMENABLE: 0 - continueOnError: true - - # https://www.1eswiki.com/wiki/CredScan_Azure_DevOps_Build_Task - # Searches through source code and build outputs for a credential left behind in the open - - task: securedevelopmentteam.vss-secure-development-tools.build-task-credscan.CredScan@3 - displayName: 'Run CredScan' - inputs: - outputFormat: pre - # suppressionsFile: LocalSuppressions.json - batchSize: 20 - debugMode: false - continueOnError: true - - # https://www.1eswiki.com/wiki/BinSkim_Build_Task - # Searches managed and unmanaged binaries for known security vulnerabilities. - - task: securedevelopmentteam.vss-secure-development-tools.build-task-binskim.BinSkim@4 - displayName: 'Run BinSkim' - inputs: - TargetPattern: guardianGlob - # See https://aka.ms/gdn-globs for how to do match patterns - AnalyzeTargetGlob: $(Build.SourcesDirectory)\bin\**\*.dll;$(Build.SourcesDirectory)\bin\**\*.exe;-:file|**\Microsoft.UI.Xaml.dll;-:file|**\Microsoft.Toolkit.Win32.UI.XamlHost.dll;-:file|**\vcruntime*.dll;-:file|**\vcomp*.dll;-:file|**\vccorlib*.dll;-:file|**\vcamp*.dll;-:file|**\msvcp*.dll;-:file|**\concrt*.dll;-:file|**\TerminalThemeHelpers*.dll;-:file|**\cpprest*.dll - continueOnError: true - - # Set XES_SERIALPOSTBUILDREADY to run Security and Compliance task once per build - - powershell: Write-Host "##vso[task.setvariable variable=XES_SERIALPOSTBUILDREADY;]true" - displayName: 'Set XES_SERIALPOSTBUILDREADY Vars' - - # https://www.osgwiki.com/wiki/Package_ES_Security_and_Compliance - # Does a few things: - # - Ensures that Windows-required compliance tasks are run either inside this task - # or were run as a previous step prior to this one - # (PREfast, PoliCheck, Credscan) - # - Runs Windows-specific compliance tasks inside the task - # + CheckCFlags - ensures that compiler and linker flags meet Windows standards - # + CFGCheck/XFGCheck - ensures that Control Flow Guard (CFG) or - # eXtended Flow Guard (XFG) are enabled on binaries - # NOTE: CFG is deprecated and XFG isn't fully ready yet. - # NOTE2: CFG fails on an XFG'd binary - # - Brokers all security/compliance task logs to "Trust Services Automation (TSA)" (https://aka.ms/tsa) - # which is a system that maps all errors into the appropriate bug database - # template for each organization since they all vary. It should also suppress - # new bugs when one already exists for the product. - # This one is set up to go to the OS repository and use the given parameters - # to file bugs to our AzDO product path. - # If we don't use PkgESSecComp to do this for us, we need to install the TSA task - # ourselves in this pipeline to finalize data upload and bug creation. - # !!! NOTE !!! This task goes *LAST* after any other compliance tasks so it catches their logs - - task: PkgESSecComp@10 - displayName: 'Security and Compliance tasks' - inputs: - fileNewBugs: false - areaPath: 'OS\WDX\DXP\WinDev\Terminal' - teamProject: 'OS' - iterationPath: 'OS\Future' - bugTags: 'TerminalReleaseCompliance' - scanAll: true - errOnBugs: false - failOnStdErr: true - taskLogVerbosity: Diagnostic - secCompConfigFromTask: | - # Overrides default build sources directory - sourceTargetOverrideAll: $(Build.SourcesDirectory) - # Overrides default build binaries directory when "Scan all" option is specified - binariesTargetOverrideAll: $(Build.SourcesDirectory)\bin - - # Set the tools to false if they should not run in the build - tools: - - toolName: CheckCFlags - enable: true - - toolName: CFGCheck - enable: true - - toolName: Policheck - enable: false - - toolName: CredScan - enable: false - - toolName: XFGCheck - enable: false diff --git a/build/pipelines/templates/build-console-fuzzing.yml b/build/pipelines/templates/build-console-fuzzing.yml deleted file mode 100644 index e115fbb3751..00000000000 --- a/build/pipelines/templates/build-console-fuzzing.yml +++ /dev/null @@ -1,90 +0,0 @@ -parameters: - configuration: 'Fuzzing' - platform: '' - additionalBuildArguments: '' - -jobs: -- job: Build${{ parameters.platform }}${{ parameters.configuration }} - displayName: Build ${{ parameters.platform }} ${{ parameters.configuration }} - variables: - BuildConfiguration: ${{ parameters.configuration }} - BuildPlatform: ${{ parameters.platform }} - pool: - ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPoolOSS-L - ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPool-L - demands: ImageOverride -equals WinDevVS17-latest - - steps: - - checkout: self - submodules: true - clean: true - - - template: restore-nuget-steps.yml - - # The environment variable VCToolsInstallDir isn't defined on lab machines, so we need to retrieve it ourselves. - - script: | - "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -Latest -requires Microsoft.Component.MSBuild -property InstallationPath > %TEMP%\vsinstalldir.txt - set /p _VSINSTALLDIR15=<%TEMP%\vsinstalldir.txt - del %TEMP%\vsinstalldir.txt - call "%_VSINSTALLDIR15%\Common7\Tools\VsDevCmd.bat" - echo VCToolsInstallDir = %VCToolsInstallDir% - echo ##vso[task.setvariable variable=VCToolsInstallDir]%VCToolsInstallDir% - displayName: 'Retrieve VC tools directory' - - - task: VSBuild@1 - displayName: 'Build solution **\OpenConsole.sln' - inputs: - solution: '**\OpenConsole.sln' - platform: '$(BuildPlatform)' - configuration: '$(BuildConfiguration)' - msbuildArgs: "${{ parameters.additionalBuildArguments }}" - clean: true - maximumCpuCount: true - - - task: PowerShell@2 - displayName: 'Rationalize build platform' - inputs: - targetType: inline - script: | - $Arch = "$(BuildPlatform)" - If ($Arch -Eq "x86") { $Arch = "Win32" } - Write-Host "##vso[task.setvariable variable=RationalizedBuildPlatform]${Arch}" - - - task: CopyFiles@2 - displayName: 'Copy result logs to Artifacts' - inputs: - Contents: | - **/*.wtl - **/*onBuildMachineResults.xml - ${{ parameters.testLogPath }} - TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/test' - OverWrite: true - flattenFolders: true - - - task: CopyFiles@2 - displayName: 'Copy outputs needed for test runs to Artifacts' - inputs: - Contents: | - $(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.exe - $(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.dll - $(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.xml - **/Microsoft.VCLibs.*.appx - **/TestHostApp/*.exe - **/TestHostApp/*.dll - **/TestHostApp/*.xml - !**/*.pdb - !**/*.ipdb - !**/*.obj - !**/*.pch - TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/test' - OverWrite: true - flattenFolders: true - condition: succeeded() - - - task: PublishBuildArtifacts@1 - displayName: 'Publish All Build Artifacts' - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)' - ArtifactName: 'fuzzingBuildOutput' diff --git a/build/pipelines/templates/build-console-pgo.yml b/build/pipelines/templates/build-console-pgo.yml deleted file mode 100644 index 1187146ccf2..00000000000 --- a/build/pipelines/templates/build-console-pgo.yml +++ /dev/null @@ -1,55 +0,0 @@ -parameters: - configuration: 'Release' - platform: '' - additionalBuildArguments: '' - minimumExpectedTestsExecutedCount: 1 # Sanity check for minimum expected tests to be reported - rerunPassesRequiredToAvoidFailure: 5 - -jobs: -- job: Build${{ parameters.platform }}${{ parameters.configuration }} - displayName: Build ${{ parameters.platform }} ${{ parameters.configuration }} - variables: - BuildConfiguration: ${{ parameters.configuration }} - BuildPlatform: ${{ parameters.platform }} - PGOBuildMode: 'Instrument' - pool: - ${{ if eq(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPoolOSS-L - ${{ if ne(variables['System.CollectionUri'], 'https://dev.azure.com/ms/') }}: - name: WinDevPool-L - demands: ImageOverride -equals WinDevVS17-latest - - steps: - - template: build-console-steps.yml - parameters: - additionalBuildArguments: '${{ parameters.additionalBuildArguments }}' - -- template: helix-runtests-job.yml - parameters: - name: 'RunTestsInHelix' - dependsOn: Build${{ parameters.platform }}${{ parameters.configuration }} - condition: succeeded() - testSuite: 'PgoInstrumentationSuite' - taefQuery: '@IsPgo=true' - configuration: ${{ parameters.configuration }} - platform: ${{ parameters.platform }} - rerunPassesRequiredToAvoidFailure: ${{ parameters.rerunPassesRequiredToAvoidFailure }} - -- template: helix-processtestresults-job.yml - parameters: - name: 'ProcessTestResults' - pgoArtifact: 'PGO' - dependsOn: - - RunTestsInHelix - condition: succeededOrFailed() - rerunPassesRequiredToAvoidFailure: ${{ parameters.rerunPassesRequiredToAvoidFailure }} - minimumExpectedTestsExecutedCount: ${{ parameters.minimumExpectedTestsExecutedCount }} - -- template: pgo-merge-pgd-job.yml - parameters: - name: 'MergePGD' - dependsOn: - - ProcessTestResults - pgoArtifact: 'PGO' - platform: ${{ parameters.platform }} - configuration: ${{ parameters.configuration }} diff --git a/build/pipelines/templates/build-console-steps.yml b/build/pipelines/templates/build-console-steps.yml deleted file mode 100644 index 05cdf667c7c..00000000000 --- a/build/pipelines/templates/build-console-steps.yml +++ /dev/null @@ -1,130 +0,0 @@ -parameters: - additionalBuildArguments: '' - -steps: -- checkout: self - submodules: true - clean: true - fetchDepth: 1 - -- template: restore-nuget-steps.yml - -# The environment variable VCToolsInstallDir isn't defined on lab machines, so we need to retrieve it ourselves. -- script: | - "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -Latest -requires Microsoft.Component.MSBuild -property InstallationPath > %TEMP%\vsinstalldir.txt - set /p _VSINSTALLDIR15=<%TEMP%\vsinstalldir.txt - del %TEMP%\vsinstalldir.txt - call "%_VSINSTALLDIR15%\Common7\Tools\VsDevCmd.bat" - echo VCToolsInstallDir = %VCToolsInstallDir% - echo ##vso[task.setvariable variable=VCToolsInstallDir]%VCToolsInstallDir% - displayName: 'Retrieve VC tools directory' - -- task: CmdLine@1 - displayName: 'Display build machine environment variables' - inputs: - filename: 'set' - -- task: VSBuild@1 - displayName: 'Build solution **\OpenConsole.sln' - inputs: - solution: '**\OpenConsole.sln' - platform: '$(BuildPlatform)' - configuration: '$(BuildConfiguration)' - msbuildArgs: "${{ parameters.additionalBuildArguments }} /p:PGOBuildMode=$(PGOBuildMode) /bl:$(Build.SourcesDirectory)\\msbuild.binlog" - clean: true - maximumCpuCount: true - -- task: PowerShell@2 - displayName: 'Check MSIX for common regressions' - # PGO runtime needs its own CRT and it's in the package for convenience. - # That will make this script mad so skip since we're not shipping the PGO Instrumentation one anyway. - condition: ne(variables['PGOBuildMode'], 'Instrument') - inputs: - targetType: inline - script: | - $Package = Get-ChildItem -Recurse -Filter "CascadiaPackage_*.msix" - .\build\scripts\Test-WindowsTerminalPackage.ps1 -Verbose -Path $Package.FullName - -- task: powershell@2 - displayName: 'Source Index PDBs' - condition: ne(variables['PGOBuildMode'], 'Instrument') - inputs: - targetType: filePath - filePath: build\scripts\Index-Pdbs.ps1 - arguments: -SearchDir '$(Build.SourcesDirectory)' -SourceRoot '$(Build.SourcesDirectory)' -recursive -Verbose -CommitId $(Build.SourceVersion) - errorActionPreference: silentlyContinue - -- task: PowerShell@2 - displayName: 'Rationalize build platform' - inputs: - targetType: inline - script: | - $Arch = "$(BuildPlatform)" - If ($Arch -Eq "x86") { $Arch = "Win32" } - Write-Host "##vso[task.setvariable variable=RationalizedBuildPlatform]${Arch}" - -- task: CopyFiles@2 - displayName: 'Copy *.appx/*.msix to Artifacts (Non-PR builds only)' - inputs: - Contents: | - **/*.appx - **/*.msix - **/*.appxsym - !**/Microsoft.VCLibs*.appx - TargetFolder: '$(Build.ArtifactStagingDirectory)/appx' - OverWrite: true - flattenFolders: true - condition: succeeded() - -- task: CopyFiles@2 - displayName: 'Copy outputs needed for test runs to Artifacts' - inputs: - Contents: | - $(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.exe - $(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.dll - $(Build.SourcesDirectory)/bin/$(RationalizedBuildPlatform)/$(BuildConfiguration)/*.xml - **/Microsoft.VCLibs.*.appx - **/*unit.test*.dll - **/*unit.test*.manifest - **/TestHostApp/*.exe - **/TestHostApp/*.dll - **/TestHostApp/*.xml - !**/*.pdb - !**/*.ipdb - !**/*.obj - !**/*.pch - TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/$(BuildPlatform)/test' - OverWrite: true - flattenFolders: true - condition: succeeded() - -- task: PublishBuildArtifacts@1 - displayName: 'Publish All Build Artifacts' - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)' - ArtifactName: 'drop' - -- task: CopyFiles@2 - displayName: 'Copy PGO databases needed for PGO instrumentation run' - inputs: - Contents: | - **/*.pgd - TargetFolder: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/PGO/$(BuildPlatform)' - OverWrite: true - flattenFolders: true - condition: and(succeeded(), eq(variables['PGOBuildMode'], 'Instrument')) - -- task: PublishBuildArtifacts@1 - displayName: 'Publish All PGO Artifacts' - inputs: - PathtoPublish: '$(Build.ArtifactStagingDirectory)/$(BuildConfiguration)/PGO' - ArtifactName: 'PGO' - condition: and(succeeded(), eq(variables['PGOBuildMode'], 'Instrument')) - -- task: PublishBuildArtifacts@1 - displayName: 'Publish Artifact: binlog' - condition: always() - continueOnError: True - inputs: - PathtoPublish: $(Build.SourcesDirectory)\msbuild.binlog - ArtifactName: binlog-$(BuildPlatform) diff --git a/build/pipelines/templates/check-formatting.yml b/build/pipelines/templates/check-formatting.yml deleted file mode 100644 index 46abca03240..00000000000 --- a/build/pipelines/templates/check-formatting.yml +++ /dev/null @@ -1,17 +0,0 @@ - -jobs: -- job: CodeFormatCheck - displayName: Proper Code Formatting Check - pool: { vmImage: windows-2022 } - - steps: - - checkout: self - fetchDepth: 1 - submodules: false - clean: true - - - task: PowerShell@2 - displayName: 'Code Formatting Check' - inputs: - targetType: filePath - filePath: '.\build\scripts\Invoke-FormattingCheck.ps1' diff --git a/build/pipelines/templates/codenav-indexer.yml b/build/pipelines/templates/codenav-indexer.yml deleted file mode 100644 index 04e018ed2a0..00000000000 --- a/build/pipelines/templates/codenav-indexer.yml +++ /dev/null @@ -1,22 +0,0 @@ -parameters: - artifactName: 'drop' - -jobs: -- job: CodeNavIndexer - displayName: Run Github CodeNav Indexer - pool: { vmImage: windows-2019 } - - steps: - - checkout: self - fetchDepth: 1 - submodules: false - clean: true - - - task: DownloadBuildArtifacts@0 - inputs: - artifactName: ${{ parameters.artifactName }} - - - task: RichCodeNavIndexer@0 - inputs: - languages: 'cpp,csharp' - continueOnError: true diff --git a/build/pipelines/templates/console-ci-helix-job.yml b/build/pipelines/templates/console-ci-helix-job.yml deleted file mode 100644 index 07476712a02..00000000000 --- a/build/pipelines/templates/console-ci-helix-job.yml +++ /dev/null @@ -1,25 +0,0 @@ -parameters: - configuration: 'Release' - platform: '' - minimumExpectedTestsExecutedCount: 10 # Sanity check for minimum expected tests to be reported - rerunPassesRequiredToAvoidFailure: 5 - -jobs: -- template: helix-runtests-job.yml - parameters: - name: 'RunTestsInHelix' - # We're not setting dependsOn as we want to rely on the "stage" dependency above us - testSuite: 'DevTestSuite' - platform: ${{ parameters.platform }} - configuration: ${{ parameters.configuration }} - rerunPassesRequiredToAvoidFailure: ${{ parameters.rerunPassesRequiredToAvoidFailure }} - -- template: helix-processtestresults-job.yml - parameters: - dependsOn: - - RunTestsInHelix - # the default condition is succeededOrFailed(), and the "stage" condition ensures we only run as needed - platform: ${{ parameters.platform }} - configuration: ${{ parameters.configuration }} - rerunPassesRequiredToAvoidFailure: ${{ parameters.rerunPassesRequiredToAvoidFailure }} - minimumExpectedTestsExecutedCount: ${{ parameters.minimumExpectedTestsExecutedCount }} diff --git a/build/pipelines/templates/helix-createprojfile-steps.yml b/build/pipelines/templates/helix-createprojfile-steps.yml deleted file mode 100644 index 3f7dc8c0977..00000000000 --- a/build/pipelines/templates/helix-createprojfile-steps.yml +++ /dev/null @@ -1,15 +0,0 @@ -parameters: - condition: '' - testFilePath: '' - outputProjFileName: '' - testSuite: '' - taefQuery: '' - -steps: - - task: powershell@2 - displayName: 'Create ${{ parameters.outputProjFileName }}' - condition: ${{ parameters.condition }} - inputs: - targetType: filePath - filePath: build\Helix\GenerateTestProjFile.ps1 - arguments: -TestFile '${{ parameters.testFilePath }}' -OutputProjFile '$(Build.ArtifactStagingDirectory)\$(BuildConfiguration)\$(BuildPlatform)\${{ parameters.outputProjFileName }}' -JobTestSuiteName '${{ parameters.testSuite }}' -TaefPath '$(Build.SourcesDirectory)\build\Helix\packages\Microsoft.Taef.10.60.210621002\build\Binaries\x86' -TaefQuery '${{ parameters.taefQuery }}' \ No newline at end of file diff --git a/build/pipelines/templates/helix-processtestresults-job.yml b/build/pipelines/templates/helix-processtestresults-job.yml deleted file mode 100644 index bd8e967de92..00000000000 --- a/build/pipelines/templates/helix-processtestresults-job.yml +++ /dev/null @@ -1,71 +0,0 @@ -parameters: - condition: 'succeededOrFailed()' - dependsOn: '' - rerunPassesRequiredToAvoidFailure: 5 - minimumExpectedTestsExecutedCount: 10 - checkJobAttempt: false - pgoArtifact: '' - -jobs: -- job: ProcessTestResults - displayName: Process Helix Results ${{ parameters.platform }} ${{ parameters.configuration }} - condition: ${{ parameters.condition }} - dependsOn: ${{ parameters.dependsOn }} - pool: - vmImage: 'windows-2019' - timeoutInMinutes: 120 - variables: - helixOutputFolder: $(Build.SourcesDirectory)\HelixOutput - - steps: - - task: powershell@2 - displayName: 'UpdateUnreliableTests.ps1' - condition: succeededOrFailed() - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - HelixAccessToken: $(HelixApiAccessToken) - inputs: - targetType: filePath - filePath: build\Helix\UpdateUnreliableTests.ps1 - arguments: -RerunPassesRequiredToAvoidFailure '${{ parameters.rerunPassesRequiredToAvoidFailure }}' - - - task: powershell@2 - displayName: 'OutputTestResults.ps1' - condition: succeededOrFailed() - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - HelixAccessToken: $(HelixApiAccessToken) - inputs: - targetType: filePath - filePath: build\Helix\OutputTestResults.ps1 - arguments: -MinimumExpectedTestsExecutedCount '${{ parameters.minimumExpectedTestsExecutedCount }}' -CheckJobAttempt $${{ parameters.checkJobAttempt }} - - - task: powershell@2 - displayName: 'ProcessHelixFiles.ps1' - condition: succeededOrFailed() - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - HelixAccessToken: $(HelixApiAccessToken) - inputs: - targetType: filePath - filePath: build\Helix\ProcessHelixFiles.ps1 - arguments: -OutputFolder '$(helixOutputFolder)' - - - ${{if ne(parameters.pgoArtifact, '') }}: - - script: move /y $(helixOutputFolder)\PGO $(Build.ArtifactStagingDirectory) - displayName: 'Move pgc files to PGO artifact' - - - task: PublishBuildArtifacts@1 - displayName: 'Publish Helix files' - condition: succeededOrFailed() - inputs: - PathtoPublish: $(helixOutputFolder) - artifactName: drop - - - ${{if ne(parameters.pgoArtifact, '') }}: - - task: PublishBuildArtifacts@1 - displayName: 'Publish pgc files' - condition: succeededOrFailed() - inputs: - PathtoPublish: $(Build.ArtifactStagingDirectory)\PGO\Release - artifactName: ${{ parameters.pgoArtifact }} diff --git a/build/pipelines/templates/helix-runtests-job.yml b/build/pipelines/templates/helix-runtests-job.yml deleted file mode 100644 index 2036857cac8..00000000000 --- a/build/pipelines/templates/helix-runtests-job.yml +++ /dev/null @@ -1,164 +0,0 @@ -parameters: - name: 'RunTestsInHelix' - dependsOn: '' - condition: '' - testSuite: '' - # If a Pipeline runs this template more than once, this parameter should be unique per build flavor to differentiate the - # the different test runs: - helixType: 'test/devtest' - artifactName: 'drop' - maxParallel: 4 - rerunPassesRequiredToAvoidFailure: 5 - taefQuery: '' - configuration: '' - platform: '' - # if 'useBuildOutputFromBuildId' is set, we will default to using a build from this pipeline: - useBuildOutputFromPipeline: $(System.DefinitionId) - openHelixTargetQueues: 'windows.10.amd64.client21h1.open.xaml' - closedHelixTargetQueues: 'windows.10.amd64.client21h1.xaml' - -jobs: -- job: ${{ parameters.name }} - displayName: Submit Helix ${{ parameters.platform }} ${{ parameters.configuration }} - dependsOn: ${{ parameters.dependsOn }} - condition: ${{ parameters.condition }} - pool: - vmImage: 'windows-2019' - timeoutInMinutes: 120 - strategy: - maxParallel: ${{ parameters.maxParallel }} - variables: - buildConfiguration: ${{ parameters.configuration }} - buildPlatform: ${{ parameters.platform }} - openHelixTargetQueues: ${{ parameters.openHelixTargetQueues }} - closedHelixTargetQueues: ${{ parameters.closedHelixTargetQueues }} - artifactsDir: $(Build.SourcesDirectory)\Artifacts - taefPath: $(Build.SourcesDirectory)\build\Helix\packages\Microsoft.Taef.10.60.210621002\build\Binaries\$(buildPlatform) - helixCommonArgs: '/binaryLogger:$(Build.SourcesDirectory)/${{parameters.name}}.$(buildPlatform).$(buildConfiguration).binlog /p:HelixBuild=$(Build.BuildId).$(buildPlatform).$(buildConfiguration) /p:Platform=$(buildPlatform) /p:Configuration=$(buildConfiguration) /p:HelixType=${{parameters.helixType}} /p:TestSuite=${{parameters.testSuite}} /p:ProjFilesPath=$(Build.ArtifactStagingDirectory) /p:rerunPassesRequiredToAvoidFailure=${{parameters.rerunPassesRequiredToAvoidFailure}}' - - steps: - - task: CmdLine@1 - displayName: 'Display build machine environment variables' - inputs: - filename: 'set' - - - task: NuGetToolInstaller@0 - displayName: 'Use NuGet 6.3.0' - inputs: - versionSpec: 6.3.0 - - - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 - displayName: 'NuGet restore build/Helix/packages.config' - inputs: - restoreSolution: build/Helix/packages.config - feedsToUse: config - nugetConfigPath: nuget.config - restoreDirectory: packages - - - task: DownloadBuildArtifacts@0 - condition: - and(succeeded(),eq(variables['useBuildOutputFromBuildId'],'')) - inputs: - artifactName: ${{ parameters.artifactName }} - downloadPath: '$(artifactsDir)' - - - task: DownloadBuildArtifacts@0 - condition: - and(succeeded(),ne(variables['useBuildOutputFromBuildId'],'')) - inputs: - buildType: specific - buildVersionToDownload: specific - project: $(System.TeamProjectId) - pipeline: ${{ parameters.useBuildOutputFromPipeline }} - buildId: $(useBuildOutputFromBuildId) - artifactName: ${{ parameters.artifactName }} - downloadPath: '$(artifactsDir)' - - - task: CmdLine@1 - displayName: 'Display Artifact Directory payload contents' - inputs: - filename: 'dir' - arguments: '/s $(artifactsDir)' - - - task: powershell@2 - displayName: 'PrepareHelixPayload.ps1' - inputs: - targetType: filePath - filePath: build\Helix\PrepareHelixPayload.ps1 - arguments: -Platform '$(buildPlatform)' -Configuration '$(buildConfiguration)' -ArtifactName '${{ parameters.artifactName }}' - - - task: CmdLine@1 - displayName: 'Display Helix payload contents' - inputs: - filename: 'dir' - arguments: '/s $(Build.SourcesDirectory)\HelixPayload' - - - task: PowerShell@2 - displayName: 'Make artifact directories' - inputs: - targetType: inline - script: | - New-Item -ItemType Directory -Force -Path "$(Build.ArtifactStagingDirectory)\$(BuildConfiguration)\" - New-Item -ItemType Directory -Force -Path "$(Build.ArtifactStagingDirectory)\$(BuildConfiguration)\$(BuildPlatform)\" - - - template: helix-createprojfile-steps.yml - parameters: - condition: and(succeeded(),eq('${{ parameters.testSuite }}','DevTestSuite')) - testFilePath: '$(artifactsDir)\${{ parameters.artifactName }}\$(buildConfiguration)\$(buildPlatform)\Test\TerminalApp.LocalTests.dll' - outputProjFileName: 'RunTestsInHelix-TerminalAppLocalTests.proj' - testSuite: '${{ parameters.testSuite }}' - taefQuery: ${{ parameters.taefQuery }} - - - template: helix-createprojfile-steps.yml - parameters: - condition: and(succeeded(),eq('${{ parameters.testSuite }}','DevTestSuite')) - testFilePath: '$(artifactsDir)\${{ parameters.artifactName }}\$(buildConfiguration)\$(buildPlatform)\Test\SettingsModel.LocalTests.dll' - outputProjFileName: 'RunTestsInHelix-SettingsModelLocalTests.proj' - testSuite: '${{ parameters.testSuite }}' - taefQuery: ${{ parameters.taefQuery }} - - - - template: helix-createprojfile-steps.yml - parameters: - condition: and(succeeded(),eq('${{ parameters.testSuite }}','DevTestSuite')) - testFilePath: '$(artifactsDir)\${{ parameters.artifactName }}\$(buildConfiguration)\$(buildPlatform)\Test\Conhost.UIA.Tests.dll' - outputProjFileName: 'RunTestsInHelix-HostTestsUIA.proj' - testSuite: '${{ parameters.testSuite }}' - taefQuery: ${{ parameters.taefQuery }} - - - template: helix-createprojfile-steps.yml - parameters: - condition: and(succeeded(),or(eq('${{ parameters.testSuite }}','PgoInstrumentationSuite'),eq('${{ parameters.testSuite }}','DevTestSuite'))) - testFilePath: '$(artifactsDir)\${{ parameters.artifactName }}\$(buildConfiguration)\$(buildPlatform)\Test\WindowsTerminal.UIA.Tests.dll' - outputProjFileName: 'RunTestsInHelix-WindowsTerminalUIATests.proj' - testSuite: '${{ parameters.testSuite }}' - taefQuery: ${{ parameters.taefQuery }} - - - task: PublishBuildArtifacts@1 - displayName: 'Publish generated .proj files' - inputs: - PathtoPublish: $(Build.ArtifactStagingDirectory) - artifactName: ${{ parameters.artifactName }} - - - task: DotNetCoreCLI@2 - displayName: 'Run tests in Helix (open queues)' - condition: and(succeeded(),eq(variables['System.CollectionUri'],'https://dev.azure.com/ms/')) - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - inputs: - command: custom - projects: build\Helix\RunTestsInHelix.proj - custom: msbuild - arguments: '$(helixCommonArgs) /p:IsExternal=true /p:Creator=Terminal /p:HelixTargetQueues=$(openHelixTargetQueues)' - - - task: DotNetCoreCLI@2 - displayName: 'Run tests in Helix (closed queues)' - condition: and(succeeded(),ne(variables['System.CollectionUri'],'https://dev.azure.com/ms/')) - env: - SYSTEM_ACCESSTOKEN: $(System.AccessToken) - HelixAccessToken: $(HelixApiAccessToken) - inputs: - command: custom - projects: build\Helix\RunTestsInHelix.proj - custom: msbuild - arguments: '$(helixCommonArgs) /p:HelixTargetQueues=$(closedHelixTargetQueues)' diff --git a/build/pipelines/templates/pgo-merge-pgd-job.yml b/build/pipelines/templates/pgo-merge-pgd-job.yml deleted file mode 100644 index 89cf5319ccd..00000000000 --- a/build/pipelines/templates/pgo-merge-pgd-job.yml +++ /dev/null @@ -1,70 +0,0 @@ -parameters: - dependsOn: '' - pgoArtifact: PGO - platform: '' - configuration: '' - -jobs: -- job: MergePGD - dependsOn: ${{ parameters.dependsOn }} - pool: - vmImage: 'windows-2019' - variables: - artifactsPath: $(Build.SourcesDirectory)\Artifacts - pgoArtifactsPath: $(artifactsPath)\${{ parameters.pgoArtifact }} - buildPlatform: ${{ parameters.platform }} - buildConfiguration: ${{ parameters.configuration }} - - steps: - # The environment variable VCToolsInstallDir isn't defined on lab machines, so we need to retrieve it ourselves. - - script: | - "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" -Latest -requires Microsoft.Component.MSBuild -property InstallationPath > %TEMP%\vsinstalldir.txt - set /p _VSINSTALLDIR15=<%TEMP%\vsinstalldir.txt - del %TEMP%\vsinstalldir.txt - call "%_VSINSTALLDIR15%\Common7\Tools\VsDevCmd.bat" - echo VCToolsInstallDir = %VCToolsInstallDir% - echo ##vso[task.setvariable variable=VCToolsInstallDir]%VCToolsInstallDir% - displayName: 'Retrieve VC tools directory' - - - task: NuGetToolInstaller@0 - displayName: 'Use NuGet 6.3.0' - inputs: - versionSpec: 6.3.0 - - - task: NuGetAuthenticate@0 - - # In the Microsoft Azure DevOps tenant, NuGetCommand is ambiguous. - # This should be `task: NuGetCommand@2` - - task: 333b11bd-d341-40d9-afcf-b32d5ce6f23b@2 - displayName: Restore NuGet packages for extraneous build actions - inputs: - command: restore - feedsToUse: config - configPath: NuGet.config - restoreSolution: build/packages.config - restoreDirectory: '$(Build.SourcesDirectory)\packages' - - - task: DownloadBuildArtifacts@0 - inputs: - artifactName: ${{ parameters.pgoArtifact }} - downloadPath: $(artifactsPath) - - - task: MSBuild@1 - displayName: Merge counts into PGD - inputs: - solution: $(Build.SourcesDirectory)\OpenConsole.sln - platform: $(buildPlatform) - configuration: $(buildConfiguration) - msbuildArguments: '/t:MergePGOCounts /p:PGOBuildMode=Instrument /p:PGDPath=$(pgoArtifactsPath)\$(buildPlatform) /p:PGCRootPath=$(pgoArtifactsPath)\$(buildPlatform)' - - - task: CopyFiles@2 - displayName: 'Copy merged pgd to artifact staging' - inputs: - sourceFolder: $(pgoArtifactsPath) - contents: '**\$(buildPlatform)\*.pgd' - targetFolder: $(Build.ArtifactStagingDirectory) - - - task: PublishBuildArtifacts@1 - inputs: - pathToPublish: $(Build.ArtifactStagingDirectory) - artifactName: ${{ parameters.pgoArtifact }} diff --git a/build/rules/Branding.targets b/build/rules/Branding.targets index 0ce12dfca57..57216032d6f 100644 --- a/build/rules/Branding.targets +++ b/build/rules/Branding.targets @@ -1,6 +1,7 @@ + <_WTBrandingPreprocessorToken Condition="'$(WindowsTerminalBranding)'=='Canary'">WT_BRANDING_CANARY <_WTBrandingPreprocessorToken Condition="'$(WindowsTerminalBranding)'=='Preview'">WT_BRANDING_PREVIEW <_WTBrandingPreprocessorToken Condition="'$(WindowsTerminalBranding)'=='Release'">WT_BRANDING_RELEASE <_WTBrandingPreprocessorToken Condition="'$(_WTBrandingPreprocessorToken)'==''">WT_BRANDING_DEV diff --git a/build/rules/GenerateSxsManifestsFromWinmds.targets b/build/rules/GenerateSxsManifestsFromWinmds.targets index 600f9980ce0..6e17cc50dcb 100644 --- a/build/rules/GenerateSxsManifestsFromWinmds.targets +++ b/build/rules/GenerateSxsManifestsFromWinmds.targets @@ -30,7 +30,7 @@ DependsOnTargets="_ConsoleMapWinmdsToManifestFiles"> - + diff --git a/build/rules/Microsoft.UI.Xaml.Additional.targets b/build/rules/Microsoft.UI.Xaml.Additional.targets new file mode 100644 index 00000000000..dbd6eb3f35c --- /dev/null +++ b/build/rules/Microsoft.UI.Xaml.Additional.targets @@ -0,0 +1,16 @@ + + + + + + + diff --git a/build/scripts/Invoke-FormattingCheck.ps1 b/build/scripts/Invoke-FormattingCheck.ps1 index ef780b5f480..d1110943d1f 100644 --- a/build/scripts/Invoke-FormattingCheck.ps1 +++ b/build/scripts/Invoke-FormattingCheck.ps1 @@ -10,7 +10,7 @@ function Invoke-CheckBadCodeFormatting() { # returns a non-zero exit code if there are any diffs in the tracked files in the repo git diff-index --quiet HEAD -- - if ($lastExitCode -eq 1) { + if ($LASTEXITCODE -eq 1) { # Write the list of files that need updating to the log git diff-index --name-only HEAD diff --git a/build/scripts/Merge-PriFiles.ps1 b/build/scripts/Merge-PriFiles.ps1 new file mode 100644 index 00000000000..3a9985936aa --- /dev/null +++ b/build/scripts/Merge-PriFiles.ps1 @@ -0,0 +1,78 @@ +Param( + [Parameter(Mandatory, + HelpMessage="List of PRI files or XML dumps (detailed only) to merge")] + [string[]] + $Path, + + [Parameter(Mandatory, + HelpMessage="Output Path")] + [string] + $OutputPath, + + [Parameter(HelpMessage="Name of index in output file; defaults to 'Application'")] + [string] + $IndexName = "Application", + + [Parameter(HelpMessage="Path to makepri.exe")] + [ValidateScript({Test-Path $_ -Type Leaf})] + [string] + $MakePriPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\MakePri.exe" +) + +$ErrorActionPreference = 'Stop' + +$tempDir = Join-Path ([System.IO.Path]::GetTempPath()) "tmp$([Convert]::ToString((Get-Random 65535),16).PadLeft(4,'0')).tmp" +New-Item -ItemType Directory -Path $tempDir | Out-Null +$priConfig = Join-Path $tempDir "priconfig.xml" +$priListFile = Join-Path $tempDir "pri.resfiles" +$dumpListFile = Join-Path $tempDir "dump.resfiles" + +@" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +"@ | Out-File -Encoding:utf8NoBOM $priConfig + +$Path | Where { $_ -Like "*.pri" } | ForEach-Object { + Get-Item $_ | Select -Expand FullName +} | Out-File -Encoding:utf8NoBOM $priListFile + +$Path | Where { $_ -Like "*.xml" } | ForEach-Object { + Get-Item $_ | Select -Expand FullName +} | Out-File -Encoding:utf8NoBOM $dumpListFile + +& $MakePriPath new /pr $tempDir /cf $priConfig /o /in $IndexName /of $OutputPath + +Remove-Item -Recurse -Force $tempDir diff --git a/build/scripts/Merge-TerminalAndXamlResources.ps1 b/build/scripts/Merge-TerminalAndXamlResources.ps1 new file mode 100644 index 00000000000..92c8bad5565 --- /dev/null +++ b/build/scripts/Merge-TerminalAndXamlResources.ps1 @@ -0,0 +1,47 @@ +Param( + [Parameter(Mandatory, + HelpMessage="Root directory of extracted Terminal AppX")] + [string[]] + $TerminalRoot, + + [Parameter(Mandatory, + HelpMessage="Root directory of extracted Xaml AppX")] + [string[]] + $XamlRoot, + + [Parameter(Mandatory, + HelpMessage="Output Path")] + [string] + $OutputPath, + + [Parameter(HelpMessage="Path to makepri.exe")] + [ValidateScript({Test-Path $_ -Type Leaf})] + [string] + $MakePriPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\MakePri.exe" +) + +$ErrorActionPreference = 'Stop' + +$tempDir = Join-Path ([System.IO.Path]::GetTempPath()) "tmp$([Convert]::ToString((Get-Random 65535),16).PadLeft(4,'0')).tmp" +New-Item -ItemType Directory -Path $tempDir | Out-Null + +$terminalDump = Join-Path $tempDir "terminal.pri.xml" + +& $MakePriPath dump /if (Join-Path $TerminalRoot "resources.pri") /of $terminalDump /dt detailed + +Write-Verbose "Removing Microsoft.UI.Xaml node from Terminal to prevent a collision with XAML" +$terminalXMLDocument = [xml](Get-Content $terminalDump) +$resourceMap = $terminalXMLDocument.PriInfo.ResourceMap +$fileSubtree = $resourceMap.ResourceMapSubtree | Where-Object { $_.Name -eq "Files" } +$subtrees = $fileSubtree.ResourceMapSubtree +$xamlSubtreeChild = ($subtrees | Where-Object { $_.Name -eq "Microsoft.UI.Xaml" }) +if ($Null -Ne $xamlSubtreeChild) { + $null = $fileSubtree.RemoveChild($xamlSubtreeChild) + $terminalXMLDocument.Save($terminalDump) +} + +$indexName = $terminalXMLDocument.PriInfo.ResourceMap.name + +& (Join-Path $PSScriptRoot "Merge-PriFiles.ps1") -Path $terminalDump, (Join-Path $XamlRoot "resources.pri") -IndexName $indexName -OutputPath $OutputPath -MakePriPath $MakePriPath + +Remove-Item -Recurse -Force $tempDir diff --git a/build/scripts/New-AppInstallerFromTemplateAndBundle.ps1 b/build/scripts/New-AppInstallerFromTemplateAndBundle.ps1 new file mode 100644 index 00000000000..b49ad244ffb --- /dev/null +++ b/build/scripts/New-AppInstallerFromTemplateAndBundle.ps1 @@ -0,0 +1,42 @@ +[CmdletBinding()] +Param( + [Parameter(Mandatory, + HelpMessage="Path to the .msixbundle")] + [string] + $BundlePath, + + [Parameter(Mandatory, + HelpMessage="Path to the .appinstaller template")] + [string] + $AppInstallerTemplatePath, + + [string] + $AppInstallerRoot, + + [Parameter(Mandatory, + HelpMessage="Output Path")] + [string] + $OutputPath +) + +$ErrorActionPreference = "Stop" + +$sentinelFile = New-TemporaryFile +$directory = New-Item -Type Directory "$($sentinelFile.FullName)_Package" +Remove-Item $sentinelFile -Force -EA:Ignore + +$bundle = (Get-Item $BundlePath) +& tar.exe -x -f $bundle.FullName -C $directory AppxMetadata/AppxBundleManifest.xml + +$xml = [xml](Get-Content (Join-Path $directory "AppxMetadata\AppxBundleManifest.xml")) +$name = $xml.Bundle.Identity.Name +$version = $xml.Bundle.Identity.Version + +$doc = (Get-Content -ReadCount 0 $AppInstallerTemplatePath) +$doc = $doc -Replace '\$\$ROOT\$\$',$AppInstallerRoot +$doc = $doc -Replace '\$\$NAME\$\$',$name +$doc = $doc -Replace '\$\$VERSION\$\$',$version +$doc = $doc -Replace '\$\$PACKAGE\$\$',$bundle.Name +$doc | Out-File -Encoding utf8NoBOM $OutputPath + +Get-Item $OutputPath diff --git a/build/scripts/New-UnpackagedTerminalDistribution.ps1 b/build/scripts/New-UnpackagedTerminalDistribution.ps1 new file mode 100644 index 00000000000..9605f132562 --- /dev/null +++ b/build/scripts/New-UnpackagedTerminalDistribution.ps1 @@ -0,0 +1,150 @@ +[CmdletBinding(DefaultParameterSetName = 'AppX')] +Param( + [Parameter(Mandatory, HelpMessage="Path to Terminal AppX", ParameterSetName = 'AppX')] + [ValidateScript({Test-Path $_ -Type Leaf})] + [string] + $TerminalAppX, + + [Parameter(Mandatory, HelpMessage="Path to Terminal Layout Deployment", ParameterSetName='Layout')] + [ValidateScript({Test-Path $_ -Type Container})] + [string] + $TerminalLayout, + + [Parameter(Mandatory, HelpMessage="Path to Xaml AppX", ParameterSetName='AppX')] + [Parameter(Mandatory, HelpMessage="Path to Xaml AppX", ParameterSetName='Layout')] + [ValidateScript({Test-Path $_ -Type Leaf})] + [string] + $XamlAppX, + + [Parameter(HelpMessage="Output Directory", ParameterSetName='AppX')] + [Parameter(HelpMessage="Output Directory", ParameterSetName='Layout')] + [string] + $Destination = ".", + + [Parameter(HelpMessage="Path to makeappx.exe", ParameterSetName='AppX')] + [Parameter(HelpMessage="Path to makeappx.exe", ParameterSetName='Layout')] + [ValidateScript({Test-Path $_ -Type Leaf})] + [string] + $MakeAppxPath = "C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\MakeAppx.exe", + + [Parameter(HelpMessage="Include the portable mode marker file by default", ParameterSetName='AppX')] + [Parameter(HelpMessage="Include the portable mode marker file by default", ParameterSetName='Layout')] + [switch] + $PortableMode = $PSCmdlet.ParameterSetName -eq 'Layout' +) + +$filesToRemove = @("*.xml", "*.winmd", "Appx*", "Images/*Tile*", "Images/*Logo*") # Remove from Terminal +$filesToKeep = @("Microsoft.Terminal.Remoting.winmd") # ... except for these +$filesToCopyFromXaml = @("Microsoft.UI.Xaml.dll", "Microsoft.UI.Xaml") # We don't need the .winmd + +$ErrorActionPreference = 'Stop' + +If ($null -Eq (Get-Item $MakeAppxPath -EA:SilentlyContinue)) { + Write-Error "Could not find MakeAppx.exe at `"$MakeAppxPath`".`nMake sure that -MakeAppxPath points to a valid SDK." + Exit 1 +} + +$tempDir = Join-Path ([System.IO.Path]::GetTempPath()) "tmp$([Convert]::ToString((Get-Random 65535),16).PadLeft(4,'0')).tmp" +New-Item -ItemType Directory -Path $tempDir | Out-Null + +$XamlAppX = Get-Item $XamlAppX | Select-Object -Expand FullName + +######## +# Reading the AppX Manifest for preliminary info +######## + +If ($TerminalAppX) { + $appxManifestPath = Join-Path $tempDir AppxManifest.xml + & tar.exe -x -f "$TerminalAppX" -C $tempDir AppxManifest.xml +} ElseIf($TerminalLayout) { + $appxManifestPath = Join-Path $TerminalLayout AppxManifest.xml +} +$manifest = [xml](Get-Content $appxManifestPath) +$pfn = $manifest.Package.Identity.Name +$version = $manifest.Package.Identity.Version +$architecture = $manifest.Package.Identity.ProcessorArchitecture + +$distributionName = "{0}_{1}_{2}" -f ($pfn, $version, $architecture) +$terminalDir = "terminal-{0}" -f ($version) + +######## +# Unpacking Terminal and XAML +######## + +$terminalAppPath = Join-Path $tempdir $terminalDir + +If ($TerminalAppX) { + $TerminalAppX = Get-Item $TerminalAppX | Select-Object -Expand FullName + New-Item -ItemType Directory -Path $terminalAppPath | Out-Null + & $MakeAppxPath unpack /p $TerminalAppX /d $terminalAppPath /o | Out-Null + If ($LASTEXITCODE -Ne 0) { + Throw "Unpacking $TerminalAppX failed" + } +} ElseIf ($TerminalLayout) { + Copy-Item -Recurse -Path $TerminalLayout -Destination $terminalAppPath +} + +$xamlAppPath = Join-Path $tempdir "xaml" +New-Item -ItemType Directory -Path $xamlAppPath | Out-Null +& $MakeAppxPath unpack /p $XamlAppX /d $xamlAppPath /o | Out-Null +If ($LASTEXITCODE -Ne 0) { + Throw "Unpacking $XamlAppX failed" +} + +######## +# Some sanity checking +######## + +$xamlManifest = [xml](Get-Content (Join-Path $xamlAppPath "AppxManifest.xml")) +If ($xamlManifest.Package.Identity.Name -NotLike "Microsoft.UI.Xaml*") { + Throw "$XamlAppX is not a XAML package (instead, it looks like $($xamlManifest.Package.Identity.Name))" +} +If ($xamlManifest.Package.Identity.ProcessorArchitecture -Ne $architecture) { + Throw "$XamlAppX is not built for $architecture (instead, it is built for $($xamlManifest.Package.Identity.ProcessorArchitecture))" +} + +######## +# Preparation of source files +######## + +$itemsToRemove = $filesToRemove | ForEach-Object { + Get-Item (Join-Path $terminalAppPath $_) -EA:SilentlyContinue | Where-Object { + $filesToKeep -NotContains $_.Name + } +} | Sort-Object FullName -Unique +$itemsToRemove | Remove-Item -Recurse + +$filesToCopyFromXaml | ForEach-Object { + Get-Item (Join-Path $xamlAppPath $_) +} | Copy-Item -Recurse -Destination $terminalAppPath + +######## +# Resource Management +######## + +$finalTerminalPriFile = Join-Path $terminalAppPath "resources.pri" +& (Join-Path $PSScriptRoot "Merge-TerminalAndXamlResources.ps1") ` + -TerminalRoot $terminalAppPath ` + -XamlRoot $xamlAppPath ` + -OutputPath $finalTerminalPriFile ` + -Verbose:$Verbose | Out-Host + +######## +# Packaging +######## + +$portableModeMarkerFile = Join-Path $terminalAppPath ".portable" +If ($PortableMode) { + "" | Out-File $portableModeMarkerFile +} + +If ($PSCmdlet.ParameterSetName -Eq "AppX") { + # We only produce a ZIP when we're combining two AppX directories. + New-Item -ItemType Directory -Path $Destination -ErrorAction:SilentlyContinue | Out-Null + $outputZip = (Join-Path $Destination ("{0}.zip" -f ($distributionName))) + & tar -c --format=zip -f $outputZip -C $tempDir $terminalDir + Remove-Item -Recurse -Force $tempDir -EA:SilentlyContinue + Get-Item $outputZip +} ElseIf ($PSCmdlet.ParameterSetName -Eq "Layout") { + Get-Item $terminalAppPath +} diff --git a/build/scripts/Patch-ManifestsToWindowsVersion.ps1 b/build/scripts/Patch-ManifestsToWindowsVersion.ps1 deleted file mode 100644 index fe86f24fd8c..00000000000 --- a/build/scripts/Patch-ManifestsToWindowsVersion.ps1 +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT license. - -Param( - [string]$NewWindowsVersion = "10.0.22000.0" -) - -Get-ChildItem src/cascadia/CascadiaPackage -Recurse -Filter *.appxmanifest | ForEach-Object { - $xml = [xml](Get-Content $_.FullName) - $xml.Package.Dependencies.TargetDeviceFamily | Where-Object Name -Like "Windows*" | ForEach-Object { - $_.MinVersion = $NewWindowsVersion - } - $xml.Save($_.FullName) -} diff --git a/build/scripts/Run-Tests.ps1 b/build/scripts/Run-Tests.ps1 index ea69396569d..bd4cf28fc50 100644 --- a/build/scripts/Run-Tests.ps1 +++ b/build/scripts/Run-Tests.ps1 @@ -1,27 +1,37 @@ [CmdLetBinding()] Param( - [Parameter(Mandatory=$true, Position=0)][string]$MatchPattern, - [Parameter(Mandatory=$true, Position=1)][string]$Platform, - [Parameter(Mandatory=$true, Position=2)][string]$Configuration, - [Parameter(Mandatory=$false, Position=3)][string]$LogPath, - [Parameter(Mandatory=$false)][string]$Root = ".\bin\$Platform\$Configuration" + [Parameter(Mandatory=$true, Position=0)] + [string]$MatchPattern, + [Parameter(Mandatory=$true, Position=1)] + [string]$Platform, + [Parameter(Mandatory=$true, Position=2)] + [string]$Configuration, + [Parameter(Mandatory=$false, Position=3)] + [string]$LogPath, + [Parameter(Mandatory=$false)] + [string]$Root = ".\bin\$Platform\$Configuration", + [string[]]$AdditionalTaefArguments ) -$testdlls = Get-ChildItem -Path "$Root" -Recurse -Filter $MatchPattern +# Find test DLLs based on the provided root, match pattern, and recursion +$testDlls = Get-ChildItem -Path $Root -Recurse -Filter $MatchPattern +$args = @() -$args = @(); - -if ($LogPath) -{ - $args += '/enablewttlogging'; - $args += '/appendwttlogging'; - $args += "/logFile:$LogPath"; - Write-Host "Wtt Logging Enabled"; +# Check if the LogPath parameter is provided and enable WTT logging +if ($LogPath) { + $args += '/enablewttlogging' + $args += '/appendwttlogging' + $args += "/logFile:$LogPath" + Write-Host "WTT Logging Enabled" } -&"$Root\te.exe" $args $testdlls.FullName +# Invoke the te.exe executable with arguments and test DLLs +& "$Root\te.exe" $args $testDlls.FullName $AdditionalTaefArguments -if ($lastexitcode -Ne 0) { Exit $lastexitcode } +# Check the exit code of the te.exe process and exit accordingly +if ($LASTEXITCODE -ne 0) { + Exit $LASTEXITCODE +} Exit 0 diff --git a/build/scripts/Test-WindowsTerminalPackage.ps1 b/build/scripts/Test-WindowsTerminalPackage.ps1 index aa9cca6d107..b405d98c212 100644 --- a/build/scripts/Test-WindowsTerminalPackage.ps1 +++ b/build/scripts/Test-WindowsTerminalPackage.ps1 @@ -70,23 +70,24 @@ Try { $dependencies = $Manifest.Package.Dependencies.PackageDependency.Name $depsHasVclibsDesktop = ("Microsoft.VCLibs.140.00.UWPDesktop" -in $dependencies) -or ("Microsoft.VCLibs.140.00.Debug.UWPDesktop" -in $dependencies) - $depsHasVcLibsAppX = ("Microsoft.VCLibs.140.00" -in $dependencies) -or ("Microsoft.VCLibs.140.00.Debug" -in $dependencies) + $depsHasVclibsAppX = ("Microsoft.VCLibs.140.00" -in $dependencies) -or ("Microsoft.VCLibs.140.00.Debug" -in $dependencies) $filesHasVclibsDesktop = ($null -ne (Get-Item "$AppxPackageRootPath\vcruntime140.dll" -EA:Ignore)) -or ($null -ne (Get-Item "$AppxPackageRootPath\vcruntime140d.dll" -EA:Ignore)) $filesHasVclibsAppX = ($null -ne (Get-Item "$AppxPackageRootPath\vcruntime140_app.dll" -EA:Ignore)) -or ($null -ne (Get-Item "$AppxPackageRootPath\vcruntime140d_app.dll" -EA:Ignore)) - If ($depsHasVclibsDesktop -Eq $filesHasVclibsDesktop) { - $eitherBoth = if ($depsHasVclibsDesktop) { "both" } else { "neither" } - $neitherNor = if ($depsHasVclibsDesktop) { "and" } else { "nor" } - Throw "Package has $eitherBoth Dependency $neitherNor Integrated Desktop VCLibs" + If ($filesHasVclibsDesktop) { + Throw "Package contains the desktop VCLibs" } - If ($depsHasVclibsAppx -Eq $filesHasVclibsAppx) { - if ($depsHasVclibsAppx) { - # We've shipped like this forever, so downgrade to warning. - Write-Warning "Package has both Dependency and Integrated AppX VCLibs" - } else { - Throw "Package has neither Dependency nor Integrated AppX VCLibs" - } + If ($depsHasVclibsDesktop) { + Throw "Package has a dependency on the desktop VCLibs" + } + + If ($filesHasVclibsAppX) { + Throw "Package contains the AppX VCLibs" + } + + If ($depsHasVclibsAppX) { + Throw "Package has a dependency on the AppX VCLibs" } ### Check that we have an App.xbf (which is a proxy for our resources having been merged) @@ -96,11 +97,6 @@ Try { Throw "Failed to find App.xbf (TerminalApp project) in resources.pri" } - If (($null -eq (Get-Item "$AppxPackageRootPath\cpprest142_2_10.dll" -EA:Ignore)) -And - ($null -eq (Get-Item "$AppxPackageRootPath\cpprest142_2_10d.dll" -EA:Ignore))) { - Throw "Failed to find cpprest142_2_10.dll -- check the WAP packaging project" - } - If (($null -eq (Get-Item "$AppxPackageRootPath\wtd.exe" -EA:Ignore)) -And ($null -eq (Get-Item "$AppxPackageRootPath\wt.exe" -EA:Ignore))) { Throw "Failed to find wt.exe/wtd.exe -- check the WAP packaging project" diff --git a/common.openconsole.props b/common.openconsole.props index f6eb4c7c94d..c8f43e3602f 100644 --- a/common.openconsole.props +++ b/common.openconsole.props @@ -10,22 +10,4 @@ $(MSBuildThisFileDirectory) - - - 2.7.3-prerelease.220816001 - - 2.7.3 - - diff --git a/custom.props b/custom.props index 16a9b729103..6a0586fd8b2 100644 --- a/custom.props +++ b/custom.props @@ -2,22 +2,10 @@ - - $([MSBuild]::Add($(VersionBuildRevision), 1)) - true - 2022 + 2024 1 - 17 + 21 Windows Terminal diff --git a/dep/nuget/packages.config b/dep/nuget/packages.config index ffa247ab5d9..e6fd7ec3a68 100644 --- a/dep/nuget/packages.config +++ b/dep/nuget/packages.config @@ -2,16 +2,14 @@ - - - - - + + - - + + + diff --git a/doc/AddASetting.md b/doc/AddASetting.md index 2d4c414d910..59128125d71 100644 --- a/doc/AddASetting.md +++ b/doc/AddASetting.md @@ -5,10 +5,10 @@ `.../console/published/wincon.w` in the OS repo when you submit the PR. The branch won't build without it. * For now, you can update winconp.h with your consumable changes. - * Define registry name (ex `CONSOLE_REGISTRY_CURSORCOLOR`) - * Add the setting to `CONSOLE_STATE_INFO` + * Define registry name (ex: `CONSOLE_REGISTRY_CURSORCOLOR`) + * Add the setting to `CONSOLE_STATE_INFO`. * Define the property key ID and the property key itself. - - Yes, the large majority of the `DEFINE_PROPERTYKEY` defs are the same, it's only the last byte of the guid that changes + - Yes, the large majority of the `DEFINE_PROPERTYKEY` defs are the same, it's only the last byte of the guid that changes. 2. Add matching fields to Settings.hpp - Add getters, setters, the whole drill. @@ -17,9 +17,9 @@ - We need to add it to *reading and writing* the registry from the propsheet, and *reading* the link from the propsheet. Yes, that's weird, but the propsheet is smart enough to re-use ShortcutSerialization::s_SetLinkValues, but not smart enough to do the same with RegistrySerialization. - `src/propsheet/registry.cpp` - `propsheet/registry.cpp@InitRegistryValues` should initialize the default value for the property. - - `propsheet/registry.cpp@GetRegistryValues` should make sure to read the property from the registry + - `propsheet/registry.cpp@GetRegistryValues` should make sure to read the property from the registry. -4. Add the field to the propslib registry map +4. Add the field to the propslib registry map. 5. Add the value to `ShortcutSerialization.cpp` - Read the value in `ShortcutSerialization::s_PopulateV2Properties` @@ -30,11 +30,11 @@ Now, your new setting should be stored just like all the other properties. 7. Update the feature test properties to get add the setting as well - `ft_uia/Common/NativeMethods.cs@WinConP`: - - `Wtypes.PROPERTYKEY PKEY_Console_` - - `NT_CONSOLE_PROPS` + - `Wtypes.PROPERTYKEY PKEY_Console_`. + - `NT_CONSOLE_PROPS`. 8. Add the default value for the setting to `win32k-settings.man` - If the setting shouldn't default to 0 or `nullptr`, then you'll need to set the default value of the setting in `win32k-settings.man`. -9. Update `Settings::InitFromStateInfo` and `Settings::CreateConsoleStateInfo` to get/set the value in a CONSOLE_STATE_INFO appropriately +9. Update `Settings::InitFromStateInfo` and `Settings::CreateConsoleStateInfo` to get/set the value in a CONSOLE_STATE_INFO appropriately. diff --git a/doc/COOKED_READ_DATA.md b/doc/COOKED_READ_DATA.md new file mode 100644 index 00000000000..f4b463f7aa6 --- /dev/null +++ b/doc/COOKED_READ_DATA.md @@ -0,0 +1,96 @@ +# COOKED_READ_DATA, aka conhost's readline implementation + +## Test instructions + +All of the following ✅ marks must be fulfilled during manual testing: +* ASCII input +* Chinese input (中文維基百科) ❔ + * Resizing the window properly wraps/unwraps wide glyphs ❌ + Broken due to `TextBuffer::Reflow` bugs +* Surrogate pair input (🙂) ❔ + * Resizing the window properly wraps/unwraps surrogate pairs ❌ + Broken due to `TextBuffer::Reflow` bugs +* In cmd.exe + * Create 2 file: "a😊b.txt" and "a😟b.txt" + * Press tab: Autocomplete to "a😊b.txt" ✅ + * Navigate the cursor right past the "a" + * Press tab twice: Autocomplete to "a😟b.txt" ✅ +* Execute `printf(" "); gets(buffer);` in C (or equivalent) + * Press Tab, A, Ctrl+V, Tab, A ✅ + * The prompt is " A^V A" ✅ + * Cursor navigation works ✅ + * Backspacing/Deleting random parts of it works ✅ + * It never deletes the initial 4 spaces ✅ +* Backspace deletes preceding glyphs ✅ +* Ctrl+Backspace deletes preceding words ✅ +* Escape clears input ✅ +* Home navigates to start ✅ +* Ctrl+Home deletes text between cursor and start ✅ +* End navigates to end ✅ +* Ctrl+End deletes text between cursor and end ✅ +* Left navigates over previous code points ✅ +* Ctrl+Left navigates to previous word-starts ✅ +* Right and F1 navigate over next code points ✅ + * Pressing right at the end of input copies characters + from the previous command ✅ +* Ctrl+Right navigates to next word-ends ✅ +* Insert toggles overwrite mode ✅ +* Delete deletes next code point ✅ +* Up and F5 cycle through history ✅ + * Doesn't crash with no history ✅ + * Stops at first entry ✅ +* Down cycles through history ✅ + * Doesn't crash with no history ✅ + * Stops at last entry ✅ +* PageUp retrieves the oldest command ✅ +* PageDown retrieves the newest command ✅ +* F2 starts "copy to char" prompt ✅ + * Escape dismisses prompt ✅ + * Typing a character copies text from the previous command up + until that character into the current buffer (acts identical + to F3, but with automatic character search) ✅ +* F3 copies the previous command into the current buffer, + starting at the current cursor position, + for as many characters as possible ✅ + * Doesn't erase trailing text if the current buffer + is longer than the previous command ✅ + * Puts the cursor at the end of the copied text ✅ +* F4 starts "copy from char" prompt ✅ + * Escape dismisses prompt ✅ + * Erases text between the current cursor position and the + first instance of a given char (but not including it) ✅ +* F6 inserts Ctrl+Z ✅ +* F7 without modifiers starts "command list" prompt ✅ + * Escape dismisses prompt ✅ + * Minimum size of 40x10 characters ✅ + * Width expands to fit the widest history command ✅ + * Height expands up to 20 rows with longer histories ✅ + * F9 starts "command number" prompt ✅ + * Left/Right paste replace the buffer with the given command ✅ + * And put cursor at the end of the buffer ✅ + * Up/Down navigate selection through history ✅ + * Stops at start/end with <10 entries ✅ + * Stops at start/end with >20 entries ✅ + * Wide text rendering during pagination with >20 entries ✅ + * Shift+Up/Down moves history items around ✅ + * Home navigates to first entry ✅ + * End navigates to last entry ✅ + * PageUp navigates by 20 items at a time or to first ✅ + * PageDown navigates by 20 items at a time or to last ✅ +* Alt+F7 clears command history ✅ +* F8 cycles through commands that start with the same text as + the current buffer up until the current cursor position ✅ + * Doesn't crash with no history ✅ +* F9 starts "command number" prompt ✅ + * Escape dismisses prompt ✅ + * Ignores non-ASCII-decimal characters ✅ + * Allows entering between 1 and 5 digits ✅ + * Pressing Enter fetches the given command from the history ✅ +* Alt+F10 clears doskey aliases ✅ +* In cmd.exe, with an empty prompt in an empty directory: + Pressing tab produces an audible bing and prints no text ✅ +* When Narrator is enabled, in cmd.exe: + * Typing individual characters announces only + exactly each character that is being typed ✅ + * Backspacing at the end of a prompt announces + only exactly each deleted character ✅ diff --git a/doc/ConsoleHostSettings.md b/doc/ConsoleHostSettings.md index 0a4d84847b7..7eef405c2da 100644 --- a/doc/ConsoleHostSettings.md +++ b/doc/ConsoleHostSettings.md @@ -59,7 +59,7 @@ To modify settings specific to the current application, invoke the `Properties` When console applications are launched, the Windows Console Host determines which settings to use by overlaying settings from the above locations. -1. Initialize settings based on hardcoded defaults +1. Initialize settings based on hard-coded defaults 2. Overlay settings specified by the user's configured defaults 3. Overlay application-specific settings from either the registry or the shortcut file, depending on how the application was launched diff --git a/doc/Niksa.md b/doc/Niksa.md index c3f8a1fa1af..ec6af1f1463 100644 --- a/doc/Niksa.md +++ b/doc/Niksa.md @@ -27,6 +27,8 @@ I would highly recommend that Gulp convert to using PowerShell scripts and that Original Source: https://github.com/microsoft/terminal/issues/217#issuecomment-404240443 +_Addendum_: cmd.exe is the literal embodiment of [xkcd#1172]([url](https://xkcd.com/1172/)). Every change, no matter how small, will break _someone_. + ## Why is typing-to-screen performance better than every other app? I really do not mind when someone comes by and decides to tell us that we're doing a good job at something. We hear so many complaints every day that a post like this is a breath of fresh air. Thanks for your thanks! @@ -49,7 +51,7 @@ Will this UI enhancement come to other apps on Windows? Almost certainly not. Th Will we try to keep it from regressing? Yes! Right now it's sort of a manual process. We identify that something is getting slow and then we go haul out [WPR](https://docs.microsoft.com/en-us/windows-hardware/test/wpt/windows-performance-recorder) and start taking traces. We stare down the hot paths and try to reason out what is going on and then improve them. For instance, in the last cycle or two, we focused on heap allocations as a major area where we could improve our end-to-end performance, changing a ton of our code to use stack-constructed iterator-like facades over the underlying request buffer instead of translating and allocating it into a new heap space for each level of processing. -As an aside, @bitcrazed wants us to automate performance tests in some conhost specific way, but I haven't quite figured out a controlled environment to do this in yet. The Windows Engineering System runs performance tests each night that give us a coarse grained way of knowing if we messed something up for the whole operating system, and they technically offer a fine grained way for us to insert our own performance tests... but I just haven't got around to that yet. If you have an idea for a way for us to do this in an automated fashion, I'm all ears. +As an aside, @bitcrazed wants us to automate performance tests in some conhost specific way, but I haven't quite figured out a controlled environment to do this in yet. The Windows Engineering System runs performance tests each night that give us a coarse-grained way of knowing if we messed something up for the whole operating system, and they technically offer a fine-grained way for us to insert our own performance tests... but I just haven't got around to that yet. If you have an idea for a way for us to do this in an automated fashion, I'm all ears. If there's anything else you'd like to know, let me know. I could go on all day. I deleted like 15 tangents from this reply before posting it.... @@ -145,7 +147,7 @@ Our only backport successes really come from corporations with massive addressab It's also costly in terms of time, effort, and testing for us to validate a modification to a released OS. We have a mindbogglingly massive amount of automated machinery dedicated to processing and validating the things that we check in while developing the current OS builds. But it's a special costly ask to spin up some to all of those activities to validate backported fixes. We do it all the time for Patch Tuesday, but in those patches, they only pass through the minimum number of fixes required to maximize the restoration of productivity/security/revenue/etc. because every additional fix adds additional complexity and additional risk. -So from our little team working hard to make developers happy, we virtually never make the cut for servicing. We're sorry, but we hope you can understand. It's just the reality of the situation to say "nope" when people ask for a backport. In our team's ideal world, you would all be running the latest console bits everywhere everytime we make a change. But that's just not how it is today. +So from our little team working hard to make developers happy, we virtually never make the cut for servicing. We're sorry, but we hope you can understand. It's just the reality of the situation to say "nope" when people ask for a backport. In our team's ideal world, you would all be running the latest console bits everywhere every time we make a change. But that's just not how it is today. Original Source: https://github.com/microsoft/terminal/issues/279#issuecomment-439179675 diff --git a/doc/ORGANIZATION.md b/doc/ORGANIZATION.md index d220c9034e4..5f93639d099 100644 --- a/doc/ORGANIZATION.md +++ b/doc/ORGANIZATION.md @@ -32,7 +32,6 @@ * `/src/cascadia/TerminalApp` - This DLL represents the implementation of the Windows Terminal application. This includes parsing settings, hosting tabs & panes with Terminals in them, and displaying other UI elements. This DLL is almost entirely UWP-like code, and shouldn't be doing any Win32-like UI work. * `/src/cascadia/WindowsTerminal` - This EXE provides Win32 hosting for the TerminalApp. It will set up XAML islands, and is responsible for drawing the window, either as a standard window or with content in the titlebar (non-client area). * `/src/cascadia/CascadiaPackage` - This is a project for packaging the Windows Terminal and its dependencies into an .appx/.msix for deploying to the machine. - * `/src/cascadia/PublicTerminalCore` - This is a DLL wrapper for the TerminalCore and Renderer, similar to `TermControl`, which exposes some exported functions that so the Terminal can be used from C#. * `/src/cascadia/WpfTerminalControl` - A DLL implementing a WPF version of the Terminal Control. * `/src/host` – The meat of the windows console host. This includes buffer, input, output, windowing, server management, clipboard, and most interactions with the console host window that aren’t stated anywhere else. We’re trying to pull things out that are reusable into other libraries, but it’s a work in progress * `/src/host/lib` – Builds the reusable LIB copy of the host @@ -126,8 +125,6 @@ * Private calls into the Windows Window Manager to perform privileged actions related to the console process (working to eliminate) or for High DPI stuff (also working to eliminate) * `Userprivapi.cpp` * `Windowdpiapi.cpp` -* New UTF8 state machine in progress to improve Bash (and other apps) support for UTF-8 in console - * `Utf8ToWideCharParser.cpp` * Window resizing/layout/management/window messaging loops and all that other stuff that has us interact with Windows to create a visual display surface and control the user interaction entry point * `Window.cpp` * `Windowproc.cpp` diff --git a/doc/cascadia/profiles.schema.json b/doc/cascadia/profiles.schema.json index 6366468e689..7225059372a 100644 --- a/doc/cascadia/profiles.schema.json +++ b/doc/cascadia/profiles.schema.json @@ -24,6 +24,13 @@ "pattern": "^(-?\\d+)?(,\\s?(-?\\d+)?)?$", "type": "string" }, + "CSSLengthPercentage": { + "pattern": "^[+-]?\\d+(?:\\.\\d+)?(?:%|ch|pt|px)?$", + "type": [ + "string", + "null" + ] + }, "DynamicProfileSource": { "enum": [ "Windows.Terminal.Wsl", @@ -78,11 +85,53 @@ } ] }, + "BuiltinSuggestionSource": { + "type": "string", + "anyOf": [ + { + "type": "string" + }, + { + "enum": [ + "commandHistory", + "tasks", + "all" + ] + } + ] + }, + "SuggestionSource": { + "default": "all", + "description": "Either a single suggestion source, or an array of sources to concatenate. Built-in sources include `commandHistory`, `directoryHistory`, and `tasks`. The special value `all` indicates all suggestion sources should be included", + "$comment": "`tasks` and `local` are sources that would be added by the Tasks feature, as a follow-up", + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/$defs/BuiltinSuggestionSource" + }, + { + "type": "array", + "items": { + "$ref": "#/$defs/BuiltinSuggestionSource" + }, + "uniqueItems": true + } + ] + }, "AppearanceConfig": { "properties": { "colorScheme": { "description": "The name of a color scheme to use when unfocused.", - "type": "string" + "oneOf": [ + { + "$ref": "#/$defs/SchemePair" + }, + { + "type": "string" + } + ] }, "foreground": { "$ref": "#/$defs/Color", @@ -161,10 +210,6 @@ "desktopWallpaper" ] } - ], - "type": [ - "string", - "null" ] }, "backgroundImageOpacity": { @@ -229,6 +274,33 @@ "experimental.pixelShaderPath": { "description": "Use to set a path to a pixel shader to use with the Terminal when unfocused. Overrides `experimental.retroTerminalEffect`. This is an experimental feature, and its continued existence is not guaranteed.", "type": "string" + }, + "useAcrylic": { + "description": "When set to true, the window will have an acrylic material background when unfocused. When set to false, the window will have a plain, untextured background when unfocused.", + "type": "boolean" + }, + "opacity": { + "default": 100, + "description": "Sets the opacity of the window for the profile when unfocused. Accepts values from 0-100.", + "maximum": 100, + "minimum": 0, + "type": "number" + } + }, + "type": "object" + }, + "SchemePair": { + "description": "Contains both a light and dark color scheme for the Terminal to use, depending on the theme of the application.", + "properties": { + "light": { + "default": "Campbell", + "description": "Name of the scheme to use when the app is using light theme", + "type": "string" + }, + "dark": { + "default": "Campbell", + "description": "Name of the scheme to use when the app is using dark theme", + "type": "string" } }, "type": "object" @@ -292,6 +364,14 @@ } }, "additionalProperties": false + }, + "cellWidth": { + "$ref": "#/$defs/CSSLengthPercentage", + "description": "Override the width of the terminal's cells. The override works similar to CSS' letter-spacing. It defaults to the natural glyph advance width of the primary font rounded to the nearest pixel." + }, + "cellHeight": { + "$ref": "#/$defs/CSSLengthPercentage", + "description": "Override the height of the terminal's cells. The override works similar to CSS' line-height. Defaults to the sum of the natural glyph ascend, descend and line-gap of the primary font rounded to the nearest pixel. The default is usually quite close to setting this to 1.2." } }, "type": "object" @@ -310,8 +390,12 @@ }, "ShortcutActionName": { "enum": [ + "addMark", "adjustFontSize", + "adjustOpacity", + "clearAllMarks", "clearBuffer", + "clearMark", "closeOtherPanes", "closeOtherTabs", "closePane", @@ -322,6 +406,7 @@ "copy", "duplicateTab", "expandSelectionToWord", + "experimental.colorSelection", "exportBuffer", "find", "findMatch", @@ -329,62 +414,60 @@ "globalSummon", "identifyWindow", "identifyWindows", + "markMode", "moveFocus", "movePane", - "swapPane", - "markMode", "moveTab", "multipleActions", "newTab", "newWindow", "nextTab", + "openAbout", "openNewTabDropdown", "openSettings", + "openSystemMenu", "openTabColorPicker", + "openTabRenamer", "openWindowRenamer", "paste", "prevTab", - "renameTab", - "openSystemMenu", - "openTabRenamer", "quakeMode", + "quit", + "renameTab", + "renameWindow", "resetFontSize", "resizePane", - "renameWindow", + "restoreLastClosed", "scrollDown", "scrollDownPage", - "scrollUp", - "scrollUpPage", "scrollToBottom", + "scrollToMark", "scrollToTop", + "scrollUp", + "scrollUpPage", + "searchWeb", + "selectAll", "sendInput", "setColorScheme", + "setFocusMode", + "setFullScreen", + "setMaximized", "setTabColor", + "showSuggestions", "splitPane", + "swapPane", + "switchSelectionEndpoint", "switchToTab", "tabSearch", "toggleAlwaysOnTop", "toggleBlockSelection", "toggleFocusMode", - "selectAll", - "setFocusMode", - "switchSelectionEndpoint", "toggleFullscreen", - "setFullScreen", - "setMaximized", "togglePaneZoom", - "toggleSplitOrientation", "toggleReadOnlyMode", "toggleShaderEffects", + "toggleSplitOrientation", "wt", - "quit", - "adjustOpacity", - "restoreLastClosed", - "addMark", - "scrollToMark", - "clearMark", - "clearAllMarks", - "experimental.colorSelection", "unbound" ], "type": "string" @@ -539,6 +622,165 @@ }, "type": "object" }, + "NewTabMenuEntryType": { + "enum": [ + "source", + "profile", + "folder", + "separator", + "remainingProfiles", + "matchProfiles" + ] + }, + "NewTabMenuEntry": { + "properties": { + "type": { + "description": "The type of menu entry", + "$ref": "#/$defs/NewTabMenuEntryType" + } + }, + "required": [ + "type" + ], + "type": "object" + }, + "FolderEntryInlining": { + "enum": [ + "never", + "auto" + ] + }, + "FolderEntry": { + "description": "A folder entry in the new tab dropdown", + "allOf": [ + { + "$ref": "#/$defs/NewTabMenuEntry" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "folder" + }, + "name": { + "type": "string", + "default": "", + "description": "The name of the folder to show in the menu" + }, + "icon": { + "$ref": "#/$defs/Icon" + }, + "entries": { + "type": "array", + "description": "The entries to put inside this folder", + "minItems": 1, + "items": { + "$ref": "#/$defs/NewTabMenuEntry" + } + }, + "inline": { + "description": "When set to auto and the folder only has a single entry, the entry will show directly and no folder will be rendered", + "default": "never", + "$ref": "#/$defs/FolderEntryInlining" + }, + "allowEmpty": { + "description": "Whether to render a folder without entries, or to hide it", + "default": false, + "type": "boolean" + } + } + } + ] + }, + "SeparatorEntry": { + "description": "A separator in the new tab dropdown", + "allOf": [ + { + "$ref": "#/$defs/NewTabMenuEntry" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "separator" + } + } + } + ] + }, + "ProfileEntry": { + "description": "A profile in the new tab dropdown", + "allOf": [ + { + "$ref": "#/$defs/NewTabMenuEntry" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "profile" + }, + "profile": { + "type": "string", + "default": "", + "description": "The name or GUID of the profile to show in this entry" + } + } + } + ] + }, + "RemainingProfilesEntry": { + "description": "The set of profiles that are not yet explicitly included in another entry, such as the profile or source entries. This entry can be used at most one time!", + "allOf": [ + { + "$ref": "#/$defs/NewTabMenuEntry" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "remainingProfiles" + } + } + } + ] + }, + "MatchProfilesEntry": { + "description": "A set of profiles all matching the given name, source, or command line, to show in the new tab dropdown", + "allOf": [ + { + "$ref": "#/$defs/NewTabMenuEntry" + }, + { + "type": "object", + "properties": { + "type": { + "type": "string", + "const": "matchProfiles" + }, + "name": { + "type": "string", + "default": "", + "description": "The name of the profiles to match" + }, + "source": { + "type": "string", + "default": "", + "description": "The source of the profiles to match" + }, + "commandline": { + "type": "string", + "default": "", + "description": "The command line of the profiles to match" + } + } + } + ] + }, "SwitchToAdjacentTabArgs": { "oneOf": [ { @@ -555,6 +797,7 @@ ] }, "ShortcutAction": { + "type": "object", "properties": { "action": { "description": "The action to execute", @@ -563,8 +806,7 @@ }, "required": [ "action" - ], - "type": "object" + ] }, "AdjustFontSizeAction": { "description": "Arguments corresponding to an Adjust Font Size Action", @@ -573,6 +815,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -597,6 +840,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -607,6 +851,11 @@ "default": false, "description": "If true, the copied content will be copied as a single line (even if there are hard line breaks present in the text). If false, newlines persist from the selected text." }, + "dismissSelection": { + "type": "boolean", + "default": true, + "description": "If false, the copied content will be copied and the selection will not be dismissed. If true, the selection will be dismissed." + }, "copyFormatting": { "default": null, "description": "When set to `true`, the color and font formatting of selected text is also copied to your clipboard. When set to `false`, only plain text is copied to your clipboard. An array of specific formats can also be used. Supported array values include `html` and `rtf`. Plain text is always copied. Not setting this value inherits the behavior of the `copyFormatting` global setting.", @@ -633,6 +882,7 @@ "$ref": "#/$defs/NewTerminalArgs" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -649,6 +899,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -673,6 +924,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -697,6 +949,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -721,6 +974,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -745,6 +999,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -769,6 +1024,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -793,6 +1049,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -820,6 +1077,7 @@ "$ref": "#/$defs/NewTerminalArgs" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -852,6 +1110,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -889,6 +1148,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -916,6 +1176,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -937,6 +1198,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -958,6 +1220,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -982,6 +1245,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1002,6 +1266,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1022,6 +1287,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1042,6 +1308,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1066,6 +1333,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1094,6 +1362,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1122,6 +1391,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1150,6 +1420,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1174,6 +1445,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1198,6 +1470,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1221,6 +1494,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1246,6 +1520,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1267,6 +1542,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1294,6 +1570,7 @@ "$ref": "#/$defs/NewTerminalArgs" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1310,6 +1587,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1331,6 +1609,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1352,6 +1631,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1373,6 +1653,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1394,6 +1675,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1416,6 +1698,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1437,6 +1720,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1458,6 +1742,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1509,6 +1794,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1518,6 +1804,30 @@ } ] }, + "SearchWebAction": { + "description": "Search the web for selected text", + "allOf": [ + { + "$ref": "#/$defs/ShortcutAction" + }, + { + "type": "object", + "properties": { + "action": { + "type": "string", + "const": "searchWeb" + }, + "queryUrl": { + "type": "string", + "description": "URL of the web page to launch, %s is replaced with the selected text" + } + } + } + ], + "required": [ + "queryUrl" + ] + }, "AdjustOpacityAction": { "description": "Changes the opacity of the active Terminal window. If `relative` is specified, then this action will increase/decrease relative to the current opacity.", "allOf": [ @@ -1525,6 +1835,7 @@ "$ref": "#/$defs/ShortcutAction" }, { + "type": "object", "properties": { "action": { "type": "string", @@ -1546,6 +1857,193 @@ } ] }, + "ShowSuggestionsAction": { + "description": "Arguments corresponding to a Open Suggestions Action", + "allOf": [ + { + "$ref": "#/$defs/ShortcutAction" + }, + { + "type": "object", + "properties": { + "action": { + "type": "string", + "const": "showSuggestions" + }, + "source": { + "$ref": "#/$defs/SuggestionSource", + "description": "Which suggestion sources to filter." + }, + "useCommandline": { + "default": false, + "description": "When set to `true`, the current commandline the user has typed will pre-populate the filter of the Suggestions UI. This requires that the user has enabled shell integration in their shell's config. When set to false, the filter will start empty." + } + } + } + ] + }, + "ShowCloseButton": { + "enum": [ + "always", + "hover", + "never", + "activeOnly" + ], + "type": "string" + }, + "ThemeColor": { + "description": "A special kind of color for use in themes. Can be an #rrggbb color, #rrggbbaa color, or a special value. 'accent' is evaluated as the user's selected Accent color in the OS, and 'terminalBackground' will be evaluated as the background color of the active terminal pane.", + "oneOf": [ + { + "pattern": "^#[A-Fa-f0-9]{3}(?:[A-Fa-f0-9]{3}(?:[A-Fa-f0-9]{2})?)?$", + "type": "string", + "format": "color", + "default": "#000000ff" + }, + { + "const": "accent", + "type": "string" + }, + { + "const": "terminalBackground", + "type": "string" + }, + { + "type": "null" + } + ] + }, + "TabTheme": { + "additionalProperties": false, + "description": "A set of properties for customizing the appearance of the tabs", + "properties": { + "background": { + "description": "The color of a tab when it is the active tab", + "$ref": "#/$defs/ThemeColor" + }, + "unfocusedBackground": { + "description": "The color of a tab when it is not the active tab", + "$ref": "#/$defs/ThemeColor" + }, + "showCloseButton": { + "description": "Controls the visibility of the close button on the tab", + "$ref": "#/$defs/ShowCloseButton" + } + } + }, + "TabRowTheme": { + "additionalProperties": false, + "description": "A set of properties for customizing the appearance of the tab row", + "properties": { + "background": { + "description": "The color of the tab row when the window is the foreground window.", + "$ref": "#/$defs/ThemeColor" + }, + "unfocusedBackground": { + "description": "The color of the tab row when the window is inactive", + "$ref": "#/$defs/ThemeColor" + } + } + }, + "WindowTheme": { + "additionalProperties": false, + "description": "A set of properties for customizing the appearance of the window itself", + "properties": { + "applicationTheme": { + "description": "Which UI theme the Terminal should use for controls", + "enum": [ + "light", + "dark", + "system" + ], + "type": "string" + }, + "useMica": { + "description": "True if the Terminal should use a Mica backdrop for the window. This will apply underneath all controls (including the terminal panes and the titlebar)", + "type": "boolean", + "default": false + }, + "experimental.rainbowFrame": { + "description": "When enabled, the frame of the window will cycle through all the colors. Enabling this will override the `frame` and `unfocusedFrame` settings.", + "type": "boolean", + "default": false + }, + "frame": { + "description": "The color of the window frame when the window is inactive. This only works on Windows 11", + "$ref": "#/$defs/ThemeColor" + }, + "unfocusedFrame": { + "description": "The color of the window frame when the window is inactive. This only works on Windows 11", + "$ref": "#/$defs/ThemeColor" + } + } + }, + "Theme": { + "additionalProperties": false, + "description": "A set of properties for customizing the appearance of the window. This controls things like the titlebar, the tabs, the application theme.", + "properties": { + "name": { + "type": "string", + "description": "The name of the theme. This will be displayed in the settings UI.", + "not": { + "enum": [ + "light", + "dark", + "system" + ] + } + }, + "tab": { + "$ref": "#/$defs/TabTheme" + }, + "tabRow": { + "$ref": "#/$defs/TabRowTheme" + }, + "window": { + "$ref": "#/$defs/WindowTheme" + } + } + }, + "ThemePair": { + "additionalProperties": false, + "description": "A pair of Theme names, to allow the Terminal to switch theme based on the OS theme", + "type": "object", + "properties": { + "light": { + "type": "string", + "description": "The name of the theme to use when the OS is in Light theme", + "default": "light" + }, + "dark": { + "type": "string", + "description": "The name of the theme to use when the OS is in Dark theme", + "default": "dark" + } + } + }, + "NewTabMenu": { + "description": "Defines the order and structure of the 'new tab' menu. It can consist of e.g. profiles, folders, and separators.", + "type": "array", + "items": { + "oneOf": [ + { + "$ref": "#/$defs/FolderEntry" + }, + { + "$ref": "#/$defs/SeparatorEntry" + }, + { + "$ref": "#/$defs/ProfileEntry" + }, + { + "$ref": "#/$defs/MatchProfilesEntry" + }, + { + "$ref": "#/$defs/RemainingProfilesEntry" + } + ] + } + }, "Keybinding": { "additionalProperties": false, "properties": { @@ -1660,6 +2158,12 @@ { "$ref": "#/$defs/ColorSelectionAction" }, + { + "$ref": "#/$defs/SearchWebAction" + }, + { + "$ref": "#/$defs/ShowSuggestionsAction" + }, { "type": "null" } @@ -1685,16 +2189,16 @@ }, "name": { "description": "The name that will appear in the command palette. If one isn't provided, the terminal will attempt to automatically generate a name.\nIf name is a string, it will be the name of the command.\nIf name is a object, the key property of the object will be used to lookup a localized string resource for the command", - "properties": { - "key": { - "type": "string" - } - }, "type": [ "string", "object", "null" - ] + ], + "properties": { + "key": { + "type": "string" + } + } }, "iterateOn": { "type": "string", @@ -1731,6 +2235,7 @@ "Globals": { "additionalProperties": true, "description": "Properties that affect the entire window, regardless of the profile settings.", + "type": "object", "properties": { "alwaysOnTop": { "default": false, @@ -1742,6 +2247,11 @@ "description": "When set to true, tabs are always displayed. When set to false and \"showTabsInTitlebar\" is set to false, tabs only appear after opening a new tab.", "type": "boolean" }, + "compatibility.enableUnfocusedAcrylic": { + "default": true, + "description": "When set to true, unfocused windows can have acrylic instead of opaque.", + "type": "boolean" + }, "centerOnLaunch": { "default": false, "description": "When set to `true`, the terminal window will auto-center itself on the display it opens on. The terminal will use the \"initialPosition\" to determine which display to open on.", @@ -1762,6 +2272,11 @@ "description": "When set to true, the terminal will focus the pane on mouse hover.", "type": "boolean" }, + "compatibility.isolatedMode": { + "default": false, + "description": "When set to true, Terminal windows will not be able to interact with each other (including global hotkeys, tab drag/drop, running commandlines in existing windows, etc.). This is a compatibility escape hatch for users who are running into certain windowing issues.", + "type": "boolean" + }, "copyFormatting": { "default": true, "description": "When set to `true`, the color and font formatting of selected text is also copied to your clipboard. When set to `false`, only plain text is copied to your clipboard. An array of specific formats can also be used. Supported array values include `html` and `rtf`. Plain text is always copied.", @@ -1924,20 +2439,39 @@ }, "type": "array" }, + "newTabMenu": { + "$ref": "#/$defs/NewTabMenu" + }, "language": { "default": "", "description": "Sets an override for the app's preferred language, expressed as a BCP-47 language tag like en-US.", "type": "string" }, "theme": { - "default": "system", - "description": "Sets the theme of the application. The special value \"system\" refers to the active Windows system theme.", - "enum": [ - "light", - "dark", - "system" - ], - "type": "string" + "default": "dark", + "description": "Sets the theme of the application. This value should be the name of one of the themes defined in `themes`. The Terminal also includes the themes `dark`, `light`, and `system`.", + "anyOf": [ + { + "type": "string" + }, + { + "enum": [ + "dark", + "light", + "system" + ] + }, + { + "$ref": "#/$defs/ThemePair" + } + ] + }, + "themes": { + "description": "The list of available themes", + "items": { + "$ref": "#/$defs/Theme" + }, + "type": "array" }, "showTabsInTitlebar": { "default": true, @@ -2036,12 +2570,12 @@ }, "required": [ "defaultProfile" - ], - "type": "object" + ] }, "Profile": { "description": "Properties specific to a unique profile.", "additionalProperties": false, + "type": "object", "properties": { "acrylicOpacity": { "default": 0.5, @@ -2070,6 +2604,11 @@ "null" ] }, + "compatibility.reloadEnvironmentVariables": { + "default": true, + "description": "When set to true, when opening a new tab or pane it will get reloaded environment variables.", + "type": "boolean" + }, "unfocusedAppearance": { "$ref": "#/$defs/AppearanceConfig", "description": "Sets the appearance of the terminal when it is unfocused.", @@ -2088,7 +2627,7 @@ }, "backgroundImage": { "description": "Sets the file location of the image to draw over the window background.", - "oneOf": [ + "anyOf": [ { "type": [ "string", @@ -2100,10 +2639,6 @@ "desktopWallpaper" ] } - ], - "type": [ - "string", - "null" ] }, "backgroundImageAlignment": { @@ -2170,7 +2705,14 @@ "colorScheme": { "default": "Campbell", "description": "Name of the terminal color scheme to use. Color schemes are defined under \"schemes\".", - "type": "string" + "oneOf": [ + { + "$ref": "#/$defs/SchemePair" + }, + { + "type": "string" + } + ] }, "commandline": { "description": "Executable used in the profile.", @@ -2215,6 +2757,13 @@ "default": false, "description": "When true, this profile should always open in an elevated context. If the window isn't running as an Administrator, then a new elevated window will be created." }, + "environment": { + "description": "Key-value pairs representing environment variables to set. Environment variable names are not case sensitive. You can reference existing environment variable names by enclosing them in literal percent characters (e.g. %PATH%).", + "type": "object", + "additionalProperties": { + "type": "string" + } + }, "experimental.autoMarkPrompts": { "default": false, "description": "When set to true, prompts will automatically be marked.", @@ -2233,15 +2782,15 @@ "description": "When set to true, marks added to the buffer via the addMark action will appear on the scrollbar.", "type": "boolean" }, + "experimental.repositionCursorWithMouse": { + "default": false, + "description": "When set to true, you can move the text cursor by clicking with the mouse on the current commandline. This is an experimental feature - there are lots of edge cases where this will not work as expected.", + "type": "boolean" + }, "experimental.pixelShaderPath": { "description": "Use to set a path to a pixel shader to use with the Terminal. Overrides `experimental.retroTerminalEffect`. This is an experimental feature, and its continued existence is not guaranteed.", "type": "string" }, - "useAtlasEngine": { - "description": "Windows Terminal 1.16 and later ship with a new, performant text renderer. Set this to false to revert back to the old text renderer.", - "type": "boolean", - "default": true - }, "fontFace": { "default": "Cascadia Mono", "description": "[deprecated] Define 'face' within the 'font' object instead.", @@ -2396,7 +2945,10 @@ }, "startingDirectory": { "description": "The directory the shell starts in when it is loaded.", - "type": "string" + "type": [ + "string", + "null" + ] }, "suppressApplicationTitle": { "description": "When set to true, tabTitle overrides the default title of the tab and any title change messages from the application will be suppressed. When set to false, tabTitle behaves as normal.", @@ -2423,8 +2975,7 @@ "description": "When set to true, the window will have an acrylic material background. When set to false, the window will have a plain, untextured background.", "type": "boolean" } - }, - "type": "object" + } }, "ProfileList": { "description": "A list of profiles and the properties specific to each.", @@ -2439,6 +2990,7 @@ }, "ProfilesObject": { "description": "A list of profiles and default settings that apply to all of them", + "type": "object", "properties": { "list": { "$ref": "#/$defs/ProfileList" @@ -2447,12 +2999,12 @@ "description": "The default settings that apply to every profile.", "$ref": "#/$defs/Profile" } - }, - "type": "object" + } }, "SchemeList": { "description": "Properties are specific to each color scheme. ColorTool is a great tool you can use to create and explore new color schemes. All colors use hex color format.", "items": { + "type": "object", "additionalProperties": false, "properties": { "name": { @@ -2541,8 +3093,7 @@ "$ref": "#/$defs/Color", "description": "Sets the color used as ANSI yellow." } - }, - "type": "object" + } }, "type": "array" } @@ -2552,6 +3103,7 @@ "$ref": "#/$defs/Globals" }, { + "type": "object", "additionalItems": true, "properties": { "profiles": { diff --git a/doc/color_nudging.html b/doc/color_nudging.html new file mode 100644 index 00000000000..cfbbc4bd11e --- /dev/null +++ b/doc/color_nudging.html @@ -0,0 +1,235 @@ + + + + + Perceptual Color Nudging + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + +
InputWCAG21:
APCA:
ΔE2000
(ConEmu)
WCAG21:
APCA:
ΔEOKWCAG21:
APCA:
+
+
+

Input

+
猫
+
猫
+
猫
+
猫
+
猫
+
猫
+
猫
+
+
+

ΔE2000 (ConEmu)

+
猫
+
猫
+
猫
+
猫
+
猫
+
猫
+
猫
+
+
+

ΔEOK

+
猫
+
猫
+
猫
+
猫
+
猫
+
猫
+
猫
+
+ + + + diff --git a/doc/roadmap-2022.md b/doc/roadmap-2022.md index eab75a0e9b2..923ed00bf82 100644 --- a/doc/roadmap-2022.md +++ b/doc/roadmap-2022.md @@ -1,5 +1,9 @@ # Terminal 2022 Roadmap +> **NOTE** +> +> This document has been superseded by the [Terminal 2023 Roadmap]. Please refer to that document for the updated roadmap. + ## Overview This document outlines the roadmap of features we're planning for the Windows Terminal during 2022. This serves as a successor to the [Terminal v2 Roadmap], to reflect changes to our planning going forward. @@ -111,7 +115,7 @@ Incoming issues/asks/etc. are triaged several times a week, labeled appropriatel [Up Next]: https://github.com/microsoft/terminal/milestone/37 [Backlog]: https://github.com/microsoft/terminal/milestone/45 -[Terminal v2 Roadmap]: https://github.com/microsoft/terminal/tree/main/doc/terminal-v2-roadmap.md +[Terminal v2 Roadmap]: ./terminal-v2-roadmap.md [Windows Terminal Preview 1.2 Release]: https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-2-release/ [Windows Terminal Preview 1.3 Release]: https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-3-release/ @@ -126,3 +130,5 @@ Incoming issues/asks/etc. are triaged several times a week, labeled appropriatel [Windows Terminal Preview 1.12 Release]: https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-12-release/ [Windows Terminal Preview 1.13 Release]: https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-13-release/ [Windows Terminal Preview 1.14 Release]: https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-14-release/ + +[Terminal 2023 Roadmap]: ./roadmap-2023.md diff --git a/doc/roadmap-2023.md b/doc/roadmap-2023.md new file mode 100644 index 00000000000..33616a59890 --- /dev/null +++ b/doc/roadmap-2023.md @@ -0,0 +1,76 @@ +# Terminal 2023 Roadmap + +## Overview + +This document outlines the roadmap of features we're planning for the Windows Terminal during 2023. This serves as a successor to the [2022 Roadmap], to reflect changes to our planning going forward. + +## Release cadence + +We've settled on a roughly quarterly release cycle - about once every three months. In May we released [Terminal 1.18]. We're targeting 1.19 for sometime in late September, and 1.20 likely in early January 2024. (These timelines are rough estimates, not strict rules. For example, 1.18's release was pushed back slightly to better align with Build 2023.) + +New features will go into [Windows Terminal Preview](https://aka.ms/terminal-preview) first. Typically, one release after they've been in Preview, those features will move into [Windows Terminal](https://aka.ms/terminal) ("Terminal Stable"). In the case of some more risky or experimental features, we might hold them to only Preview builds for an extended period[^1]. + + +| Quarter | Date | Release Version | Preview Release Blog Post | +| --------|------------|---------------- | ------------------------- | +| CY23 Q1 | 2023-01-24 | [Terminal 1.17] | [Windows Terminal Preview 1.17 Release] | +| CY23 Q2 | 2023-05-23 | [Terminal 1.18] | [Windows Terminal Preview 1.18 Release] | +| CY23 Q3 | | [Terminal 1.19] | [Windows Terminal Preview 1.19 Release] | +| CY23 Q4 | | [Terminal 1.20] | [Windows Terminal Preview 1.20 Release] | + +Within a single milestone, we typically reserve the last month as "bake time", to polish off bugfixes and get the release ready to ship. In this last month, we'll likely slow down our ingestion of community PRs just to stabilize what's already in `main`. For example, a given release might look like: + +```mermaid +gantt + title Proposed Terminal Releases 1.14-1.18 + dateFormat YYYY-MM-DD + axisFormat %d %b + section Terminal 1.18 + Lock down & bake :l18, 2023-05-09 , 2w + Release 1.18 :milestone, 2023-05-23, 0 + 1.18 becomes Stable :milestone, after l19, 0 + section Terminal 1.19 + Features :f19, after l18, 10w + Bugfix :b19, after f19 , 4w + Lock down & bake :l19, after b19 , 2w + Release 1.19 :milestone, after l19, 0 +``` + +_informative, not normative_ + +## Up next in the Terminal + +### Terminal 1.19 + +* Canary builds. Nightly builds of the Terminal from `main`. More unstable, but quicker access to experimental features. +* Terminal AI. While this will only be shipping in Canary builds to begin with, the v0 implementation will be available roughly at the same time as 1.19. +* The Suggestions UI. This is the starting point for shell completions [#3121], tasks [#1595], and probably Terminal AI at some point too. +* Unicode input for `cmd.exe` (and any other console app using "cooked reads"). See [#15567] +* Miscellaneous performance improvements. Conhost should be a _lot_ faster now. +* Broadcast input mode, for sending text to multiple panes at once. + +## Team member "north stars" + +For a more fluid take on what each of the team's personal goals are, head on over to [Core team North Stars]. This has a list of more long-term goals that each team member is working towards, but not things that are necessarily committed work. + + +[^1]: A conclusive list of these features can be found at [../src/features.xml](../src/features.xml). Note that this is a raw XML doc used to light up specific parts of the codebase, and not something authored for human consumption. + +[2022 Roadmap]: ./roadmap-2022.md + +[Terminal 1.17]: https://github.com/microsoft/terminal/releases/tag/v1.17.1023 +[Terminal 1.18]: https://github.com/microsoft/terminal/releases/tag/v1.18.1462.0 +[Windows Terminal Preview 1.17 Release]: https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-17-release/ +[Windows Terminal Preview 1.18 Release]: https://devblogs.microsoft.com/commandline/windows-terminal-preview-1-18-release/ + +[@DHowett]: https://github.com/DHowett +[@zadjii-msft]: https://github.com/zadjii-msft +[@lhecker]: https://github.com/lhecker +[@carlos-zamora]: https://github.com/carlos-zamora +[@PankajBhojwani]: https://github.com/PankajBhojwani + +[Core team North Stars]: https://github.com/microsoft/terminal/wiki/Core-team-North-Stars + +[#1595]: https://github.com/microsoft/terminal/issues/1595 +[#3121]: https://github.com/microsoft/terminal/issues/3121 +[#15567]: https://github.com/microsoft/terminal/issues/15567 diff --git a/doc/specs/#11000 - Marks/Shell-Integration-Marks.md b/doc/specs/#11000 - Marks/Shell-Integration-Marks.md new file mode 100644 index 00000000000..1d81157ea99 --- /dev/null +++ b/doc/specs/#11000 - Marks/Shell-Integration-Marks.md @@ -0,0 +1,499 @@ +--- +author: Mike Griese +created on: 2022-03-28 +last updated: 2023-07-19 +issue id: 11000, 1527, 6232 +--- + +##### [Original issue: [#1527]] [experimental PR [#12948]] [remaining marks [#14341]] + +# Windows Terminal - Shell Integration (Marks) + +## Abstract + +_"Shell integration" refers to a broad category of ways by which a commandline +shell can drive richer integration with the terminal. This spec in particular is +most concerned with "marks" and other semantic markup of the buffer._ + +Marks are a new buffer-side feature that allow the commandline application or +user to add a bit of metadata to a range of text. This can be used for marking a +region of text as a prompt, marking a command as succeeded or failed, quickly +marking errors in the output. These marks can then be exposed to the user as +pips on the scrollbar, or as icons in the margins. Additionally, the user can +quickly scroll between different marks, to allow easy navigation between +important information in the buffer. + +Marks in the Windows Terminal are a combination of functionality from a variety +of different terminal emulators. "Marks" attempts to unify these different, but +related pieces of functionality. + +## Background + +There's a large amount of prior art on this subject. I've attempted to collect +as much as possible in the ["Relevant external docs"](#Relevant-external-docs) +section below. "Marks" have been used in different scenarios by different +emulators for different purposes. The common thread running between them of +marking a region of text in the buffer with a special meaning. + +* iTerm2, ConEmu, FinalTerm et.al. support emitting a VT sequence to indicate + that a line is a "prompt" line. This is often used for quick navigation + between these prompts. +* FinalTerm (and xterm.js) also support marking up more than just the prompt. + They go so far as to differentiate the start/end of the prompt, the start of + the commandline input, and the start/end of the command output. + `FTCS_COMMAND_FINISHED` is even designed to include metadata indicating + whether a command succeeded or failed. +* Additionally, Terminal.app allows users to "bookmark" lines via the UI. That + allows users to quickly come back to something they feel is important. +* Consider also editors like Visual Studio. VS also uses little marks on the + scrollbar to indicate where other matches are for whatever the given search + term is. + +### "Elevator" pitch + +The Terminal provides a way for command line shells to semantically mark parts +of the command-line output. By marking up parts of the output, the Terminal can +provide richer experiences. The Terminal will know where each command starts and +stops, what the actual command was and what the output of that command is. This +allows the terminal to expose quick actions for: + +* Quickly navigating the history by scrolling between commands +* Re-running a previous command in the history +* Copying all the output of a single command +* A visual indicator to separate out one command-line from the next, for quicker + mental parsing of the output of the command-line. +* Collapsing the output of a command, as to reduce noise +* Visual indicators that highlight commands that succeeded or failed. +* Jumping to previously used directories + +### User Stories + +This is a bit of a unusual section, as this feature was already partially +implemented when this spec was written. + +Story | Size | Description +--|-----------|-- +A | ✅ Done | The user can use mark each prompt and have a mark displayed on the scrollbar +B | ✅ Done | The user can perform an action to scroll between marks +C | ✅ Done | The user can manually add marks to the buffer +D | ✅ Done | The shell can emit different marks to differentiate between prompt, command, and output +E | ✅ Done | Clearing the buffer clears marks +F | 🐣 Crawl | Marks stay in the same place you'd expect after resizing the buffer. +G | ✅ Done | Users can perform an action to select the previous command's output +H | 🚶 Walk | The find dialog can display marks on the scrollbar indicating the position of search matches +I | 🏃‍♂️ Run | The terminal can display icons in the gutter, with quick actions for that command (re-run, copy output, etc) +J | 🏃‍♂️ Run | The terminal can display a faint horizontal separator between commands in the buffer. +K | 🚀 Sprint | The terminal can "collapse" content between two marks. +L | 🚀 Sprint | The terminal can display a sticky header above the control which displays the most recent command +M | 🚀 Sprint | The user can open a dialog to manually bookmark a line with a custom comment + +## Solution Design + +### Supported VT sequences + +* [x] iTerm2's OSC `SetMark` (in [#12948]) +* [x] FinalTerm prompt markup sequences + - [x] **FTCS_PROMPT** was added in [#13163] + - [x] The rest in [#14341] +* [ ] additionally, VsCode's FinalTerm prompt markup variant, `OSC 663` +* [ ] [ConEmu's + `OSC9;12`](https://conemu.github.io/en/AnsiEscapeCodes.html#ConEmu_specific_OSC) +* [ ] Any custom OSC we may want to author ourselves. + +The FinalTerm prompt sequences are probably the most complicated version of all +these, so it's important to give these a special callout. Almost all the other +VT sequences are roughly equivalent to **FTCS_PROMPT**. The xterm.js / VsCode +version has additional cases, that they ironically added to work around conpty +not understanding these sequences originally. + +#### FinalTerm sequences + +The relevant FinalTerm sequences for marking up the prompt are as follows. + + +![image](FTCS-diagram.png) + +* **FTCS_PROMPT**: `OSC 133 ; A ST` + - The start of a prompt. Internally, this sets a marker in the buffer + indicating we started a prompt at the current cursor position, and that + marker will be used when we get a **FTCS_COMMAND_START** +* **FTCS_COMMAND_START**: `OSC 133 ; B ST` + - The start of a commandline (READ: the end of the prompt). When it follows a + **FTCS_PROMPT**, it creates a mark in the buffer from the location of the + **FTCS_PROMPT** to the current cursor position, with the category of + `prompt` +* **FTCS_COMMAND_EXECUTED**: `OSC 133 ; C ST` + - The start of the command output / the end of the commandline. +* **FTCS_COMMAND_FINISHED**: `OSC 133 ; D ; [Ps] ST` + - the end of a command. + +Same deal for the **FTCS_COMMAND_EXECUTED**/**FTCS_COMMAND_FINISHED** ones. +**FTCS_COMMAND_EXECUTED** does nothing until we get a **FTCS_COMMAND_FINISHED**, +and the `[Ps]` parameter determines the category. + - `[Ps] == 0`: success + - anything else: error + +This whole sequence will get turned into a single mark. + +When we get the **FTCS_COMMAND_FINISHED**, set the category of the prompt mark +that preceded it, so that the `prompt` becomes an `error` or a `success`. + + +### Buffer implementation + +In the initial PR ([#12948]), marks were stored simply as a `vector`, +where a mark had a start and end point. These wouldn't reflow on resize, and +didn't support all of the FTCS sequences. + +There's ultimately three types of region here we need to mark: +* The prompt (starting from A) +* the command (starting from B) +* the output (starting from C) + +That intuitively feels a bit like a text attribute almost. Additionally, the +prompt should be connected to its subsequent command and output, s.t. we can +* Select command output +* re-run command + +easily. Supposedly, we could do this by iterating through the whole buffer to +find the previous/next {whatever}[[1](#footnote-1)]. Additionally, the prompt +needs to be able to contain the status / category, and a `133;D` needs to be +able to change the category of the previous prompt/command. + +If we instead do a single mark for each command, from `133;A` to `133;A`, and +have sub-points for elements within the command +* `133;A` starts a mark on the current line, at the current position. +* `133;B` sets the end of the mark to the current position. +* `133;C` updates the mark's `commandStart` to the current end, then sets the + end of the mark to the current position. +* `133;D` updates the mark's `outputStart` to the current end, then sets the end + of the mark to the current position. It also updates the category of the mark, + if needed. + +Each command then only shows up as a single mark on the scrollbar. Jumping +between commands is easy, `scrollToMark` operates on `mark.start`, which is +where the prompt started. "Bookmarks", i.e. things started by the user wouldn't +have `commandStart` or `outputStart` in them. Getting the text of the command, +of the output is easy - it's just the text between sub-points. + +Reflow still sucks though - we'd need to basically iterate over all the marks as +we're reflowing, to make sure we put them into the right place in the new +buffer. This is annoying and tedious, but shouldn't realistically be a +performance problem. + +#### Cmd.exe considerations + +`cmd.exe` is generally a pretty bad shell, and doesn't have a lot of the same +hooks that other shells do, that might allow for us to emit the +**FTCS_COMMAND_EXECUTED** sequence. However, cmd.exe also doesn't allow +multiline prompts, so we can be relatively certain that when the user presses +enter, that's the end of the prompt. We will treat the +`autoMarkPrompts` setting (which auto-marks enter) as the _end of the +prompt_. That would at least allow cmd.exe to emit a {command finished}{prompt +start}{prompt...}{command start} in the prompt, and have us add the command +executed. It is not perfect (we wouldn't be able to get error information), but +it does work well enough. + +```cmd +PROMPT $e]133;D$e\$e]133;A$e\$e]9;9;$P$e\%PROMPT%$e]133;B$e\ +``` + +## Settings proposals + +The below are the proposed additions to the settings for supporting marks and +interacting with them. Some of these have already been added as experimental +settings - these would be promoted to no longer be experimental. + +Many of the sub-points on these settings are definitely "Future Consideration" +level settings. For example, the `scrollToMark` `"highlight"` property. That one +is certainly not something we need to ship with. + +### Actions + +In addition to driving marks via the output, we will also want to support adding +marks manually. These can be thought of like "bookmarks" - a user indicated +region that means something to the user. + +* [ ] `addMark`: add a mark to the buffer. If there's a selection, place the + mark covering at the selection. Otherwise, place the mark on the cursor row. + - [x] `color`: a color for the scrollbar mark. (in [#12948]) + - [ ] `category`: one of `{"prompt", "error", "warning", "success", "info"}` +* [ ] `scrollToMark` + - [x] `direction`: `["first", "previous", "next", "last"]` (in [#12948]) + - [ ] `category`: `flags({categories}...)`, default `"all"`. Only scroll to + one of the categories specified (e.g. only scroll to the previous error, + only the previous prompt, or just any mark) + - [ ] [#13449] - `center` or some other setting that controls how the mark is scrolled in. + - Maybe `top` (current) /`center` (as proposed) /`nearestEdge` (when + scrolling down, put the mark at the bottom line of viewport , up -> top + line)? + - [ ] [#13455] - `highlight`: `bool`, default true. Display a temporary + highlight around the mark when scrolling to it. ("Highlight" != "select") + - If the mark has prompt/command/output sections, only select the prompt and command. + - If the mark has zero width (i.e. the user just wanted to bookmark a line), + then highlight the entire row. +* [x] `clearMark`: Remove any marks in the selected region (or at the cursor + position) (in [#12948]) +* [x] `clearAllMarks`: Remove all the marks from the buffer. (in [#12948]) + + +#### Selecting commands & output + +_Inspired by a long weekend of manually copying .csv output from the Terminal to +a spreadsheet, only to discover that we rejected [#4588] some years ago._ + +* [x] `selectCommand(direction=[prev, next])`: Starting at the active selection + anchor, (or the cursor if there's no selection), select the command that + starts before/after this point (exclusive). Probably shouldn't wrap around + the buffer. + * Since this will create a selection including the start of the command, + performing this again will select the _next_ command (in whatever + direction). +* [x] `selectOutput(direction=[prev, next])`: same as above, but with command outputs. + +A convenient workflow might be a `multipleActions([selectOutput(prev), +copy()])`, to quickly select the previous commands output. + +### Per-profile settings + +* [x] `autoMarkPrompts`: `bool`, default `false`. (in [#12948]) +* [ ] `showFindMatchesOnScrollbar`: `bool`, default `true`. +* [ ] `showMarksOnScrollbar`: `bool` or `flags({categories}...)` + * As an example: `"showMarksOnScrollbar": ["error", "success"]`). + * Controls if marks should be displayed on the scrollbar. + * If `true`/`"all"`, then all marks are displayed. + * If `false`/`"none"`, then no marks are displayed. + * If a set of categories are provided, only display marks from those categories. + * [x] the bool version is (in [#12948]) + * [ ] The `flags({categories}...)` version is not done yet. +* [ ] `showGutterIcons`, for displaying gutter icons. + +## UX Design + +An example of what colored marks look like: + +![Select the entire output of a command](https://user-images.githubusercontent.com/18356694/207696859-a227abe2-ccd4-4b81-8a2c-8a22219cd0dd.gif) + +This gif demos both prompt marks and marks for search results: + +![](https://user-images.githubusercontent.com/18356694/191330278-3f6bc207-1bd5-4ebd-bb0e-1f84b0170f49.gif) + + +### Gutter icons + +![](vscode-shell-integration-gutter-mark.png) +_An example of what the icons in the VsCode gutter look like_ + +### Multiple marks on the same line + +When it comes to displaying marks on the scrollbar, or in the margins, the +relative priority of these marks matters. Marks are given the following +priority, with errors being the highest priority. +* Error +* Warning +* Success +* Prompt +* Info (default) + +## Work needed to get marks to v1 + +* [x] Clearing the screen leaves marks behind + * [x] Make sure `ED2` works to clear/move marks + * [x] Same with `ED3` + * [x] Same with `cls` / `Clear-Host` + * [x] Clear Buffer action too. +* [X] Circling doesn't update scrollbar + * I think this was fixed in [#14341], or in [#14045] +* [ ] Resizing / reflowing marks +* [x] marks should be stored in the `TextBuffer` + +## Future Considerations +* adding a timestamp for when a line was marked? +* adding a comment to the mark. How do we display that comment? a TeachingTip on + the scrollbar maybe (actually that's a cool idea) +* adding a shape to the mark? Terminal.app marks prompt lines with brackets in + the margins +* Marks are currently just displayed as "last one in wins", they should have a + real sort order +* Should the height of a mark on the scrollbar be dependent on font size & + buffer height? I think I've got it set to like, a static 2dip, but maybe it + should represent the actual height of the row (down to a min 1dip) +* [#13455] - highlight a mark when scrolled to with the `scrollToMark` action. + This is left as a future consideration to figure out what kind of UI we want + here. Do we want to highlight + - the prompt? + - the whole row of the prompt? + - the prompt and the command? + - The whole prompt & command & output? +* an `addBookmark` action: This one's basically just `addMark`, but opens a prompt + (like the window renamer) to add some text as a comment. Automatically + populated with the selected text (if there was some). + - A dedicated transient pane for displaying non-terminal content might be + useful for such a thing. + - This might just make more sense as a parameter to `addMark`. +* Other ideas for `addMark` parameters: + - `icon`: This would require us to better figure out how we display gutter + icons. This would probably be like, a _shape_ rather than an arbitrary + image. + - `note`: a note to stick on the mark, as a comment. Might be more valuable + with something like `addBookmark`. + +### Gutter icons + +VsCode implements a set of gutter icons to the left of the buffer lines, to +provide a UI element for exposing some quick actions to perform, powered by +shell integration. + +Gutter icons don't need to implement app-level actions at all. They _should_ be +part of the control. At least, part of the UWP `TermControl`. These are some +basic "actions" we could add to that menu. Since these are all attached to a +mark anyways, we already know what mark the user interacted with, and where the +start/end already is. +* Copy command +* Copy output +* Re-run command +* Save as task +* Explain this (for errors) + +To allow comments in marks (ala "bookmarks"), we can use +the gutter flyout to display the comment, and have the tooltip display that +comment. + +This is being left as a future consideration for now. We need to really sit and +consider what the UX is like for this. +* Do we just stick the gutter icons in the margin/padding? +* Have it be a separate space in the "buffer" + - If it's in the buffer itself, we can render it with the renderer, which by + all accounts, we probably should. + +### Edge cases where these might not work as expected + +Much of the benefits of shell integration come from literal buffer text parsing. +This can lead to some rough edge cases, such as: + +* the user presses Ctrl+VEscape to input an ESC character + and the shell displays it as `^[` +* the user presses Ctrl+VCtrl+J to input an LF character + and the shell displays it as a line break +* the user presses Enter within a quoted string and the shell + displays a continuation prompt +* the user types a command including an exclamation point, and the shell invokes + history expansion and echoes the result of expansion before it runs the + command +* The user has a prompt with a right-aligned status, ala + ![](https://user-images.githubusercontent.com/189190/254475719-5007df07-6cc3-42e8-baf7-2572579eb2b9.png) + +In these cases, the effects of shell integration will likely not work as +intended. There are various possible solutions that are being explored. We might +want to in the future also use [VsCode's extension to the FTCS sequences] to +enable the shell to tell the terminal the literal resulting commandline. + +There's been [other proposals] to extend shell integration features as well. + +### Rejected ideas + +There was originally some discussion as to whether this is a design that should +be unified with generic pattern matchers. Something like the URL detection, +which identifies part of the buffer and then "marks" it. Prototypes for both of +these features are going in very different directions, however. Likely best to +leave them separate. + +## Resources + +### Other related issues + +Not necessarily marks related, but could happily leverage this functionality. + +* [#5916] and [#12366], which are likely to be combined into a single thread + - Imagine a trigger that automatically detects `error:.*` and then marks the line +* [#9583] + - Imagine selecting some text, colorizing & marking it all at once + - `addMark(selection:false)`, above, was inspired by this. +* [#7561] (and broadly, [#3920]) + - Search results should maybe show up here on the scrollbar too. +* [#13455] +* [#13449] +* [#4588] +* [#14754] - A "sticky header" for the `TermControl` that could display the + previous command at the top of the buffer. +* [#2226] - a scrollable "minimap" in te scrollbar, as opposed to marks + +### Relevant external docs +* **GREAT** summary of the state of the ecosystem: https://gitlab.freedesktop.org/terminal-wg/specifications/-/issues/28 +* https://iterm2.com/documentation-escape-codes.html + - `OSC 1337 ; SetMark ST` under "Set Mark" + - under "Shell Integration/FinalTerm +* https://support.apple.com/en-ca/guide/terminal/trml135fbc26/mac + - discusses auto-marked lines on `enter`/`^C`/`^D` + - allows bookmarking lines with selection + - bookmarks can have a name (maybe not super important) +* [How to Use Marks in OS X’s Terminal for Easier Navigation](https://www.howtogeek.com/256548/how-to-use-marks-in-os-xs-terminal-for-easier-navigation/) +* [Terminal: The ‘\[‘ Marks the Spot](https://scriptingosx.com/2017/03/terminal-the-marks-the-spot/) +* Thread with VsCode (xterm.js) implementation notes: https://github.com/microsoft/terminal/issues/1527#issuecomment-1076455642 +* [xterm.js prompt markup sequences](https://github.com/microsoft/vscode/blob/39cc1e1c42b2e53e83b1846c2857ca194848cc1d/src/vs/workbench/contrib/terminal/browser/xterm/shellIntegrationAddon.ts#L50-L52) +* [VsCode command tracking release notes](https://code.visualstudio.com/updates/v1_22#_command-tracking), also [Terminal shell integration](https://code.visualstudio.com/updates/v1_65#_terminal-shell-integration) +* ConEMU: + Sequence | Description + -- | -- + ESC ] 9 ; 12 ST | Let ConEmu treat current cursor position as prompt start. Useful with PS1. + +* https://iterm2.com/documentation-one-page.html#documentation-triggers.html" + +### Footnotes + +[1]: Intuitively, this feels prohibitively expensive, +but you'd be mistaken. + +An average device right now (I mean something that was alright about 5 years +ago, like an 8700k with regular DDR4) does about 4GB/s of random, un-cached +memory access. While low-end devices are probably a bit slower, I think 4GB/s is +a good estimate regardless. That's because non-random memory access is way way +faster than that at around 20GB/s (DDR4 2400 - what most laptops had for the +last decade). + +Assuming a 120 column * 32k line buffer (our current maximum), the buffer would +be about 21MB large. Going through the entire buffer linearly at 20GB/s would +take just 1ms (including all text and metadata). If we assume that each row has +a mark, that marks are 36 byte large and assuming the worst case of random +access, we can go through all 32k within about 0.3ms. + + + +_(Thanks lhecker for these notes)_ + + +[#1527]: https://github.com/microsoft/terminal/issues/1527 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#1527]: https://github.com/microsoft/terminal/issues/1527 +[#6232]: https://github.com/microsoft/terminal/issues/6232 +[#2226]: https://github.com/microsoft/terminal/issues/2226 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#13163]: https://github.com/microsoft/terminal/issues/13163 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#13455]: https://github.com/microsoft/terminal/issues/13455 +[#13449]: https://github.com/microsoft/terminal/issues/13449 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#4588]: https://github.com/microsoft/terminal/issues/4588 +[#5804]: https://github.com/microsoft/terminal/issues/5804 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#12948]: https://github.com/microsoft/terminal/issues/12948 +[#13455]: https://github.com/microsoft/terminal/issues/13455 +[#5916]: https://github.com/microsoft/terminal/issues/5916 +[#12366]: https://github.com/microsoft/terminal/issues/12366 +[#9583]: https://github.com/microsoft/terminal/issues/9583 +[#7561]: https://github.com/microsoft/terminal/issues/7561 +[#3920]: https://github.com/microsoft/terminal/issues/3920 +[#13455]: https://github.com/microsoft/terminal/issues/13455 +[#13449]: https://github.com/microsoft/terminal/issues/13449 +[#4588]: https://github.com/microsoft/terminal/issues/4588 +[#14341]: https://github.com/microsoft/terminal/issues/14341 +[#14045]: https://github.com/microsoft/terminal/issues/14045 +[#14754]: https://github.com/microsoft/terminal/issues/14754 +[#14341]: https://github.com/microsoft/terminal/issues/14341 + +[VsCode's extension to the FTCS sequences]: https://code.visualstudio.com/docs/terminal/shell-integration#_vs-code-custom-sequences-osc-633-st + +[other proposals]: https://gitlab.freedesktop.org/terminal-wg/specifications/-/merge_requests/6#f6de1e5703f5806d0821d92b0274e895c4b6d850 diff --git a/doc/specs/#11000 - Marks/ftcs-diagram.png b/doc/specs/#11000 - Marks/ftcs-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..f36112e0ea34ec6588c39301a0d9ba2573e5569f GIT binary patch literal 205790 zcmbq)WmH>H*Jf~c4FnJF!GaVi6b}@Kwzyk?7AR1P6nD1-3N19a7b))UE-mg-q(FfJ z8D5#0_nYs}%$lrqSJu5h&UyB;_da*qje4%7LWEC;4*&p&)Kryp0RYSz004s)7ya?c zb2F2o$3L{Ux++fr6=R_N#~Vz01(*T=P@O<+Q9&p`%AHbePFwDm+i2)zG{{ft6vJR#uulJ($+> za=lL}2&|&WlzO!E_NRu09)Cngp||!sfpdOiCVxg4XdUr~e7~2O{QY_I;{EZ5t9Na+ zC+~L0PRkosT^FkAy65f#Pf4okH+KTt4}HFg9PurrP-tJ>$nnUm#LSzws6+(Z`(0e~ z_nz*IGbZ3B{62qTS+P>a-;gD}yMsJKbf>)kBYUt&g32-P$h3SH4|7hWTWMtD)Xo`W zI^&zZ4>YAId(RBIU?gq-^4Dl%vQO^Ub$M<_epf!?p2Fhz(~pcwl?28oeiuG()`g|1 zTp%7B$-Oa%KE=L#h6iC@R0C!E_U}N?ZMo1rL&%nUrb_2)1WH8<-sE_F2LACNH)Fah zzp(GywGm~u8h(a(U3J#*9__sh&t1Ct9cTBr$i?2|W>mOWI|b@xT#E|)mH7J`SHXA?0HEL@jkt{f9dhN(cPje)U|caZVBFIKP*!yAV01z z9whn3=P%1PWW|pE^+RD`&`I(XyzFKjcA-o z#H4kfOWmk9n@T+V-CtJ?Y6+E5;m1ecN4=p9EB>1Y!NHEx63y=hHw;P*Uw^->$0#)# zZ{6mweG-5;rI&nJZrbd9c`(as_@mu(zvk<3xL~f{k-TIl~jD ziyZ`P)vvUilaoUWF7x^aR4csTwdj5oaQ(Cn?;S6^cY_ zK^L>@s00fc+a5S8HRE5A@5vhzZ_NO--+rjJIqMsO;*TEG@K|X5?k>$JBm7B40*|JY0Ah`B%wx*Val2X2Hq3V)+?*5%9X_U#{5M!D zltz_|L51JjjB9+XZ9!pnUM5sRg*WT7fBu?dzbsG(`C>h@(g@en>)8Jz7r-9e$)jh^ zwq#J1A&=A5#J}!XA(+m$VhmLIY+`DNHR2fHbD5m>nchmzY--f5aU_w;_tKa_QFE3E z=N!uAaZycWoXBk!F~mQ}ar5^c6}o^DR<$o9>z=PLi81Ydb>&Z7Iq?%!Ky11zOhRDpsN!mYY7pej`!{(O zFfF2g(3j3}$j_!}fag`@Kk#5b`N}mNmx*An24F!xzgV5V6WzmnKJR7 zkM8vFiKvt0+f+Z=6Y^BrWm`Zw;}|KcxZ4SX$eDkgpg4*vwudtW&Az#>cRgD`xP9Lq zYyM>>R^@bR-R+If#tCyoy|%m)hHh;|Q8Z+WS+9Qhvur)yigat*?-@){P5|Zz?sSUP zq5Fee3@j+BmP_`>Fr*flm`l#cN z3TShrC(@!}rlzf$Uf&_?MZsWaGYAydy{wZ)5r)H<%utEphMVW;D`Yxw$i*Ayr-p#a zBYhd_Yq=sSSPWO(v!5DafX1v`teOYWtQZD|60G^Sbb&30dg>sH0EYZbGFZNPl(nF& zp^7>Cpoct_TZSxgeUr<_*VA|MoPROqUhPGn)pbdF-{2QV5%?*%()y=C*`JTgJGrDM zh!kLB87nfQ!7MY>%Qd~o!uS=4z$U+wI~9VgiLzHMoTN?@^OfVq3TN803G9Fqm`N$P9%kkwqo$^&eEx z57b#6qoTd9FWo+~4I6fXrtxo#i&E**p2@-QNhG^b)u?)6$vSb#dUKH~-%*=Qwlpz6LgnoR;~d~jGxA(Ft8jw8lFoVj-Gy!50=4Ad=ocS3 zhaTMW|5KQC;T9Czicbm*sf7@CzB-DccdK#Qesk3wP4x#Mo~Q*Pa2{Qfo7egz>XGoo zJ8&r&$E~`TdX7?J+8=FqZ?xuor~q9&+rD?htLiihG9LOpd1zxU5w|@|eIiH3UD83S zI{FKkc5rG_NiB!JDAtU*G9krr?mIw~>YZYX-L2Ds6qPnbJH0IsB0kB*%Rc%h+}J1k zH6=Bpeq$8@ly#1(`{`6n$cWc-42!+q68&&NH&w8!272EHvp@|3zYWsyk`|^wF$MNU z1AV}P48^J&{66SK_f-(_wtM{!*dqnVb=eLYND~T7x`n=|UElO6XXrHxQk*_{rV~={ z!{9Rd(Tp}v6K#Tq2TezOcE*dvP`8yvzvco;o$^^Y8{!w-BCCaTjQ$pb+<1+PMQcDe zUobq~bE0e#9t#s4Qdg_ZW}#**qz?Lq_Zs;4vdTR}v_^^^q@ z=lcgmVM*ST`ag(11M<~3;hw(m>z`c1iPcfcCfttcB0XK3p7~X$d0k)W*lG}SG-^eum z6Rb48C-J>D4upmORu7!@_)Bpk{ZlmMv_7%@bJ4SAopiF1C7-+BN;EZBl8NLpamgOYCIVJ4R-Q5|3s7;yQf(ZdvBilWvZkw&~*U?fBucMey-aHhdpoMTcXd>k;UWwx` z4uHwx&ER8zY%kD#KV)nEK3qk)QpDBhPVw1ChV}0&TdpgF5i|#}S(ys+fm@*iuW-Zw zc2iq}wGB(rm>SfACc8ER-tf#^>SSqzaNpi!enYn8rXvo6Ou!Ex^EaoX4R4j&Uf-mc zDMCaovQpf#+RVrndLCHC6l+1@9MVXP=1c#et^bzpQF_zr!y>*^QPr-vLFc8NyVj9CMEF~}(MDdw$ zIy4SC4kM#$#Qo7i3>IgX2^60e0xp_cU-;yMT9;?ITVsQxn=dm#3;zwH()vV?2Q*kY zSa#ywXdE46qx>UcfkNYQ(SR@sRcJc=W=ceCyI;JwG6Z zV#`kOAGr|4@Dy-5hx!ML47}jjfd_}B7;Q>oSay>)AP)UQ-U*yu%%+F)=sxghp*n?A zJ1cOvh5gTpebV`3jId)&+u2bCeCcvEQ~0Z4ABjk6y$SjxeD04+K{qECNJ>dCo#Tqc zYZae(aIYPV)3u`%ii)N4CB2n7d)Mo9pgZ}k^v+6inSGM7cqLSPKiNh})N}S3x|6Q- zUSvs05^@3Gbt7m-ym!I|3bHkAYl`-W0-v#MV(`->_H-U}r1qKBE~XmcQ4Z`8PEH&- zjp(^ElqCw_=q4m|+r(jQ+YDt|<2C8re(gUPz{qBKj5oC2C5=Y0VayC$Xeg(`(hMUv zCl+4&?&w!i@es`z*-_H!YM;s9pWHs|9t(BFR91jl=h%~b##2ZAtHr~>#D+LX(JS~U zvPC^lUfDh}+|J1Q)5k-LFi*)uKY!3%kMVOYH3L{+M!Vck`@Wfye@N<6?g}+c*8cPt^>}DWf&|RIov!>%Um}ouGnMLCOoHXz z6?!Ip((?OP^GQ_Y)1L1F=1oXvvrvXOU=r5!LnF80*4W64-?j z=Cy&b=zJ_*lFd4&X`nUh!wpLfLdVKmfeBAvYX-_GLgNV-!6})3UR9Jq`aKcGz#;>I zy@iFvOwo0PE_<0gC{w^qO+FbpRDt9pjF+ResFkN6SFznr(ykFQ?@CFG%p!OCim+-T*;ei=jWALfIN@~tg9PMy%PGH8Fpj(DfytPG zsoKZTf8t&{oGV;F&Z$&~aq*$jJ-bAtEO+(xvvX+=-iKF-UOi8BZ57$o6|owVSb%ek zI2x%qI5*(@EN9wSJeFY{?r9#x`A87I!aI~S8$48|`YI5eNdXHVVQjm&DioCcv)Vm? z;SWkJg=4k(qU{+0b;Yai_>4*tLTrIrv~mGM1%qUZ0Z4n>pKd~`R?gOzt%OGaiEMB> zSGx`w`%YQ$;F~ynp3YE9OqdNv^?a7Yx}~Q@5FR@kVH-pPEBf-VWI43o{(E_FVl)q} zb86eoa>7H7*0s|@<)8#h8_7DQ3#$bm0y^M=4&r2Wuqtjr@ZiL4V-?f2uwILqXT7Fa z4efaOxfSZ<9*cf(IVmykXPR6BKJ(CYsJ)v}?i5W^nDTs%bqdAh!EAOiI5Gk$qaDD$ zU^D3sEQHbWs>gca-=501(~{c-))E^7#YC%r7QLWQ4$bHxe?~*hB0O@k_TcubMBY4( zm&62?^AU!5WspL^I<4@>dofK17l?ZMvaimBe`#i@8y=N_qudKtSMDL zP{e#9o98T6Cuiyp6(81irPR~|f?+rYfP|2|r&ae4?=DKvlyR{2->3pYDo1pKtv>XN z$p!TX-dzQj3Bf>uudgJWi3J_3fL{D*17Y6^#}wMg5hUQ86!$w16Kb9Uh}@vxRu=S+9#fME;c% zg)FGFp?*s=Mw44_#=`e1US3XtEwAK0-ml)>nj^m7|Gi&bMDhPiduBh5+~z=L6Fm?m z2?HX0T``|$r_ODVpB!y?XcW5>5&?HmKgw%fdpLHWi0~nthfW99GeV3?LURI(Z>DBn<7K&UC=<%TPXjRsiKi{| zHY96w!SRy5XcGvBoyb^h!(bh$E+m0-Eq+KD7jW?QrX!kM%*t>U*XfKqU)9z$yp$xL zBq2Y+pqP!+J}?B%%-o~Fp-4kb1ap!2{4r9S(8Sm}4bK`2#t%uMoDN$jo2YQ=aW7o4w1>eU*+Ryf%x+WO?vyLN!{jwp3Bt3rph#LGcq?pg zkCJ#v0F?cw92^@?hL(v`>})27COTh~%SxIyc#3UIk*lajG$=$XY8QirBvKTn%vpjv z{}mgV8CVVCWMq?$LAv=c%c;7!pm)OWIDvGwyAMoqPS7t`C{=$Xopl42h|9E6jvSQd z3zbORCR3iofp^*EpTJMp&QE-^<2g5}1?aTO-HkMXuwu)60C6(=dzUM@($k>7a-~X( zup(v(Oh$LqTVo`5EKI3PGARq3iR|k9@QVvLRp!)br)PE*KNQjTU)8!H(TZX!a(Pb7 z#rRS!^a1;kCohz_Sk*!N_qR0sCL6s&?QfP|g}LK?f;zrwA*MKk#T%peVpyuarwvkR zHgkPeU9FJHTyY)T8>H#N(njVE{pF01KR9{@w6QaVQ%8`kzt+s+h0Vt zJ$-*`NM$5v^?#1>qzv!2gChxd9V#Q0j?oV`xq==KKQZ%WR%ml0Y!Bl<1-Md&gmz1c z#={tDfyP?F97X!3oo?$732r%4|3YP^-eVWufDM|S(x6!7sE5B&PXPcy6ib-bPT%ey zDsPskIu|c#f1(0^{%y~K5c-=!Es1~(>mXJGWK82 z`lpR&#g0jmypgd0Sy_Cxl&?1ge0N8~Og}+Sh7yRd$YVqYi*)kY@X!u_1t$0INuCY- zd;k-S4j|eau-o|-tvW(ut?-%ubd-4g2~1zQ-uK})HK?saJ$3WX-u}yAux2mP_hp_V zV+t&f{di8Jwb31yq#Zx(I;6?P(Et5>uatDBzcH&oST>DZ>92a*ZQv=ZJ#G@(`nI?DU-2<|+Nb;R82&b>_&Ns(CjiYSnODRT^x}H$G44pOAVdHJ@;S9S1HboS9 zOP|A=8xu01*vG_JC*@Sk#Mz#C7VT)Z?DZ-K7pt?MLk`a&6|GplARm7V=EM^z?=)^!t>^B!2=jf9NT(*_Wczxg9_ve zoGBShZymSy1BD>-pq=3VINnnx$vzs%<2$t$L%5>0Ry{}}U{s4LXCcVfZ{thj_?kIN zC|XVO4P|ZMb^dnD&X?)x!Cb6kk4g(o5-(CYq+=E%tU=sP_Ztv%31BbZy$RVWcsypY8%v?pE}~?k;!dX1KO#Oe=-4-_I7D8{z7KnZSPi_ z!k|F(vbo!Px#fx!w|r_WR5Vw|HMDX4BvtTTpg)5bNzk!P|V zPu!H2kycC?{ei5jv5R>_q@3{WI(vpznc8;o-BUDhy2q)U~*0+xO8HNoxrA;xVg{h>n2#{%g?L9bLupK+# z$N6+8ex@N9f@MbVLB7(8@07|o_|_P%sEi41f4EZMc_En(hAd2~K`*-|gDgyOaz|*u@p8ZW)TiiLj|5!WwUuzSWkn9=6VrjSBYuAmk zmg+xWtdi1RxF5&Z#r;H}NUHAhv?@)dlvcLpu^r@OVG!U}zrX!iOg4FO?SW}9MUVJ) zxfzwka_qkJ&G-XD^N307c1OxIN5H;ql|_%LVR3PaR@3Imcq1x8Ozyz&f5Mk(?|0pu zZ$u$@;|+@QUKWfg{yRuL28S>yXEZLK^L+`_&>Nx2M@h%eb1 zIi%dt|3K-G2Sg*RKdbOu5S;|3K`{?3E)O#qB|NQ5B!ol}H^rI*=(z>#a}<^f{;~s3FE5CR<4G7MYxTp*Ydf*Th@Io zLPE7K0GybU2`CkB6a~(tOmhmDb(xf5V%wRS!A01Zd=A+l^m~B-^zCU7y4nqkVOG}Q z?&@e7=8g-4AyV=%KLRJM6S31E$S&IGThOx2OK0nS& z&E!`b2CvBc2Mjy-;N``99CL$s*_FjrM2MizrOoz3Q!$%MQ>hW2@Vwy+!U$wulx8pt z`&<@_Hpz^^&jaGzfkaOsL__EM7=Yqs7P(=ZzF*Zhkm+Cav2)y(hQKT(Pp0Q}@+JRR|_-l_boLVeqop^5=KaUP865 zRNE>u%E4$?wG{|c?LA4;CiyO=tJRx5E?RRlg?H47We`lwY-*ZT)gYw0mj*4aJ74&_ zb>aL7ZCVMtlrw9e3XxZ(x;Wvz3N8J=nq6CGj~+`-vUVf1O^X7BP<`WZLV2CguEbytYtE3BY4iJybzYsVh`{2AJ^CqMPN>lS}ZRyg3y+6hCk z?9no02$@!}I+4kyxE0?!QNGBRrZ0J{zZ7#smgW4F)7c3%LQ;I#C)pB&eZ^X&vS@_` zXTE4tv*pF!NJIRIP|lLM>FVO@TY4!j=JE2%^rdX(RnAvQ3r-S8kuf6=X_5&g>e40g z-*DNUT_yp;+Nxwz!f|sKwKczSxxD6> zi@?ZFkHOSeiB}ra0=_}kjAb(Q{!<&YrS}I$ZJzf;61$8b@i!Y=J4{8SdWBjmz8R(- znsj1uTU6q-ZfWuS`6PQ&WX^Ac$d{dWSb|68O{!&NwceGz;3$hcauxqviA;rVV_+fE z#-FQQDd-gh_4w6S2Waq*7G3YwE2c9EmWc==o-%1P0&8Z2D$>hNw8TtLMUT;wp^3d3 z=xT{fIbvc1d#MZSRY{&doh|i(W91W2JUz?KNazB_EOWtn3!HFQ*ZYfVF zj7xe01*3DR;8NOv=%LSNZg#C3`7B3|i12a+UsJfXGXUH6cU+)5^DAI zd;N{E8%~`2Mk(opt~8MX^F5!@q75)gGsy+6F{ zW@BBYtR{SybQwDRv1lgzYmDzd6ytMOB>sC%rDN?UhXrL37qg-W(2tdLZR>;dQ?N$~ z0i`)%ysc^tNwTP|!Z2~5DULD8C?9vSv#rxBm)rH;b)gA9gfo?! zurC#^W=$4)z{+n7MeH{Y*}serWl*6!x@fg{reblBobzDx=^+)(2tMqI9@%fZxjUP- zO`2AEd)9aoA+TWct+fa3j_Gfus-S@l_FypW4-|i~o>fG*@>KnfbAa#V$FLZG`}aZC z>#v(n)_H{}`uc|o9PYf)7u4}dtu1FPBq`MGUJ<8tNRalkoDT0l1*V(rL?u}3$tmHb zh0%3=Q?4@&mC)F)&BtTN@$EeXa~?(_KSr&Es!!J&d~Xv9k#4quETLBe$kF1h;J43S z1E_4L-75*&^iEeIHjQ6Hv;C;Q6*Kl{L#{a*jF<-UgE8^HefcyHaiP9pV=(Hz1V&7j z608cim=b)z6xFfX4wlUWWKoA$bv0L-okO!*k^DGWXVSKH z(#wLZaa{^CI^1cgftwvrhvd;crOB_kEc)bbkAn-*o#`6*)~R zOHXJFXbeyJ#Tq_yPNcsqhWk5EG}Wr*DBC!aEJ z$vJfhjqq<3{pm@w&JjsZ)NVy&YZ5U07s{LbEW&Zt271F*yE#Qbi^H3L97M;8uW*}G z%Yz10TXIr9`pEyy^QL3Sz?mbK{y3~ktI6j=`p$P;^3?I~&A?QCe&^72M6JhSbT!G_Y1y?0`}Y{O&}hd4nnho<>lbPTn`$9kh?ejTmlPBSrj0*ty5b>o z{L0;R(tKH^hsq!J5dxfgNg%v)S%Y}8?GA%7oat+Q;FEEIveSyE?y2E|QxBKES8tRi%Q0t2kzyrHggq63D0{O+ ztvNCn7DXps+Rnb=tk)iYR&0Hct}r^NSM)OG2Y_b?xo$?|U&tJ?X`Hj0ON;BQ_hd}4 zvdu}czbofmyf#5FFbnf{<;po*bv)UkdOtE ze7i8Uxo541)ubru3(z^*f6;RU^ZICq51*%vZS6{IX&2o<=JQi2sYsLY6}wl(4)DFw zR1mBp2j~UkdwxsbawYC}rL)ZGperpKA9`%qVsDVJC^XE6zM|=S18oMxS6_!8>WkDl zz!71l@@;twX7B}d*6s~1A7^g&gG&i|atB9i5Z4;S`|@f^pP9tE zQfSNLCu;PyhoZ7EXH_51-@|3p?_b|f+P2S1-|6kY5$m1ScL``FOgmxj;f|>gmnkC@ zacA8b5ug@o;!B&gwj{Mt-P5Bs1yY&X1*wT*Sgs$w`4$r1NN+&*e!2LWUFafJaS4G5 zd;b9q_xT!4Y>=Z~Z`s>CJN&Dz+U*G_wapwg-JKy5EhG_Kl{J*96aLaS*0?o%8j(M& za(>N*DxiTGLOgX9m4&}ALcq!wT3-n#2+A-!GDSpibE+_$=ZMS9L_E5T#assdo|vC? z?K0I*$1fKmRT5S~NNt3a$3~C2*?ZFua$Q7(3%Rd#T#p0I)?AjF)&YKKns-SJG0^AR z+M#{vTCNi6uKUiGGS>9amu#yB&Ma7Gr4>Fi6}{g+xGY!a?;Zg7b2IKNdC# zl4uMJHkBtG_i~DQS$~?``Px!kpQkJa`4jAsE^8prQXDUYH06UOSxg1|v&e%S{0@fe zK2GxF(J1k~8+#>69ecXL*4yp#(78QYebdacNTrc#8nSIr8E=6LL`x}V+`8dR2n!uh zJ+MBz*9eDN49Nd?&4rrz_nuqa%e?4;8Y|mS*R2JaS+E0;=u~?S{DUsg*8{kRm~+Oq zuoW0q!t@hr@!=&b%d>C-+9(19&B!Y=&Y;RVO8dq>^tm$?pH@F7zu%~4 zJy(9~lv7n!UKX}HGoX0Io%Rx!a&rKHq-`8ABMFQP5plrPNpaem>kdBKe(GpE2%QRcYax<79Y0Ekrpc?w|+7HC;4 zcFQ1uvvE^n{yx zsBoT(Ht!_0l;^DR7m9^GZ&3%g>O7V!WR*c`i`COHgPkxP$Z^eUHHXg4^`O%hBc8?U*_1Ei9UP`UHm5 z=ND0)I==M3ZbPADRCZ&uPu3epAKD+|Aa)I-M&=gmcPow&4DS|*+aJ9`W+7ntb*;gl z(Ro;Gw|B4a^&b?}(4(qzeA)Q7hRSB*^!Xk;T5JJM@3uz9VC5LoUc`FO9D@erAx~|o zo}53cx~=YPD9+vHMvD%^_I{9PtV`aXPbSRPWiH$O6`ux~?;BhN5%YPNZ*eRO<_BXO zuf`f=T83xXGntXy+sx0&%QKe71VSNSv0;0PA0DElmrD$I^{D9q5LXcepgfO%Pz?wo zotOojhwRPrjQxv{0>AFVLQOKRz9ckUo9xv0y1J=MCQ_RR(%U8KiK9jE93fI1qIheQ zdUa=J1f)zev`&_q2?tsslGd+|?yq)f>^mINc@od=SR2D(N^|ttSV?^7)Up)lN&7x! z?{w2k(Jgs4j6x2w6!0v3%o$_3T#?|Y{3eL@TkZUQm<* zz}F$3k*b}H*q*X7E4GfN@TvMpKrNSD$=5**N`hBtJ{>ilMhVa6s%gw|_9zZVlek<$ z>+-nspDByqMPn&jqJbBqdvJJ00b3%X7A}_`k!&e>1q4hh`aD!?F&k(#TwiPH062YS z4PQoXTmK=BiBuK1=LO=_Hn`O#G#2*``>I{GBVymF${R0jp#)5(Xk6GzmYo-6fO+Ap z)L#Pk2m)e;R8cN=?*!-ZhUTlp?Ht2Zf^^taJP@6q2VqPRJE~^NSz&^piclDcf7Gw; z+$w38_h8tp?bO#}e<7w)Pqx}wyb0kMi&P*U4WtUZi#ORG|*wO$_{ z1rFCWl$WB(0Qb5I=k?2V6+$-9ATiuT*f`1xf3$R4V|$r{a#sIr^ za$!$q5Sl?>L%xN3zcLH}8fj@OsM;CH@^pZKgBy%KT$NOX5#jVf#<6E1zGg#I;p76vQf{gc4 zjABkRzdwC&@Ok1VqXoVDJ{~{s(l+<)xMJn>KF}T2+>JJRr@{37uS)Og$B^|EYnsuk ztJO%VwM_@#q~6L3wL}wHDi4Wt`^LK%PT|+YAe+0a3Hv+f0qHhcT}Y(5@-Sl4`s{AH zMVdgdltz>x3)7a!o+l0e^w}A}#OCM+%G7}NJyXnXE@|P{S$$(_n-eLww+Y9;N&dM1 z%8y%3FDE%=Xu2?N4pnzCU_E_|w&ds+P)XTdLUU%>_}tZx1EKt*CDhe2%u%g?+%2eg zRA;H~bCpag036)AZ&&=vb2f2EDb7aK5n!6WjY}LFR!y*qOgGL>tgjZY)@=5Hd zjMN4fy0DO{jmGf>g5lge_E2cDtzcIRF#?7tHaPezP8fBKh+I63=L&h-TAm$O?a?vz zpWC406L!wMT3g;1(bwbO9^j-XlzwXA^X6GlZ$>A+e~ z3iM4^$Z_)}c86WKs7|65csyIc#j{Q%IvW~4D>b^u_xu4HKKcH*`X!29<-JVXV|)L{ znDlXn0M^YHg2wlY6(pW068Xodxo~k2b@nmRb=6;_{U(F6%hCKu$a_B@Ec05XC0r%0 zO#aK4!C~YFZX&|64X+4A3ZLc}u#Q?A?fpoH3~<|c1yu@&@Mg^;e~Qik462luh7yFE z|H&0s=xDNRR%c+|FV9OS(3o~fV$uH45#n)oo28Uf{WhI!JC=4VwAe3lTrNp3tBQs; z8BY6H#=~Uz!WV0LEne5NVdFsIO!2amsFG=R#%iZ$!U&r}m!wTEu@g?sL~BO3HngTs z`G1&WNiw0+7iNA&=Q7jKGUGPTDrx_ef?en1Jb}73IVW-1qS<{)KSdJ2K{UX6Fwk2q_oasfyS?FyDF!9!*9LS ztj>rOs(4VXTD=@)^1avL)}^J(Jq?bLZ8||)TA^lWYSUlyicbtb^Rg>^bfWt*PP%mg zF#)W5n-H1?%wsAOI9eKhB}X0t#G;S8R0K~g*Dhnqxt%m-3^1lJoQ0EF@R7aY+icw)%k3zh&UQN+W0J3=?A1MxIDf1btwS@bC zA2;^~E7==uSey!r-7>(`G}t)7&Cjawc%KWmtuGuLh@ZLAeQ~3t{l4-zt7uC2vxZKle zrp42g=`fVB9I8y@!y_T9?N+_-SAYLvii86t9CvF|wht zu;y1xVnTTpOtL^t-FOJ1<9o=|=6s~6b6v=*$`{Y+vR?y(I2_rlmAMmV1kH+$4tV88 zD|Ar2oHpPbSz;LI17;mvFUH-_qE~ePez=Ne;n8cT$d}?g4Cs|y!*Hkc zeD@-X&ynzqei=0sQ~)c}623Kls>zC5l6_(274YG2Zo!ZX`Yy40f;rn1D61jBLJc}p z#VR(c>p2V%RpX5kQx7f(IIGARs&bwaFn-g%o4)6Y12f2r8XE7vh#9mYvKFW2F&OPq zN7ewzI4|+BjkFop6gMoIwa!#|eoTfq4Ug%=^xyS(k;SMrqL+S>|*l6&Z~lobb_EmuBorH;&j?o37vs)}@%yk|l`MR;C3-8fsrC^!|3?I<(4^ zTAp%ZaD9VK71UrQ$~M1d=)udu)bY9Kmxvy=Z%kg7Ds8^~&YRRl&7L3mJ+GLSM4gr3 zh*+i%r@=U$KYN6rE~#(+w0bFSHbSSscsie486ehjv)9)(*=ujb@~cy9H3Y# zV~n<{DJ8S-5_hht`}h;imR}@L=i|VRU~TEWeH@U_#6w)*so8tE?dV~_X6s+B?|;>i z1S8RIA80cK+_uM1*6wU_44ca zJGih$mrgj&GyI?qh`LuP)t}4UsYjSZ0D^+s19N}O^Cl@(A!O>UlQ)gV4V|@hFp=hzB>U>K$ zY8V`a)%SGDnZ|vNIoyT!vk7%-+X44i;`)Ktf^AKtNeyJm04Te2EFesqyKehU0UTvlS zw-3YGhe#)}c9VD4G+2j=hxByM2#(BmRyZ~&48Tb zw1A&W4Prpp$5u!+Dl&*_OvbrNZ%p%Gzy+=8G<^`>XkyBNcw`I1)*Kt#&IZJxV@V-nZYu;e$uCQ{YArS#@((mi09HfP|@&uRt~eS~sbK%B+p z{Qgbcm2iQ^wT-5j+ouCWt1VnZla+q~bMx{3!p3lZRVpTbj{?W5_R6SlEgb$i+cDP1 z2VyOM;*z5VC~czkIpA_{lsepxeZxOp`vR!Q!bVr$QZ(JAQ@>Sm6HMz#^m;q2$eh0g z;~tdBWSKLhEHc4>hi>77!?e^euX|G&I~MfWxNX#9nRpXxnW=`0%+O5Txns$KYr7S~ zP5;~!w%#ZOKtji-Zur*AL@-8?*XqwGJU<1}(I%UIA89+GKxX^tr)C;~#`ik@KWkkUb;H5rLhcgWFrzuU1`TpmD=*yY;*JsM zvnKo_5;aU9UG?qQD$*z;227$>HX#@zFANLs`Rr(6gm=OvCMXt!B+knasKxUI^>Xze#TH`Rpt1g#4Vz2sgfkNKLHdd`ZF=44*TKQp z$8_i`#t5hYUk4{ky{={OV6{-RV^bA$XwM)h;aJ=Q*W>e1mj@IWk@7B2z?z(a77@;C zxIC0+xAgi+}>U zrqdic>JB;Tzqv)U88LQRF5-{*Eap0=$U=|8A$&SbW-R^KKP3B^<7xplz(N=-&p!H1jLvcEFj5-WA#=N%dz~uO z`-9kh!#z_1i_aWpWJlfN$8&rTJganu<>(VB{fAnjA99w*TbVNa z@MP1{Y3W+D&c;O9wszli?4POLERK)ePoeh_QX^BgF?e$ z^#6fZDR;RwZgx7&v>bDu93!x%>2q{exqK3YQC!|tZAWcDBJ^+D(_>>?JE3mdh%~Y@ z3bL?ruPW1u&CZ8cKuVG-i=3R2OsIW*PKWmFB&+aayMif^Zyb85Y>jLj3Aj2YhPlWx zO`#4m*8BXn+o7J6hdm9$X3W+!1%@hUvV$HIdy&5)J4nmb{hLqu>q>={$cs`d-4W;U zy;_}gx*}aFm4K-*{$M|T2$Ey8aEwGkzy6~aQXRCEq+bO zg7?0v_uOwh+qC7OFQ%O6i3f`K)sEUvl)GRw{z867Xdy%`@05R^n6$VIKFRNoJ;NH2 zkB{*x2Y}OAK+j5P+rE?(KigqV07*tme2Qg!C6A@NE|0G#`E4V*hPUP$7NrGkgwCs% zwC!<)j2bT7yqqj;BD1fn|Cc~*-6ja|UOXA8gC$GmZJKXGP(RFWK|4KUB zbV+|0^{R9rePe($Sh+k$$ZB%Ipy92~`MKDknuwx0Hi#=cZ&E-tzmWHE9S>QWo z_SLln`&db;cIiJvB8D4wA7>y}Ok2R(DtZEGp0W|7Ru=X60QWYwZlo|5Jr z1i5tQ_HSz*>O7z$pJp#rKFo7Dj}t!0urN?5)cIv^@f%+x zN~8{soUdsp!F<*?qG8vG+uxeWs*Cyh@o3JXZf% z)hpAYT1;!}+mbgbUrHr@)4B46qM!Lb&nD*Q+!jITjk|DHH4W;=4Ntx7`hMR9HzwJX z_W!)>H$hbxvYgRXjPgAhiw#In|EL(3a^O(CM+*MaKIuis`)DzP@EukIhD`pqnUQ?= zT0;Zquy7eJ$3$)6_4k5^zM&Ypy@SvZ~XT8W^*Y| z->TLfy^?vJ#y?O|6w}c!i~A`2`0+=<+>}KrJ(1kU8slOmlT&n$9!xhM(1_n*6uUp@ z>ve6f#4%7(d)-gq!+!b8hZqe7y*GFE-28vuci9b!>e^9z6xK3T(PMGTu;h(7?GfcH z%BGmd0D%(Er(+DhXn*}GCBo1E`H7Pj?%tDCw`?ag0WQB>eQgLio}XzB-2MCg+Q~LX z2-BXXq7c$?)vtu*@6v5Mic1J+rSH|Nlm=3ZU-z}Gf>jOyx)$EP^|gW5LcNJxCglFo zC!RW=*?ZN{YErpw{M|;2*tKZ7Bb1Hi-OA3_;&QXwj@xcv^Z#20`NA|3gA8Sd`cs!{V zeDOG!qbFMB!ojv=AX{bSSYMJa`Ij9Jr?cFC9U1?oi+B}6(|64W&cNYe_< z{`mr*v7~f+bDm}ozs^KAqy0zR(JksT(GX`be_1js>So7EB4Q@Phm1tOEaW{LVTEa0LV;xf*+NBJd` zK3~UHvil*^XX4qxKKt`wh9D`cHFYO2asR7_+(y@Jw?=M;&Yp}|>)D)Pb%cWLR7T=# zhjhGlc9B|O@d#&dJ^|tTVprjA%dTy-i*!&NjDSNvu0H5+OhZa2#}g`5@*nB?SguaY zcfV~Q@quOfcrOcoNnZV>_ipbxc{dr;Zr5F>xODG3C6ofxmFv-=YYK(>1KZzDs$vnQ zn4%naPS#ja>`(beiLJi#fBUh*MjKVh*U3iG`*Vd&y~Pswr)eEK?lqf*Iaf$>4$n>Y z5a&qee0lUM5EcK4r>w+?ywKsH;7ZiBgJ=+LMXMJSbaJvYnJcUua#;;jaNIX2kxKBX z4y%Yxgvsylakw?pF;w!ZFLgPjMJ3Qb&zBqbB{uET!0)rG>p^+L15xPD{jx?J21Tz}uYP{^ z>-UH7ex_1l*Qk@~a*gE!Ko zY`tH-f17=p^)!n1#3_&n240t#&nq^4)i)-RIeCAvTh*J9FMDKI?nnnT z8Db@QsXFACF8;*I7H`?ejm-|rbfXJ#Yn7ZHz<`l5cd6p^#=jJAr`Uat6zknwqXjedW|^f{FDVA1`d$>fA2jcc z)W8Yg(mZ^&f&Tg8IpXpF--P7wALuV^0d7Z+cW>TuNq!s_YpiI!7&vadY#84vA>fUOS{*XLUYMo)&v@ac}Krw8`TNZiv7g)#cj;ZH9{~^OU`xoYG+q zK_Xf89(aiw`MolUbzzf66jS&L~IzflSXIg6u>{tF8d0qfRG^@yI?jb>k=OK+f(YLVpSmg{v^*V_L^ ziSTzc_;?S}axf23s}1tUZNDh4ifY^LqPI8=jh7Edu$WmQr65Y^bT$62#wp3%ypcGX zRcT5nhi5ZScend}GLmgQC;%6(Nm>$3T=oO4;O@IfeemfqMDEna+!ai~FrrO%- z7kPMXpefMqT^_#n4rRmDkQc`1UEieH-DYRYW%VgX3T5T_PXuGEKR{A?o^;15?cIXBp!{jsi6BnT5cdm7meV&N_Yh~%y#*(&bx2>w0YY3|>wz1BsQw_k z`uz8BiN3@6w}cxq)~;Wx8YX}ql@^|5zK`=k%fud8_`$vO!!Is-4(43@1u@4Q{8|&$ z+|w}xL4j5V-3-|KT6t;m}TqKXhw=H zpOnmio@NfU|LR@3U9iWTQDJbn*Cn#T?pPaD0H0XY9^jm`Z-z@2A>5iEG)~|kK~o0X&4zoG&nuF zrVJrVzZFBj?2V5`ma@p$EYlyIW+$5D%;f#2s=vM&$7)h(yDVIlN0U3_N&DEHXI+{Z zeN>G-U+ZS~tAsupyB!jwv>yDxyqE@}xsj4|soHE76Nwl#PLb}Az>8<6~&`qo(7mrrEBiXPW*V{fx zR%l>xEpA2NL4W@d7P_^rcibw*uMF!e$-K@ux<@v47hNxR7F!fWmcOGa%RMGV8_Md)A4YB`Z8=aPYwEYY7~qEpLjS_H ztkY|761{yN1qlpQ;@ch)9L zV_gnXE=78nS5`;=X@gR=@0J?iw;0m1Q_AVJ zNCPxhg#A`(9D3fzi3w(aHod#!n&VQ0r|5ZmAY_h--K&HXMce{tiKSqI0}4Vqh1idV zf2L0eJ2a!pj237$lUF7C=T8mH#AizuUN(0!!iaIcOFmd#ndK*6bLbdf39A@L)(oi< z2RZWzAjuy$lCyKNKQl{RVc<^;yA#X;eVFNdulmH1m;Nf=!Jvg95MQdi&vSPEX*AFk zh4*URhxC=yRWRrZ^Q~M&${)k+7M!%txE+2brKQ- zhG|fp0mlbL##TA@dA>(wNkRMR_YFY%#8LT@$*#3A???XNk`_mAyn(96nMuN^yMgBC`vq4XzJTZ0 zY>$B1@2JPLDC)*XE73~NY%R}6UAMQ3e{oC;^X<-R4LPVAAz&gr zIJihZSoMYjp1xv;2BpM&d`m7d&F?F%#{-vSd%@1ZKzZZSHBdrisZs|7h8mPXc<<_q zwdReB5xZYwD@`-JMkilA@cL=B*{@Mk!7$7wZpZdsQzK>n*@Vp^C2bZIQ|^@*&~2%| z6f~1Zy;@De&Uqn=As(}=t$}AgvdjNX4n(V2Y#O_m-Y;L@x{>X-L?8)S4)N84R7~9+ z*S`Gr$E?-0p8iA!&NMN|ZzSu=%zfFp3Rwqjy(g@~_Rq6ZdWJ_!^72>XP zSoHNL3-FtnxX$4_IyK_$NHYZZF~d_T0W9fpBgxvbYFnG;uQwLnERh>O5cf4mAfEMk z@BQT@dfs*O{d``6-2F{sJ#!DQGPlwagilp0)theKG=~8s$0ITbd*+6bUD(|(MV>aq zx38MsDM;tEsRrb$MMbea{PWxkF~~@F*IL&xvEc_bE_Mon&1V4h6lvBRI8sQbhSqU7 zLqQMojXu=gB76KvLO3ql;0&0r92_Mxoga*^8M+Nn$TX?ybC;Vv$?h%Tm{k>i#u;pl zx&12AjPQ7ll!{ZbEC@WZhY)gRS}*FE5|xQQrG-cGY(d(LnzRm+Veb?wY-a8+KfA8m zb84wx&S1UXrg&}IoQ*4h>pi+=D`yDtJ4O@E!K?UnNbC6rR?dk6nsqNV{cs{~ zJ7-GBZ{D`>Hg-girkZHB@F4s%*C6FBsor>Y$>58UT-U}qJw^1dNxh~;&tu)bSB*$b z+f*p@zo9qm5f1rkJ`Ibw&2-NLmpacoOHPHQI=L#r$HR5AUX{UBCtGXk*9_z-S+7!+ zoY4o&)2JVPdl=k!7^y_ZkR5aPdQTv;QIgW|jXM3OG9G_(HTw4IY^5ZauG?SXEKB7sOp?WQjVDKyNf(%_TpA*!|2p^vq;+9@X~0*Sf!MT-e9k?oAxNd(G^dM zblPPkP=H+*>nUkjnn?t7FKnFy(HD#?uNk?BhT)@hH~Bt>IjLRNfgKe3mcn#lm5I$>nRaR>4M|^;^K!Q-Z8< zh;Fx(fx4@-Zopk!D5EGwz1QTyux9!*wR*9pFA@sdO&K2qT(}&5(ca=99qBwm5tJY$1G|xQf$K#b%#Yuo_y&AJ{+~72HkZ5igwP(nNXWaRZ~%cOcO2Y!NZ` zVm#^yV#T-!6U*uIopl`qYB`7DL8}E#t{_R{Cf`dJ`%crK&YyoH$;3awLX+0Rx%of(y@Su+Wk#;?}wS4^%zx`Dv!$NUMWL|?` z0k$))HDH91czIIkQLpSz3g%RaV;zrY-q~EPy5`Nh`Rs~b6t1V_v0PA0;OF!xmx-Rg zwM&j$`l79<_?i)UQg0S?#|as70&WeB|2e)rPrin^ucgL0V`u7(CSi_Wc&w^P0y#{x zlejWDq6hV&TcKIZd+4r86W4KU=O}Jh9^7=Yi>p#*HL%e%T^r(rYe`Q(NIDpw(v#e^ zT+G=B4{y49)_xGZcum$F4Bf{4EmiR$o+CjpJO**Oj9n(4)xmdk-R{WO?hv`i)5r_Y zhwK@YPsU7K8#X`3i8?A29M1a8m__H&c@Vdgh}5Z~*%}n+JR^cHNfrw;4?-CQd7wG~ z5R0luCH4~R7XAtO`onD;=Gn9I4FZaIIW8pm$*9#?K769PKem%s$M2m;Xz#StAMPIa zs)zGzb&=0PYYvV_6~M9|BCGpvjQlN0{H~hPS9N3*AU$-`U*)PWx!D%;*S}&f>6`oW z%i|fIS^)*HX;T%(!-1P(rmCvKdb$rj4v~G%@jZcb9_u5|!C}SAQ_ln~-gXvSR|$Hb z>{`6Gx|{z#v&84l!`p8XsvrIhXN;Hl^uHIVyJ!Qh!vIXm#$86}D}G2OFv=yTtpb+% z*;<_F!`#4b_9ZC~&JI!DN;mc?=9>?%eyuurZ*~U6nooSHeAs*Ra{||Oy`ZfPyYsok zT|%L%#~OsxKY0doEVxG12v+9ogn?Ts*R-Vhy9RmMqr7_D^0KwX_l(Xu0g61(_w zYqzXYX>Uj@KXAZ)6o15?MO?E#7f{Z-jUQ(mksXb_E#!Z%`78(0G1NDc3TyhA2cEjZ@%aSUtF278}Ep0u6R>ns&%XLPoHp*#ng{N zJT5v9HHx2Lb#2{IFMH~~kS9+%PN>lXpL!v1^VxY8cjwfo>Arlref?vI?X_5^n5q+B zO58hYVURYH257nDF`3m~$Lo&1DRc5rbYz>j{4>cuBf)7==N|g?82m?TeYySg(IXxe z7|{%vEF>7W^FHf-mVPt#`{R2ob##%llRI@$lzHR3U5m|jz=0~&%fDcSVOaf^d}g9m zPCgY9PfFeVJ2~p1N@NK@!!I6(0aOf3`hCuz5)<{|Y^C^@q5W5^>37sn_nd3Z{1&W_ z((g+-0lBg&|MAZt!r^6U;l;Uu3Mu>F!dxBj>xh!}AguXx+N72EM^az@ToM_K<=kz? z|AIg_we8)ViQS`Oj~+jGgQ6|XSF#`Z2~pe=LiM9Vkj~4U74`U+b@vz~1V^|9ZU+(L zAaWVMU#Tf$7rp98{z4{+3E0z`)?e=JG6xlG*cGb0yA9g(z0t4gYF>pqz?-GvV= zt%2zJ-=Vn8Xs}%2(3i-D{aX2dvh(P?{ovOg;$1+{XQT}G3x}ixu_qVMbM)KtM zW@nnu;tlj$y}0c=7Xr>}80YeOrX$NDvdhoZymXg>1T<*qpx5FZ4f=6zK7D&DE#vd^xUOd@ZWdOv_(KCW*ya!PWmH zWg#fXp2D4w;Kd@^=-2eq-rj|;;1^Ofjs?-=j!AW?&0~L%2ns?sdQSZ~hWU#VbIoCY z5rpnsiPb|azMBK#-f&`PQ#;e0AXX#SgCy&DZqGwMmGU+pAajFJwAE92mQ zh`nxdIc-V7D`x1+GO)r%TWQ;d+R>ZF+LF$+Vu~gANtan;6X$0~!PxoDeAv-NQUOlS zinMCx_Nl*n$#Ox&vY-*`O09X+3v(Z$A`wZqcBjs_W6%mGE2V2HK4`P$<1^Wi4FVcB zgC*Yg>TgK$-+FY}!Gl{tkan7u&jR0sSAUdlu{m_Q(HUL+39vS>b2-abhj0_Z($1+^NAY;w#t$ zv0(XQYpTcFuZxa_USJ<5!WcJ0aPF9X{SeQIFIuoOd)V~v8Oq+Ix|V$xB5rdKLi9{b zJj(lSp@M5?oZr)M|4?{ZZa>~NePs(9g2r03p8ctuJH42Jhpcu)UR?`6&@b~;ef_vr z6b@|BHz_H={1FoPIYV;!#lYJkcNrAk9YW&yr#IwS&HZ_Y!gblpAv9iL?S7Q$;x|7U z=qvjWDm3C1*v);WUKh}S&#IG@1?<&U%w`D2eiqQ>fz4n`Enl}SBh8dlfebUAGg4myT=&K{q^1F-(S-o9x2=Z;hmyC_`|d4Ziw>YyTD-^qwyRA;Pk);BaC{(ll)U<+ zM@EppnAze-mT2sw%F6J~dmn${OekV8^uL{bW{i#Kt{?|KN68g9tfnKAPZnp%SpRU_YF+CzChUDxy4=W9n4oPB+}P7(-WcQAHI*2_-mwg*G=ZtP&8@7QEg zz$qpgzVcLw!rXUfRO{EAUG93?RgAJ9q6H(6I|Sd;^Jgnyu3L2E$kT=qYvk*ekMOLm zxT)U!s;Oxc7!pO=BuqT3XgbTX?uic=Ic7kTRZYn(lsA)zUabVMQteS_Zud3eq%;CB zR(D8ly9S}o*FnLg<)EzO0AP$JY-oUse$3<@1{raeG@#pw<* z{z}_GoRyOP;lQhTsOoij3g}wYa0>qs&s3@A zB$sDD;u)d&QqX;c97#^sdvR1lGd5O6(I5Qf^1=J7_vv`Psiv}dUhI^LnKhn7FzMB! zehr>22f0b3gAkWhLHmDZ3=~(sQ%hKJ9}(eu6^e5-l6GC4e(4jUtSwi!l1zzW3tJhL zfzpbOm-~MBg9iJW7urx{vmyhqwws?F@$teje=332x!u0v#E^Dci05WT79wzP*sgQg z<8l!RU+ETmS}SEE^rl>HE#rREnrEUfU9T!?Kb#??rz}Z%m3SVv=B0qkx`!nKQ%X*;fNN#IJR32A7*P)fz#a z4&RHKbCPa#mgKr{4_J0q!VlisVVgT4eQ|4N4Ryh!AjFbu6PKp{#*0eeO*(Xr4DK~b zUG&02m!p!Dc0c}8PlPJ!QF{==QKpGYFu;2tf(nCShlJxy5fjJPp_A)GeZ|A6W~eVB zoJrdLsd+=C{OT$Hr)xIC!oH6$;hR2WD%I)1Lr!`trhz>U;f01wYHH;MnfJ%|r+vt_ z(qTmeP%agRi4^INE#oyg3MbjO%ARRTr{fWEAf^_-xgT!kP_ZyUCHwhl1GL*{#JIK= zN9CqnhC$!)EiuRRq4!x-sRCYSK^7ljqwj}h^Pk1wI5W2vLy+{cqf6d_(7N|+KkZz^ zNe55;dpbfwAW&3>^RQngZsvCdhU&&*2t4{6Z|E`Jl&y-8RY0nwcfxwrZzG+_%S!%YIXBKhPxH ztyE6z0PC_6@(g@F2qWTP!5(Mv!^mjfbie;>#D58hCom@yO#gBhoRLblfA`iiwvTkt5>PSLNTZ(|%}NixrY% zc4;}C_6``hv$0*AWG8&xVlho$#TZlBr5|!j-;T4?C3P_n;PoEq?Jl;Zm)(l97iALE zD+e0&5w1+=5NuQ3qNnyum}tKSg??0g_cmS2f@_mBR}$r{-hmdEunB9un->Sw4Z7c; z)0NAXOAzVs(x@QIwGk7=;Z|QDpmIiqEW~!AVfvWPCK6*(XHv9+Ekp0#yIhyLTzRMI ze>RNS@z(f8oO!{ph22QrpQ$$sJaN|MnNHLU@}O-Zh`|@|%FYF0-Ud`xC~cll_#>^v zw*-HRL37CHTNIMZUpF@>{YHYW8c}Rk-&`nQOxXOO`G=jkYH%YWoL-4^?^=L%{0%&6 zBj=^PT=H#E&PY9ph4l7`F7fZM)c61WU3p@m)}m76P|5TBmM(68{oX9ltq&*sbTbW} z%5eS(03~-b!ETK=gO*Nb%)I8l!sRYa5P+7^GM?7%4jmYq@aAc(lA=9~*cQ4+#qrwr z4E*K&0TI2+>+lcyD)c?F4|u7t;y@*?Aki(n6hhTyJ@Fk_i2(P|>VZgg5of5r@V)HL z@ko8Ob2U1ps~MVQkJ*xW<1*Uiv}}*0s@G++Js0v8j!f1uPIh*#DyOHt&FLx8No>ll zHOljhG`S#9ccGF`4S;|6sc)WLm%HOo9lz;*w80qC_2Kql7NYZb3*Qvt+y9hvK`zQ8 zc0CY;KY1*(cuOY`UphX< zbhlB(f||{oKhcEm4LgAAOYuI6lCiaLS#xrO6MUCH!H+U3SH?^ZFYA$cUJQ&^DHBc3 zE~>g!b!*I2*$@2U_ipHLMm>IUbVW*mx_+jLqOcKh#hJTH@!C2iy$B<=;D#{r@A8u}nM}t@t;0vA>jq)-7Re#{1y=zKYH*!?guLW};!& zdmPKYQvku7(LzjGIbd%Lm&8Z>&+k0FL^5@~nv$*P_u(zha=fKehC|-bx!?k?={{UP z?gR-K6R1?NnHYFo1}D{+xaBofEeyJNqK@`-KHC0fin+)&PRka9=4P1%ENy7z>f{cz z#PKa|IJwntma;;wk;?5+(V>r*_Ky$VlC~+gmc>b45S##m;Jpzaz#FqEVg-dzD# zLX4{1Y4}1=V0hI#OiRHd^FW+rsm}5SLWOwF;Z`sxv>F6%+$b?|1-rwQzi;L2x!S#h zRk9*G7hK`Mi7UhGC)reBpUoey!EjWTfuR1ztna8Yrp&wb%e2vz8*HUz)W&;5+agb3sdFxz=Pc(EoJ9)>=~O-IJBVgvt+DU5 z3<-u_Oct8|es^;kBuc;|*Zo!tyeG8I$Vc4J!RVl!?oa(5l%!4&@nJ7~P&97X6t{>} z(TGY4IVqL_A7_t_;m4v?B4ESPGZylX@_nX_^VF~i7%a67u=?kCb>08Nqe(3(PpokY{@b%O8~80OkMnToJk+4#8C&9( z$|b53deiG|aRA|Tru4yK5($??loOr%ZgX{Ss+iR<9dw$z~H0!dCj{PbY)YHoK(VkP-=he9&sI!atgZ zP{b-q+K(vV*rVw}TC>FDgY^Puqc8Aj;HTuj-j7A6ZC`{cSRR2U-F9U^>2lc`m>`e3M+Cx`jR0we|FfGap9tqMfI z;x784RXz}oSoIg|7WNYriKky@QoB||b<5kLUp?n#j{nM5ZpHbW>3&ay5w!7ls57?G z2s0&C*glt}A*U6}GsAaue9wOoQ>l2Y4N=u%s%L)9AJ4${@{2C#OH0YdM>V!h?n+j4 zY5YTdnuT9F?E^kh$$f=X2l7+N_+INhL8@58Yg8^jE%`1VWXX=gHVa{AQDv}c=&M;g z?j0vX-C|&L*yXyQX8+C&1<}2WBHA55o`C}Z!iX{w#tMwWHHBVm8cml6ap>03kMgt} zr}1nmadqETJF|q1hl+QB7{T}0yyJuV;HG`Q4|KFFi#|vt?)sfZ?DD-869j(#dm%{& z|E%9YMdP@jX`RZz_+^2W@eMZGb>1LSDHm=ntJSJb`Rt;5RCG&;rttkAAeh!W_NL;a z(4+5JrrxW-+q4Igui&=a+;k8R=^{@K`#9d1+e6229bH1_Agc1~NAEphU7MSWD!wZ@ zRgD{Ah_4TmBrI6JKckt;*KQy8sA_E%$~|o(!vnfyX+CtQTJWD;32dl;#<-TO?!E4* zI9RkKON6FKo$}siQ$!~QWSM&QcZSsW2S{>$%UgPs=Ir`G^e?bCY8d)WzaOpzcDuj3 zyt9sFE^@+uw4$mpL#hYBNmH*`%&MEbHjg#>b}z?5CwVd}p8JZnw`gaYdbjJ3l9v78 zC*6|)^5t*;OayMPr{7L_Gu!HU-#U(6(t~Hm3Y?~C{A#i!!4}eV25{tZNR*qICnhq2 z)BBKjc)K&otzk-rTBoC^#?CFq%?lraX{KAZH}J9tF1Z*FF4~92K+kJ5U%KIEr3)a} zA!^ddT+nvFT}0cWn|`8jUDqb6^kE_JPvJK z^>KY{WWjA8BHWDM-D|L6=ftEa9WVMp@FEgP;wcXxWHt7#>caL_QKpLV>zoWPYEW;X zkSEh1s^=RME5sf_(%Z?bjW`BI$4AUMY_iVm!Dp~1P!Ug1nH{a zA|ZGjj9sK808YKfok#?9(m{4nit284jh*vZHDmK09~#!Hp$|nCH0?hxgj&G^M$QGU z&f!-PdAJy{V1ntc67jWIo{G;)Q*v_%R^<5BjSYz($j_bikhM@&LbU)l^%9M#N)F~* zdR#Nwya|V;Iaj#29X%c)W#YxGgPZqzPQK$gc%?CU?v+ln8An_G@d1<{+Zmk{gii2V zJ@r^{!SJ=8#_7vTa|LdHS~})NYR$BVZ?;|@CoC*3kcqCcL`_Nr{zM*-;6>q*SFcEV&(iJu)JC9LjU zD2R3bXYOGm$p28XAf)dT6?i=x%H_FTQ@7-LxnH}$O)4q{_D0EqbK$_=B#@i`K1@UW z{MrGDlRA!yqU`A0{t4b0`G^W^y)|Tvgkcx|)smef^G)2m`j}U`vSSsSA$!Xt*%RRD z{``9R)oUhuJg8qYX;Zs6jeQCohJ|2sG3!bntCj&`%9rc8*86Y#V8O1KhTnta{HH$? zR#i8j6tStN^4@una*I6I%d>s$MG462eCXygVVf=2-5JZeo2D9yj+Iik;RGfBQSjYy<4e2%lmgGGTV%| z7kjdfU*&S&Eb(GB+2g;yoE79U?&_ac<+4|1j`IFdj?YfXrY7)Jc& zml!4$OgC*JE-eXi-Z_~$3@Kgms1{x*=cU-<8DBT19G5FZSc-%AD# z4fq9)wR!t%bLxVR8x}(R;2;;!zP))rQ<6qdxxh>YI5bM6Zh7mV3F&3QCu1W{`on1^ zmk$cU@8Q;XS_dnd8hBbw+259RayiZ{`67ZxTU?u019RwlnJCb6MHN@RoPx23tepSU z7~qpyXg~S5kYH-C+2=9LR`@2ZGaqCJ;i3H2FUR8EZq?%-E?epTIPo4^t zX_fUP;t!-{k*-65=!VD?ODWe0c4L&{@zmYD#4?q=fxnoIS?ZyQlP{w>85x;eo4?5V z-?WMIc}m_}z~v&8oYG=)QMH%cVgWlh%e}Te-wB7=xZk}J$QIxnY(W2{wR~DYNw=cs zm;ttm5yUU2XmE9M4d|;}`IGRDlxXm3)?D{mEIg`ugy{C>)?K>9VrGiB!S}qzG+IbZ za%7(7_~mhf*=Wu;vJ1|~a_j{m1B(rqG4*nGYWwE~VQl4GdLWJDDk&rNaMf#-NgUOA zGBiqNf3u%=ReaE{8L=euJ7_*{Le&q8Dmr(v(_Nbb-koz+H4gd!lK~ubNLq_^qPNlb z!yCRzw_#gpPL_78CuO=pKY7bT{TbCho-*#BF=&;$$rW~ZB?#erX$Cl_jtps+s0Lc; z#lQunblFAkg%}WVNME!u?=dSCoE1cj?@Rsw4fqyyJ~0D77KELT!iaT(gatu8^ZM=O zS+IO4rQuYByGSc>|9IW6;-GqvVZp`c^p7lQ`@OdO-8*yM^Xb~6gYe{9Up9@kI>Hnf zewr_sdX|JZy~5cU2BQ~fZXOH$o=;lW*1Ooa-z-%S+;_#C+%bGq!Ha&K4wSb^C)O!2P!o!M|`m0xSp-B zxrf}Vgu~Ugnqfd+q0dd?YsI#pxq?r|^G@X6<$Lt7(_emE>j4}#;M5(qZC!W@*3a7D>6AZhY6r7EaHh+ z*bNh5|zawrq}6k(a$UR`9-mYheV#Z*VbKDv-<9Mc75Sq|Qsxa`Wu45N3Kqj6MEMsix2qlxmTBij>GRHqM~9 zD-tD7<0&Y>GNcyUl$*MG!mW5fCEy^pzH%}T+|;(rYrVMg zZ-92O+hkl5tJFCRbAMPOxD+iXT)ehWzX+N31T38M{Ifkm1=f!y5e$i^)})5BM35iKCUF@LsbRe=00^g`GA#G9!Rv6!gRl6gX&L9oKA;0=wZFn&2{g#_{xsp6=GrRZA z3)HzXrs(hz@1^6n=n>QsH#+P#qg$X9$q(!gd49e7z@%C;HH~3s(2w>TX`-;3F2`xd zuq$$w*gfNMm;1rP!O%hm(q?tgxQn_I)yvmM$8P$~VX_3_acTPTnbkFDQPOyC=F2gD z`>$VVO+tHre9<<>VdQ`)hO4kw(((`^$hP#FHf!69N_CSL+dGtfSHEP67I8<}doYA? zh7-6X$)Yv9G&9Yro2%unkq_ScJC;cK!`Kj1R*vGM(6<;FDbdTg{?3lL%Hi^R98eLV z{oSm~Fc|)>ony~~9=&XdVT8!5Ar~*#{7lkAZ<|4TZ@lJg_N$Yv(TuPu6lqb<&b4nb z*>c@MykaXKU|{mZowCfZv(7alJ&9a{3>p?PNL692iG)3Bu*cdHS^iKU_2)1oShJ~0 z&p1nK)R8-X3kMLhOw5u#yHe(g>@1WuJbnP%Jn;o5tNCGK;=48Z(F#Q{nA^BfN+s}h zz@CWg<<31_svn}xSGcuVi?p*_-vfByO$3m%4Vk&g?{%WcY@Zh>5!W^rWxYc#C-BIW z#T*ozF5wLvyGYYTh$dMr$+5(9sMuLA=S4G`9G4*7j#xExmi$pwqtNwVVA5adb(!qb z%q-W_64p`Zv9?{y>eHGMw_7B2mKWC1Vw)0OFMAA&xD?U^nTB!8jE?~rWJw%dpH12?~ zW{k|kp$i+fE=i_wlv6CL^(h%(@by!zlJ#F;ixkOKyTB zHnGVn-64&HR0KD#ZY{{gwVr*<0z`VWu52#@L=`nOtaaj?# z?h|2?*7wR4vF611ZOt2c&ZNa)$0J+Xwa@lXW@oRnM=trH%@SiISLFd|c zr$oe}8+wUNzLb05n;=DGQ)qR^=*!}zj;{vixDNeJ0A$I8pXb6IzA@nG4nLpC`g+JPnra+Ffq~0QEnAq`2K$ZnLruZdZ~AIGjw=jIDtZ5l|hy zsAhqVtpacGrDynefkb{6LSwsc#vPdewL(#6Uh}YhVkvNW0C!4xAu$^vS%7~;1v)z7 zGe3{FSBaa+)wplIV=HvM#SNORxS~3q@lcYEgGJz+f1F#4 zg2^NV64S8vACzj3MZPw*CDXEJZG6+vYWHE7b{5~n{5IW3g`YD{t=IY5uH5H%w{|%W zf1=-XXa$w&mE5Qs9DAyUm-z74#bmVi(W*yntJI~e(dMB^Uun6&g^AyYDq(-{tR%;- zjp`!vOHq19UPk7>%eyR9)b`@~VN>-|*op`T{9(Oz<8zzqf;?iH&$9ko@h^|#AErr@ zZ915DIzt4_7)#1r9z2!hK8KNxn-DnsgrcZfP2kiT-XWo*Ywj{WUnyvKH!QoxK5g0| z`HHsKG|jf+6{rnHmHEgWAB$aC?UebiZu}q!by}k>ng=F{c43#BHev^1R~~ccsH6aV zZ`M$reC~UPBc32Y+&w=I`d9mEozx=Qy8T{JUNniVeSL?1211)uSS)+@CN3NeLj(M> z0zh&Am$lv_;7>AZo5iUlgHUvFu+)q{Yb-B>Sp2SoECc9P&$2Sb zPNChB8XOEDS&b-{?x?-vNPi2TJR98GR;zRN(n9D-b>*B@4_!vGoTS}I{HSBA`v9Op zys0#Hd26k^2BbW?-lh%%@5u2J+Jw8Sz1W!rCGly#NT0VKA5WHx%^1)Jd0>^X1yvY< ze`E@9VeXq9qZ^Ma6ai=ECA4DFR}tlpXu+C=%zYIytXMlThXGviauB+9VPDnVxpYV^ zwmG`TXA{;WoDZ(|PkfLhkS_1_+2~{Q2wzV;SCAMVa4!vH2#GZwma;FQOx|CqGnA!i zRkUf^_q7NDCSWLw3vtQM%y(`yUo4Z-ds>gPnqLI~ke^4D&k4@9oGl|`g+y~Dku2BD z{y0wE&Vneo%$H#J7Dayj{nq4we3Nv2?)S1e`+JRVv?05QvgXx`y@SEcI~(IDnE5+Q zO>u92TlNk1<{TWu(-6Bpl_y%tZ+wH<{O#RQ&XzFDLQ*A6GkZv zlh_;V&@MfT9@rMQ%P~g%^Y*rSnp`d{N;gTtX0o`TVXll}X{{bPGOtK%yc@>XlVH>n z`}bFGOX7@iv#0gU`2)QuA+^d&*es(Mt~&y=E*EZw8RYn|xrZ;rI|F*_f~&OG$YOw0 z%6Z0dIX#I#|*`)g-XKsQ%mXA}|G0USY*FBS;*IYn;rzIUe9xz5+!TT(AP7?bXfh&jfh!1I%@p0!ByUR(IvWZhW~_g8i1Ig8d$Z&I#h_;+AMPI9oiYfL+!ynV(w4 zLi<;v@tY(90q7SG@x**Jw=!hpn7Lb_MznDwzr|7c;p{eZW!!99cpXDYw*)sp7s7FW z(0J6ZvbZPsW1))k4nuhGi4enrZ?17FW+E}dX2cGU@BgMbvq5iu#rE*_s}RUhOehwZ zGt&fg70x%({zW!s5Ut1Q{s7(&%qZsxZqRiqFzykK=?HN#sj_v5)Yex%eU)f~4j2vM zmyPF3Qo42dk8VxZX#Z#8t*e0*9@@U?%uDhdNPlw6iO;@M1uAS>@7|aFd@SP2AgCl* z>Vw&TmtfagiDkws&2*txA1;#CRTfklI__0$6$cXgMT^%)*xh7@lMK|I3)0uv1qn19 zZk)x3ph}50f-G!fLZBK`mC}}!{0U2vF0i2vi+?03c@I<&LJ?f^aB+tfZ!5xG_W8?D zNz_!){V`l-guYDPTXixAu_a8%#GM1}@0gRg@IPN1|2r5v>NtHx!6{mnz`;jZvw_$8 z))GNsYh*nb=50E0r%aU1*`WEWZy{-+<9gJ}7o||LmnE0@$9L`+m&H4=&?gt#(c6eM z2k>A##>%=r4Vnwbcg|fMx#uMtN3&u}_QlF;`o_ap?Zc1zq>*DrUF+(L$o5;bEP|gW zoKv4Rg(#^1q6K--fdlb*Ca%OvgHh-?2WdwHM!+;=!K^n^6{qRS-`1}b5DL6b-cU6M zo`qEA{6VKko`sw*AkGgqX zFb$M{bUq42HzDRc%YIs}f0v2_a~XUCkX`W*dtj0k|gi2g<4*=q?{N6J)t4aE5p|DSqEWr?$0HdS~aOT-#>D1)LBOc zi6+uzdi~cF7$;&ELU6JNK9D)*n&DD?M0~Q{{kLD4+OrTYNy-4iZdiN4sz<>8EA|F_ zwXqSgYY7g5V~P*MCs5bNG~CSJpoWZV3Xd26hwlc;YEUzy7uP2hPv%Dd#7SlIC5Q1G zjYUS=KBJd*o&|D3fy)iZJl_E%pl37!kr{ICQ0`44lDv8ju+JUDd3tG_tGnrHw}B9d z%PrjY8Tgmor3d3^g!uHYRfBJlek-;@ZwQ+(GtwmqU&F!bq5$1sOC{{F%W{*J(Oe`f zB6t{)AA|}Tk;k%P#L?Rx2I}-fmE(_GN%zP=FAMVa1F!N_!W~9}wX?*`YVoPs>n21N zU#v0)*ysr%P$R1OtMos#uKn7vU==p?JYt1Q2doLeu!*v8AT2if-4nBRX?46=FBrVL z@pUi@eu_;Z_5ta$*-umjmxTX8uO&Nk3LzoG0~r)Rd&d(8X7^=AvHv6kPx2PfzdeVR zo6y_vhtQwuKcZ?mLj5jj6W!q>ij>Nnh$m>Lyr z+L|o997vEIO+aOXDVv4;f2@Dvbq(HXw|mY*VA)?<_n<;n|3mz7>q(Gie@qO`2ye){ zp7wCBc}alPP6|d@A2$CUm0OSR-E|wFZwKMqL7aes%DGSce{8*FSR6~&Hj29w+}+&? z4#6Q19D=(AcL?qTch^A^Bv^2lA-F?=y99Tc)7j7Sp7ZYWeSf&-VtTr&SFKuBz3zL9 z<8`a9AH#kLeM@iBcOg>z*%aej>hSad1>}OF6F&h#`Jr)E)lV7pGx(Hb{T{&wP;z@$ z{*(S;KpDg!50jWexG3^%BI@GIjb87JvAdj4dWVPDCo>|@xO4Z&>H*+Q{_=p-yFf1Q z8IsHA*#IZ~ag8I1XFQpq(Gtp1vuqc!olhy97hgB=vzFp8Y)cb1;|MJ9=F5KWT|GdKh@9u*!Y%XcsV@)D}xr*RPoLB!;W)$o0U z#caE0yn4IXd)7*aCz%v7WYjL8Wt~UHD;8d$%FZpY81hJjJP9pWxQAw zEd+r9h^TFR1eHJOVFZ!sph_*5P_Zh4T|QWma5Lf?%jmuxjv2Hr-^_vDd&Ohn zClz5ltZJC zrnfP}tDWqhvaH=z0MX{Q|7lB+zNsJXo*+)uqO&yJ;L+%5{J%bgTE7@6kLL-x8vzSI zfEO$gyEmbZ$V$?#@p)pWTklNVkPx4qTy_C%${?%Up?IZ@JhFQ+#T77tOVKeBjg6a9bclRdZYCpDV;wNR%Cs4Y<|V?YfGvs3#GLJ8D)pJ7 ztTNCbiuZkt9bvF}Qv9L>_xw%N&26T-jqJD4a%`5~3-0ByQ(OdcgiIcUcP5TazIk}t zK@{1lT7uk3WdQQ~PQcoJuApe!Wnn%fx=5jL`Hg$5!_lZwO=?V42_5d}bkKOcH>B#J+WPauBgv;?L4L#BBjd6g=i#@}z*H8|rx`3hzuWY?$ykam22zP^MAS-< zfPwqXuqwX$P6$2CU(&6 z>PvP&cf@7SrHwY-SUUSn2FC>oV3=S>&quldsEj4=I^>Zd^KiYeqzgAP+Vb;WCxIG6 zpyy*KUnmJ1M%iZec>+V%;AW)^Hk5Fx=4@s&8@fBW$3!~4bBTERTSzC|ki_Y#vTD(H z$Z8ZdiCAQm9s_BaU0tP9f0Sw1AsDeyRRdyAo_ zrpf|pT^D#DfQ=qLYs;geqZv`>R673-8rQ6{i#3Ji3bi;w(%=UvB zjlzTht=n%d<_EcY$Wg9a6^=jaJQtHCXTBR@uMtl+1u9Z`SwUe2@(ku-j@dnvees9{ zM&yW9iZS{IRZx~ThoUz2;<@}HyCE2nXF~^Pu*!MdJjxLMJ69NN*_X87VLfA3y^i`u zlk;|57qtMlY>F%*T_a3eD=0jvT6ICtjXvQw2l-TyxP=~|C`t638jLi$WMz6&k1&zX zfBSy@7XJaUKTXFdV0&C3Coo{{1xu1g!fY>Y+-t>USnf(AR+OCX^KpDQ#CJxHVaI9m z8+zP!HS7$iqn)7I9I5!`HZY7Z7DtZ4AQ+y=A>b_Ybsn}lXO@hk^Zwx&8@77oNxb%0 zq-~=|5UXx+J6D}sOl@jF-!$4I6PglCkKZ##Vk3aE%D;V8t=-eEb!B3na%5vRnxgD( zDscXsa!4bNhEF;5Ubqd9hlbPcnvp)XpYggGERo~PDT6-JqPn)4J=(m^9g9WS*uTK5 z@IfpySd~50!mH-I{xr%H&t}Nv)Xv0^*PEbxnl2`e8)wHM%adr8*x@K=_BkEy=x9y? z&rHK;#@@8`XCkA|jV_tA@;o|lki_V6T@SqW$Yc}=W*en{h!lbNpVsgQxU-4?m~7b? zy4vpUL;M*kaD2LYQ+C;wS|{hXFmRQ&ms9r5RH0@U;kC*fx`PX7<5&&+{sFS~xT`7{ z77GLhnX01_E&608j;Wfpy4gs~Sg{Gx8~|;v&ZtB7z_EV6>4mALnLSxsy{^Trb`_QM z2HIvGOqUY6lUo4dDx0)yq**Rm2-txGV3zmWZCCvgi-#B6?Yaw|KJ9KsL;j^-BczRv z)`N(Uj0?K{Rz7%aGMzXuZClJ+gwaz8QWxa3l(hW`Md`z1rsf9?!^au_pV__(16WhL zcs9j*UMCU9Ju;aaUaY8^b4W*OXg*m>nhMjw{&*P zN4@}x_5YeO^F#9H|2JjphXzaYq4>_jct6LP{*U7pte?g9d9%_?PhoDsUSyBoqixmd z@59^v`QTKJN@6-f2U7tdn8eK zx@RhDRf3@4$HEZRdYkyMUN;?P?4<36Mz>&E+eAR1ewOwW)o$cQg`B${}s~+E!sP#%2ngMQ$fR9tDCQdwjzqy8>Ahj3`_p%8O&$-9%fLE7! z^yy?=BC$|ERjV!CHut&+8H@HyL90aGG?jhTz%_!TcY-Ex3^-n2pASvsru`XB&V8&Z7a$(lSiHz0E;r&MRPy@BrZAIhG4^0Kz1J>i$O0n-+Arm|+7742`ebI{g6Sk!m*4H)WygFZ z{Wh`jQQmAZkv1KUb+V}am=amnabGDJ$wqnxxqEC;LRi<@kt1a<3(g<)gEhq5)m0tFK^Ll)CRAlGDT2T5SpqkX?JeZ9>t;Nj0 znASjM^%;qL=;}Sg7Z_4jG49crw4G$Jr7Q7X!NM^C*e2Xz{7||g7KPcq5!@t4X2h>p zg%Te=M`>AEWvA-Xa#{=BZk3cHGiw3W<(Wn$@{LSHmh~5^87po>LJeG~%lI$mb}7t3 zNnuoKqIK0V>DZUxbFvB0lX+AR1=K-buC8foe5|D^VUBie!DVI?)gV (074rR;+* zLMgl;lha0g5+Yta>`!SYFUmnq3s9wQurC=XX!5a84(d>s{cXjwKAbx=X(3c3J0IVt zTTBdS%wL7)M;GCWtRXS)3TtIW72MyLOm9H7Wg@BG9GTnBu;>ZV?e^Y3XT*-vOY7i; zI`QWSx|`ZF{X`3O9bu)c)&ZDlXQpU#UPBV`j`DTUc`6WZ!Qv7 zQkl^fsdCN?P>OAvE~0+b1n!I^n!%}DLG`zDmpr~WA;IK-rf!(us8FXk%Q%IxvW8-DJn9Z$O2-y2|8S7be=m9AA*O|hSbBi8Ed`}UJ4-UBB) zTRwhGVxjf}bUPunABimOx<&kkY7?sx3SoT~Yp0K{K4Jvr*a7{=Na83D6sChNvesAi zQmP+ep%PZ)iI4Q(xl4`)N8WT$PcKqWE{&%nIC_88q6Nn`O-R_eiZ8NC1(juCJc;-( zFbs#6K;4N~?SXF(E?PrHA0(c{H$LCqASD=^Wwt@S_u^G7UhF-~pFyTAQ}3YuXywBm zyNC5lCanp^1E5cvf3i5QPvv5{BRGYHXt)`Q3ySx;B=dw(>hKW`RyM8@*11T3W?4YV zQP?+|RT27sUmgIcpxNJ98Ie&m3XY@jf?Zs~4EI>kRT`Lrs9+*t*>n^{CE(ZD=y#zB zy)ChS84;gX7X*H=QLW+p80j#OjSC>XZk3DBo5^#9fP8{B4YSm{t0%?7LD%eP^gSKA zv7Caq7$H=LFz$yzso@_AB>ds;_qfVoVrLgee?e#KHrIA_E?8*_1^x6~=EcOI{cOlq z<1ds}l)UYCdRmp7%K^aJ+e$J)8`|W8f|0=35wOKUIv8?Y=@n+ScCk8oAtT8K=t{WB zMx^a=GgLB>?AKO7(Q$e|#Ny3Z6M5_Um`ErpI8fhgFb=t}%B$fvRu4!Sq2{8hncpWm zK*_myy!)oT&W2;mrHxp~g!n;pe1@fPIs6HFsti^U2ry1nLp*`#@fy<)N z`3r1Itc5|z^IF&tFfW+Cj;%>)tZEsx;}`*u&JMvSz_R2vTm(NhP{N1Ne7Y3GhnZrJ zzcHcCad~$7?6@dtiO|QhY{D5y$I|$7W$dz!VZnl1*vL!P2I0Deg-+-Eo^?X2v-EAFyMSd37RTeU} zy`SJ1+1fRoUK*@&-yiTgnu9=l(6LrhJLq|}U zZJQ#O`vr-nO7u>mOg4&x0_8CNe)Yl;u-UpR<&2`V> zapN76!bM*QMpF-cR~Y)0-JvDJN(g+Cd`4e{BRegSV|edADqXDCWQS)Fo

uL&WRR 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 NarS7N9;rDVp4I$D8mKA$58c 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

RHRv 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 Ub)?7V6-9sxZS7=LW$AbAKOBWaIRF3v literal 0 HcmV?d00001 diff --git a/doc/specs/#11000 - Marks/vscode-shell-integration-gutter-mark.png b/doc/specs/#11000 - Marks/vscode-shell-integration-gutter-mark.png new file mode 100644 index 0000000000000000000000000000000000000000..d73a5c7b14aac789859af5f7f3e6cfbed49014f8 GIT binary patch literal 38829 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

cSU;aD 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 z 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 entry to the menu, to indicate that no profiles were + in that folder. + - _This setting is probably pretty niche, and not a requirement_. More of a + theoretical suggestion than anything. + - In the case of no entries for this folder, we should make sure to also + reflect the `inline` property: + - `allowEmpty:true`, `inline:auto`: just ignore the entry at all. Don't + add a placeholder to the parent list. + - `allowEmpty:true`, `inline:never`: Add a nested entry, with an + `` placeholder. + - `allowEmpty:false`, `inline:auto`: just ignore the entry at all. Don't + add a placeholder to the parent list. + - `allowEmpty:false`, `inline:never`: just ignore the entry at all. Don't + add a placeholder to the parent list. * `"type":"action"`: This represents a menu entry that should execute a specific `ShortcutAction`. - the `id` property will specify the global action ID (see [#6899], [#7175]) @@ -97,6 +125,16 @@ There are five `type`s of objects in this menu: enabling all other profiles to also be accessible. - The "name" of these entries will simply be the name of the profile - The "icon" of these entries will simply be the profile's icon + - This won't include any profiles that have been included via `matchProfile` + entries (below) +* `"type": "matchProfile"`: Expands to all the profiles that match a given + string. This lets the user easily specify a whole collection of profiles for a + folder, without needing to add them all manually. + - `"name"`, `"commandline"` or `"source"`: These three properties are used to + filter the list of profiles, based on the matching property in the profile + itself. The value is a string to compare with the corresponding property in + the profile. A full string comparison is done - not a regex or partial + string match. The "default" new tab menu could be imagined as the following blob of json: @@ -108,6 +146,42 @@ The "default" new tab menu could be imagined as the following blob of json: } ``` +Alternatively, we could consider something like the following. This would place +CMD, PowerShell, and all PowerShell cores in the root at the top, followed by +nested entries for each subsequent dynamic profile generator. + +```jsonc +{ + "newTabMenu": [ + { "type":"profile", "profile": "cmd" }, + { "type":"profile", "profile": "Windows PowerShell" }, + { "type": "matchProfile", "source": "Microsoft.Terminal.PowerShellCore" } + { + "type": "folder", + "name": "WSL", + "entries": [ { "type": "matchProfile", "source": "Microsoft.Terminal.Wsl" } ] + }, + { + "type": "folder", + "name": "Visual Studio", + "entries": [ { "type": "matchProfile", "source": "Microsoft.Terminal.VisualStudio" } ] + }, + // ... etc for other profile generators + { "type": "remainingProfiles" } + ] +} +``` + +I might only recommend that for `userDefaults.json`, which is the json files +used as a template for a user's new settings file. This would prevent us from +moving the user's cheese too much, if they're already using the Terminal and +happy with their list as is. Especially consider someone who's default profile +is a WSL distro, which would now need two clicks to get to. + +> _note_: We will also want to support the same `{ "key": "SomeResourceString"}` +> syntax used by the Command Palette commands +> for specifying localizable names, if we chose to pursue this route. + ### Other considerations Also considered during the investigation for this feature was re-using the list @@ -154,6 +228,42 @@ The design chosen in this spec more cleanly separates the responsibilities of the list of profiles and the contents of the new tab menu. This way, each object can be defined independent of the structure of the other. +Regarding implementation of `matchProfile` entries: In order to build the menu, +we'll evaluate the entries in the following order: + +* all explicit `profile` entries +* then all `matchProfile` entries, using profiles not already specified +* then expand out `remainingProfiles` with anything not found above. + +As an example: + +```jsonc +{ + "newTabMenu": [ + { "type": "matchProfile", "source": "Microsoft.Terminal.Wsl" } + { + "type": "folder", + "name": "WSLs", + "entries": [ { "type": "matchProfile", "source": "Microsoft.Terminal.Wsl" } ] + }, + { "type": "remainingProfiles" } + ] +} +``` + +For profiles { "Profile A", "Profile B (WSL)", "Profile C (WSL)" }, This would +expand to: + +``` +New Tab Button ▽ +├─ Profile A +├─ Profile B (WSL) +├─ Profile C (WSL) +└─ WSLs + └─ Profile B (WSL) + └─ Profile C (WSL) +``` + ## UI/UX Design See the above _figure 1_. @@ -289,12 +399,46 @@ And assuming the user has bound: - Close Tab: `{ "action": "closeTab", "index": "${selectedTab.index}" }` - Close Other Tabs: `{ "action": "closeTabs", "otherThan": "${selectedTab.index}" }` - Close Tabs to the Right: `{ "action": "closeTabs", "after": "${selectedTab.index}" }` - +* We may want to consider regex, tag-based, or some other type of matching for + `matchProfile` entries in the future. We originally considered using regex for + `matchProfile` by default, but decided instead on full string matches to leave + room for regex matching in the future. Should we chose to pursue something + like that, we should use a settings structure like: + + ```json + "type": "profileMatch", + "source": { "type": "regex", "value": ".*wsl.*" } + ``` +* We may want to expand `matchProfile` to match on other properties too. (`title`?) +* We may want to consider adding support for capture groups, e.g. + ```json + { + "type": "profileMatch", + "name": { "type": "regex", "value": "^ssh: (.*)" } + } + ``` + for matching to all your `ssh: ` profiles, but populate the name in the entry + with that first capture group. So, ["ssh: foo", "ssh: bar"] would just expand + to a "foo" and "bar" entry. + +## Updates + +_February 2022_: Doc updated in response to some discussion in [#11326] and +[#7774]. In those PRs, it became clear that there needs to be a simple way of +collecting up a whole group of profiles automatically for sorting in these +menus. Although discussion centered on how hard it would be for extensions to +provide that customization themselves, the `match` statement was added as a way +to allow the user to easily filter those profiles themselves. + +This was something we had originally considered as a "future consideration", but +ultimately deemed it to be out of scope for the initial spec review. [#2046]: https://github.com/microsoft/terminal/issues/2046 -[Command Palette, Addendum 1]: https://github.com/microsoft/terminal/blob/main/doc/specs/%232046%20-%20Unified%20keybindings%20and%20commands%2C%20and%20synthesized%20action%20names.md +[Command Palette, Addendum 1]: ../%232046%20-%20Unified%20keybindings%20and%20commands%2C%20and%20synthesized%20action%20names.md [#3337]: https://github.com/microsoft/terminal/issues/3337 [#6899]: https://github.com/microsoft/terminal/issues/6899 [#7175]: https://github.com/microsoft/terminal/issues/7175 +[#11326]: https://github.com/microsoft/terminal/issues/11326 +[#7774]: https://github.com/microsoft/terminal/issues/7774 diff --git a/doc/specs/#1595 - Suggestions UI/3121-suggestion-menu-2023-000.gif b/doc/specs/#1595 - Suggestions UI/3121-suggestion-menu-2023-000.gif new file mode 100644 index 0000000000000000000000000000000000000000..da5f0c4f663effd286138b6655e423d2bd85cd00 GIT binary patch literal 599320 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%0AP4_Q!W!S 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

6R=@}_d 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