Add a Xamarin Workbooks integration

The integration uses the new Xamarin Workbooks SDK and provides some
convenience renderers for SKImage, SKBitmap, SKSurface, SKPixmap, and SKColor to
aid in using those types in a workbook. With the integration loaded, those Skia
objects will be rendered directly in the viewport as images (in the case of the
first 4), or as a Workbooks color in the case of SKColor.
This commit is contained in:
Bojan Rajkovic 2017-05-02 11:41:34 -04:00
Родитель e635ce8a05
Коммит aeb3afc0cc
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 7106844DF6B71E93
14 изменённых файлов: 235 добавлений и 0 удалений

Просмотреть файл

@ -94,6 +94,7 @@ Task ("libs")
if (!DirectoryExists ("./output/mac/")) CreateDirectory ("./output/mac/");
if (!DirectoryExists ("./output/netstandard/")) CreateDirectory ("./output/netstandard/");
if (!DirectoryExists ("./output/linux/")) CreateDirectory ("./output/linux/");
if (!DirectoryExists ("./output/interactive/")) CreateDirectory ("./output/interactive/");
if (IsRunningOnWindows ()) {
// build bindings
@ -152,6 +153,9 @@ Task ("libs")
// copy HarfBuzz
CopyFileToDirectory ("./source/SkiaSharp.HarfBuzz/SkiaSharp.HarfBuzz/bin/Release/SkiaSharp.HarfBuzz.dll", "./output/portable/");
// copy Workbooks integration
CopyFileToDirectory ("./source/SkiaSharp.Workbooks/bin/Release/SkiaSharp.Workbooks.dll", "./output/interactive/");
}
if (IsRunningOnMac ()) {
@ -216,6 +220,9 @@ Task ("libs")
// copy HarfBuzz
CopyFileToDirectory ("./source/SkiaSharp.HarfBuzz/SkiaSharp.HarfBuzz/bin/Release/SkiaSharp.HarfBuzz.dll", "./output/portable/");
// copy Workbooks integration
CopyFileToDirectory ("./source/SkiaSharp.Workbooks/bin/Release/SkiaSharp.Workbooks.dll", "./output/interactive/");
}
if (IsRunningOnLinux ()) {
@ -254,6 +261,9 @@ Task ("libs")
// copy HarfBuzz
CopyFileToDirectory ("./source/SkiaSharp.HarfBuzz/SkiaSharp.HarfBuzz/bin/Release/SkiaSharp.HarfBuzz.dll", "./output/portable/");
// copy Workbooks integration
CopyFileToDirectory ("./source/SkiaSharp.Workbooks/bin/Release/SkiaSharp.Workbooks.dll", "./output/interactive/");
}
// TODO: remove this nonsense !!!
@ -761,6 +771,9 @@ Task ("set-versions")
UpdateAssemblyInfo (
"./binding/HarfBuzzSharp.Shared/Properties/HarfBuzzSharpAssemblyInfo.cs",
HARFBUZZ_VERSION_ASSEMBLY, HARFBUZZ_VERSION_FILE, sha);
UpdateAssemblyInfo (
"./source/SkiaSharp.Workbooks/Properties/SkiaSharpWorkbooksAssemblyInfo.cs",
VERSION_ASSEMBLY, VERSION_FILE, sha);
});
////////////////////////////////////////////////////////////////////////////////////////////////////

Просмотреть файл

@ -22,5 +22,7 @@
<file src="output/docs/msxml/SkiaSharp.xml" target="lib/portable-net45+win8+wpa81+wp8" />
<!-- .NET Core -->
<file src="output/linux/x64/libSkiaSharp.so" target="runtimes/linux-x64/native/libSkiaSharp.so" />
<!-- Workbooks integration -->
<file src="output/interactive/SkiaSharp.Workbooks.dll" target="xamarin.interactive/SkiaSharp.Workbooks.dll" />
</files>
</package>

Просмотреть файл

@ -38,5 +38,7 @@
<!-- .NET Core -->
<file src="output/osx/libSkiaSharp.dylib" target="runtimes/osx/native/libSkiaSharp.dylib" />
<!-- OS X -->
<!-- Workbooks integration -->
<file src="output/interactive/SkiaSharp.Workbooks.dll" target="xamarin.interactive/SkiaSharp.Workbooks.dll" />
</files>
</package>

Просмотреть файл

@ -40,5 +40,7 @@
<file src="output/uwp/x64/libEGL.dll" target="runtimes/win10-x64/nativeassets/uap10.0/libEGL.dll" />
<file src="output/uwp/x86/libEGL.dll" target="runtimes/win10-x86/nativeassets/uap10.0/libEGL.dll" />
<file src="output/uwp/arm/libEGL.dll" target="runtimes/win10-arm/nativeassets/uap10.0/libEGL.dll" />
<!-- Workbooks integration -->
<file src="output/interactive/SkiaSharp.Workbooks.dll" target="xamarin.interactive/SkiaSharp.Workbooks.dll" />
</files>
</package>

Просмотреть файл

@ -50,5 +50,7 @@
<file src="output/uwp/x64/libEGL.dll" target="runtimes/win10-x64/nativeassets/uap10.0/libEGL.dll" />
<file src="output/uwp/x86/libEGL.dll" target="runtimes/win10-x86/nativeassets/uap10.0/libEGL.dll" />
<file src="output/uwp/arm/libEGL.dll" target="runtimes/win10-arm/nativeassets/uap10.0/libEGL.dll" />
<!-- Workbooks integration -->
<file src="output/interactive/SkiaSharp.Workbooks.dll" target="xamarin.interactive/SkiaSharp.Workbooks.dll" />
</files>
</package>

Просмотреть файл

@ -0,0 +1,17 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Cake.
// </auto-generated>
//------------------------------------------------------------------------------
using System.Reflection;
[assembly: AssemblyTitle("SkiaSharp.Workbooks")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SkiaSharp")]
[assembly: AssemblyVersion("1.57.0.0")]
[assembly: AssemblyFileVersion("1.57.1.0")]
[assembly: AssemblyInformationalVersion("1.57.1.0-{GIT_SHA}")]
[assembly: AssemblyCopyright("Microsoft")]
[assembly: AssemblyTrademark("")]

Просмотреть файл

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{89736865-5272-4A42-A7FB-D802C6345502}</ProjectGuid>
<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<RootNamespace>SkiaSharp.Workbooks</RootNamespace>
<AssemblyName>SkiaSharp.Workbooks</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Profile111</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug</OutputPath>
<DefineConstants>DEBUG;</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<Optimize>true</Optimize>
<OutputPath>bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>false</AllowUnsafeBlocks>
</PropertyGroup>
<ItemGroup>
<Compile Include="SkiaWorkbooksIntegration.cs" />
<Compile Include="SkiaSharpRepresentationProvider.cs" />
<Compile Include="Properties\SkiaSharpWorkbooksAssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<Reference Include="Xamarin.Interactive">
<HintPath>..\packages\Xamarin.Workbooks.Integration.1.0.0-rc1\lib\portable-net45+win8+wpa81\Xamarin.Interactive.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\binding\SkiaSharp.Portable\SkiaSharp.Portable.csproj">
<Project>{7AA90628-2FDD-4585-AF2F-CC51CFA8B52A}</Project>
<Name>SkiaSharp.Portable</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" />
<ProjectExtensions>
<MonoDevelop>
<Properties>
<Policies>
<TextStylePolicy TabWidth="8" TabsToSpaces="False" IndentWidth="8" RemoveTrailingWhitespace="True" NoTabsAfterNonTabs="False" EolMarker="Native" FileWidth="120" inheritsSet="Mono" inheritsScope="text/plain" scope="text/x-csharp" />
<CSharpFormattingPolicy IndentBlock="True" IndentBraces="False" IndentSwitchSection="False" IndentSwitchCaseSection="True" LabelPositioning="OneLess" NewLinesForBracesInTypes="True" NewLinesForBracesInMethods="True" NewLinesForBracesInProperties="False" NewLinesForBracesInAccessors="False" NewLinesForBracesInAnonymousMethods="False" NewLinesForBracesInControlBlocks="False" NewLinesForBracesInAnonymousTypes="False" NewLinesForBracesInObjectCollectionArrayInitializers="False" NewLinesForBracesInLambdaExpressionBody="False" NewLineForElse="False" NewLineForCatch="False" NewLineForFinally="False" NewLineForMembersInObjectInit="False" NewLineForMembersInAnonymousTypes="False" NewLineForClausesInQuery="False" SpacingAfterMethodDeclarationName="True" SpaceWithinMethodDeclarationParenthesis="False" SpaceBetweenEmptyMethodDeclarationParentheses="False" SpaceAfterMethodCallName="True" SpaceWithinMethodCallParentheses="False" SpaceBetweenEmptyMethodCallParentheses="False" SpaceAfterControlFlowStatementKeyword="True" SpaceWithinExpressionParentheses="False" SpaceWithinCastParentheses="False" SpaceWithinOtherParentheses="False" SpaceAfterCast="False" SpacesIgnoreAroundVariableDeclaration="False" SpaceBeforeOpenSquareBracket="True" SpaceBetweenEmptySquareBrackets="False" SpaceWithinSquareBrackets="False" SpaceAfterColonInBaseTypeDeclaration="True" SpaceAfterComma="True" SpaceAfterDot="False" SpaceAfterSemicolonsInForStatement="True" SpaceBeforeColonInBaseTypeDeclaration="True" SpaceBeforeComma="False" SpaceBeforeDot="False" SpaceBeforeSemicolonsInForStatement="False" SpacingAroundBinaryOperator="Single" WrappingPreserveSingleLine="True" WrappingKeepStatementsOnSingleLine="True" PlaceSystemDirectiveFirst="True" inheritsSet="Mono" inheritsScope="text/x-csharp" scope="text/x-csharp" />
</Policies>
</Properties>
</MonoDevelop>
</ProjectExtensions>
</Project>

Просмотреть файл

@ -0,0 +1,92 @@
using System;
using System.Collections.Generic;
using System.IO;
using Xamarin.Interactive.Logging;
using Xamarin.Interactive.Representations;
using Xamarin.Interactive.Representations.Reflection;
using Xamarin.Interactive.Serialization;
namespace SkiaSharp.Workbooks
{
sealed class SkiaSharpRepresentationProvider : RepresentationProvider
{
public override IEnumerable<object> ProvideRepresentations (object obj)
{
yield return ProvideSingleRepresentation (obj);
}
public override bool TryConvertFromRepresentation (
IRepresentedType representedType,
object [] representations,
out object represented)
{
represented = null;
Color color;
if (TryFindMatchingRepresentation<SKColor, Color> (
representedType,
representations,
out color)) {
represented = new SKColor (
(byte)(color.Red * 255),
(byte)(color.Green * 255),
(byte)(color.Blue * 255),
(byte)(color.Alpha * 255));
return true;
}
return base.TryConvertFromRepresentation (representedType, representations, out represented);
}
ISerializableObject ProvideSingleRepresentation (object obj)
{
try {
var bitmap = obj as SKBitmap;
if (bitmap != null)
return SKImageToRepresentationImage (SKImage.FromBitmap (bitmap));
var image = obj as SKImage;
if (image != null)
return SKImageToRepresentationImage (image);
var surface = obj as SKSurface;
if (surface != null)
return SKImageToRepresentationImage (surface.Snapshot ());
var pixmap = obj as SKPixmap;
if (pixmap != null)
return ImageFromSKData (
pixmap.Encode (SKEncodedImageFormat.Png, 85),
pixmap.Width,
pixmap.Height);
if (obj is SKColor) {
var color = (SKColor)obj;
return new Color (color.Red / 255.0, color.Green / 255.0, color.Blue / 255.0, color.Alpha / 255.0);
}
return null;
} catch (Exception e) {
Log.Error (
nameof (SkiaSharpRepresentationProvider),
$"Error while trying to provide representation for {obj.GetType ()}.",
e);
return null;
}
}
ISerializableObject SKImageToRepresentationImage (SKImage image)
=> ImageFromSKData (image.Encode (), image.Width, image.Height);
ISerializableObject ImageFromSKData (SKData data, int width, int height)
{
byte [] pngData;
using (var ms = new MemoryStream ()) {
data.SaveTo (ms);
pngData = ms.ToArray ();
}
return new Image (ImageFormat.Png, pngData, width, height);
}
}
}

Просмотреть файл

@ -0,0 +1,12 @@
using Xamarin.Interactive;
[assembly: AgentIntegration (typeof (SkiaSharp.Workbooks.SkiaWorkbooksIntegration))]
namespace SkiaSharp.Workbooks
{
sealed class SkiaWorkbooksIntegration : IAgentIntegration
{
public void IntegrateWith (IAgent agent)
=> agent.RepresentationManager.AddProvider (new SkiaSharpRepresentationProvider ());
}
}

Просмотреть файл

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" ?>
<packages>
<package id="Xamarin.Workbooks.Integration" version="1.0.0-rc1" />
</packages>

Просмотреть файл

@ -29,6 +29,8 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SkiaSharp.HarfBuzz.Shared",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.HarfBuzz", "SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz.csproj", "{7CAD1912-05A5-42E5-B7BA-81BB051F0566}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Workbooks", "SkiaSharp.Workbooks\SkiaSharp.Workbooks.csproj", "{89736865-5272-4A42-A7FB-D802C6345502}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharp.Svg\SkiaSharp.Svg.Shared\SkiaSharp.Svg.Shared.projitems*{04c4399a-6740-4733-b6b7-f968232a76c8}*SharedItemsImports = 4
@ -62,6 +64,10 @@ Global
{7CAD1912-05A5-42E5-B7BA-81BB051F0566}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CAD1912-05A5-42E5-B7BA-81BB051F0566}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CAD1912-05A5-42E5-B7BA-81BB051F0566}.Release|Any CPU.Build.0 = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -75,5 +81,6 @@ Global
{4DFBD9A6-EA81-4E26-9753-A9C7A600EA34} = {815C2429-8C88-4C09-B6AB-A916040F9FEF}
{C3E63B2D-95D4-4C3F-B10F-7A0AACF94980} = {87D751FF-6347-40FF-8EC5-7CAD06BD5973}
{7CAD1912-05A5-42E5-B7BA-81BB051F0566} = {87D751FF-6347-40FF-8EC5-7CAD06BD5973}
{89736865-5272-4A42-A7FB-D802C6345502} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -81,6 +81,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.tvOS", "..\bi
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.Android", "..\binding\HarfBuzzSharp.Android\HarfBuzzSharp.Android.csproj", "{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Workbooks", "SkiaSharp.Workbooks\SkiaSharp.Workbooks.csproj", "{89736865-5272-4A42-A7FB-D802C6345502}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharp.Svg\SkiaSharp.Svg.Shared\SkiaSharp.Svg.Shared.projitems*{04c4399a-6740-4733-b6b7-f968232a76c8}*SharedItemsImports = 4
@ -210,6 +212,10 @@ Global
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}.Release|Any CPU.Build.0 = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -247,5 +253,6 @@ Global
{30952C22-D566-488F-9D7A-2411B027D6CA} = {56AE868D-7AD9-4DFC-BD27-6BBA8DC9F75A}
{8D646738-458A-441F-B69B-253EF058A812} = {56AE868D-7AD9-4DFC-BD27-6BBA8DC9F75A}
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD} = {56AE868D-7AD9-4DFC-BD27-6BBA8DC9F75A}
{89736865-5272-4A42-A7FB-D802C6345502} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -61,6 +61,8 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "SkiaSharp.HarfBuzz.Shared",
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.HarfBuzz", "SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz\SkiaSharp.HarfBuzz.csproj", "{7CAD1912-05A5-42E5-B7BA-81BB051F0566}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Workbooks", "SkiaSharp.Workbooks\SkiaSharp.Workbooks.csproj", "{89736865-5272-4A42-A7FB-D802C6345502}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharp.Svg\SkiaSharp.Svg.Shared\SkiaSharp.Svg.Shared.projitems*{04c4399a-6740-4733-b6b7-f968232a76c8}*SharedItemsImports = 4
@ -143,6 +145,10 @@ Global
{7CAD1912-05A5-42E5-B7BA-81BB051F0566}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7CAD1912-05A5-42E5-B7BA-81BB051F0566}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7CAD1912-05A5-42E5-B7BA-81BB051F0566}.Release|Any CPU.Build.0 = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -170,5 +176,6 @@ Global
{2AE5D8C5-EAC6-4515-89F2-A4994B41C925} = {9F016D5D-C7BF-45C7-BC0C-5A6E721DCF9E}
{C3E63B2D-95D4-4C3F-B10F-7A0AACF94980} = {EDCCEA7A-E6CD-4311-B686-41D7CA40DF85}
{7CAD1912-05A5-42E5-B7BA-81BB051F0566} = {EDCCEA7A-E6CD-4311-B686-41D7CA40DF85}
{89736865-5272-4A42-A7FB-D802C6345502} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
EndGlobalSection
EndGlobal

Просмотреть файл

@ -105,6 +105,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.tvOS", "..\bi
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HarfBuzzSharp.Android", "..\binding\HarfBuzzSharp.Android\HarfBuzzSharp.Android.csproj", "{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SkiaSharp.Workbooks", "SkiaSharp.Workbooks\SkiaSharp.Workbooks.csproj", "{89736865-5272-4A42-A7FB-D802C6345502}"
EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
SkiaSharp.Svg\SkiaSharp.Svg.Shared\SkiaSharp.Svg.Shared.projitems*{04c4399a-6740-4733-b6b7-f968232a76c8}*SharedItemsImports = 4
@ -295,6 +297,10 @@ Global
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD}.Release|Any CPU.Build.0 = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Debug|Any CPU.Build.0 = Debug|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.ActiveCfg = Release|Any CPU
{89736865-5272-4A42-A7FB-D802C6345502}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -344,5 +350,6 @@ Global
{E8192110-FCF9-4972-9472-7408BC2CA56B} = {2F28C1EB-D020-4A3A-948F-DF0AD0FDCC53}
{8D646738-458A-441F-B69B-253EF058A812} = {2F28C1EB-D020-4A3A-948F-DF0AD0FDCC53}
{E6B786C4-3BF9-4A42-9A4A-08002AE3FDAD} = {2F28C1EB-D020-4A3A-948F-DF0AD0FDCC53}
{89736865-5272-4A42-A7FB-D802C6345502} = {C335869B-7CC8-4239-B4A5-8031AA9758D3}
EndGlobalSection
EndGlobal