diff --git a/CrazyCoder/App.xaml b/CrazyCoder/App.xaml
new file mode 100644
index 0000000..f9994a1
--- /dev/null
+++ b/CrazyCoder/App.xaml
@@ -0,0 +1,9 @@
+<Application x:Class="CrazyCoder.App"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:local="clr-namespace:CrazyCoder"
+ StartupUri="MainWindow.xaml">
+ <Application.Resources>
+
+ </Application.Resources>
+</Application>
diff --git a/CrazyCoder/App.xaml.cs b/CrazyCoder/App.xaml.cs
new file mode 100644
index 0000000..b2c372f
--- /dev/null
+++ b/CrazyCoder/App.xaml.cs
@@ -0,0 +1,109 @@
+using System;
+using System.Diagnostics;
+using System.Windows;
+using NewLife;
+using NewLife.Log;
+using NewLife.Threading;
+using Stardust;
+
+namespace CrazyCoder
+{
+ /// <summary>
+ /// App.xaml 的交互逻辑
+ /// </summary>
+ public partial class App : Application
+ {
+ public App()
+ {
+ InitializeComponent();
+ }
+
+ protected override void OnStartup(StartupEventArgs e)
+ {
+#if NET45
+ XTrace.UseWinForm();
+#endif
+
+ StartClient();
+
+ StringHelper.EnableSpeechTip = Setting.Current.SpeechTip;
+
+ if (Setting.Current.IsNew) "学无先后达者为师,欢迎使用新生命码神工具!".SpeechTip();
+
+ base.OnStartup(e);
+ }
+
+ protected override void OnExit(ExitEventArgs e)
+ {
+ _Client.Logout("ExitCode=" + e.ApplicationExitCode);
+
+ base.OnExit(e);
+ }
+
+ static TimerX _timer;
+ static StarClient _Client;
+ private static void StartClient()
+ {
+ var set = Setting.Current;
+ var server = set.Server;
+ if (server.IsNullOrEmpty()) return;
+
+ XTrace.WriteLine("初始化服务端地址:{0}", server);
+
+ var client = new StarClient(server)
+ {
+ Code = set.Code,
+ Secret = set.Secret,
+ Log = XTrace.Log,
+ };
+
+ // 登录后保存证书
+ client.OnLogined += (s, e) =>
+ {
+ var inf = client.Info;
+ if (inf != null && !inf.Code.IsNullOrEmpty())
+ {
+ set.Code = inf.Code;
+ set.Secret = inf.Secret;
+ set.Save();
+ }
+ };
+
+ // 可能需要多次尝试
+ _timer = new TimerX(TryConnectServer, client, 0, 5_000) { Async = true };
+
+ _Client = client;
+ }
+
+ private static void TryConnectServer(Object state)
+ {
+ var client = state as StarClient;
+ var set = Setting.Current;
+ client.Login().Wait();
+ CheckUpgrade(client, set.Channel);
+
+ // 登录成功,销毁定时器
+ //TimerX.Current.Period = 0;
+ _timer.TryDispose();
+ _timer = null;
+ }
+
+ private static void CheckUpgrade(StarClient client, String channel)
+ {
+ // 检查更新
+ var ur = client.Upgrade(channel).Result;
+ if (ur != null)
+ {
+ var rs = client.ProcessUpgrade(ur);
+
+ // 强制更新时,马上重启
+ if (rs && ur.Force)
+ {
+ var p = Process.GetCurrentProcess();
+ p.Close();
+ p.Kill();
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/CrazyCoder/AssemblyInfo.cs b/CrazyCoder/AssemblyInfo.cs
new file mode 100644
index 0000000..8b5504e
--- /dev/null
+++ b/CrazyCoder/AssemblyInfo.cs
@@ -0,0 +1,10 @@
+using System.Windows;
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
diff --git a/CrazyCoder/CrazyCoder.csproj b/CrazyCoder/CrazyCoder.csproj
new file mode 100644
index 0000000..f3f9a52
--- /dev/null
+++ b/CrazyCoder/CrazyCoder.csproj
@@ -0,0 +1,71 @@
+<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
+
+ <PropertyGroup>
+ <OutputType>WinExe</OutputType>
+ <TargetFrameworks>net45;netcoreapp3.1</TargetFrameworks>
+ <UseWPF>true</UseWPF>
+ <AssemblyTitle>新生命码神工具</AssemblyTitle>
+ <Description>众多开发者工具</Description>
+ <Company>新生命开发团队</Company>
+ <Copyright>©2002-2020 新生命开发团队</Copyright>
+ <Version>8.0.2020.0505</Version>
+ <FileVersion>8.0.2020.0505</FileVersion>
+ <AssemblyVersion>8.0.*</AssemblyVersion>
+ <Deterministic>false</Deterministic>
+ <ApplicationIcon>Images\leaf.ico</ApplicationIcon>
+ <OutputPath>..\Bin\</OutputPath>
+ <DebugType>pdbonly</DebugType>
+ <Optimize>true</Optimize>
+ <DefineConstants>TRACE</DefineConstants>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(Configuration)'=='Debug'">
+ <DefineConstants>$(DefineConstants);DEBUG</DefineConstants>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(TargetFramework)'=='net45'">
+ <DefineConstants>$(DefineConstants);__WIN__;NET45</DefineConstants>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(TargetFramework)'=='netcoreapp3.1'">
+ <DefineConstants>$(DefineConstants);__WIN__;NC30;__CORE__</DefineConstants>
+ </PropertyGroup>
+ <ItemGroup>
+ <None Remove="Images\leaf.ico" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="NewLife.Core" Version="8.7.2020.501" />
+ <PackageReference Include="NewLife.Stardust" Version="1.0.2020.501" />
+ <PackageReference Include="NewLife.XCode" Version="9.17.2020.501" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Resource Include="Images\leaf.ico">
+ <CopyToOutputDirectory>Never</CopyToOutputDirectory>
+ </Resource>
+ </ItemGroup>
+
+ <ItemGroup>
+ <None Remove="Images\leaf.ico" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Resource Include="Images\leaf.ico">
+ <CopyToOutputDirectory>Never</CopyToOutputDirectory>
+ </Resource>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Compile Update="Views\Regex.xaml.cs">
+ <SubType>Code</SubType>
+ </Compile>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Page Update="Views\Regex.xaml">
+ <SubType>Designer</SubType>
+ </Page>
+ </ItemGroup>
+
+</Project>
\ No newline at end of file
diff --git a/CrazyCoder/Images/leaf.ico b/CrazyCoder/Images/leaf.ico
new file mode 100644
index 0000000..31fa6dd
Binary files /dev/null and b/CrazyCoder/Images/leaf.ico differ
diff --git a/CrazyCoder/MainWindow.xaml b/CrazyCoder/MainWindow.xaml
new file mode 100644
index 0000000..ee3b0b4
--- /dev/null
+++ b/CrazyCoder/MainWindow.xaml
@@ -0,0 +1,36 @@
+<Window x:Class="CrazyCoder.MainWindow"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:local="clr-namespace:CrazyCoder"
+ mc:Ignorable="d"
+ Title="新生命码神工具" Height="450" Width="800" WindowStartupLocation="CenterScreen">
+ <Grid>
+ <Menu>
+ <MenuItem Header="开发工具">
+ <MenuItem Header="正则表达式" Click="Regex_Click"/>
+ <MenuItem Header="图标水印" Click="Ico_Click" />
+ <MenuItem Header="加密解密" Click="Security_Click"/>
+ <MenuItem Header="语音助手" Click="Speech_Click"/>
+ <Separator/>
+ <MenuItem Header="文件夹统计"/>
+ <MenuItem Header="文件编码"/>
+ </MenuItem>
+ <MenuItem Header="数据工具">
+ <MenuItem Header="数据建模"/>
+ </MenuItem>
+ <MenuItem Header="网络通信">
+ <MenuItem Header="网络工具" Click="Network_Click"/>
+ <MenuItem Header="RPC工具" />
+ <MenuItem Header="串口工具"/>
+ <MenuItem Header="地图接口"/>
+ </MenuItem>
+ <MenuItem Header="帮助">
+ <MenuItem Header="检查更新" Click="CheckUpdate_Click"/>
+ <MenuItem Header="关于" Click="About_Click"/>
+ </MenuItem>
+ </Menu>
+ <Frame x:Name="frame" NavigationUIVisibility="Visible" Margin="0,24,0,0" />
+ </Grid>
+</Window>
diff --git a/CrazyCoder/MainWindow.xaml.cs b/CrazyCoder/MainWindow.xaml.cs
new file mode 100644
index 0000000..a4c7e4f
--- /dev/null
+++ b/CrazyCoder/MainWindow.xaml.cs
@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace CrazyCoder
+{
+ /// <summary>
+ /// MainWindow.xaml 的交互逻辑
+ /// </summary>
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+ }
+
+ #region 开发工具
+ private void Regex_Click(Object sender, RoutedEventArgs e)
+ {
+ frame.Navigate("Views\\Regex.xaml");
+ }
+
+ private void Ico_Click(Object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void Security_Click(Object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void Speech_Click(Object sender, RoutedEventArgs e)
+ {
+
+ }
+ #endregion
+
+ #region 网络通信
+ private void Network_Click(Object sender, RoutedEventArgs e)
+ {
+
+ }
+ #endregion
+
+ #region 帮助
+ private void CheckUpdate_Click(Object sender, RoutedEventArgs e)
+ {
+
+ }
+
+ private void About_Click(Object sender, RoutedEventArgs e)
+ {
+ Process.Start("https://www.newlifex.com");
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/CrazyCoder/Setting.cs b/CrazyCoder/Setting.cs
new file mode 100644
index 0000000..f7d2728
--- /dev/null
+++ b/CrazyCoder/Setting.cs
@@ -0,0 +1,83 @@
+using System;
+using System.ComponentModel;
+using NewLife.Xml;
+
+namespace CrazyCoder
+{
+ [XmlConfigFile("Config\\CrazyCoder.config")]
+ public class Setting : XmlConfig<Setting>
+ {
+ #region 属性
+ /// <summary>标题</summary>
+ [Description("标题")]
+ public String Title { get; set; } = "";
+
+ /// <summary>宽度</summary>
+ [Description("宽度")]
+ public Int32 Width { get; set; }
+
+ /// <summary>高度</summary>
+ [Description("高度")]
+ public Int32 Height { get; set; }
+
+ /// <summary>顶部</summary>
+ [Description("顶部")]
+ public Int32 Top { get; set; }
+
+ /// <summary>左边</summary>
+ [Description("左边")]
+ public Int32 Left { get; set; }
+
+ /// <summary>扩展数据</summary>
+ [Description("扩展数据")]
+ public String Extend { get; set; } = "";
+
+ /// <summary>日志着色</summary>
+ [Description("日志着色")]
+ public Boolean ColorLog { get; set; } = true;
+
+ /// <summary>语音提示。默认true</summary>
+ [Description("语音提示。默认true")]
+ public Boolean SpeechTip { get; set; } = true;
+
+ /// <summary>证书</summary>
+ [Description("证书")]
+ public String Code { get; set; }
+
+ /// <summary>密钥</summary>
+ [Description("密钥")]
+ public String Secret { get; set; }
+
+ /// <summary>服务地址端口。默认为空,子网内自动发现</summary>
+ [Description("服务地址端口。默认为空,子网内自动发现")]
+ public String Server { get; set; } = "";
+
+ /// <summary>更新通道。默认Release</summary>
+ [Description("更新通道。默认Release")]
+ public String Channel { get; set; } = "Release";
+
+ /// <summary>更新服务器</summary>
+ [Description("更新服务器")]
+ public String UpdateServer { get; set; } = "";
+
+ /// <summary>最后更新时间</summary>
+ [DisplayName("最后更新时间")]
+ public DateTime LastUpdate { get; set; }
+
+ /// <summary>最后一个使用的工具</summary>
+ [DisplayName("最后一个使用的工具")]
+ public String LastTool { get; set; } = "";
+ #endregion
+
+ #region 加载/保存
+ protected override void OnLoaded()
+ {
+ if (UpdateServer.IsNullOrEmpty() || UpdateServer.EqualIgnoreCase("http://x.newlifex.com/")) UpdateServer = NewLife.Setting.Current.PluginServer;
+
+ if (Server.IsNullOrEmpty()) Server = "http://star.newlifex.com:6600";
+
+ base.OnLoaded();
+ }
+ #endregion
+ }
+}
\ No newline at end of file
diff --git a/CrazyCoder/Views/Regex.xaml b/CrazyCoder/Views/Regex.xaml
new file mode 100644
index 0000000..e843960
--- /dev/null
+++ b/CrazyCoder/Views/Regex.xaml
@@ -0,0 +1,12 @@
+<Window x:Class="CrazyCoder.Views.Regex"
+ xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
+ xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
+ xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
+ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
+ xmlns:local="clr-namespace:CrazyCoder.Views"
+ mc:Ignorable="d"
+ Title="Regex" Height="450" Width="800">
+ <Grid>
+
+ </Grid>
+</Window>
diff --git a/CrazyCoder/Views/Regex.xaml.cs b/CrazyCoder/Views/Regex.xaml.cs
new file mode 100644
index 0000000..718d9a8
--- /dev/null
+++ b/CrazyCoder/Views/Regex.xaml.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+
+namespace CrazyCoder.Views
+{
+ /// <summary>
+ /// Regex.xaml 的交互逻辑
+ /// </summary>
+ public partial class Regex : Window
+ {
+ public Regex()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git "a/\347\240\201\347\245\236\345\267\245\345\205\267.sln" "b/\347\240\201\347\245\236\345\267\245\345\205\267.sln"
index 5f73cc9..0893e23 100644
--- "a/\347\240\201\347\245\236\345\267\245\345\205\267.sln"
+++ "b/\347\240\201\347\245\236\345\267\245\345\205\267.sln"
@@ -18,7 +18,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XCoder30", "XCoder30\XCoder
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XCoderLinux", "XCoderLinux\XCoderLinux.csproj", "{8D88837E-7C35-424E-8937-6CD7CF79517E}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "X5Coder", "X5Coder\X5Coder.csproj", "{B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CrazyCoder", "CrazyCoder\CrazyCoder.csproj", "{7977C940-B198-40E3-B16A-B70080BD5E77}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -132,30 +132,30 @@ Global
{8D88837E-7C35-424E-8937-6CD7CF79517E}.Release|x64.Build.0 = Release|Any CPU
{8D88837E-7C35-424E-8937-6CD7CF79517E}.Release|x86.ActiveCfg = Release|Any CPU
{8D88837E-7C35-424E-8937-6CD7CF79517E}.Release|x86.Build.0 = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|ARM.ActiveCfg = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|ARM.Build.0 = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|iPhone.Build.0 = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|x64.ActiveCfg = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|x64.Build.0 = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|x86.ActiveCfg = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Debug|x86.Build.0 = Debug|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|Any CPU.Build.0 = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|ARM.ActiveCfg = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|ARM.Build.0 = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|iPhone.ActiveCfg = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|iPhone.Build.0 = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|x64.ActiveCfg = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|x64.Build.0 = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|x86.ActiveCfg = Release|Any CPU
- {B0EAFF38-1A6E-4ED1-9491-5C22E9734FE4}.Release|x86.Build.0 = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|ARM.Build.0 = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|x64.Build.0 = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Debug|x86.Build.0 = Debug|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|ARM.ActiveCfg = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|ARM.Build.0 = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|iPhone.Build.0 = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|x64.ActiveCfg = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|x64.Build.0 = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|x86.ActiveCfg = Release|Any CPU
+ {7977C940-B198-40E3-B16A-B70080BD5E77}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE