diff --git a/.azure/pipelines/ci.yml b/.azure/pipelines/ci.yml index 0e63e13a4f..091eb3f90f 100644 --- a/.azure/pipelines/ci.yml +++ b/.azure/pipelines/ci.yml @@ -341,6 +341,8 @@ jobs: beforeBuild: - bash: "./eng/scripts/install-nginx-linux.sh" displayName: Installing Nginx + - bash: "echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p" + displayName: Increase inotify limit afterBuild: - bash: ./build.sh --no-build --ci --test -p:RunFlakyTests=true displayName: Run Flaky Tests diff --git a/.azure/pipelines/jobs/default-build.yml b/.azure/pipelines/jobs/default-build.yml index d2d8c6e055..f695d3c0af 100644 --- a/.azure/pipelines/jobs/default-build.yml +++ b/.azure/pipelines/jobs/default-build.yml @@ -125,6 +125,8 @@ jobs: displayName: Install JDK 11 - powershell: Write-Host "##vso[task.prependpath]$env:JAVA_HOME\bin" displayName: Prepend JAVA bin folder to the PATH. + - powershell: Write-Host "##vso[task.setvariable variable=SeleniumProcessTrackingFolder]$(BuildDirectory)\obj\selenium\" + displayName: Add Selenium process tracking folder environment variable - powershell: ./eng/scripts/InstallGoogleChrome.ps1 displayName: Install chrome - ${{ if and(eq(variables['System.TeamProject'], 'internal'), eq(parameters.agentOs, 'Windows'), eq(parameters.codeSign, 'true')) }}: diff --git a/eng/scripts/KillProcesses.ps1 b/eng/scripts/KillProcesses.ps1 index 90dff99b3b..48681071cf 100644 --- a/eng/scripts/KillProcesses.ps1 +++ b/eng/scripts/KillProcesses.ps1 @@ -22,6 +22,22 @@ function _killJavaInstances() { } } +function _killSeleniumTrackedProcesses() { + $files = Get-ChildItem $env:SeleniumProcessTrackingFolder -ErrorAction SilentlyContinue; + # PID files have a format of <>.<>.pid + $pids = $files | + Where-Object { $_.Name -match "([0-9]+)\..*?.pid"; } | + Foreach-Object { $Matches[1] }; + + foreach ($currentPid in $pids) { + try { + & cmd /c "taskkill /T /F /PID $currentPid 2>&1" + } catch { + Write-Host "Failed to kill process: $currentPid" + } + } +} + _kill dotnet.exe _kill testhost.exe _kill iisexpress.exe @@ -35,6 +51,7 @@ _kill chrome.exe _kill h2spec.exe _kill WerFault.exe _killJavaInstances +_killSeleniumTrackedProcesses if (Get-Command iisreset -ErrorAction ignore) { iisreset /restart diff --git a/src/Components/test/E2ETest/Infrastructure/AssemblyInfo.AssemblyFixtures.cs b/src/Components/test/E2ETest/Infrastructure/AssemblyInfo.AssemblyFixtures.cs new file mode 100644 index 0000000000..9392d18aa9 --- /dev/null +++ b/src/Components/test/E2ETest/Infrastructure/AssemblyInfo.AssemblyFixtures.cs @@ -0,0 +1,8 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.AspNetCore.E2ETesting; +using Xunit; + +[assembly: TestFramework("Microsoft.AspNetCore.E2ETesting.XunitTestFrameworkWithAssemblyFixture", "Microsoft.AspNetCore.Components.E2ETests")] +[assembly: AssemblyFixture(typeof(SeleniumStandaloneServer))] diff --git a/src/Components/test/E2ETest/ServerExecutionTests/ServerComponentRenderingTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/ServerComponentRenderingTest.cs index 575454104e..2fefa59d02 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/ServerComponentRenderingTest.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/ServerComponentRenderingTest.cs @@ -32,7 +32,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests appElement.FindElement(By.Id("run-without-dispatch")).Click(); - WaitAssert.Contains( + Browser.Contains( $"{typeof(InvalidOperationException).FullName}: The current thread is not associated with the renderer's synchronization context", () => result.Text); } diff --git a/src/Components/test/E2ETest/ServerExecutionTests/ServerSideAppTest.cs b/src/Components/test/E2ETest/ServerExecutionTests/ServerSideAppTest.cs index 4c1ff44814..2a594d45bb 100644 --- a/src/Components/test/E2ETest/ServerExecutionTests/ServerSideAppTest.cs +++ b/src/Components/test/E2ETest/ServerExecutionTests/ServerSideAppTest.cs @@ -8,6 +8,7 @@ using OpenQA.Selenium; using OpenQA.Selenium.Support.UI; using System; using System.Linq; +using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -23,12 +24,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests { _serverFixture.Environment = AspNetEnvironment.Development; _serverFixture.BuildWebHostMethod = ComponentsApp.Server.Program.BuildWebHost; + } + protected override void InitializeAsyncCore() + { Navigate("/", noReload: false); WaitUntilLoaded(); } - [Fact] public void HasTitle() { @@ -56,13 +59,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests Browser.FindElement(By.LinkText("Counter")).Click(); // Verify we're now on the counter page, with that nav link (only) highlighted - WaitAssert.Equal("Counter", () => Browser.FindElement(mainHeaderSelector).Text); + Browser.Equal("Counter", () => Browser.FindElement(mainHeaderSelector).Text); Assert.Collection(Browser.FindElements(activeNavLinksSelector), item => Assert.Equal("Counter", item.Text)); // Verify we can navigate back to home too Browser.FindElement(By.LinkText("Home")).Click(); - WaitAssert.Equal("Hello, world!", () => Browser.FindElement(mainHeaderSelector).Text); + Browser.Equal("Hello, world!", () => Browser.FindElement(mainHeaderSelector).Text); Assert.Collection(Browser.FindElements(activeNavLinksSelector), item => Assert.Equal("Home", item.Text)); } @@ -72,7 +75,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests { // Navigate to "Counter" Browser.FindElement(By.LinkText("Counter")).Click(); - WaitAssert.Equal("Counter", () => Browser.FindElement(By.TagName("h1")).Text); + Browser.Equal("Counter", () => Browser.FindElement(By.TagName("h1")).Text); // Observe the initial value is zero var countDisplayElement = Browser.FindElement(By.CssSelector("h1 + p")); @@ -81,11 +84,11 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests // Click the button; see it counts var button = Browser.FindElement(By.CssSelector(".main button")); button.Click(); - WaitAssert.Equal("Current count: 1", () => countDisplayElement.Text); + Browser.Equal("Current count: 1", () => countDisplayElement.Text); button.Click(); - WaitAssert.Equal("Current count: 2", () => countDisplayElement.Text); + Browser.Equal("Current count: 2", () => countDisplayElement.Text); button.Click(); - WaitAssert.Equal("Current count: 3", () => countDisplayElement.Text); + Browser.Equal("Current count: 3", () => countDisplayElement.Text); } [Fact] @@ -93,7 +96,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.ServerExecutionTests { // Navigate to "Fetch Data" Browser.FindElement(By.LinkText("Fetch data")).Click(); - WaitAssert.Equal("Weather forecast", () => Browser.FindElement(By.TagName("h1")).Text); + Browser.Equal("Weather forecast", () => Browser.FindElement(By.TagName("h1")).Text); // Wait until loaded var tableSelector = By.CssSelector("table.table"); diff --git a/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs b/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs index 41e3a6a83f..55491941cf 100644 --- a/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs +++ b/src/Components/test/E2ETest/Tests/BinaryHttpClientTest.cs @@ -8,6 +8,7 @@ using Microsoft.AspNetCore.E2ETesting; using OpenQA.Selenium; using OpenQA.Selenium.Support.UI; using System; +using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -16,7 +17,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests public class BinaryHttpClientTest : BasicTestAppTestBase, IClassFixture { readonly ServerFixture _apiServerFixture; - readonly IWebElement _appElement; + IWebElement _appElement; IWebElement _responseStatus; IWebElement _responseStatusText; IWebElement _testOutcome; @@ -30,11 +31,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests { apiServerFixture.BuildWebHostMethod = TestServer.Program.BuildWebHost; _apiServerFixture = apiServerFixture; + } + protected override void InitializeAsyncCore() + { Navigate(ServerPathBase, noReload: true); _appElement = MountTestComponent(); } - + [Fact] public void CanSendAndReceiveBytes() { diff --git a/src/Components/test/E2ETest/Tests/BindTest.cs b/src/Components/test/E2ETest/Tests/BindTest.cs index 4a9bcd6499..83756c3b78 100644 --- a/src/Components/test/E2ETest/Tests/BindTest.cs +++ b/src/Components/test/E2ETest/Tests/BindTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Threading.Tasks; using BasicTestApp; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; @@ -19,9 +20,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ToggleExecutionModeServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { // On WebAssembly, page reloads are expensive so skip if possible - Navigate(ServerPathBase, noReload: !serverFixture.UsingAspNetHost); + Navigate(ServerPathBase, noReload: !_serverFixture.UsingAspNetHost); MountTestComponent(); } @@ -41,12 +46,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Assert.Equal(string.Empty, boundValue.Text); // Doesn't update until change event Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); target.SendKeys("\t"); - WaitAssert.Equal("Changed value", () => boundValue.Text); + Browser.Equal("Changed value", () => boundValue.Text); Assert.Equal("Changed value", mirrorValue.GetAttribute("value")); // Remove the value altogether setNullButton.Click(); - WaitAssert.Equal(string.Empty, () => target.GetAttribute("value")); + Browser.Equal(string.Empty, () => target.GetAttribute("value")); Assert.Equal(string.Empty, boundValue.Text); Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); } @@ -65,12 +70,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("Changed value\t"); - WaitAssert.Equal("Changed value", () => boundValue.Text); + Browser.Equal("Changed value", () => boundValue.Text); Assert.Equal("Changed value", mirrorValue.GetAttribute("value")); // Remove the value altogether setNullButton.Click(); - WaitAssert.Equal(string.Empty, () => target.GetAttribute("value")); + Browser.Equal(string.Empty, () => target.GetAttribute("value")); Assert.Equal(string.Empty, boundValue.Text); Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); } @@ -87,7 +92,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests target.SendKeys("Changed value"); Assert.Equal(string.Empty, boundValue.Text); // Don't update as there's no change event fired yet. target.SendKeys("\t"); - WaitAssert.Equal("Changed value", () => boundValue.Text); + Browser.Equal("Changed value", () => boundValue.Text); } [Fact] @@ -101,7 +106,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated target.Clear(); target.SendKeys("Changed value\t"); - WaitAssert.Equal("Changed value", () => boundValue.Text); + Browser.Equal("Changed value", () => boundValue.Text); } [Fact] @@ -115,13 +120,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated target.Click(); - WaitAssert.True(() => target.Selected); - WaitAssert.Equal("True", () => boundValue.Text); + Browser.True(() => target.Selected); + Browser.Equal("True", () => boundValue.Text); // Modify data; verify checkbox is updated invertButton.Click(); - WaitAssert.False(() => target.Selected); - WaitAssert.Equal("False", () => boundValue.Text); + Browser.False(() => target.Selected); + Browser.Equal("False", () => boundValue.Text); } [Fact] @@ -135,13 +140,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated target.Click(); - WaitAssert.True(() => target.Selected); - WaitAssert.Equal("True", () => boundValue.Text); + Browser.True(() => target.Selected); + Browser.Equal("True", () => boundValue.Text); // Modify data; verify checkbox is updated invertButton.Click(); - WaitAssert.False(() => target.Selected); - WaitAssert.Equal("False", () => boundValue.Text); + Browser.False(() => target.Selected); + Browser.Equal("False", () => boundValue.Text); } [Fact] @@ -155,13 +160,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated target.Click(); - WaitAssert.False(() => target.Selected); - WaitAssert.Equal("False", () => boundValue.Text); + Browser.False(() => target.Selected); + Browser.Equal("False", () => boundValue.Text); // Modify data; verify checkbox is updated invertButton.Click(); - WaitAssert.True(() => target.Selected); - WaitAssert.Equal("True", () => boundValue.Text); + Browser.True(() => target.Selected); + Browser.Equal("True", () => boundValue.Text); } [Fact] @@ -174,13 +179,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated target.SelectByText("Third choice"); - WaitAssert.Equal("Third", () => boundValue.Text); + Browser.Equal("Third", () => boundValue.Text); // Also verify we can add and select new options atomically // Don't move this into a separate test, because then the previous assertions // would be dependent on test execution order (or would require a full page reload) Browser.FindElement(By.Id("select-box-add-option")).Click(); - WaitAssert.Equal("Fourth", () => boundValue.Text); + Browser.Equal("Fourth", () => boundValue.Text); Assert.Equal("Fourth choice", target.SelectedOption.Text); } @@ -197,7 +202,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("42\t"); - WaitAssert.Equal("42", () => boundValue.Text); + Browser.Equal("42", () => boundValue.Text); Assert.Equal("42", mirrorValue.GetAttribute("value")); } @@ -214,19 +219,19 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("-42\t"); - WaitAssert.Equal("-42", () => boundValue.Text); + Browser.Equal("-42", () => boundValue.Text); Assert.Equal("-42", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("42\t"); - WaitAssert.Equal("42", () => boundValue.Text); + Browser.Equal("42", () => boundValue.Text); Assert.Equal("42", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("\t"); - WaitAssert.Equal(string.Empty, () => boundValue.Text); + Browser.Equal(string.Empty, () => boundValue.Text); Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); } @@ -243,7 +248,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("-3000000000\t"); - WaitAssert.Equal("-3000000000", () => boundValue.Text); + Browser.Equal("-3000000000", () => boundValue.Text); Assert.Equal("-3000000000", mirrorValue.GetAttribute("value")); } @@ -260,19 +265,19 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("3000000000\t"); - WaitAssert.Equal("3000000000", () => boundValue.Text); + Browser.Equal("3000000000", () => boundValue.Text); Assert.Equal("3000000000", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("-3000000000\t"); - WaitAssert.Equal("-3000000000", () => boundValue.Text); + Browser.Equal("-3000000000", () => boundValue.Text); Assert.Equal("-3000000000", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("\t"); - WaitAssert.Equal(string.Empty, () => boundValue.Text); + Browser.Equal(string.Empty, () => boundValue.Text); Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); } @@ -289,7 +294,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("-3.141\t"); - WaitAssert.Equal("-3.141", () => boundValue.Text); + Browser.Equal("-3.141", () => boundValue.Text); Assert.Equal("-3.141", mirrorValue.GetAttribute("value")); } @@ -306,19 +311,19 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("3.141\t"); - WaitAssert.Equal("3.141", () => boundValue.Text); + Browser.Equal("3.141", () => boundValue.Text); Assert.Equal("3.141", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("-3.141\t"); - WaitAssert.Equal("-3.141", () => boundValue.Text); + Browser.Equal("-3.141", () => boundValue.Text); Assert.Equal("-3.141", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("\t"); - WaitAssert.Equal(string.Empty, () => boundValue.Text); + Browser.Equal(string.Empty, () => boundValue.Text); Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); } @@ -335,14 +340,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("-3.14159265359\t"); - WaitAssert.Equal("-3.14159265359", () => boundValue.Text); + Browser.Equal("-3.14159265359", () => boundValue.Text); Assert.Equal("-3.14159265359", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated // Double shouldn't preserve trailing zeros target.Clear(); target.SendKeys("0.010\t"); - WaitAssert.Equal("0.01", () => boundValue.Text); + Browser.Equal("0.01", () => boundValue.Text); Assert.Equal("0.01", mirrorValue.GetAttribute("value")); } @@ -359,26 +364,26 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("3.14159265359\t"); - WaitAssert.Equal("3.14159265359", () => boundValue.Text); + Browser.Equal("3.14159265359", () => boundValue.Text); Assert.Equal("3.14159265359", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("-3.14159265359\t"); - WaitAssert.Equal("-3.14159265359", () => boundValue.Text); + Browser.Equal("-3.14159265359", () => boundValue.Text); Assert.Equal("-3.14159265359", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated // Double shouldn't preserve trailing zeros target.Clear(); target.SendKeys("0.010\t"); - WaitAssert.Equal("0.01", () => boundValue.Text); + Browser.Equal("0.01", () => boundValue.Text); Assert.Equal("0.01", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("\t"); - WaitAssert.Equal(string.Empty, () => boundValue.Text); + Browser.Equal(string.Empty, () => boundValue.Text); Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); } @@ -396,7 +401,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Decimal should preserve trailing zeros target.Clear(); target.SendKeys("0.010\t"); - WaitAssert.Equal("0.010", () => boundValue.Text); + Browser.Equal("0.010", () => boundValue.Text); Assert.Equal("0.010", mirrorValue.GetAttribute("value")); } @@ -413,20 +418,20 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("0.0000000000000000000000000001\t"); - WaitAssert.Equal("0.0000000000000000000000000001", () => boundValue.Text); + Browser.Equal("0.0000000000000000000000000001", () => boundValue.Text); Assert.Equal("0.0000000000000000000000000001", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated // Decimal should preserve trailing zeros target.Clear(); target.SendKeys("0.010\t"); - WaitAssert.Equal("0.010", () => boundValue.Text); + Browser.Equal("0.010", () => boundValue.Text); Assert.Equal("0.010", mirrorValue.GetAttribute("value")); // Modify target; verify value is updated and that textboxes linked to the same data are updated target.Clear(); target.SendKeys("\t"); - WaitAssert.Equal(string.Empty, () => boundValue.Text); + Browser.Equal(string.Empty, () => boundValue.Text); Assert.Equal(string.Empty, mirrorValue.GetAttribute("value")); } } diff --git a/src/Components/test/E2ETest/Tests/CascadingValueTest.cs b/src/Components/test/E2ETest/Tests/CascadingValueTest.cs index 2b76b7149c..8102be1e58 100644 --- a/src/Components/test/E2ETest/Tests/CascadingValueTest.cs +++ b/src/Components/test/E2ETest/Tests/CascadingValueTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Threading.Tasks; using BasicTestApp; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; @@ -19,10 +20,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ITestOutputHelper output) : base(browserFixture, serverFixture, output) { - Navigate(ServerPathBase, noReload: !serverFixture.UsingAspNetHost); + } + + protected override void InitializeAsyncCore() + { + Navigate(ServerPathBase, noReload: !_serverFixture.UsingAspNetHost); MountTestComponent(); } - + [Fact] public void CanUpdateValuesMatchedByType() { @@ -30,13 +35,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var incrementButton = Browser.FindElement(By.Id("increment-count")); // We have the correct initial value - WaitAssert.Equal("100", () => currentCount.Text); + Browser.Equal("100", () => currentCount.Text); // Updates are propagated incrementButton.Click(); - WaitAssert.Equal("101", () => currentCount.Text); + Browser.Equal("101", () => currentCount.Text); incrementButton.Click(); - WaitAssert.Equal("102", () => currentCount.Text); + Browser.Equal("102", () => currentCount.Text); // Didn't re-render unrelated descendants Assert.Equal("1", Browser.FindElement(By.Id("receive-by-interface-num-renders")).Text); @@ -48,16 +53,16 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var currentFlag1Value = Browser.FindElement(By.Id("flag-1")); var currentFlag2Value = Browser.FindElement(By.Id("flag-2")); - WaitAssert.Equal("False", () => currentFlag1Value.Text); - WaitAssert.Equal("False", () => currentFlag2Value.Text); + Browser.Equal("False", () => currentFlag1Value.Text); + Browser.Equal("False", () => currentFlag2Value.Text); // Observe that the correct cascading parameter updates Browser.FindElement(By.Id("toggle-flag-1")).Click(); - WaitAssert.Equal("True", () => currentFlag1Value.Text); - WaitAssert.Equal("False", () => currentFlag2Value.Text); + Browser.Equal("True", () => currentFlag1Value.Text); + Browser.Equal("False", () => currentFlag2Value.Text); Browser.FindElement(By.Id("toggle-flag-2")).Click(); - WaitAssert.Equal("True", () => currentFlag1Value.Text); - WaitAssert.Equal("True", () => currentFlag2Value.Text); + Browser.Equal("True", () => currentFlag1Value.Text); + Browser.Equal("True", () => currentFlag2Value.Text); // Didn't re-render unrelated descendants Assert.Equal("1", Browser.FindElement(By.Id("receive-by-interface-num-renders")).Text); @@ -70,13 +75,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var decrementButton = Browser.FindElement(By.Id("decrement-count")); // We have the correct initial value - WaitAssert.Equal("100", () => currentCount.Text); + Browser.Equal("100", () => currentCount.Text); // Updates are propagated decrementButton.Click(); - WaitAssert.Equal("99", () => currentCount.Text); + Browser.Equal("99", () => currentCount.Text); decrementButton.Click(); - WaitAssert.Equal("98", () => currentCount.Text); + Browser.Equal("98", () => currentCount.Text); // Didn't re-render descendants Assert.Equal("1", Browser.FindElement(By.Id("receive-by-interface-num-renders")).Text); diff --git a/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs b/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs index 7a42598a6f..cfea7f70ac 100644 --- a/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs +++ b/src/Components/test/E2ETest/Tests/ComponentRenderingTest.cs @@ -27,7 +27,11 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ITestOutputHelper output) : base(browserFixture, serverFixture, output) { - Navigate(ServerPathBase, noReload: !serverFixture.UsingAspNetHost); + } + + protected override void InitializeAsyncCore() + { + Navigate(ServerPathBase, noReload: !_serverFixture.UsingAspNetHost); } [Fact] @@ -74,7 +78,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Clicking button increments count appElement.FindElement(By.TagName("button")).Click(); - WaitAssert.Equal("Current count: 1", () => countDisplayElement.Text); + Browser.Equal("Current count: 1", () => countDisplayElement.Text); } [Fact] @@ -87,11 +91,11 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Clicking 'tick' changes the state, and starts a task appElement.FindElement(By.Id("tick")).Click(); - WaitAssert.Equal("Started", () => stateElement.Text); + Browser.Equal("Started", () => stateElement.Text); // Clicking 'tock' completes the task, which updates the state appElement.FindElement(By.Id("tock")).Click(); - WaitAssert.Equal("Stopped", () => stateElement.Text); + Browser.Equal("Stopped", () => stateElement.Text); } [Fact] @@ -106,12 +110,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Typing adds element inputElement.SendKeys("a"); - WaitAssert.Collection(liElements, + Browser.Collection(liElements, li => Assert.Equal("a", li.Text)); // Typing again adds another element inputElement.SendKeys("b"); - WaitAssert.Collection(liElements, + Browser.Collection(liElements, li => Assert.Equal("a", li.Text), li => Assert.Equal("b", li.Text)); @@ -130,19 +134,19 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Initial count is zero; clicking button increments count Assert.Equal("Current count: 0", countDisplayElement.Text); incrementButton.Click(); - WaitAssert.Equal("Current count: 1", () => countDisplayElement.Text); + Browser.Equal("Current count: 1", () => countDisplayElement.Text); // We can remove an event handler toggleClickHandlerCheckbox.Click(); - WaitAssert.Empty(() => appElement.FindElements(By.Id("listening-message"))); + Browser.Empty(() => appElement.FindElements(By.Id("listening-message"))); incrementButton.Click(); - WaitAssert.Equal("Current count: 1", () => countDisplayElement.Text); + Browser.Equal("Current count: 1", () => countDisplayElement.Text); // We can add an event handler toggleClickHandlerCheckbox.Click(); appElement.FindElement(By.Id("listening-message")); incrementButton.Click(); - WaitAssert.Equal("Current count: 2", () => countDisplayElement.Text); + Browser.Equal("Current count: 2", () => countDisplayElement.Text); } [Fact] @@ -216,7 +220,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Clicking increments count in child component appElement.FindElement(By.TagName("button")).Click(); - WaitAssert.Equal("Current count: 1", () => counterDisplay.Text); + Browser.Equal("Current count: 1", () => counterDisplay.Text); } [Fact] @@ -231,7 +235,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Clicking increments count in child element appElement.FindElement(By.TagName("button")).Click(); - WaitAssert.Equal("1", () => messageElementInChild.Text); + Browser.Equal("1", () => messageElementInChild.Text); } [Fact] @@ -246,20 +250,20 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Click to add/remove some child components addButton.Click(); - WaitAssert.Collection(childComponentWrappers, + Browser.Collection(childComponentWrappers, elem => Assert.Equal("Child 1", elem.FindElement(By.ClassName("message")).Text)); addButton.Click(); - WaitAssert.Collection(childComponentWrappers, + Browser.Collection(childComponentWrappers, elem => Assert.Equal("Child 1", elem.FindElement(By.ClassName("message")).Text), elem => Assert.Equal("Child 2", elem.FindElement(By.ClassName("message")).Text)); removeButton.Click(); - WaitAssert.Collection(childComponentWrappers, + Browser.Collection(childComponentWrappers, elem => Assert.Equal("Child 1", elem.FindElement(By.ClassName("message")).Text)); addButton.Click(); - WaitAssert.Collection(childComponentWrappers, + Browser.Collection(childComponentWrappers, elem => Assert.Equal("Child 1", elem.FindElement(By.ClassName("message")).Text), elem => Assert.Equal("Child 3", elem.FindElement(By.ClassName("message")).Text)); } @@ -277,7 +281,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // When property changes, child is renotified before rerender incrementButton.Click(); - WaitAssert.Equal("You supplied: 101", () => suppliedValueElement.Text); + Browser.Equal("You supplied: 101", () => suppliedValueElement.Text); Assert.Equal("I computed: 202", computedValueElement.Text); } @@ -296,11 +300,11 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // When we click the button, the region is shown originalButton.Click(); - WaitAssert.Single(fragmentElements); + Browser.Single(fragmentElements); // The button itself was preserved, so we can click it again and see the effect originalButton.Click(); - WaitAssert.Empty(fragmentElements); + Browser.Empty(fragmentElements); } [Fact] @@ -329,7 +333,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests modal.SendKeys("Some value from test"); modal.Accept(); var promptResult = appElement.FindElement(By.TagName("strong")); - WaitAssert.Equal("Some value from test", () => promptResult.Text); + Browser.Equal("Some value from test", () => promptResult.Text); // NuGet packages can also embed entire components (themselves // authored as Razor files), including static content. The CSS value @@ -342,7 +346,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var externalComponentButton = specialStyleDiv.FindElement(By.TagName("button")); Assert.Equal("Click me", externalComponentButton.Text); externalComponentButton.Click(); - WaitAssert.Equal("It works", () => externalComponentButton.Text); + Browser.Equal("It works", () => externalComponentButton.Text); } [Fact] @@ -358,7 +362,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Assert.Equal("10", svgCircleElement.GetAttribute("r")); appElement.FindElement(By.TagName("button")).Click(); - WaitAssert.Equal("20", () => svgCircleElement.GetAttribute("r")); + Browser.Equal("20", () => svgCircleElement.GetAttribute("r")); } [Fact] @@ -377,7 +381,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests public void LogicalElementInsertionWorksHierarchically() { var appElement = MountTestComponent(); - WaitAssert.Equal("First Second Third", () => appElement.Text); + Browser.Equal("First Second Third", () => appElement.Text); } [Fact] @@ -390,9 +394,9 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Assert.Equal(string.Empty, inputElement.GetAttribute("value")); buttonElement.Click(); - WaitAssert.Equal("Clicks: 1", () => inputElement.GetAttribute("value")); + Browser.Equal("Clicks: 1", () => inputElement.GetAttribute("value")); buttonElement.Click(); - WaitAssert.Equal("Clicks: 2", () => inputElement.GetAttribute("value")); + Browser.Equal("Clicks: 2", () => inputElement.GetAttribute("value")); } [Fact] @@ -408,7 +412,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Remove the captured element checkbox.Click(); - WaitAssert.Empty(() => appElement.FindElements(By.Id("capturedElement"))); + Browser.Empty(() => appElement.FindElements(By.Id("capturedElement"))); // Re-add it; observe it starts empty again checkbox.Click(); @@ -417,7 +421,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // See that the capture variable was automatically updated to reference the new instance buttonElement.Click(); - WaitAssert.Equal("Clicks: 1", () => inputElement.GetAttribute("value")); + Browser.Equal("Clicks: 1", () => inputElement.GetAttribute("value")); } [Fact] @@ -432,23 +436,23 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Verify the reference was captured initially appElement.FindElement(incrementButtonSelector).Click(); - WaitAssert.Equal("Current count: 1", currentCountText); + Browser.Equal("Current count: 1", currentCountText); resetButton.Click(); - WaitAssert.Equal("Current count: 0", currentCountText); + Browser.Equal("Current count: 0", currentCountText); appElement.FindElement(incrementButtonSelector).Click(); - WaitAssert.Equal("Current count: 1", currentCountText); + Browser.Equal("Current count: 1", currentCountText); // Remove and re-add a new instance of the child, checking the text was reset toggleChildCheckbox.Click(); - WaitAssert.Empty(() => appElement.FindElements(incrementButtonSelector)); + Browser.Empty(() => appElement.FindElements(incrementButtonSelector)); toggleChildCheckbox.Click(); - WaitAssert.Equal("Current count: 0", currentCountText); + Browser.Equal("Current count: 0", currentCountText); // Verify we have a new working reference appElement.FindElement(incrementButtonSelector).Click(); - WaitAssert.Equal("Current count: 1", currentCountText); + Browser.Equal("Current count: 1", currentCountText); resetButton.Click(); - WaitAssert.Equal("Current count: 0", currentCountText); + Browser.Equal("Current count: 0", currentCountText); } [Fact] @@ -487,7 +491,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Updating markup blocks appElement.FindElement(By.TagName("button")).Click(); - WaitAssert.Equal( + Browser.Equal( "[The output was changed completely.]", () => appElement.FindElement(By.Id("dynamic-markup-block")).Text); Assert.Equal( @@ -529,7 +533,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var toggle = appElement.FindElement(By.Id("toggle")); toggle.Click(); - WaitAssert.Collection( + Browser.Collection( () => tfoot.FindElements(By.TagName("td")), e => Assert.Equal("The", e.Text), e => Assert.Equal("", e.Text), @@ -550,7 +554,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests await Task.Delay(1000); var outputElement = appElement.FindElement(By.Id("concurrent-render-output")); - WaitAssert.Equal(expectedOutput, () => outputElement.Text); + Browser.Equal(expectedOutput, () => outputElement.Text); } [Fact] @@ -561,7 +565,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests appElement.FindElement(By.Id("run-with-dispatch")).Click(); - WaitAssert.Equal("Success (completed synchronously)", () => result.Text); + Browser.Equal("Success (completed synchronously)", () => result.Text); } [Fact] @@ -572,7 +576,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests appElement.FindElement(By.Id("run-with-double-dispatch")).Click(); - WaitAssert.Equal("Success (completed synchronously)", () => result.Text); + Browser.Equal("Success (completed synchronously)", () => result.Text); } [Fact] @@ -583,7 +587,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests appElement.FindElement(By.Id("run-async-with-dispatch")).Click(); - WaitAssert.Equal("First Second Third Fourth Fifth", () => result.Text); + Browser.Equal("First Second Third Fourth Fifth", () => result.Text); } static IAlert SwitchToAlert(IWebDriver driver) diff --git a/src/Components/test/E2ETest/Tests/EventBubblingTest.cs b/src/Components/test/E2ETest/Tests/EventBubblingTest.cs index b3092ac385..66949202e5 100644 --- a/src/Components/test/E2ETest/Tests/EventBubblingTest.cs +++ b/src/Components/test/E2ETest/Tests/EventBubblingTest.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; using Microsoft.AspNetCore.E2ETesting; using OpenQA.Selenium; using System; +using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -26,17 +27,21 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ITestOutputHelper output) : base(browserFixture, serverFixture, output) { - Navigate(ServerPathBase, noReload: !serverFixture.UsingAspNetHost); + } + + protected override void InitializeAsyncCore() + { + Navigate(ServerPathBase, noReload: !_serverFixture.UsingAspNetHost); MountTestComponent(); } - + [Fact] public void BubblingStandardEvent_FiredOnElementWithHandler() { Browser.FindElement(By.Id("button-with-onclick")).Click(); // Triggers event on target and ancestors with handler in upwards direction - WaitAssert.Equal( + Browser.Equal( new[] { "target onclick", "parent onclick" }, GetLogLines); } @@ -47,7 +52,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Browser.FindElement(By.Id("button-without-onclick")).Click(); // Triggers event on ancestors with handler in upwards direction - WaitAssert.Equal( + Browser.Equal( new[] { "parent onclick" }, GetLogLines); } @@ -58,7 +63,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests TriggerCustomBubblingEvent("element-with-onsneeze", "sneeze"); // Triggers event on target and ancestors with handler in upwards direction - WaitAssert.Equal( + Browser.Equal( new[] { "target onsneeze", "parent onsneeze" }, GetLogLines); } @@ -69,7 +74,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests TriggerCustomBubblingEvent("element-without-onsneeze", "sneeze"); // Triggers event on ancestors with handler in upwards direction - WaitAssert.Equal( + Browser.Equal( new[] { "parent onsneeze" }, GetLogLines); } @@ -80,7 +85,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Browser.FindElement(By.Id("input-with-onfocus")).Click(); // Triggers event only on target, not other ancestors with event handler - WaitAssert.Equal( + Browser.Equal( new[] { "target onfocus" }, GetLogLines); } @@ -91,7 +96,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests Browser.FindElement(By.Id("input-without-onfocus")).Click(); // Triggers no event - WaitAssert.Empty(GetLogLines); + Browser.Empty(GetLogLines); } private string[] GetLogLines() diff --git a/src/Components/test/E2ETest/Tests/EventCallbackTest.cs b/src/Components/test/E2ETest/Tests/EventCallbackTest.cs index f93fbb78ac..4e5472a88a 100644 --- a/src/Components/test/E2ETest/Tests/EventCallbackTest.cs +++ b/src/Components/test/E2ETest/Tests/EventCallbackTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Threading.Tasks; using BasicTestApp; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; @@ -18,9 +19,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ToggleExecutionModeServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { // On WebAssembly, page reloads are expensive so skip if possible - Navigate(ServerPathBase, noReload: !serverFixture.UsingAspNetHost); + Navigate(ServerPathBase, noReload: !_serverFixture.UsingAspNetHost); MountTestComponent(); } diff --git a/src/Components/test/E2ETest/Tests/EventTest.cs b/src/Components/test/E2ETest/Tests/EventTest.cs index 40f20d48c5..3f9b1f38fa 100644 --- a/src/Components/test/E2ETest/Tests/EventTest.cs +++ b/src/Components/test/E2ETest/Tests/EventTest.cs @@ -1,6 +1,7 @@ // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System.Threading.Tasks; using BasicTestApp; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; @@ -19,6 +20,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ToggleExecutionModeServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { Navigate(ServerPathBase, noReload: true); MountTestComponent(); @@ -37,13 +42,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Focus the target, verify onfocusin is fired input.Click(); - WaitAssert.Equal("onfocus,onfocusin,", () => output.Text); + Browser.Equal("onfocus,onfocusin,", () => output.Text); // Focus something else, verify onfocusout is also fired var other = Browser.FindElement(By.Id("other")); other.Click(); - WaitAssert.Equal("onfocus,onfocusin,onblur,onfocusout,", () => output.Text); + Browser.Equal("onfocus,onfocusin,onblur,onfocusout,", () => output.Text); } [Fact] @@ -64,7 +69,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests .MoveToElement(other); actions.Perform(); - WaitAssert.Equal("onmouseover,onmouseout,", () => output.Text); + Browser.Equal("onmouseover,onmouseout,", () => output.Text); } [Fact] @@ -83,7 +88,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests .MoveToElement(input, 10, 10); actions.Perform(); - WaitAssert.Contains("onmousemove,", () => output.Text); + Browser.Contains("onmousemove,", () => output.Text); } [Fact] @@ -102,12 +107,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var actions = new Actions(Browser).ClickAndHold(input); actions.Perform(); - WaitAssert.Equal("onmousedown,", () => output.Text); + Browser.Equal("onmousedown,", () => output.Text); actions = new Actions(Browser).Release(input); actions.Perform(); - WaitAssert.Equal("onmousedown,onmouseup,", () => output.Text); + Browser.Equal("onmousedown,onmouseup,", () => output.Text); } [Fact] @@ -116,7 +121,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var appElement = MountTestComponent(); appElement.FindElement(By.Id("form-1-button")).Click(); - WaitAssert.Equal("Event was handled", () => appElement.FindElement(By.Id("event-handled")).Text); + Browser.Equal("Event was handled", () => appElement.FindElement(By.Id("event-handled")).Text); } [Fact] @@ -135,13 +140,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var input = Browser.FindElement(By.TagName("input")); var output = Browser.FindElement(By.Id("test-result")); - WaitAssert.Equal(string.Empty, () => output.Text); + Browser.Equal(string.Empty, () => output.Text); SendKeysSequentially(input, "abcdefghijklmnopqrstuvwxyz"); - WaitAssert.Equal("abcdefghijklmnopqrstuvwxyz", () => output.Text); + Browser.Equal("abcdefghijklmnopqrstuvwxyz", () => output.Text); input.SendKeys(Keys.Backspace); - WaitAssert.Equal("abcdefghijklmnopqrstuvwxy", () => output.Text); + Browser.Equal("abcdefghijklmnopqrstuvwxy", () => output.Text); } void SendKeysSequentially(IWebElement target, string text) diff --git a/src/Components/test/E2ETest/Tests/FormsTest.cs b/src/Components/test/E2ETest/Tests/FormsTest.cs index 2512303265..ce4b733a87 100644 --- a/src/Components/test/E2ETest/Tests/FormsTest.cs +++ b/src/Components/test/E2ETest/Tests/FormsTest.cs @@ -23,9 +23,13 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ToggleExecutionModeServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { // On WebAssembly, page reloads are expensive so skip if possible - Navigate(ServerPathBase, noReload: !serverFixture.UsingAspNetHost); + Navigate(ServerPathBase, noReload: !_serverFixture.UsingAspNetHost); } [Fact] @@ -42,26 +46,26 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests acceptsTermsInput.Click(); // Accept terms acceptsTermsInput.Click(); // Un-accept terms await Task.Delay(500); // There's no expected change to the UI, so just wait a moment before asserting - WaitAssert.Empty(messagesAccessor); + Browser.Empty(messagesAccessor); Assert.Empty(appElement.FindElements(By.Id("last-callback"))); // Submitting the form does validate submitButton.Click(); - WaitAssert.Equal(new[] { "You must accept the terms" }, messagesAccessor); - WaitAssert.Equal("OnInvalidSubmit", () => appElement.FindElement(By.Id("last-callback")).Text); + Browser.Equal(new[] { "You must accept the terms" }, messagesAccessor); + Browser.Equal("OnInvalidSubmit", () => appElement.FindElement(By.Id("last-callback")).Text); // Can make another field invalid userNameInput.Clear(); submitButton.Click(); - WaitAssert.Equal(new[] { "Please choose a username", "You must accept the terms" }, messagesAccessor); - WaitAssert.Equal("OnInvalidSubmit", () => appElement.FindElement(By.Id("last-callback")).Text); + Browser.Equal(new[] { "Please choose a username", "You must accept the terms" }, messagesAccessor); + Browser.Equal("OnInvalidSubmit", () => appElement.FindElement(By.Id("last-callback")).Text); // Can make valid userNameInput.SendKeys("Bert\t"); acceptsTermsInput.Click(); submitButton.Click(); - WaitAssert.Empty(messagesAccessor); - WaitAssert.Equal("OnValidSubmit", () => appElement.FindElement(By.Id("last-callback")).Text); + Browser.Empty(messagesAccessor); + Browser.Equal("OnValidSubmit", () => appElement.FindElement(By.Id("last-callback")).Text); } [Fact] @@ -70,22 +74,22 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var appElement = MountTestComponent(); var nameInput = appElement.FindElement(By.ClassName("name")).FindElement(By.TagName("input")); var messagesAccessor = CreateValidationMessagesAccessor(appElement); - + // Validates on edit - WaitAssert.Equal("valid", () => nameInput.GetAttribute("class")); + Browser.Equal("valid", () => nameInput.GetAttribute("class")); nameInput.SendKeys("Bert\t"); - WaitAssert.Equal("modified valid", () => nameInput.GetAttribute("class")); + Browser.Equal("modified valid", () => nameInput.GetAttribute("class")); // Can become invalid nameInput.SendKeys("01234567890123456789\t"); - WaitAssert.Equal("modified invalid", () => nameInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "That name is too long" }, messagesAccessor); + Browser.Equal("modified invalid", () => nameInput.GetAttribute("class")); + Browser.Equal(new[] { "That name is too long" }, messagesAccessor); // Can become valid nameInput.Clear(); nameInput.SendKeys("Bert\t"); - WaitAssert.Equal("modified valid", () => nameInput.GetAttribute("class")); - WaitAssert.Empty(messagesAccessor); + Browser.Equal("modified valid", () => nameInput.GetAttribute("class")); + Browser.Empty(messagesAccessor); } [Fact] @@ -96,25 +100,25 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Validates on edit - WaitAssert.Equal("valid", () => ageInput.GetAttribute("class")); + Browser.Equal("valid", () => ageInput.GetAttribute("class")); ageInput.SendKeys("123\t"); - WaitAssert.Equal("modified valid", () => ageInput.GetAttribute("class")); + Browser.Equal("modified valid", () => ageInput.GetAttribute("class")); // Can become invalid ageInput.SendKeys("e100\t"); - WaitAssert.Equal("modified invalid", () => ageInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "The AgeInYears field must be a number." }, messagesAccessor); + Browser.Equal("modified invalid", () => ageInput.GetAttribute("class")); + Browser.Equal(new[] { "The AgeInYears field must be a number." }, messagesAccessor); // Empty is invalid, because it's not a nullable int ageInput.Clear(); ageInput.SendKeys("\t"); - WaitAssert.Equal("modified invalid", () => ageInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "The AgeInYears field must be a number." }, messagesAccessor); + Browser.Equal("modified invalid", () => ageInput.GetAttribute("class")); + Browser.Equal(new[] { "The AgeInYears field must be a number." }, messagesAccessor); // Zero is within the allowed range ageInput.SendKeys("0\t"); - WaitAssert.Equal("modified valid", () => ageInput.GetAttribute("class")); - WaitAssert.Empty(messagesAccessor); + Browser.Equal("modified valid", () => ageInput.GetAttribute("class")); + Browser.Empty(messagesAccessor); } [Fact] @@ -125,20 +129,20 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Validates on edit - WaitAssert.Equal("valid", () => heightInput.GetAttribute("class")); + Browser.Equal("valid", () => heightInput.GetAttribute("class")); heightInput.SendKeys("123.456\t"); - WaitAssert.Equal("modified valid", () => heightInput.GetAttribute("class")); + Browser.Equal("modified valid", () => heightInput.GetAttribute("class")); // Can become invalid heightInput.SendKeys("e100\t"); - WaitAssert.Equal("modified invalid", () => heightInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "The OptionalHeight field must be a number." }, messagesAccessor); + Browser.Equal("modified invalid", () => heightInput.GetAttribute("class")); + Browser.Equal(new[] { "The OptionalHeight field must be a number." }, messagesAccessor); // Empty is valid, because it's a nullable float heightInput.Clear(); heightInput.SendKeys("\t"); - WaitAssert.Equal("modified valid", () => heightInput.GetAttribute("class")); - WaitAssert.Empty(messagesAccessor); + Browser.Equal("modified valid", () => heightInput.GetAttribute("class")); + Browser.Empty(messagesAccessor); } [Fact] @@ -149,20 +153,20 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Validates on edit - WaitAssert.Equal("valid", () => descriptionInput.GetAttribute("class")); + Browser.Equal("valid", () => descriptionInput.GetAttribute("class")); descriptionInput.SendKeys("Hello\t"); - WaitAssert.Equal("modified valid", () => descriptionInput.GetAttribute("class")); + Browser.Equal("modified valid", () => descriptionInput.GetAttribute("class")); // Can become invalid descriptionInput.SendKeys("too long too long too long too long too long\t"); - WaitAssert.Equal("modified invalid", () => descriptionInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "Description is max 20 chars" }, messagesAccessor); + Browser.Equal("modified invalid", () => descriptionInput.GetAttribute("class")); + Browser.Equal(new[] { "Description is max 20 chars" }, messagesAccessor); // Can become valid descriptionInput.Clear(); descriptionInput.SendKeys("Hello\t"); - WaitAssert.Equal("modified valid", () => descriptionInput.GetAttribute("class")); - WaitAssert.Empty(messagesAccessor); + Browser.Equal("modified valid", () => descriptionInput.GetAttribute("class")); + Browser.Empty(messagesAccessor); } [Fact] @@ -173,24 +177,24 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Validates on edit - WaitAssert.Equal("valid", () => renewalDateInput.GetAttribute("class")); + Browser.Equal("valid", () => renewalDateInput.GetAttribute("class")); renewalDateInput.SendKeys("01/01/2000\t"); - WaitAssert.Equal("modified valid", () => renewalDateInput.GetAttribute("class")); + Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class")); // Can become invalid renewalDateInput.SendKeys("0/0/0"); - WaitAssert.Equal("modified invalid", () => renewalDateInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor); + Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class")); + Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor); // Empty is invalid, because it's not nullable renewalDateInput.SendKeys($"{Keys.Backspace}\t{Keys.Backspace}\t{Keys.Backspace}\t"); - WaitAssert.Equal("modified invalid", () => renewalDateInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor); + Browser.Equal("modified invalid", () => renewalDateInput.GetAttribute("class")); + Browser.Equal(new[] { "The RenewalDate field must be a date." }, messagesAccessor); // Can become valid renewalDateInput.SendKeys("01/01/01\t"); - WaitAssert.Equal("modified valid", () => renewalDateInput.GetAttribute("class")); - WaitAssert.Empty(messagesAccessor); + Browser.Equal("modified valid", () => renewalDateInput.GetAttribute("class")); + Browser.Empty(messagesAccessor); } [Fact] @@ -201,19 +205,19 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Validates on edit - WaitAssert.Equal("valid", () => expiryDateInput.GetAttribute("class")); + Browser.Equal("valid", () => expiryDateInput.GetAttribute("class")); expiryDateInput.SendKeys("01/01/2000\t"); - WaitAssert.Equal("modified valid", () => expiryDateInput.GetAttribute("class")); + Browser.Equal("modified valid", () => expiryDateInput.GetAttribute("class")); // Can become invalid expiryDateInput.SendKeys("111111111"); - WaitAssert.Equal("modified invalid", () => expiryDateInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "The OptionalExpiryDate field must be a date." }, messagesAccessor); + Browser.Equal("modified invalid", () => expiryDateInput.GetAttribute("class")); + Browser.Equal(new[] { "The OptionalExpiryDate field must be a date." }, messagesAccessor); // Empty is valid, because it's nullable expiryDateInput.SendKeys($"{Keys.Backspace}\t{Keys.Backspace}\t{Keys.Backspace}\t"); - WaitAssert.Equal("modified valid", () => expiryDateInput.GetAttribute("class")); - WaitAssert.Empty(messagesAccessor); + Browser.Equal("modified valid", () => expiryDateInput.GetAttribute("class")); + Browser.Empty(messagesAccessor); } [Fact] @@ -225,14 +229,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Validates on edit - WaitAssert.Equal("valid", () => select.GetAttribute("class")); + Browser.Equal("valid", () => select.GetAttribute("class")); ticketClassInput.SelectByText("First class"); - WaitAssert.Equal("modified valid", () => select.GetAttribute("class")); + Browser.Equal("modified valid", () => select.GetAttribute("class")); // Can become invalid ticketClassInput.SelectByText("(select)"); - WaitAssert.Equal("modified invalid", () => select.GetAttribute("class")); - WaitAssert.Equal(new[] { "The TicketClass field is not valid." }, messagesAccessor); + Browser.Equal("modified invalid", () => select.GetAttribute("class")); + Browser.Equal(new[] { "The TicketClass field is not valid." }, messagesAccessor); } [Fact] @@ -243,14 +247,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Validates on edit - WaitAssert.Equal("valid", () => acceptsTermsInput.GetAttribute("class")); + Browser.Equal("valid", () => acceptsTermsInput.GetAttribute("class")); acceptsTermsInput.Click(); - WaitAssert.Equal("modified valid", () => acceptsTermsInput.GetAttribute("class")); + Browser.Equal("modified valid", () => acceptsTermsInput.GetAttribute("class")); // Can become invalid acceptsTermsInput.Click(); - WaitAssert.Equal("modified invalid", () => acceptsTermsInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "Must accept terms" }, messagesAccessor); + Browser.Equal("modified invalid", () => acceptsTermsInput.GetAttribute("class")); + Browser.Equal(new[] { "Must accept terms" }, messagesAccessor); } [Fact] @@ -264,30 +268,30 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var submissionStatus = appElement.FindElement(By.Id("submission-status")); // Editing a field triggers validation immediately - WaitAssert.Equal("valid", () => userNameInput.GetAttribute("class")); + Browser.Equal("valid", () => userNameInput.GetAttribute("class")); userNameInput.SendKeys("Too long too long\t"); - WaitAssert.Equal("modified invalid", () => userNameInput.GetAttribute("class")); - WaitAssert.Equal(new[] { "That name is too long" }, messagesAccessor); + Browser.Equal("modified invalid", () => userNameInput.GetAttribute("class")); + Browser.Equal(new[] { "That name is too long" }, messagesAccessor); // Submitting the form validates remaining fields submitButton.Click(); - WaitAssert.Equal(new[] { "That name is too long", "You must accept the terms" }, messagesAccessor); - WaitAssert.Equal("modified invalid", () => userNameInput.GetAttribute("class")); - WaitAssert.Equal("invalid", () => acceptsTermsInput.GetAttribute("class")); + Browser.Equal(new[] { "That name is too long", "You must accept the terms" }, messagesAccessor); + Browser.Equal("modified invalid", () => userNameInput.GetAttribute("class")); + Browser.Equal("invalid", () => acceptsTermsInput.GetAttribute("class")); // Can make fields valid userNameInput.Clear(); userNameInput.SendKeys("Bert\t"); - WaitAssert.Equal("modified valid", () => userNameInput.GetAttribute("class")); + Browser.Equal("modified valid", () => userNameInput.GetAttribute("class")); acceptsTermsInput.Click(); - WaitAssert.Equal("modified valid", () => acceptsTermsInput.GetAttribute("class")); - WaitAssert.Equal(string.Empty, () => submissionStatus.Text); + Browser.Equal("modified valid", () => acceptsTermsInput.GetAttribute("class")); + Browser.Equal(string.Empty, () => submissionStatus.Text); submitButton.Click(); - WaitAssert.True(() => submissionStatus.Text.StartsWith("Submitted")); + Browser.True(() => submissionStatus.Text.StartsWith("Submitted")); // Fields can revert to unmodified - WaitAssert.Equal("valid", () => userNameInput.GetAttribute("class")); - WaitAssert.Equal("valid", () => acceptsTermsInput.GetAttribute("class")); + Browser.Equal("valid", () => userNameInput.GetAttribute("class")); + Browser.Equal("valid", () => acceptsTermsInput.GetAttribute("class")); } [Fact] @@ -301,20 +305,20 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Doesn't show messages for other fields submitButton.Click(); - WaitAssert.Empty(emailMessagesAccessor); + Browser.Empty(emailMessagesAccessor); // Updates on edit emailInput.SendKeys("abc\t"); - WaitAssert.Equal(new[] { "That doesn't look like a real email address" }, emailMessagesAccessor); + Browser.Equal(new[] { "That doesn't look like a real email address" }, emailMessagesAccessor); // Can show more than one message emailInput.SendKeys("too long too long too long\t"); - WaitAssert.Equal(new[] { "That doesn't look like a real email address", "We only accept very short email addresses (max 10 chars)" }, emailMessagesAccessor); + Browser.Equal(new[] { "That doesn't look like a real email address", "We only accept very short email addresses (max 10 chars)" }, emailMessagesAccessor); // Can become valid emailInput.Clear(); emailInput.SendKeys("a@b.com\t"); - WaitAssert.Empty(emailMessagesAccessor); + Browser.Empty(emailMessagesAccessor); } [Fact] @@ -326,16 +330,16 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var messagesAccessor = CreateValidationMessagesAccessor(appElement); // Shows initial state - WaitAssert.Equal("Economy", () => selectedTicketClassDisplay.Text); + Browser.Equal("Economy", () => selectedTicketClassDisplay.Text); // Refreshes on edit ticketClassInput.SelectByValue("Premium"); - WaitAssert.Equal("Premium", () => selectedTicketClassDisplay.Text); + Browser.Equal("Premium", () => selectedTicketClassDisplay.Text); // Leaves previous value unchanged if new entry is unparseable ticketClassInput.SelectByText("(select)"); - WaitAssert.Equal(new[] { "The TicketClass field is not valid." }, messagesAccessor); - WaitAssert.Equal("Premium", () => selectedTicketClassDisplay.Text); + Browser.Equal(new[] { "The TicketClass field is not valid." }, messagesAccessor); + Browser.Equal("Premium", () => selectedTicketClassDisplay.Text); } private Func CreateValidationMessagesAccessor(IWebElement appElement) diff --git a/src/Components/test/E2ETest/Tests/HostedInAspNetTest.cs b/src/Components/test/E2ETest/Tests/HostedInAspNetTest.cs index 3ac2de0cd9..6765362ee0 100644 --- a/src/Components/test/E2ETest/Tests/HostedInAspNetTest.cs +++ b/src/Components/test/E2ETest/Tests/HostedInAspNetTest.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.E2ETesting; using OpenQA.Selenium; using OpenQA.Selenium.Support.UI; using System; +using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -15,13 +16,17 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests public class HostedInAspNetTest : ServerTestBase { public HostedInAspNetTest( - BrowserFixture browserFixture, - AspNetSiteServerFixture serverFixture, + BrowserFixture browserFixture, + AspNetSiteServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) { serverFixture.BuildWebHostMethod = HostedInAspNet.Server.Program.BuildWebHost; serverFixture.Environment = AspNetEnvironment.Development; + } + + protected override void InitializeAsyncCore() + { Navigate("/", noReload: true); WaitUntilLoaded(); } diff --git a/src/Components/test/E2ETest/Tests/HttpClientTest.cs b/src/Components/test/E2ETest/Tests/HttpClientTest.cs index 025a6e74df..3d034b434a 100644 --- a/src/Components/test/E2ETest/Tests/HttpClientTest.cs +++ b/src/Components/test/E2ETest/Tests/HttpClientTest.cs @@ -18,7 +18,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests public class HttpClientTest : BasicTestAppTestBase, IClassFixture { readonly ServerFixture _apiServerFixture; - readonly IWebElement _appElement; + IWebElement _appElement; IWebElement _responseStatus; IWebElement _responseBody; IWebElement _responseHeaders; @@ -32,7 +32,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests { apiServerFixture.BuildWebHostMethod = TestServer.Program.BuildWebHost; _apiServerFixture = apiServerFixture; + } + protected override void InitializeAsyncCore() + { Navigate(ServerPathBase, noReload: true); _appElement = MountTestComponent(); } diff --git a/src/Components/test/E2ETest/Tests/InteropTest.cs b/src/Components/test/E2ETest/Tests/InteropTest.cs index d5e7e28b77..4b82c98096 100644 --- a/src/Components/test/E2ETest/Tests/InteropTest.cs +++ b/src/Components/test/E2ETest/Tests/InteropTest.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Threading.Tasks; using BasicTestApp; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure.ServerFixtures; @@ -18,6 +19,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ToggleExecutionModeServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { Navigate(ServerPathBase, noReload: true); MountTestComponent(); @@ -106,7 +111,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests expectedValues.Add(kvp.Key, kvp.Value); } } - + var actualValues = new Dictionary(); // Act diff --git a/src/Components/test/E2ETest/Tests/MonoSanityTest.cs b/src/Components/test/E2ETest/Tests/MonoSanityTest.cs index 67c2eb9ac0..1fb1b26ec9 100644 --- a/src/Components/test/E2ETest/Tests/MonoSanityTest.cs +++ b/src/Components/test/E2ETest/Tests/MonoSanityTest.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.E2ETesting; using OpenQA.Selenium; using OpenQA.Selenium.Support.UI; using System; +using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -21,6 +22,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests : base(browserFixture, serverFixture, output) { serverFixture.BuildWebHostMethod = MonoSanity.Program.BuildWebHost; + } + + protected override void InitializeAsyncCore() + { Navigate("/", noReload: true); WaitUntilMonoRunningInBrowser(); } diff --git a/src/Components/test/E2ETest/Tests/PerformanceTest.cs b/src/Components/test/E2ETest/Tests/PerformanceTest.cs index bb274c393f..6bfd995e6f 100644 --- a/src/Components/test/E2ETest/Tests/PerformanceTest.cs +++ b/src/Components/test/E2ETest/Tests/PerformanceTest.cs @@ -7,6 +7,7 @@ using Microsoft.AspNetCore.E2ETesting; using OpenQA.Selenium; using System; using System.Linq; +using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -20,6 +21,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests DevHostServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { Navigate("/", noReload: true); } @@ -43,8 +48,8 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests runAllButton.Click(); // The "run" button goes away while the benchmarks execute, then it comes back - WaitAssert.False(() => runAllButton.Displayed); - WaitAssert.True( + Browser.False(() => runAllButton.Displayed); + Browser.True( () => runAllButton.Displayed || Browser.FindElements(By.CssSelector(".benchmark-error")).Any(), TimeSpan.FromSeconds(60)); diff --git a/src/Components/test/E2ETest/Tests/RoutingTest.cs b/src/Components/test/E2ETest/Tests/RoutingTest.cs index 5e351b4a4f..4f224396d8 100644 --- a/src/Components/test/E2ETest/Tests/RoutingTest.cs +++ b/src/Components/test/E2ETest/Tests/RoutingTest.cs @@ -4,6 +4,7 @@ using System; using System.Linq; using System.Runtime.InteropServices; +using System.Threading.Tasks; using BasicTestApp; using BasicTestApp.RouterTest; using Microsoft.AspNetCore.Components.E2ETest.Infrastructure; @@ -23,6 +24,10 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests ToggleExecutionModeServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { Navigate(ServerPathBase, noReload: false); WaitUntilTestSelectorReady(); @@ -92,7 +97,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests [Fact] public void CanArriveAtFallbackPageFromBadURI() { - SetUrlViaPushState("/Oopsie_Daisies%20%This_Aint_A_Real_Page"); + SetUrlViaPushState("/Oopsie_Daisies%20%This_Aint_A_Real_Page"); var app = MountTestComponent(); Assert.Equal("Oops, that component wasn't found!", app.FindElement(By.Id("test-info")).Text); @@ -105,7 +110,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("Other")).Click(); - WaitAssert.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)"); } @@ -121,14 +126,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); var button = app.FindElement(By.LinkText("Other")); - + new Actions(Browser).KeyDown(key).Click(button).Build().Perform(); - WaitAssert.Equal(2, () => Browser.WindowHandles.Count); + Browser.Equal(2, () => Browser.WindowHandles.Count); } finally { - // Leaving the ctrl key up + // Leaving the ctrl key up new Actions(Browser).KeyUp(key).Build().Perform(); // Closing newly opened windows if a new one was opened @@ -151,11 +156,11 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests { SetUrlViaPushState("/"); - var app = MountTestComponent(); + var app = MountTestComponent(); app.FindElement(By.LinkText("Target (_blank)")).Click(); - WaitAssert.Equal(2, () => Browser.WindowHandles.Count); + Browser.Equal(2, () => Browser.WindowHandles.Count); } finally { @@ -178,20 +183,20 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests SetUrlViaPushState("/"); var app = MountTestComponent(); - + app.FindElement(By.LinkText("Other")).Click(); - + Assert.Single(Browser.WindowHandles); } [Fact] public void CanFollowLinkToOtherPageWithBaseRelativeUrl() { - SetUrlViaPushState("/"); + SetUrlViaPushState("/"); var app = MountTestComponent(); app.FindElement(By.LinkText("Other with base-relative URL (matches all)")).Click(); - WaitAssert.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)"); } @@ -202,7 +207,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("Default with base-relative URL (matches all)")).Click(); - WaitAssert.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Default (matches all)", "Default with base-relative URL (matches all)"); } @@ -213,12 +218,12 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("With parameters")).Click(); - WaitAssert.Equal("Your full name is Abc .", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("Your full name is Abc .", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("With parameters"); // Can add more parameters while remaining on same page app.FindElement(By.LinkText("With more parameters")).Click(); - WaitAssert.Equal("Your full name is Abc McDef.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("Your full name is Abc McDef.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("With parameters", "With more parameters"); // Can remove parameters while remaining on same page @@ -227,7 +232,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests // Without that, the page would retain the old value. // See https://github.com/aspnet/AspNetCore/issues/6864 where we reverted the logic to auto-reset. app.FindElement(By.LinkText("With parameters")).Click(); - WaitAssert.Equal("Your full name is Abc .", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("Your full name is Abc .", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("With parameters"); } @@ -238,7 +243,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("Default (matches all)")).Click(); - WaitAssert.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Default (matches all)", "Default with base-relative URL (matches all)"); } @@ -249,7 +254,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("Other with query")).Click(); - WaitAssert.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Other", "Other with query"); } @@ -260,7 +265,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("Default with query")).Click(); - WaitAssert.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Default with query"); } @@ -271,7 +276,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("Other with hash")).Click(); - WaitAssert.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Other", "Other with hash"); } @@ -282,7 +287,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var app = MountTestComponent(); app.FindElement(By.LinkText("Default with hash")).Click(); - WaitAssert.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.Equal("This is the default page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Default with hash"); } @@ -295,8 +300,8 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var testSelector = WaitUntilTestSelectorReady(); app.FindElement(By.Id("do-navigation")).Click(); - WaitAssert.True(() => Browser.Url.EndsWith("/Other")); - WaitAssert.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); + Browser.True(() => Browser.Url.EndsWith("/Other")); + Browser.Equal("This is another page.", () => app.FindElement(By.Id("test-info")).Text); AssertHighlightedLinks("Other", "Other with base-relative URL (matches all)"); // Because this was client-side navigation, we didn't lose the state in the test selector @@ -312,7 +317,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests var testSelector = WaitUntilTestSelectorReady(); app.FindElement(By.Id("do-navigation-forced")).Click(); - WaitAssert.True(() => Browser.Url.EndsWith("/Other")); + Browser.True(() => Browser.Url.EndsWith("/Other")); // Because this was a full-page load, our element references should no longer be valid Assert.Throws(() => @@ -344,7 +349,7 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests private void AssertHighlightedLinks(params string[] linkTexts) { - WaitAssert.Equal(linkTexts, () => Browser + Browser.Equal(linkTexts, () => Browser .FindElements(By.CssSelector("a.active")) .Select(x => x.Text)); } diff --git a/src/Components/test/E2ETest/Tests/StandaloneAppTest.cs b/src/Components/test/E2ETest/Tests/StandaloneAppTest.cs index f0c870dda1..db665d64c0 100644 --- a/src/Components/test/E2ETest/Tests/StandaloneAppTest.cs +++ b/src/Components/test/E2ETest/Tests/StandaloneAppTest.cs @@ -8,6 +8,7 @@ using OpenQA.Selenium; using OpenQA.Selenium.Support.UI; using System; using System.Linq; +using System.Threading.Tasks; using Xunit; using Xunit.Abstractions; @@ -17,10 +18,14 @@ namespace Microsoft.AspNetCore.Components.E2ETest.Tests : ServerTestBase>, IDisposable { public StandaloneAppTest( - BrowserFixture browserFixture, + BrowserFixture browserFixture, DevHostServerFixture serverFixture, ITestOutputHelper output) : base(browserFixture, serverFixture, output) + { + } + + protected override void InitializeAsyncCore() { Navigate("/", noReload: true); WaitUntilLoaded(); diff --git a/src/Identity/ApiAuthorization.IdentityServer/src/Data/ApiAuthorizationDbContext.cs b/src/Identity/ApiAuthorization.IdentityServer/src/Data/ApiAuthorizationDbContext.cs index 23b702727c..c350e22b16 100644 --- a/src/Identity/ApiAuthorization.IdentityServer/src/Data/ApiAuthorizationDbContext.cs +++ b/src/Identity/ApiAuthorization.IdentityServer/src/Data/ApiAuthorizationDbContext.cs @@ -1,6 +1,7 @@ -// Copyright (c) .NET Foundation. All rights reserved. +// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +using System; using System.Threading.Tasks; using IdentityServer4.EntityFramework.Entities; using IdentityServer4.EntityFramework.Extensions; @@ -49,9 +50,47 @@ namespace Microsoft.AspNetCore.ApiAuthorization.IdentityServer /// protected override void OnModelCreating(ModelBuilder builder) { - base.OnModelCreating(builder); - builder.ConfigurePersistedGrantContext(_operationalStoreOptions.Value); + ConfigureGrantContext(builder, _operationalStoreOptions.Value); } + + private void ConfigureGrantContext(ModelBuilder modelBuilder, OperationalStoreOptions storeOptions) + { + if (!string.IsNullOrWhiteSpace(storeOptions.DefaultSchema)) modelBuilder.HasDefaultSchema(storeOptions.DefaultSchema); + + modelBuilder.Entity(grant => + { + grant.ToTable("PersistedGrants"); + + grant.Property(x => x.Key).HasMaxLength(200).ValueGeneratedNever(); + grant.Property(x => x.Type).HasMaxLength(50).IsRequired(); + grant.Property(x => x.SubjectId).HasMaxLength(200); + grant.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); + grant.Property(x => x.CreationTime).IsRequired(); + grant.Property(x => x.Data).HasMaxLength(50000).IsRequired(); + + grant.HasKey(x => x.Key); + + grant.HasIndex(x => new { x.SubjectId, x.ClientId, x.Type }); + }); + + modelBuilder.Entity(codes => + { + codes.ToTable("DeviceCodes"); + + codes.Property(x => x.DeviceCode).HasMaxLength(200).IsRequired(); + codes.Property(x => x.UserCode).HasMaxLength(200).IsRequired(); + codes.Property(x => x.SubjectId).HasMaxLength(200); + codes.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); + codes.Property(x => x.CreationTime).IsRequired(); + codes.Property(x => x.Expiration).IsRequired(); + codes.Property(x => x.Data).HasMaxLength(50000).IsRequired(); + + codes.HasKey(x => new { x.UserCode }); + + codes.HasIndex(x => x.DeviceCode).IsUnique(); + codes.HasIndex(x => x.UserCode).IsUnique(); + }); + } } } diff --git a/src/Middleware/SpaServices.Extensions/src/SpaOptions.cs b/src/Middleware/SpaServices.Extensions/src/SpaOptions.cs index f44b820f3e..b2823396dc 100644 --- a/src/Middleware/SpaServices.Extensions/src/SpaOptions.cs +++ b/src/Middleware/SpaServices.Extensions/src/SpaOptions.cs @@ -55,7 +55,7 @@ namespace Microsoft.AspNetCore.SpaServices /// /// Gets or sets the that supplies content /// for serving the SPA's default page. - /// + /// /// If not set, a default file provider will read files from the /// , which by default is /// the wwwroot directory. @@ -73,6 +73,6 @@ namespace Microsoft.AspNetCore.SpaServices /// Gets or sets the maximum duration that a request will wait for the SPA /// to become ready to serve to the client. /// - public TimeSpan StartupTimeout { get; set; } = TimeSpan.FromSeconds(50); + public TimeSpan StartupTimeout { get; set; } = TimeSpan.FromSeconds(120); } } diff --git a/src/ProjectTemplates/ProjectTemplates.sln b/src/ProjectTemplates/ProjectTemplates.sln index 5f0e44beda..9bf09da1f3 100644 --- a/src/ProjectTemplates/ProjectTemplates.sln +++ b/src/ProjectTemplates/ProjectTemplates.sln @@ -13,7 +13,169 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.DotNet.Web.ItemTe EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectTemplates.Tests", "test\ProjectTemplates.Tests.csproj", "{AF371A60-8A85-4ADF-BE44-0F2B94234DB1}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{A8E11D55-EC73-4B2B-87CE-277E6C9A8CB6}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetToolsInstaller", "testassets\DotNetToolsInstaller\DotNetToolsInstaller.csproj", "{4B971DBF-6B07-4DC5-914D-4D5681F220CC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.App.Runtime", "..\Framework\src\Microsoft.AspNetCore.App.Runtime.csproj", "{4D91ADAC-7CE2-4738-B6C5-986626F14EB5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IntegrationTesting", "..\Hosting\Server.IntegrationTesting\src\Microsoft.AspNetCore.Server.IntegrationTesting.csproj", "{E6B319D0-6A92-47D8-BC46-904DA44664A5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Abstractions", "..\Hosting\Abstractions\src\Microsoft.AspNetCore.Hosting.Abstractions.csproj", "{05291368-373F-48AA-84FC-5B1E4606641A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting.Server.Abstractions", "..\Hosting\Server.Abstractions\src\Microsoft.AspNetCore.Hosting.Server.Abstractions.csproj", "{4BA90E96-EFFC-40CD-B101-054F492F77BE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Abstractions", "..\Http\Http.Abstractions\src\Microsoft.AspNetCore.Http.Abstractions.csproj", "{071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Features", "..\Http\Http.Features\src\Microsoft.AspNetCore.Http.Features.csproj", "{4E459426-D759-4F59-9C74-9B16719D5A1B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore", "..\DefaultBuilder\src\Microsoft.AspNetCore.csproj", "{43754D8F-104A-4622-A5C8-A0717E839910}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Abstractions", "..\DataProtection\Abstractions\src\Microsoft.AspNetCore.DataProtection.Abstractions.csproj", "{0B8B8049-C769-4017-912C-DAF78D88C8D9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.Internal", "..\DataProtection\Cryptography.Internal\src\Microsoft.AspNetCore.Cryptography.Internal.csproj", "{32A7057C-D9E3-4FCD-8C82-DC906B272ABE}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cryptography.KeyDerivation", "..\DataProtection\Cryptography.KeyDerivation\src\Microsoft.AspNetCore.Cryptography.KeyDerivation.csproj", "{F972C0F1-BE90-4919-BF93-231CD2FFEB0A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection", "..\DataProtection\DataProtection\src\Microsoft.AspNetCore.DataProtection.csproj", "{4D93AD1D-CEC4-401B-B6F5-DAD09942455A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.DataProtection.Extensions", "..\DataProtection\Extensions\src\Microsoft.AspNetCore.DataProtection.Extensions.csproj", "{B2F453A1-93B0-471C-8E87-2CEF82CBAD76}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Antiforgery", "..\Antiforgery\src\Microsoft.AspNetCore.Antiforgery.csproj", "{05E7C8CC-5B18-445E-A5A2-133B2F1449E9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Hosting", "..\Hosting\Hosting\src\Microsoft.AspNetCore.Hosting.csproj", "{7451D310-4DA9-4945-8967-79645A0A9792}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Abstractions", "..\Http\Authentication.Abstractions\src\Microsoft.AspNetCore.Authentication.Abstractions.csproj", "{DE7DFE6A-12EE-4EE7-B59B-053524253C92}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Core", "..\Http\Authentication.Core\src\Microsoft.AspNetCore.Authentication.Core.csproj", "{F6C93BE6-B259-4F87-8B6C-E179E5D71C07}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Net.Http.Headers", "..\Http\Headers\src\Microsoft.Net.Http.Headers.csproj", "{DEA00510-A0EF-4446-83D2-EDC2C94EB286}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Extensions", "..\Http\Http.Extensions\src\Microsoft.AspNetCore.Http.Extensions.csproj", "{CEA5E19B-53D6-459A-8973-465B7DDE1B9B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http", "..\Http\Http\src\Microsoft.AspNetCore.Http.csproj", "{388CF5ED-14CE-416D-B7E3-614F8E961ECF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing.Abstractions", "..\Http\Routing.Abstractions\src\Microsoft.AspNetCore.Routing.Abstractions.csproj", "{C469C884-5534-4A44-B641-E82B6D58F3CD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Routing", "..\Http\Routing\src\Microsoft.AspNetCore.Routing.csproj", "{D0A0667E-8828-41AC-9997-3FA7497734D7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebUtilities", "..\Http\WebUtilities\src\Microsoft.AspNetCore.WebUtilities.csproj", "{7837205D-1F1A-4773-A39E-DA8BAE755E33}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Html.Abstractions", "..\Html\Abstractions\src\Microsoft.AspNetCore.Html.Abstractions.csproj", "{FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Identity", "..\Identity\Core\src\Microsoft.AspNetCore.Identity.csproj", "{6E531CD4-ACC4-4686-BA45-CFA01FB458FD}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Identity.Core", "..\Identity\Extensions.Core\src\Microsoft.Extensions.Identity.Core.csproj", "{F556EC24-3998-4126-B129-70B1960D6508}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Extensions.Identity.Stores", "..\Identity\Extensions.Stores\src\Microsoft.Extensions.Identity.Stores.csproj", "{84B548DC-4065-4F40-BC7D-6E5DC8231DB7}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Connections.Abstractions", "..\Servers\Connections.Abstractions\src\Microsoft.AspNetCore.Connections.Abstractions.csproj", "{4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.HttpSys", "..\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj", "{BA670255-DCC5-4DAE-B5B5-9E0671460E6C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IISIntegration", "..\Servers\IIS\IISIntegration\src\Microsoft.AspNetCore.Server.IISIntegration.csproj", "{EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.IIS", "..\Servers\IIS\IIS\src\Microsoft.AspNetCore.Server.IIS.csproj", "{571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Core", "..\Servers\Kestrel\Core\src\Microsoft.AspNetCore.Server.Kestrel.Core.csproj", "{063276D5-D247-4C6D-A2DA-8707017A6244}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel", "..\Servers\Kestrel\Kestrel\src\Microsoft.AspNetCore.Server.Kestrel.csproj", "{B3928FBE-FCC1-4174-A581-53369D1B40E3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions", "..\Servers\Kestrel\Transport.Abstractions\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Abstractions.csproj", "{CF55C43C-C96A-4AF1-9F52-974CB4C992E6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets", "..\Servers\Kestrel\Transport.Sockets\src\Microsoft.AspNetCore.Server.Kestrel.Transport.Sockets.csproj", "{B711B31D-727E-4142-BE50-50FA8AAC2EF5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.Cookies", "..\Security\Authentication\Cookies\src\Microsoft.AspNetCore.Authentication.Cookies.csproj", "{50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication", "..\Security\Authentication\Core\src\Microsoft.AspNetCore.Authentication.csproj", "{A76543B7-5E29-452E-B1BF-24A9323AE031}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authentication.OAuth", "..\Security\Authentication\OAuth\src\Microsoft.AspNetCore.Authentication.OAuth.csproj", "{40A4308C-484D-4BDD-90A9-39A264C16109}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization", "..\Security\Authorization\Core\src\Microsoft.AspNetCore.Authorization.csproj", "{C9CF3A77-21D0-4208-858D-537E1D2DBAC8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Authorization.Policy", "..\Security\Authorization\Policy\src\Microsoft.AspNetCore.Authorization.Policy.csproj", "{7EA1539B-8F2E-4FC6-BD00-96843DB38730}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.CookiePolicy", "..\Security\CookiePolicy\src\Microsoft.AspNetCore.CookiePolicy.csproj", "{E77D2531-823D-410A-8CAE-18C532C06563}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Cors", "..\Middleware\CORS\src\Microsoft.AspNetCore.Cors.csproj", "{C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.Abstractions", "..\Middleware\Diagnostics.Abstractions\src\Microsoft.AspNetCore.Diagnostics.Abstractions.csproj", "{2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics", "..\Middleware\Diagnostics\src\Microsoft.AspNetCore.Diagnostics.csproj", "{FB44434D-3F6F-457C-8EEC-C205616B8C29}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Diagnostics.HealthChecks", "..\Middleware\HealthChecks\src\Microsoft.AspNetCore.Diagnostics.HealthChecks.csproj", "{D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HostFiltering", "..\Middleware\HostFiltering\src\Microsoft.AspNetCore.HostFiltering.csproj", "{FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpOverrides", "..\Middleware\HttpOverrides\src\Microsoft.AspNetCore.HttpOverrides.csproj", "{67F810A2-4148-4E32-9EF3-3AEAEE09E08F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.HttpsPolicy", "..\Middleware\HttpsPolicy\src\Microsoft.AspNetCore.HttpsPolicy.csproj", "{50B743DD-4FD9-4F33-8492-3579E897C8F0}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization.Routing", "..\Middleware\Localization.Routing\src\Microsoft.AspNetCore.Localization.Routing.csproj", "{711B2B7A-476D-4B4D-A888-BAB03D488477}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Localization", "..\Middleware\Localization\src\Microsoft.AspNetCore.Localization.csproj", "{F9ED0F90-B856-441E-9D5A-7366B3DF1609}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching.Abstractions", "..\Middleware\ResponseCaching.Abstractions\src\Microsoft.AspNetCore.ResponseCaching.Abstractions.csproj", "{4D57E3A5-C6B1-4048-B6D3-DE9466814690}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCaching", "..\Middleware\ResponseCaching\src\Microsoft.AspNetCore.ResponseCaching.csproj", "{9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ResponseCompression", "..\Middleware\ResponseCompression\src\Microsoft.AspNetCore.ResponseCompression.csproj", "{1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Rewrite", "..\Middleware\Rewrite\src\Microsoft.AspNetCore.Rewrite.csproj", "{59A205E5-68CC-4865-9A6F-7B1000F3AAC2}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Session", "..\Middleware\Session\src\Microsoft.AspNetCore.Session.csproj", "{B378FE34-DA6A-479E-9328-856B51B9B859}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.StaticFiles", "..\Middleware\StaticFiles\src\Microsoft.AspNetCore.StaticFiles.csproj", "{D624C049-3B82-4A5D-BE74-20994B0E511B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.WebSockets", "..\Middleware\WebSockets\src\Microsoft.AspNetCore.WebSockets.csproj", "{EC66F41A-B7B1-4E46-8F19-E492F0A63E10}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor.Runtime", "..\Razor\Razor.Runtime\src\Microsoft.AspNetCore.Razor.Runtime.csproj", "{97332C7D-03FF-4AE2-9559-59B3BFB7555A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Razor", "..\Razor\Razor\src\Microsoft.AspNetCore.Razor.csproj", "{F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Abstractions", "..\Mvc\Mvc.Abstractions\src\Microsoft.AspNetCore.Mvc.Abstractions.csproj", "{38E7949C-9912-4173-87BD-120393AAAEA8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ApiExplorer", "..\Mvc\Mvc.ApiExplorer\src\Microsoft.AspNetCore.Mvc.ApiExplorer.csproj", "{09197A10-0B95-4C8F-BCFF-8FF3B15206BB}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Core", "..\Mvc\Mvc.Core\src\Microsoft.AspNetCore.Mvc.Core.csproj", "{E030F6BC-F3BC-40C8-ACCB-40B338185DF5}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Cors", "..\Mvc\Mvc.Cors\src\Microsoft.AspNetCore.Mvc.Cors.csproj", "{46DF3762-F8E6-45FC-A222-2B84A4BE5468}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.DataAnnotations", "..\Mvc\Mvc.DataAnnotations\src\Microsoft.AspNetCore.Mvc.DataAnnotations.csproj", "{59DBD61C-EB04-4757-95F8-9A427C3BB81E}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Json", "..\Mvc\Mvc.Formatters.Json\src\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj", "{3496416B-5E2F-4B6E-9A48-A561A8343C73}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Formatters.Xml", "..\Mvc\Mvc.Formatters.Xml\src\Microsoft.AspNetCore.Mvc.Formatters.Xml.csproj", "{4D6AB257-98AA-4F10-BCC0-62540395EF5C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Localization", "..\Mvc\Mvc.Localization\src\Microsoft.AspNetCore.Mvc.Localization.csproj", "{6925754F-FBE0-4250-B895-1A9975819209}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.RazorPages", "..\Mvc\Mvc.RazorPages\src\Microsoft.AspNetCore.Mvc.RazorPages.csproj", "{9CD117AB-B4B1-412D-9175-97F50E4DC110}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.Razor", "..\Mvc\Mvc.Razor\src\Microsoft.AspNetCore.Mvc.Razor.csproj", "{E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.TagHelpers", "..\Mvc\Mvc.TagHelpers\src\Microsoft.AspNetCore.Mvc.TagHelpers.csproj", "{AF63C08F-020F-4461-83B1-01D2F9982F4C}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc.ViewFeatures", "..\Mvc\Mvc.ViewFeatures\src\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj", "{5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Mvc", "..\Mvc\Mvc\src\Microsoft.AspNetCore.Mvc.csproj", "{C44F60AE-89C8-493F-A384-960DCE6DA08B}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections.Common", "..\SignalR\common\Http.Connections.Common\src\Microsoft.AspNetCore.Http.Connections.Common.csproj", "{181B1027-4F3B-41FC-8B83-20766A6F4CEC}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Http.Connections", "..\SignalR\common\Http.Connections\src\Microsoft.AspNetCore.Http.Connections.csproj", "{94C0E793-B378-44B3-9FDC-478A9CD88F68}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson", "..\SignalR\common\Protocols.NewtonsoftJson\src\Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson.csproj", "{7AE497C4-A6CF-483D-8D66-71A3D2460D96}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Common", "..\SignalR\common\SignalR.Common\src\Microsoft.AspNetCore.SignalR.Common.csproj", "{701DC45B-AB79-4614-BB29-8A7A2611E048}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR.Core", "..\SignalR\server\Core\src\Microsoft.AspNetCore.SignalR.Core.csproj", "{69967F6C-A7E0-40FC-86A1-547C94B6073F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.SignalR", "..\SignalR\server\SignalR\src\Microsoft.AspNetCore.SignalR.csproj", "{F2002E05-8FDD-4F55-A5E4-25A52B46D692}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components.Browser", "..\Components\Browser\src\Microsoft.AspNetCore.Components.Browser.csproj", "{EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.Components", "..\Components\Components\src\Microsoft.AspNetCore.Components.csproj", "{81B96508-D920-45F6-9534-0D348B11DFAB}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_dependencies", "_dependencies", "{D64F966A-B33B-4554-BA8C-A1AF91265996}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.AspNetCore.ApiAuthorization.IdentityServer", "..\Identity\ApiAuthorization.IdentityServer\src\Microsoft.AspNetCore.ApiAuthorization.IdentityServer.csproj", "{6012D544-32B4-4F5C-B335-A224AA4F661D}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -85,15 +247,1064 @@ Global {AF371A60-8A85-4ADF-BE44-0F2B94234DB1}.Release|x64.Build.0 = Release|Any CPU {AF371A60-8A85-4ADF-BE44-0F2B94234DB1}.Release|x86.ActiveCfg = Release|Any CPU {AF371A60-8A85-4ADF-BE44-0F2B94234DB1}.Release|x86.Build.0 = Release|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Debug|x64.ActiveCfg = Debug|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Debug|x64.Build.0 = Debug|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Debug|x86.ActiveCfg = Debug|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Debug|x86.Build.0 = Debug|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Release|Any CPU.Build.0 = Release|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Release|x64.ActiveCfg = Release|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Release|x64.Build.0 = Release|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Release|x86.ActiveCfg = Release|Any CPU + {4B971DBF-6B07-4DC5-914D-4D5681F220CC}.Release|x86.Build.0 = Release|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Debug|x64.ActiveCfg = Debug|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Debug|x64.Build.0 = Debug|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Debug|x86.ActiveCfg = Debug|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Debug|x86.Build.0 = Debug|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Release|Any CPU.Build.0 = Release|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Release|x64.ActiveCfg = Release|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Release|x64.Build.0 = Release|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Release|x86.ActiveCfg = Release|Any CPU + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5}.Release|x86.Build.0 = Release|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Debug|x64.Build.0 = Debug|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Debug|x86.ActiveCfg = Debug|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Debug|x86.Build.0 = Debug|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Release|Any CPU.Build.0 = Release|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Release|x64.ActiveCfg = Release|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Release|x64.Build.0 = Release|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Release|x86.ActiveCfg = Release|Any CPU + {E6B319D0-6A92-47D8-BC46-904DA44664A5}.Release|x86.Build.0 = Release|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Debug|x64.ActiveCfg = Debug|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Debug|x64.Build.0 = Debug|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Debug|x86.ActiveCfg = Debug|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Debug|x86.Build.0 = Debug|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Release|Any CPU.Build.0 = Release|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Release|x64.ActiveCfg = Release|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Release|x64.Build.0 = Release|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Release|x86.ActiveCfg = Release|Any CPU + {05291368-373F-48AA-84FC-5B1E4606641A}.Release|x86.Build.0 = Release|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Debug|x64.ActiveCfg = Debug|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Debug|x64.Build.0 = Debug|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Debug|x86.ActiveCfg = Debug|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Debug|x86.Build.0 = Debug|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Release|Any CPU.Build.0 = Release|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Release|x64.ActiveCfg = Release|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Release|x64.Build.0 = Release|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Release|x86.ActiveCfg = Release|Any CPU + {4BA90E96-EFFC-40CD-B101-054F492F77BE}.Release|x86.Build.0 = Release|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Debug|x64.ActiveCfg = Debug|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Debug|x64.Build.0 = Debug|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Debug|x86.ActiveCfg = Debug|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Debug|x86.Build.0 = Debug|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Release|Any CPU.Build.0 = Release|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Release|x64.ActiveCfg = Release|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Release|x64.Build.0 = Release|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Release|x86.ActiveCfg = Release|Any CPU + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F}.Release|x86.Build.0 = Release|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Debug|x64.ActiveCfg = Debug|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Debug|x64.Build.0 = Debug|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Debug|x86.ActiveCfg = Debug|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Debug|x86.Build.0 = Debug|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Release|Any CPU.Build.0 = Release|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Release|x64.ActiveCfg = Release|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Release|x64.Build.0 = Release|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Release|x86.ActiveCfg = Release|Any CPU + {4E459426-D759-4F59-9C74-9B16719D5A1B}.Release|x86.Build.0 = Release|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Debug|x64.ActiveCfg = Debug|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Debug|x64.Build.0 = Debug|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Debug|x86.ActiveCfg = Debug|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Debug|x86.Build.0 = Debug|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Release|Any CPU.Build.0 = Release|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Release|x64.ActiveCfg = Release|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Release|x64.Build.0 = Release|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Release|x86.ActiveCfg = Release|Any CPU + {43754D8F-104A-4622-A5C8-A0717E839910}.Release|x86.Build.0 = Release|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Debug|x64.ActiveCfg = Debug|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Debug|x64.Build.0 = Debug|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Debug|x86.ActiveCfg = Debug|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Debug|x86.Build.0 = Debug|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Release|Any CPU.Build.0 = Release|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Release|x64.ActiveCfg = Release|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Release|x64.Build.0 = Release|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Release|x86.ActiveCfg = Release|Any CPU + {0B8B8049-C769-4017-912C-DAF78D88C8D9}.Release|x86.Build.0 = Release|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Debug|x64.ActiveCfg = Debug|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Debug|x64.Build.0 = Debug|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Debug|x86.ActiveCfg = Debug|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Debug|x86.Build.0 = Debug|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Release|Any CPU.Build.0 = Release|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Release|x64.ActiveCfg = Release|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Release|x64.Build.0 = Release|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Release|x86.ActiveCfg = Release|Any CPU + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE}.Release|x86.Build.0 = Release|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Debug|x64.ActiveCfg = Debug|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Debug|x64.Build.0 = Debug|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Debug|x86.ActiveCfg = Debug|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Debug|x86.Build.0 = Debug|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Release|Any CPU.Build.0 = Release|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Release|x64.ActiveCfg = Release|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Release|x64.Build.0 = Release|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Release|x86.ActiveCfg = Release|Any CPU + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A}.Release|x86.Build.0 = Release|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Debug|x64.ActiveCfg = Debug|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Debug|x64.Build.0 = Debug|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Debug|x86.ActiveCfg = Debug|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Debug|x86.Build.0 = Debug|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Release|Any CPU.Build.0 = Release|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Release|x64.ActiveCfg = Release|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Release|x64.Build.0 = Release|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Release|x86.ActiveCfg = Release|Any CPU + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A}.Release|x86.Build.0 = Release|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Debug|x64.ActiveCfg = Debug|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Debug|x64.Build.0 = Debug|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Debug|x86.ActiveCfg = Debug|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Debug|x86.Build.0 = Debug|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Release|Any CPU.Build.0 = Release|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Release|x64.ActiveCfg = Release|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Release|x64.Build.0 = Release|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Release|x86.ActiveCfg = Release|Any CPU + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76}.Release|x86.Build.0 = Release|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Debug|x64.ActiveCfg = Debug|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Debug|x64.Build.0 = Debug|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Debug|x86.ActiveCfg = Debug|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Debug|x86.Build.0 = Debug|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Release|Any CPU.Build.0 = Release|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Release|x64.ActiveCfg = Release|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Release|x64.Build.0 = Release|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Release|x86.ActiveCfg = Release|Any CPU + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9}.Release|x86.Build.0 = Release|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Debug|x64.ActiveCfg = Debug|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Debug|x64.Build.0 = Debug|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Debug|x86.ActiveCfg = Debug|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Debug|x86.Build.0 = Debug|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Release|Any CPU.Build.0 = Release|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Release|x64.ActiveCfg = Release|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Release|x64.Build.0 = Release|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Release|x86.ActiveCfg = Release|Any CPU + {7451D310-4DA9-4945-8967-79645A0A9792}.Release|x86.Build.0 = Release|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Debug|x64.ActiveCfg = Debug|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Debug|x64.Build.0 = Debug|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Debug|x86.ActiveCfg = Debug|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Debug|x86.Build.0 = Debug|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Release|Any CPU.Build.0 = Release|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Release|x64.ActiveCfg = Release|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Release|x64.Build.0 = Release|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Release|x86.ActiveCfg = Release|Any CPU + {DE7DFE6A-12EE-4EE7-B59B-053524253C92}.Release|x86.Build.0 = Release|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Debug|x64.ActiveCfg = Debug|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Debug|x64.Build.0 = Debug|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Debug|x86.ActiveCfg = Debug|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Debug|x86.Build.0 = Debug|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Release|Any CPU.Build.0 = Release|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Release|x64.ActiveCfg = Release|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Release|x64.Build.0 = Release|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Release|x86.ActiveCfg = Release|Any CPU + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07}.Release|x86.Build.0 = Release|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Debug|x64.ActiveCfg = Debug|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Debug|x64.Build.0 = Debug|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Debug|x86.ActiveCfg = Debug|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Debug|x86.Build.0 = Debug|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Release|Any CPU.Build.0 = Release|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Release|x64.ActiveCfg = Release|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Release|x64.Build.0 = Release|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Release|x86.ActiveCfg = Release|Any CPU + {DEA00510-A0EF-4446-83D2-EDC2C94EB286}.Release|x86.Build.0 = Release|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Debug|x64.ActiveCfg = Debug|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Debug|x64.Build.0 = Debug|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Debug|x86.ActiveCfg = Debug|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Debug|x86.Build.0 = Debug|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Release|Any CPU.Build.0 = Release|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Release|x64.ActiveCfg = Release|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Release|x64.Build.0 = Release|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Release|x86.ActiveCfg = Release|Any CPU + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B}.Release|x86.Build.0 = Release|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Debug|x64.ActiveCfg = Debug|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Debug|x64.Build.0 = Debug|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Debug|x86.ActiveCfg = Debug|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Debug|x86.Build.0 = Debug|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Release|Any CPU.Build.0 = Release|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Release|x64.ActiveCfg = Release|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Release|x64.Build.0 = Release|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Release|x86.ActiveCfg = Release|Any CPU + {388CF5ED-14CE-416D-B7E3-614F8E961ECF}.Release|x86.Build.0 = Release|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Debug|x64.ActiveCfg = Debug|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Debug|x64.Build.0 = Debug|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Debug|x86.ActiveCfg = Debug|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Debug|x86.Build.0 = Debug|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Release|Any CPU.Build.0 = Release|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Release|x64.ActiveCfg = Release|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Release|x64.Build.0 = Release|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Release|x86.ActiveCfg = Release|Any CPU + {C469C884-5534-4A44-B641-E82B6D58F3CD}.Release|x86.Build.0 = Release|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Debug|x64.ActiveCfg = Debug|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Debug|x64.Build.0 = Debug|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Debug|x86.ActiveCfg = Debug|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Debug|x86.Build.0 = Debug|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Release|Any CPU.Build.0 = Release|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Release|x64.ActiveCfg = Release|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Release|x64.Build.0 = Release|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Release|x86.ActiveCfg = Release|Any CPU + {D0A0667E-8828-41AC-9997-3FA7497734D7}.Release|x86.Build.0 = Release|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Debug|x64.ActiveCfg = Debug|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Debug|x64.Build.0 = Debug|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Debug|x86.ActiveCfg = Debug|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Debug|x86.Build.0 = Debug|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Release|Any CPU.Build.0 = Release|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Release|x64.ActiveCfg = Release|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Release|x64.Build.0 = Release|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Release|x86.ActiveCfg = Release|Any CPU + {7837205D-1F1A-4773-A39E-DA8BAE755E33}.Release|x86.Build.0 = Release|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Debug|x64.ActiveCfg = Debug|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Debug|x64.Build.0 = Debug|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Debug|x86.ActiveCfg = Debug|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Debug|x86.Build.0 = Debug|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Release|Any CPU.Build.0 = Release|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Release|x64.ActiveCfg = Release|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Release|x64.Build.0 = Release|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Release|x86.ActiveCfg = Release|Any CPU + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3}.Release|x86.Build.0 = Release|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Debug|x64.ActiveCfg = Debug|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Debug|x64.Build.0 = Debug|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Debug|x86.ActiveCfg = Debug|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Debug|x86.Build.0 = Debug|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Release|Any CPU.Build.0 = Release|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Release|x64.ActiveCfg = Release|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Release|x64.Build.0 = Release|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Release|x86.ActiveCfg = Release|Any CPU + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD}.Release|x86.Build.0 = Release|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Debug|x64.ActiveCfg = Debug|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Debug|x64.Build.0 = Debug|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Debug|x86.ActiveCfg = Debug|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Debug|x86.Build.0 = Debug|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Release|Any CPU.Build.0 = Release|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Release|x64.ActiveCfg = Release|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Release|x64.Build.0 = Release|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Release|x86.ActiveCfg = Release|Any CPU + {F556EC24-3998-4126-B129-70B1960D6508}.Release|x86.Build.0 = Release|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Debug|x64.ActiveCfg = Debug|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Debug|x64.Build.0 = Debug|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Debug|x86.ActiveCfg = Debug|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Debug|x86.Build.0 = Debug|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Release|Any CPU.Build.0 = Release|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Release|x64.ActiveCfg = Release|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Release|x64.Build.0 = Release|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Release|x86.ActiveCfg = Release|Any CPU + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7}.Release|x86.Build.0 = Release|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Debug|x64.ActiveCfg = Debug|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Debug|x64.Build.0 = Debug|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Debug|x86.ActiveCfg = Debug|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Debug|x86.Build.0 = Debug|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Release|Any CPU.Build.0 = Release|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Release|x64.ActiveCfg = Release|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Release|x64.Build.0 = Release|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Release|x86.ActiveCfg = Release|Any CPU + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC}.Release|x86.Build.0 = Release|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Debug|x64.ActiveCfg = Debug|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Debug|x64.Build.0 = Debug|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Debug|x86.ActiveCfg = Debug|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Debug|x86.Build.0 = Debug|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Release|Any CPU.Build.0 = Release|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Release|x64.ActiveCfg = Release|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Release|x64.Build.0 = Release|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Release|x86.ActiveCfg = Release|Any CPU + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C}.Release|x86.Build.0 = Release|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Debug|x64.ActiveCfg = Debug|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Debug|x64.Build.0 = Debug|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Debug|x86.ActiveCfg = Debug|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Debug|x86.Build.0 = Debug|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Release|Any CPU.Build.0 = Release|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Release|x64.ActiveCfg = Release|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Release|x64.Build.0 = Release|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Release|x86.ActiveCfg = Release|Any CPU + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A}.Release|x86.Build.0 = Release|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Debug|Any CPU.Build.0 = Debug|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Debug|x64.ActiveCfg = Debug|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Debug|x64.Build.0 = Debug|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Debug|x86.ActiveCfg = Debug|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Debug|x86.Build.0 = Debug|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Release|Any CPU.ActiveCfg = Release|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Release|Any CPU.Build.0 = Release|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Release|x64.ActiveCfg = Release|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Release|x64.Build.0 = Release|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Release|x86.ActiveCfg = Release|Any CPU + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013}.Release|x86.Build.0 = Release|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Debug|Any CPU.Build.0 = Debug|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Debug|x64.ActiveCfg = Debug|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Debug|x64.Build.0 = Debug|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Debug|x86.ActiveCfg = Debug|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Debug|x86.Build.0 = Debug|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Release|Any CPU.ActiveCfg = Release|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Release|Any CPU.Build.0 = Release|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Release|x64.ActiveCfg = Release|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Release|x64.Build.0 = Release|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Release|x86.ActiveCfg = Release|Any CPU + {063276D5-D247-4C6D-A2DA-8707017A6244}.Release|x86.Build.0 = Release|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Debug|x64.ActiveCfg = Debug|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Debug|x64.Build.0 = Debug|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Debug|x86.ActiveCfg = Debug|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Debug|x86.Build.0 = Debug|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Release|Any CPU.Build.0 = Release|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Release|x64.ActiveCfg = Release|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Release|x64.Build.0 = Release|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Release|x86.ActiveCfg = Release|Any CPU + {B3928FBE-FCC1-4174-A581-53369D1B40E3}.Release|x86.Build.0 = Release|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Debug|x64.ActiveCfg = Debug|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Debug|x64.Build.0 = Debug|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Debug|x86.ActiveCfg = Debug|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Debug|x86.Build.0 = Debug|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Release|Any CPU.Build.0 = Release|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Release|x64.ActiveCfg = Release|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Release|x64.Build.0 = Release|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Release|x86.ActiveCfg = Release|Any CPU + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6}.Release|x86.Build.0 = Release|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Debug|x64.ActiveCfg = Debug|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Debug|x64.Build.0 = Debug|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Debug|x86.ActiveCfg = Debug|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Debug|x86.Build.0 = Debug|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Release|Any CPU.Build.0 = Release|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Release|x64.ActiveCfg = Release|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Release|x64.Build.0 = Release|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Release|x86.ActiveCfg = Release|Any CPU + {B711B31D-727E-4142-BE50-50FA8AAC2EF5}.Release|x86.Build.0 = Release|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Debug|x64.ActiveCfg = Debug|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Debug|x64.Build.0 = Debug|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Debug|x86.ActiveCfg = Debug|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Debug|x86.Build.0 = Debug|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Release|Any CPU.Build.0 = Release|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Release|x64.ActiveCfg = Release|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Release|x64.Build.0 = Release|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Release|x86.ActiveCfg = Release|Any CPU + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF}.Release|x86.Build.0 = Release|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Debug|x64.ActiveCfg = Debug|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Debug|x64.Build.0 = Debug|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Debug|x86.ActiveCfg = Debug|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Debug|x86.Build.0 = Debug|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Release|Any CPU.Build.0 = Release|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Release|x64.ActiveCfg = Release|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Release|x64.Build.0 = Release|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Release|x86.ActiveCfg = Release|Any CPU + {A76543B7-5E29-452E-B1BF-24A9323AE031}.Release|x86.Build.0 = Release|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Debug|x64.ActiveCfg = Debug|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Debug|x64.Build.0 = Debug|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Debug|x86.ActiveCfg = Debug|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Debug|x86.Build.0 = Debug|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Release|Any CPU.Build.0 = Release|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Release|x64.ActiveCfg = Release|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Release|x64.Build.0 = Release|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Release|x86.ActiveCfg = Release|Any CPU + {40A4308C-484D-4BDD-90A9-39A264C16109}.Release|x86.Build.0 = Release|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Debug|x64.ActiveCfg = Debug|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Debug|x64.Build.0 = Debug|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Debug|x86.ActiveCfg = Debug|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Debug|x86.Build.0 = Debug|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Release|Any CPU.Build.0 = Release|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Release|x64.ActiveCfg = Release|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Release|x64.Build.0 = Release|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Release|x86.ActiveCfg = Release|Any CPU + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8}.Release|x86.Build.0 = Release|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Debug|x64.ActiveCfg = Debug|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Debug|x64.Build.0 = Debug|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Debug|x86.ActiveCfg = Debug|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Debug|x86.Build.0 = Debug|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Release|Any CPU.Build.0 = Release|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Release|x64.ActiveCfg = Release|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Release|x64.Build.0 = Release|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Release|x86.ActiveCfg = Release|Any CPU + {7EA1539B-8F2E-4FC6-BD00-96843DB38730}.Release|x86.Build.0 = Release|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Debug|x64.ActiveCfg = Debug|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Debug|x64.Build.0 = Debug|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Debug|x86.ActiveCfg = Debug|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Debug|x86.Build.0 = Debug|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Release|Any CPU.Build.0 = Release|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Release|x64.ActiveCfg = Release|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Release|x64.Build.0 = Release|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Release|x86.ActiveCfg = Release|Any CPU + {E77D2531-823D-410A-8CAE-18C532C06563}.Release|x86.Build.0 = Release|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Debug|x64.ActiveCfg = Debug|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Debug|x64.Build.0 = Debug|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Debug|x86.ActiveCfg = Debug|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Debug|x86.Build.0 = Debug|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Release|Any CPU.Build.0 = Release|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Release|x64.ActiveCfg = Release|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Release|x64.Build.0 = Release|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Release|x86.ActiveCfg = Release|Any CPU + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F}.Release|x86.Build.0 = Release|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Debug|x64.ActiveCfg = Debug|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Debug|x64.Build.0 = Debug|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Debug|x86.ActiveCfg = Debug|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Debug|x86.Build.0 = Debug|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Release|Any CPU.Build.0 = Release|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Release|x64.ActiveCfg = Release|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Release|x64.Build.0 = Release|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Release|x86.ActiveCfg = Release|Any CPU + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E}.Release|x86.Build.0 = Release|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Debug|x64.ActiveCfg = Debug|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Debug|x64.Build.0 = Debug|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Debug|x86.ActiveCfg = Debug|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Debug|x86.Build.0 = Debug|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Release|Any CPU.Build.0 = Release|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Release|x64.ActiveCfg = Release|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Release|x64.Build.0 = Release|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Release|x86.ActiveCfg = Release|Any CPU + {FB44434D-3F6F-457C-8EEC-C205616B8C29}.Release|x86.Build.0 = Release|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Debug|x64.ActiveCfg = Debug|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Debug|x64.Build.0 = Debug|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Debug|x86.ActiveCfg = Debug|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Debug|x86.Build.0 = Debug|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Release|Any CPU.Build.0 = Release|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Release|x64.ActiveCfg = Release|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Release|x64.Build.0 = Release|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Release|x86.ActiveCfg = Release|Any CPU + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870}.Release|x86.Build.0 = Release|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Debug|x64.ActiveCfg = Debug|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Debug|x64.Build.0 = Debug|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Debug|x86.ActiveCfg = Debug|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Debug|x86.Build.0 = Debug|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Release|Any CPU.Build.0 = Release|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Release|x64.ActiveCfg = Release|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Release|x64.Build.0 = Release|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Release|x86.ActiveCfg = Release|Any CPU + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A}.Release|x86.Build.0 = Release|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Debug|x64.ActiveCfg = Debug|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Debug|x64.Build.0 = Debug|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Debug|x86.ActiveCfg = Debug|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Debug|x86.Build.0 = Debug|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Release|Any CPU.Build.0 = Release|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Release|x64.ActiveCfg = Release|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Release|x64.Build.0 = Release|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Release|x86.ActiveCfg = Release|Any CPU + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F}.Release|x86.Build.0 = Release|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Debug|x64.ActiveCfg = Debug|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Debug|x64.Build.0 = Debug|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Debug|x86.ActiveCfg = Debug|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Debug|x86.Build.0 = Debug|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Release|Any CPU.Build.0 = Release|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Release|x64.ActiveCfg = Release|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Release|x64.Build.0 = Release|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Release|x86.ActiveCfg = Release|Any CPU + {50B743DD-4FD9-4F33-8492-3579E897C8F0}.Release|x86.Build.0 = Release|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Debug|Any CPU.Build.0 = Debug|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Debug|x64.ActiveCfg = Debug|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Debug|x64.Build.0 = Debug|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Debug|x86.ActiveCfg = Debug|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Debug|x86.Build.0 = Debug|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Release|Any CPU.ActiveCfg = Release|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Release|Any CPU.Build.0 = Release|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Release|x64.ActiveCfg = Release|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Release|x64.Build.0 = Release|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Release|x86.ActiveCfg = Release|Any CPU + {711B2B7A-476D-4B4D-A888-BAB03D488477}.Release|x86.Build.0 = Release|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Debug|x64.ActiveCfg = Debug|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Debug|x64.Build.0 = Debug|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Debug|x86.ActiveCfg = Debug|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Debug|x86.Build.0 = Debug|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Release|Any CPU.Build.0 = Release|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Release|x64.ActiveCfg = Release|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Release|x64.Build.0 = Release|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Release|x86.ActiveCfg = Release|Any CPU + {F9ED0F90-B856-441E-9D5A-7366B3DF1609}.Release|x86.Build.0 = Release|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Debug|x64.ActiveCfg = Debug|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Debug|x64.Build.0 = Debug|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Debug|x86.ActiveCfg = Debug|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Debug|x86.Build.0 = Debug|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Release|Any CPU.Build.0 = Release|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Release|x64.ActiveCfg = Release|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Release|x64.Build.0 = Release|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Release|x86.ActiveCfg = Release|Any CPU + {4D57E3A5-C6B1-4048-B6D3-DE9466814690}.Release|x86.Build.0 = Release|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Debug|x64.ActiveCfg = Debug|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Debug|x64.Build.0 = Debug|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Debug|x86.ActiveCfg = Debug|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Debug|x86.Build.0 = Debug|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Release|Any CPU.Build.0 = Release|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Release|x64.ActiveCfg = Release|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Release|x64.Build.0 = Release|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Release|x86.ActiveCfg = Release|Any CPU + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97}.Release|x86.Build.0 = Release|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Debug|x64.ActiveCfg = Debug|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Debug|x64.Build.0 = Debug|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Debug|x86.ActiveCfg = Debug|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Debug|x86.Build.0 = Debug|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Release|Any CPU.Build.0 = Release|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Release|x64.ActiveCfg = Release|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Release|x64.Build.0 = Release|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Release|x86.ActiveCfg = Release|Any CPU + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22}.Release|x86.Build.0 = Release|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Debug|x64.ActiveCfg = Debug|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Debug|x64.Build.0 = Debug|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Debug|x86.ActiveCfg = Debug|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Debug|x86.Build.0 = Debug|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Release|Any CPU.Build.0 = Release|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Release|x64.ActiveCfg = Release|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Release|x64.Build.0 = Release|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Release|x86.ActiveCfg = Release|Any CPU + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2}.Release|x86.Build.0 = Release|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Debug|x64.ActiveCfg = Debug|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Debug|x64.Build.0 = Debug|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Debug|x86.ActiveCfg = Debug|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Debug|x86.Build.0 = Debug|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Release|Any CPU.Build.0 = Release|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Release|x64.ActiveCfg = Release|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Release|x64.Build.0 = Release|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Release|x86.ActiveCfg = Release|Any CPU + {B378FE34-DA6A-479E-9328-856B51B9B859}.Release|x86.Build.0 = Release|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Debug|x64.ActiveCfg = Debug|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Debug|x64.Build.0 = Debug|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Debug|x86.ActiveCfg = Debug|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Debug|x86.Build.0 = Debug|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Release|Any CPU.Build.0 = Release|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Release|x64.ActiveCfg = Release|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Release|x64.Build.0 = Release|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Release|x86.ActiveCfg = Release|Any CPU + {D624C049-3B82-4A5D-BE74-20994B0E511B}.Release|x86.Build.0 = Release|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Debug|x64.ActiveCfg = Debug|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Debug|x64.Build.0 = Debug|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Debug|x86.ActiveCfg = Debug|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Debug|x86.Build.0 = Debug|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Release|Any CPU.Build.0 = Release|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Release|x64.ActiveCfg = Release|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Release|x64.Build.0 = Release|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Release|x86.ActiveCfg = Release|Any CPU + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10}.Release|x86.Build.0 = Release|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Debug|x64.ActiveCfg = Debug|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Debug|x64.Build.0 = Debug|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Debug|x86.ActiveCfg = Debug|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Debug|x86.Build.0 = Debug|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Release|Any CPU.Build.0 = Release|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Release|x64.ActiveCfg = Release|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Release|x64.Build.0 = Release|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Release|x86.ActiveCfg = Release|Any CPU + {97332C7D-03FF-4AE2-9559-59B3BFB7555A}.Release|x86.Build.0 = Release|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Debug|x64.ActiveCfg = Debug|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Debug|x64.Build.0 = Debug|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Debug|x86.ActiveCfg = Debug|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Debug|x86.Build.0 = Debug|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Release|Any CPU.Build.0 = Release|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Release|x64.ActiveCfg = Release|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Release|x64.Build.0 = Release|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Release|x86.ActiveCfg = Release|Any CPU + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D}.Release|x86.Build.0 = Release|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Debug|x64.ActiveCfg = Debug|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Debug|x64.Build.0 = Debug|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Debug|x86.ActiveCfg = Debug|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Debug|x86.Build.0 = Debug|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Release|Any CPU.Build.0 = Release|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Release|x64.ActiveCfg = Release|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Release|x64.Build.0 = Release|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Release|x86.ActiveCfg = Release|Any CPU + {38E7949C-9912-4173-87BD-120393AAAEA8}.Release|x86.Build.0 = Release|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Debug|x64.ActiveCfg = Debug|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Debug|x64.Build.0 = Debug|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Debug|x86.ActiveCfg = Debug|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Debug|x86.Build.0 = Debug|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Release|Any CPU.Build.0 = Release|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Release|x64.ActiveCfg = Release|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Release|x64.Build.0 = Release|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Release|x86.ActiveCfg = Release|Any CPU + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB}.Release|x86.Build.0 = Release|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Debug|x64.ActiveCfg = Debug|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Debug|x64.Build.0 = Debug|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Debug|x86.ActiveCfg = Debug|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Debug|x86.Build.0 = Debug|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Release|Any CPU.Build.0 = Release|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Release|x64.ActiveCfg = Release|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Release|x64.Build.0 = Release|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Release|x86.ActiveCfg = Release|Any CPU + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5}.Release|x86.Build.0 = Release|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Debug|Any CPU.Build.0 = Debug|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Debug|x64.ActiveCfg = Debug|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Debug|x64.Build.0 = Debug|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Debug|x86.ActiveCfg = Debug|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Debug|x86.Build.0 = Debug|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Release|Any CPU.ActiveCfg = Release|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Release|Any CPU.Build.0 = Release|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Release|x64.ActiveCfg = Release|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Release|x64.Build.0 = Release|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Release|x86.ActiveCfg = Release|Any CPU + {46DF3762-F8E6-45FC-A222-2B84A4BE5468}.Release|x86.Build.0 = Release|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Debug|x64.ActiveCfg = Debug|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Debug|x64.Build.0 = Debug|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Debug|x86.ActiveCfg = Debug|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Debug|x86.Build.0 = Debug|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Release|Any CPU.Build.0 = Release|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Release|x64.ActiveCfg = Release|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Release|x64.Build.0 = Release|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Release|x86.ActiveCfg = Release|Any CPU + {59DBD61C-EB04-4757-95F8-9A427C3BB81E}.Release|x86.Build.0 = Release|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Debug|x64.ActiveCfg = Debug|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Debug|x64.Build.0 = Debug|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Debug|x86.ActiveCfg = Debug|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Debug|x86.Build.0 = Debug|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Release|Any CPU.Build.0 = Release|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Release|x64.ActiveCfg = Release|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Release|x64.Build.0 = Release|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Release|x86.ActiveCfg = Release|Any CPU + {3496416B-5E2F-4B6E-9A48-A561A8343C73}.Release|x86.Build.0 = Release|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Debug|x64.ActiveCfg = Debug|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Debug|x64.Build.0 = Debug|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Debug|x86.ActiveCfg = Debug|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Debug|x86.Build.0 = Debug|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Release|Any CPU.Build.0 = Release|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Release|x64.ActiveCfg = Release|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Release|x64.Build.0 = Release|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Release|x86.ActiveCfg = Release|Any CPU + {4D6AB257-98AA-4F10-BCC0-62540395EF5C}.Release|x86.Build.0 = Release|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Debug|x64.ActiveCfg = Debug|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Debug|x64.Build.0 = Debug|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Debug|x86.ActiveCfg = Debug|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Debug|x86.Build.0 = Debug|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Release|Any CPU.Build.0 = Release|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Release|x64.ActiveCfg = Release|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Release|x64.Build.0 = Release|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Release|x86.ActiveCfg = Release|Any CPU + {6925754F-FBE0-4250-B895-1A9975819209}.Release|x86.Build.0 = Release|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Debug|x64.ActiveCfg = Debug|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Debug|x64.Build.0 = Debug|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Debug|x86.ActiveCfg = Debug|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Debug|x86.Build.0 = Debug|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Release|Any CPU.Build.0 = Release|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Release|x64.ActiveCfg = Release|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Release|x64.Build.0 = Release|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Release|x86.ActiveCfg = Release|Any CPU + {9CD117AB-B4B1-412D-9175-97F50E4DC110}.Release|x86.Build.0 = Release|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Debug|x64.ActiveCfg = Debug|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Debug|x64.Build.0 = Debug|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Debug|x86.ActiveCfg = Debug|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Debug|x86.Build.0 = Debug|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Release|Any CPU.Build.0 = Release|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Release|x64.ActiveCfg = Release|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Release|x64.Build.0 = Release|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Release|x86.ActiveCfg = Release|Any CPU + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F}.Release|x86.Build.0 = Release|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Debug|x64.ActiveCfg = Debug|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Debug|x64.Build.0 = Debug|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Debug|x86.ActiveCfg = Debug|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Debug|x86.Build.0 = Debug|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Release|Any CPU.Build.0 = Release|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Release|x64.ActiveCfg = Release|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Release|x64.Build.0 = Release|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Release|x86.ActiveCfg = Release|Any CPU + {AF63C08F-020F-4461-83B1-01D2F9982F4C}.Release|x86.Build.0 = Release|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Debug|x64.ActiveCfg = Debug|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Debug|x64.Build.0 = Debug|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Debug|x86.ActiveCfg = Debug|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Debug|x86.Build.0 = Debug|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Release|Any CPU.Build.0 = Release|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Release|x64.ActiveCfg = Release|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Release|x64.Build.0 = Release|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Release|x86.ActiveCfg = Release|Any CPU + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8}.Release|x86.Build.0 = Release|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Debug|x64.ActiveCfg = Debug|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Debug|x64.Build.0 = Debug|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Debug|x86.ActiveCfg = Debug|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Debug|x86.Build.0 = Debug|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Release|Any CPU.Build.0 = Release|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Release|x64.ActiveCfg = Release|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Release|x64.Build.0 = Release|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Release|x86.ActiveCfg = Release|Any CPU + {C44F60AE-89C8-493F-A384-960DCE6DA08B}.Release|x86.Build.0 = Release|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Debug|x64.ActiveCfg = Debug|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Debug|x64.Build.0 = Debug|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Debug|x86.ActiveCfg = Debug|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Debug|x86.Build.0 = Debug|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Release|Any CPU.Build.0 = Release|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Release|x64.ActiveCfg = Release|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Release|x64.Build.0 = Release|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Release|x86.ActiveCfg = Release|Any CPU + {181B1027-4F3B-41FC-8B83-20766A6F4CEC}.Release|x86.Build.0 = Release|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Debug|Any CPU.Build.0 = Debug|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Debug|x64.ActiveCfg = Debug|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Debug|x64.Build.0 = Debug|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Debug|x86.ActiveCfg = Debug|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Debug|x86.Build.0 = Debug|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Release|Any CPU.ActiveCfg = Release|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Release|Any CPU.Build.0 = Release|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Release|x64.ActiveCfg = Release|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Release|x64.Build.0 = Release|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Release|x86.ActiveCfg = Release|Any CPU + {94C0E793-B378-44B3-9FDC-478A9CD88F68}.Release|x86.Build.0 = Release|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Debug|x64.ActiveCfg = Debug|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Debug|x64.Build.0 = Debug|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Debug|x86.ActiveCfg = Debug|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Debug|x86.Build.0 = Debug|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Release|Any CPU.Build.0 = Release|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Release|x64.ActiveCfg = Release|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Release|x64.Build.0 = Release|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Release|x86.ActiveCfg = Release|Any CPU + {7AE497C4-A6CF-483D-8D66-71A3D2460D96}.Release|x86.Build.0 = Release|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Debug|Any CPU.Build.0 = Debug|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Debug|x64.ActiveCfg = Debug|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Debug|x64.Build.0 = Debug|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Debug|x86.ActiveCfg = Debug|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Debug|x86.Build.0 = Debug|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Release|Any CPU.ActiveCfg = Release|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Release|Any CPU.Build.0 = Release|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Release|x64.ActiveCfg = Release|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Release|x64.Build.0 = Release|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Release|x86.ActiveCfg = Release|Any CPU + {701DC45B-AB79-4614-BB29-8A7A2611E048}.Release|x86.Build.0 = Release|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Debug|x64.ActiveCfg = Debug|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Debug|x64.Build.0 = Debug|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Debug|x86.ActiveCfg = Debug|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Debug|x86.Build.0 = Debug|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Release|Any CPU.Build.0 = Release|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Release|x64.ActiveCfg = Release|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Release|x64.Build.0 = Release|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Release|x86.ActiveCfg = Release|Any CPU + {69967F6C-A7E0-40FC-86A1-547C94B6073F}.Release|x86.Build.0 = Release|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Debug|x64.ActiveCfg = Debug|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Debug|x64.Build.0 = Debug|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Debug|x86.ActiveCfg = Debug|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Debug|x86.Build.0 = Debug|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Release|Any CPU.Build.0 = Release|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Release|x64.ActiveCfg = Release|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Release|x64.Build.0 = Release|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Release|x86.ActiveCfg = Release|Any CPU + {F2002E05-8FDD-4F55-A5E4-25A52B46D692}.Release|x86.Build.0 = Release|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Debug|x64.ActiveCfg = Debug|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Debug|x64.Build.0 = Debug|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Debug|x86.ActiveCfg = Debug|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Debug|x86.Build.0 = Debug|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Release|Any CPU.Build.0 = Release|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Release|x64.ActiveCfg = Release|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Release|x64.Build.0 = Release|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Release|x86.ActiveCfg = Release|Any CPU + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4}.Release|x86.Build.0 = Release|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Debug|x64.ActiveCfg = Debug|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Debug|x64.Build.0 = Debug|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Debug|x86.ActiveCfg = Debug|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Debug|x86.Build.0 = Debug|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Release|Any CPU.Build.0 = Release|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Release|x64.ActiveCfg = Release|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Release|x64.Build.0 = Release|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Release|x86.ActiveCfg = Release|Any CPU + {81B96508-D920-45F6-9534-0D348B11DFAB}.Release|x86.Build.0 = Release|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Debug|x64.ActiveCfg = Debug|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Debug|x64.Build.0 = Debug|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Debug|x86.ActiveCfg = Debug|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Debug|x86.Build.0 = Debug|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Release|Any CPU.Build.0 = Release|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Release|x64.ActiveCfg = Release|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Release|x64.Build.0 = Release|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Release|x86.ActiveCfg = Release|Any CPU + {6012D544-32B4-4F5C-B335-A224AA4F661D}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution - {3D3DE8B3-6B54-4CF4-82B0-718E0009A4E5} = {A8E11D55-EC73-4B2B-87CE-277E6C9A8CB6} - {96251C41-7953-46DC-B131-5A070640959A} = {A8E11D55-EC73-4B2B-87CE-277E6C9A8CB6} - {92F0615B-4C8F-456C-86C0-39384BB7031E} = {A8E11D55-EC73-4B2B-87CE-277E6C9A8CB6} - {BC03F087-9B6F-4A66-9571-B0C5C204A101} = {A8E11D55-EC73-4B2B-87CE-277E6C9A8CB6} + {4B971DBF-6B07-4DC5-914D-4D5681F220CC} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {4D91ADAC-7CE2-4738-B6C5-986626F14EB5} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {E6B319D0-6A92-47D8-BC46-904DA44664A5} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {05291368-373F-48AA-84FC-5B1E4606641A} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {4BA90E96-EFFC-40CD-B101-054F492F77BE} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {071A7EB2-9F0C-46C2-82B4-4BD73F293F9F} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {4E459426-D759-4F59-9C74-9B16719D5A1B} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {43754D8F-104A-4622-A5C8-A0717E839910} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {0B8B8049-C769-4017-912C-DAF78D88C8D9} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {32A7057C-D9E3-4FCD-8C82-DC906B272ABE} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {F972C0F1-BE90-4919-BF93-231CD2FFEB0A} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {4D93AD1D-CEC4-401B-B6F5-DAD09942455A} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {B2F453A1-93B0-471C-8E87-2CEF82CBAD76} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {05E7C8CC-5B18-445E-A5A2-133B2F1449E9} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {7451D310-4DA9-4945-8967-79645A0A9792} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {DE7DFE6A-12EE-4EE7-B59B-053524253C92} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {F6C93BE6-B259-4F87-8B6C-E179E5D71C07} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {DEA00510-A0EF-4446-83D2-EDC2C94EB286} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {CEA5E19B-53D6-459A-8973-465B7DDE1B9B} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {388CF5ED-14CE-416D-B7E3-614F8E961ECF} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {C469C884-5534-4A44-B641-E82B6D58F3CD} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {D0A0667E-8828-41AC-9997-3FA7497734D7} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {7837205D-1F1A-4773-A39E-DA8BAE755E33} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {FBD69A3D-8D49-4538-A77F-1F05E05EF3D3} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {6E531CD4-ACC4-4686-BA45-CFA01FB458FD} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {F556EC24-3998-4126-B129-70B1960D6508} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {84B548DC-4065-4F40-BC7D-6E5DC8231DB7} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {4BF1ECDC-C6BA-45FA-857F-6D4FE9DC58EC} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {BA670255-DCC5-4DAE-B5B5-9E0671460E6C} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {EBBDF526-AD66-4D7D-BE79-97BBEB2DDD0A} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {571FBBC8-F6E1-4DCE-8D56-A84E2EB6A013} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {063276D5-D247-4C6D-A2DA-8707017A6244} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {B3928FBE-FCC1-4174-A581-53369D1B40E3} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {CF55C43C-C96A-4AF1-9F52-974CB4C992E6} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {B711B31D-727E-4142-BE50-50FA8AAC2EF5} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {50896EEB-D3FD-4D2E-BD46-F42E3333C7CF} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {A76543B7-5E29-452E-B1BF-24A9323AE031} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {40A4308C-484D-4BDD-90A9-39A264C16109} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {C9CF3A77-21D0-4208-858D-537E1D2DBAC8} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {7EA1539B-8F2E-4FC6-BD00-96843DB38730} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {E77D2531-823D-410A-8CAE-18C532C06563} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {C1FCF76B-97B8-499F-BBA3-70EC592A0C2F} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {2F1BFEE9-227B-4C22-8D04-3EEE5D758D1E} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {FB44434D-3F6F-457C-8EEC-C205616B8C29} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {D72CE9E6-3B5C-4BCE-AF87-D6EF6A45D870} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {FBD2DD77-994F-4D66-8EDC-F9DAA24E1C8A} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {67F810A2-4148-4E32-9EF3-3AEAEE09E08F} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {50B743DD-4FD9-4F33-8492-3579E897C8F0} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {711B2B7A-476D-4B4D-A888-BAB03D488477} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {F9ED0F90-B856-441E-9D5A-7366B3DF1609} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {4D57E3A5-C6B1-4048-B6D3-DE9466814690} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {9122A03E-A212-4EFA-BDA1-C58FD6FCFC97} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {1F7A7A5C-7793-4FD2-80D6-5ED47D30EF22} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {59A205E5-68CC-4865-9A6F-7B1000F3AAC2} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {B378FE34-DA6A-479E-9328-856B51B9B859} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {D624C049-3B82-4A5D-BE74-20994B0E511B} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {EC66F41A-B7B1-4E46-8F19-E492F0A63E10} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {97332C7D-03FF-4AE2-9559-59B3BFB7555A} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {F1ED1CAA-76A4-4B08-93DA-E1BDB3F6981D} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {38E7949C-9912-4173-87BD-120393AAAEA8} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {09197A10-0B95-4C8F-BCFF-8FF3B15206BB} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {E030F6BC-F3BC-40C8-ACCB-40B338185DF5} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {46DF3762-F8E6-45FC-A222-2B84A4BE5468} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {59DBD61C-EB04-4757-95F8-9A427C3BB81E} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {3496416B-5E2F-4B6E-9A48-A561A8343C73} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {4D6AB257-98AA-4F10-BCC0-62540395EF5C} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {6925754F-FBE0-4250-B895-1A9975819209} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {9CD117AB-B4B1-412D-9175-97F50E4DC110} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {E0DA4D42-3BAA-4DCB-8E41-FB53BBC7985F} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {AF63C08F-020F-4461-83B1-01D2F9982F4C} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {5A4D29E5-EEF8-483D-98E7-BDB20F67C5E8} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {C44F60AE-89C8-493F-A384-960DCE6DA08B} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {181B1027-4F3B-41FC-8B83-20766A6F4CEC} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {94C0E793-B378-44B3-9FDC-478A9CD88F68} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {7AE497C4-A6CF-483D-8D66-71A3D2460D96} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {701DC45B-AB79-4614-BB29-8A7A2611E048} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {69967F6C-A7E0-40FC-86A1-547C94B6073F} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {F2002E05-8FDD-4F55-A5E4-25A52B46D692} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {EEB670DC-9FE2-45A2-B7E9-9BCF7D1056E4} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {81B96508-D920-45F6-9534-0D348B11DFAB} = {D64F966A-B33B-4554-BA8C-A1AF91265996} + {6012D544-32B4-4F5C-B335-A224AA4F661D} = {D64F966A-B33B-4554-BA8C-A1AF91265996} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {D2F122BA-928C-4179-B503-6744DB64BA13} diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/Angular-CSharp.csproj.in b/src/ProjectTemplates/Web.Spa.ProjectTemplates/Angular-CSharp.csproj.in index 3734da1946..082a437cb8 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/Angular-CSharp.csproj.in +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/Angular-CSharp.csproj.in @@ -26,6 +26,9 @@ + + + diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/React-CSharp.csproj.in b/src/ProjectTemplates/Web.Spa.ProjectTemplates/React-CSharp.csproj.in index c0869593fb..5b930ebba1 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/React-CSharp.csproj.in +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/React-CSharp.csproj.in @@ -23,6 +23,9 @@ + + + diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package-lock.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package-lock.json index 0ed6f7f87b..1b19a2b47c 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package-lock.json +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package-lock.json @@ -5,12 +5,12 @@ "requires": true, "dependencies": { "@angular-devkit/architect": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.4.tgz", - "integrity": "sha512-wJF8oz8MurtpFi0ik42bkI2F5gEnuOe79KHPO1i3SYfdhEp5NY8igVKZ6chB/eq4Ml50aHxas8Hh9ke12K+Pxw==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.13.5.tgz", + "integrity": "sha512-ouqDu5stZA2gsWnbKMThDfOG/D6lJQaLL+oGEoM5zfnKir3ctyV5rOm73m2pDYUblByTCb+rkj5KmooUWpnV1g==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", + "@angular-devkit/core": "7.3.5", "rxjs": "6.3.3" }, "dependencies": { @@ -26,16 +26,16 @@ } }, "@angular-devkit/build-angular": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.4.tgz", - "integrity": "sha512-7yJzgNk3ToiAHd8vnYonqiswvVNYzOUKg2xZfpx+SD5m7mVE+CSUp+P4YzUrI0Vm9WitZOYaCv1I6G1NguJHqA==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-0.13.5.tgz", + "integrity": "sha512-xJq46Jz7MMyprcJ4PflJjPtJ+2OVqbnz6HwtUyJLwYXmC0ldWnhGiNwn+0o7Em40Ol8gf2TYqcDGcSi5OyOZMg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.4", - "@angular-devkit/build-optimizer": "0.13.4", - "@angular-devkit/build-webpack": "0.13.4", - "@angular-devkit/core": "7.3.4", - "@ngtools/webpack": "7.3.4", + "@angular-devkit/architect": "0.13.5", + "@angular-devkit/build-optimizer": "0.13.5", + "@angular-devkit/build-webpack": "0.13.5", + "@angular-devkit/core": "7.3.5", + "@ngtools/webpack": "7.3.5", "ajv": "6.9.1", "autoprefixer": "9.4.6", "circular-dependency-plugin": "5.0.2", @@ -118,9 +118,9 @@ } }, "@angular-devkit/build-optimizer": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.4.tgz", - "integrity": "sha512-YTpiE4F2GnFc4jbXZkmFUMHOvo3kWcMPAInVbjXNSIWMqW8Ibs7d6MAcualQX4NCvcn45+mVXLfY/8hWZ/b7lw==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.13.5.tgz", + "integrity": "sha512-bkyKYplkUnWCbXfDuS0gFuPDoi9OEUNRBtvYtY3rgE3XKSAJBjV+KLgoXSSpLL6ucLDx6gOyDXitUFLiRCDMqg==", "dev": true, "requires": { "loader-utils": "1.2.3", @@ -134,17 +134,23 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", "dev": true + }, + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "dev": true } } }, "@angular-devkit/build-webpack": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.4.tgz", - "integrity": "sha512-W5baPrsNUUyeD5K9ZjiTfiDsytBoqDvGDMKRUO9XWV8xF8LYF2ttsBQxlJK7SKkMyJXcjmiHhdkMq5wgRE7n0A==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.13.5.tgz", + "integrity": "sha512-/abR1cxCLiRJciaW0Dc0RYNbYQIhHFut1r1Dv8xx7He2/wYgCzGsYl9EeFm48Nrw62/9rIPJxhZoZtcf1Mrocg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.4", - "@angular-devkit/core": "7.3.4", + "@angular-devkit/architect": "0.13.5", + "@angular-devkit/core": "7.3.5", "rxjs": "6.3.3" }, "dependencies": { @@ -160,9 +166,9 @@ } }, "@angular-devkit/core": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.4.tgz", - "integrity": "sha512-MBfen51iOBKfK4tlg5KwmPxePsF1QoFNUMGLuvUUwPkteonrGcupX1Q7NWTpf+HA+i08mOnZGuepeuQkD12IQw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-7.3.5.tgz", + "integrity": "sha512-J/Tztq2BZ3tpwUsbiz8N61rf9lwqn85UvJsDui2SPIdzDR9KmPr5ESI2Irc/PEb9i+CBXtVuhr8AIqo7rR6ZTg==", "dev": true, "requires": { "ajv": "6.9.1", @@ -202,12 +208,12 @@ } }, "@angular-devkit/schematics": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.4.tgz", - "integrity": "sha512-BLI4MDHmpzw+snu/2Dw1nMmfJ0VAARTbU6DrmzXyl2Se45+iE/tdRy4yNx3IfHhyoCrVZ15R0y9CXeEsLftlIg==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-7.3.5.tgz", + "integrity": "sha512-BFCCkwRMBC4aFlngaloi1avCTgGrl1MFc/0Av2sCpBh/fdm1FqSVzmOiTfu93dehRVVL/bTrA2qj+xpNsXCxzA==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", + "@angular-devkit/core": "7.3.5", "rxjs": "6.3.3" }, "dependencies": { @@ -223,24 +229,24 @@ } }, "@angular/animations": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.5.tgz", - "integrity": "sha512-BJPm9pls6MuIhn6TF1f2ZwkGFTamuyJbhXz8n9u669tTI4deUAEEHCzYaEgVu4q007niVg2ZnO4MDcxXtc5nFQ==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-7.2.8.tgz", + "integrity": "sha512-dJn9koYukyz15TouBc+z5z9fdThDk+bKgdlij25eYSu5Mpmtk04gB4eIMQA97K0UDh1d4YukgSJ5w3ZIk0m8DQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/cli": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.4.tgz", - "integrity": "sha512-uGL8xiQf+GvuJvqvMUu/XHcijbq9ocbX487LO2PgJ29etHfI7dC0toJbQ8ob+HnF9e1qwMe+uu45OU4C2p+a1A==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-7.3.5.tgz", + "integrity": "sha512-WL339qoWMIsQympJAabtcvX6hMydGD/H0fm8K9ihD7xd6Af1QCSDN/aWTIvYyEzj9Hb8/sJ3mgRtvLlr1xTHzg==", "dev": true, "requires": { - "@angular-devkit/architect": "0.13.4", - "@angular-devkit/core": "7.3.4", - "@angular-devkit/schematics": "7.3.4", - "@schematics/angular": "7.3.4", - "@schematics/update": "0.13.4", + "@angular-devkit/architect": "0.13.5", + "@angular-devkit/core": "7.3.5", + "@angular-devkit/schematics": "7.3.5", + "@schematics/angular": "7.3.5", + "@schematics/update": "0.13.5", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "inquirer": "6.2.1", @@ -252,29 +258,29 @@ } }, "@angular/common": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.5.tgz", - "integrity": "sha512-IW3vk0DDblbZMD8gkKVpPa/krXky4i5baFhKgqN2xYo48epXYvAezm5q71a982eadjUussbaYPlsXzYNAhdVKQ==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-7.2.8.tgz", + "integrity": "sha512-LgOhf68+LPndGZhtnUlGFd2goReXYmHzaFZW8gCEi9aC+H+Io8bjYh0gkH3xDreevEOe3f0z6coXNFLIxSmTuA==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.5.tgz", - "integrity": "sha512-/41ehOSupAA+uc32XHmN5jOvqmb4A4D+V+MXDmnlYVaYAYZrGf3AS+1RJuBy5cIUGQ1Nv+Nbj4Y7X/ydb6ncOQ==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-7.2.8.tgz", + "integrity": "sha512-PrU97cTsOdofpaDkxK0rWUA/CGd0u6ESOI6XvFVm5xH9zJInsdY8ShSHklnr1JJnss70e1dGKZbZq32OChxWMw==", "requires": { "tslib": "^1.9.0" } }, "@angular/compiler-cli": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.5.tgz", - "integrity": "sha512-3PzRaz3cKKnhhWKixKhXUvD2klKoAiFO/81ETMC+lp4GGWL35NAts0KnudSNxQIktYOlardQHEggtfgxq+spRg==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-7.2.8.tgz", + "integrity": "sha512-DM35X5GHDCWGKfA+Q/nfBdw+hgahCT+zn7ywOvzyL4p+rkyOUHIHLnLfJekRpUXJYJrq5011MrUMw86HrR0vUg==", "dev": true, "requires": { "canonical-path": "1.0.0", - "chokidar": "^1.4.2", + "chokidar": "^2.1.1", "convert-source-map": "^1.5.1", "dependency-graph": "^0.7.2", "magic-string": "^0.25.0", @@ -292,42 +298,6 @@ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, - "anymatch": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", - "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", - "dev": true, - "requires": { - "micromatch": "^2.1.5", - "normalize-path": "^2.0.0" - } - }, - "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1" - } - }, - "array-unique": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", - "dev": true - }, - "braces": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", - "dev": true, - "requires": { - "expand-range": "^1.8.1", - "preserve": "^0.2.0", - "repeat-element": "^1.1.2" - } - }, "camelcase": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", @@ -335,20 +305,23 @@ "dev": true }, "chokidar": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", - "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz", + "integrity": "sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==", "dev": true, "requires": { - "anymatch": "^1.3.0", - "async-each": "^1.0.0", - "fsevents": "^1.0.0", - "glob-parent": "^2.0.0", - "inherits": "^2.0.1", + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", "is-binary-path": "^1.0.0", - "is-glob": "^2.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", "path-is-absolute": "^1.0.0", - "readdirp": "^2.0.0" + "readdirp": "^2.2.1", + "upath": "^1.1.0" } }, "cross-spawn": { @@ -377,24 +350,6 @@ "strip-eof": "^1.0.0" } }, - "expand-brackets": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", - "dev": true, - "requires": { - "is-posix-bracket": "^0.1.0" - } - }, - "extglob": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", @@ -404,45 +359,12 @@ "locate-path": "^2.0.0" } }, - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - }, "load-json-file": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", @@ -464,26 +386,11 @@ "mimic-fn": "^1.0.0" } }, - "micromatch": { - "version": "2.3.11", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", - "dev": true, - "requires": { - "arr-diff": "^2.0.0", - "array-unique": "^0.2.1", - "braces": "^1.8.2", - "expand-brackets": "^0.1.4", - "extglob": "^0.3.1", - "filename-regex": "^2.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.1", - "kind-of": "^3.0.2", - "normalize-path": "^2.0.1", - "object.omit": "^2.0.0", - "parse-glob": "^3.0.4", - "regex-cache": "^0.4.2" - } + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "os-locale": { "version": "2.1.0", @@ -596,25 +503,25 @@ } }, "@angular/core": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.5.tgz", - "integrity": "sha512-SKBDqoKNj9vjuLeNToFySafTWb+fyIhCj6C/yzlPcsRPLZj0Kzbvn1IKE+TWBLa/85dUiaE1xdBNQ66jTtpFSA==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-7.2.8.tgz", + "integrity": "sha512-QKwug2kWJC00zm2rvmD9mCJzsOkMVhSu8vqPWf83poWTh8+F9aIVWcy29W0VoGpBkSchOnK8hf9DnKVv28j9nw==", "requires": { "tslib": "^1.9.0" } }, "@angular/forms": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.5.tgz", - "integrity": "sha512-VBWbQ26ck1V014DSkFjlrlCksAZ3Q8rmHLZFy+o2k1CVyy49ojV/OxLDfJutp0QvflO+sWnzfDPaND/Ed9tS4w==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-7.2.8.tgz", + "integrity": "sha512-lbSX4IHFHz/c4e2RHiPpL8MJlzDkCuQEHnqsujDaV2X9o9fApS6+C1X4x7Z2XDKqonmeX+aHQwv9+SLejX6OyQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/http": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.5.tgz", - "integrity": "sha512-F5AE3QcNibShnhxokFaFhid2Abb+qtMbjfTZu3dSBOWbuz7+H0g7WbCFB4UZvWkTiOaQkTuk0J9IBrwrvt3fkQ==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/http/-/http-7.2.8.tgz", + "integrity": "sha512-bCLgXKbYeSiZPXQ58YbxVKg50PwecDm9SqiXh1QOQOSJsAG7oXXWesN/IOnfP38XeRg9C2NBbJ6mKOyfD/4jdw==", "requires": { "tslib": "^1.9.0" } @@ -626,25 +533,25 @@ "dev": true }, "@angular/platform-browser": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.5.tgz", - "integrity": "sha512-trSFOsRC+PrjqE709RQ7ezVCouehD7e82FhQNZQx9O1IZQyO0hxE2ncVB4Lvd7KpunAiFX7M1A2wfksHQl+0qw==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-7.2.8.tgz", + "integrity": "sha512-SizCRMc7Or27g2CugcqWnaAikRPfgLgRvb9GFFGpcgoq8CRfOVwkyR5dFZuqN39H+uwtwuTMP5OUYhZcrFNKug==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-browser-dynamic": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.5.tgz", - "integrity": "sha512-GlipaKFqWlcaGWowccFxAgscpgMnWJucRnDrHRgvp3iUbqt2mC4sLko8BOi0S5FkE1D4+EqyEyp8DLM4o7VDvg==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-7.2.8.tgz", + "integrity": "sha512-nOJt28A5pRn4mdL8y98V7bA6OOdMRjsQAcWCr/isGYF0l1yDC0ijUGWkHuRtj3z1/9tmERN0BLXx+xs1h4JhCQ==", "requires": { "tslib": "^1.9.0" } }, "@angular/platform-server": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-7.2.5.tgz", - "integrity": "sha512-JgNSkFq9U+117UrIFM9f2lDJRdXqw4ZxST1kr5cLZ3BAnzlp1JQS9TT9RgIOLVD6rie8Aqgoli7fhaZQ7txvLQ==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/platform-server/-/platform-server-7.2.8.tgz", + "integrity": "sha512-UAg+6rlEiFVw+Fvfyt5VnE5lS5xlLkPmxaKAGotj9y9sUjD7TTI4rJ7ciGAWOuVb5MprDWKlXxPYeBwBHiO0Mw==", "requires": { "domino": "^2.1.0", "tslib": "^1.9.0", @@ -652,9 +559,9 @@ } }, "@angular/router": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.5.tgz", - "integrity": "sha512-WjEdnTyLQRntB8ixQ4qH8PFURFhgTtUjAsu3S3lf2wWbDDADIJO/xTMtXDhGubTmzRbBVROw6ZQzgDZtJyYKrw==", + "version": "7.2.8", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-7.2.8.tgz", + "integrity": "sha512-G8cA/JbaKFNeosCUGE/0Z7+5FBhZTVV/hacgUBRAEj8NNnECFqkAY9F16Twe+X8qx9WkpMw51WSYDNHPI1/dXQ==", "requires": { "tslib": "^1.9.0" } @@ -843,12 +750,12 @@ } }, "@ngtools/webpack": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.4.tgz", - "integrity": "sha512-qTfw/LGZ3kDZAgqb6gMVr36E0W3M+bnS/xAxNTxshxmJOCQr9AcKtX4sP65QweKS60KoBBR1a7nR6SOi1NJkxA==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-7.3.5.tgz", + "integrity": "sha512-KqJ4ZR8XicN+ElrSNiNPidTM134Z23F7ib0Rl8Ny3PDHkAYIBIxEnQDgZ2mazKRUVMlStUnjmzQIQj7/qZGLaw==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", + "@angular-devkit/core": "7.3.5", "enhanced-resolve": "4.1.0", "rxjs": "6.3.3", "tree-kill": "1.2.1", @@ -867,29 +774,37 @@ } }, "@nguniversal/module-map-ngfactory-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@nguniversal/module-map-ngfactory-loader/-/module-map-ngfactory-loader-7.1.0.tgz", - "integrity": "sha512-GYfb24OLJKBY58CgUsIsGgci5ceZAt4+GrVKh7RZRIHtZ/bjdGsvpIbfE9udqsnSowxIxHA5KzYHbC1x6AAB0A==" + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@nguniversal/module-map-ngfactory-loader/-/module-map-ngfactory-loader-7.1.1.tgz", + "integrity": "sha512-cZaxdY64C5xPwbE3qqEQGmnKIEgIA57JTozAsT1gvlxNYwssxTlhCYT0HQcqNfNBBjf3xdqXTfRPC7lfpE4qWA==" }, "@schematics/angular": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.4.tgz", - "integrity": "sha512-Bb5DZQ8MeP8yhxPe6nVqyQ7sGVNwUx6nXPlrQV45ZycD3nJlqsuxr2DE75HFpn5oU+vlkq9J/Sys4WLJ4E/OMw==", + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-7.3.5.tgz", + "integrity": "sha512-fKNZccf1l2OcDwtDupYj54N/YuiMLCWeaXNxcJNUYvGnBtzxQJ4P2LtSCjB4HDvYCtseQM7iyc7D1Xrr5gI8nw==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", - "@angular-devkit/schematics": "7.3.4", + "@angular-devkit/core": "7.3.5", + "@angular-devkit/schematics": "7.3.5", "typescript": "3.2.4" + }, + "dependencies": { + "typescript": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz", + "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==", + "dev": true + } } }, "@schematics/update": { - "version": "0.13.4", - "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.4.tgz", - "integrity": "sha512-YarSCCBSVPVG/MyN5H/FliRwaIDoeercy5Nip+NWZJsDyvtsAekO9s6QwizSvAr3541MmSQFeQICsjyM2dl3Bg==", + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/@schematics/update/-/update-0.13.5.tgz", + "integrity": "sha512-bmwVKeyOmC948gJrIxPg0TY0999nusqSVqXJ8hqAgD0fyD6rnzF74nUhovQGvwFV0pZK8fCkRfdJIqgAPFcHcw==", "dev": true, "requires": { - "@angular-devkit/core": "7.3.4", - "@angular-devkit/schematics": "7.3.4", + "@angular-devkit/core": "7.3.5", + "@angular-devkit/schematics": "7.3.5", "@yarnpkg/lockfile": "1.1.0", "ini": "1.3.5", "pacote": "9.4.0", @@ -925,9 +840,9 @@ } }, "@types/node": { - "version": "11.9.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.9.6.tgz", - "integrity": "sha512-4hS2K4gwo9/aXIcoYxCtHpdgd8XUeDmo1siRCAH3RziXB65JlPqUFMtfy9VPj+og7dp3w1TFjGwYga4e0m9GwA==", + "version": "11.10.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-11.10.5.tgz", + "integrity": "sha512-DuIRlQbX4K+d5I+GMnv+UfnGh+ist0RdlvOp+JZ7ePJ6KQONCFQv/gKYSU1ZzbVdFSUCKZOltjmpFAGGv5MdYA==", "dev": true }, "@types/q": { @@ -2151,9 +2066,9 @@ } }, "caniuse-lite": { - "version": "1.0.30000941", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000941.tgz", - "integrity": "sha512-4vzGb2MfZcO20VMPj1j6nRAixhmtlhkypM4fL4zhgzEucQIYiRzSqPcWIu1OF8i0FETD93FMIPWfUJCAcFvrqA==", + "version": "1.0.30000942", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000942.tgz", + "integrity": "sha512-wLf+IhZUy2rfz48tc40OH7jHjXjnvDFEYqBHluINs/6MgzoNLPf25zhE4NOVzqxLKndf+hau81sAW0RcGHIaBQ==", "dev": true }, "canonical-path": { @@ -3482,57 +3397,6 @@ } } }, - "expand-range": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", - "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", - "dev": true, - "requires": { - "fill-range": "^2.1.0" - }, - "dependencies": { - "fill-range": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", - "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", - "dev": true, - "requires": { - "is-number": "^2.1.0", - "isobject": "^2.0.0", - "randomatic": "^3.0.0", - "repeat-element": "^1.1.2", - "repeat-string": "^1.5.2" - } - }, - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, "express": { "version": "4.16.4", "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", @@ -3762,12 +3626,6 @@ "schema-utils": "^1.0.0" } }, - "filename-regex": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", - "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", - "dev": true - }, "fileset": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz", @@ -4598,42 +4456,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-base": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", - "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", - "dev": true, - "requires": { - "glob-parent": "^2.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", - "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", - "dev": true, - "requires": { - "is-glob": "^2.0.0" - } - }, - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", @@ -5393,21 +5215,6 @@ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", "dev": true }, - "is-dotfile": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", - "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", - "dev": true - }, - "is-equal-shallow": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", - "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", - "dev": true, - "requires": { - "is-primitive": "^2.0.0" - } - }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -5495,18 +5302,6 @@ "isobject": "^3.0.1" } }, - "is-posix-bracket": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", - "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", - "dev": true - }, - "is-primitive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", - "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", - "dev": true - }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", @@ -6422,12 +6217,6 @@ "object-visit": "^1.0.0" } }, - "math-random": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.4.tgz", - "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", - "dev": true - }, "md5.js": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", @@ -7082,27 +6871,6 @@ "isobject": "^3.0.0" } }, - "object.omit": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", - "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", - "dev": true, - "requires": { - "for-own": "^0.1.4", - "is-extendable": "^0.1.1" - }, - "dependencies": { - "for-own": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", - "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - } - } - }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", @@ -7446,35 +7214,6 @@ "safe-buffer": "^5.1.1" } }, - "parse-glob": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", - "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", - "dev": true, - "requires": { - "glob-base": "^0.3.0", - "is-dotfile": "^1.0.0", - "is-extglob": "^1.0.0", - "is-glob": "^2.0.0" - }, - "dependencies": { - "is-extglob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", - "dev": true - }, - "is-glob": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", - "dev": true, - "requires": { - "is-extglob": "^1.0.0" - } - } - } - }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", @@ -7776,12 +7515,6 @@ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", "dev": true }, - "preserve": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", - "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", - "dev": true - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -7972,25 +7705,6 @@ "integrity": "sha512-sluvZZ1YiTLD5jsqZcDmFyV2EwToyXZBfpoVOmktMmW+VEnhgakFHnasVph65fOjGPTWN0Nw3+XQaSeMayr0kg==", "dev": true }, - "randomatic": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", - "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", - "dev": true, - "requires": { - "is-number": "^4.0.0", - "kind-of": "^6.0.0", - "math-random": "^1.0.1" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } - } - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -8139,15 +7853,6 @@ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "optional": true }, - "regex-cache": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", - "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", - "dev": true, - "requires": { - "is-equal-shallow": "^0.1.3" - } - }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json index 9fa4ae3dc1..942a997b30 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/package.json @@ -33,13 +33,13 @@ "popper.js": "^1.14.3" }, "devDependencies": { - "@angular-devkit/build-angular": "~0.13.2", - "@angular/cli": "~7.3.2", - "@angular/compiler-cli": "7.2.5", + "@angular-devkit/build-angular": "~0.13.5", + "@angular/cli": "~7.3.5", + "@angular/compiler-cli": "^7.2.8", "@angular/language-service": "^7.2.5", "@types/jasmine": "~3.3.9", "@types/jasminewd2": "~2.0.6", - "@types/node": "~11.9.4", + "@types/node": "~11.10.5", "codelyzer": "~4.5.0", "jasmine-core": "~3.3.0", "jasmine-spec-reporter": "~4.2.1", diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/login/login.component.ts b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/login/login.component.ts index e66c9fc3bb..d98208a724 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/login/login.component.ts +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/login/login.component.ts @@ -14,7 +14,7 @@ import { LoginActions, QueryParameterNames, ApplicationPaths, ReturnUrlType } fr styleUrls: ['./login.component.css'] }) export class LoginComponent implements OnInit { - private message = new BehaviorSubject(null); + public message = new BehaviorSubject(null); constructor( private authorizeService: AuthorizeService, diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/logout/logout.component.ts b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/logout/logout.component.ts index 73ea5ed1b9..d58362c711 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/logout/logout.component.ts +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/Angular-CSharp/ClientApp/src/api-authorization/logout/logout.component.ts @@ -14,7 +14,7 @@ import { LogoutActions, ApplicationPaths, ReturnUrlType } from '../api-authoriza styleUrls: ['./logout.component.css'] }) export class LogoutComponent implements OnInit { - private message = new BehaviorSubject(null); + public message = new BehaviorSubject(null); constructor( private authorizeService: AuthorizeService, diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/template.json b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/template.json index 6383bce63f..7eff01916f 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/template.json +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/.template.config/template.json @@ -34,6 +34,7 @@ "Data/**", "Models/**", "ClientApp/src/components/api-authorization/**", + "ClientApp/src/setupTests.js", "Controllers/OidcConfigurationController.cs" ] }, diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.js index 6b24c1c212..b55d0317fe 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.js +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.js @@ -6,7 +6,7 @@ import { FetchData } from './components/FetchData'; import { Counter } from './components/Counter'; ////#if (IndividualLocalAuth) import AuthorizeRoute from './components/api-authorization/AuthorizeRoute'; -import ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes' +import ApiAuthorizationRoutes from './components/api-authorization/ApiAuthorizationRoutes'; import { ApplicationPaths } from './components/api-authorization/ApiAuthorizationConstants'; ////#endif diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.test.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.test.js index 69089d1dde..304cc4af9f 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.test.js +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/App.test.js @@ -3,10 +3,11 @@ import ReactDOM from 'react-dom'; import { MemoryRouter } from 'react-router-dom'; import App from './App'; -it('renders without crashing', () => { +it('renders without crashing', async () => { const div = document.createElement('div'); ReactDOM.render( , div); + await new Promise(resolve => setTimeout(resolve, 1000)); }); diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeRoute.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeRoute.js index 27aa25e97e..4a27f0364a 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeRoute.js +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeRoute.js @@ -1,4 +1,4 @@ -import React from 'react' +import React from 'react' import { Component } from 'react' import { Route, Redirect } from 'react-router-dom' import { ApplicationPaths, QueryParameterNames } from './ApiAuthorizationConstants' diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeService.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeService.js index 4df8aff793..9779256eab 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeService.js +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/AuthorizeService.js @@ -1,4 +1,4 @@ -import { UserManager, WebStorageStateStore } from 'oidc-client'; +import { UserManager, WebStorageStateStore } from 'oidc-client'; import { ApplicationPaths, ApplicationName } from './ApiAuthorizationConstants'; export class AuthorizeService { diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Login.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Login.js index 5dffdb5aec..1204fe33b4 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Login.js +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Login.js @@ -1,4 +1,4 @@ -import React from 'react' +import React from 'react' import { Component } from 'react'; import authService from './AuthorizeService'; import { AuthenticationResultStatus } from './AuthorizeService'; diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/LoginMenu.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/LoginMenu.js index 15ba983b34..41734f9432 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/LoginMenu.js +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/LoginMenu.js @@ -1,4 +1,4 @@ -import React, { Component, Fragment } from 'react'; +import React, { Component, Fragment } from 'react'; import { NavItem, NavLink } from 'reactstrap'; import { Link } from 'react-router-dom'; import authService from './AuthorizeService'; diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Logout.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Logout.js index 32c30e225a..4deb80f7bc 100644 --- a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Logout.js +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/components/api-authorization/Logout.js @@ -1,4 +1,4 @@ -import React from 'react' +import React from 'react' import { Component } from 'react'; import authService from './AuthorizeService'; import { AuthenticationResultStatus } from './AuthorizeService'; diff --git a/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/setupTests.js b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/setupTests.js new file mode 100644 index 0000000000..2d27ed8065 --- /dev/null +++ b/src/ProjectTemplates/Web.Spa.ProjectTemplates/content/React-CSharp/ClientApp/src/setupTests.js @@ -0,0 +1,23 @@ +const localStorageMock = { + getItem: jest.fn(), + setItem: jest.fn(), + removeItem: jest.fn(), + clear: jest.fn(), +}; +global.localStorage = localStorageMock; + +// Mock the request issued by the react app to get the client configuration parameters. +window.fetch = () => { + return Promise.resolve( + { + ok: true, + json: () => Promise.resolve({ + "authority": "https://localhost:5001", + "client_id": "Company.WebApplication1", + "redirect_uri": "https://localhost:5001/authentication/login-callback", + "post_logout_redirect_uri": "https://localhost:5001/authentication/logout-callback", + "response_type": "id_token token", + "scope": "Company.WebApplication1API openid profile" + }) + }); +}; diff --git a/src/ProjectTemplates/test/AssemblyInfo.AssemblyFixtures.cs b/src/ProjectTemplates/test/AssemblyInfo.AssemblyFixtures.cs index b14650ab24..c9cf74b930 100644 --- a/src/ProjectTemplates/test/AssemblyInfo.AssemblyFixtures.cs +++ b/src/ProjectTemplates/test/AssemblyInfo.AssemblyFixtures.cs @@ -1,4 +1,11 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + using Microsoft.AspNetCore.E2ETesting; -using ProjectTemplates.Tests.Helpers; +using Templates.Test.Helpers; +using Xunit; + +[assembly: TestFramework("Microsoft.AspNetCore.E2ETesting.XunitTestFrameworkWithAssemblyFixture", "ProjectTemplates.Tests")] [assembly: AssemblyFixture(typeof(ProjectFactoryFixture))] +[assembly: AssemblyFixture(typeof(SeleniumStandaloneServer))] diff --git a/src/ProjectTemplates/test/BaselineTest.cs b/src/ProjectTemplates/test/BaselineTest.cs index f06b3add1a..913815abee 100644 --- a/src/ProjectTemplates/test/BaselineTest.cs +++ b/src/ProjectTemplates/test/BaselineTest.cs @@ -4,9 +4,11 @@ using System; using System.IO; using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; -using ProjectTemplates.Tests.Helpers; +using Templates.Test.Helpers; using Xunit; using Xunit.Abstractions; @@ -14,9 +16,25 @@ namespace Templates.Test { public class BaselineTest { + private static readonly Regex TemplateNameRegex = new Regex( + "new (?