[
  {
    "path": ".gitignore",
    "content": "[Bb]in/\n[Oo]bj/\n\n*.suo\n*.user\n*.sln.docstates\n\n_ReSharper*\n\npackages\n\n*.nupkg"
  },
  {
    "path": "AppBarExample/App.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".NETFramework,Version=v4.5\" />\n    </startup>\n</configuration>"
  },
  {
    "path": "AppBarExample/App.xaml",
    "content": "﻿<Application x:Class=\"AppBarExample.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n             StartupUri=\"MainWindow.xaml\">\n    <Application.Resources>\n         \n    </Application.Resources>\n</Application>\n"
  },
  {
    "path": "AppBarExample/App.xaml.cs",
    "content": "using System.Windows;\n\nnamespace AppBarExample\n{\n    /// <summary>\n    /// Interaction logic for App.xaml\n    /// </summary>\n    public partial class App : Application\n    {\n    }\n}"
  },
  {
    "path": "AppBarExample/AppBarExample.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\">\n  \n  <PropertyGroup>\n    <TargetFrameworks>net5.0-windows</TargetFrameworks>\n    <OutputType>WinExe</OutputType>\n    <UseWPF>true</UseWPF>\n\n    <Version>1.0.0.0</Version>\n    <Company>Pilip Rieck</Company>\n    <Description>Example for creating a Windows AppBar with WPF</Description>\n    <Copyright>Creative Commons CC0 (https://creativecommons.org/publicdomain/zero/1.0/)s</Copyright>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"..\\WpfAppBar\\WpfAppBar.csproj\" />\n  </ItemGroup>\n  \n</Project>"
  },
  {
    "path": "AppBarExample/MainWindow.xaml",
    "content": "﻿<Window x:Class=\"AppBarExample.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        Title=\"MainWindow\" Height=\"350\" Width=\"525\">\n    <Grid x:Name=\"grid\">\n        <Grid.ColumnDefinitions>\n            <ColumnDefinition Width=\"*\"/>\n            <ColumnDefinition Width=\"Auto\"/>\n            <ColumnDefinition Width=\"*\"/>\n        </Grid.ColumnDefinitions>    \n        <Grid.RowDefinitions>\n            <RowDefinition Height=\"*\"/>\n            <RowDefinition Height=\"Auto\"/>\n            <RowDefinition Height=\"*\"/>\n        </Grid.RowDefinitions>\n        \n        <Grid.Resources>\n            <Style TargetType=\"{x:Type Button}\">\n                <Setter Property=\"Margin\" Value=\"5,5\"></Setter>\n                <Setter Property=\"Padding\" Value=\"15,5\"></Setter>\n            </Style>\n        </Grid.Resources>\n        \n        <StackPanel Grid.Row=\"1\" Grid.Column=\"1\" Orientation=\"Vertical\">\n            <Button x:Name=\"AppBar\" Click=\"AppBar_OnClick\">AppBar</Button>\n            <Button x:Name=\"Normal\" Click=\"Normal_OnClick\" IsEnabled=\"false\">Normal</Button>\n        </StackPanel>\n        \n    </Grid>\n</Window>\n"
  },
  {
    "path": "AppBarExample/MainWindow.xaml.cs",
    "content": "﻿using System;\nusing System.ComponentModel;\nusing System.Windows;\nusing WpfAppBar;\n\nnamespace AppBarExample\n{\n    /// <summary>\n    /// Interaction logic for MainWindow.xaml\n    /// </summary>\n    public partial class MainWindow : Window\n    {\n        public MainWindow()\n        {\n            InitializeComponent();\n        }\n\n        private void Normal_OnClick(object sender, RoutedEventArgs e)\n        {\n            Normal.IsEnabled = false;\n            AppBar.IsEnabled = true;\n            AppBarFunctions.SetAppBar(this, ABEdge.None);\n        }\n\n        private void AppBar_OnClick(object sender, RoutedEventArgs e)\n        {\n            AppBar.IsEnabled = false;\n            Normal.IsEnabled = true;\n            AppBarFunctions.SetAppBar(this, ABEdge.Left, grid);\n        }\n    }\n}\n"
  },
  {
    "path": "Readme.md",
    "content": "WPFAppBar\n=========\n\nAvailable via Nuget : [https://www.nuget.org/packages/WpfAppBar](https://www.nuget.org/packages/WpfAppBar)\n\nAs seen in this StackOverflow question:\n\n[How do you do AppBar docking (to screen edge, like WinAmp) in WPF?](http://stackoverflow.com/q/75785/12643)\n\nLooking for a WinForms version:\nhttps://github.com/tip2tail/t2tWinFormAppBarLib\n\n\nWhat is it?\n----------\nA helper for turning a WPF window into an \"AppBar\" like the Windows taskbar.\nI hope you're not writing any applications that need to do this, but if you\nare, hopefully this library will help.\n\nHow do I use it?\n----------------\nTo use, just call this code from anywhere within a normal WPF window (say a button click or the initialize). Note that you can not call this until AFTER the window is initialized, if the HWND hasn't been created yet (like in the constructor), an error will occur.\n\n```C#\n//Make the window an appbar:\nAppBarFunctions.SetAppBar(this, ABEdge.Right);\n\n// If you want to resize the window by its content:\nAppBarFunctions.SetAppBar(this, ABEdge.Right, grid);\nAppBarFunctions.SetAppBar(this, ABEdge.Right, wrapPanel);\n// etc...\n\n//Restore the window to a normal window:\nAppBarFunctions.SetAppBar(this, ABEdge.None);\n```\n\nI found a bug!\n--------------\nPlease add an issue, or better yet send a pull request.\nThanks!\n\n\n\nThat sounds okay... but licensing?\n----------------------------------\nNo warranty of any kind implied.\n\nCreative Commons CC0 (https://creativecommons.org/publicdomain/zero/1.0/)\n"
  },
  {
    "path": "WpfAppBar/AppBarFunctions.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices;\nusing System.Windows;\nusing System.Windows.Interop;\nusing System.Windows.Threading;\n\nnamespace WpfAppBar\n{\n    public enum ABEdge : int\n    {\n        Left = 0,\n        Top,\n        Right,\n        Bottom,\n        None\n    }\n\n    public static class AppBarFunctions\n    {\n       \n        private class RegisterInfo\n        {\n            public int CallbackId { get; set; }\n            public bool IsRegistered { get; set; }\n            public Window Window { get; set; }\n            public ABEdge Edge { get; set; }\n            public WindowStyle OriginalStyle { get; set; }\n            public Point OriginalPosition { get; set; }\n            public Size OriginalSize { get; set; }\n            public ResizeMode OriginalResizeMode { get; set; }\n            public bool OriginalTopmost { get; set; }\n            public FrameworkElement ChildElement { get; set; }\n\n            \n            public Rect? DockedSize { get; set; }\n\n            public IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam,\n                                    IntPtr lParam, ref bool handled)\n            {\n                if (msg == CallbackId)\n                {\n                    if (wParam.ToInt32() == (int)Interop.ABNotify.ABN_POSCHANGED)\n                    {\n                        ABSetPos(this, Window, ChildElement);\n                        handled = true;\n                    }\n                }\n                return IntPtr.Zero;\n            }\n\n        }\n        private static readonly Dictionary<Window, RegisterInfo> RegisteredWindowInfo\n            = new Dictionary<Window, RegisterInfo>();\n        private static RegisterInfo GetRegisterInfo(Window appbarWindow)\n        {\n            RegisterInfo reg;\n            if (RegisteredWindowInfo.ContainsKey(appbarWindow))\n            {\n                reg = RegisteredWindowInfo[appbarWindow];\n            }\n            else\n            {\n                reg = new RegisterInfo()\n                {\n                    CallbackId = 0,\n                    Window = appbarWindow,\n                    IsRegistered = false,\n                    Edge = ABEdge.Top,\n                    OriginalStyle = appbarWindow.WindowStyle,\n                    OriginalPosition = new Point(appbarWindow.Left, appbarWindow.Top),\n                    OriginalSize =\n                        new Size(appbarWindow.ActualWidth, appbarWindow.ActualHeight),\n                    OriginalResizeMode = appbarWindow.ResizeMode,\n                    OriginalTopmost = appbarWindow.Topmost,\n                    DockedSize = null\n                \n                };\n                RegisteredWindowInfo.Add(appbarWindow, reg);\n            }\n            return reg;\n        }\n\n        private static void RestoreWindow(Window appbarWindow)\n        {\n            var info = GetRegisterInfo(appbarWindow);\n\n            appbarWindow.WindowStyle = info.OriginalStyle;\n            appbarWindow.ResizeMode = info.OriginalResizeMode;\n            appbarWindow.Topmost = info.OriginalTopmost;\n            \n            info.DockedSize = null;\n\n            var rect = new Rect(info.OriginalPosition.X, info.OriginalPosition.Y,\n                info.OriginalSize.Width, info.OriginalSize.Height);\n            appbarWindow.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle,\n                    new ResizeDelegate(DoResize), appbarWindow, rect);\n\n        }\n\n        public static void SetAppBar(Window appbarWindow, ABEdge edge, FrameworkElement childElement = null, bool topMost = true)\n        {\n            var info = GetRegisterInfo(appbarWindow);\n            info.Edge = edge;\n            info.ChildElement = childElement;\n\n            var abd = new Interop.APPBARDATA();\n            abd.cbSize = Marshal.SizeOf(abd);\n            abd.hWnd = new WindowInteropHelper(appbarWindow).Handle;\n            \n            int renderPolicy;\n\n            if (edge == ABEdge.None)\n            {\n                if (info.IsRegistered)\n                {\n                    Interop.SHAppBarMessage((int)Interop.ABMsg.ABM_REMOVE, ref abd);\n                    info.IsRegistered = false;\n                }\n                RestoreWindow(appbarWindow);\n                \n                // Restore normal desktop window manager attributes\n                renderPolicy = (int)Interop.DWMNCRenderingPolicy.UseWindowStyle;\n\n                Interop.DwmSetWindowAttribute(abd.hWnd, (int)Interop.DWMWINDOWATTRIBUTE.DWMA_EXCLUDED_FROM_PEEK, ref renderPolicy, sizeof(int));\n                Interop.DwmSetWindowAttribute(abd.hWnd, (int)Interop.DWMWINDOWATTRIBUTE.DWMA_DISALLOW_PEEK, ref renderPolicy, sizeof(int));\n\n                return;\n            }\n\n            if (!info.IsRegistered)\n            {\n                info.IsRegistered = true;\n                info.CallbackId = Interop.RegisterWindowMessage(\"AppBarMessage\");\n                abd.uCallbackMessage = info.CallbackId;\n\n                var ret = Interop.SHAppBarMessage((int)Interop.ABMsg.ABM_NEW, ref abd);\n\n                var source = HwndSource.FromHwnd(abd.hWnd);\n                source.AddHook(info.WndProc);\n            }\n\n            appbarWindow.WindowStyle = WindowStyle.None;\n            appbarWindow.ResizeMode = ResizeMode.NoResize;\n            appbarWindow.Topmost = topMost;\n\n            // Set desktop window manager attributes to prevent window\n            // from being hidden when peeking at the desktop or when\n            // the 'show desktop' button is pressed\n            renderPolicy = (int)Interop.DWMNCRenderingPolicy.Enabled;\n\n            Interop.DwmSetWindowAttribute(abd.hWnd, (int)Interop.DWMWINDOWATTRIBUTE.DWMA_EXCLUDED_FROM_PEEK, ref renderPolicy, sizeof(int));\n            Interop.DwmSetWindowAttribute(abd.hWnd, (int)Interop.DWMWINDOWATTRIBUTE.DWMA_DISALLOW_PEEK, ref renderPolicy, sizeof(int));\n\n            ABSetPos(info, appbarWindow, childElement);\n        }\n\n        private delegate void ResizeDelegate(Window appbarWindow, Rect rect);\n        private static void DoResize(Window appbarWindow, Rect rect)\n        {\n            appbarWindow.Width = rect.Width;\n            appbarWindow.Height = rect.Height;\n            appbarWindow.Top = rect.Top;\n            appbarWindow.Left = rect.Left;\n        }\n\n        private static void ABSetPos(RegisterInfo info, Window appbarWindow, FrameworkElement childElement)\n        {\n            var edge = info.Edge;\n            var barData = new Interop.APPBARDATA();\n            barData.cbSize = Marshal.SizeOf(barData);\n            barData.hWnd = new WindowInteropHelper(appbarWindow).Handle;\n            barData.uEdge = (int)edge;\n\n            // Transforms a coordinate from WPF space to Screen space\n            var toPixel = PresentationSource.FromVisual(appbarWindow).CompositionTarget.TransformToDevice;\n            // Transforms a coordinate from Screen space to WPF space\n            var toWpfUnit = PresentationSource.FromVisual(appbarWindow).CompositionTarget.TransformFromDevice;\n\n            // Transform window size from wpf units (1/96 \") to real pixels, for win32 usage\n            var sizeInPixels = (childElement != null ?\n                toPixel.Transform(new Vector(childElement.ActualWidth, childElement.ActualHeight)) :\n                toPixel.Transform(new Vector(appbarWindow.ActualWidth, appbarWindow.ActualHeight)));\n            // Even if the documentation says SystemParameters.PrimaryScreen{Width, Height} return values in \n            // \"pixels\", they return wpf units instead.\n            var actualWorkArea = GetActualWorkArea(info);\n            var screenSizeInPixels =\n                toPixel.Transform(new Vector(actualWorkArea.Width, actualWorkArea.Height));\n            var workTopLeftInPixels =\n                toPixel.Transform(new Point(actualWorkArea.Left, actualWorkArea.Top));\n            var workAreaInPixelsF = new Rect(workTopLeftInPixels, screenSizeInPixels);\n\n            if (barData.uEdge == (int)ABEdge.Left || barData.uEdge == (int)ABEdge.Right)\n            {\n                barData.rc.top = (int)workAreaInPixelsF.Top;\n                barData.rc.bottom = (int)workAreaInPixelsF.Bottom;\n                if (barData.uEdge == (int)ABEdge.Left)\n                {\n                    barData.rc.left = (int)workAreaInPixelsF.Left;\n                    //Left might not always be zero so we need to accommodate for that.\n                    //For example, if the Start Menu is docked LEFT, if we don't do the math, we'll end up with a negative size error\n                    barData.rc.right = barData.rc.left + (int)Math.Round(sizeInPixels.X);\n                }\n                else {\n                    barData.rc.right = (int)workAreaInPixelsF.Right;\n                    barData.rc.left = barData.rc.right - (int)Math.Round(sizeInPixels.X);\n                }\n            }\n            else\n            {\n                barData.rc.left = (int)workAreaInPixelsF.Left;\n                barData.rc.right = (int)workAreaInPixelsF.Right;\n                if (barData.uEdge == (int)ABEdge.Top)\n                {\n                    barData.rc.top = (int)workAreaInPixelsF.Top;\n                    //Top might not always be zero so we need to accommodate for that.\n                    //For example, if the Start Menu is docked TOP, if we don't do the math, we'll end up with a negative size error\n                    barData.rc.bottom = barData.rc.top + (int)Math.Round(sizeInPixels.Y);\n                }\n                else {\n                    barData.rc.bottom = (int)workAreaInPixelsF.Bottom;\n                    barData.rc.top = barData.rc.bottom - (int)Math.Round(sizeInPixels.Y);\n                }\n            }\n\n            Interop.SHAppBarMessage((int)Interop.ABMsg.ABM_QUERYPOS, ref barData);\n            Interop.SHAppBarMessage((int)Interop.ABMsg.ABM_SETPOS, ref barData);\n\n            // transform back to wpf units, for wpf window resizing in DoResize. \n            var location = toWpfUnit.Transform(new Point(barData.rc.left, barData.rc.top));\n            var dimension = toWpfUnit.Transform(new Vector(\n                (barData.rc.right - barData.rc.left), \n                (barData.rc.bottom - barData.rc.top)));\n\n            var rect = new Rect(location, new Size(dimension.X, dimension.Y));\n            info.DockedSize = rect;\n\n            //This is done async, because WPF will send a resize after a new appbar is added.  \n            //if we size right away, WPFs resize comes last and overrides us.\n            appbarWindow.Dispatcher.BeginInvoke(DispatcherPriority.ApplicationIdle,\n                new ResizeDelegate(DoResize), appbarWindow, rect);\n        }\n\n        private static Rect GetActualWorkArea(RegisterInfo info)\n        {\n            var hWnd = new WindowInteropHelper(info.Window).Handle;\n            var cwa = GetMonitorWorkArea(Interop.MonitorFromWindow(hWnd, Interop.MonitorDefaultTo.MONITOR_DEFAULTTONEAREST));\n            var wa = new Rect(new Point(cwa.left, cwa.top), new Point(cwa.right, cwa.bottom));\n\n            if (info.DockedSize != null)\n            {\n                wa.Union(info.DockedSize.Value);\n            }\n            return wa;\n        }\n\n        private static Interop.RECT GetMonitorWorkArea(IntPtr hMonitor)\n        {\n            var monitorInfo = new Interop.MONITORINFO();\n            monitorInfo.cbSize = Marshal.SizeOf(monitorInfo);\n            Interop.GetMonitorInfo(hMonitor, ref monitorInfo);\n            return monitorInfo.rcWork;\n        }\n    }\n}\n"
  },
  {
    "path": "WpfAppBar/Interop.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace WpfAppBar\n{\n    class Interop\n    {\n        [StructLayout(LayoutKind.Sequential)]\n        internal struct RECT\n        {\n            public int left;\n            public int top;\n            public int right;\n            public int bottom;\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        internal struct APPBARDATA\n        {\n            public int cbSize;\n            public IntPtr hWnd;\n            public int uCallbackMessage;\n            public int uEdge;\n            public RECT rc;\n            public IntPtr lParam;\n        }\n        \n        [System.Flags]\n        internal enum DWMWINDOWATTRIBUTE\n        {\n            DWMA_NCRENDERING_ENABLED = 1,\n            DWMA_NCRENDERING_POLICY,\n            DWMA_TRANSITIONS_FORCEDISABLED,\n            DWMA_ALLOW_NCPAINT,\n            DWMA_CPATION_BUTTON_BOUNDS,\n            DWMA_NONCLIENT_RTL_LAYOUT,\n            DWMA_FORCE_ICONIC_REPRESENTATION,\n            DWMA_FLIP3D_POLICY,\n            DWMA_EXTENDED_FRAME_BOUNDS,\n            DWMA_HAS_ICONIC_BITMAP,\n            DWMA_DISALLOW_PEEK,\n            DWMA_EXCLUDED_FROM_PEEK,\n            DWMA_LAST\n        }\n\n        [System.Flags]\n        internal enum DWMNCRenderingPolicy\n        {\n            UseWindowStyle,\n            Disabled,\n            Enabled,\n            Last\n        }\n\n        internal enum ABMsg : int\n        {\n            ABM_NEW = 0,\n            ABM_REMOVE,\n            ABM_QUERYPOS,\n            ABM_SETPOS,\n            ABM_GETSTATE,\n            ABM_GETTASKBARPOS,\n            ABM_ACTIVATE,\n            ABM_GETAUTOHIDEBAR,\n            ABM_SETAUTOHIDEBAR,\n            ABM_WINDOWPOSCHANGED,\n            ABM_SETSTATE\n        }\n        internal enum ABNotify : int\n        {\n            ABN_STATECHANGE = 0,\n            ABN_POSCHANGED,\n            ABN_FULLSCREENAPP,\n            ABN_WINDOWARRANGE\n        }\n\n        internal enum MonitorDefaultTo\n        {\n            MONITOR_DEFAULTTONULL,\n            MONITOR_DEFAULTTOPRIMARY,\n            MONITOR_DEFAULTTONEAREST\n        }\n\n        [StructLayout(LayoutKind.Sequential)]\n        internal struct MONITORINFO\n        {\n            public int cbSize;\n            public RECT rcMonitor;\n            public RECT rcWork;\n            public uint dwFlags;\n        }\n\n        [DllImport(\"SHELL32\", CallingConvention = CallingConvention.StdCall)]\n        internal static extern uint SHAppBarMessage(int dwMessage, ref APPBARDATA pData);\n\n        [DllImport(\"User32.dll\", CharSet = CharSet.Auto)]\n        internal static extern int RegisterWindowMessage(string msg);\n        \n        [DllImport(\"dwmapi.dll\")]\n        internal static extern int DwmSetWindowAttribute(IntPtr hWnd, int attr, ref int attrValue, int attrSize);\n\n        [DllImport(\"User32.dll\")]\n        internal static extern IntPtr MonitorFromWindow(IntPtr hWnd, MonitorDefaultTo dwFlags);\n\n        [DllImport(\"User32.dll\")]\n        internal static extern bool GetMonitorInfo(IntPtr hMonitor, ref MONITORINFO lpmi);\n    }\n}\n"
  },
  {
    "path": "WpfAppBar/WpfAppBar.csproj",
    "content": "<Project Sdk=\"Microsoft.NET.Sdk.WindowsDesktop\">\n  <PropertyGroup>\n    <TargetFrameworks>netcoreapp3.1;net45;net5.0-windows</TargetFrameworks>\n    <OutputType>Library</OutputType>\n    <UseWPF>true</UseWPF>\n    <Version>3.0.0.0</Version>\n    <Company>Pilip Rieck</Company>\n    <Description>Utilities for creating a Windows AppBar with WPF</Description>\n    <Copyright>Creative Commons CC0 (https://creativecommons.org/publicdomain/zero/1.0/)s</Copyright>\n  </PropertyGroup>\n\n  <!-- Conditionally obtain references for the .NET Framework 4.5 target -->\n  <ItemGroup Condition=\" '$(TargetFramework)' == 'net45' \">\n    <Reference Include=\"PresentationCore\" />\n    <Reference Include=\"PresentationFramework\" />\n    <Reference Include=\"System\" />\n    <Reference Include=\"System.Core\" />\n    <Reference Include=\"System.Xaml\" />\n\n    <PackageReference Include=\"WindowsBase\" Version=\"4.6.1055.0\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "WpfAppBar/WpfAppBar.nuspec",
    "content": "<?xml version=\"1.0\"?>\n<package >\n  <metadata>\n    <id>$id$</id>\n    <version>$version$</version>\n    <title>$title$</title>\n    <authors>$author$</authors>\n    <owners>$author$</owners>    \n    <projectUrl>https://github.com/PhilipRieck/WpfAppBar</projectUrl>    \n    <requireLicenseAcceptance>false</requireLicenseAcceptance>\n    <description>$description$</description>\n    <releaseNotes>Add support for .net core 3 (via StummeJ)</releaseNotes>\n    <copyright>Creative Commons CC0 ( https://creativecommons.org/publicdomain/zero/1.0/ )</copyright>\n    <tags>WPF AppBar</tags>\n  </metadata>\n</package>"
  },
  {
    "path": "WpfAppBar.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.30110.0\nMinimumVisualStudioVersion = 10.0.40219.1\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"WpfAppBar\", \"WpfAppBar\\WpfAppBar.csproj\", \"{86F999C7-4543-41DE-8E6D-9AB41AC0FF8E}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"AppBarExample\", \"AppBarExample\\AppBarExample.csproj\", \"{6FA45981-2F56-4B8A-911F-DC515FB0D980}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{86F999C7-4543-41DE-8E6D-9AB41AC0FF8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{86F999C7-4543-41DE-8E6D-9AB41AC0FF8E}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{86F999C7-4543-41DE-8E6D-9AB41AC0FF8E}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{86F999C7-4543-41DE-8E6D-9AB41AC0FF8E}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{6FA45981-2F56-4B8A-911F-DC515FB0D980}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{6FA45981-2F56-4B8A-911F-DC515FB0D980}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{6FA45981-2F56-4B8A-911F-DC515FB0D980}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{6FA45981-2F56-4B8A-911F-DC515FB0D980}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  }
]