Implement NET8 server but without packaging capability.

This commit is contained in:
Burak Kaan Köse
2024-07-19 03:06:01 +02:00
parent 0cb39d41e8
commit 756cf5992c
22 changed files with 436 additions and 55 deletions

View File

@@ -30,6 +30,7 @@
<None Remove="Views\WelcomePage.xaml" /> <None Remove="Views\WelcomePage.xaml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Page Remove="App.xaml" />
<Page Remove="AppThemes\Custom.xaml" /> <Page Remove="AppThemes\Custom.xaml" />
</ItemGroup> </ItemGroup>

View File

@@ -56,7 +56,6 @@
<DefaultLanguage>en-US</DefaultLanguage> <DefaultLanguage>en-US</DefaultLanguage>
<AppxPackageSigningEnabled>false</AppxPackageSigningEnabled> <AppxPackageSigningEnabled>false</AppxPackageSigningEnabled>
<NoWarn>$(NoWarn);NU1702</NoWarn> <NoWarn>$(NoWarn);NU1702</NoWarn>
<EntryPointProjectUniqueName>..\Wino.Mail\Wino.Mail.csproj</EntryPointProjectUniqueName>
<GenerateAppInstallerFile>False</GenerateAppInstallerFile> <GenerateAppInstallerFile>False</GenerateAppInstallerFile>
<AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm> <AppxPackageSigningTimestampDigestAlgorithm>SHA256</AppxPackageSigningTimestampDigestAlgorithm>
<AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision> <AppxAutoIncrementPackageRevision>False</AppxAutoIncrementPackageRevision>
@@ -65,6 +64,7 @@
<AppxBundlePlatforms>x64</AppxBundlePlatforms> <AppxBundlePlatforms>x64</AppxBundlePlatforms>
<GenerateTemporaryStoreCertificate>True</GenerateTemporaryStoreCertificate> <GenerateTemporaryStoreCertificate>True</GenerateTemporaryStoreCertificate>
<HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks> <HoursBetweenUpdateChecks>0</HoursBetweenUpdateChecks>
<EntryPointProjectUniqueName>..\Wino.Mail.WinUI\Wino.Mail.WinUI.csproj</EntryPointProjectUniqueName>
</PropertyGroup> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'"> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|ARM'">
<AppxBundle>Always</AppxBundle> <AppxBundle>Always</AppxBundle>
@@ -157,10 +157,10 @@
</ItemGroup> </ItemGroup>
<Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" /> <Import Project="$(WapProjPath)\Microsoft.DesktopBridge.targets" />
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.22621.3233" PrivateAssets="all" /> <PackageReference Include="Microsoft.Windows.SDK.BuildTools" Version="10.0.26100.1" PrivateAssets="all" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Wino.Mail\Wino.Mail.csproj" /> <ProjectReference Include="..\Wino.Mail.WinUI\Wino.Mail.WinUI.csproj" />
<ProjectReference Include="..\Wino.Server\Wino.Server.csproj" /> <ProjectReference Include="..\Wino.Server.NET8\Wino.Server.NET8.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@@ -3,14 +3,14 @@
x:Class="Wino.Server.NET8.App" x:Class="Wino.Server.NET8.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:Wino.Server.NET8"> xmlns:local="using:Wino.Server.NET8"
xmlns:styles="using:Wino.Server.Styles">
<Application.Resources> <Application.Resources>
<ResourceDictionary> <ResourceDictionary>
<ResourceDictionary.MergedDictionaries> <ResourceDictionary.MergedDictionaries>
<XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" /> <XamlControlsResources xmlns="using:Microsoft.UI.Xaml.Controls" />
<!-- Other merged dictionaries here --> <styles:TrayIconResources />
</ResourceDictionary.MergedDictionaries> </ResourceDictionary.MergedDictionaries>
<!-- Other app resources here -->
</ResourceDictionary> </ResourceDictionary>
</Application.Resources> </Application.Resources>
</Application> </Application>

View File

@@ -1,32 +1,87 @@
using H.NotifyIcon; using System;
using System.Threading.Tasks;
using H.NotifyIcon;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.UI.Xaml; using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Input; using Microsoft.UI.Xaml.Input;
using Windows.Storage;
using Wino.Core;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Services;
using Wino.Core.UWP.Services;
using Wino.Services;
namespace Wino.Server.NET8 namespace Wino.Server.NET8
{ {
public partial class App : Application public partial class App : Application
{ {
public TaskbarIcon? TrayIcon { get; private set; } public new static App Current => (App)Application.Current;
public Window? Window { get; set; }
private const string WinoServerAppName = "Wino.Server";
public TaskbarIcon TrayIcon { get; private set; }
public bool HandleClosedEvents { get; set; } = true; public bool HandleClosedEvents { get; set; } = true;
public IServiceProvider Services { get; private set; }
public App() public App()
{ {
InitializeComponent(); InitializeComponent();
} }
protected override void OnLaunched(LaunchActivatedEventArgs args) private IServiceProvider ConfigureServices()
{ {
var services = new ServiceCollection();
services.AddTransient<ServerContext>();
services.AddTransient<ServerViewModel>();
services.RegisterCoreServices();
// Below services belongs to UWP.Core package and some APIs are not available for WPF.
// We register them here to avoid compilation errors.
services.AddSingleton<IConfigurationService, ConfigurationService>();
services.AddSingleton<INativeAppService, NativeAppService>();
services.AddSingleton<IPreferencesService, PreferencesService>();
return services.BuildServiceProvider();
}
protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
Services = ConfigureServices();
await InitializeNewServerAsync();
InitializeTrayIcon();
}
private async Task<ServerViewModel> InitializeNewServerAsync()
{
// TODO: Error handling.
var databaseService = Services.GetService<IDatabaseService>();
var applicationFolderConfiguration = Services.GetService<IApplicationConfiguration>();
applicationFolderConfiguration.ApplicationDataFolderPath = ApplicationData.Current.LocalFolder.Path;
applicationFolderConfiguration.PublisherSharedFolderPath = ApplicationData.Current.GetPublisherCacheFolder(ApplicationConfiguration.SharedFolderName).Path;
await databaseService.InitializeAsync();
var serverViewModel = Services.GetRequiredService<ServerViewModel>();
await serverViewModel.InitializeAsync();
return serverViewModel;
} }
private void InitializeTrayIcon() private void InitializeTrayIcon()
{ {
var showHideWindowCommand = (XamlUICommand)Resources["ShowHideWindowCommand"]; var viewModel = Services.GetService<ServerViewModel>();
// showHideWindowCommand.ExecuteRequested ;
var exitApplicationCommand = (XamlUICommand)Resources["ExitApplicationCommand"]; var launchCommand = (XamlUICommand)Resources["LaunchCommand"];
//exitApplicationCommand.ExecuteRequested += ExitApplicationCommand_ExecuteRequested; launchCommand.Command = viewModel.LaunchWinoCommand;
var exitApplicationCommand = (XamlUICommand)Resources["TerminateCommand"];
exitApplicationCommand.Command = viewModel.ExitApplicationCommand;
TrayIcon = (TaskbarIcon)Resources["TrayIcon"]; TrayIcon = (TaskbarIcon)Resources["TrayIcon"];
TrayIcon.ForceCreate(); TrayIcon.ForceCreate();

View File

@@ -0,0 +1,217 @@
using System;
using System.Diagnostics;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.Messaging;
using Microsoft.Extensions.DependencyInjection;
using Windows.ApplicationModel;
using Windows.ApplicationModel.AppService;
using Windows.Foundation.Collections;
using Wino.Core.Authenticators;
using Wino.Core.Domain.Interfaces;
using Wino.Core.Domain.Models.Synchronization;
using Wino.Core.Integration.Processors;
using Wino.Core.Services;
using Wino.Core.Synchronizers;
using Wino.Messaging;
using Wino.Messaging.Enums;
using Wino.Messaging.Server;
using Wino.Server.NET8;
namespace Wino.Server
{
public class ServerContext :
IRecipient<AccountCreatedMessage>,
IRecipient<AccountUpdatedMessage>,
IRecipient<AccountRemovedMessage>,
IRecipient<DraftCreated>,
IRecipient<DraftFailed>,
IRecipient<DraftMapped>,
IRecipient<FolderRenamed>,
IRecipient<FolderSynchronizationEnabled>,
IRecipient<MailAddedMessage>,
IRecipient<MailDownloadedMessage>,
IRecipient<MailRemovedMessage>,
IRecipient<MailUpdatedMessage>,
IRecipient<MergedInboxRenamed>
{
private static object connectionLock = new object();
private AppServiceConnection connection = null;
private readonly IDatabaseService _databaseService;
private readonly IApplicationConfiguration _applicationFolderConfiguration;
public ServerContext(IDatabaseService databaseService, IApplicationConfiguration applicationFolderConfiguration)
{
_databaseService = databaseService;
_applicationFolderConfiguration = applicationFolderConfiguration;
WeakReferenceMessenger.Default.RegisterAll(this);
}
#region Message Handlers
public async void Receive(MailAddedMessage message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(AccountCreatedMessage message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(AccountUpdatedMessage message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(AccountRemovedMessage message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(DraftCreated message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(DraftFailed message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(DraftMapped message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(FolderRenamed message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(FolderSynchronizationEnabled message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(MailDownloadedMessage message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(MailRemovedMessage message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(MailUpdatedMessage message) => await SendMessageAsync(MessageType.UIMessage, message);
public async void Receive(MergedInboxRenamed message) => await SendMessageAsync(MessageType.UIMessage, message);
#endregion
/// <summary>
/// Open connection to UWP app service
/// </summary>
public async Task InitializeAppServiceConnectionAsync()
{
if (connection != null) DisposeConnection();
connection = new AppServiceConnection
{
AppServiceName = "WinoInteropService",
PackageFamilyName = GetAppPackagFamilyName()
};
connection.RequestReceived += OnWinRTMessageReceived;
connection.ServiceClosed += OnConnectionClosed;
AppServiceConnectionStatus status = await connection.OpenAsync();
if (status != AppServiceConnectionStatus.Success)
{
// TODO: Handle connection error
DisposeConnection();
}
}
public async Task TestOutlookSynchronizer()
{
var accountService = App.Current.Services.GetService<IAccountService>();
var accs = await accountService.GetAccountsAsync();
var acc = accs.ElementAt(0);
var authenticator = App.Current.Services.GetService<OutlookAuthenticator>();
var processor = App.Current.Services.GetService<IOutlookChangeProcessor>();
var sync = new OutlookSynchronizer(acc, authenticator, processor);
var options = new SynchronizationOptions()
{
AccountId = acc.Id,
Type = Core.Domain.Enums.SynchronizationType.Full
};
var result = await sync.SynchronizeAsync(options);
}
/// <summary>
/// Disposes current connection to UWP app service.
/// </summary>
private void DisposeConnection()
{
lock (connectionLock)
{
if (connection == null) return;
connection.RequestReceived -= OnWinRTMessageReceived;
connection.ServiceClosed -= OnConnectionClosed;
connection.Dispose();
connection = null;
}
}
/// <summary>
/// Sends a serialized object to UWP application if connection exists with given type.
/// </summary>
/// <param name="messageType">Type of the message.</param>
/// <param name="message">IServerMessage object that will be serialized.</param>
/// <returns></returns>
/// <exception cref="ArgumentException">When the message is not IServerMessage.</exception>
private async Task SendMessageAsync(MessageType messageType, object message)
{
if (connection == null) return;
if (message is not IServerMessage serverMessage)
throw new ArgumentException("Server message must be a type of IServerMessage");
string json = JsonSerializer.Serialize(message);
var set = new ValueSet
{
{ MessageConstants.MessageTypeKey, (int)messageType },
{ MessageConstants.MessageDataKey, json },
{ MessageConstants.MessageDataTypeKey, message.GetType().Name }
};
Debug.WriteLine($"S: {messageType} ({message.GetType().Name})");
await connection.SendMessageAsync(set);
}
private void OnConnectionClosed(AppServiceConnection sender, AppServiceClosedEventArgs args)
{
// TODO: Handle connection closed.
// UWP app might've been terminated or suspended.
// At this point, we must keep active synchronizations going, but connection is lost.
// As long as this process is alive, database will be kept updated, but no messages will be sent.
DisposeConnection();
}
private void OnWinRTMessageReceived(AppServiceConnection sender, AppServiceRequestReceivedEventArgs args)
{
// TODO: Handle incoming messages from UWP/WINUI Application.
}
#region Init
private string GetAppPackagFamilyName()
{
// If running as a standalone app, Package will throw exception.
// Return hardcoded value for debugging purposes.
// Connection will not be available in this case.
try
{
return Package.Current.Id.FamilyName;
}
catch (Exception)
{
return "Debug.Wino.Server.FamilyName";
}
}
public async Task InitializeAsync()
{
await InitializeAppServiceConnectionAsync();
}
#endregion
}
}

View File

@@ -0,0 +1,37 @@
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Wino.Core.Domain.Interfaces;
namespace Wino.Server
{
public partial class ServerViewModel : ObservableObject, IInitializeAsync
{
public ServerContext Context { get; }
public ServerViewModel(ServerContext serverContext)
{
Context = serverContext;
}
[RelayCommand]
public async Task LaunchWinoAsync()
{
await Context.TestOutlookSynchronizer();
// ServerContext.SendTestMessageAsync();
}
/// <summary>
/// Shuts down the application.
/// </summary>
[RelayCommand]
public void ExitApplication()
{
// TODO: App service send message to UWP app to terminate itself.
}
public async Task ReconnectAsync() => await Context.InitializeAppServiceConnectionAsync();
public Task InitializeAsync() => Context.InitializeAppServiceConnectionAsync();
}
}

View File

@@ -1,13 +1,12 @@
<ResourceDictionary <ResourceDictionary
x:Class="Wino.Server.TrayIconResources" x:Class="Wino.Server.Styles.TrayIconResources"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:domain="using:Wino.Core.Domain" xmlns:domain="using:Wino.Core.Domain"
xmlns:tb="using:H.NotifyIcon" xmlns:local="using:Wino.Server"
xmlns:local="using:Wino.Server"> xmlns:tb="using:H.NotifyIcon">
<!-- TODO: Localize by Translator. --> <!-- TODO: Localize by Translator. -->
<XamlUICommand <XamlUICommand
x:Key="LaunchCommand" x:Key="LaunchCommand"
Label="Launch" Label="Launch"
@@ -30,10 +29,10 @@
x:Key="TrayIcon" x:Key="TrayIcon"
Visibility="Visible" Visibility="Visible"
ToolTipText="Wino Mail" ToolTipText="Wino Mail"
ContextMenuMode="SecondWindow" ContextMenuMode="PopupMenu"
LeftClickCommand="{StaticResource LaunchCommand}" LeftClickCommand="{StaticResource LaunchCommand}"
NoLeftClickDelay="True" NoLeftClickDelay="True"
IconSource="\Images\Wino_Icon.ico"> IconSource="\Assets\Wino_Icon.ico">
<tb:TaskbarIcon.ContextFlyout> <tb:TaskbarIcon.ContextFlyout>
<MenuFlyout> <MenuFlyout>
<MenuFlyoutItem Command="{StaticResource LaunchCommand}" /> <MenuFlyoutItem Command="{StaticResource LaunchCommand}" />

View File

@@ -0,0 +1,12 @@
using Microsoft.UI.Xaml;
namespace Wino.Server.Styles
{
partial class TrayIconResources : ResourceDictionary
{
public TrayIconResources()
{
InitializeComponent();
}
}
}

View File

@@ -1,17 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.UI.Xaml;
namespace Wino.Server
{
partial class TrayIconResources : ResourceDictionary
{
public TrayIconResources()
{
this.InitializeComponent();
}
}
}

View File

@@ -6,11 +6,13 @@
<RootNamespace>Wino.Server</RootNamespace> <RootNamespace>Wino.Server</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest> <ApplicationManifest>app.manifest</ApplicationManifest>
<Platforms>x86;x64;ARM64</Platforms> <Platforms>x86;x64;ARM64</Platforms>
<SelfContained>true</SelfContained>
<RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) &gt;= 8">win-x86;win-x64;win-arm64</RuntimeIdentifiers> <RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) &gt;= 8">win-x86;win-x64;win-arm64</RuntimeIdentifiers>
<RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) &lt; 8">win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers> <RuntimeIdentifiers Condition="$([MSBuild]::GetTargetFrameworkVersion('$(TargetFramework)')) &lt; 8">win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
<PublishProfile>win-$(Platform).pubxml</PublishProfile> <PublishProfile>win-$(Platform).pubxml</PublishProfile>
<UseWinUI>true</UseWinUI> <UseWinUI>true</UseWinUI>
<EnableMsixTooling>true</EnableMsixTooling> <EnableMsixTooling>true</EnableMsixTooling>
<DisableEmbeddedXbf>false</DisableEmbeddedXbf>
</PropertyGroup> </PropertyGroup>
<!-- Disable XAML generated main to enable single activation. --> <!-- Disable XAML generated main to enable single activation. -->
@@ -34,12 +36,13 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Content Remove="Assets\Wino_Icon.ico" /> <None Remove="app.manifest" />
<None Remove="Assets\Wino_Icon.ico" />
<None Remove="TrayIconResources.xaml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Remove="app.manifest" /> <Page Remove="App.xaml" />
<None Remove="TrayIconResources.xaml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -87,6 +90,10 @@
</Page> </Page>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Styles\" />
</ItemGroup>
<!-- <!--
Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution Defining the "HasPackageAndPublishMenuAddedByProject" property here allows the Solution
Explorer "Package and Publish" context menu entry to be enabled for this project even if Explorer "Package and Publish" context menu entry to be enabled for this project even if

View File

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 124 KiB

View File

@@ -19,13 +19,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Wino.Messaging.NET8", "Wino
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wino.Server.NET8", "Wino.Server.NET8\Wino.Server.NET8.csproj", "{A3B3BDBB-5946-4058-8038-55A97DBCFB38}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Wino.Server.NET8", "Wino.Server.NET8\Wino.Server.NET8.csproj", "{A3B3BDBB-5946-4058-8038-55A97DBCFB38}"
EndProject EndProject
Project("{C7167F0D-BC9F-4E6E-AFE1-012C56B48DB5}") = "Wino.Packaging", "Wino.Packaging\Wino.Packaging.wapproj", "{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
Debug|ARM = Debug|ARM
Debug|ARM64 = Debug|ARM64 Debug|ARM64 = Debug|ARM64
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
Release|ARM = Release|ARM
Release|ARM64 = Release|ARM64 Release|ARM64 = Release|ARM64
Release|x64 = Release|x64 Release|x64 = Release|x64
Release|x86 = Release|x86 Release|x86 = Release|x86
@@ -33,6 +37,8 @@ Global
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|ARM.ActiveCfg = Debug|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|ARM.Build.0 = Debug|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|ARM64.ActiveCfg = Debug|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|ARM64.Build.0 = Debug|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|ARM64.Build.0 = Debug|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|x64.ActiveCfg = Debug|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -41,6 +47,8 @@ Global
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|x86.Build.0 = Debug|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Debug|x86.Build.0 = Debug|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|Any CPU.Build.0 = Release|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|Any CPU.Build.0 = Release|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|ARM.ActiveCfg = Release|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|ARM.Build.0 = Release|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|ARM64.ActiveCfg = Release|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|ARM64.ActiveCfg = Release|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|ARM64.Build.0 = Release|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|ARM64.Build.0 = Release|Any CPU
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|x64.ActiveCfg = Release|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|x64.ActiveCfg = Release|Any CPU
@@ -49,6 +57,8 @@ Global
{8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|x86.Build.0 = Release|Any CPU {8E9C0D99-1895-45C1-AC84-9065B91DB1AD}.Release|x86.Build.0 = Release|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|Any CPU.Build.0 = Debug|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|ARM.Build.0 = Debug|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|ARM64.ActiveCfg = Debug|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|ARM64.Build.0 = Debug|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|ARM64.Build.0 = Debug|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|x64.ActiveCfg = Debug|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -57,6 +67,8 @@ Global
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|x86.Build.0 = Debug|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Debug|x86.Build.0 = Debug|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|Any CPU.ActiveCfg = Release|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|Any CPU.Build.0 = Release|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|Any CPU.Build.0 = Release|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|ARM.ActiveCfg = Release|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|ARM.Build.0 = Release|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|ARM64.ActiveCfg = Release|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|ARM64.ActiveCfg = Release|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|ARM64.Build.0 = Release|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|ARM64.Build.0 = Release|Any CPU
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|x64.ActiveCfg = Release|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|x64.ActiveCfg = Release|Any CPU
@@ -65,6 +77,8 @@ Global
{FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|x86.Build.0 = Release|Any CPU {FAE1E245-8E73-4FA3-9E19-23AD4CE92200}.Release|x86.Build.0 = Release|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|Any CPU.Build.0 = Debug|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|ARM.Build.0 = Debug|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|ARM64.ActiveCfg = Debug|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|ARM64.Build.0 = Debug|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|ARM64.Build.0 = Debug|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|x64.ActiveCfg = Debug|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -73,6 +87,8 @@ Global
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|x86.Build.0 = Debug|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Debug|x86.Build.0 = Debug|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|Any CPU.ActiveCfg = Release|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|Any CPU.Build.0 = Release|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|Any CPU.Build.0 = Release|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|ARM.ActiveCfg = Release|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|ARM.Build.0 = Release|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|ARM64.ActiveCfg = Release|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|ARM64.ActiveCfg = Release|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|ARM64.Build.0 = Release|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|ARM64.Build.0 = Release|Any CPU
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|x64.ActiveCfg = Release|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|x64.ActiveCfg = Release|Any CPU
@@ -81,6 +97,8 @@ Global
{FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|x86.Build.0 = Release|Any CPU {FEC05E9C-4186-4ECF-A522-C8EB5C187F0D}.Release|x86.Build.0 = Release|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|Any CPU.Build.0 = Debug|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|ARM.Build.0 = Debug|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|ARM64.ActiveCfg = Debug|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|ARM64.Build.0 = Debug|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|ARM64.Build.0 = Debug|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|x64.ActiveCfg = Debug|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -89,6 +107,8 @@ Global
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|x86.Build.0 = Debug|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Debug|x86.Build.0 = Debug|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|Any CPU.ActiveCfg = Release|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|Any CPU.Build.0 = Release|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|Any CPU.Build.0 = Release|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|ARM.ActiveCfg = Release|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|ARM.Build.0 = Release|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|ARM64.ActiveCfg = Release|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|ARM64.ActiveCfg = Release|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|ARM64.Build.0 = Release|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|ARM64.Build.0 = Release|Any CPU
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|x64.ActiveCfg = Release|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|x64.ActiveCfg = Release|Any CPU
@@ -97,6 +117,8 @@ Global
{FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|x86.Build.0 = Release|Any CPU {FF3C03F7-4E9B-4333-9A9D-2BB1D1241C56}.Release|x86.Build.0 = Release|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|Any CPU.Build.0 = Debug|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|ARM.ActiveCfg = Debug|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|ARM.Build.0 = Debug|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|ARM64.ActiveCfg = Debug|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|ARM64.Build.0 = Debug|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|ARM64.Build.0 = Debug|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|x64.ActiveCfg = Debug|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -105,6 +127,8 @@ Global
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|x86.Build.0 = Debug|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Debug|x86.Build.0 = Debug|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|Any CPU.ActiveCfg = Release|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|Any CPU.Build.0 = Release|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|Any CPU.Build.0 = Release|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|ARM.ActiveCfg = Release|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|ARM.Build.0 = Release|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|ARM64.ActiveCfg = Release|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|ARM64.ActiveCfg = Release|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|ARM64.Build.0 = Release|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|ARM64.Build.0 = Release|Any CPU
{2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|x64.ActiveCfg = Release|Any CPU {2C86AF48-F7DD-4EA6-A9A6-610E69287F03}.Release|x64.ActiveCfg = Release|Any CPU
@@ -114,6 +138,9 @@ Global
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|Any CPU.ActiveCfg = Debug|x64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|Any CPU.ActiveCfg = Debug|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|Any CPU.Build.0 = Debug|x64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|Any CPU.Build.0 = Debug|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|Any CPU.Deploy.0 = Debug|x64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|Any CPU.Deploy.0 = Debug|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM.ActiveCfg = Debug|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM.Build.0 = Debug|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM.Deploy.0 = Debug|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM64.ActiveCfg = Debug|ARM64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM64.ActiveCfg = Debug|ARM64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM64.Build.0 = Debug|ARM64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM64.Build.0 = Debug|ARM64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM64.Deploy.0 = Debug|ARM64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Debug|ARM64.Deploy.0 = Debug|ARM64
@@ -126,6 +153,9 @@ Global
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|Any CPU.ActiveCfg = Release|x64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|Any CPU.ActiveCfg = Release|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|Any CPU.Build.0 = Release|x64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|Any CPU.Build.0 = Release|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|Any CPU.Deploy.0 = Release|x64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|Any CPU.Deploy.0 = Release|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM.ActiveCfg = Release|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM.Build.0 = Release|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM.Deploy.0 = Release|x64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM64.ActiveCfg = Release|ARM64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM64.ActiveCfg = Release|ARM64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM64.Build.0 = Release|ARM64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM64.Build.0 = Release|ARM64
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM64.Deploy.0 = Release|ARM64 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|ARM64.Deploy.0 = Release|ARM64
@@ -137,6 +167,8 @@ Global
{955936B2-112B-4756-8BC7-67FF12BF9759}.Release|x86.Deploy.0 = Release|x86 {955936B2-112B-4756-8BC7-67FF12BF9759}.Release|x86.Deploy.0 = Release|x86
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|Any CPU.Build.0 = Debug|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM.ActiveCfg = Debug|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM.Build.0 = Debug|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM64.ActiveCfg = Debug|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM64.ActiveCfg = Debug|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM64.Build.0 = Debug|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|ARM64.Build.0 = Debug|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x64.ActiveCfg = Debug|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x64.ActiveCfg = Debug|Any CPU
@@ -145,6 +177,8 @@ Global
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x86.Build.0 = Debug|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Debug|x86.Build.0 = Debug|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|Any CPU.ActiveCfg = Release|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|Any CPU.Build.0 = Release|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|Any CPU.Build.0 = Release|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM.ActiveCfg = Release|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM.Build.0 = Release|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM64.ActiveCfg = Release|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM64.ActiveCfg = Release|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM64.Build.0 = Release|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|ARM64.Build.0 = Release|Any CPU
{88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|x64.ActiveCfg = Release|Any CPU {88A9B1A8-BC59-4852-93D0-37A5D357ABC6}.Release|x64.ActiveCfg = Release|Any CPU
@@ -154,6 +188,9 @@ Global
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.ActiveCfg = Debug|x64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.ActiveCfg = Debug|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.Build.0 = Debug|x64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.Build.0 = Debug|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.Deploy.0 = Debug|x64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|Any CPU.Deploy.0 = Debug|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM.ActiveCfg = Debug|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM.Build.0 = Debug|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM.Deploy.0 = Debug|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.ActiveCfg = Debug|ARM64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.ActiveCfg = Debug|ARM64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.Build.0 = Debug|ARM64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.Build.0 = Debug|ARM64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.Deploy.0 = Debug|ARM64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Debug|ARM64.Deploy.0 = Debug|ARM64
@@ -166,6 +203,9 @@ Global
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.ActiveCfg = Release|x64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.ActiveCfg = Release|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.Build.0 = Release|x64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.Build.0 = Release|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.Deploy.0 = Release|x64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|Any CPU.Deploy.0 = Release|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM.ActiveCfg = Release|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM.Build.0 = Release|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM.Deploy.0 = Release|x64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.ActiveCfg = Release|ARM64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.ActiveCfg = Release|ARM64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.Build.0 = Release|ARM64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.Build.0 = Release|ARM64
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.Deploy.0 = Release|ARM64 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|ARM64.Deploy.0 = Release|ARM64
@@ -175,6 +215,36 @@ Global
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.ActiveCfg = Release|x86 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.ActiveCfg = Release|x86
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.Build.0 = Release|x86 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.Build.0 = Release|x86
{A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.Deploy.0 = Release|x86 {A3B3BDBB-5946-4058-8038-55A97DBCFB38}.Release|x86.Deploy.0 = Release|x86
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|ARM.ActiveCfg = Debug|ARM
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|ARM.Build.0 = Debug|ARM
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|ARM.Deploy.0 = Debug|ARM
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|ARM64.ActiveCfg = Debug|ARM64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|ARM64.Build.0 = Debug|ARM64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|ARM64.Deploy.0 = Debug|ARM64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|x64.ActiveCfg = Debug|x64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|x64.Build.0 = Debug|x64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|x64.Deploy.0 = Debug|x64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|x86.ActiveCfg = Debug|x86
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|x86.Build.0 = Debug|x86
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Debug|x86.Deploy.0 = Debug|x86
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|Any CPU.Build.0 = Release|Any CPU
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|Any CPU.Deploy.0 = Release|Any CPU
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|ARM.ActiveCfg = Release|ARM
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|ARM.Build.0 = Release|ARM
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|ARM.Deploy.0 = Release|ARM
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|ARM64.ActiveCfg = Release|ARM64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|ARM64.Build.0 = Release|ARM64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|ARM64.Deploy.0 = Release|ARM64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|x64.ActiveCfg = Release|x64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|x64.Build.0 = Release|x64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|x64.Deploy.0 = Release|x64
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|x86.ActiveCfg = Release|x86
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|x86.Build.0 = Release|x86
{760F5F31-8EE3-4B83-80F3-0E4FFBCC737C}.Release|x86.Deploy.0 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE