diff --git a/Microsoft.Crank.sln b/Microsoft.Crank.sln
index f7cdd3043..4f3b97ca3 100644
--- a/Microsoft.Crank.sln
+++ b/Microsoft.Crank.sln
@@ -55,80 +55,444 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Crank.JobObjectWr
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Crank.Jobs.K6", "src\Microsoft.Crank.Jobs.K6\Microsoft.Crank.Jobs.K6.csproj", "{D8DD4222-6929-46F3-A3F2-F38394AA1C72}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Agent.UnitTests", "test\Microsoft.Crank.Agent.UnitTests\Microsoft.Crank.Agent.UnitTests.csproj", "{A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Controller.UnitTests", "test\Microsoft.Crank.Controller.UnitTests\Microsoft.Crank.Controller.UnitTests.csproj", "{EED61D68-5181-4246-8718-C50BF4070007}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Jobs.Bombardier.UnitTests", "test\Microsoft.Crank.Jobs.Bombardier.UnitTests\Microsoft.Crank.Jobs.Bombardier.UnitTests.csproj", "{2B486098-702E-4F05-8D14-0B006BA6DAE6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Jobs.PipeliningClient.UnitTests", "test\Microsoft.Crank.Jobs.PipeliningClient.UnitTests\Microsoft.Crank.Jobs.PipeliningClient.UnitTests.csproj", "{F36D504C-F87F-4A3B-B354-C1010F970402}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Jobs.Wrk.UnitTests", "test\Microsoft.Crank.Jobs.Wrk.UnitTests\Microsoft.Crank.Jobs.Wrk.UnitTests.csproj", "{604793C4-9EAE-4212-B1CD-3117F25B45D0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Jobs.Wrk2.UnitTests", "test\Microsoft.Crank.Jobs.Wrk2.UnitTests\Microsoft.Crank.Jobs.Wrk2.UnitTests.csproj", "{B90B9A2D-D8AA-492B-9206-F03E012C1B77}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Models.UnitTests", "test\Microsoft.Crank.Models.UnitTests\Microsoft.Crank.Models.UnitTests.csproj", "{241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.RegressionBot.UnitTests", "test\Microsoft.Crank.RegressionBot.UnitTests\Microsoft.Crank.RegressionBot.UnitTests.csproj", "{F351D557-E202-4A44-BB44-96B721CFFDE0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.IntegrationTests.UnitTests", "test\Microsoft.Crank.IntegrationTests.UnitTests\Microsoft.Crank.IntegrationTests.UnitTests.csproj", "{2BA8DA43-E00D-4499-B673-1974D5854F7D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.AzureDevOpsWorker.UnitTests", "test\Microsoft.Crank.AzureDevOpsWorker.UnitTests\Microsoft.Crank.AzureDevOpsWorker.UnitTests.csproj", "{4FB003AC-F123-4B9C-B520-359596320198}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.EventSources.UnitTests", "test\Microsoft.Crank.EventSources.UnitTests\Microsoft.Crank.EventSources.UnitTests.csproj", "{95D13BFF-9C2B-44D1-89A9-4825251EB48F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Jobs.HttpClient.UnitTests", "test\Microsoft.Crank.Jobs.HttpClient.UnitTests\Microsoft.Crank.Jobs.HttpClient.UnitTests.csproj", "{7E974F90-460E-451F-B32E-DB7468ECC6A2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Jobs.H2Load.UnitTests", "test\Microsoft.Crank.Jobs.H2Load.UnitTests\Microsoft.Crank.Jobs.H2Load.UnitTests.csproj", "{61134AA7-967E-425D-924A-3B5AB9D69EE9}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.PullRequestBot.UnitTests", "test\Microsoft.Crank.PullRequestBot.UnitTests\Microsoft.Crank.PullRequestBot.UnitTests.csproj", "{252DF628-02FC-4A5C-A385-183BB6B110D6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.JobObjectWrapper.UnitTests", "test\Microsoft.Crank.JobObjectWrapper.UnitTests\Microsoft.Crank.JobObjectWrapper.UnitTests.csproj", "{40D5A6AF-CA02-4D05-8A5D-5D307B225260}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Crank.Jobs.K6.UnitTests", "test\Microsoft.Crank.Jobs.K6.UnitTests\Microsoft.Crank.Jobs.K6.UnitTests.csproj", "{636A510B-F616-4718-9D2E-1B4996975744}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
Release|Any CPU = Release|Any CPU
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{CBA92981-0FF1-49B7-8632-136FC2FA8419}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CBA92981-0FF1-49B7-8632-136FC2FA8419}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Debug|x64.Build.0 = Debug|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Debug|x86.Build.0 = Debug|Any CPU
{CBA92981-0FF1-49B7-8632-136FC2FA8419}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CBA92981-0FF1-49B7-8632-136FC2FA8419}.Release|Any CPU.Build.0 = Release|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Release|x64.ActiveCfg = Release|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Release|x64.Build.0 = Release|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Release|x86.ActiveCfg = Release|Any CPU
+ {CBA92981-0FF1-49B7-8632-136FC2FA8419}.Release|x86.Build.0 = Release|Any CPU
{ADFAD247-96AC-493A-8E45-3C4356A948D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ADFAD247-96AC-493A-8E45-3C4356A948D1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Debug|x64.Build.0 = Debug|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Debug|x86.Build.0 = Debug|Any CPU
{ADFAD247-96AC-493A-8E45-3C4356A948D1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ADFAD247-96AC-493A-8E45-3C4356A948D1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Release|x64.ActiveCfg = Release|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Release|x64.Build.0 = Release|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Release|x86.ActiveCfg = Release|Any CPU
+ {ADFAD247-96AC-493A-8E45-3C4356A948D1}.Release|x86.Build.0 = Release|Any CPU
{7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Debug|x64.Build.0 = Debug|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Debug|x86.Build.0 = Debug|Any CPU
{7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Release|x64.ActiveCfg = Release|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Release|x64.Build.0 = Release|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Release|x86.ActiveCfg = Release|Any CPU
+ {7C3BA60E-87F2-4C10-9DAB-0CFD1E6AFFE8}.Release|x86.Build.0 = Release|Any CPU
{D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Debug|x64.Build.0 = Debug|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Debug|x86.Build.0 = Debug|Any CPU
{D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Release|x64.ActiveCfg = Release|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Release|x64.Build.0 = Release|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Release|x86.ActiveCfg = Release|Any CPU
+ {D7A46B09-B1F2-4131-9B5C-2FC5A2FA18E6}.Release|x86.Build.0 = Release|Any CPU
{3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Debug|x64.Build.0 = Debug|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Debug|x86.Build.0 = Debug|Any CPU
{3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Release|x64.ActiveCfg = Release|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Release|x64.Build.0 = Release|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Release|x86.ActiveCfg = Release|Any CPU
+ {3ED3A04B-14F1-489E-ACD4-ED164CED7C18}.Release|x86.Build.0 = Release|Any CPU
{1394178E-4ABA-47C9-935B-EF5E84B56694}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1394178E-4ABA-47C9-935B-EF5E84B56694}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Debug|x64.Build.0 = Debug|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Debug|x86.Build.0 = Debug|Any CPU
{1394178E-4ABA-47C9-935B-EF5E84B56694}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1394178E-4ABA-47C9-935B-EF5E84B56694}.Release|Any CPU.Build.0 = Release|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Release|x64.ActiveCfg = Release|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Release|x64.Build.0 = Release|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Release|x86.ActiveCfg = Release|Any CPU
+ {1394178E-4ABA-47C9-935B-EF5E84B56694}.Release|x86.Build.0 = Release|Any CPU
{66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Debug|x64.Build.0 = Debug|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Debug|x86.Build.0 = Debug|Any CPU
{66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Release|x64.ActiveCfg = Release|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Release|x64.Build.0 = Release|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Release|x86.ActiveCfg = Release|Any CPU
+ {66E8C05F-CA23-4EB4-8D23-F6E94FBD714E}.Release|x86.Build.0 = Release|Any CPU
{BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Debug|x64.Build.0 = Debug|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Debug|x86.Build.0 = Debug|Any CPU
{BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Release|x64.ActiveCfg = Release|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Release|x64.Build.0 = Release|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Release|x86.ActiveCfg = Release|Any CPU
+ {BE9D7C89-3E10-4BFB-B9A0-5FCC92FC47E5}.Release|x86.Build.0 = Release|Any CPU
{FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Debug|x64.Build.0 = Debug|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Debug|x86.Build.0 = Debug|Any CPU
{FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Release|x64.ActiveCfg = Release|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Release|x64.Build.0 = Release|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Release|x86.ActiveCfg = Release|Any CPU
+ {FB125FDC-551F-4548-B4CA-3A2B5E7198D9}.Release|x86.Build.0 = Release|Any CPU
{8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Debug|x64.Build.0 = Debug|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Debug|x86.Build.0 = Debug|Any CPU
{8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Release|x64.ActiveCfg = Release|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Release|x64.Build.0 = Release|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Release|x86.ActiveCfg = Release|Any CPU
+ {8FF6CBDB-2629-4A35-BC1B-794CE1A43451}.Release|x86.Build.0 = Release|Any CPU
{BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Debug|x64.Build.0 = Debug|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Debug|x86.Build.0 = Debug|Any CPU
{BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Release|x64.ActiveCfg = Release|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Release|x64.Build.0 = Release|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Release|x86.ActiveCfg = Release|Any CPU
+ {BB0422DA-E7C5-47FB-8EF5-E34F57B51E44}.Release|x86.Build.0 = Release|Any CPU
{2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Debug|x64.Build.0 = Debug|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Debug|x86.Build.0 = Debug|Any CPU
{2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Release|x64.ActiveCfg = Release|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Release|x64.Build.0 = Release|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Release|x86.ActiveCfg = Release|Any CPU
+ {2C9E2686-6C86-4D32-B57E-EDC8047EB8B8}.Release|x86.Build.0 = Release|Any CPU
{7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Debug|x64.Build.0 = Debug|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Debug|x86.Build.0 = Debug|Any CPU
{7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Release|x64.ActiveCfg = Release|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Release|x64.Build.0 = Release|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Release|x86.ActiveCfg = Release|Any CPU
+ {7BAB625A-3338-4BF1-BD0C-D5ECCAC254B5}.Release|x86.Build.0 = Release|Any CPU
{C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Debug|x64.Build.0 = Debug|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Debug|x86.Build.0 = Debug|Any CPU
{C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Release|x64.ActiveCfg = Release|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Release|x64.Build.0 = Release|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Release|x86.ActiveCfg = Release|Any CPU
+ {C45AB9D7-5346-4610-8D44-C6F6B31BEC2D}.Release|x86.Build.0 = Release|Any CPU
{A2B9140B-46E5-451D-9246-ECA019487F5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A2B9140B-46E5-451D-9246-ECA019487F5C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Debug|x64.Build.0 = Debug|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Debug|x86.Build.0 = Debug|Any CPU
{A2B9140B-46E5-451D-9246-ECA019487F5C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A2B9140B-46E5-451D-9246-ECA019487F5C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Release|x64.ActiveCfg = Release|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Release|x64.Build.0 = Release|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Release|x86.ActiveCfg = Release|Any CPU
+ {A2B9140B-46E5-451D-9246-ECA019487F5C}.Release|x86.Build.0 = Release|Any CPU
{D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Debug|x64.Build.0 = Debug|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Debug|x86.Build.0 = Debug|Any CPU
{D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Release|x64.ActiveCfg = Release|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Release|x64.Build.0 = Release|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Release|x86.ActiveCfg = Release|Any CPU
+ {D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE}.Release|x86.Build.0 = Release|Any CPU
{D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Debug|x64.Build.0 = Debug|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Debug|x86.Build.0 = Debug|Any CPU
{D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Release|x64.ActiveCfg = Release|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Release|x64.Build.0 = Release|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Release|x86.ActiveCfg = Release|Any CPU
+ {D8DD4222-6929-46F3-A3F2-F38394AA1C72}.Release|x86.Build.0 = Release|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Debug|x64.Build.0 = Debug|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Debug|x86.Build.0 = Debug|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Release|x64.ActiveCfg = Release|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Release|x64.Build.0 = Release|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Release|x86.ActiveCfg = Release|Any CPU
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34}.Release|x86.Build.0 = Release|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Debug|x64.Build.0 = Debug|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Debug|x86.Build.0 = Debug|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Release|x64.ActiveCfg = Release|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Release|x64.Build.0 = Release|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Release|x86.ActiveCfg = Release|Any CPU
+ {EED61D68-5181-4246-8718-C50BF4070007}.Release|x86.Build.0 = Release|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Debug|x64.Build.0 = Debug|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Debug|x86.Build.0 = Debug|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Release|x64.ActiveCfg = Release|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Release|x64.Build.0 = Release|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Release|x86.ActiveCfg = Release|Any CPU
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6}.Release|x86.Build.0 = Release|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Debug|x64.Build.0 = Debug|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Debug|x86.Build.0 = Debug|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Release|x64.ActiveCfg = Release|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Release|x64.Build.0 = Release|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Release|x86.ActiveCfg = Release|Any CPU
+ {F36D504C-F87F-4A3B-B354-C1010F970402}.Release|x86.Build.0 = Release|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Debug|x64.Build.0 = Debug|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Debug|x86.Build.0 = Debug|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Release|x64.ActiveCfg = Release|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Release|x64.Build.0 = Release|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Release|x86.ActiveCfg = Release|Any CPU
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0}.Release|x86.Build.0 = Release|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Debug|x64.Build.0 = Debug|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Debug|x86.Build.0 = Debug|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Release|x64.ActiveCfg = Release|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Release|x64.Build.0 = Release|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Release|x86.ActiveCfg = Release|Any CPU
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77}.Release|x86.Build.0 = Release|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Debug|x64.Build.0 = Debug|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Debug|x86.Build.0 = Debug|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Release|x64.ActiveCfg = Release|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Release|x64.Build.0 = Release|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Release|x86.ActiveCfg = Release|Any CPU
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5}.Release|x86.Build.0 = Release|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Debug|x64.Build.0 = Debug|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Debug|x86.Build.0 = Debug|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Release|x64.ActiveCfg = Release|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Release|x64.Build.0 = Release|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Release|x86.ActiveCfg = Release|Any CPU
+ {F351D557-E202-4A44-BB44-96B721CFFDE0}.Release|x86.Build.0 = Release|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Debug|x64.Build.0 = Debug|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Debug|x86.Build.0 = Debug|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Release|x64.ActiveCfg = Release|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Release|x64.Build.0 = Release|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Release|x86.ActiveCfg = Release|Any CPU
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D}.Release|x86.Build.0 = Release|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Debug|x64.Build.0 = Debug|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Debug|x86.Build.0 = Debug|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Release|x64.ActiveCfg = Release|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Release|x64.Build.0 = Release|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Release|x86.ActiveCfg = Release|Any CPU
+ {4FB003AC-F123-4B9C-B520-359596320198}.Release|x86.Build.0 = Release|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Debug|x64.Build.0 = Debug|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Debug|x86.Build.0 = Debug|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Release|x64.ActiveCfg = Release|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Release|x64.Build.0 = Release|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Release|x86.ActiveCfg = Release|Any CPU
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F}.Release|x86.Build.0 = Release|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Debug|x64.Build.0 = Debug|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Debug|x86.Build.0 = Debug|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Release|x64.ActiveCfg = Release|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Release|x64.Build.0 = Release|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Release|x86.ActiveCfg = Release|Any CPU
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2}.Release|x86.Build.0 = Release|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Debug|x64.Build.0 = Debug|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Debug|x86.Build.0 = Debug|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Release|Any CPU.Build.0 = Release|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Release|x64.ActiveCfg = Release|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Release|x64.Build.0 = Release|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Release|x86.ActiveCfg = Release|Any CPU
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9}.Release|x86.Build.0 = Release|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Debug|x64.Build.0 = Debug|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Debug|x86.Build.0 = Debug|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Release|x64.ActiveCfg = Release|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Release|x64.Build.0 = Release|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Release|x86.ActiveCfg = Release|Any CPU
+ {252DF628-02FC-4A5C-A385-183BB6B110D6}.Release|x86.Build.0 = Release|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Debug|x64.Build.0 = Debug|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Debug|x86.Build.0 = Debug|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Release|Any CPU.Build.0 = Release|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Release|x64.ActiveCfg = Release|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Release|x64.Build.0 = Release|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Release|x86.ActiveCfg = Release|Any CPU
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260}.Release|x86.Build.0 = Release|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Debug|x64.Build.0 = Debug|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Debug|x86.Build.0 = Debug|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Release|Any CPU.Build.0 = Release|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Release|x64.ActiveCfg = Release|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Release|x64.Build.0 = Release|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Release|x86.ActiveCfg = Release|Any CPU
+ {636A510B-F616-4718-9D2E-1B4996975744}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -151,6 +515,22 @@ Global
{A2B9140B-46E5-451D-9246-ECA019487F5C} = {995FCFF9-E5F6-4BDD-8E5B-FBDEA21145F9}
{D02CC5A5-A6EA-42CF-9EA5-E3D1CE0FFBFE} = {995FCFF9-E5F6-4BDD-8E5B-FBDEA21145F9}
{D8DD4222-6929-46F3-A3F2-F38394AA1C72} = {995FCFF9-E5F6-4BDD-8E5B-FBDEA21145F9}
+ {A15BF5C8-31EF-4150-A2AA-EEF170DD5E34} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {EED61D68-5181-4246-8718-C50BF4070007} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {2B486098-702E-4F05-8D14-0B006BA6DAE6} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {F36D504C-F87F-4A3B-B354-C1010F970402} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {604793C4-9EAE-4212-B1CD-3117F25B45D0} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {B90B9A2D-D8AA-492B-9206-F03E012C1B77} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {241DB60F-BD5E-40ED-A7F9-A4E0B0E40EC5} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {F351D557-E202-4A44-BB44-96B721CFFDE0} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {2BA8DA43-E00D-4499-B673-1974D5854F7D} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {4FB003AC-F123-4B9C-B520-359596320198} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {95D13BFF-9C2B-44D1-89A9-4825251EB48F} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {7E974F90-460E-451F-B32E-DB7468ECC6A2} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {61134AA7-967E-425D-924A-3B5AB9D69EE9} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {252DF628-02FC-4A5C-A385-183BB6B110D6} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {40D5A6AF-CA02-4D05-8A5D-5D307B225260} = {07A30A34-2DDA-45EE-B767-28021086B235}
+ {636A510B-F616-4718-9D2E-1B4996975744} = {07A30A34-2DDA-45EE-B767-28021086B235}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C48AD7EE-82B1-4307-A869-3FC14AC9B21F}
diff --git a/src/Microsoft.Crank.Agent/Microsoft.Crank.Agent.csproj b/src/Microsoft.Crank.Agent/Microsoft.Crank.Agent.csproj
index 80dd913fe..7fd01efec 100644
--- a/src/Microsoft.Crank.Agent/Microsoft.Crank.Agent.csproj
+++ b/src/Microsoft.Crank.Agent/Microsoft.Crank.Agent.csproj
@@ -1,5 +1,4 @@
-
-
+
The benchmarking agent
net8.0
@@ -12,11 +11,9 @@
Microsoft.Crank.Agent
latest
-
-
@@ -36,18 +33,17 @@
-
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.AzureDevOpsWorker/Microsoft.Crank.AzureDevOpsWorker.csproj b/src/Microsoft.Crank.AzureDevOpsWorker/Microsoft.Crank.AzureDevOpsWorker.csproj
index c381206ea..97f21b9e2 100644
--- a/src/Microsoft.Crank.AzureDevOpsWorker/Microsoft.Crank.AzureDevOpsWorker.csproj
+++ b/src/Microsoft.Crank.AzureDevOpsWorker/Microsoft.Crank.AzureDevOpsWorker.csproj
@@ -1,5 +1,4 @@
-
-
+
net8.0
Execute crank jobs added to an Azure Service Bus queue by Azure DevOps.
@@ -11,24 +10,20 @@
Microsoft
Microsoft.Crank.AzureDevOpsWorker
-
-
true
-
-
PreserveNewest
@@ -37,4 +32,7 @@
PreserveNewest
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Controller/Microsoft.Crank.Controller.csproj b/src/Microsoft.Crank.Controller/Microsoft.Crank.Controller.csproj
index b12592e6a..a6052a182 100644
--- a/src/Microsoft.Crank.Controller/Microsoft.Crank.Controller.csproj
+++ b/src/Microsoft.Crank.Controller/Microsoft.Crank.Controller.csproj
@@ -1,5 +1,4 @@
-
-
+
net8.0
Schedules jobs on the benchmarks agent.
@@ -12,7 +11,6 @@
Microsoft.Crank.Controller
12.0
-
@@ -26,16 +24,16 @@
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.EventSources/Microsoft.Crank.EventSources.csproj b/src/Microsoft.Crank.EventSources/Microsoft.Crank.EventSources.csproj
index a4c999789..f92bdf080 100644
--- a/src/Microsoft.Crank.EventSources/Microsoft.Crank.EventSources.csproj
+++ b/src/Microsoft.Crank.EventSources/Microsoft.Crank.EventSources.csproj
@@ -1,12 +1,13 @@
-
netstandard2.0
true
Helper classes to register metrics with the Microsoft.Crank tools.
true
Microsoft
- Microsoft.Crank.EventSources
+ Microsoft.Crank.EventSources
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.JobOjectWrapper/Microsoft.Crank.JobObjectWrapper.csproj b/src/Microsoft.Crank.JobOjectWrapper/Microsoft.Crank.JobObjectWrapper.csproj
index fe8989f18..1279796e1 100644
--- a/src/Microsoft.Crank.JobOjectWrapper/Microsoft.Crank.JobObjectWrapper.csproj
+++ b/src/Microsoft.Crank.JobOjectWrapper/Microsoft.Crank.JobObjectWrapper.csproj
@@ -1,10 +1,11 @@
-
-
+
Exe
net8.0
enable
enable
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csproj b/src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csproj
index 229c7e35c..f28bd781b 100644
--- a/src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csproj
+++ b/src/Microsoft.Crank.Jobs.Bombardier/Microsoft.Crank.Jobs.Bombardier.csproj
@@ -1,12 +1,12 @@
-
Exe
net8.0
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Jobs.H2Load/Microsoft.Crank.Jobs.H2Load.csproj b/src/Microsoft.Crank.Jobs.H2Load/Microsoft.Crank.Jobs.H2Load.csproj
index 1d630975c..7a00699fa 100644
--- a/src/Microsoft.Crank.Jobs.H2Load/Microsoft.Crank.Jobs.H2Load.csproj
+++ b/src/Microsoft.Crank.Jobs.H2Load/Microsoft.Crank.Jobs.H2Load.csproj
@@ -1,16 +1,15 @@
-
Exe
net8.0
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Jobs.HttpClient/Microsoft.Crank.Jobs.HttpClient.csproj b/src/Microsoft.Crank.Jobs.HttpClient/Microsoft.Crank.Jobs.HttpClient.csproj
index e94156465..0bceede6b 100644
--- a/src/Microsoft.Crank.Jobs.HttpClient/Microsoft.Crank.Jobs.HttpClient.csproj
+++ b/src/Microsoft.Crank.Jobs.HttpClient/Microsoft.Crank.Jobs.HttpClient.csproj
@@ -1,18 +1,18 @@
-
-
+
Exe
net8.0
Latest
-
-
-
+
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Jobs.K6/Microsoft.Crank.Jobs.K6.csproj b/src/Microsoft.Crank.Jobs.K6/Microsoft.Crank.Jobs.K6.csproj
index e5d94c622..ae1445cd5 100644
--- a/src/Microsoft.Crank.Jobs.K6/Microsoft.Crank.Jobs.K6.csproj
+++ b/src/Microsoft.Crank.Jobs.K6/Microsoft.Crank.Jobs.K6.csproj
@@ -1,18 +1,17 @@
-
Exe
net8.0
-
-
PreserveNewest
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Jobs.PipeliningClient/Microsoft.Crank.Jobs.PipeliningClient.csproj b/src/Microsoft.Crank.Jobs.PipeliningClient/Microsoft.Crank.Jobs.PipeliningClient.csproj
index face82470..a9971616b 100644
--- a/src/Microsoft.Crank.Jobs.PipeliningClient/Microsoft.Crank.Jobs.PipeliningClient.csproj
+++ b/src/Microsoft.Crank.Jobs.PipeliningClient/Microsoft.Crank.Jobs.PipeliningClient.csproj
@@ -1,17 +1,17 @@
-
Exe
net8.0
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Jobs.Wrk/Microsoft.Crank.Jobs.Wrk.csproj b/src/Microsoft.Crank.Jobs.Wrk/Microsoft.Crank.Jobs.Wrk.csproj
index 271a52fcd..c84888f10 100644
--- a/src/Microsoft.Crank.Jobs.Wrk/Microsoft.Crank.Jobs.Wrk.csproj
+++ b/src/Microsoft.Crank.Jobs.Wrk/Microsoft.Crank.Jobs.Wrk.csproj
@@ -1,14 +1,11 @@
-
-
+
Exe
net8.0
-
-
PreserveNewest
@@ -17,5 +14,7 @@
PreserveNewest
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Jobs.Wrk2/Microsoft.Crank.Jobs.Wrk2.csproj b/src/Microsoft.Crank.Jobs.Wrk2/Microsoft.Crank.Jobs.Wrk2.csproj
index 062729e02..912425fac 100644
--- a/src/Microsoft.Crank.Jobs.Wrk2/Microsoft.Crank.Jobs.Wrk2.csproj
+++ b/src/Microsoft.Crank.Jobs.Wrk2/Microsoft.Crank.Jobs.Wrk2.csproj
@@ -1,18 +1,17 @@
-
Exe
net8.0
-
-
PreserveNewest
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.Models/Microsoft.Crank.Models.csproj b/src/Microsoft.Crank.Models/Microsoft.Crank.Models.csproj
index fd40cbbed..3810110fb 100644
--- a/src/Microsoft.Crank.Models/Microsoft.Crank.Models.csproj
+++ b/src/Microsoft.Crank.Models/Microsoft.Crank.Models.csproj
@@ -1,14 +1,14 @@
-
-
+
Class to transfer data to/from the benchmark server.
net8.0
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.PullRequestBot/Microsoft.Crank.PullRequestBot.csproj b/src/Microsoft.Crank.PullRequestBot/Microsoft.Crank.PullRequestBot.csproj
index 848d87ce7..628c05b8e 100644
--- a/src/Microsoft.Crank.PullRequestBot/Microsoft.Crank.PullRequestBot.csproj
+++ b/src/Microsoft.Crank.PullRequestBot/Microsoft.Crank.PullRequestBot.csproj
@@ -1,5 +1,4 @@
-
-
+
net8.0
Runs benchmarks out of GitHub pull-requests.
@@ -12,27 +11,29 @@
Microsoft.Crank.PullRequestBot
9.0
-
-
PreserveNewest
-
-
-
-
-
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Microsoft.Crank.RegressionBot/Microsoft.Crank.RegressionBot.csproj b/src/Microsoft.Crank.RegressionBot/Microsoft.Crank.RegressionBot.csproj
index cc8c859f7..589a678cf 100644
--- a/src/Microsoft.Crank.RegressionBot/Microsoft.Crank.RegressionBot.csproj
+++ b/src/Microsoft.Crank.RegressionBot/Microsoft.Crank.RegressionBot.csproj
@@ -1,11 +1,9 @@
-
-
+
Exe
net8.0
latest
-
@@ -21,16 +19,13 @@
-
-
-
PreserveNewest
@@ -39,5 +34,7 @@
PreserveNewest
-
-
+
+
+
+
\ No newline at end of file
diff --git a/test/Microsoft.Crank.Agent.UnitTests/CompositeRelayServerTests.cs b/test/Microsoft.Crank.Agent.UnitTests/CompositeRelayServerTests.cs
new file mode 100644
index 000000000..b55e6eee5
--- /dev/null
+++ b/test/Microsoft.Crank.Agent.UnitTests/CompositeRelayServerTests.cs
@@ -0,0 +1,181 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.AspNetCore.Hosting.Server;
+using Microsoft.AspNetCore.Http.Features;
+using Microsoft.Crank.Agent;
+using Moq;
+using Xunit;
+
+namespace Microsoft.Crank.Agent.UnitTests
+{
+ ///
+ /// Unit tests for the class.
+ ///
+ public class CompositeServerTests
+ {
+ ///
+ /// A dummy implementation of
+ /// for testing the StartAsync method of .
+ ///
+// private class DummyHttpApplication : IHttpApplication [Error] (27-46)CS0535 'CompositeServerTests.DummyHttpApplication' does not implement interface member 'IHttpApplication.CreateContext(IFeatureCollection)'
+// {
+// ///
+// /// Creates a dummy context.
+// ///
+// public string CreateContext(Microsoft.AspNetCore.Http.HttpContext context) => "dummy";
+//
+// ///
+// /// Processes the request asynchronously (dummy implementation).
+// ///
+// public Task ProcessRequestAsync(string context) => Task.CompletedTask;
+//
+// ///
+// /// Disposes of the context (dummy implementation).
+// ///
+// public void DisposeContext(string context, Exception exception) { }
+// }
+
+ ///
+ /// Tests that the constructor throws an ArgumentNullException when the servers parameter is null.
+ ///
+ [Fact]
+ public void Constructor_NullServers_ThrowsArgumentNullException()
+ {
+ // Arrange
+ IEnumerable servers = null;
+
+ // Act & Assert
+ var exception = Assert.Throws(() => new CompositeServer(servers));
+ Assert.Equal("servers", exception.ParamName);
+ }
+
+ ///
+ /// Tests that the constructor throws an ArgumentException when the servers collection contains fewer than 2 servers.
+ ///
+ [Fact]
+ public void Constructor_LessThanTwoServers_ThrowsArgumentException()
+ {
+ // Arrange
+ var serverMock = new Mock();
+ IEnumerable servers = new List { serverMock.Object };
+
+ // Act & Assert
+ var exception = Assert.Throws(() => new CompositeServer(servers));
+ Assert.Equal("servers", exception.ParamName);
+ Assert.Contains("Expected at least 2 servers.", exception.Message);
+ }
+
+ ///
+ /// Tests that the Features property returns the Features collection from the first server.
+ ///
+ [Fact]
+ public void Features_WhenCalled_ReturnsFirstServerFeatures()
+ {
+ // Arrange
+ var expectedFeatures = new FeatureCollection();
+ var serverMock1 = new Mock();
+ serverMock1.Setup(s => s.Features).Returns(expectedFeatures);
+ var serverMock2 = new Mock();
+ serverMock2.Setup(s => s.Features).Returns(new FeatureCollection());
+ IEnumerable servers = new List { serverMock1.Object, serverMock2.Object };
+ var compositeServer = new CompositeServer(servers);
+
+ // Act
+ var actualFeatures = compositeServer.Features;
+
+ // Assert
+ Assert.Same(expectedFeatures, actualFeatures);
+ }
+
+ ///
+ /// Tests that the Dispose method calls Dispose on all inner servers.
+ ///
+ [Fact]
+ public void Dispose_WhenCalled_DisposesAllInnerServers()
+ {
+ // Arrange
+ var serverMock1 = new Mock();
+ var serverMock2 = new Mock();
+ IEnumerable servers = new List { serverMock1.Object, serverMock2.Object };
+ var compositeServer = new CompositeServer(servers);
+
+ // Act
+ compositeServer.Dispose();
+
+ // Assert
+ serverMock1.Verify(s => s.Dispose(), Times.Once);
+ serverMock2.Verify(s => s.Dispose(), Times.Once);
+ }
+
+ ///
+ /// Tests that the StartAsync method invokes StartAsync on all inner servers.
+ ///
+// [Fact] [Error] (144-54)CS1503 Argument 1: cannot convert from 'Microsoft.Crank.Agent.UnitTests.CompositeServerTests.DummyHttpApplication' to 'Microsoft.AspNetCore.Hosting.Server.IHttpApplication